xuhy
2025-01-09 645434fadc468d753ef5d505f4fb80f148fbbb4d
初始化
324个文件已添加
141772 ■■■■■ 已修改文件
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/ASPJson.class.asp 271 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/MultiformProcessor.class.asp 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/PathFormatter.class.asp 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/README.md 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/Uploader.Class.asp 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/action_config.asp 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/action_crawler.asp 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/action_list.asp 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/action_upload.asp 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/config.json 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/config_loader.asp 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/controller.asp 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/anchor/anchor.html 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/attachment.css 681 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/attachment.html 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/attachment.js 754 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_chm.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_default.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_doc.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_exe.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_jpg.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_mp3.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_mv.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_pdf.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_ppt.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_psd.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_rar.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_txt.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_xls.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/alignicon.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/alignicon.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/bg.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/file-icons.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/file-icons.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/icons.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/icons.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/image.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/progress.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/success.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/success.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/background/background.css 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/background/background.html 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/background/background.js 376 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/background/images/bg.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/background/images/success.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/chart.config.js 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/charts.css 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/charts.html 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/charts.js 519 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/images/charts0.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/images/charts1.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/images/charts2.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/images/charts3.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/images/charts4.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/images/charts5.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/emotion.css 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/emotion.html 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/emotion.js 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/0.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/bface.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/cface.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/fface.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/jxface2.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/neweditor-tab-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/tface.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/wface.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/yface.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/gmap/gmap.html 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/help/help.css 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/help/help.html 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/help/help.js 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/image.css 894 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/image.html 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/image.js 1139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/alignicon.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/bg.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/icons.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/icons.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/image.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/progress.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/success.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/success.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/insertframe/insertframe.html 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/internal.js 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/link/link.html 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/map/map.html 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/map/show.html 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/music/music.css 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/music/music.html 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/music/music.js 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/preview/preview.html 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/addimg.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/brush.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/delimg.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/delimgH.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/empty.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/emptyH.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/eraser.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/redo.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/redoH.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/scale.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/scaleH.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/size.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/undo.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/undoH.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/scrawl.css 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/scrawl.html 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/scrawl.js 671 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/searchreplace/searchreplace.html 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/searchreplace/searchreplace.js 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/snapscreen/snapscreen.html 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/spechars/spechars.html 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/spechars/spechars.js 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/table/dragicon.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/table/edittable.css 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/table/edittable.html 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/table/edittable.js 237 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/table/edittd.html 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/table/edittip.html 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/config.js 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/images/bg.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/images/pre0.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/images/pre1.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/images/pre2.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/images/pre3.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/images/pre4.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/template.css 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/template.html 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/template.js 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/bg.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/center_focus.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/file-icons.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/file-icons.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/icons.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/icons.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/image.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/left_focus.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/none_focus.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/progress.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/right_focus.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/success.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/success.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/video.css 635 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/video.html 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/video.js 789 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/webapp/webapp.html 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/wordimage/fClipboard_ueditor.swf 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/wordimage/imageUploader.swf 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/wordimage/tangram.js 1495 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/wordimage/wordimage.html 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/wordimage/wordimage.js 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/index.html 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/config.json 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/controller.jsp 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/ActionEnter.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/ConfigManager.java 222 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/Encoder.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/PathFormat.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/ActionMap.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/ActionState.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/AppInfo.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/BaseState.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/FileType.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/MIMEType.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/MultiState.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/State.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/hunter/FileManager.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/hunter/ImageHunter.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/upload/Base64Uploader.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/upload/BinaryUploader.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/upload/StorageManager.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/upload/Uploader.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/en.js 684 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/addimage.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/alldeletebtnhoverskin.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/alldeletebtnupskin.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/background.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/button.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/copy.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/deletedisable.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/deleteenable.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/listbackground.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/localimage.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/music.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/rotateleftdisable.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/rotateleftenable.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/rotaterightdisable.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/rotaterightenable.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/upload.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/zh-cn/images/copy.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/zh-cn/images/localimage.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/zh-cn/images/music.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/zh-cn/images/upload.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/zh-cn/zh-cn.js 669 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/Config.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/ConfigHandler.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/CrawlerHandler.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/Handler.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/ListFileHandler.cs 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/NotSupportedHandler.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/PathFormater.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/UploadHandler.cs 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/Bin/Newtonsoft.Json.dll 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/Bin/Newtonsoft.Json.pdb 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/Bin/Newtonsoft.Json.xml 8472 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/README.md 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/Web.config 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/config.json 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/controller.ashx 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/net.sln 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/php/Uploader.class.php 349 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/php/action_crawler.php 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/php/action_list.php 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/php/action_upload.php 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/php/config.json 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/php/controller.php 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/css/ueditor.css 1903 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/css/ueditor.min.css 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/dialogbase.css 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/anchor.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/arrow.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/arrow_down.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/arrow_up.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/button-bg.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/cancelbutton.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/charts.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/cursor_h.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/cursor_h.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/cursor_v.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/cursor_v.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/dialog-title-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/filescan.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/highlighted.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/icons-all.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/icons.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/icons.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/loaderror.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/loading.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/lock.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/neweditor-tab-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/pagebreak.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/scale.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/sortable.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/spacer.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/sparator_v.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/table-cell-align.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/tangram-colorpicker.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/toolbar_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/unhighlighted.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/upload.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/videologo.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/word.gif 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/wordpaste.png 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/iframe.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/SyntaxHighlighter/shCore.js 3655 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/SyntaxHighlighter/shCoreDefault.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/codemirror/codemirror.css 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/codemirror/codemirror.js 3581 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/adapters/mootools-adapter.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/adapters/mootools-adapter.src.js 313 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/adapters/prototype-adapter.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/adapters/prototype-adapter.src.js 316 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/adapters/standalone-framework.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/adapters/standalone-framework.src.js 583 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/highcharts-more.js 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/highcharts-more.src.js 2430 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/highcharts.js 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/highcharts.src.js 16974 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/annotations.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/annotations.src.js 401 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/canvas-tools.js 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/canvas-tools.src.js 3113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/data.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/data.src.js 582 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/drilldown.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/drilldown.src.js 447 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/exporting.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/exporting.src.js 709 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/funnel.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/funnel.src.js 289 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/heatmap.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/heatmap.src.js 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/map.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/map.src.js 1002 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/no-data-to-display.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/no-data-to-display.src.js 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/themes/dark-blue.js 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/themes/dark-green.js 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/themes/gray.js 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/themes/grid.js 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/themes/skies.js 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/jquery-1.10.2.js 9789 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/jquery-1.10.2.min.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/jquery-1.10.2.min.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/snapscreen/UEditorSnapscreen.exe 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/font/vjs.eot 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/font/vjs.svg 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/font/vjs.ttf 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/font/vjs.woff 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/video-js.css 766 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/video-js.min.css 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/video-js.swf 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/video.dev.js 7108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/video.js 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/Uploader.swf 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.css 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.custom.js 5670 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.custom.min.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.flashonly.js 4176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.flashonly.min.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.html5only.js 5559 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.html5only.min.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.js 6733 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.min.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.withoutimage.js 4593 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.withoutimage.min.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/zeroclipboard/ZeroClipboard.js 1256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/zeroclipboard/ZeroClipboard.min.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/zeroclipboard/ZeroClipboard.swf 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/ueditor.all.js 29429 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/ueditor.all.min.js 709 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/ueditor.config.js 413 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/ueditor.parse.js 1022 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/ueditor.parse.min.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/ASPJson.class.asp
New file
@@ -0,0 +1,271 @@
<%
'Februari 2014 - Version 1.17 by Gerrit van Kuipers
Class AspJSON
    Public data
    Private p_JSONstring
    private aj_in_string, aj_in_escape, aj_i_tmp, aj_char_tmp, aj_s_tmp, aj_line_tmp, aj_line, aj_lines, aj_currentlevel, aj_currentkey, aj_currentvalue, aj_newlabel, aj_XmlHttp, aj_RegExp, aj_colonfound
    Private Sub Class_Initialize()
        Set data = Collection()
        Set aj_RegExp = new regexp
        aj_RegExp.Pattern = "\s{0,}(\S{1}[\s,\S]*\S{1})\s{0,}"
        aj_RegExp.Global = False
        aj_RegExp.IgnoreCase = True
        aj_RegExp.Multiline = True
    End Sub
    Private Sub Class_Terminate()
        Set data = Nothing
        Set aj_RegExp = Nothing
    End Sub
    Public Sub loadJSON(inputsource)
        inputsource = aj_MultilineTrim(inputsource)
        If Len(inputsource) = 0 Then Err.Raise 1, "loadJSON Error", "No data to load."
        select case Left(inputsource, 1)
            case "{", "["
            case else
                Set aj_XmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
                aj_XmlHttp.open "GET", inputsource, False
                aj_XmlHttp.setRequestHeader "Content-Type", "text/json"
                aj_XmlHttp.setRequestHeader "CharSet", "UTF-8"
                aj_XmlHttp.Send
                inputsource = aj_XmlHttp.responseText
                set aj_XmlHttp = Nothing
        end select
        p_JSONstring = CleanUpJSONstring(inputsource)
        aj_lines = Split(p_JSONstring, Chr(13) & Chr(10))
        Dim level(99)
        aj_currentlevel = 1
        Set level(aj_currentlevel) = data
        For Each aj_line In aj_lines
            aj_currentkey = ""
            aj_currentvalue = ""
            If Instr(aj_line, ":") > 0 Then
                aj_in_string = False
                aj_in_escape = False
                aj_colonfound = False
                For aj_i_tmp = 1 To Len(aj_line)
                    If aj_in_escape Then
                        aj_in_escape = False
                    Else
                        Select Case Mid(aj_line, aj_i_tmp, 1)
                            Case """"
                                aj_in_string = Not aj_in_string
                            Case ":"
                                If Not aj_in_escape And Not aj_in_string Then
                                    aj_currentkey = Left(aj_line, aj_i_tmp - 1)
                                    aj_currentvalue = Mid(aj_line, aj_i_tmp + 1)
                                    aj_colonfound = True
                                    Exit For
                                End If
                            Case "\"
                                aj_in_escape = True
                        End Select
                    End If
                Next
                if aj_colonfound then
                    aj_currentkey = aj_Strip(aj_JSONDecode(aj_currentkey), """")
                    If Not level(aj_currentlevel).exists(aj_currentkey) Then level(aj_currentlevel).Add aj_currentkey, ""
                end if
            End If
            If right(aj_line,1) = "{" Or right(aj_line,1) = "[" Then
                If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count
                Set level(aj_currentlevel).Item(aj_currentkey) = Collection()
                Set level(aj_currentlevel + 1) = level(aj_currentlevel).Item(aj_currentkey)
                aj_currentlevel = aj_currentlevel + 1
                aj_currentkey = ""
            ElseIf right(aj_line,1) = "}" Or right(aj_line,1) = "]" or right(aj_line,2) = "}," Or right(aj_line,2) = "]," Then
                aj_currentlevel = aj_currentlevel - 1
            ElseIf Len(Trim(aj_line)) > 0 Then
                if Len(aj_currentvalue) = 0 Then aj_currentvalue = aj_line
                aj_currentvalue = getJSONValue(aj_currentvalue)
                If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count
                level(aj_currentlevel).Item(aj_currentkey) = aj_currentvalue
            End If
        Next
    End Sub
    Public Function Collection()
        set Collection = Server.CreateObject("Scripting.Dictionary")
    End Function
    Public Function AddToCollection(dictobj)
        if TypeName(dictobj) <> "Dictionary" then Err.Raise 1, "AddToCollection Error", "Not a collection."
        aj_newlabel = dictobj.Count
        dictobj.Add aj_newlabel, Collection()
        set AddToCollection = dictobj.item(aj_newlabel)
    end function
    Private Function CleanUpJSONstring(aj_originalstring)
        aj_originalstring = Replace(aj_originalstring, Chr(13) & Chr(10), "")
        aj_originalstring = Mid(aj_originalstring, 2, Len(aj_originalstring) - 2)
        aj_in_string = False : aj_in_escape = False : aj_s_tmp = ""
        For aj_i_tmp = 1 To Len(aj_originalstring)
            aj_char_tmp = Mid(aj_originalstring, aj_i_tmp, 1)
            If aj_in_escape Then
                aj_in_escape = False
                aj_s_tmp = aj_s_tmp & aj_char_tmp
            Else
                Select Case aj_char_tmp
                    Case "\" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_escape = True
                    Case """" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_string = Not aj_in_string
                    Case "{", "["
                        aj_s_tmp = aj_s_tmp & aj_char_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10))
                    Case "}", "]"
                        aj_s_tmp = aj_s_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10)) & aj_char_tmp
                    Case "," : aj_s_tmp = aj_s_tmp & aj_char_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10))
                    Case Else : aj_s_tmp = aj_s_tmp & aj_char_tmp
                End Select
            End If
        Next
        CleanUpJSONstring = ""
        aj_s_tmp = split(aj_s_tmp, Chr(13) & Chr(10))
        For Each aj_line_tmp In aj_s_tmp
            aj_line_tmp = replace(replace(aj_line_tmp, chr(10), ""), chr(13), "")
            CleanUpJSONstring = CleanUpJSONstring & aj_Trim(aj_line_tmp) & Chr(13) & Chr(10)
        Next
    End Function
    Private Function getJSONValue(ByVal val)
        val = Trim(val)
        If Left(val,1) = ":"  Then val = Mid(val, 2)
        If Right(val,1) = "," Then val = Left(val, Len(val) - 1)
        val = Trim(val)
        Select Case val
            Case "true"  : getJSONValue = True
            Case "false" : getJSONValue = False
            Case "null" : getJSONValue = Null
            Case Else
                If (Instr(val, """") = 0) Then
                    If IsNumeric(val) Then
                        getJSONValue = CDbl(val)
                    Else
                        getJSONValue = val
                    End If
                Else
                    If Left(val,1) = """" Then val = Mid(val, 2)
                    If Right(val,1) = """" Then val = Left(val, Len(val) - 1)
                    getJSONValue = aj_JSONDecode(Trim(val))
                End If
        End Select
    End Function
    Private JSONoutput_level
    Public Function JSONoutput()
        dim wrap_dicttype, aj_label
        JSONoutput_level = 1
        wrap_dicttype = "[]"
        For Each aj_label In data
             If Not aj_IsInt(aj_label) Then wrap_dicttype = "{}"
        Next
        JSONoutput = Left(wrap_dicttype, 1) & Chr(13) & Chr(10) & GetDict(data) & Right(wrap_dicttype, 1)
    End Function
    Public Function PrintJson
        Response.AddHeader "Content-Type", "text/plain"
        If IsEmpty(Request.QueryString("callback")) Then
            Response.Write JSONoutput()
        Else
            Response.Write Request.QueryString("callback") & "(" & JSONoutput() & ")"
        End If
    End Function
    Private Function GetDict(objDict)
        dim aj_item, aj_keyvals, aj_label, aj_dicttype
        For Each aj_item In objDict
            Select Case TypeName(objDict.Item(aj_item))
                Case "Dictionary"
                    GetDict = GetDict & Space(JSONoutput_level * 4)
                    aj_dicttype = "[]"
                    For Each aj_label In objDict.Item(aj_item).Keys
                         If Not aj_IsInt(aj_label) Then aj_dicttype = "{}"
                    Next
                    If aj_IsInt(aj_item) Then
                        GetDict = GetDict & (Left(aj_dicttype,1) & Chr(13) & Chr(10))
                    Else
                        GetDict = GetDict & ("""" & aj_JSONEncode(aj_item) & """" & ": " & Left(aj_dicttype,1) & Chr(13) & Chr(10))
                    End If
                    JSONoutput_level = JSONoutput_level + 1
                    aj_keyvals = objDict.Keys
                    GetDict = GetDict & (GetSubDict(objDict.Item(aj_item)) & Space(JSONoutput_level * 4) & Right(aj_dicttype,1) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10))
                Case Else
                    aj_keyvals =  objDict.Keys
                    GetDict = GetDict & (Space(JSONoutput_level * 4) & aj_InlineIf(aj_IsInt(aj_item), "", """" & aj_JSONEncode(aj_item) & """: ") & WriteValue(objDict.Item(aj_item)) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10))
            End Select
        Next
    End Function
    Private Function aj_IsInt(val)
        aj_IsInt = (TypeName(val) = "Integer" Or TypeName(val) = "Long")
    End Function
    Private Function GetSubDict(objSubDict)
        GetSubDict = GetDict(objSubDict)
        JSONoutput_level= JSONoutput_level -1
    End Function
    Private Function WriteValue(ByVal val)
        Select Case TypeName(val)
            Case "Double", "Integer", "Long": WriteValue = val
            Case "Null"                        : WriteValue = "null"
            Case "Boolean"                    : WriteValue = aj_InlineIf(val, "true", "false")
            Case Else                        : WriteValue = """" & aj_JSONEncode(val) & """"
        End Select
    End Function
    Private Function aj_JSONEncode(ByVal val)
        val = Replace(val, "\", "\\")
        val = Replace(val, """", "\""")
        'val = Replace(val, "/", "\/")
        val = Replace(val, Chr(8), "\b")
        val = Replace(val, Chr(12), "\f")
        val = Replace(val, Chr(10), "\n")
        val = Replace(val, Chr(13), "\r")
        val = Replace(val, Chr(9), "\t")
        aj_JSONEncode = Trim(val)
    End Function
    Private Function aj_JSONDecode(ByVal val)
        val = Replace(val, "\""", """")
        val = Replace(val, "\\", "\")
        val = Replace(val, "\/", "/")
        val = Replace(val, "\b", Chr(8))
        val = Replace(val, "\f", Chr(12))
        val = Replace(val, "\n", Chr(10))
        val = Replace(val, "\r", Chr(13))
        val = Replace(val, "\t", Chr(9))
        aj_JSONDecode = Trim(val)
    End Function
    Private Function aj_InlineIf(condition, returntrue, returnfalse)
        If condition Then aj_InlineIf = returntrue Else aj_InlineIf = returnfalse
    End Function
    Private Function aj_Strip(ByVal val, stripper)
        If Left(val, 1) = stripper Then val = Mid(val, 2)
        If Right(val, 1) = stripper Then val = Left(val, Len(val) - 1)
        aj_Strip = val
    End Function
    Private Function aj_MultilineTrim(TextData)
        aj_MultilineTrim = aj_RegExp.Replace(TextData, "$1")
    End Function
    private function aj_Trim(val)
        aj_Trim = Trim(val)
        Do While Left(aj_Trim, 1) = Chr(9) : aj_Trim = Mid(aj_Trim, 2) : Loop
        Do While Right(aj_Trim, 1) = Chr(9) : aj_Trim = Left(aj_Trim, Len(aj_Trim) - 1) : Loop
        aj_Trim = Trim(aj_Trim)
    end function
End Class
%>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/MultiformProcessor.class.asp
New file
@@ -0,0 +1,138 @@
<%
' Power by Techird
' Processor Usage:
'   Set p = new MultiformProcessor
'   Set formValues = p.Process()
'   filename = formValues.Item("filename")
'   Set stream = formValues.Item("file1") // the name of the file input
'   stream.SaveToFile "upload/" & filename
'   stream.Close
Class MultiformProcessor
    Private adTypeBinary
    Private adTypeText
    Private adModeReadWrite
    Private binCtLf
    Private binCtLf2
    private Sub Class_Initialize()
        adTypeBinary = 1
        adTypeText = 2
        adModeReadWrite = 3
        binCtLf = ChrB(13) & ChrB(10)
        binCtLf2 = binCtLf & binCtLf
    End Sub
    Private Function OpenStream( optype )
        Set stream = Server.CreateObject("ADODB.Stream")
        stream.Type = optype
        stream.Mode = adModeReadWrite
        stream.Open
        Set OpenStream = stream
    End Function
    Private Function CopyStreamPart( stream, pBgn, pEnd )
        Dim iStream, oStream
        Set iStream = stream
        Set oStream = OpenStream( adTypeBinary )
        iStream.Position = pBgn
        iStream.CopyTo oStream, pEnd - pBgn
        Set CopyStreamPart = oStream
    End Function
    Private Function GetString( stream, pBgn, pEnd )
        Dim iStream, oStream
        Set iStream = stream
        Set oStream = OpenStream( adTypeBinary )
        iStream.Position = pBgn
        iStream.CopyTo oStream, pEnd - pBgn
        oStream.Position = 0
        oStream.Type = adTypeText
        oStream.Charset = GetCharset
        GetString = oStream.ReadText
        oStream.Close
    End Function
    Private Function GetCharset()
        If Charset = "" Then
            GetCharset = "utf-8"
        Else
            GetCharset = Charset
        End If
    End Function
    'See RFC 2388
    'http://www.ietf.org/rfc/rfc2388.txt
    public Function Process()
        Dim formBytes, bLen, pBgn, pEnd, header, stream
        Dim varPtn, filePtn, formValues, key, field
        formBytes = Request.BinaryRead( Request.TotalBytes )
        Set stream = OpenStream( adTypeBinary )
            stream.Write formBytes
        Set varPtn = new RegExp
            varPtn.Pattern = "(\w+?)=""(.+?)"""
            varPtn.Global = True
        Set filePtn = new RegExp
            filePtn.Pattern = "filename="
        Set formValues = Server.CreateObject("Scripting.Dictionary")
        'Find boundary
        bLen = InStrB( 1, formBytes, binCtLf ) - 1
        boundary = LeftB( formBytes, bLen )
        'Init begin pointer to byte start
        pBgn = 1
        Do
            'Find begin pointer and end pointer for block header
            pBgn = pBgn + bLen + LenB( binCtLf ) - 1
            pEnd = InStrB( pBgn, formBytes, binCtLf2 )
            'If next block not found, means all blocks processed
            If pEnd = 0 Then
                Exit Do 'Load Finished
            End If
            'Decode the headerf
            header = GetString( stream, pBgn, pEnd )
            'Test if the block is a file block
            isFileBlock = filePtn.Test( header )
            'Find begin pointer and end pointer for block content
            pBgn = pEnd + LenB(binCtLf2) - 1
            pEnd = InStrB(pBgn, formBytes, boundary) - LenB( binCtLf ) - 1
            'Extract field values from header, which like key = "filed"
            Set matches = varPtn.Execute( header )
            For Each match In matches
                key = match.SubMatches(0)
                field = match.SubMatches(1)
                'filename as a field
                If key = "filename" Then
                    formValues.Add key, field
                'name specified fields
                ElseIf key = "name" Then
                    If isFileBlock Then
                        'Resolve content as stream for fileblock
                        formValues.Add field, CopyStreamPart(stream, pBgn, pEnd)
                    Else
                        'Resolve content as string for non-fileblock
                        formValues.Add field, GetString(stream, pBgn, pEnd)
                    End If
                End If
            Next
            'Move over the begin pointer to next block
            pBgn = pEnd + LenB( binCtLf ) + 1
        Loop
        stream.Close
        Set Process = formValues
    End Function
End Class
%>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/PathFormatter.class.asp
New file
@@ -0,0 +1,81 @@
<%
Class PathFormatter
    Public Function Format( ByVal pathFormat, ByVal filename )
        Dim ext, name
        If IsEmpty( format ) Then
            format = "{yyyy}{mm}{dd}{hh}{ii}{ss}{rand:6}"
        End If
        Set invalidPattern = new RegExp
        invalidPattern.Pattern = "[\\\/\:\*\?\<\>\|""]"
        invalidPattern.Global = true
        filename = invalidPattern.Replace( filename, "" )
        ext = GetExt( filename )
        name = GetNameWithoutExt( filename )
        pathFormat = Replace( pathFormat, "{filename}", name )
        pathFormat = Replace( pathFormat, "{time}", TimeStamp() )
        pathFormat = Replace( pathFormat, "{yyyy}", Year(Now) )
        pathFormat = Replace( pathFormat, "{yy}", Year(Now) Mod 100 )
        pathFormat = Replace( pathFormat, "{mm}", LeadZero( Month(Now) ) )
        pathFormat = Replace( pathFormat, "{dd}", LeadZero( Day(Now) ) )
        pathFormat = Replace( pathFormat, "{hh}", LeadZero( Hour(Now) ) )
        pathFormat = Replace( pathFormat, "{ii}", LeadZero( Minute(Now) ) )
        pathFormat = Replace( pathFormat, "{ss}", LeadZero( Second(Now) ) )
        Set randPattern = new RegExp
        randPattern.Pattern = "{rand(\:?)(\d+)}"
        Set matches = randPattern.Execute(pathFormat)
        If matches.Count Then
            Set match = matches(0)
            digit = 6
            If match.SubMatches.Count > 1 Then
                digit = 0 + match.SubMatches(1)
            End If
            min = 1
            Do While digit > 0
                min = min * 10
                digit = digit - 1
            Loop
            max = min * 10
            pathFormat = randPattern.Replace( pathFormat, Rand( min, max ) )
        End If
        Format = pathFormat + ext
    End Function
    Private Function GetExt( file )
        GetExt = Right( file, Len(file) - InStrRev(file, ".") + 1 )
    End Function
    Private Function GetNameWithoutExt( file )
        GetNameWithoutExt = Left( file, InStrRev(file, ".") - 1 )
    End Function
    Private Function TimeStamp()
        TimeStamp = DateDiff("s", "1970-1-1 8:00:00", Now())
    End Function
    Private Function Rand( min, max )
        Randomize
        Rand = Int( (max - min + 1) * Rnd + min )
    End Function
    Private Function GetFormatedDate()
        Dim yyyy, mm, dd
        yyyy = Year(Date)
        mm = LeadZero(Month(Date))
        dd = LeadZero(Day(Date))
        GetFormatedDate = yyyy & mm & dd
    End Function
    Private Function LeadZero( number )
        If number < 10 Then
            LeadZero = "0" & number
        Else
            LeadZero = number
        End If
    End Function
End Class
%>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/README.md
New file
@@ -0,0 +1,115 @@
# UEditor ASP 支持说明
应广大用户要求,UEditor 团队在原本支持的 PHP、Java 和 .Net 的后台的基础上,推出了 ASP 后台的支持。
## 支持版本 ##
支持 UEditor 1.2.6+ 的版本
## 支持功能 ##
支持所有其他后台已支持的功能,包括:
1. 图片上传
2. 远程图片转存
3. 图片管理
4. 涂鸦上传(包括背景)
5. Word 图片转存
6. 截图上传
7. 文件上传
## 部署指南 ##
Classic ASP 一般在 IIS 上运行。其它 ASP 服务器不介绍部署方式,请自行研究。
### 配置 ###
对于 v1.4.0 之前的版本,需要修改 `ueditor.config.js`。最简单的方法,就是把文件中的 php 都替换成 asp。要修改的配置包括:
```javascript
{
     imageUrl:URL+"asp/imageUp.asp"
    ,imagePath:URL + "asp/"
    ,scrawlUrl:URL+"asp/scrawlUp.asp"
    ,scrawlPath:URL+"asp/"
    ,fileUrl:URL+"asp/fileUp.asp"
    ,filePath:URL + "asp/"
    ,catcherUrl:URL +"asp/getRemoteImage.asp"
    ,catcherPath:URL + "asp/"
    ,imageManagerUrl:URL + "asp/imageManager.asp"
    ,imageManagerPath:URL + "asp/"
    ,snapscreenServerUrl: URL +"asp/imageUp.asp"
    ,snapscreenPath: URL + "asp/"
    ,wordImageUrl:URL + "asp/imageUp.asp"
    ,wordImagePath:URL + "asp/"
    ,getMovieUrl:URL+"asp/getMovie.asp"
}
```
UEditor v1.4.0 后进行了后端的统一配置,后端相关的配置文件是 `config.json`,在具体的后台目录下。需要注意以下两个类型的配置:
```javascript
{
    "{tpl}UrlPrefix": "/ueditor/asp/",
    "{tpl}PathFormat": "upload/{tpl}/{yyyy}{mm}{dd}/{time}{rand:6}"
}
```
`{tpl}PathFormat` 是资源(图片、涂鸦、文件等)保存的位置以及文件名格式,这个路径在 ASP 中是相对运行目录的。
`{tpl}UrlPrefix` 是资源定位的基本路径,在 ASP 后台中一般设置成 ASP 的目录。
比如,IIS 中运行的 UEditor ASP 的目录为 C:\iis_pub\wwwroot\mysite\ueditor\asp,而网站的访问地址为 http://localhost/mysite/,那么你可以这样修改这两类配置项:
```javascript
{
    "{tpl}UrlPrefix": "/mysite/ueditor/asp/",
    "{tpl}PathFormat": "upload/{tpl}/{yyyy}{mm}{dd}/{time}{rand:6}"
}
```
### 在 IIS 6.X 中部署
IIS 的安装在这里不介绍,请自行查阅相关资料。
1. 启用 ASP 拓展
    * 打开 IIS 管理器
    * 展开本地计算机
    * 选中 Web 服务拓展
    * 允许 Active Server Pages 拓展
2. 配置网站脚本执行权限(如果使用虚拟路径,请跳过本步骤)
    * 在网站上右击,点属性
    * 切换到主目录选项卡,勾选*读取*、*写入*两个权限,并且*执行权限*选择*纯脚本*
    * 点确定
3. 使用虚拟路径
    * 在网站上右击,点*新建* - *虚拟路径*
    * 按照向导填写名称和路径
    * 勾选*读取*、*执行脚本*和*写入*三个权限
    * 完成虚拟目录的创建
4. 配置脚本执行身份
    * 在网站或虚拟路径上右击,点属性
    * 选择*目录安全性*选项卡
    * 在*身份验证和访问控制*中点击*编辑*
    * 勾选*启用匿名访问*,点击用户名后面的*浏览*
    * 输入*administrator*点确定
    * 输入*administrator*账号的密码
    * 点击确定,再确认一次密码
5. 设置最大 HTTP 请求大小限制
    * 找到位于 C:\Windows\System32\Inetsrv 中的 metabase.XML,打开,查找ASPMaxRequestEntityAllowed,修改为需要的值(如10240000 即 10M)
    > ASP 文件中也有上传文件大小的限制,不过先验证的限制是 IIS 中设置的,所以如果 IIS 中设置最大 256K,那么就算 ASP 中设置了最大 10M,那么超过 256K 的文件也无法上传,而且 ASP 没法给出错误信息。
### 在 IIS 7.X 中部署
IIS7 默认不安装 ASP,需要手动添加进去。添加方法请读者自行查阅。
1. 配置脚本执行身份
    * 选中网站或者应用程序
    * 双击 IIS 中的*身份验证*
    * 双击匿名身份验证
    * 填写*administrator*的用户名和密码,确定
2. 设置最大 HTTP 请求大小限制
    * 打开 IIS 控制台
    * 双击 ASP,展开*限制属性*,修改*醉倒请求实体主体限制*为需要的值(如10240000 即 10M)
    > ASP 文件中也有上传文件大小的限制,不过先验证的限制是 IIS 中设置的,所以如果 IIS 中设置最大 256K,那么就算 ASP 中设置了最大 10M,那么超过 256K 的文件也无法上传,而且 ASP 没法给出错误信息。
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/Uploader.Class.asp
New file
@@ -0,0 +1,219 @@
<!--#include file="PathFormatter.class.asp"-->
<!--#include file="MultiformProcessor.class.asp"-->
<%
' ASP 文件上传类
' Author: techird
' Email: techird@qq.com
'配置
'MAX_SIZE 在这里设定了之后如果出现大上传失败,请执行以下步骤
'IIS 6
    '找到位于 C:\Windows\System32\Inetsrv 中的 metabase.XML 打开,找到ASPMaxRequestEntityAllowed 把他修改为需要的值(如10240000即10M)
'IIS 7
    '打开IIS控制台,选择 ASP,在限制属性里有一个“最大请求实体主题限制”,设置需要的值
CURRENT_ENCODING = "gb2312"
Class Uploader
    '上传配置
    Private cfgMaxSize
    Private cfgAllowType
    Private cfgPathFormat
    Private cfgFileField
    '上传返回信息
    Private stateString
    Private rsOriginalFileName
    Private rsFilePath
    Private rsFileName
    Private rsFileSize
    Private rsState
    Private rsFormValues
    Private Sub Class_Initialize
        Set stateString = Server.CreateObject("Scripting.Dictionary")
        stateString.Add "SIZE_LIMIT_EXCCEED", "File size exceeded!"
        stateString.Add "TYPE_NOW_ALLOW", "File type not allowed!"
    End Sub
    Public Property Let MaxSize(ByVal size)
        cfgMaxSize = size
    End Property
    Public Property Let AllowType(ByVal types)
        Set cfgAllowType = types
    End Property
    Public Property Let PathFormat(ByVal format)
        cfgPathFormat = format
    End Property
    Public Property Let FileField(ByVal field)
        cfgFileField = field
    End Property
    Public Property Get OriginalFileName
        OriginalFileName = rsOriginalFileName
    End Property
    Public Property Get FileName
        FileName = rsFileName
    End Property
    Public Property Get FilePath
        FilePath = rsFilePath
    End Property
    Public Property Get FileSize
        FileSize = rsFileSize
    End Property
    Public Property Get State
        State = rsState
    End Property
    Public Property Get FormValues
        Set FormValues = rsFormValues
    End Property
    Public Function UploadForm()
        ProcessForm()
        SaveFile()
    End Function
    Public Function ProcessForm()
        Set processor = new MultiformProcessor
        Set rsFormValues = processor.Process()
    End Function
    Public Function SaveFile()
        Dim stream, filename
        Set stream = rsFormValues.Item( cfgFileField )
        filename = rsFormValues.Item( "filename" )
        DoUpload stream, filename
    End Function
    Public Function UploadBase64( filename )
        Dim stream, content
        content = Request.Item ( cfgFileField )
        Set stream = Base64Decode( content )
        DoUpload stream, filename
    End Function
    Public Function UploadRemote( url )
        Dim stream, filename
        filename = Right( url, Len(url) - InStrRev(url, "/") )
        Set stream = CrawlImage( url )
        If Not IsNull(stream) Then
            DoUpload stream, filename
        Else
            rsState = "Failed"
        End If
        Set stream = Nothing
    End Function
    Private Function DoUpload( stream, filename )
        rsFileSize = stream.Size
        If rsFileSize > cfgMaxSize Then
            rsState = stateString.Item( "SIZE_LIMIT_EXCCEED" )
            Exit Function
        End If
        rsOriginalFileName = filename
        fileType = GetExt(filename)
        If CheckExt(fileType) = False Then
            rsState = stateString.Item( "TYPE_NOW_ALLOW" )
            Exit Function
        End If
        Set formatter = new PathFormatter
        rsFilePath = formatter.format( cfgPathFormat, filename )
        savePath = Server.MapPath(rsFilePath)
        CheckOrCreatePath(  GetDirectoryName(savePath) )
        stream.SaveToFile savePath
        stream.Close
        rsState = "SUCCESS"
    End Function
    Private Function GetDirectoryName(path)
        GetDirectoryName = Left( path, InStrRev(path, "\") )
    End Function
    Private Function Base64Decode( content )
        dim xml, stream, node
        Set xml = Server.CreateObject("MSXML2.DOMDocument")
        Set stream = Server.CreateObject("ADODB.Stream")
        Set node = xml.CreateElement("tmpNode")
        node.dataType = "bin.base64"
        node.Text = content
        stream.Charset = CURRENT_ENCODING
        stream.Type = 1
        stream.Open()
        stream.Write( node.nodeTypedValue )
        Set Base64Decode = stream
        Set node = Nothing
        Set stream = Nothing
        Set xml = Nothing
    End Function
    Private Function CrawlImage( url )
        Dim http, stream
        Set http = Server.CreateObject("Microsoft.XMLHTTP")
        http.Open "GET", url, false
        http.Send
        If http.Status = 200 Then
            Set stream = Server.CreateObject("ADODB.Stream")
            stream.Type = 1
            stream.Open()
            stream.Write http.ResponseBody
            Set CrawlImage = stream
        Else
            Set CrawlImage = null
        End If
        Set http = Nothing
    End Function
    Private Function CheckExt( fileType )
        If IsEmpty (cfgAllowType) Then
            CheckExt = true
             Exit Function
        End If
        For Each ext In cfgAllowType
            If UCase(fileType) = UCase(cfgAllowType.Item(ext)) Then
                CheckExt = true
                Exit Function
            End If
        Next
        CheckExt = false
    End Function
    Private Function GetExt( file )
        GetExt = Right( file, Len(file) - InStrRev(file, ".") + 1 )
    End Function
    Private Function CheckOrCreatePath( ByVal path )
        Set fs = Server.CreateObject("Scripting.FileSystemObject")
        Dim parts
        parts = Split( path, "\" )
        path = ""
        For Each part in parts
            path = path + part + "\"
            If fs.FolderExists( path ) = False Then
                fs.CreateFolder( path )
            End If
        Next
    End Function
End Class
%>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/action_config.asp
New file
@@ -0,0 +1,9 @@
<!--#include file="ASPJson.class.asp"-->
<!--#include file="config_loader.asp"-->
<%
    Set json = new ASPJson
    Set json.data = config
    json.PrintJson()
%>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/action_crawler.asp
New file
@@ -0,0 +1,32 @@
<!--#include file="ASPJson.class.asp"-->
<!--#include file="config_loader.asp"-->
<!--#include file="Uploader.class.asp"-->
<%
    Set up = new Uploader
    up.MaxSize = config.Item("catcherMaxSize")
    up.AllowType = config.Item("catcherAllowFiles")
    up.PathFormat = config.Item("catcherPathFormat")
    urls = Split(Request.Item("source[]"), ", ")
    Set list = new ASPJson.Collection
    For i = 0 To UBound(urls)
        up.UploadRemote( urls(i) )
        Dim instance
        Set instance = new ASPJson.Collection
        instance.Add "state", up.State
        instance.Add "url", up.FilePath
        instance.Add "source", urls(i)
        list.Add i, instance
    Next
    Set json = new ASPJson
    With json.data
        .Add "state", "SUCCESS"
        .Add "list", list
    End With
    json.PrintJson()
%>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/action_list.asp
New file
@@ -0,0 +1,81 @@
<!--#include file="ASPJson.class.asp"-->
<!--#include file="config_loader.asp"-->
<%
    listTemplateName = Session.Value("ueditor_asp_listTemplateName")
    start = CInt(Request.Item("start"))
    size = CInt(Request.Item("size"))
    total = 0
    If size < 0 Then
        size = CInt(config.Item( listTemplateName + "ManagerListSize" ))
    End If
    path = config.Item( listTemplateName + "ManagerListPath" )
    Set extensions = config.Item( listTemplateName + "ManagerAllowFiles")
    Set list = new ASPJson.Collection
    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    If fso.FolderExists(Server.MapPath(path)) = False Then
        state = "找不到目录:" + path
    Else
        Set all = ListAllFilesInFolder( fso, path )
        total = all.Count
        index = 0
        For Each file in all
            If index >= start And index < start + size Then
                Dim fileObject
                Set fileObject = new ASPJson.Collection
                fileObject.Add "url", file
                list.Add index - start, fileObject
            End If
            index = index + 1
        Next
        state = "SUCCESS"
    End If
    Set json = new ASPJson
    With json.data
        .Add "state", state
        .Add "list", list
        .Add "start", start
        .Add "size", size
        .Add "total", total
    End With
    json.PrintJson()
    Function ListAllFilesInFolder( fso, path )
        Dim list
        Set list = Server.CreateObject("Scripting.Dictionary")
        Set folder = fso.GetFolder(Server.MapPath(path))
        For Each file In folder.Files
            If CheckExt(file.Name) Then
                list.Add path & "/" & file.Name, true
            End If
        Next
        For Each subFolder In folder.SubFolders
            Set subList = ListAllFilesInFolder( fso, path & "/" & subFolder.Name )
            For Each subListFile In subList
                list.Add subListFile, true
            Next
        Next
        Set ListAllFilesInFolder = list
    End Function
    Function CheckExt( filename )
        For Each ext In extensions
            If UCase(GetExt(filename)) = UCase(extensions.Item(ext)) Then
                CheckExt = true
                Exit Function
            End If
        Next
        CheckExt = false
    End Function
    Function GetExt( file )
        GetExt = Right( file, Len(file) - InStrRev(file, ".") + 1 )
    End Function
%>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/action_upload.asp
New file
@@ -0,0 +1,29 @@
<!--#include file="ASPJson.class.asp"-->
<!--#include file="config_loader.asp"-->
<!--#include file="Uploader.class.asp"-->
<%
    uploadTemplateName = Session.Value("ueditor_asp_uploadTemplateName")
    Set up = new Uploader
    up.MaxSize = config.Item( uploadTemplateName & "MaxSize" )
    up.FileField = config.Item( uploadTemplateName & "FieldName" )
    up.PathFormat = config.Item( uploadTemplateName & "PathFormat" )
    If Not IsEmpty( Session.Value("base64Upload") ) Then
        up.UploadBase64( Session.Value("base64Upload") )
    Else
        up.AllowType = config.Item( uploadTemplateName & "AllowFiles" )
        up.UploadForm()
    End If
    Set json = new ASPJson
    With json.data
        .Add "url", up.FilePath
        .Add "original", up.OriginalFileName
        .Add "state", up.State
        .Add "title", up.OriginalFileName
    End With
    json.PrintJson()
%>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/config.json
New file
@@ -0,0 +1,94 @@
/* 前后端通信相关的配置,注释只允许使用多行方式 */
{
    /* 上传图片配置项 */
    "imageActionName": "uploadimage", /* 执行上传图片的action名称 */
    "imageFieldName": "upfile", /* 提交的图片表单名称 */
    "imageMaxSize": 2048000, /* 上传大小限制,单位B */
    "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
    "imageCompressEnable": true, /* 是否压缩图片,默认是true */
    "imageCompressBorder": 1600, /* 图片压缩最长边限制 */
    "imageInsertAlign": "none", /* 插入的图片浮动方式 */
    "imageUrlPrefix": "/ueditor/asp/", /* 图片访问路径前缀 */
    "imagePathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
                                /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
                                /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
                                /* {time} 会替换成时间戳 */
                                /* {yyyy} 会替换成四位年份 */
                                /* {yy} 会替换成两位年份 */
                                /* {mm} 会替换成两位月份 */
                                /* {dd} 会替换成两位日期 */
                                /* {hh} 会替换成两位小时 */
                                /* {ii} 会替换成两位分钟 */
                                /* {ss} 会替换成两位秒 */
                                /* 非法字符 \ : * ? " < > | */
                                /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */
    /* 涂鸦图片上传配置项 */
    "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */
    "scrawlFieldName": "upfile", /* 提交的图片表单名称 */
    "scrawlPathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */
    "scrawlUrlPrefix": "/ueditor/asp/", /* 图片访问路径前缀 */
    "scrawlInsertAlign": "none",
    /* 截图工具上传 */
    "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */
    "snapscreenPathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "snapscreenUrlPrefix": "/ueditor/asp/", /* 图片访问路径前缀 */
    "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */
    /* 抓取远程图片配置 */
    "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
    "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */
    "catcherFieldName": "source", /* 提交的图片列表表单名称 */
    "catcherPathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "catcherUrlPrefix": "/ueditor/asp/", /* 图片访问路径前缀 */
    "catcherMaxSize": 2048000, /* 上传大小限制,单位B */
    "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */
    /* 上传视频配置 */
    "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */
    "videoFieldName": "upfile", /* 提交的视频表单名称 */
    "videoPathFormat": "upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "videoUrlPrefix": "/ueditor/asp/", /* 视频访问路径前缀 */
    "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */
    "videoAllowFiles": [
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */
    /* 上传文件配置 */
    "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */
    "fileFieldName": "upfile", /* 提交的文件表单名称 */
    "filePathFormat": "upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "fileUrlPrefix": "/ueditor/asp/", /* 文件访问路径前缀 */
    "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */
    "fileAllowFiles": [
        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
    ], /* 上传文件格式显示 */
    /* 列出指定目录下的图片 */
    "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */
    "imageManagerListPath": "upload/image", /* 指定要列出图片的目录 */
    "imageManagerListSize": 20, /* 每次列出文件数量 */
    "imageManagerUrlPrefix": "/ueditor/asp/", /* 图片访问路径前缀 */
    "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
    "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */
    /* 列出指定目录下的文件 */
    "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
    "fileManagerListPath": "upload/file", /* 指定要列出文件的目录 */
    "fileManagerUrlPrefix": "/ueditor/asp/", /* 文件访问路径前缀 */
    "fileManagerListSize": 20, /* 每次列出文件数量 */
    "fileManagerAllowFiles": [
        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
    ] /* 列出的文件类型 */
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/config_loader.asp
New file
@@ -0,0 +1,21 @@
<%
    Set json = new ASPJson
    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    Set stream = Server.CreateObject("ADODB.Stream")
    stream.Open()
    stream.Charset = "UTF-8"
    stream.LoadFromFile Server.MapPath( "config.json" )
    content = stream.ReadText()
    Set commentPattern = new RegExp
    commentPattern.Multiline = true
    commentPattern.Pattern = "/\*[\s\S]+?\*/"
    commentPattern.Global = true
    content = commentPattern.Replace(content, "")
    json.loadJSON( content )
    Set config = json.data
%>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/asp/controller.asp
New file
@@ -0,0 +1,44 @@
<%@ LANGUAGE="VBSCRIPT" CODEPAGE="65001" %>
<%
    action = Request.Item("action")
    Session.Contents.Remove("ueditor_asp_uploadTemplateName")
    Session.Contents.Remove("ueditor_asp_base64Upload")
    Session.Contents.Remove("ueditor_asp_listTemplateName")
    Select Case action
        Case "config"
            Server.Execute("action_config.asp")
        Case "uploadimage"
            Session.Value("ueditor_asp_uploadTemplateName") = "image"
            Server.Execute("action_upload.asp")
        Case "uploadscrawl"
            Session.Value("ueditor_asp_uploadTemplateName") = "scrawl"
            Session.Value("base64Upload") = "scrawl.png"
            Server.Execute("action_upload.asp")
        Case "uploadvideo"
            Session.Value("ueditor_asp_uploadTemplateName") = "video"
            Server.Execute("action_upload.asp")
        Case "uploadfile"
            Session.Value("ueditor_asp_uploadTemplateName") = "file"
            Server.Execute("action_upload.asp")
        Case "listimage"
            Session.Value("ueditor_asp_listTemplateName") = "image"
            Server.Execute("action_list.asp")
        Case "listfile"
            Session.Value("ueditor_asp_listTemplateName") = "file"
            Server.Execute("action_list.asp")
        Case "catchimage"
            Server.Execute("action_crawler.asp")
    End Select
%>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/anchor/anchor.html
New file
@@ -0,0 +1,40 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
        <style type="text/css">
            *{color: #838383;margin: 0;padding: 0}
            html,body {font-size: 12px;overflow: hidden; }
            .content{padding:5px 0 0 15px;}
            input{width:210px;height:21px;line-height:21px;margin-left: 4px;}
        </style>
    </head>
    <body>
        <div class="content">
            <span><var id="lang_input_anchorName"></var></span><input id="anchorName"  value="" />
        </div>
        <script type="text/javascript" src="../internal.js"></script>
        <script type="text/javascript">
            var anchorInput = $G('anchorName'),
                node = editor.selection.getRange().getClosedNode();
            if(node && node.tagName == 'IMG' && (node = node.getAttribute('anchorname'))){
                anchorInput.value = node;
            }
            anchorInput.onkeydown = function(evt){
                evt = evt || window.event;
                if(evt.keyCode == 13){
                    editor.execCommand('anchor', anchorInput.value);
                    dialog.close();
                    domUtils.preventDefault(evt)
                }
            };
            dialog.onok = function (){
                editor.execCommand('anchor', anchorInput.value);
                dialog.close();
            };
            $focus(anchorInput);
        </script>
    </body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/attachment.css
New file
@@ -0,0 +1,681 @@
@charset "utf-8";
/* dialog样式 */
.wrapper {
    zoom: 1;
    width: 630px;
    *width: 626px;
    height: 380px;
    margin: 0 auto;
    padding: 10px;
    position: relative;
    font-family: sans-serif;
}
/*tab样式框大小*/
.tabhead {
    float:left;
}
.tabbody {
    width: 100%;
    height: 346px;
    position: relative;
    clear: both;
}
.tabbody .panel {
    position: absolute;
    width: 0;
    height: 0;
    background: #fff;
    overflow: hidden;
    display: none;
}
.tabbody .panel.focus {
    width: 100%;
    height: 346px;
    display: block;
}
/* 上传附件 */
.tabbody #upload.panel {
    width: 0;
    height: 0;
    overflow: hidden;
    position: absolute !important;
    clip: rect(1px, 1px, 1px, 1px);
    background: #fff;
    display: block;
}
.tabbody #upload.panel.focus {
    width: 100%;
    height: 346px;
    display: block;
    clip: auto;
}
#upload .queueList {
    margin: 0;
    width: 100%;
    height: 100%;
    position: absolute;
    overflow: hidden;
}
#upload p {
    margin: 0;
}
.element-invisible {
    width: 0 !important;
    height: 0 !important;
    border: 0;
    padding: 0;
    margin: 0;
    overflow: hidden;
    position: absolute !important;
    clip: rect(1px, 1px, 1px, 1px);
}
#upload .placeholder {
    margin: 10px;
    border: 2px dashed #e6e6e6;
    *border: 0px dashed #e6e6e6;
    height: 172px;
    padding-top: 150px;
    text-align: center;
    background: url(./images/image.png) center 70px no-repeat;
    color: #cccccc;
    font-size: 18px;
    position: relative;
    top:0;
    *top: 10px;
}
#upload .placeholder .webuploader-pick {
    font-size: 18px;
    background: #00b7ee;
    border-radius: 3px;
    line-height: 44px;
    padding: 0 30px;
    *width: 120px;
    color: #fff;
    display: inline-block;
    margin: 0 auto 20px auto;
    cursor: pointer;
    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
}
#upload .placeholder .webuploader-pick-hover {
    background: #00a2d4;
}
#filePickerContainer {
    text-align: center;
}
#upload .placeholder .flashTip {
    color: #666666;
    font-size: 12px;
    position: absolute;
    width: 100%;
    text-align: center;
    bottom: 20px;
}
#upload .placeholder .flashTip a {
    color: #0785d1;
    text-decoration: none;
}
#upload .placeholder .flashTip a:hover {
    text-decoration: underline;
}
#upload .placeholder.webuploader-dnd-over {
    border-color: #999999;
}
#upload .filelist {
    list-style: none;
    margin: 0;
    padding: 0;
    overflow-x: hidden;
    overflow-y: auto;
    position: relative;
    height: 300px;
}
#upload .filelist:after {
    content: '';
    display: block;
    width: 0;
    height: 0;
    overflow: hidden;
    clear: both;
}
#upload .filelist li {
    width: 113px;
    height: 113px;
    background: url(./images/bg.png);
    text-align: center;
    margin: 9px 0 0 9px;
    *margin: 6px 0 0 6px;
    position: relative;
    display: block;
    float: left;
    overflow: hidden;
    font-size: 12px;
}
#upload .filelist li p.log {
    position: relative;
    top: -45px;
}
#upload .filelist li p.title {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    top: 5px;
    text-indent: 5px;
    text-align: left;
}
#upload .filelist li p.progress {
    position: absolute;
    width: 100%;
    bottom: 0;
    left: 0;
    height: 8px;
    overflow: hidden;
    z-index: 50;
    margin: 0;
    border-radius: 0;
    background: none;
    -webkit-box-shadow: 0 0 0;
}
#upload .filelist li p.progress span {
    display: none;
    overflow: hidden;
    width: 0;
    height: 100%;
    background: #1483d8 url(./images/progress.png) repeat-x;
    -webit-transition: width 200ms linear;
    -moz-transition: width 200ms linear;
    -o-transition: width 200ms linear;
    -ms-transition: width 200ms linear;
    transition: width 200ms linear;
    -webkit-animation: progressmove 2s linear infinite;
    -moz-animation: progressmove 2s linear infinite;
    -o-animation: progressmove 2s linear infinite;
    -ms-animation: progressmove 2s linear infinite;
    animation: progressmove 2s linear infinite;
    -webkit-transform: translateZ(0);
}
@-webkit-keyframes progressmove {
    0% {
        background-position: 0 0;
    }
    100% {
        background-position: 17px 0;
    }
}
@-moz-keyframes progressmove {
    0% {
        background-position: 0 0;
    }
    100% {
        background-position: 17px 0;
    }
}
@keyframes progressmove {
    0% {
        background-position: 0 0;
    }
    100% {
        background-position: 17px 0;
    }
}
#upload .filelist li p.imgWrap {
    position: relative;
    z-index: 2;
    line-height: 113px;
    vertical-align: middle;
    overflow: hidden;
    width: 113px;
    height: 113px;
    -webkit-transform-origin: 50% 50%;
    -moz-transform-origin: 50% 50%;
    -o-transform-origin: 50% 50%;
    -ms-transform-origin: 50% 50%;
    transform-origin: 50% 50%;
    -webit-transition: 200ms ease-out;
    -moz-transition: 200ms ease-out;
    -o-transition: 200ms ease-out;
    -ms-transition: 200ms ease-out;
    transition: 200ms ease-out;
}
#upload .filelist li p.imgWrap.notimage {
    margin-top: 0;
    width: 111px;
    height: 111px;
    border: 1px #eeeeee solid;
}
#upload .filelist li p.imgWrap.notimage i.file-preview {
    margin-top: 15px;
}
#upload .filelist li img {
    width: 100%;
}
#upload .filelist li p.error {
    background: #f43838;
    color: #fff;
    position: absolute;
    bottom: 0;
    left: 0;
    height: 28px;
    line-height: 28px;
    width: 100%;
    z-index: 100;
    display:none;
}
#upload .filelist li .success {
    display: block;
    position: absolute;
    left: 0;
    bottom: 0;
    height: 40px;
    width: 100%;
    z-index: 200;
    background: url(./images/success.png) no-repeat right bottom;
    background-image: url(./images/success.gif) \9;
}
#upload .filelist li.filePickerBlock {
    width: 113px;
    height: 113px;
    background: url(./images/image.png) no-repeat center 12px;
    border: 1px solid #eeeeee;
    border-radius: 0;
}
#upload .filelist li.filePickerBlock div.webuploader-pick  {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    opacity: 0;
    background: none;
    font-size: 0;
}
#upload .filelist div.file-panel {
    position: absolute;
    height: 0;
    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0;
    background: rgba(0, 0, 0, 0.5);
    width: 100%;
    top: 0;
    left: 0;
    overflow: hidden;
    z-index: 300;
}
#upload .filelist div.file-panel span {
    width: 24px;
    height: 24px;
    display: inline;
    float: right;
    text-indent: -9999px;
    overflow: hidden;
    background: url(./images/icons.png) no-repeat;
    background: url(./images/icons.gif) no-repeat \9;
    margin: 5px 1px 1px;
    cursor: pointer;
    -webkit-tap-highlight-color: rgba(0,0,0,0);
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
#upload .filelist div.file-panel span.rotateLeft {
    display:none;
    background-position: 0 -24px;
}
#upload .filelist div.file-panel span.rotateLeft:hover {
    background-position: 0 0;
}
#upload .filelist div.file-panel span.rotateRight {
    display:none;
    background-position: -24px -24px;
}
#upload .filelist div.file-panel span.rotateRight:hover {
    background-position: -24px 0;
}
#upload .filelist div.file-panel span.cancel {
    background-position: -48px -24px;
}
#upload .filelist div.file-panel span.cancel:hover {
    background-position: -48px 0;
}
#upload .statusBar {
    height: 45px;
    border-bottom: 1px solid #dadada;
    margin: 0 10px;
    padding: 0;
    line-height: 45px;
    vertical-align: middle;
    position: relative;
}
#upload .statusBar .progress {
    border: 1px solid #1483d8;
    width: 198px;
    background: #fff;
    height: 18px;
    position: absolute;
    top: 12px;
    display: none;
    text-align: center;
    line-height: 18px;
    color: #6dbfff;
    margin: 0 10px 0 0;
}
#upload .statusBar .progress span.percentage {
    width: 0;
    height: 100%;
    left: 0;
    top: 0;
    background: #1483d8;
    position: absolute;
}
#upload .statusBar .progress span.text {
    position: relative;
    z-index: 10;
}
#upload .statusBar .info {
    display: inline-block;
    font-size: 14px;
    color: #666666;
}
#upload .statusBar .btns {
    position: absolute;
    top: 7px;
    right: 0;
    line-height: 30px;
}
#filePickerBtn {
    display: inline-block;
    float: left;
}
#upload .statusBar .btns .webuploader-pick,
#upload .statusBar .btns .uploadBtn,
#upload .statusBar .btns .uploadBtn.state-uploading,
#upload .statusBar .btns .uploadBtn.state-paused {
    background: #ffffff;
    border: 1px solid #cfcfcf;
    color: #565656;
    padding: 0 18px;
    display: inline-block;
    border-radius: 3px;
    margin-left: 10px;
    cursor: pointer;
    font-size: 14px;
    float: left;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
#upload .statusBar .btns .webuploader-pick-hover,
#upload .statusBar .btns .uploadBtn:hover,
#upload .statusBar .btns .uploadBtn.state-uploading:hover,
#upload .statusBar .btns .uploadBtn.state-paused:hover {
    background: #f0f0f0;
}
#upload .statusBar .btns .uploadBtn,
#upload .statusBar .btns .uploadBtn.state-paused{
    background: #00b7ee;
    color: #fff;
    border-color: transparent;
}
#upload .statusBar .btns .uploadBtn:hover,
#upload .statusBar .btns .uploadBtn.state-paused:hover{
    background: #00a2d4;
}
#upload .statusBar .btns .uploadBtn.disabled {
    pointer-events: none;
    filter:alpha(opacity=60);
    -moz-opacity:0.6;
    -khtml-opacity: 0.6;
    opacity: 0.6;
}
/* 图片管理样式 */
#online {
    width: 100%;
    height: 336px;
    padding: 10px 0 0 0;
}
#online #fileList{
    width: 100%;
    height: 100%;
    overflow-x: hidden;
    overflow-y: auto;
    position: relative;
}
#online ul {
    display: block;
    list-style: none;
    margin: 0;
    padding: 0;
}
#online li {
    float: left;
    display: block;
    list-style: none;
    padding: 0;
    width: 113px;
    height: 113px;
    margin: 0 0 9px 9px;
    *margin: 0 0 6px 6px;
    background-color: #eee;
    overflow: hidden;
    cursor: pointer;
    position: relative;
}
#online li.clearFloat {
    float: none;
    clear: both;
    display: block;
    width:0;
    height:0;
    margin: 0;
    padding: 0;
}
#online li img {
    cursor: pointer;
}
#online li div.file-wrapper {
    cursor: pointer;
    position: absolute;
    display: block;
    width: 111px;
    height: 111px;
    border: 1px solid #eee;
    background: url("./images/bg.png") repeat;
}
#online li div span.file-title{
    display: block;
    padding: 0 3px;
    margin: 3px 0 0 0;
    font-size: 12px;
    height: 13px;
    color: #555555;
    text-align: center;
    width: 107px;
    white-space: nowrap;
    word-break: break-all;
    overflow: hidden;
    text-overflow: ellipsis;
}
#online li .icon {
    cursor: pointer;
    width: 113px;
    height: 113px;
    position: absolute;
    top: 0;
    left: 0;
    z-index: 2;
    border: 0;
    background-repeat: no-repeat;
}
#online li .icon:hover {
    width: 107px;
    height: 107px;
    border: 3px solid #1094fa;
}
#online li.selected .icon {
    background-image: url(images/success.png);
    background-image: url(images/success.gif) \9;
    background-position: 75px 75px;
}
#online li.selected .icon:hover {
    width: 107px;
    height: 107px;
    border: 3px solid #1094fa;
    background-position: 72px 72px;
}
/* 在线文件的文件预览图标 */
i.file-preview {
    display: block;
    margin: 10px auto;
    width: 70px;
    height: 70px;
    background-image: url("./images/file-icons.png");
    background-image: url("./images/file-icons.gif") \9;
    background-position: -140px center;
    background-repeat: no-repeat;
}
i.file-preview.file-type-dir{
    background-position: 0 center;
}
i.file-preview.file-type-file{
    background-position: -140px center;
}
i.file-preview.file-type-filelist{
    background-position: -210px center;
}
i.file-preview.file-type-zip,
i.file-preview.file-type-rar,
i.file-preview.file-type-7z,
i.file-preview.file-type-tar,
i.file-preview.file-type-gz,
i.file-preview.file-type-bz2{
    background-position: -280px center;
}
i.file-preview.file-type-xls,
i.file-preview.file-type-xlsx{
    background-position: -350px center;
}
i.file-preview.file-type-doc,
i.file-preview.file-type-docx{
    background-position: -420px center;
}
i.file-preview.file-type-ppt,
i.file-preview.file-type-pptx{
    background-position: -490px center;
}
i.file-preview.file-type-vsd{
    background-position: -560px center;
}
i.file-preview.file-type-pdf{
    background-position: -630px center;
}
i.file-preview.file-type-txt,
i.file-preview.file-type-md,
i.file-preview.file-type-json,
i.file-preview.file-type-htm,
i.file-preview.file-type-xml,
i.file-preview.file-type-html,
i.file-preview.file-type-js,
i.file-preview.file-type-css,
i.file-preview.file-type-php,
i.file-preview.file-type-jsp,
i.file-preview.file-type-asp{
    background-position: -700px center;
}
i.file-preview.file-type-apk{
    background-position: -770px center;
}
i.file-preview.file-type-exe{
    background-position: -840px center;
}
i.file-preview.file-type-ipa{
    background-position: -910px center;
}
i.file-preview.file-type-mp4,
i.file-preview.file-type-swf,
i.file-preview.file-type-mkv,
i.file-preview.file-type-avi,
i.file-preview.file-type-flv,
i.file-preview.file-type-mov,
i.file-preview.file-type-mpg,
i.file-preview.file-type-mpeg,
i.file-preview.file-type-ogv,
i.file-preview.file-type-webm,
i.file-preview.file-type-rm,
i.file-preview.file-type-rmvb{
    background-position: -980px center;
}
i.file-preview.file-type-ogg,
i.file-preview.file-type-wav,
i.file-preview.file-type-wmv,
i.file-preview.file-type-mid,
i.file-preview.file-type-mp3{
    background-position: -1050px center;
}
i.file-preview.file-type-jpg,
i.file-preview.file-type-jpeg,
i.file-preview.file-type-gif,
i.file-preview.file-type-bmp,
i.file-preview.file-type-png,
i.file-preview.file-type-psd{
    background-position: -140px center;
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/attachment.html
New file
@@ -0,0 +1,60 @@
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>ueditor图片对话框</title>
    <script type="text/javascript" src="../internal.js"></script>
    <!-- jquery -->
    <script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>
    <!-- webuploader -->
    <script src="../../third-party/webuploader/webuploader.min.js"></script>
    <link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">
    <!-- attachment dialog -->
    <link rel="stylesheet" href="attachment.css" type="text/css" />
</head>
<body>
    <div class="wrapper">
        <div id="tabhead" class="tabhead">
            <span class="tab focus" data-content-id="upload"><var id="lang_tab_upload"></var></span>
            <span class="tab" data-content-id="online"><var id="lang_tab_online"></var></span>
        </div>
        <div id="tabbody" class="tabbody">
            <!-- 上传图片 -->
            <div id="upload" class="panel focus">
                <div id="queueList" class="queueList">
                    <div class="statusBar element-invisible">
                        <div class="progress">
                            <span class="text">0%</span>
                            <span class="percentage"></span>
                        </div><div class="info"></div>
                        <div class="btns">
                            <div id="filePickerBtn"></div>
                            <div class="uploadBtn"><var id="lang_start_upload"></var></div>
                        </div>
                    </div>
                    <div id="dndArea" class="placeholder">
                        <div class="filePickerContainer">
                            <div id="filePickerReady"></div>
                        </div>
                    </div>
                    <ul class="filelist element-invisible">
                        <li id="filePickerBlock" class="filePickerBlock"></li>
                    </ul>
                </div>
            </div>
            <!-- 在线图片 -->
            <div id="online" class="panel">
                <div id="fileList"><var id="lang_imgLoading"></var></div>
            </div>
        </div>
    </div>
    <script type="text/javascript" src="attachment.js"></script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/attachment.js
New file
@@ -0,0 +1,754 @@
/**
 * User: Jinqn
 * Date: 14-04-08
 * Time: 下午16:34
 * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片
 */
(function () {
    var uploadFile,
        onlineFile;
    window.onload = function () {
        initTabs();
        initButtons();
    };
    /* 初始化tab标签 */
    function initTabs() {
        var tabs = $G('tabhead').children;
        for (var i = 0; i < tabs.length; i++) {
            domUtils.on(tabs[i], "click", function (e) {
                var target = e.target || e.srcElement;
                setTabFocus(target.getAttribute('data-content-id'));
            });
        }
        setTabFocus('upload');
    }
    /* 初始化tabbody */
    function setTabFocus(id) {
        if(!id) return;
        var i, bodyId, tabs = $G('tabhead').children;
        for (i = 0; i < tabs.length; i++) {
            bodyId = tabs[i].getAttribute('data-content-id')
            if (bodyId == id) {
                domUtils.addClass(tabs[i], 'focus');
                domUtils.addClass($G(bodyId), 'focus');
            } else {
                domUtils.removeClasses(tabs[i], 'focus');
                domUtils.removeClasses($G(bodyId), 'focus');
            }
        }
        switch (id) {
            case 'upload':
                uploadFile = uploadFile || new UploadFile('queueList');
                break;
            case 'online':
                onlineFile = onlineFile || new OnlineFile('fileList');
                break;
        }
    }
    /* 初始化onok事件 */
    function initButtons() {
        dialog.onok = function () {
            var list = [], id, tabs = $G('tabhead').children;
            for (var i = 0; i < tabs.length; i++) {
                if (domUtils.hasClass(tabs[i], 'focus')) {
                    id = tabs[i].getAttribute('data-content-id');
                    break;
                }
            }
            switch (id) {
                case 'upload':
                    list = uploadFile.getInsertList();
                    var count = uploadFile.getQueueCount();
                    if (count) {
                        $('.info', '#queueList').html('<span style="color:red;">' + '还有2个未上传文件'.replace(/[\d]/, count) + '</span>');
                        return false;
                    }
                    break;
                case 'online':
                    list = onlineFile.getInsertList();
                    break;
            }
            editor.execCommand('insertfile', list);
        };
    }
    /* 上传附件 */
    function UploadFile(target) {
        this.$wrap = target.constructor == String ? $('#' + target) : $(target);
        this.init();
    }
    UploadFile.prototype = {
        init: function () {
            this.fileList = [];
            this.initContainer();
            this.initUploader();
        },
        initContainer: function () {
            this.$queue = this.$wrap.find('.filelist');
        },
        /* 初始化容器 */
        initUploader: function () {
            var _this = this,
                $ = jQuery,    // just in case. Make sure it's not an other libaray.
                $wrap = _this.$wrap,
            // 图片容器
                $queue = $wrap.find('.filelist'),
            // 状态栏,包括进度和控制按钮
                $statusBar = $wrap.find('.statusBar'),
            // 文件总体选择信息。
                $info = $statusBar.find('.info'),
            // 上传按钮
                $upload = $wrap.find('.uploadBtn'),
            // 上传按钮
                $filePickerBtn = $wrap.find('.filePickerBtn'),
            // 上传按钮
                $filePickerBlock = $wrap.find('.filePickerBlock'),
            // 没选择文件之前的内容。
                $placeHolder = $wrap.find('.placeholder'),
            // 总体进度条
                $progress = $statusBar.find('.progress').hide(),
            // 添加的文件数量
                fileCount = 0,
            // 添加的文件总大小
                fileSize = 0,
            // 优化retina, 在retina下这个值是2
                ratio = window.devicePixelRatio || 1,
            // 缩略图大小
                thumbnailWidth = 113 * ratio,
                thumbnailHeight = 113 * ratio,
            // 可能有pedding, ready, uploading, confirm, done.
                state = '',
            // 所有文件的进度信息,key为file id
                percentages = {},
                supportTransition = (function () {
                    var s = document.createElement('p').style,
                        r = 'transition' in s ||
                            'WebkitTransition' in s ||
                            'MozTransition' in s ||
                            'msTransition' in s ||
                            'OTransition' in s;
                    s = null;
                    return r;
                })(),
            // WebUploader实例
                uploader,
                actionUrl = editor.getActionUrl(editor.getOpt('fileActionName')),
                fileMaxSize = editor.getOpt('fileMaxSize'),
                acceptExtensions = (editor.getOpt('fileAllowFiles') || []).join('').replace(/\./g, ',').replace(/^[,]/, '');;
            if (!WebUploader.Uploader.support()) {
                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();
                return;
            } else if (!editor.getOpt('fileActionName')) {
                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();
                return;
            }
            uploader = _this.uploader = WebUploader.create({
                pick: {
                    id: '#filePickerReady',
                    label: lang.uploadSelectFile
                },
                swf: '../../third-party/webuploader/Uploader.swf',
                server: actionUrl,
                fileVal: editor.getOpt('fileFieldName'),
                duplicate: true,
                fileSingleSizeLimit: fileMaxSize,
                compress: false
            });
            uploader.addButton({
                id: '#filePickerBlock'
            });
            uploader.addButton({
                id: '#filePickerBtn',
                label: lang.uploadAddFile
            });
            setState('pedding');
            // 当有文件添加进来时执行,负责view的创建
            function addFile(file) {
                var $li = $('<li id="' + file.id + '">' +
                        '<p class="title">' + file.name + '</p>' +
                        '<p class="imgWrap"></p>' +
                        '<p class="progress"><span></span></p>' +
                        '</li>'),
                    $btns = $('<div class="file-panel">' +
                        '<span class="cancel">' + lang.uploadDelete + '</span>' +
                        '<span class="rotateRight">' + lang.uploadTurnRight + '</span>' +
                        '<span class="rotateLeft">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),
                    $prgress = $li.find('p.progress span'),
                    $wrap = $li.find('p.imgWrap'),
                    $info = $('<p class="error"></p>').hide().appendTo($li),
                    showError = function (code) {
                        switch (code) {
                            case 'exceed_size':
                                text = lang.errorExceedSize;
                                break;
                            case 'interrupt':
                                text = lang.errorInterrupt;
                                break;
                            case 'http':
                                text = lang.errorHttp;
                                break;
                            case 'not_allow_type':
                                text = lang.errorFileType;
                                break;
                            default:
                                text = lang.errorUploadRetry;
                                break;
                        }
                        $info.text(text).show();
                    };
                if (file.getStatus() === 'invalid') {
                    showError(file.statusText);
                } else {
                    $wrap.text(lang.uploadPreview);
                    if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|'+file.ext.toLowerCase()+'|') == -1) {
                        $wrap.empty().addClass('notimage').append('<i class="file-preview file-type-' + file.ext.toLowerCase() + '"></i>' +
                        '<span class="file-title" title="' + file.name + '">' + file.name + '</span>');
                    } else {
                        if (browser.ie && browser.version <= 7) {
                            $wrap.text(lang.uploadNoPreview);
                        } else {
                            uploader.makeThumb(file, function (error, src) {
                                if (error || !src) {
                                    $wrap.text(lang.uploadNoPreview);
                                } else {
                                    var $img = $('<img src="' + src + '">');
                                    $wrap.empty().append($img);
                                    $img.on('error', function () {
                                        $wrap.text(lang.uploadNoPreview);
                                    });
                                }
                            }, thumbnailWidth, thumbnailHeight);
                        }
                    }
                    percentages[ file.id ] = [ file.size, 0 ];
                    file.rotation = 0;
                    /* 检查文件格式 */
                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {
                        showError('not_allow_type');
                        uploader.removeFile(file);
                    }
                }
                file.on('statuschange', function (cur, prev) {
                    if (prev === 'progress') {
                        $prgress.hide().width(0);
                    } else if (prev === 'queued') {
                        $li.off('mouseenter mouseleave');
                        $btns.remove();
                    }
                    // 成功
                    if (cur === 'error' || cur === 'invalid') {
                        showError(file.statusText);
                        percentages[ file.id ][ 1 ] = 1;
                    } else if (cur === 'interrupt') {
                        showError('interrupt');
                    } else if (cur === 'queued') {
                        percentages[ file.id ][ 1 ] = 0;
                    } else if (cur === 'progress') {
                        $info.hide();
                        $prgress.css('display', 'block');
                    } else if (cur === 'complete') {
                    }
                    $li.removeClass('state-' + prev).addClass('state-' + cur);
                });
                $li.on('mouseenter', function () {
                    $btns.stop().animate({height: 30});
                });
                $li.on('mouseleave', function () {
                    $btns.stop().animate({height: 0});
                });
                $btns.on('click', 'span', function () {
                    var index = $(this).index(),
                        deg;
                    switch (index) {
                        case 0:
                            uploader.removeFile(file);
                            return;
                        case 1:
                            file.rotation += 90;
                            break;
                        case 2:
                            file.rotation -= 90;
                            break;
                    }
                    if (supportTransition) {
                        deg = 'rotate(' + file.rotation + 'deg)';
                        $wrap.css({
                            '-webkit-transform': deg,
                            '-mos-transform': deg,
                            '-o-transform': deg,
                            'transform': deg
                        });
                    } else {
                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');
                    }
                });
                $li.insertBefore($filePickerBlock);
            }
            // 负责view的销毁
            function removeFile(file) {
                var $li = $('#' + file.id);
                delete percentages[ file.id ];
                updateTotalProgress();
                $li.off().find('.file-panel').off().end().remove();
            }
            function updateTotalProgress() {
                var loaded = 0,
                    total = 0,
                    spans = $progress.children(),
                    percent;
                $.each(percentages, function (k, v) {
                    total += v[ 0 ];
                    loaded += v[ 0 ] * v[ 1 ];
                });
                percent = total ? loaded / total : 0;
                spans.eq(0).text(Math.round(percent * 100) + '%');
                spans.eq(1).css('width', Math.round(percent * 100) + '%');
                updateStatus();
            }
            function setState(val, files) {
                if (val != state) {
                    var stats = uploader.getStats();
                    $upload.removeClass('state-' + state);
                    $upload.addClass('state-' + val);
                    switch (val) {
                        /* 未选择文件 */
                        case 'pedding':
                            $queue.addClass('element-invisible');
                            $statusBar.addClass('element-invisible');
                            $placeHolder.removeClass('element-invisible');
                            $progress.hide(); $info.hide();
                            uploader.refresh();
                            break;
                        /* 可以开始上传 */
                        case 'ready':
                            $placeHolder.addClass('element-invisible');
                            $queue.removeClass('element-invisible');
                            $statusBar.removeClass('element-invisible');
                            $progress.hide(); $info.show();
                            $upload.text(lang.uploadStart);
                            uploader.refresh();
                            break;
                        /* 上传中 */
                        case 'uploading':
                            $progress.show(); $info.hide();
                            $upload.text(lang.uploadPause);
                            break;
                        /* 暂停上传 */
                        case 'paused':
                            $progress.show(); $info.hide();
                            $upload.text(lang.uploadContinue);
                            break;
                        case 'confirm':
                            $progress.show(); $info.hide();
                            $upload.text(lang.uploadStart);
                            stats = uploader.getStats();
                            if (stats.successNum && !stats.uploadFailNum) {
                                setState('finish');
                                return;
                            }
                            break;
                        case 'finish':
                            $progress.hide(); $info.show();
                            if (stats.uploadFailNum) {
                                $upload.text(lang.uploadRetry);
                            } else {
                                $upload.text(lang.uploadStart);
                            }
                            break;
                    }
                    state = val;
                    updateStatus();
                }
                if (!_this.getQueueCount()) {
                    $upload.addClass('disabled')
                } else {
                    $upload.removeClass('disabled')
                }
            }
            function updateStatus() {
                var text = '', stats;
                if (state === 'ready') {
                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));
                } else if (state === 'confirm') {
                    stats = uploader.getStats();
                    if (stats.uploadFailNum) {
                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);
                    }
                } else {
                    stats = uploader.getStats();
                    text = lang.updateStatusFinish.replace('_', fileCount).
                        replace('_KB', WebUploader.formatSize(fileSize)).
                        replace('_', stats.successNum);
                    if (stats.uploadFailNum) {
                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);
                    }
                }
                $info.html(text);
            }
            uploader.on('fileQueued', function (file) {
                fileCount++;
                fileSize += file.size;
                if (fileCount === 1) {
                    $placeHolder.addClass('element-invisible');
                    $statusBar.show();
                }
                addFile(file);
            });
            uploader.on('fileDequeued', function (file) {
                fileCount--;
                fileSize -= file.size;
                removeFile(file);
                updateTotalProgress();
            });
            uploader.on('filesQueued', function (file) {
                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {
                    setState('ready');
                }
                updateTotalProgress();
            });
            uploader.on('all', function (type, files) {
                switch (type) {
                    case 'uploadFinished':
                        setState('confirm', files);
                        break;
                    case 'startUpload':
                        /* 添加额外的GET参数 */
                        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',
                            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params);
                        uploader.option('server', url);
                        setState('uploading', files);
                        break;
                    case 'stopUpload':
                        setState('paused', files);
                        break;
                }
            });
            uploader.on('uploadBeforeSend', function (file, data, header) {
                //这里可以通过data对象添加POST参数
                header['X_Requested_With'] = 'XMLHttpRequest';
            });
            uploader.on('uploadProgress', function (file, percentage) {
                var $li = $('#' + file.id),
                    $percent = $li.find('.progress span');
                $percent.css('width', percentage * 100 + '%');
                percentages[ file.id ][ 1 ] = percentage;
                updateTotalProgress();
            });
            uploader.on('uploadSuccess', function (file, ret) {
                var $file = $('#' + file.id);
                try {
                    var responseText = (ret._raw || ret),
                        json = utils.str2json(responseText);
                    if (json.state == 'SUCCESS') {
                        _this.fileList.push(json);
                        $file.append('<span class="success"></span>');
                    } else {
                        $file.find('.error').text(json.state).show();
                    }
                } catch (e) {
                    $file.find('.error').text(lang.errorServerUpload).show();
                }
            });
            uploader.on('uploadError', function (file, code) {
            });
            uploader.on('error', function (code, file) {
                if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {
                    addFile(file);
                }
            });
            uploader.on('uploadComplete', function (file, ret) {
            });
            $upload.on('click', function () {
                if ($(this).hasClass('disabled')) {
                    return false;
                }
                if (state === 'ready') {
                    uploader.upload();
                } else if (state === 'paused') {
                    uploader.upload();
                } else if (state === 'uploading') {
                    uploader.stop();
                }
            });
            $upload.addClass('state-' + state);
            updateTotalProgress();
        },
        getQueueCount: function () {
            var file, i, status, readyFile = 0, files = this.uploader.getFiles();
            for (i = 0; file = files[i++]; ) {
                status = file.getStatus();
                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;
            }
            return readyFile;
        },
        getInsertList: function () {
            var i, link, data, list = [],
                prefix = editor.getOpt('fileUrlPrefix');
            for (i = 0; i < this.fileList.length; i++) {
                data = this.fileList[i];
                link = data.url;
                list.push({
                    title: data.original || link.substr(link.lastIndexOf('/') + 1),
                    url: prefix + link
                });
            }
            return list;
        }
    };
    /* 在线附件 */
    function OnlineFile(target) {
        this.container = utils.isString(target) ? document.getElementById(target) : target;
        this.init();
    }
    OnlineFile.prototype = {
        init: function () {
            this.initContainer();
            this.initEvents();
            this.initData();
        },
        /* 初始化容器 */
        initContainer: function () {
            this.container.innerHTML = '';
            this.list = document.createElement('ul');
            this.clearFloat = document.createElement('li');
            domUtils.addClass(this.list, 'list');
            domUtils.addClass(this.clearFloat, 'clearFloat');
            this.list.appendChild(this.clearFloat);
            this.container.appendChild(this.list);
        },
        /* 初始化滚动事件,滚动到地步自动拉取数据 */
        initEvents: function () {
            var _this = this;
            /* 滚动拉取图片 */
            domUtils.on($G('fileList'), 'scroll', function(e){
                var panel = this;
                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {
                    _this.getFileData();
                }
            });
            /* 选中图片 */
            domUtils.on(this.list, 'click', function (e) {
                var target = e.target || e.srcElement,
                    li = target.parentNode;
                if (li.tagName.toLowerCase() == 'li') {
                    if (domUtils.hasClass(li, 'selected')) {
                        domUtils.removeClasses(li, 'selected');
                    } else {
                        domUtils.addClass(li, 'selected');
                    }
                }
            });
        },
        /* 初始化第一次的数据 */
        initData: function () {
            /* 拉取数据需要使用的值 */
            this.state = 0;
            this.listSize = editor.getOpt('fileManagerListSize');
            this.listIndex = 0;
            this.listEnd = false;
            /* 第一次拉取数据 */
            this.getFileData();
        },
        /* 向后台拉取图片列表数据 */
        getFileData: function () {
            var _this = this;
            if(!_this.listEnd && !this.isLoadingData) {
                this.isLoadingData = true;
                ajax.request(editor.getActionUrl(editor.getOpt('fileManagerActionName')), {
                    timeout: 100000,
                    data: utils.extend({
                            start: this.listIndex,
                            size: this.listSize
                        }, editor.queryCommandValue('serverparam')),
                    method: 'get',
                    onsuccess: function (r) {
                        try {
                            var json = eval('(' + r.responseText + ')');
                            if (json.state == 'SUCCESS') {
                                _this.pushData(json.list);
                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);
                                if(_this.listIndex >= json.total) {
                                    _this.listEnd = true;
                                }
                                _this.isLoadingData = false;
                            }
                        } catch (e) {
                            if(r.responseText.indexOf('ue_separate_ue') != -1) {
                                var list = r.responseText.split(r.responseText);
                                _this.pushData(list);
                                _this.listIndex = parseInt(list.length);
                                _this.listEnd = true;
                                _this.isLoadingData = false;
                            }
                        }
                    },
                    onerror: function () {
                        _this.isLoadingData = false;
                    }
                });
            }
        },
        /* 添加图片到列表界面上 */
        pushData: function (list) {
            var i, item, img, filetype, preview, icon, _this = this,
                urlPrefix = editor.getOpt('fileManagerUrlPrefix');
            for (i = 0; i < list.length; i++) {
                if(list[i] && list[i].url) {
                    item = document.createElement('li');
                    icon = document.createElement('span');
                    filetype = list[i].url.substr(list[i].url.lastIndexOf('.') + 1);
                    if ( "png|jpg|jpeg|gif|bmp".indexOf(filetype) != -1 ) {
                        preview = document.createElement('img');
                        domUtils.on(preview, 'load', (function(image){
                            return function(){
                                _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);
                            };
                        })(preview));
                        preview.width = 113;
                        preview.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );
                    } else {
                        var ic = document.createElement('i'),
                            textSpan = document.createElement('span');
                        textSpan.innerHTML = list[i].url.substr(list[i].url.lastIndexOf('/') + 1);
                        preview = document.createElement('div');
                        preview.appendChild(ic);
                        preview.appendChild(textSpan);
                        domUtils.addClass(preview, 'file-wrapper');
                        domUtils.addClass(textSpan, 'file-title');
                        domUtils.addClass(ic, 'file-type-' + filetype);
                        domUtils.addClass(ic, 'file-preview');
                    }
                    domUtils.addClass(icon, 'icon');
                    item.setAttribute('data-url', urlPrefix + list[i].url);
                    if (list[i].original) {
                        item.setAttribute('data-title', list[i].original);
                    }
                    item.appendChild(preview);
                    item.appendChild(icon);
                    this.list.insertBefore(item, this.clearFloat);
                }
            }
        },
        /* 改变图片大小 */
        scale: function (img, w, h, type) {
            var ow = img.width,
                oh = img.height;
            if (type == 'justify') {
                if (ow >= oh) {
                    img.width = w;
                    img.height = h * oh / ow;
                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
                } else {
                    img.width = w * ow / oh;
                    img.height = h;
                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
                }
            } else {
                if (ow >= oh) {
                    img.width = w * ow / oh;
                    img.height = h;
                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
                } else {
                    img.width = w;
                    img.height = h * oh / ow;
                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
                }
            }
        },
        getInsertList: function () {
            var i, lis = this.list.children, list = [];
            for (i = 0; i < lis.length; i++) {
                if (domUtils.hasClass(lis[i], 'selected')) {
                    var url = lis[i].getAttribute('data-url');
                    var title = lis[i].getAttribute('data-title') || url.substr(url.lastIndexOf('/') + 1);
                    list.push({
                        title: title,
                        url: url
                    });
                }
            }
            return list;
        }
    };
})();
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_chm.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_default.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_doc.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_exe.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_jpg.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_mp3.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_mv.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_pdf.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_ppt.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_psd.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_rar.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_txt.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/fileTypeImages/icon_xls.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/alignicon.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/alignicon.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/bg.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/file-icons.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/file-icons.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/icons.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/icons.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/image.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/progress.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/success.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/attachment/images/success.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/background/background.css
New file
@@ -0,0 +1,94 @@
.wrapper{ width: 424px;margin: 10px auto; zoom:1;position: relative}
.tabbody{height:225px;}
.tabbody .panel { position: absolute;width:100%; height:100%;background: #fff; display: none;}
.tabbody .focus { display: block;}
body{font-size: 12px;color: #888;overflow: hidden;}
input,label{vertical-align:middle}
.clear{clear: both;}
.pl{padding-left: 18px;padding-left: 23px\9;}
#imageList {width: 420px;height: 215px;margin-top: 10px;overflow: hidden;overflow-y: auto;}
#imageList div {float: left;width: 100px;height: 95px;margin: 5px 10px;}
#imageList img {cursor: pointer;border: 2px solid white;}
.bgarea{margin: 10px;padding: 5px;height: 84%;border: 1px solid #A8A297;}
.content div{margin: 10px 0 10px 5px;}
.content .iptradio{margin: 0px 5px 5px 0px;}
.txt{width:280px;}
.wrapcolor{height: 19px;}
div.color{float: left;margin: 0;}
#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;margin: 0;float: left;}
div.alignment,#custom{margin-left: 23px;margin-left: 28px\9;}
#custom input{height: 15px;min-height: 15px;width:20px;}
#repeatType{width:100px;}
/* 图片管理样式 */
#imgManager {
    width: 100%;
    height: 225px;
}
#imgManager #imageList{
    width: 100%;
    overflow-x: hidden;
    overflow-y: auto;
}
#imgManager ul {
    display: block;
    list-style: none;
    margin: 0;
    padding: 0;
}
#imgManager li {
    float: left;
    display: block;
    list-style: none;
    padding: 0;
    width: 113px;
    height: 113px;
    margin: 9px 0 0 19px;
    background-color: #eee;
    overflow: hidden;
    cursor: pointer;
    position: relative;
}
#imgManager li.clearFloat {
    float: none;
    clear: both;
    display: block;
    width:0;
    height:0;
    margin: 0;
    padding: 0;
}
#imgManager li img {
    cursor: pointer;
}
#imgManager li .icon {
    cursor: pointer;
    width: 113px;
    height: 113px;
    position: absolute;
    top: 0;
    left: 0;
    z-index: 2;
    border: 0;
    background-repeat: no-repeat;
}
#imgManager li .icon:hover {
    width: 107px;
    height: 107px;
    border: 3px solid #1094fa;
}
#imgManager li.selected .icon {
    background-image: url(images/success.png);
    background-position: 75px 75px;
}
#imgManager li.selected .icon:hover {
    width: 107px;
    height: 107px;
    border: 3px solid #1094fa;
    background-position: 72px 72px;
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/background/background.html
New file
@@ -0,0 +1,56 @@
<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <script type="text/javascript" src="../internal.js"></script>
    <link rel="stylesheet" type="text/css" href="background.css">
</head>
<body>
    <div id="bg_container" class="wrapper">
        <div id="tabHeads" class="tabhead">
            <span class="focus" data-content-id="normal"><var id="lang_background_normal"></var></span>
            <span class="" data-content-id="imgManager"><var id="lang_background_local"></var></span>
        </div>
        <div id="tabBodys" class="tabbody">
            <div id="normal" class="panel focus">
                <fieldset class="bgarea">
                    <legend><var id="lang_background_set"></var></legend>
                    <div class="content">
                        <div>
                            <label><input id="nocolorRadio" class="iptradio" type="radio" name="t" value="none" checked="checked"><var id="lang_background_none"></var></label>
                            <label><input id="coloredRadio" class="iptradio" type="radio" name="t" value="color"><var id="lang_background_colored"></var></label>
                        </div>
                        <div class="wrapcolor pl">
                            <div class="color">
                                <var id="lang_background_color"></var>:
                            </div>
                            <div id="colorPicker"></div>
                            <div class="clear"></div>
                        </div>
                        <div class="wrapcolor pl">
                            <label><var id="lang_background_netimg"></var>:</label><input class="txt" type="text" id="url">
                        </div>
                        <div id="alignment" class="alignment">
                            <var id="lang_background_align"></var>:<select id="repeatType">
                                <option value="center"></option>
                                <option value="repeat-x"></option>
                                <option value="repeat-y"></option>
                                <option value="repeat"></option>
                                <option value="self"></option>
                            </select>
                        </div>
                        <div id="custom" >
                            <var id="lang_background_position"></var>:x:<input type="text" size="1" id="x" maxlength="4" value="0">px&nbsp;&nbsp;y:<input type="text" size="1" id="y" maxlength="4" value="0">px
                        </div>
                    </div>
                </fieldset>
            </div>
            <div id="imgManager" class="panel">
                <div id="imageList" style=""></div>
            </div>
        </div>
    </div>
    <script type="text/javascript" src="background.js"></script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/background/background.js
New file
@@ -0,0 +1,376 @@
(function () {
    var onlineImage,
        backupStyle = editor.queryCommandValue('background');
    window.onload = function () {
        initTabs();
        initColorSelector();
    };
    /* 初始化tab标签 */
    function initTabs(){
        var tabs = $G('tabHeads').children;
        for (var i = 0; i < tabs.length; i++) {
            domUtils.on(tabs[i], "click", function (e) {
                var target = e.target || e.srcElement;
                for (var j = 0; j < tabs.length; j++) {
                    if(tabs[j] == target){
                        tabs[j].className = "focus";
                        var contentId = tabs[j].getAttribute('data-content-id');
                        $G(contentId).style.display = "block";
                        if(contentId == 'imgManager') {
                            initImagePanel();
                        }
                    }else {
                        tabs[j].className = "";
                        $G(tabs[j].getAttribute('data-content-id')).style.display = "none";
                    }
                }
            });
        }
    }
    /* 初始化颜色设置 */
    function initColorSelector () {
        var obj = editor.queryCommandValue('background');
        if (obj) {
            var color = obj['background-color'],
                repeat = obj['background-repeat'] || 'repeat',
                image = obj['background-image'] || '',
                position = obj['background-position'] || 'center center',
                pos = position.split(' '),
                x = parseInt(pos[0]) || 0,
                y = parseInt(pos[1]) || 0;
            if(repeat == 'no-repeat' && (x || y)) repeat = 'self';
            image = image.match(/url[\s]*\(([^\)]*)\)/);
            image = image ? image[1]:'';
            updateFormState('colored', color, image, repeat, x, y);
        } else {
            updateFormState();
        }
        var updateHandler = function () {
            updateFormState();
            updateBackground();
        }
        domUtils.on($G('nocolorRadio'), 'click', updateBackground);
        domUtils.on($G('coloredRadio'), 'click', updateHandler);
        domUtils.on($G('url'), 'keyup', function(){
            if($G('url').value && $G('alignment').style.display == "none") {
                utils.each($G('repeatType').children, function(item){
                    item.selected = ('repeat' == item.getAttribute('value') ? 'selected':false);
                });
            }
            updateHandler();
        });
        domUtils.on($G('repeatType'), 'change', updateHandler);
        domUtils.on($G('x'), 'keyup', updateBackground);
        domUtils.on($G('y'), 'keyup', updateBackground);
        initColorPicker();
    }
    /* 初始化颜色选择器 */
    function initColorPicker() {
        var me = editor,
            cp = $G("colorPicker");
        /* 生成颜色选择器ui对象 */
        var popup = new UE.ui.Popup({
            content: new UE.ui.ColorPicker({
                noColorText: me.getLang("clearColor"),
                editor: me,
                onpickcolor: function (t, color) {
                    updateFormState('colored', color);
                    updateBackground();
                    UE.ui.Popup.postHide();
                },
                onpicknocolor: function (t, color) {
                    updateFormState('colored', 'transparent');
                    updateBackground();
                    UE.ui.Popup.postHide();
                }
            }),
            editor: me,
            onhide: function () {
            }
        });
        /* 设置颜色选择器 */
        domUtils.on(cp, "click", function () {
            popup.showAnchor(this);
        });
        domUtils.on(document, 'mousedown', function (evt) {
            var el = evt.target || evt.srcElement;
            UE.ui.Popup.postHide(el);
        });
        domUtils.on(window, 'scroll', function () {
            UE.ui.Popup.postHide();
        });
    }
    /* 初始化在线图片列表 */
    function initImagePanel() {
        onlineImage = onlineImage || new OnlineImage('imageList');
    }
    /* 更新背景色设置面板 */
    function updateFormState (radio, color, url, align, x, y) {
        var nocolorRadio = $G('nocolorRadio'),
            coloredRadio = $G('coloredRadio');
        if(radio) {
            nocolorRadio.checked = (radio == 'colored' ? false:'checked');
            coloredRadio.checked = (radio == 'colored' ? 'checked':false);
        }
        if(color) {
            domUtils.setStyle($G("colorPicker"), "background-color", color);
        }
        if(url && /^\//.test(url)) {
            var a = document.createElement('a');
            a.href = url;
            browser.ie && (a.href = a.href);
            url = browser.ie ? a.href:(a.protocol + '//' + a.host + a.pathname + a.search + a.hash);
        }
        if(url || url === '') {
            $G('url').value = url;
        }
        if(align) {
            utils.each($G('repeatType').children, function(item){
                item.selected = (align == item.getAttribute('value') ? 'selected':false);
            });
        }
        if(x || y) {
            $G('x').value = parseInt(x) || 0;
            $G('y').value = parseInt(y) || 0;
        }
        $G('alignment').style.display = coloredRadio.checked && $G('url').value ? '':'none';
        $G('custom').style.display = coloredRadio.checked && $G('url').value && $G('repeatType').value == 'self' ? '':'none';
    }
    /* 更新背景颜色 */
    function updateBackground () {
        if ($G('coloredRadio').checked) {
            var color = domUtils.getStyle($G("colorPicker"), "background-color"),
                bgimg = $G("url").value,
                align = $G("repeatType").value,
                backgroundObj = {
                    "background-repeat": "no-repeat",
                    "background-position": "center center"
                };
            if (color) backgroundObj["background-color"] = color;
            if (bgimg) backgroundObj["background-image"] = 'url(' + bgimg + ')';
            if (align == 'self') {
                backgroundObj["background-position"] = $G("x").value + "px " + $G("y").value + "px";
            } else if (align == 'repeat-x' || align == 'repeat-y' || align == 'repeat') {
                backgroundObj["background-repeat"] = align;
            }
            editor.execCommand('background', backgroundObj);
        } else {
            editor.execCommand('background', null);
        }
    }
    /* 在线图片 */
    function OnlineImage(target) {
        this.container = utils.isString(target) ? document.getElementById(target) : target;
        this.init();
    }
    OnlineImage.prototype = {
        init: function () {
            this.reset();
            this.initEvents();
        },
        /* 初始化容器 */
        initContainer: function () {
            this.container.innerHTML = '';
            this.list = document.createElement('ul');
            this.clearFloat = document.createElement('li');
            domUtils.addClass(this.list, 'list');
            domUtils.addClass(this.clearFloat, 'clearFloat');
            this.list.id = 'imageListUl';
            this.list.appendChild(this.clearFloat);
            this.container.appendChild(this.list);
        },
        /* 初始化滚动事件,滚动到地步自动拉取数据 */
        initEvents: function () {
            var _this = this;
            /* 滚动拉取图片 */
            domUtils.on($G('imageList'), 'scroll', function(e){
                var panel = this;
                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {
                    _this.getImageData();
                }
            });
            /* 选中图片 */
            domUtils.on(this.container, 'click', function (e) {
                var target = e.target || e.srcElement,
                    li = target.parentNode,
                    nodes = $G('imageListUl').childNodes;
                if (li.tagName.toLowerCase() == 'li') {
                    updateFormState('nocolor', null, '');
                    for (var i = 0, node; node = nodes[i++];) {
                        if (node == li && !domUtils.hasClass(node, 'selected')) {
                            domUtils.addClass(node, 'selected');
                            updateFormState('colored', null, li.firstChild.getAttribute("_src"), 'repeat');
                        } else {
                            domUtils.removeClasses(node, 'selected');
                        }
                    }
                    updateBackground();
                }
            });
        },
        /* 初始化第一次的数据 */
        initData: function () {
            /* 拉取数据需要使用的值 */
            this.state = 0;
            this.listSize = editor.getOpt('imageManagerListSize');
            this.listIndex = 0;
            this.listEnd = false;
            /* 第一次拉取数据 */
            this.getImageData();
        },
        /* 重置界面 */
        reset: function() {
            this.initContainer();
            this.initData();
        },
        /* 向后台拉取图片列表数据 */
        getImageData: function () {
            var _this = this;
            if(!_this.listEnd && !this.isLoadingData) {
                this.isLoadingData = true;
                var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),
                    isJsonp = utils.isCrossDomainUrl(url);
                ajax.request(url, {
                    'timeout': 100000,
                    'dataType': isJsonp ? 'jsonp':'',
                    'data': utils.extend({
                            start: this.listIndex,
                            size: this.listSize
                        }, editor.queryCommandValue('serverparam')),
                    'method': 'get',
                    'onsuccess': function (r) {
                        try {
                            var json = isJsonp ? r:eval('(' + r.responseText + ')');
                            if (json.state == 'SUCCESS') {
                                _this.pushData(json.list);
                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);
                                if(_this.listIndex >= json.total) {
                                    _this.listEnd = true;
                                }
                                _this.isLoadingData = false;
                            }
                        } catch (e) {
                            if(r.responseText.indexOf('ue_separate_ue') != -1) {
                                var list = r.responseText.split(r.responseText);
                                _this.pushData(list);
                                _this.listIndex = parseInt(list.length);
                                _this.listEnd = true;
                                _this.isLoadingData = false;
                            }
                        }
                    },
                    'onerror': function () {
                        _this.isLoadingData = false;
                    }
                });
            }
        },
        /* 添加图片到列表界面上 */
        pushData: function (list) {
            var i, item, img, icon, _this = this,
                urlPrefix = editor.getOpt('imageManagerUrlPrefix');
            for (i = 0; i < list.length; i++) {
                if(list[i] && list[i].url) {
                    item = document.createElement('li');
                    img = document.createElement('img');
                    icon = document.createElement('span');
                    domUtils.on(img, 'load', (function(image){
                        return function(){
                            _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);
                        }
                    })(img));
                    img.width = 113;
                    img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );
                    img.setAttribute('_src', urlPrefix + list[i].url);
                    domUtils.addClass(icon, 'icon');
                    item.appendChild(img);
                    item.appendChild(icon);
                    this.list.insertBefore(item, this.clearFloat);
                }
            }
        },
        /* 改变图片大小 */
        scale: function (img, w, h, type) {
            var ow = img.width,
                oh = img.height;
            if (type == 'justify') {
                if (ow >= oh) {
                    img.width = w;
                    img.height = h * oh / ow;
                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
                } else {
                    img.width = w * ow / oh;
                    img.height = h;
                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
                }
            } else {
                if (ow >= oh) {
                    img.width = w * ow / oh;
                    img.height = h;
                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
                } else {
                    img.width = w;
                    img.height = h * oh / ow;
                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
                }
            }
        },
        getInsertList: function () {
            var i, lis = this.list.children, list = [], align = getAlign();
            for (i = 0; i < lis.length; i++) {
                if (domUtils.hasClass(lis[i], 'selected')) {
                    var img = lis[i].firstChild,
                        src = img.getAttribute('_src');
                    list.push({
                        src: src,
                        _src: src,
                        floatStyle: align
                    });
                }
            }
            return list;
        }
    };
    dialog.onok = function () {
        updateBackground();
        editor.fireEvent('saveScene');
    };
    dialog.oncancel = function () {
        editor.execCommand('background', backupStyle);
    };
})();
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/background/images/bg.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/background/images/success.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/chart.config.js
New file
@@ -0,0 +1,65 @@
/*
 * 图表配置文件
 * */
//不同类型的配置
var typeConfig = [
    {
        chart: {
            type: 'line'
        },
        plotOptions: {
            line: {
                dataLabels: {
                    enabled: false
                },
                enableMouseTracking: true
            }
        }
    }, {
        chart: {
            type: 'line'
        },
        plotOptions: {
            line: {
                dataLabels: {
                    enabled: true
                },
                enableMouseTracking: false
            }
        }
    }, {
        chart: {
            type: 'area'
        }
    }, {
        chart: {
            type: 'bar'
        }
    }, {
        chart: {
            type: 'column'
        }
    }, {
        chart: {
            plotBackgroundColor: null,
            plotBorderWidth: null,
            plotShadow: false
        },
        plotOptions: {
            pie: {
                allowPointSelect: true,
                cursor: 'pointer',
                dataLabels: {
                    enabled: true,
                    color: '#000000',
                    connectorColor: '#000000',
                    formatter: function() {
                        return '<b>'+ this.point.name +'</b>: '+ ( Math.round( this.point.percentage*100 ) / 100 ) +' %';
                    }
                }
            }
        }
    }
];
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/charts.css
New file
@@ -0,0 +1,165 @@
html, body {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    overflow-x: hidden;
}
.main {
    width: 100%;
    overflow: hidden;
}
.table-view {
    height: 100%;
    float: left;
    margin: 20px;
    width: 40%;
}
.table-view .table-container {
    width: 100%;
    margin-bottom: 50px;
    overflow: scroll;
}
.table-view th {
    padding: 5px 10px;
    background-color: #F7F7F7;
}
.table-view td {
    width: 50px;
    text-align: center;
    padding:0;
}
.table-container input {
    width: 40px;
    padding: 5px;
    border: none;
    outline: none;
}
.table-view caption {
    font-size: 18px;
    text-align: left;
}
.charts-view {
    /*margin-left: 49%!important;*/
    width: 50%;
    margin-left: 49%;
    height: 400px;
}
.charts-container {
    border-left: 1px solid #c3c3c3;
}
.charts-format fieldset {
    padding-left: 20px;
    margin-bottom: 50px;
}
.charts-format legend {
    padding-left: 10px;
    padding-right: 10px;
}
.format-item-container {
    padding: 20px;
}
.format-item-container label {
    display: block;
    margin: 10px 0;
}
.charts-format .data-item {
    border: 1px solid black;
    outline: none;
    padding: 2px 3px;
}
/* 图表类型 */
.charts-type {
    margin-top: 50px;
    height: 300px;
}
.scroll-view {
    border: 1px solid #c3c3c3;
    border-left: none;
    border-right: none;
    overflow: hidden;
}
.scroll-container {
    margin: 20px;
    width: 100%;
    overflow: hidden;
}
.scroll-bed {
    width: 10000px;
    _margin-top: 20px;
    -webkit-transition: margin-left .5s ease;
    -moz-transition: margin-left .5s ease;
    transition: margin-left .5s ease;
}
.view-box {
    display: inline-block;
    *display: inline;
    *zoom: 1;
    margin-right: 20px;
    border: 2px solid white;
    line-height: 0;
    overflow: hidden;
    cursor: pointer;
}
.view-box img {
    border: 1px solid #cecece;
}
.view-box.selected {
    border-color: #7274A7;
}
.button-container {
    margin-bottom: 20px;
    text-align: center;
}
.button-container a {
    display: inline-block;
    width: 100px;
    height: 25px;
    line-height: 25px;
    border: 1px solid #c2ccd1;
    margin-right: 30px;
    text-decoration: none;
    color: black;
    -webkit-border-radius: 2px;
    -moz-border-radius: 2px;
    border-radius: 2px;
}
.button-container a:HOVER {
    background: #fcfcfc;
}
.button-container a:ACTIVE {
    border-top-color: #c2ccd1;
    box-shadow:inset 0 5px 4px -4px rgba(49, 49, 64, 0.1);
}
.edui-charts-not-data {
    height: 100px;
    line-height: 100px;
    text-align: center;
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/charts.html
New file
@@ -0,0 +1,89 @@
<!DOCTYPE html>
<html>
    <head>
        <title>chart</title>
        <meta chartset="utf-8">
        <link rel="stylesheet" type="text/css" href="charts.css">
        <script type="text/javascript" src="../internal.js"></script>
    </head>
    <body>
        <div class="main">
            <div class="table-view">
                <h3><var id="lang_data_source"></var></h3>
                <div id="tableContainer" class="table-container"></div>
                <h3><var id="lang_chart_format"></var></h3>
                <form name="data-form">
                    <div class="charts-format">
                        <fieldset>
                            <legend><var id="lang_data_align"></var></legend>
                            <div class="format-item-container">
                                <label>
                                    <input type="radio" class="format-ctrl not-pie-item" name="charts-format" value="1" checked="checked">
                                    <var id="lang_chart_align_same"></var>
                                </label>
                                <label>
                                    <input type="radio" class="format-ctrl not-pie-item" name="charts-format" value="-1">
                                    <var id="lang_chart_align_reverse"></var>
                                </label>
                                <br>
                            </div>
                        </fieldset>
                        <fieldset>
                            <legend><var id="lang_chart_title"></var></legend>
                            <div class="format-item-container">
                                <label>
                                    <var id="lang_chart_main_title"></var><input type="text" name="title" class="data-item">
                                </label>
                                <label>
                                    <var id="lang_chart_sub_title"></var><input type="text" name="sub-title" class="data-item not-pie-item">
                                </label>
                                <label>
                                    <var id="lang_chart_x_title"></var><input type="text" name="x-title" class="data-item not-pie-item">
                                </label>
                                <label>
                                    <var id="lang_chart_y_title"></var><input type="text" name="y-title" class="data-item not-pie-item">
                                </label>
                            </div>
                        </fieldset>
                        <fieldset>
                            <legend><var id="lang_chart_tip"></var></legend>
                            <div class="format-item-container">
                                <label>
                                    <var id="lang_cahrt_tip_prefix"></var>
                                    <input type="text" id="tipInput" name="tip" class="data-item" disabled="disabled">
                                </label>
                                <p><var id="lang_cahrt_tip_description"></var></p>
                            </div>
                        </fieldset>
                        <fieldset>
                            <legend><var id="lang_chart_data_unit"></var></legend>
                            <div class="format-item-container">
                                <label><var id="lang_chart_data_unit_title"></var><input type="text" name="unit" class="data-item"></label>
                                <p><var id="lang_chart_data_unit_description"></var></p>
                            </div>
                        </fieldset>
                    </div>
                </form>
            </div>
            <div class="charts-view">
                <div id="chartsContainer" class="charts-container"></div>
                <div id="chartsType" class="charts-type">
                    <h3><var id="lang_chart_type"></var></h3>
                    <div class="scroll-view">
                        <div class="scroll-container">
                            <div id="scrollBed" class="scroll-bed"></div>
                        </div>
                        <div id="buttonContainer" class="button-container">
                            <a href="#" data-title="prev"><var id="lang_prev_btn"></var></a>
                            <a href="#" data-title="next"><var id="lang_next_btn"></var></a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <script src="../../third-party/jquery-1.10.2.min.js"></script>
        <script src="../../third-party/highcharts/highcharts.js"></script>
        <script src="chart.config.js"></script>
        <script src="charts.js"></script>
    </body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/charts.js
New file
@@ -0,0 +1,519 @@
/*
 * 图片转换对话框脚本
 **/
var tableData = [],
    //编辑器页面table
    editorTable = null,
    chartsConfig = window.typeConfig,
    resizeTimer = null,
    //初始默认图表类型
    currentChartType = 0;
window.onload = function () {
    editorTable = domUtils.findParentByTagName( editor.selection.getRange().startContainer, 'table', true);
    //未找到表格, 显示错误页面
    if ( !editorTable ) {
        document.body.innerHTML = "<div class='edui-charts-not-data'>未找到数据</div>";
        return;
    }
    //初始化图表类型选择
    initChartsTypeView();
    renderTable( editorTable );
    initEvent();
    initUserConfig( editorTable.getAttribute( "data-chart" ) );
    $( "#scrollBed .view-box:eq("+ currentChartType +")" ).trigger( "click" );
    updateViewType( currentChartType );
    dialog.addListener( "resize", function () {
        if ( resizeTimer != null ) {
            window.clearTimeout( resizeTimer );
        }
        resizeTimer = window.setTimeout( function () {
            resizeTimer = null;
            renderCharts();
        }, 500 );
    } );
};
function initChartsTypeView () {
    var contents = [];
    for ( var i = 0, len = chartsConfig.length; i<len; i++ ) {
        contents.push( '<div class="view-box" data-chart-type="'+ i +'"><img width="300" src="images/charts'+ i +'.png"></div>' );
    }
    $( "#scrollBed" ).html( contents.join( "" ) );
}
//渲染table, 以便用户修改数据
function renderTable ( table ) {
    var tableHtml = [];
    //构造数据
    for ( var i = 0, row; row = table.rows[ i ]; i++ ) {
        tableData[ i ] = [];
        tableHtml[ i ] = [];
        for ( var j = 0, cell; cell = row.cells[ j ]; j++ ) {
            var value = getCellValue( cell );
            if ( i > 0 && j > 0 ) {
                value = +value;
            }
            if ( i === 0 || j === 0 ) {
                tableHtml[ i ].push( '<th>'+ value +'</th>' );
            } else {
                tableHtml[ i ].push( '<td><input type="text" class="data-item" value="'+ value +'"></td>' );
            }
            tableData[ i ][ j ] = value;
        }
        tableHtml[ i ] = tableHtml[ i ].join( "" );
    }
    //draw 表格
    $( "#tableContainer" ).html( '<table id="showTable" border="1"><tbody><tr>'+ tableHtml.join( "</tr><tr>" ) +'</tr></tbody></table>' );
}
/*
 * 根据表格已有的图表属性初始化当前图表属性
 */
function initUserConfig ( config ) {
    var parsedConfig = {};
    if ( !config ) {
        return;
    }
    config = config.split( ";" );
    $.each( config, function ( index, item ) {
        item = item.split( ":" );
        parsedConfig[ item[ 0 ] ] = item[ 1 ];
    } );
    setUserConfig( parsedConfig );
}
function initEvent () {
    var cacheValue = null,
        //图表类型数
        typeViewCount = chartsConfig.length- 1,
        $chartsTypeViewBox = $( '#scrollBed .view-box' );
    $( ".charts-format" ).delegate( ".format-ctrl", "change", function () {
        renderCharts();
    } )
    $( ".table-view" ).delegate( ".data-item", "focus", function () {
        cacheValue = this.value;
    } ).delegate( ".data-item", "blur", function () {
        if ( this.value !== cacheValue ) {
            renderCharts();
        }
        cacheValue = null;
    } );
    $( "#buttonContainer" ).delegate( "a", "click", function (e) {
        e.preventDefault();
        if ( this.getAttribute( "data-title" ) === 'prev' ) {
            if ( currentChartType > 0 ) {
                currentChartType--;
                updateViewType( currentChartType );
            }
        } else {
            if ( currentChartType < typeViewCount ) {
                currentChartType++;
                updateViewType( currentChartType );
            }
        }
    } );
    //图表类型变化
    $( '#scrollBed' ).delegate( ".view-box", "click", function (e) {
        var index = $( this ).attr( "data-chart-type" );
        $chartsTypeViewBox.removeClass( "selected" );
        $( $chartsTypeViewBox[ index ] ).addClass( "selected" );
        currentChartType = index | 0;
        //饼图, 禁用部分配置
        if ( currentChartType === chartsConfig.length - 1 ) {
            disableNotPieConfig();
        //启用完整配置
        } else {
            enableNotPieConfig();
        }
        renderCharts();
    } );
}
function renderCharts () {
    var data = collectData();
    $('#chartsContainer').highcharts( $.extend( {}, chartsConfig[ currentChartType ], {
        credits: {
            enabled: false
        },
        exporting: {
            enabled: false
        },
        title: {
            text: data.title,
            x: -20 //center
        },
        subtitle: {
            text: data.subTitle,
            x: -20
        },
        xAxis: {
            title: {
                text: data.xTitle
            },
            categories: data.categories
        },
        yAxis: {
            title: {
                text: data.yTitle
            },
            plotLines: [{
                value: 0,
                width: 1,
                color: '#808080'
            }]
        },
        tooltip: {
            enabled: true,
            valueSuffix: data.suffix
        },
        legend: {
            layout: 'vertical',
            align: 'right',
            verticalAlign: 'middle',
            borderWidth: 1
        },
        series: data.series
    } ));
}
function updateViewType ( index ) {
    $( "#scrollBed" ).css( 'marginLeft', -index*324+'px' );
}
function collectData () {
    var form = document.forms[ 'data-form' ],
        data = null;
    if ( currentChartType !== chartsConfig.length - 1 ) {
        data = getSeriesAndCategories();
        $.extend( data, getUserConfig() );
    //饼图数据格式
    } else {
        data = getSeriesForPieChart();
        data.title = form[ 'title' ].value;
        data.suffix = form[ 'unit' ].value;
    }
    return data;
}
/**
 * 获取用户配置信息
 */
function getUserConfig () {
    var form = document.forms[ 'data-form' ],
        info = {
            title: form[ 'title' ].value,
            subTitle: form[ 'sub-title' ].value,
            xTitle: form[ 'x-title' ].value,
            yTitle: form[ 'y-title' ].value,
            suffix: form[ 'unit' ].value,
            //数据对齐方式
            tableDataFormat: getTableDataFormat (),
            //饼图提示文字
            tip: $( "#tipInput" ).val()
        };
    return info;
}
function setUserConfig ( config ) {
    var form = document.forms[ 'data-form' ];
    config.title && ( form[ 'title' ].value = config.title );
    config.subTitle && ( form[ 'sub-title' ].value = config.subTitle );
    config.xTitle && ( form[ 'x-title' ].value = config.xTitle );
    config.yTitle && ( form[ 'y-title' ].value = config.yTitle );
    config.suffix && ( form[ 'unit' ].value = config.suffix );
    config.dataFormat == "-1" && ( form[ 'charts-format' ][ 1 ].checked = true );
    config.tip && ( form[ 'tip' ].value = config.tip );
    currentChartType = config.chartType || 0;
}
function getSeriesAndCategories () {
    var form = document.forms[ 'data-form' ],
        series = [],
        categories = [],
        tmp = [],
        tableData = getTableData();
    //反转数据
    if ( getTableDataFormat() === "-1" ) {
        for ( var i = 0, len = tableData.length; i < len; i++ ) {
            for ( var j = 0, jlen = tableData[ i ].length; j < jlen; j++ ) {
                if ( !tmp[ j ] ) {
                    tmp[ j ] = [];
                }
                tmp[ j ][ i ] = tableData[ i ][ j ];
            }
        }
        tableData = tmp;
    }
    categories = tableData[0].slice( 1 );
    for ( var i = 1, data; data = tableData[ i ]; i++ ) {
        series.push( {
            name: data[ 0 ],
            data: data.slice( 1 )
        } );
    }
    return {
        series: series,
        categories: categories
    };
}
/*
 * 获取数据源数据对齐方式
 */
function getTableDataFormat () {
    var form = document.forms[ 'data-form' ],
        items = form['charts-format'];
    return items[ 0 ].checked ? items[ 0 ].value : items[ 1 ].value;
}
/*
 * 禁用非饼图类型的配置项
 */
function disableNotPieConfig() {
    updateConfigItem( 'disable' );
}
/*
 * 启用非饼图类型的配置项
 */
function enableNotPieConfig() {
    updateConfigItem( 'enable' );
}
function updateConfigItem ( value ) {
    var table = $( "#showTable" )[ 0 ],
        isDisable = value === 'disable' ? true : false;
    //table中的input处理
    for ( var i = 2 , row; row = table.rows[ i ]; i++ ) {
        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {
            $( "input", cell ).attr( "disabled", isDisable );
        }
    }
    //其他项处理
    $( "input.not-pie-item" ).attr( "disabled", isDisable );
    $( "#tipInput" ).attr( "disabled", !isDisable )
}
/*
 * 获取饼图数据
 * 饼图的数据只取第一行的
 **/
function getSeriesForPieChart () {
    var series = {
            type: 'pie',
            name: $("#tipInput").val(),
            data: []
        },
        tableData = getTableData();
    for ( var j = 1, jlen = tableData[ 0 ].length; j < jlen; j++ ) {
        var title = tableData[ 0 ][ j ],
            val = tableData[ 1 ][ j ];
        series.data.push( [ title, val ] );
    }
    return {
        series: [ series ]
    };
}
function getTableData () {
    var table = document.getElementById( "showTable" ),
        xCount = table.rows[0].cells.length - 1,
        values = getTableInputValue();
    for ( var i = 0, value; value = values[ i ]; i++ ) {
        tableData[ Math.floor( i / xCount ) + 1 ][ i % xCount + 1 ] = values[ i ];
    }
    return tableData;
}
function getTableInputValue () {
    var table = document.getElementById( "showTable" ),
        inputs = table.getElementsByTagName( "input" ),
        values = [];
    for ( var i = 0, input; input = inputs[ i ]; i++ ) {
        values.push( input.value | 0 );
    }
    return values;
}
function getCellValue ( cell ) {
    var value = utils.trim( ( cell.innerText || cell.textContent || '' ) );
    return value.replace( new RegExp( UE.dom.domUtils.fillChar, 'g' ), '' ).replace( /^\s+|\s+$/g, '' );
}
//dialog确认事件
dialog.onok = function () {
    //收集信息
    var form = document.forms[ 'data-form' ],
        info = getUserConfig();
    //添加图表类型
    info.chartType = currentChartType;
    //同步表格数据到编辑器
    syncTableData();
    //执行图表命令
    editor.execCommand( 'charts', info );
};
/*
 * 同步图表编辑视图的表格数据到编辑器里的原始表格
 */
function syncTableData () {
    var tableData = getTableData();
    for ( var i = 1, row; row = editorTable.rows[ i ]; i++ ) {
        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {
            cell.innerHTML = tableData[ i ] [ j ];
        }
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/images/charts0.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/images/charts1.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/images/charts2.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/images/charts3.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/images/charts4.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/charts/images/charts5.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/emotion.css
New file
@@ -0,0 +1,43 @@
.jd img{
    background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top;
    cursor:pointer;width:35px;height:35px;display:block;
}
.pp img{
    background:transparent url(images/fface.gif?v=1.1) no-repeat scroll left top;
    cursor:pointer;width:25px;height:25px;display:block;
}
.ldw img{
    background:transparent url(images/wface.gif?v=1.1) no-repeat scroll left top;
    cursor:pointer;width:35px;height:35px;display:block;
}
.tsj img{
    background:transparent url(images/tface.gif?v=1.1) no-repeat scroll left top;
    cursor:pointer;width:35px;height:35px;display:block;
}
.cat img{
    background:transparent url(images/cface.gif?v=1.1) no-repeat scroll left top;
    cursor:pointer;width:35px;height:35px;display:block;
}
.bb img{
    background:transparent url(images/bface.gif?v=1.1) no-repeat scroll left top;
    cursor:pointer;width:35px;height:35px;display:block;
}
.youa img{
    background:transparent url(images/yface.gif?v=1.1) no-repeat scroll left top;
    cursor:pointer;width:35px;height:35px;display:block;
}
.smileytable td {height: 37px;}
#tabPanel{margin-left:5px;overflow: hidden;}
#tabContent {float:left;background:#FFFFFF;}
#tabContent div{display: none;width:480px;overflow:hidden;}
#tabIconReview.show{left:17px;display:block;}
.menuFocus{background:#ACCD3C;}
.menuDefault{background:#FFFFFF;}
#tabIconReview{position:absolute;left:406px;left:398px \9;top:41px;z-index:65533;width:90px;height:76px;}
img.review{width:90px;height:76px;border:2px solid #9cb945;background:#FFFFFF;background-position:center;background-repeat:no-repeat;}
.wrapper .tabbody{position:relative;float:left;clear:both;padding:10px;width: 95%;}
.tabbody table{width: 100%;}
.tabbody td{border:1px solid #BAC498;}
.tabbody td span{display: block;zoom:1;padding:0 4px;}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/emotion.html
New file
@@ -0,0 +1,54 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="robots" content="noindex, nofollow"/>
    <script type="text/javascript" src="../internal.js"></script>
    <link rel="stylesheet" type="text/css" href="emotion.css">
</head>
<body>
<div id="tabPanel" class="wrapper">
    <div id="tabHeads" class="tabhead">
        <span><var id="lang_input_choice"></var></span>
        <span><var id="lang_input_Tuzki"></var></span>
        <span><var id="lang_input_lvdouwa"></var></span>
        <span><var id="lang_input_BOBO"></var></span>
        <span><var id="lang_input_babyCat"></var></span>
        <span><var id="lang_input_bubble"></var></span>
        <span><var id="lang_input_youa"></var></span>
    </div>
    <div id="tabBodys" class="tabbody">
        <div id="tab0"></div>
        <div id="tab1"></div>
        <div id="tab2"></div>
        <div id="tab3"></div>
        <div id="tab4"></div>
        <div id="tab5"></div>
        <div id="tab6"></div>
    </div>
</div>
<div id="tabIconReview">
    <img id='faceReview' class='review' src="../../themes/default/images/spacer.gif"/>
</div>
<script type="text/javascript" src="emotion.js"></script>
<script type="text/javascript">
    var emotion = {
        tabNum:7, //切换面板数量
        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] }, //图片前缀名
        imageFolders:{ tab0:'jx2/', tab1:'tsj/', tab2:'ldw/', tab3:'bobo/', tab4:'babycat/', tab5:'face/', tab6:'youa/'}, //图片对应文件夹路径
        imageCss:{tab0:'jd', tab1:'tsj', tab2:'ldw', tab3:'bb', tab4:'cat', tab5:'pp', tab6:'youa'}, //图片css类名
        imageCssOffset:{tab0:35, tab1:35, tab2:35, tab3:35, tab4:35, tab5:25, tab6:35}, //图片偏移
        SmileyInfor:{
            tab0:['Kiss', 'Love', 'Yeah', '啊!', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '打酱油', '俯卧撑', '气愤', '?', '吻', '怒', '胜利', 'HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '微笑', '亲吻', '调皮', '惊恐', '耍酷', '发火', '害羞', '汗水', '大哭', '', '加油', '困', '你NB', '晕倒', '开心', '偷笑', '大哭', '滴汗', '叹气', '超赞', '??', '飞吻', '天使', '撒花', '生气', '被砸', '吓傻', '随意吐'],
            tab1:['Kiss', 'Love', 'Yeah', '啊!', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '摊手', '睡觉', '瘫坐', '无聊', '星星闪', '旋转', '也不行', '郁闷', '正Music', '抓墙', '撞墙至死', '歪头', '戳眼', '飘过', '互相拍砖', '砍死你', '扔桌子', '少林寺', '什么?', '转头', '我爱牛奶', '我踢', '摇晃', '晕厥', '在笼子里', '震荡'],
            tab2:['大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '我错了', 'money', '气愤', '挑逗', '吻', '怒', '胜利', '委屈', '受伤', '说啥呢?', '闭嘴', '不', '逗你玩儿', '飞吻', '眩晕', '魔法', '我来了', '睡了', '我打', '闭嘴', '打', '打晕了', '刷牙', '爆揍', '炸弹', '倒立', '刮胡子', '邪恶的笑', '不要不要', '爱恋中', '放大仔细看', '偷窥', '超高兴', '晕', '松口气', '我跑', '享受', '修养', '哭', '汗', '啊~', '热烈欢迎', '打酱油', '俯卧撑', '?'],
            tab3:['HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '泪眼', '流泪', '生气', '吐舌', '喜欢', '旋转', '再见', '抓狂', '汗', '鄙视', '拜', '吐血', '嘘', '打人', '蹦跳', '变脸', '扯肉', '吃To', '吃花', '吹泡泡糖', '大变身', '飞天舞', '回眸', '可怜', '猛抽', '泡泡', '苹果', '亲', '', '骚舞', '烧香', '睡', '套娃娃', '捅捅', '舞倒', '西红柿', '爱慕', '摇', '摇摆', '杂耍', '招财', '被殴', '被球闷', '大惊', '理想', '欧打', '呕吐', '碎', '吐痰'],
            tab4:['发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '顶', '幸运', '爱心', '躲', '送花', '选择'],
            tab5:['微笑', '亲吻', '调皮', '惊讶', '耍酷', '发火', '害羞', '汗水', '大哭', '得意', '鄙视', '困', '夸奖', '晕倒', '疑问', '媒婆', '狂吐', '青蛙', '发愁', '亲吻', '', '爱心', '心碎', '玫瑰', '礼物', '哭', '奸笑', '可爱', '得意', '呲牙', '暴汗', '楚楚可怜', '困', '哭', '生气', '惊讶', '口水', '彩虹', '夜空', '太阳', '钱钱', '灯泡', '咖啡', '蛋糕', '音乐', '爱', '胜利', '赞', '鄙视', 'OK'],
            tab6:['男兜', '女兜', '开心', '乖乖', '偷笑', '大笑', '抽泣', '大哭', '无奈', '滴汗', '叹气', '狂晕', '委屈', '超赞', '??', '疑问', '飞吻', '天使', '撒花', '生气', '被砸', '口水', '泪奔', '吓傻', '吐舌头', '点头', '随意吐', '旋转', '困困', '鄙视', '狂顶', '篮球', '再见', '欢迎光临', '恭喜发财', '稍等', '我在线', '恕不议价', '库房有货', '货在路上']
        }
    };
</script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/emotion.js
New file
@@ -0,0 +1,186 @@
window.onload = function () {
    editor.setOpt({
        emotionLocalization:false
    });
    emotion.SmileyPath = editor.options.emotionLocalization === true ? 'images/' : "http://img.baidu.com/hi/";
    emotion.SmileyBox = createTabList( emotion.tabNum );
    emotion.tabExist = createArr( emotion.tabNum );
    initImgName();
    initEvtHandler( "tabHeads" );
};
function initImgName() {
    for ( var pro in emotion.SmilmgName ) {
        var tempName = emotion.SmilmgName[pro],
                tempBox = emotion.SmileyBox[pro],
                tempStr = "";
        if ( tempBox.length ) return;
        for ( var i = 1; i <= tempName[1]; i++ ) {
            tempStr = tempName[0];
            if ( i < 10 ) tempStr = tempStr + '0';
            tempStr = tempStr + i + '.gif';
            tempBox.push( tempStr );
        }
    }
}
function initEvtHandler( conId ) {
    var tabHeads = $G( conId );
    for ( var i = 0, j = 0; i < tabHeads.childNodes.length; i++ ) {
        var tabObj = tabHeads.childNodes[i];
        if ( tabObj.nodeType == 1 ) {
            domUtils.on( tabObj, "click", (function ( index ) {
                return function () {
                    switchTab( index );
                };
            })( j ) );
            j++;
        }
    }
    switchTab( 0 );
    $G( "tabIconReview" ).style.display = 'none';
}
function InsertSmiley( url, evt ) {
    var obj = {
        src:editor.options.emotionLocalization ? editor.options.UEDITOR_HOME_URL + "dialogs/emotion/" + url : url
    };
    obj._src = obj.src;
    editor.execCommand( 'insertimage', obj );
    if ( !evt.ctrlKey ) {
        dialog.popup.hide();
    }
}
function switchTab( index ) {
    autoHeight( index );
    if ( emotion.tabExist[index] == 0 ) {
        emotion.tabExist[index] = 1;
        createTab( 'tab' + index );
    }
    //获取呈现元素句柄数组
    var tabHeads = $G( "tabHeads" ).getElementsByTagName( "span" ),
            tabBodys = $G( "tabBodys" ).getElementsByTagName( "div" ),
            i = 0, L = tabHeads.length;
    //隐藏所有呈现元素
    for ( ; i < L; i++ ) {
        tabHeads[i].className = "";
        tabBodys[i].style.display = "none";
    }
    //显示对应呈现元素
    tabHeads[index].className = "focus";
    tabBodys[index].style.display = "block";
}
function autoHeight( index ) {
    var iframe = dialog.getDom( "iframe" ),
            parent = iframe.parentNode.parentNode;
    switch ( index ) {
        case 0:
            iframe.style.height = "380px";
            parent.style.height = "392px";
            break;
        case 1:
            iframe.style.height = "220px";
            parent.style.height = "232px";
            break;
        case 2:
            iframe.style.height = "260px";
            parent.style.height = "272px";
            break;
        case 3:
            iframe.style.height = "300px";
            parent.style.height = "312px";
            break;
        case 4:
            iframe.style.height = "140px";
            parent.style.height = "152px";
            break;
        case 5:
            iframe.style.height = "260px";
            parent.style.height = "272px";
            break;
        case 6:
            iframe.style.height = "230px";
            parent.style.height = "242px";
            break;
        default:
    }
}
function createTab( tabName ) {
    var faceVersion = "?v=1.1", //版本号
            tab = $G( tabName ), //获取将要生成的Div句柄
            imagePath = emotion.SmileyPath + emotion.imageFolders[tabName], //获取显示表情和预览表情的路径
            positionLine = 11 / 2, //中间数
            iWidth = iHeight = 35, //图片长宽
            iColWidth = 3, //表格剩余空间的显示比例
            tableCss = emotion.imageCss[tabName],
            cssOffset = emotion.imageCssOffset[tabName],
            textHTML = ['<table class="smileytable">'],
            i = 0, imgNum = emotion.SmileyBox[tabName].length, imgColNum = 11, faceImage,
            sUrl, realUrl, posflag, offset, infor;
    for ( ; i < imgNum; ) {
        textHTML.push( '<tr>' );
        for ( var j = 0; j < imgColNum; j++, i++ ) {
            faceImage = emotion.SmileyBox[tabName][i];
            if ( faceImage ) {
                sUrl = imagePath + faceImage + faceVersion;
                realUrl = imagePath + faceImage;
                posflag = j < positionLine ? 0 : 1;
                offset = cssOffset * i * (-1) - 1;
                infor = emotion.SmileyInfor[tabName][i];
                textHTML.push( '<td  class="' + tableCss + '"   border="1" width="' + iColWidth + '%" style="border-collapse:collapse;" align="center"  bgcolor="transparent" onclick="InsertSmiley(\'' + realUrl.replace( /'/g, "\\'" ) + '\',event)" onmouseover="over(this,\'' + sUrl + '\',\'' + posflag + '\')" onmouseout="out(this)">' );
                textHTML.push( '<span>' );
                textHTML.push( '<img  style="background-position:left ' + offset + 'px;" title="' + infor + '" src="' + emotion.SmileyPath + (editor.options.emotionLocalization ? '0.gif" width="' : 'default/0.gif" width="') + iWidth + '" height="' + iHeight + '"></img>' );
                textHTML.push( '</span>' );
            } else {
                textHTML.push( '<td width="' + iColWidth + '%"   bgcolor="#FFFFFF">' );
            }
            textHTML.push( '</td>' );
        }
        textHTML.push( '</tr>' );
    }
    textHTML.push( '</table>' );
    textHTML = textHTML.join( "" );
    tab.innerHTML = textHTML;
}
function over( td, srcPath, posFlag ) {
    td.style.backgroundColor = "#ACCD3C";
    $G( 'faceReview' ).style.backgroundImage = "url(" + srcPath + ")";
    if ( posFlag == 1 ) $G( "tabIconReview" ).className = "show";
    $G( "tabIconReview" ).style.display = 'block';
}
function out( td ) {
    td.style.backgroundColor = "transparent";
    var tabIconRevew = $G( "tabIconReview" );
    tabIconRevew.className = "";
    tabIconRevew.style.display = 'none';
}
function createTabList( tabNum ) {
    var obj = {};
    for ( var i = 0; i < tabNum; i++ ) {
        obj["tab" + i] = [];
    }
    return obj;
}
function createArr( tabNum ) {
    var arr = [];
    for ( var i = 0; i < tabNum; i++ ) {
        arr[i] = 0;
    }
    return arr;
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/0.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/bface.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/cface.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/fface.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/jxface2.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/neweditor-tab-bg.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/tface.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/wface.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/emotion/images/yface.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/gmap/gmap.html
New file
@@ -0,0 +1,89 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript" src="../internal.js"></script>
    <style type="text/css">
        .content{width:530px; height: 350px;margin: 10px auto;}
        .content table{width: 100%}
        .content table td{vertical-align: middle;}
        #address{width:220px;height:21px;background: #FFF;border:1px solid #d7d7d7; line-height: 21px;}
    </style>
    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
</head>
<body>
<div class="content">
    <table>
        <tr>
            <td><label for="address"><var id="lang_input_address"></var></label></td>
            <td><input id="address" type="text" /></td>
            <td><a id="doSearch" href="javascript:void(0)" class="button"><var id="lang_input_search"></var></a></td>
        </tr>
    </table>
    <div id="container" style="width: 100%; height: 340px;margin: 5px auto; border: 1px solid gray;"></div>
</div>
<script type="text/javascript">
    domUtils.on(window,"load",function(){
        var map = new google.maps.Map(document.getElementById('container'), {
                zoom: 3,
                streetViewControl: false,
                scaleControl: true,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            });
            var imgcss;
            var marker = new google.maps.Marker({
                map: map,
                draggable: true
            });
            function doSearch(){
                var address = document.getElementById('address').value;
                var geocoder = new google.maps.Geocoder();
                geocoder.geocode( { 'address': address}, function (results, status) {
                    if (status == google.maps.GeocoderStatus.OK) {
                        var bounds = results[0].geometry.viewport;
                        map.fitBounds(bounds);
                        marker.setPosition(results[0].geometry.location);
                        marker.setTitle(address);
                    } else alert(lang.searchError);
                });
            }
            $G('address').onkeydown = function (evt){
                evt = evt || event;
                if (evt.keyCode == 13) {
                    doSearch();
                }
            };
            $G("doSearch").onclick = doSearch;
            dialog.onok = function (){
                var center = map.getCenter();
                var point = marker.getPosition();
                var url = "http://maps.googleapis.com/maps/api/staticmap?center=" + center.lat() + ',' + center.lng() + "&zoom=" + map.zoom + "&size=520x340&maptype=" + map.getMapTypeId() + "&markers=" + point.lat() + ',' + point.lng() + "&sensor=false";
                editor.execCommand('inserthtml', '<img width="520" height="340" src="' + url + '"' + (imgcss ? ' style="' + imgcss + '"' :'') + '/>');
            };
            function getPars(str,par){
                var reg = new RegExp(par+"=((\\d+|[.,])*)","g");
                return reg.exec(str)[1];
            }
            var img = editor.selection.getRange().getClosedNode();
            if(img && img.src.indexOf("http://maps.googleapis.com/maps/api/staticmap")!=-1){
                var url = img.getAttribute("src");
                var centers = getPars(url,"center").split(",");
                point = new google.maps.LatLng(Number(centers[0]),Number(centers[1]));
                map.setCenter(point);
                map.setZoom(Number(getPars(url,"zoom")));
                centers = getPars(url,"markers").split(",");
                marker.setPosition(new google.maps.LatLng(Number(centers[0]),Number(centers[1])));
                imgcss = img.style.cssText;
            }else{
                setTimeout(function(){
                    doSearch();
                },30)
            }
    });
</script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/help/help.css
New file
@@ -0,0 +1,7 @@
.wrapper{width: 370px;margin: 10px auto;zoom: 1;}
.tabbody{height: 360px;}
.tabbody .panel{width:100%;height: 360px;position: absolute;background: #fff;}
.tabbody .panel h1{font-size:26px;margin: 5px 0 0 5px;}
.tabbody .panel p{font-size:12px;margin: 5px 0 0 5px;}
.tabbody table{width:90%;line-height: 20px;margin: 5px 0 0 5px;;}
.tabbody table thead{font-weight: bold;line-height: 25px;}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/help/help.html
New file
@@ -0,0 +1,82 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>帮助</title>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
    <script type="text/javascript" src="../internal.js"></script>
    <link rel="stylesheet" type="text/css" href="help.css">
</head>
<body>
<div class="wrapper" id="helptab">
    <div id="tabHeads" class="tabhead">
        <span class="focus" tabsrc="about"><var id="lang_input_about"></var></span>
        <span tabsrc="shortcuts"><var id="lang_input_shortcuts"></var></span>
    </div>
    <div id="tabBodys" class="tabbody">
        <div id="about" class="panel">
            <h1>UEditor</h1>
            <p id="version"></p>
            <p><var id="lang_input_introduction"></var></p>
        </div>
        <div id="shortcuts" class="panel">
            <table>
                <thead>
                <tr>
                    <td><var id="lang_Txt_shortcuts"></var></td>
                    <td><var id="lang_Txt_func"></var></td>
                </tr>
                </thead>
                <tbody>
                <tr>
                    <td>ctrl+b</td>
                    <td><var id="lang_Txt_bold"></var></td>
                </tr>
                <tr>
                    <td>ctrl+c</td>
                    <td><var id="lang_Txt_copy"></var></td>
                </tr>
                <tr>
                    <td>ctrl+x</td>
                    <td><var id="lang_Txt_cut"></var></td>
                </tr>
                <tr>
                    <td>ctrl+v</td>
                    <td><var id="lang_Txt_Paste"></var></td>
                </tr>
                <tr>
                    <td>ctrl+y</td>
                    <td><var id="lang_Txt_undo"></var></td>
                </tr>
                <tr>
                    <td>ctrl+z</td>
                    <td><var id="lang_Txt_redo"></var></td>
                </tr>
                <tr>
                    <td>ctrl+i</td>
                    <td><var id="lang_Txt_italic"></var></td>
                </tr>
                <tr>
                    <td>ctrl+u</td>
                    <td><var id="lang_Txt_underline"></var></td>
                </tr>
                <tr>
                    <td>ctrl+a</td>
                    <td><var id="lang_Txt_selectAll"></var></td>
                </tr>
                <tr>
                    <td>shift+enter</td>
                    <td><var id="lang_Txt_visualEnter"></var></td>
                </tr>
                <tr>
                    <td>alt+z</td>
                    <td><var id="lang_Txt_fullscreen"></var></td>
                </tr>
                </tbody>
            </table>
        </div>
    </div>
</div>
<script type="text/javascript" src="help.js"></script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/help/help.js
New file
@@ -0,0 +1,56 @@
/**
 * Created with JetBrains PhpStorm.
 * User: xuheng
 * Date: 12-9-26
 * Time: 下午1:06
 * To change this template use File | Settings | File Templates.
 */
/**
 * tab点击处理事件
 * @param tabHeads
 * @param tabBodys
 * @param obj
 */
function clickHandler( tabHeads,tabBodys,obj ) {
    //head样式更改
    for ( var k = 0, len = tabHeads.length; k < len; k++ ) {
        tabHeads[k].className = "";
    }
    obj.className = "focus";
    //body显隐
    var tabSrc = obj.getAttribute( "tabSrc" );
    for ( var j = 0, length = tabBodys.length; j < length; j++ ) {
        var body = tabBodys[j],
            id = body.getAttribute( "id" );
        body.onclick = function(){
            this.style.zoom = 1;
        };
        if ( id != tabSrc ) {
            body.style.zIndex = 1;
        } else {
            body.style.zIndex = 200;
        }
    }
}
/**
 * TAB切换
 * @param tabParentId  tab的父节点ID或者对象本身
 */
function switchTab( tabParentId ) {
    var tabElements = $G( tabParentId ).children,
        tabHeads = tabElements[0].children,
        tabBodys = tabElements[1].children;
    for ( var i = 0, length = tabHeads.length; i < length; i++ ) {
        var head = tabHeads[i];
        if ( head.className === "focus" )clickHandler(tabHeads,tabBodys, head );
        head.onclick = function () {
            clickHandler(tabHeads,tabBodys,this);
        }
    }
}
switchTab("helptab");
document.getElementById('version').innerHTML = parent.UE.version;
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/image.css
New file
@@ -0,0 +1,894 @@
@charset "utf-8";
/* dialog样式 */
.wrapper {
    zoom: 1;
    width: 630px;
    *width: 626px;
    height: 380px;
    margin: 0 auto;
    padding: 10px;
    position: relative;
    font-family: sans-serif;
}
/*tab样式框大小*/
.tabhead {
    float:left;
}
.tabbody {
    width: 100%;
    height: 346px;
    position: relative;
    clear: both;
}
.tabbody .panel {
    position: absolute;
    width: 0;
    height: 0;
    background: #fff;
    overflow: hidden;
    display: none;
}
.tabbody .panel.focus {
    width: 100%;
    height: 346px;
    display: block;
}
/* 图片对齐方式 */
.alignBar{
    float:right;
    margin-top: 5px;
    position: relative;
}
.alignBar .algnLabel{
    float:left;
    height: 20px;
    line-height: 20px;
}
.alignBar #alignIcon{
    zoom:1;
    _display: inline;
    display: inline-block;
    position: relative;
}
.alignBar #alignIcon span{
    float: left;
    cursor: pointer;
    display: block;
    width: 19px;
    height: 17px;
    margin-right: 3px;
    margin-left: 3px;
    background-image: url(./images/alignicon.jpg);
}
.alignBar #alignIcon .none-align{
    background-position: 0 -18px;
}
.alignBar #alignIcon .left-align{
    background-position: -20px -18px;
}
.alignBar #alignIcon .right-align{
    background-position: -40px -18px;
}
.alignBar #alignIcon .center-align{
    background-position: -60px -18px;
}
.alignBar #alignIcon .none-align.focus{
    background-position: 0 0;
}
.alignBar #alignIcon .left-align.focus{
    background-position: -20px 0;
}
.alignBar #alignIcon .right-align.focus{
    background-position: -40px 0;
}
.alignBar #alignIcon .center-align.focus{
    background-position: -60px 0;
}
/* 远程图片样式 */
#remote {
    z-index: 200;
}
#remote .top{
    width: 100%;
    margin-top: 25px;
}
#remote .left{
    display: block;
    float: left;
    width: 300px;
    height:10px;
}
#remote .right{
    display: block;
    float: right;
    width: 300px;
    height:10px;
}
#remote .row{
    margin-left: 20px;
    clear: both;
    height: 40px;
}
#remote .row label{
    text-align: center;
    width: 50px;
    zoom:1;
    _display: inline;
    display:inline-block;
    vertical-align: middle;
}
#remote .row label.algnLabel{
    float: left;
}
#remote input.text{
    width: 150px;
    padding: 3px 6px;
    font-size: 14px;
    line-height: 1.42857143;
    color: #555;
    background-color: #fff;
    background-image: none;
    border: 1px solid #ccc;
    border-radius: 4px;
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
#remote input.text:focus {
    border-color: #66afe9;
    outline: 0;
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
}
#remote #url{
    width: 500px;
    margin-bottom: 2px;
}
#remote #width,
#remote #height{
    width: 20px;
    margin-left: 2px;
    margin-right: 2px;
}
#remote #border,
#remote #vhSpace,
#remote #title{
    width: 180px;
    margin-right: 5px;
}
#remote #lock{
}
#remote #lockicon{
    zoom: 1;
    _display:inline;
    display: inline-block;
    width: 20px;
    height: 20px;
    background: url("../../themes/default/images/lock.gif") -13px -13px no-repeat;
    vertical-align: middle;
}
#remote #preview{
    clear: both;
    width: 260px;
    height: 240px;
    z-index: 9999;
    margin-top: 10px;
    background-color: #eee;
    overflow: hidden;
}
/* 上传图片 */
.tabbody #upload.panel {
    width: 0;
    height: 0;
    overflow: hidden;
    position: absolute !important;
    clip: rect(1px, 1px, 1px, 1px);
    background: #fff;
    display: block;
}
.tabbody #upload.panel.focus {
    width: 100%;
    height: 346px;
    display: block;
    clip: auto;
}
#upload .queueList {
    margin: 0;
    width: 100%;
    height: 100%;
    position: absolute;
    overflow: hidden;
}
#upload p {
    margin: 0;
}
.element-invisible {
    width: 0 !important;
    height: 0 !important;
    border: 0;
    padding: 0;
    margin: 0;
    overflow: hidden;
    position: absolute !important;
    clip: rect(1px, 1px, 1px, 1px);
}
#upload .placeholder {
    margin: 10px;
    border: 2px dashed #e6e6e6;
    *border: 0px dashed #e6e6e6;
    height: 172px;
    padding-top: 150px;
    text-align: center;
    background: url(./images/image.png) center 70px no-repeat;
    color: #cccccc;
    font-size: 18px;
    position: relative;
    top:0;
    *top: 10px;
}
#upload .placeholder .webuploader-pick {
    font-size: 18px;
    background: #00b7ee;
    border-radius: 3px;
    line-height: 44px;
    padding: 0 30px;
    *width: 120px;
    color: #fff;
    display: inline-block;
    margin: 0 auto 20px auto;
    cursor: pointer;
    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
}
#upload .placeholder .webuploader-pick-hover {
    background: #00a2d4;
}
#filePickerContainer {
    text-align: center;
}
#upload .placeholder .flashTip {
    color: #666666;
    font-size: 12px;
    position: absolute;
    width: 100%;
    text-align: center;
    bottom: 20px;
}
#upload .placeholder .flashTip a {
    color: #0785d1;
    text-decoration: none;
}
#upload .placeholder .flashTip a:hover {
    text-decoration: underline;
}
#upload .placeholder.webuploader-dnd-over {
    border-color: #999999;
}
#upload .filelist {
    list-style: none;
    margin: 0;
    padding: 0;
    overflow-x: hidden;
    overflow-y: auto;
    position: relative;
    height: 300px;
}
#upload .filelist:after {
    content: '';
    display: block;
    width: 0;
    height: 0;
    overflow: hidden;
    clear: both;
    position: relative;
}
#upload .filelist li {
    width: 113px;
    height: 113px;
    background: url(./images/bg.png);
    text-align: center;
    margin: 9px 0 0 9px;
    *margin: 6px 0 0 6px;
    position: relative;
    display: block;
    float: left;
    overflow: hidden;
    font-size: 12px;
}
#upload .filelist li p.log {
    position: relative;
    top: -45px;
}
#upload .filelist li p.title {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    top: 5px;
    text-indent: 5px;
    text-align: left;
}
#upload .filelist li p.progress {
    position: absolute;
    width: 100%;
    bottom: 0;
    left: 0;
    height: 8px;
    overflow: hidden;
    z-index: 50;
    margin: 0;
    border-radius: 0;
    background: none;
    -webkit-box-shadow: 0 0 0;
}
#upload .filelist li p.progress span {
    display: none;
    overflow: hidden;
    width: 0;
    height: 100%;
    background: #1483d8 url(./images/progress.png) repeat-x;
    -webit-transition: width 200ms linear;
    -moz-transition: width 200ms linear;
    -o-transition: width 200ms linear;
    -ms-transition: width 200ms linear;
    transition: width 200ms linear;
    -webkit-animation: progressmove 2s linear infinite;
    -moz-animation: progressmove 2s linear infinite;
    -o-animation: progressmove 2s linear infinite;
    -ms-animation: progressmove 2s linear infinite;
    animation: progressmove 2s linear infinite;
    -webkit-transform: translateZ(0);
}
@-webkit-keyframes progressmove {
    0% {
        background-position: 0 0;
    }
    100% {
        background-position: 17px 0;
    }
}
@-moz-keyframes progressmove {
    0% {
        background-position: 0 0;
    }
    100% {
        background-position: 17px 0;
    }
}
@keyframes progressmove {
    0% {
        background-position: 0 0;
    }
    100% {
        background-position: 17px 0;
    }
}
#upload .filelist li p.imgWrap {
    position: relative;
    z-index: 2;
    line-height: 113px;
    vertical-align: middle;
    overflow: hidden;
    width: 113px;
    height: 113px;
    -webkit-transform-origin: 50% 50%;
    -moz-transform-origin: 50% 50%;
    -o-transform-origin: 50% 50%;
    -ms-transform-origin: 50% 50%;
    transform-origin: 50% 50%;
    -webit-transition: 200ms ease-out;
    -moz-transition: 200ms ease-out;
    -o-transition: 200ms ease-out;
    -ms-transition: 200ms ease-out;
    transition: 200ms ease-out;
}
#upload .filelist li img {
    width: 100%;
}
#upload .filelist li p.error {
    background: #f43838;
    color: #fff;
    position: absolute;
    bottom: 0;
    left: 0;
    height: 28px;
    line-height: 28px;
    width: 100%;
    z-index: 100;
    display:none;
}
#upload .filelist li .success {
    display: block;
    position: absolute;
    left: 0;
    bottom: 0;
    height: 40px;
    width: 100%;
    z-index: 200;
    background: url(./images/success.png) no-repeat right bottom;
    background: url(./images/success.gif) no-repeat right bottom \9;
}
#upload .filelist li.filePickerBlock {
    width: 113px;
    height: 113px;
    background: url(./images/image.png) no-repeat center 12px;
    border: 1px solid #eeeeee;
    border-radius: 0;
}
#upload .filelist li.filePickerBlock div.webuploader-pick  {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    opacity: 0;
    background: none;
    font-size: 0;
}
#upload .filelist div.file-panel {
    position: absolute;
    height: 0;
    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0;
    background: rgba(0, 0, 0, 0.5);
    width: 100%;
    top: 0;
    left: 0;
    overflow: hidden;
    z-index: 300;
}
#upload .filelist div.file-panel span {
    width: 24px;
    height: 24px;
    display: inline;
    float: right;
    text-indent: -9999px;
    overflow: hidden;
    background: url(./images/icons.png) no-repeat;
    background: url(./images/icons.gif) no-repeat \9;
    margin: 5px 1px 1px;
    cursor: pointer;
    -webkit-tap-highlight-color: rgba(0,0,0,0);
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
#upload .filelist div.file-panel span.rotateLeft {
    display:none;
    background-position: 0 -24px;
}
#upload .filelist div.file-panel span.rotateLeft:hover {
    background-position: 0 0;
}
#upload .filelist div.file-panel span.rotateRight {
    display:none;
    background-position: -24px -24px;
}
#upload .filelist div.file-panel span.rotateRight:hover {
    background-position: -24px 0;
}
#upload .filelist div.file-panel span.cancel {
    background-position: -48px -24px;
}
#upload .filelist div.file-panel span.cancel:hover {
    background-position: -48px 0;
}
#upload .statusBar {
    height: 45px;
    border-bottom: 1px solid #dadada;
    margin: 0 10px;
    padding: 0;
    line-height: 45px;
    vertical-align: middle;
    position: relative;
}
#upload .statusBar .progress {
    border: 1px solid #1483d8;
    width: 198px;
    background: #fff;
    height: 18px;
    position: absolute;
    top: 12px;
    display: none;
    text-align: center;
    line-height: 18px;
    color: #6dbfff;
    margin: 0 10px 0 0;
}
#upload .statusBar .progress span.percentage {
    width: 0;
    height: 100%;
    left: 0;
    top: 0;
    background: #1483d8;
    position: absolute;
}
#upload .statusBar .progress span.text {
    position: relative;
    z-index: 10;
}
#upload .statusBar .info {
    display: inline-block;
    font-size: 14px;
    color: #666666;
}
#upload .statusBar .btns {
    position: absolute;
    top: 7px;
    right: 0;
    line-height: 30px;
}
#filePickerBtn {
    display: inline-block;
    float: left;
}
#upload .statusBar .btns .webuploader-pick,
#upload .statusBar .btns .uploadBtn,
#upload .statusBar .btns .uploadBtn.state-uploading,
#upload .statusBar .btns .uploadBtn.state-paused {
    background: #ffffff;
    border: 1px solid #cfcfcf;
    color: #565656;
    padding: 0 18px;
    display: inline-block;
    border-radius: 3px;
    margin-left: 10px;
    cursor: pointer;
    font-size: 14px;
    float: left;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
#upload .statusBar .btns .webuploader-pick-hover,
#upload .statusBar .btns .uploadBtn:hover,
#upload .statusBar .btns .uploadBtn.state-uploading:hover,
#upload .statusBar .btns .uploadBtn.state-paused:hover {
    background: #f0f0f0;
}
#upload .statusBar .btns .uploadBtn,
#upload .statusBar .btns .uploadBtn.state-paused{
    background: #00b7ee;
    color: #fff;
    border-color: transparent;
}
#upload .statusBar .btns .uploadBtn:hover,
#upload .statusBar .btns .uploadBtn.state-paused:hover{
    background: #00a2d4;
}
#upload .statusBar .btns .uploadBtn.disabled {
    pointer-events: none;
    filter:alpha(opacity=60);
    -moz-opacity:0.6;
    -khtml-opacity: 0.6;
    opacity: 0.6;
}
/* 图片管理样式 */
#online {
    width: 100%;
    height: 336px;
    padding: 10px 0 0 0;
}
#online #imageList{
    width: 100%;
    height: 100%;
    overflow-x: hidden;
    overflow-y: auto;
    position: relative;
}
#online ul {
    display: block;
    list-style: none;
    margin: 0;
    padding: 0;
}
#online li {
    float: left;
    display: block;
    list-style: none;
    padding: 0;
    width: 113px;
    height: 113px;
    margin: 0 0 9px 9px;
    *margin: 0 0 6px 6px;
    background-color: #eee;
    overflow: hidden;
    cursor: pointer;
    position: relative;
}
#online li.clearFloat {
    float: none;
    clear: both;
    display: block;
    width:0;
    height:0;
    margin: 0;
    padding: 0;
}
#online li img {
    cursor: pointer;
}
#online li .icon {
    cursor: pointer;
    width: 113px;
    height: 113px;
    position: absolute;
    top: 0;
    left: 0;
    z-index: 2;
    border: 0;
    background-repeat: no-repeat;
}
#online li .icon:hover {
    width: 107px;
    height: 107px;
    border: 3px solid #1094fa;
}
#online li.selected .icon {
    background-image: url(images/success.png);
    background-image: url(images/success.gif)\9;
    background-position: 75px 75px;
}
#online li.selected .icon:hover {
    width: 107px;
    height: 107px;
    border: 3px solid #1094fa;
    background-position: 72px 72px;
}
/* 图片搜索样式 */
#search .searchBar {
    width: 100%;
    height: 30px;
    margin: 10px 0 5px 0;
    padding: 0;
}
#search input.text{
    width: 150px;
    padding: 3px 6px;
    font-size: 14px;
    line-height: 1.42857143;
    color: #555;
    background-color: #fff;
    background-image: none;
    border: 1px solid #ccc;
    border-radius: 4px;
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
#search input.text:focus {
    border-color: #66afe9;
    outline: 0;
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
}
#search input.searchTxt {
    margin-left:5px;
    padding-left: 5px;
    background: #FFF;
    width: 300px;
    *width: 260px;
    height: 21px;
    line-height: 21px;
    float: left;
    dislay: block;
}
#search .searchType {
    width: 65px;
    height: 28px;
    padding:0;
    line-height: 28px;
    border: 1px solid #d7d7d7;
    border-radius: 0;
    vertical-align: top;
    margin-left: 5px;
    float: left;
    dislay: block;
}
#search #searchBtn,
#search #searchReset {
    display: inline-block;
    margin-bottom: 0;
    margin-right: 5px;
    padding: 4px 10px;
    font-weight: 400;
    text-align: center;
    vertical-align: middle;
    cursor: pointer;
    background-image: none;
    border: 1px solid transparent;
    white-space: nowrap;
    font-size: 14px;
    border-radius: 4px;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    vertical-align: top;
    float: right;
}
#search #searchBtn {
    color: white;
    border-color: #285e8e;
    background-color: #3b97d7;
}
#search #searchReset {
    color: #333;
    border-color: #ccc;
    background-color: #fff;
}
#search #searchBtn:hover {
    background-color: #3276b1;
}
#search #searchReset:hover {
    background-color: #eee;
}
#search .msg {
    margin-left: 5px;
}
#search .searchList{
    width: 100%;
    height: 300px;
    overflow: hidden;
    clear: both;
}
#search .searchList ul{
    margin:0;
    padding:0;
    list-style:none;
    clear: both;
    width: 100%;
    height: 100%;
    overflow-x: hidden;
    overflow-y: auto;
    zoom: 1;
    position: relative;
}
#search .searchList li {
    list-style:none;
    float: left;
    display: block;
    width: 115px;
    margin: 5px 10px 5px 20px;
    *margin: 5px 10px 5px 15px;
    padding:0;
    font-size: 12px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
    position: relative;
    vertical-align: top;
    text-align: center;
    overflow: hidden;
    cursor: pointer;
    filter: alpha(Opacity=100);
    -moz-opacity: 1;
    opacity: 1;
    border: 2px solid #eee;
}
#search .searchList li.selected {
    filter: alpha(Opacity=40);
    -moz-opacity: 0.4;
    opacity: 0.4;
    border: 2px solid #00a0e9;
}
#search .searchList li p {
    background-color: #eee;
    margin: 0;
    padding: 0;
    position: relative;
    width:100%;
    height:115px;
    overflow: hidden;
}
#search .searchList li p img {
    cursor: pointer;
    border: 0;
}
#search .searchList li a {
    color: #999;
    border-top: 1px solid #F2F2F2;
    background: #FAFAFA;
    text-align: center;
    display: block;
    padding: 0 5px;
    width: 105px;
    height:32px;
    line-height:32px;
    white-space:nowrap;
    text-overflow:ellipsis;
    text-decoration: none;
    overflow: hidden;
    word-break: break-all;
}
#search .searchList a:hover {
    text-decoration: underline;
    color: #333;
}
#search .searchList .clearFloat{
    clear: both;
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/image.html
New file
@@ -0,0 +1,120 @@
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>ueditor图片对话框</title>
    <script type="text/javascript" src="../internal.js"></script>
    <!-- jquery -->
    <script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>
    <!-- webuploader -->
    <script src="../../third-party/webuploader/webuploader.min.js"></script>
    <link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">
    <!-- image dialog -->
    <link rel="stylesheet" href="image.css" type="text/css" />
</head>
<body>
    <div class="wrapper">
        <div id="tabhead" class="tabhead">
            <span class="tab" data-content-id="remote"><var id="lang_tab_remote"></var></span>
            <span class="tab focus" data-content-id="upload"><var id="lang_tab_upload"></var></span>
            <span class="tab" data-content-id="online"><var id="lang_tab_online"></var></span>
            <span class="tab" data-content-id="search"><var id="lang_tab_search"></var></span>
        </div>
        <div class="alignBar">
            <label class="algnLabel"><var id="lang_input_align"></var></label>
                    <span id="alignIcon">
                        <span id="noneAlign" class="none-align focus" data-align="none"></span>
                        <span id="leftAlign" class="left-align" data-align="left"></span>
                        <span id="rightAlign" class="right-align" data-align="right"></span>
                        <span id="centerAlign" class="center-align" data-align="center"></span>
                    </span>
            <input id="align" name="align" type="hidden" value="none"/>
        </div>
        <div id="tabbody" class="tabbody">
            <!-- 远程图片 -->
            <div id="remote" class="panel">
                <div class="top">
                    <div class="row">
                        <label for="url"><var id="lang_input_url"></var></label>
                        <span><input class="text" id="url" type="text"/></span>
                    </div>
                </div>
                <div class="left">
                    <div class="row">
                        <label><var id="lang_input_size"></var></label>
                        <span><var id="lang_input_width">&nbsp;&nbsp;</var><input class="text" type="text" id="width"/>px </span>
                        <span><var id="lang_input_height">&nbsp;&nbsp;</var><input class="text" type="text" id="height"/>px </span>
                        <span><input id="lock" type="checkbox" disabled="disabled"><span id="lockicon"></span></span>
                    </div>
                    <div class="row">
                        <label><var id="lang_input_border"></var></label>
                        <span><input class="text" type="text" id="border"/>px </span>
                    </div>
                    <div class="row">
                        <label><var id="lang_input_vhspace"></var></label>
                        <span><input class="text" type="text" id="vhSpace"/>px </span>
                    </div>
                    <div class="row">
                        <label><var id="lang_input_title"></var></label>
                        <span><input class="text" type="text" id="title"/></span>
                    </div>
                </div>
                <div class="right"><div id="preview"></div></div>
            </div>
            <!-- 上传图片 -->
            <div id="upload" class="panel focus">
                <div id="queueList" class="queueList">
                    <div class="statusBar element-invisible">
                        <div class="progress">
                            <span class="text">0%</span>
                            <span class="percentage"></span>
                        </div><div class="info"></div>
                        <div class="btns">
                            <div id="filePickerBtn"></div>
                            <div class="uploadBtn"><var id="lang_start_upload"></var></div>
                        </div>
                    </div>
                    <div id="dndArea" class="placeholder">
                        <div class="filePickerContainer">
                            <div id="filePickerReady"></div>
                        </div>
                    </div>
                    <ul class="filelist element-invisible">
                        <li id="filePickerBlock" class="filePickerBlock"></li>
                    </ul>
                </div>
            </div>
            <!-- 在线图片 -->
            <div id="online" class="panel">
                <div id="imageList"><var id="lang_imgLoading"></var></div>
            </div>
            <!-- 搜索图片 -->
            <div id="search" class="panel">
                <div class="searchBar">
                    <input id="searchTxt" class="searchTxt text" type="text" />
                    <select id="searchType" class="searchType">
                        <option value="&s=4&z=0"></option>
                        <option value="&s=1&z=19"></option>
                        <option value="&s=2&z=0"></option>
                        <option value="&s=3&z=0"></option>
                    </select>
                    <input id="searchReset" type="button"  />
                    <input id="searchBtn" type="button"  />
                </div>
                <div id="searchList" class="searchList"><ul id="searchListUl"></ul></div>
            </div>
        </div>
    </div>
    <script type="text/javascript" src="image.js"></script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/image.js
New file
@@ -0,0 +1,1139 @@
/**
 * User: Jinqn
 * Date: 14-04-08
 * Time: 下午16:34
 * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片
 */
(function () {
    var remoteImage,
        uploadImage,
        onlineImage,
        searchImage;
    window.onload = function () {
        initTabs();
        initAlign();
        initButtons();
    };
    /* 初始化tab标签 */
    function initTabs() {
        var tabs = $G('tabhead').children;
        for (var i = 0; i < tabs.length; i++) {
            domUtils.on(tabs[i], "click", function (e) {
                var target = e.target || e.srcElement;
                setTabFocus(target.getAttribute('data-content-id'));
            });
        }
        var img = editor.selection.getRange().getClosedNode();
        if (img && img.tagName && img.tagName.toLowerCase() == 'img') {
            setTabFocus('remote');
        } else {
            setTabFocus('upload');
        }
    }
    /* 初始化tabbody */
    function setTabFocus(id) {
        if(!id) return;
        var i, bodyId, tabs = $G('tabhead').children;
        for (i = 0; i < tabs.length; i++) {
            bodyId = tabs[i].getAttribute('data-content-id');
            if (bodyId == id) {
                domUtils.addClass(tabs[i], 'focus');
                domUtils.addClass($G(bodyId), 'focus');
            } else {
                domUtils.removeClasses(tabs[i], 'focus');
                domUtils.removeClasses($G(bodyId), 'focus');
            }
        }
        switch (id) {
            case 'remote':
                remoteImage = remoteImage || new RemoteImage();
                break;
            case 'upload':
                setAlign(editor.getOpt('imageInsertAlign'));
                uploadImage = uploadImage || new UploadImage('queueList');
                break;
            case 'online':
                setAlign(editor.getOpt('imageManagerInsertAlign'));
                onlineImage = onlineImage || new OnlineImage('imageList');
                onlineImage.reset();
                break;
            case 'search':
                setAlign(editor.getOpt('imageManagerInsertAlign'));
                searchImage = searchImage || new SearchImage();
                break;
        }
    }
    /* 初始化onok事件 */
    function initButtons() {
        dialog.onok = function () {
            var remote = false, list = [], id, tabs = $G('tabhead').children;
            for (var i = 0; i < tabs.length; i++) {
                if (domUtils.hasClass(tabs[i], 'focus')) {
                    id = tabs[i].getAttribute('data-content-id');
                    break;
                }
            }
            switch (id) {
                case 'remote':
                    list = remoteImage.getInsertList();
                    break;
                case 'upload':
                    list = uploadImage.getInsertList();
                    var count = uploadImage.getQueueCount();
                    if (count) {
                        $('.info', '#queueList').html('<span style="color:red;">' + '还有2个未上传文件'.replace(/[\d]/, count) + '</span>');
                        return false;
                    }
                    break;
                case 'online':
                    list = onlineImage.getInsertList();
                    break;
                case 'search':
                    list = searchImage.getInsertList();
                    remote = true;
                    break;
            }
            if(list) {
                editor.execCommand('insertimage', list);
                remote && editor.fireEvent("catchRemoteImage");
            }
        };
    }
    /* 初始化对其方式的点击事件 */
    function initAlign(){
        /* 点击align图标 */
        domUtils.on($G("alignIcon"), 'click', function(e){
            var target = e.target || e.srcElement;
            if(target.className && target.className.indexOf('-align') != -1) {
                setAlign(target.getAttribute('data-align'));
            }
        });
    }
    /* 设置对齐方式 */
    function setAlign(align){
        align = align || 'none';
        var aligns = $G("alignIcon").children;
        for(i = 0; i < aligns.length; i++){
            if(aligns[i].getAttribute('data-align') == align) {
                domUtils.addClass(aligns[i], 'focus');
                $G("align").value = aligns[i].getAttribute('data-align');
            } else {
                domUtils.removeClasses(aligns[i], 'focus');
            }
        }
    }
    /* 获取对齐方式 */
    function getAlign(){
        var align = $G("align").value || 'none';
        return align == 'none' ? '':align;
    }
    /* 在线图片 */
    function RemoteImage(target) {
        this.container = utils.isString(target) ? document.getElementById(target) : target;
        this.init();
    }
    RemoteImage.prototype = {
        init: function () {
            this.initContainer();
            this.initEvents();
        },
        initContainer: function () {
            this.dom = {
                'url': $G('url'),
                'width': $G('width'),
                'height': $G('height'),
                'border': $G('border'),
                'vhSpace': $G('vhSpace'),
                'title': $G('title'),
                'align': $G('align')
            };
            var img = editor.selection.getRange().getClosedNode();
            if (img) {
                this.setImage(img);
            }
        },
        initEvents: function () {
            var _this = this,
                locker = $G('lock');
            /* 改变url */
            domUtils.on($G("url"), 'keyup', updatePreview);
            domUtils.on($G("border"), 'keyup', updatePreview);
            domUtils.on($G("title"), 'keyup', updatePreview);
            domUtils.on($G("width"), 'keyup', function(){
                updatePreview();
                if(locker.checked) {
                    var proportion =locker.getAttribute('data-proportion');
                    $G('height').value = Math.round(this.value / proportion);
                } else {
                    _this.updateLocker();
                }
            });
            domUtils.on($G("height"), 'keyup', function(){
                updatePreview();
                if(locker.checked) {
                    var proportion =locker.getAttribute('data-proportion');
                    $G('width').value = Math.round(this.value * proportion);
                } else {
                    _this.updateLocker();
                }
            });
            domUtils.on($G("lock"), 'change', function(){
                var proportion = parseInt($G("width").value) /parseInt($G("height").value);
                locker.setAttribute('data-proportion', proportion);
            });
            function updatePreview(){
                _this.setPreview();
            }
        },
        updateLocker: function(){
            var width = $G('width').value,
                height = $G('height').value,
                locker = $G('lock');
            if(width && height && width == parseInt(width) && height == parseInt(height)) {
                locker.disabled = false;
                locker.title = '';
            } else {
                locker.checked = false;
                locker.disabled = 'disabled';
                locker.title = lang.remoteLockError;
            }
        },
        setImage: function(img){
            /* 不是正常的图片 */
            if (!img.tagName || img.tagName.toLowerCase() != 'img' && !img.getAttribute("src") || !img.src) return;
            var wordImgFlag = img.getAttribute("word_img"),
                src = wordImgFlag ? wordImgFlag.replace("&amp;", "&") : (img.getAttribute('_src') || img.getAttribute("src", 2).replace("&amp;", "&")),
                align = editor.queryCommandValue("imageFloat");
            /* 防止onchange事件循环调用 */
            if (src !== $G("url").value) $G("url").value = src;
            if(src) {
                /* 设置表单内容 */
                $G("width").value = img.width || '';
                $G("height").value = img.height || '';
                $G("border").value = img.getAttribute("border") || '0';
                $G("vhSpace").value = img.getAttribute("vspace") || '0';
                $G("title").value = img.title || img.alt || '';
                setAlign(align);
                this.setPreview();
                this.updateLocker();
            }
        },
        getData: function(){
            var data = {};
            for(var k in this.dom){
                data[k] = this.dom[k].value;
            }
            return data;
        },
        setPreview: function(){
            var url = $G('url').value,
                ow = $G('width').value,
                oh = $G('height').value,
                border = $G('border').value,
                title = $G('title').value,
                preview = $G('preview'),
                width,
                height;
            width = ((!ow || !oh) ? preview.offsetWidth:Math.min(ow, preview.offsetWidth));
            width = width+(border*2) > preview.offsetWidth ? width:(preview.offsetWidth - (border*2));
            height = (!ow || !oh) ? '':width*oh/ow;
            if(url) {
                preview.innerHTML = '<img src="' + url + '" width="' + width + '" height="' + height + '" border="' + border + 'px solid #000" title="' + title + '" />';
            }
        },
        getInsertList: function () {
            var data = this.getData();
            if(data['url']) {
                return [{
                    src: data['url'],
                    _src: data['url'],
                    width: data['width'] || '',
                    height: data['height'] || '',
                    border: data['border'] || '',
                    floatStyle: data['align'] || '',
                    vspace: data['vhSpace'] || '',
                    title: data['title'] || '',
                    alt: data['title'] || '',
                    style: "width:" + data['width'] + "px;height:" + data['height'] + "px;"
                }];
            } else {
                return [];
            }
        }
    };
    /* 上传图片 */
    function UploadImage(target) {
        this.$wrap = target.constructor == String ? $('#' + target) : $(target);
        this.init();
    }
    UploadImage.prototype = {
        init: function () {
            this.imageList = [];
            this.initContainer();
            this.initUploader();
        },
        initContainer: function () {
            this.$queue = this.$wrap.find('.filelist');
        },
        /* 初始化容器 */
        initUploader: function () {
            var _this = this,
                $ = jQuery,    // just in case. Make sure it's not an other libaray.
                $wrap = _this.$wrap,
            // 图片容器
                $queue = $wrap.find('.filelist'),
            // 状态栏,包括进度和控制按钮
                $statusBar = $wrap.find('.statusBar'),
            // 文件总体选择信息。
                $info = $statusBar.find('.info'),
            // 上传按钮
                $upload = $wrap.find('.uploadBtn'),
            // 上传按钮
                $filePickerBtn = $wrap.find('.filePickerBtn'),
            // 上传按钮
                $filePickerBlock = $wrap.find('.filePickerBlock'),
            // 没选择文件之前的内容。
                $placeHolder = $wrap.find('.placeholder'),
            // 总体进度条
                $progress = $statusBar.find('.progress').hide(),
            // 添加的文件数量
                fileCount = 0,
            // 添加的文件总大小
                fileSize = 0,
            // 优化retina, 在retina下这个值是2
                ratio = window.devicePixelRatio || 1,
            // 缩略图大小
                thumbnailWidth = 113 * ratio,
                thumbnailHeight = 113 * ratio,
            // 可能有pedding, ready, uploading, confirm, done.
                state = '',
            // 所有文件的进度信息,key为file id
                percentages = {},
                supportTransition = (function () {
                    var s = document.createElement('p').style,
                        r = 'transition' in s ||
                            'WebkitTransition' in s ||
                            'MozTransition' in s ||
                            'msTransition' in s ||
                            'OTransition' in s;
                    s = null;
                    return r;
                })(),
            // WebUploader实例
                uploader,
                actionUrl = editor.getActionUrl(editor.getOpt('imageActionName')),
                acceptExtensions = (editor.getOpt('imageAllowFiles') || []).join('').replace(/\./g, ',').replace(/^[,]/, ''),
                imageMaxSize = editor.getOpt('imageMaxSize'),
                imageCompressBorder = editor.getOpt('imageCompressBorder');
            if (!WebUploader.Uploader.support()) {
                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();
                return;
            } else if (!editor.getOpt('imageActionName')) {
                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();
                return;
            }
            uploader = _this.uploader = WebUploader.create({
                pick: {
                    id: '#filePickerReady',
                    label: lang.uploadSelectFile
                },
                accept: {
                    title: 'Images',
                    extensions: acceptExtensions,
                    mimeTypes: 'image/*'
                },
                swf: '../../third-party/webuploader/Uploader.swf',
                server: actionUrl,
                fileVal: editor.getOpt('imageFieldName'),
                duplicate: true,
                fileSingleSizeLimit: imageMaxSize,    // 默认 2 M
                compress: editor.getOpt('imageCompressEnable') ? {
                    width: imageCompressBorder,
                    height: imageCompressBorder,
                    // 图片质量,只有type为`image/jpeg`的时候才有效。
                    quality: 90,
                    // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false.
                    allowMagnify: false,
                    // 是否允许裁剪。
                    crop: false,
                    // 是否保留头部meta信息。
                    preserveHeaders: true
                }:false
            });
            uploader.addButton({
                id: '#filePickerBlock'
            });
            uploader.addButton({
                id: '#filePickerBtn',
                label: lang.uploadAddFile
            });
            setState('pedding');
            // 当有文件添加进来时执行,负责view的创建
            function addFile(file) {
                var $li = $('<li id="' + file.id + '">' +
                        '<p class="title">' + file.name + '</p>' +
                        '<p class="imgWrap"></p>' +
                        '<p class="progress"><span></span></p>' +
                        '</li>'),
                    $btns = $('<div class="file-panel">' +
                        '<span class="cancel">' + lang.uploadDelete + '</span>' +
                        '<span class="rotateRight">' + lang.uploadTurnRight + '</span>' +
                        '<span class="rotateLeft">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),
                    $prgress = $li.find('p.progress span'),
                    $wrap = $li.find('p.imgWrap'),
                    $info = $('<p class="error"></p>').hide().appendTo($li),
                    showError = function (code) {
                        switch (code) {
                            case 'exceed_size':
                                text = lang.errorExceedSize;
                                break;
                            case 'interrupt':
                                text = lang.errorInterrupt;
                                break;
                            case 'http':
                                text = lang.errorHttp;
                                break;
                            case 'not_allow_type':
                                text = lang.errorFileType;
                                break;
                            default:
                                text = lang.errorUploadRetry;
                                break;
                        }
                        $info.text(text).show();
                    };
                if (file.getStatus() === 'invalid') {
                    showError(file.statusText);
                } else {
                    $wrap.text(lang.uploadPreview);
                    if (browser.ie && browser.version <= 7) {
                        $wrap.text(lang.uploadNoPreview);
                    } else {
                        uploader.makeThumb(file, function (error, src) {
                            if (error || !src) {
                                $wrap.text(lang.uploadNoPreview);
                            } else {
                                var $img = $('<img src="' + src + '">');
                                $wrap.empty().append($img);
                                $img.on('error', function () {
                                    $wrap.text(lang.uploadNoPreview);
                                });
                            }
                        }, thumbnailWidth, thumbnailHeight);
                    }
                    percentages[ file.id ] = [ file.size, 0 ];
                    file.rotation = 0;
                    /* 检查文件格式 */
                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {
                        showError('not_allow_type');
                        uploader.removeFile(file);
                    }
                }
                file.on('statuschange', function (cur, prev) {
                    if (prev === 'progress') {
                        $prgress.hide().width(0);
                    } else if (prev === 'queued') {
                        $li.off('mouseenter mouseleave');
                        $btns.remove();
                    }
                    // 成功
                    if (cur === 'error' || cur === 'invalid') {
                        showError(file.statusText);
                        percentages[ file.id ][ 1 ] = 1;
                    } else if (cur === 'interrupt') {
                        showError('interrupt');
                    } else if (cur === 'queued') {
                        percentages[ file.id ][ 1 ] = 0;
                    } else if (cur === 'progress') {
                        $info.hide();
                        $prgress.css('display', 'block');
                    } else if (cur === 'complete') {
                    }
                    $li.removeClass('state-' + prev).addClass('state-' + cur);
                });
                $li.on('mouseenter', function () {
                    $btns.stop().animate({height: 30});
                });
                $li.on('mouseleave', function () {
                    $btns.stop().animate({height: 0});
                });
                $btns.on('click', 'span', function () {
                    var index = $(this).index(),
                        deg;
                    switch (index) {
                        case 0:
                            uploader.removeFile(file);
                            return;
                        case 1:
                            file.rotation += 90;
                            break;
                        case 2:
                            file.rotation -= 90;
                            break;
                    }
                    if (supportTransition) {
                        deg = 'rotate(' + file.rotation + 'deg)';
                        $wrap.css({
                            '-webkit-transform': deg,
                            '-mos-transform': deg,
                            '-o-transform': deg,
                            'transform': deg
                        });
                    } else {
                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');
                    }
                });
                $li.insertBefore($filePickerBlock);
            }
            // 负责view的销毁
            function removeFile(file) {
                var $li = $('#' + file.id);
                delete percentages[ file.id ];
                updateTotalProgress();
                $li.off().find('.file-panel').off().end().remove();
            }
            function updateTotalProgress() {
                var loaded = 0,
                    total = 0,
                    spans = $progress.children(),
                    percent;
                $.each(percentages, function (k, v) {
                    total += v[ 0 ];
                    loaded += v[ 0 ] * v[ 1 ];
                });
                percent = total ? loaded / total : 0;
                spans.eq(0).text(Math.round(percent * 100) + '%');
                spans.eq(1).css('width', Math.round(percent * 100) + '%');
                updateStatus();
            }
            function setState(val, files) {
                if (val != state) {
                    var stats = uploader.getStats();
                    $upload.removeClass('state-' + state);
                    $upload.addClass('state-' + val);
                    switch (val) {
                        /* 未选择文件 */
                        case 'pedding':
                            $queue.addClass('element-invisible');
                            $statusBar.addClass('element-invisible');
                            $placeHolder.removeClass('element-invisible');
                            $progress.hide(); $info.hide();
                            uploader.refresh();
                            break;
                        /* 可以开始上传 */
                        case 'ready':
                            $placeHolder.addClass('element-invisible');
                            $queue.removeClass('element-invisible');
                            $statusBar.removeClass('element-invisible');
                            $progress.hide(); $info.show();
                            $upload.text(lang.uploadStart);
                            uploader.refresh();
                            break;
                        /* 上传中 */
                        case 'uploading':
                            $progress.show(); $info.hide();
                            $upload.text(lang.uploadPause);
                            break;
                        /* 暂停上传 */
                        case 'paused':
                            $progress.show(); $info.hide();
                            $upload.text(lang.uploadContinue);
                            break;
                        case 'confirm':
                            $progress.show(); $info.hide();
                            $upload.text(lang.uploadStart);
                            stats = uploader.getStats();
                            if (stats.successNum && !stats.uploadFailNum) {
                                setState('finish');
                                return;
                            }
                            break;
                        case 'finish':
                            $progress.hide(); $info.show();
                            if (stats.uploadFailNum) {
                                $upload.text(lang.uploadRetry);
                            } else {
                                $upload.text(lang.uploadStart);
                            }
                            break;
                    }
                    state = val;
                    updateStatus();
                }
                if (!_this.getQueueCount()) {
                    $upload.addClass('disabled')
                } else {
                    $upload.removeClass('disabled')
                }
            }
            function updateStatus() {
                var text = '', stats;
                if (state === 'ready') {
                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));
                } else if (state === 'confirm') {
                    stats = uploader.getStats();
                    if (stats.uploadFailNum) {
                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);
                    }
                } else {
                    stats = uploader.getStats();
                    text = lang.updateStatusFinish.replace('_', fileCount).
                        replace('_KB', WebUploader.formatSize(fileSize)).
                        replace('_', stats.successNum);
                    if (stats.uploadFailNum) {
                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);
                    }
                }
                $info.html(text);
            }
            uploader.on('fileQueued', function (file) {
                fileCount++;
                fileSize += file.size;
                if (fileCount === 1) {
                    $placeHolder.addClass('element-invisible');
                    $statusBar.show();
                }
                addFile(file);
            });
            uploader.on('fileDequeued', function (file) {
                fileCount--;
                fileSize -= file.size;
                removeFile(file);
                updateTotalProgress();
            });
            uploader.on('filesQueued', function (file) {
                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {
                    setState('ready');
                }
                updateTotalProgress();
            });
            uploader.on('all', function (type, files) {
                switch (type) {
                    case 'uploadFinished':
                        setState('confirm', files);
                        break;
                    case 'startUpload':
                        /* 添加额外的GET参数 */
                        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',
                            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params);
                        uploader.option('server', url);
                        setState('uploading', files);
                        break;
                    case 'stopUpload':
                        setState('paused', files);
                        break;
                }
            });
            uploader.on('uploadBeforeSend', function (file, data, header) {
                //这里可以通过data对象添加POST参数
                header['X_Requested_With'] = 'XMLHttpRequest';
            });
            uploader.on('uploadProgress', function (file, percentage) {
                var $li = $('#' + file.id),
                    $percent = $li.find('.progress span');
                $percent.css('width', percentage * 100 + '%');
                percentages[ file.id ][ 1 ] = percentage;
                updateTotalProgress();
            });
            uploader.on('uploadSuccess', function (file, ret) {
                var $file = $('#' + file.id);
                try {
                    var responseText = (ret._raw || ret),
                        json = utils.str2json(responseText);
                    if (json.state == 'SUCCESS') {
                        _this.imageList.push(json);
                        $file.append('<span class="success"></span>');
                    } else {
                        $file.find('.error').text(json.state).show();
                    }
                } catch (e) {
                    $file.find('.error').text(lang.errorServerUpload).show();
                }
            });
            uploader.on('uploadError', function (file, code) {
            });
            uploader.on('error', function (code, file) {
                if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {
                    addFile(file);
                }
            });
            uploader.on('uploadComplete', function (file, ret) {
            });
            $upload.on('click', function () {
                if ($(this).hasClass('disabled')) {
                    return false;
                }
                if (state === 'ready') {
                    uploader.upload();
                } else if (state === 'paused') {
                    uploader.upload();
                } else if (state === 'uploading') {
                    uploader.stop();
                }
            });
            $upload.addClass('state-' + state);
            updateTotalProgress();
        },
        getQueueCount: function () {
            var file, i, status, readyFile = 0, files = this.uploader.getFiles();
            for (i = 0; file = files[i++]; ) {
                status = file.getStatus();
                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;
            }
            return readyFile;
        },
        destroy: function () {
            this.$wrap.remove();
        },
        getInsertList: function () {
            var i, data, list = [],
                align = getAlign(),
                prefix = editor.getOpt('imageUrlPrefix');
            for (i = 0; i < this.imageList.length; i++) {
                data = this.imageList[i];
                list.push({
                    src: prefix + data.url,
                    _src: prefix + data.url,
                    title: data.title,
                    alt: data.original,
                    floatStyle: align
                });
            }
            return list;
        }
    };
    /* 在线图片 */
    function OnlineImage(target) {
        this.container = utils.isString(target) ? document.getElementById(target) : target;
        this.init();
    }
    OnlineImage.prototype = {
        init: function () {
            this.reset();
            this.initEvents();
        },
        /* 初始化容器 */
        initContainer: function () {
            this.container.innerHTML = '';
            this.list = document.createElement('ul');
            this.clearFloat = document.createElement('li');
            domUtils.addClass(this.list, 'list');
            domUtils.addClass(this.clearFloat, 'clearFloat');
            this.list.appendChild(this.clearFloat);
            this.container.appendChild(this.list);
        },
        /* 初始化滚动事件,滚动到地步自动拉取数据 */
        initEvents: function () {
            var _this = this;
            /* 滚动拉取图片 */
            domUtils.on($G('imageList'), 'scroll', function(e){
                var panel = this;
                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {
                    _this.getImageData();
                }
            });
            /* 选中图片 */
            domUtils.on(this.container, 'click', function (e) {
                var target = e.target || e.srcElement,
                    li = target.parentNode;
                if (li.tagName.toLowerCase() == 'li') {
                    if (domUtils.hasClass(li, 'selected')) {
                        domUtils.removeClasses(li, 'selected');
                    } else {
                        domUtils.addClass(li, 'selected');
                    }
                }
            });
        },
        /* 初始化第一次的数据 */
        initData: function () {
            /* 拉取数据需要使用的值 */
            this.state = 0;
            this.listSize = editor.getOpt('imageManagerListSize');
            this.listIndex = 0;
            this.listEnd = false;
            /* 第一次拉取数据 */
            this.getImageData();
        },
        /* 重置界面 */
        reset: function() {
            this.initContainer();
            this.initData();
        },
        /* 向后台拉取图片列表数据 */
        getImageData: function () {
            var _this = this;
            if(!_this.listEnd && !this.isLoadingData) {
                this.isLoadingData = true;
                var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),
                    isJsonp = utils.isCrossDomainUrl(url);
                ajax.request(url, {
                    'timeout': 100000,
                    'dataType': isJsonp ? 'jsonp':'',
                    'data': utils.extend({
                            start: this.listIndex,
                            size: this.listSize
                        }, editor.queryCommandValue('serverparam')),
                    'method': 'get',
                    'onsuccess': function (r) {
                        try {
                            var json = isJsonp ? r:eval('(' + r.responseText + ')');
                            if (json.state == 'SUCCESS') {
                                _this.pushData(json.list);
                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);
                                if(_this.listIndex >= json.total) {
                                    _this.listEnd = true;
                                }
                                _this.isLoadingData = false;
                            }
                        } catch (e) {
                            if(r.responseText.indexOf('ue_separate_ue') != -1) {
                                var list = r.responseText.split(r.responseText);
                                _this.pushData(list);
                                _this.listIndex = parseInt(list.length);
                                _this.listEnd = true;
                                _this.isLoadingData = false;
                            }
                        }
                    },
                    'onerror': function () {
                        _this.isLoadingData = false;
                    }
                });
            }
        },
        /* 添加图片到列表界面上 */
        pushData: function (list) {
            var i, item, img, icon, _this = this,
                urlPrefix = editor.getOpt('imageManagerUrlPrefix');
            for (i = 0; i < list.length; i++) {
                if(list[i] && list[i].url) {
                    item = document.createElement('li');
                    img = document.createElement('img');
                    icon = document.createElement('span');
                    domUtils.on(img, 'load', (function(image){
                        return function(){
                            _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);
                        }
                    })(img));
                    img.width = 113;
                    img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );
                    img.setAttribute('_src', urlPrefix + list[i].url);
                    domUtils.addClass(icon, 'icon');
                    item.appendChild(img);
                    item.appendChild(icon);
                    this.list.insertBefore(item, this.clearFloat);
                }
            }
        },
        /* 改变图片大小 */
        scale: function (img, w, h, type) {
            var ow = img.width,
                oh = img.height;
            if (type == 'justify') {
                if (ow >= oh) {
                    img.width = w;
                    img.height = h * oh / ow;
                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
                } else {
                    img.width = w * ow / oh;
                    img.height = h;
                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
                }
            } else {
                if (ow >= oh) {
                    img.width = w * ow / oh;
                    img.height = h;
                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
                } else {
                    img.width = w;
                    img.height = h * oh / ow;
                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
                }
            }
        },
        getInsertList: function () {
            var i, lis = this.list.children, list = [], align = getAlign();
            for (i = 0; i < lis.length; i++) {
                if (domUtils.hasClass(lis[i], 'selected')) {
                    var img = lis[i].firstChild,
                        src = img.getAttribute('_src');
                    list.push({
                        src: src,
                        _src: src,
                        alt: src.substr(src.lastIndexOf('/') + 1),
                        floatStyle: align
                    });
                }
            }
            return list;
        }
    };
    /*搜索图片 */
    function SearchImage() {
        this.init();
    }
    SearchImage.prototype = {
        init: function () {
            this.initEvents();
        },
        initEvents: function(){
            var _this = this;
            /* 点击搜索按钮 */
            domUtils.on($G('searchBtn'), 'click', function(){
                var key = $G('searchTxt').value;
                if(key && key != lang.searchRemind) {
                    _this.getImageData();
                }
            });
            /* 点击清除妞 */
            domUtils.on($G('searchReset'), 'click', function(){
                $G('searchTxt').value = lang.searchRemind;
                $G('searchListUl').innerHTML = '';
                $G('searchType').selectedIndex = 0;
            });
            /* 搜索框聚焦 */
            domUtils.on($G('searchTxt'), 'focus', function(){
                var key = $G('searchTxt').value;
                if(key && key == lang.searchRemind) {
                    $G('searchTxt').value = '';
                }
            });
            /* 搜索框回车键搜索 */
            domUtils.on($G('searchTxt'), 'keydown', function(e){
                var keyCode = e.keyCode || e.which;
                if (keyCode == 13) {
                    $G('searchBtn').click();
                }
            });
            /* 选中图片 */
            domUtils.on($G('searchList'), 'click', function(e){
                var target = e.target || e.srcElement,
                    li = target.parentNode.parentNode;
                if (li.tagName.toLowerCase() == 'li') {
                    if (domUtils.hasClass(li, 'selected')) {
                        domUtils.removeClasses(li, 'selected');
                    } else {
                        domUtils.addClass(li, 'selected');
                    }
                }
            });
        },
        encodeToGb2312:function (str){
            if(!str) return '';
            var strOut = "",
                z = 'D2BBB6A18140C6DF814181428143CDF2D5C9C8FDC9CFCFC2D8A2B2BBD3EB8144D8A4B3F38145D7A8C7D2D8A7CAC08146C7F0B1FBD2B5B4D4B6ABCBBFD8A9814781488149B6AA814AC1BDD1CF814BC9A5D8AD814CB8F6D1BEE3DCD6D0814D814EB7E1814FB4AE8150C1D98151D8BC8152CDE8B5A4CEAAD6F78153C0F6BED9D8AF815481558156C4CB8157BEC38158D8B1C3B4D2E58159D6AECEDAD5A7BAF5B7A6C0D6815AC6B9C5D2C7C7815BB9D4815CB3CBD2D2815D815ED8BFBEC5C6F2D2B2CFB0CFE7815F816081618162CAE981638164D8C081658166816781688169816AC2F2C2D2816BC8E9816C816D816E816F817081718172817381748175C7AC8176817781788179817A817B817CC1CB817DD3E8D5F9817ECAC2B6FED8A1D3DABFF78180D4C6BBA5D8C1CEE5BEAE81818182D8A88183D1C7D0A9818481858186D8BDD9EFCDF6BFBA8187BDBBBAA5D2E0B2FABAE0C4B68188CFEDBEA9CDA4C1C18189818A818BC7D7D9F1818CD9F4818D818E818F8190C8CBD8E9819181928193D2DACAB2C8CAD8ECD8EAD8C6BDF6C6CDB3F08194D8EBBDF1BDE98195C8D4B4D381968197C2D88198B2D6D7D0CACBCBFBD5CCB8B6CFC98199819A819BD9DAD8F0C7AA819CD8EE819DB4FAC1EED2D4819E819FD8ED81A0D2C7D8EFC3C781A181A281A3D1F681A4D6D9D8F281A5D8F5BCFEBCDB81A681A781A8C8CE81A9B7DD81AAB7C281ABC6F381AC81AD81AE81AF81B081B181B2D8F8D2C181B381B4CEE9BCBFB7FCB7A5D0DD81B581B681B781B881B9D6DAD3C5BBEFBBE1D8F181BA81BBC9A1CEB0B4AB81BCD8F381BDC9CBD8F6C2D7D8F781BE81BFCEB1D8F981C081C181C2B2AEB9C081C3D9A381C4B0E981C5C1E681C6C9EC81C7CBC581C8CBC6D9A481C981CA81CB81CC81CDB5E881CE81CFB5AB81D081D181D281D381D481D5CEBBB5CDD7A1D7F4D3D381D6CCE581D7BACE81D8D9A2D9DCD3E0D8FDB7F0D7F7D8FED8FAD9A1C4E381D981DAD3B6D8F4D9DD81DBD8FB81DCC5E581DD81DEC0D081DF81E0D1F0B0DB81E181E2BCD1D9A681E3D9A581E481E581E681E7D9ACD9AE81E8D9ABCAB981E981EA81EBD9A9D6B681EC81ED81EEB3DED9A881EFC0FD81F0CACC81F1D9AA81F2D9A781F381F4D9B081F581F6B6B181F781F881F9B9A981FAD2C081FB81FCCFC081FD81FEC2C28240BDC4D5ECB2E0C7C8BFEBD9AD8241D9AF8242CEEABAEE82438244824582468247C7D682488249824A824B824C824D824E824F8250B1E3825182528253B4D9B6EDD9B48254825582568257BFA182588259825AD9DEC7CEC0FED9B8825B825C825D825E825FCBD7B7FD8260D9B58261D9B7B1A3D3E1D9B98262D0C58263D9B682648265D9B18266D9B2C1A9D9B382678268BCF3D0DEB8A98269BEE3826AD9BD826B826C826D826ED9BA826FB0B3827082718272D9C28273827482758276827782788279827A827B827C827D827E8280D9C4B1B68281D9BF82828283B5B98284BEF3828582868287CCC8BAF2D2D08288D9C38289828ABDE8828BB3AB828C828D828ED9C5BEEB828FD9C6D9BBC4DF8290D9BED9C1D9C0829182928293829482958296829782988299829A829BD5AE829CD6B5829DC7E3829E829F82A082A1D9C882A282A382A4BCD9D9CA82A582A682A7D9BC82A8D9CBC6AB82A982AA82AB82AC82ADD9C982AE82AF82B082B1D7F682B2CDA382B382B482B582B682B782B882B982BABDA182BB82BC82BD82BE82BF82C0D9CC82C182C282C382C482C582C682C782C882C9C5BCCDB582CA82CB82CCD9CD82CD82CED9C7B3A5BFFE82CF82D082D182D2B8B582D382D4C0FC82D582D682D782D8B0F882D982DA82DB82DC82DD82DE82DF82E082E182E282E382E482E582E682E782E882E982EA82EB82EC82EDB4F682EED9CE82EFD9CFB4A2D9D082F082F1B4DF82F282F382F482F582F6B0C182F782F882F982FA82FB82FC82FDD9D1C9B582FE8340834183428343834483458346834783488349834A834B834C834D834E834F83508351CFF1835283538354835583568357D9D283588359835AC1C5835B835C835D835E835F836083618362836383648365D9D6C9AE8366836783688369D9D5D9D4D9D7836A836B836C836DCBDB836EBDA9836F8370837183728373C6A7837483758376837783788379837A837B837C837DD9D3D9D8837E83808381D9D9838283838384838583868387C8E583888389838A838B838C838D838E838F839083918392839383948395C0DC8396839783988399839A839B839C839D839E839F83A083A183A283A383A483A583A683A783A883A983AA83AB83AC83AD83AE83AF83B083B183B2B6F9D8A3D4CA83B3D4AAD0D6B3E4D5D783B4CFC8B9E283B5BFCB83B6C3E283B783B883B9B6D283BA83BBCDC3D9EED9F083BC83BD83BEB5B383BFB6B583C083C183C283C383C4BEA483C583C6C8EB83C783C8C8AB83C983CAB0CBB9ABC1F9D9E283CBC0BCB9B283CCB9D8D0CBB1F8C6E4BEDFB5E4D7C883CDD1F8BCE6CADE83CE83CFBCBDD9E6D8E783D083D1C4DA83D283D3B8D4C8BD83D483D5B2E1D4D983D683D783D883D9C3B083DA83DBC3E1DAA2C8DF83DCD0B483DDBEFCC5A983DE83DF83E0B9DA83E1DAA383E2D4A9DAA483E383E483E583E683E7D9FBB6AC83E883E9B7EBB1F9D9FCB3E5BEF683EABFF6D2B1C0E483EB83EC83EDB6B3D9FED9FD83EE83EFBEBB83F083F183F2C6E083F3D7BCDAA183F4C1B983F5B5F2C1E883F683F7BCF583F8B4D583F983FA83FB83FC83FD83FE844084418442C1DD8443C4FD84448445BCB8B7B284468447B7EF84488449844A844B844C844DD9EC844EC6BE844FBFADBBCB84508451B5CA8452DBC9D0D78453CDB9B0BCB3F6BBF7DBCABAAF8454D4E4B5B6B5F3D8D6C8D084558456B7D6C7D0D8D78457BFAF84588459DBBBD8D8845A845BD0CCBBAE845C845D845EEBBEC1D0C1F5D4F2B8D5B4B4845FB3F584608461C9BE846284638464C5D0846584668467C5D9C0FB8468B1F08469D8D9B9CE846AB5BD846B846CD8DA846D846ED6C6CBA2C8AFC9B2B4CCBFCC846FB9F48470D8DBD8DCB6E7BCC1CCEA847184728473847484758476CFF78477D8DDC7B084788479B9D0BDA3847A847BCCDE847CC6CA847D847E848084818482D8E08483D8DE84848485D8DF848684878488B0FE8489BEE7848ACAA3BCF4848B848C848D848EB8B1848F8490B8EE849184928493849484958496849784988499849AD8E2849BBDCB849CD8E4D8E3849D849E849F84A084A1C5FC84A284A384A484A584A684A784A8D8E584A984AAD8E684AB84AC84AD84AE84AF84B084B1C1A684B2C8B0B0ECB9A6BCD3CEF1DBBDC1D384B384B484B584B6B6AFD6FAC5ACBDD9DBBEDBBF84B784B884B9C0F8BEA2C0CD84BA84BB84BC84BD84BE84BF84C084C184C284C3DBC0CAC684C484C584C6B2AA84C784C884C9D3C284CAC3E384CBD1AB84CC84CD84CE84CFDBC284D0C0D584D184D284D3DBC384D4BFB184D584D684D784D884D984DAC4BC84DB84DC84DD84DEC7DA84DF84E084E184E284E384E484E584E684E784E884E9DBC484EA84EB84EC84ED84EE84EF84F084F1D9E8C9D784F284F384F4B9B4CEF0D4C884F584F684F784F8B0FCB4D284F9D0D984FA84FB84FC84FDD9E984FEDECBD9EB8540854185428543D8B0BBAFB1B18544B3D7D8CE85458546D4D185478548BDB3BFEF8549CFBB854A854BD8D0854C854D854EB7CB854F85508551D8D185528553855485558556855785588559855A855BC6A5C7F8D2BD855C855DD8D2C4E4855ECAAE855FC7A78560D8A68561C9FDCEE7BBDCB0EB856285638564BBAAD0AD8565B1B0D7E4D7BF8566B5A5C2F4C4CF85678568B2A98569B2B7856AB1E5DFB2D5BCBFA8C2ACD8D5C2B1856BD8D4CED4856CDAE0856DCEC0856E856FD8B4C3AED3A1CEA38570BCB4C8B4C2D18571BEEDD0B68572DAE18573857485758576C7E485778578B3A78579B6F2CCFCC0FA857A857BC0F7857CD1B9D1E1D8C7857D857E85808581858285838584B2DE85858586C0E58587BAF185888589D8C8858AD4AD858B858CCFE1D8C9858DD8CACFC3858EB3F8BEC7858F859085918592D8CB8593859485958596859785988599DBCC859A859B859C859DC8A5859E859F85A0CFD885A1C8FEB2CE85A285A385A485A585A6D3D6B2E6BCB0D3D1CBABB7B485A785A885A9B7A285AA85ABCAE585ACC8A1CADCB1E4D0F085ADC5D185AE85AF85B0DBC5B5FE85B185B2BFDAB9C5BEE4C1ED85B3DFB6DFB5D6BBBDD0D5D9B0C8B6A3BFC9CCA8DFB3CAB7D3D285B4D8CFD2B6BAC5CBBECCBE85B5DFB7B5F0DFB485B685B785B8D3F585B9B3D4B8F785BADFBA85BBBACFBCAAB5F585BCCDACC3FBBAF3C0F4CDC2CFF2DFB8CFC585BDC2C0DFB9C2F085BE85BF85C0BEFD85C1C1DFCDCCD2F7B7CDDFC185C2DFC485C385C4B7F1B0C9B6D6B7D485C5BAACCCFDBFD4CBB1C6F485C6D6A8DFC585C7CEE2B3B385C885C9CEFCB4B585CACEC7BAF085CBCEE185CCD1BD85CD85CEDFC085CF85D0B4F485D1B3CA85D2B8E6DFBB85D385D485D585D6C4C585D7DFBCDFBDDFBEC5BBDFBFDFC2D4B1DFC385D8C7BACED885D985DA85DB85DC85DDC4D885DEDFCA85DFDFCF85E0D6DC85E185E285E385E485E585E685E785E8DFC9DFDACEB685E9BAC7DFCEDFC8C5DE85EA85EBC9EBBAF4C3FC85EC85EDBED785EEDFC685EFDFCD85F0C5D885F185F285F385F4D5A6BACD85F5BECCD3BDB8C085F6D6E485F7DFC7B9BEBFA785F885F9C1FCDFCBDFCC85FADFD085FB85FC85FD85FE8640DFDBDFE58641DFD7DFD6D7C9DFE3DFE4E5EBD2A7DFD28642BFA98643D4DB8644BFC8DFD4864586468647CFCC86488649DFDD864AD1CA864BDFDEB0A7C6B7DFD3864CBAE5864DB6DFCDDBB9FED4D5864E864FDFDFCFECB0A5DFE7DFD1D1C6DFD5DFD8DFD9DFDC8650BBA98651DFE0DFE18652DFE2DFE6DFE8D3B486538654865586568657B8E7C5B6DFEAC9DAC1A8C4C486588659BFDECFF8865A865B865CD5DCDFEE865D865E865F866086618662B2B88663BADFDFEC8664DBC18665D1E48666866786688669CBF4B4BD866AB0A6866B866C866D866E866FDFF1CCC6DFF286708671DFED867286738674867586768677DFE986788679867A867BDFEB867CDFEFDFF0BBBD867D867EDFF386808681DFF48682BBA38683CADBCEA8E0A7B3AA8684E0A6868586868687E0A186888689868A868BDFFE868CCDD9DFFC868DDFFA868EBFD0D7C4868FC9CC86908691DFF8B0A186928693869486958696DFFD869786988699869ADFFBE0A2869B869C869D869E869FE0A886A086A186A286A3B7C886A486A5C6A1C9B6C0B2DFF586A686A7C5BE86A8D8C4DFF9C4F686A986AA86AB86AC86AD86AEE0A3E0A4E0A5D0A586AF86B0E0B4CCE486B1E0B186B2BFA6E0AFCEB9E0ABC9C686B386B4C0AEE0AEBAEDBAB0E0A986B586B686B7DFF686B8E0B386B986BAE0B886BB86BC86BDB4ADE0B986BE86BFCFB2BAC886C0E0B086C186C286C386C486C586C686C7D0FA86C886C986CA86CB86CC86CD86CE86CF86D0E0AC86D1D4FB86D2DFF786D3C5E786D4E0AD86D5D3F786D6E0B6E0B786D786D886D986DA86DBE0C4D0E186DC86DD86DEE0BC86DF86E0E0C9E0CA86E186E286E3E0BEE0AAC9A4E0C186E4E0B286E586E686E786E886E9CAC8E0C386EAE0B586EBCECB86ECCBC3E0CDE0C6E0C286EDE0CB86EEE0BAE0BFE0C086EF86F0E0C586F186F2E0C7E0C886F3E0CC86F4E0BB86F586F686F786F886F9CBD4E0D586FAE0D6E0D286FB86FC86FD86FE87408741E0D0BCCE87428743E0D18744B8C2D8C587458746874787488749874A874B874CD0EA874D874EC2EF874F8750E0CFE0BD875187528753E0D4E0D387548755E0D78756875787588759E0DCE0D8875A875B875CD6F6B3B0875DD7EC875ECBBB875F8760E0DA8761CEFB876287638764BAD987658766876787688769876A876B876C876D876E876F8770E0E1E0DDD2AD87718772877387748775E0E287768777E0DBE0D9E0DF87788779E0E0877A877B877C877D877EE0DE8780E0E4878187828783C6F7D8ACD4EBE0E6CAC98784878587868787E0E587888789878A878BB8C1878C878D878E878FE0E7E0E887908791879287938794879587968797E0E9E0E387988799879A879B879C879D879EBABFCCE7879F87A087A1E0EA87A287A387A487A587A687A787A887A987AA87AB87AC87AD87AE87AF87B0CFF987B187B287B387B487B587B687B787B887B987BA87BBE0EB87BC87BD87BE87BF87C087C187C2C8C287C387C487C587C6BDC087C787C887C987CA87CB87CC87CD87CE87CF87D087D187D287D3C4D287D487D587D687D787D887D987DA87DB87DCE0EC87DD87DEE0ED87DF87E0C7F4CBC487E1E0EEBBD8D8B6D2F2E0EFCDC587E2B6DA87E387E487E587E687E787E8E0F187E9D4B087EA87EBC0A7B4D187EC87EDCEA7E0F087EE87EF87F0E0F2B9CC87F187F2B9FACDBCE0F387F387F487F5C6D4E0F487F6D4B287F7C8A6E0F6E0F587F887F987FA87FB87FC87FD87FE8840884188428843884488458846884788488849E0F7884A884BCDC1884C884D884ECAA5884F885088518852D4DADBD7DBD98853DBD8B9E7DBDCDBDDB5D888548855DBDA8856885788588859885ADBDBB3A1DBDF885B885CBBF8885DD6B7885EDBE0885F886088618862BEF988638864B7BB8865DBD0CCAEBFB2BBB5D7F8BFD38866886788688869886ABFE9886B886CBCE1CCB3DBDEB0D3CEEBB7D8D7B9C6C2886D886EC0A4886FCCB98870DBE7DBE1C6BADBE38871DBE88872C5F7887388748875DBEA88768877DBE9BFC088788879887ADBE6DBE5887B887C887D887E8880B4B9C0ACC2A2DBE2DBE48881888288838884D0CDDBED88858886888788888889C0DDDBF2888A888B888C888D888E888F8890B6E28891889288938894DBF3DBD2B9B8D4ABDBEC8895BFD1DBF08896DBD18897B5E68898DBEBBFE58899889A889BDBEE889CDBF1889D889E889FDBF988A088A188A288A388A488A588A688A788A8B9A1B0A388A988AA88AB88AC88AD88AE88AFC2F188B088B1B3C7DBEF88B288B3DBF888B4C6D2DBF488B588B6DBF5DBF7DBF688B788B8DBFE88B9D3F2B2BA88BA88BB88BCDBFD88BD88BE88BF88C088C188C288C388C4DCA488C5DBFB88C688C788C888C9DBFA88CA88CB88CCDBFCC5E0BBF988CD88CEDCA388CF88D0DCA588D1CCC388D288D388D4B6D1DDC088D588D688D7DCA188D8DCA288D988DA88DBC7B588DC88DD88DEB6E988DF88E088E1DCA788E288E388E488E5DCA688E6DCA9B1A488E788E8B5CC88E988EA88EB88EC88EDBFB088EE88EF88F088F188F2D1DF88F388F488F588F6B6C288F788F888F988FA88FB88FC88FD88FE894089418942894389448945DCA88946894789488949894A894B894CCBFAEBF3894D894E894FCBDC89508951CBFE895289538954CCC189558956895789588959C8FB895A895B895C895D895E895FDCAA89608961896289638964CCEEDCAB89658966896789688969896A896B896C896D896E896F897089718972897389748975DBD38976DCAFDCAC8977BEB38978CAFB8979897A897BDCAD897C897D897E89808981898289838984C9CAC4B989858986898789888989C7BDDCAE898A898B898CD4F6D0E6898D898E898F89908991899289938994C4ABB6D589958996899789988999899A899B899C899D899E899F89A089A189A289A389A489A589A6DBD489A789A889A989AAB1DA89AB89AC89ADDBD589AE89AF89B089B189B289B389B489B589B689B789B8DBD689B989BA89BBBABE89BC89BD89BE89BF89C089C189C289C389C489C589C689C789C889C9C8C089CA89CB89CC89CD89CE89CFCABFC8C989D0D7B389D1C9F989D289D3BFC789D489D5BAF889D689D7D2BC89D889D989DA89DB89DC89DD89DE89DFE2BA89E0B4A689E189E2B1B889E389E489E589E689E7B8B489E8CFC489E989EA89EB89ECD9E7CFA6CDE289ED89EED9EDB6E089EFD2B989F089F1B9BB89F289F389F489F5E2B9E2B789F6B4F389F7CCECCCABB7F289F8D8B2D1EBBABB89F9CAA789FA89FBCDB789FC89FDD2C4BFE4BCD0B6E189FEDEC58A408A418A428A43DEC6DBBC8A44D1D98A458A46C6E6C4CEB7EE8A47B7DC8A488A49BFFCD7E08A4AC6F58A4B8A4CB1BCDEC8BDB1CCD7DECA8A4DDEC98A4E8A4F8A508A518A52B5EC8A53C9DD8A548A55B0C28A568A578A588A598A5A8A5B8A5C8A5D8A5E8A5F8A608A618A62C5AEC5AB8A63C4CC8A64BCE9CBFD8A658A668A67BAC38A688A698A6AE5F9C8E7E5FACDFD8A6BD7B1B8BEC2E88A6CC8D18A6D8A6EE5FB8A6F8A708A718A72B6CABCCB8A738A74D1FDE6A18A75C3EE8A768A778A788A79E6A48A7A8A7B8A7C8A7DE5FEE6A5CDD78A7E8A80B7C1E5FCE5FDE6A38A818A82C4DDE6A88A838A84E6A78A858A868A878A888A898A8AC3C38A8BC6DE8A8C8A8DE6AA8A8E8A8F8A908A918A928A938A94C4B78A958A968A97E6A2CABC8A988A998A9A8A9BBDE3B9C3E6A6D0D5CEAF8A9C8A9DE6A9E6B08A9ED2A68A9FBDAAE6AD8AA08AA18AA28AA38AA4E6AF8AA5C0D18AA68AA7D2CC8AA88AA98AAABCA78AAB8AAC8AAD8AAE8AAF8AB08AB18AB28AB38AB48AB58AB6E6B18AB7D2F68AB88AB98ABAD7CB8ABBCDFE8ABCCDDEC2A6E6ABE6ACBDBFE6AEE6B38ABD8ABEE6B28ABF8AC08AC18AC2E6B68AC3E6B88AC48AC58AC68AC7C4EF8AC88AC98ACAC4C88ACB8ACCBEEAC9EF8ACD8ACEE6B78ACFB6F08AD08AD18AD2C3E48AD38AD48AD58AD68AD78AD88AD9D3E9E6B48ADAE6B58ADBC8A28ADC8ADD8ADE8ADF8AE0E6BD8AE18AE28AE3E6B98AE48AE58AE68AE78AE8C6C58AE98AEACDF1E6BB8AEB8AEC8AED8AEE8AEF8AF08AF18AF28AF38AF4E6BC8AF58AF68AF78AF8BBE98AF98AFA8AFB8AFC8AFD8AFE8B40E6BE8B418B428B438B44E6BA8B458B46C0B78B478B488B498B4A8B4B8B4C8B4D8B4E8B4FD3A4E6BFC9F4E6C38B508B51E6C48B528B538B548B55D0F68B568B578B588B598B5A8B5B8B5C8B5D8B5E8B5F8B608B618B628B638B648B658B668B67C3BD8B688B698B6A8B6B8B6C8B6D8B6EC3C4E6C28B6F8B708B718B728B738B748B758B768B778B788B798B7A8B7B8B7CE6C18B7D8B7E8B808B818B828B838B84E6C7CFB18B85EBF48B868B87E6CA8B888B898B8A8B8B8B8CE6C58B8D8B8EBCDEC9A98B8F8B908B918B928B938B94BCB58B958B96CFD38B978B988B998B9A8B9BE6C88B9CE6C98B9DE6CE8B9EE6D08B9F8BA08BA1E6D18BA28BA38BA4E6CBB5D58BA5E6CC8BA68BA7E6CF8BA88BA9C4DB8BAAE6C68BAB8BAC8BAD8BAE8BAFE6CD8BB08BB18BB28BB38BB48BB58BB68BB78BB88BB98BBA8BBB8BBC8BBD8BBE8BBF8BC08BC18BC28BC38BC48BC58BC6E6D28BC78BC88BC98BCA8BCB8BCC8BCD8BCE8BCF8BD08BD18BD2E6D4E6D38BD38BD48BD58BD68BD78BD88BD98BDA8BDB8BDC8BDD8BDE8BDF8BE08BE18BE28BE38BE48BE58BE68BE78BE88BE98BEA8BEB8BECE6D58BEDD9F88BEE8BEFE6D68BF08BF18BF28BF38BF48BF58BF68BF7E6D78BF88BF98BFA8BFB8BFC8BFD8BFE8C408C418C428C438C448C458C468C47D7D3E6DD8C48E6DEBFD7D4D08C49D7D6B4E6CBEFE6DAD8C3D7CED0A28C4AC3CF8C4B8C4CE6DFBCBEB9C2E6DBD1A78C4D8C4EBAA2C2CF8C4FD8AB8C508C518C52CAEBE5EE8C53E6DC8C54B7F58C558C568C578C58C8E68C598C5AC4F58C5B8C5CE5B2C4FE8C5DCBFCE5B3D5AC8C5ED3EECAD8B0B28C5FCBCECDEA8C608C61BAEA8C628C638C64E5B58C65E5B48C66D7DAB9D9D6E6B6A8CDF0D2CBB1A6CAB58C67B3E8C9F3BFCDD0FBCAD2E5B6BBC28C688C698C6ACFDCB9AC8C6B8C6C8C6D8C6ED4D78C6F8C70BAA6D1E7CFFCBCD28C71E5B7C8DD8C728C738C74BFEDB1F6CBDE8C758C76BCC58C77BCC4D2FAC3DCBFDC8C788C798C7A8C7BB8BB8C7C8C7D8C7EC3C28C80BAAED4A28C818C828C838C848C858C868C878C888C89C7DEC4AFB2EC8C8AB9D18C8B8C8CE5BBC1C88C8D8C8ED5AF8C8F8C908C918C928C93E5BC8C94E5BE8C958C968C978C988C998C9A8C9BB4E7B6D4CBC2D1B0B5BC8C9C8C9DCAD98C9EB7E28C9F8CA0C9E48CA1BDAB8CA28CA3CEBED7F08CA48CA58CA68CA7D0A18CA8C9D98CA98CAAB6FBE6D8BCE28CABB3BE8CACC9D08CADE6D9B3A28CAE8CAF8CB08CB1DECC8CB2D3C8DECD8CB3D2A28CB48CB58CB68CB7DECE8CB88CB98CBA8CBBBECD8CBC8CBDDECF8CBE8CBF8CC0CAACD2FCB3DFE5EAC4E1BEA1CEB2C4F2BED6C6A8B2E38CC18CC2BED38CC38CC4C7FCCCEBBDECCEDD8CC58CC6CABAC6C1E5ECD0BC8CC78CC88CC9D5B98CCA8CCB8CCCE5ED8CCD8CCE8CCF8CD0CAF48CD1CDC0C2C58CD2E5EF8CD3C2C4E5F08CD48CD58CD68CD78CD88CD98CDAE5F8CDCD8CDBC9BD8CDC8CDD8CDE8CDF8CE08CE18CE2D2D9E1A88CE38CE48CE58CE6D3EC8CE7CBEAC6F18CE88CE98CEA8CEB8CECE1AC8CED8CEE8CEFE1A7E1A98CF08CF1E1AAE1AF8CF28CF3B2ED8CF4E1ABB8DAE1ADE1AEE1B0B5BAE1B18CF58CF68CF78CF88CF9E1B3E1B88CFA8CFB8CFC8CFD8CFED1D28D40E1B6E1B5C1EB8D418D428D43E1B78D44D4C08D45E1B28D46E1BAB0B68D478D488D498D4AE1B48D4BBFF98D4CE1B98D4D8D4EE1BB8D4F8D508D518D528D538D54E1BE8D558D568D578D588D598D5AE1BC8D5B8D5C8D5D8D5E8D5F8D60D6C58D618D628D638D648D658D668D67CFBF8D688D69E1BDE1BFC2CD8D6AB6EB8D6BD3F88D6C8D6DC7CD8D6E8D6FB7E58D708D718D728D738D748D758D768D778D788D79BEFE8D7A8D7B8D7C8D7D8D7E8D80E1C0E1C18D818D82E1C7B3E78D838D848D858D868D878D88C6E98D898D8A8D8B8D8C8D8DB4DE8D8ED1C28D8F8D908D918D92E1C88D938D94E1C68D958D968D978D988D99E1C58D9AE1C3E1C28D9BB1C08D9C8D9D8D9ED5B8E1C48D9F8DA08DA18DA28DA3E1CB8DA48DA58DA68DA78DA88DA98DAA8DABE1CCE1CA8DAC8DAD8DAE8DAF8DB08DB18DB28DB3EFFA8DB48DB5E1D3E1D2C7B68DB68DB78DB88DB98DBA8DBB8DBC8DBD8DBE8DBF8DC0E1C98DC18DC2E1CE8DC3E1D08DC48DC58DC68DC78DC88DC98DCA8DCB8DCC8DCD8DCEE1D48DCFE1D1E1CD8DD08DD1E1CF8DD28DD38DD48DD5E1D58DD68DD78DD88DD98DDA8DDB8DDC8DDD8DDE8DDF8DE08DE18DE2E1D68DE38DE48DE58DE68DE78DE88DE98DEA8DEB8DEC8DED8DEE8DEF8DF08DF18DF28DF38DF48DF58DF68DF78DF8E1D78DF98DFA8DFBE1D88DFC8DFD8DFE8E408E418E428E438E448E458E468E478E488E498E4A8E4B8E4C8E4D8E4E8E4F8E508E518E528E538E548E55E1DA8E568E578E588E598E5A8E5B8E5C8E5D8E5E8E5F8E608E618E62E1DB8E638E648E658E668E678E688E69CEA18E6A8E6B8E6C8E6D8E6E8E6F8E708E718E728E738E748E758E76E7DD8E77B4A8D6DD8E788E79D1B2B3B28E7A8E7BB9A4D7F3C7C9BEDEB9AE8E7CCED78E7D8E7EB2EEDBCF8E80BCBAD2D1CBC8B0CD8E818E82CFEF8E838E848E858E868E87D9E3BDED8E888E89B1D2CAD0B2BC8E8ACBA7B7AB8E8BCAA68E8C8E8D8E8ECFA38E8F8E90E0F8D5CAE0FB8E918E92E0FAC5C1CCFB8E93C1B1E0F9D6E3B2AFD6C4B5DB8E948E958E968E978E988E998E9A8E9BB4F8D6A18E9C8E9D8E9E8E9F8EA0CFAFB0EF8EA18EA2E0FC8EA38EA48EA58EA68EA7E1A1B3A38EA88EA9E0FDE0FEC3B18EAA8EAB8EAC8EADC3DD8EAEE1A2B7F98EAF8EB08EB18EB28EB38EB4BBCF8EB58EB68EB78EB88EB98EBA8EBBE1A3C4BB8EBC8EBD8EBE8EBF8EC0E1A48EC18EC2E1A58EC38EC4E1A6B4B18EC58EC68EC78EC88EC98ECA8ECB8ECC8ECD8ECE8ECF8ED08ED18ED28ED3B8C9C6BDC4EA8ED4B2A28ED5D0D28ED6E7DBBBC3D3D7D3C48ED7B9E3E2CF8ED88ED98EDAD7AF8EDBC7ECB1D38EDC8EDDB4B2E2D18EDE8EDF8EE0D0F2C2AEE2D08EE1BFE2D3A6B5D7E2D2B5EA8EE2C3EDB8FD8EE3B8AE8EE4C5D3B7CFE2D48EE58EE68EE78EE8E2D3B6C8D7F98EE98EEA8EEB8EEC8EEDCDA58EEE8EEF8EF08EF18EF2E2D88EF3E2D6CAFCBFB5D3B9E2D58EF48EF58EF68EF7E2D78EF88EF98EFA8EFB8EFC8EFD8EFE8F408F418F42C1AEC0C88F438F448F458F468F478F48E2DBE2DAC0AA8F498F4AC1CE8F4B8F4C8F4D8F4EE2DC8F4F8F508F518F528F538F548F558F568F578F588F598F5AE2DD8F5BE2DE8F5C8F5D8F5E8F5F8F608F618F628F638F64DBC88F65D1D3CDA28F668F67BDA88F688F698F6ADEC3D8A5BFAADBCDD2ECC6FAC5AA8F6B8F6C8F6DDEC48F6EB1D7DFAE8F6F8F708F71CABD8F72DFB18F73B9AD8F74D2FD8F75B8A5BAEB8F768F77B3DA8F788F798F7AB5DCD5C58F7B8F7C8F7D8F7EC3D6CFD2BBA18F80E5F3E5F28F818F82E5F48F83CDE48F84C8F58F858F868F878F888F898F8A8F8BB5AFC7BF8F8CE5F68F8D8F8E8F8FECB08F908F918F928F938F948F958F968F978F988F998F9A8F9B8F9C8F9D8F9EE5E68F9FB9E9B5B18FA0C2BCE5E8E5E7E5E98FA18FA28FA38FA4D2CD8FA58FA68FA7E1EAD0CE8FA8CDAE8FA9D1E58FAA8FABB2CAB1EB8FACB1F2C5ED8FAD8FAED5C3D3B08FAFE1DC8FB08FB18FB2E1DD8FB3D2DB8FB4B3B9B1CB8FB58FB68FB7CDF9D5F7E1DE8FB8BEB6B4FD8FB9E1DFBADCE1E0BBB2C2C9E1E18FBA8FBB8FBCD0EC8FBDCDBD8FBE8FBFE1E28FC0B5C3C5C7E1E38FC18FC2E1E48FC38FC48FC58FC6D3F98FC78FC88FC98FCA8FCB8FCCE1E58FCDD1AD8FCE8FCFE1E6CEA28FD08FD18FD28FD38FD48FD5E1E78FD6B5C28FD78FD88FD98FDAE1E8BBD58FDB8FDC8FDD8FDE8FDFD0C4E2E0B1D8D2E48FE08FE1E2E18FE28FE3BCC9C8CC8FE4E2E3ECFEECFDDFAF8FE58FE68FE7E2E2D6BECDFCC3A68FE88FE98FEAE3C38FEB8FECD6D2E2E78FED8FEEE2E88FEF8FF0D3C78FF18FF2E2ECBFEC8FF3E2EDE2E58FF48FF5B3C08FF68FF78FF8C4EE8FF98FFAE2EE8FFB8FFCD0C38FFDBAF6E2E9B7DEBBB3CCACCBCBE2E4E2E6E2EAE2EB8FFE90409041E2F790429043E2F4D4F5E2F390449045C5AD9046D5FAC5C2B2C090479048E2EF9049E2F2C1AFCBBC904A904BB5A1E2F9904C904D904EBCB1E2F1D0D4D4B9E2F5B9D6E2F6904F90509051C7D390529053905490559056E2F0905790589059905A905BD7DCEDA1905C905DE2F8905EEDA5E2FECAD1905F906090619062906390649065C1B59066BBD090679068BFD69069BAE3906A906BCBA1906C906D906EEDA6EDA3906F9070EDA29071907290739074BBD6EDA7D0F490759076EDA4BADEB6F7E3A1B6B2CCF1B9A79077CFA2C7A190789079BFD2907A907BB6F1907CE2FAE2FBE2FDE2FCC4D5E3A2907DD3C1907E90809081E3A7C7C49082908390849085CFA490869087E3A9BAB790889089908A908BE3A8908CBBDA908DE3A3908E908F9090E3A4E3AA9091E3A69092CEF2D3C690939094BBBC90959096D4C39097C4FA90989099EDA8D0FCE3A5909AC3F5909BE3ADB1AF909CE3B2909D909E909FBCC290A090A1E3ACB5BF90A290A390A490A590A690A790A890A9C7E9E3B090AA90AB90ACBEAACDEF90AD90AE90AF90B090B1BBF390B290B390B4CCE890B590B6E3AF90B7E3B190B8CFA7E3AE90B9CEA9BBDD90BA90BB90BC90BD90BEB5EBBEE5B2D2B3CD90BFB1B9E3ABB2D1B5ACB9DFB6E890C090C1CFEBE3B790C2BBCC90C390C4C8C7D0CA90C590C690C790C890C9E3B8B3EE90CA90CB90CC90CDEDA990CED3FAD3E490CF90D090D1EDAAE3B9D2E290D290D390D490D590D6E3B590D790D890D990DAD3DE90DB90DC90DD90DEB8D0E3B390DF90E0E3B6B7DF90E1E3B4C0A290E290E390E4E3BA90E590E690E790E890E990EA90EB90EC90ED90EE90EF90F090F190F290F390F490F590F690F7D4B890F890F990FA90FB90FC90FD90FE9140B4C89141E3BB9142BBC59143C9F791449145C9E5914691479148C4BD9149914A914B914C914D914E914FEDAB9150915191529153C2FD9154915591569157BBDBBFAE91589159915A915B915C915D915ECEBF915F916091619162E3BC9163BFB6916491659166916791689169916A916B916C916D916E916F9170917191729173917491759176B1EF91779178D4F79179917A917B917C917DE3BE917E9180918191829183918491859186EDAD918791889189918A918B918C918D918E918FE3BFBAA9EDAC91909191E3BD91929193919491959196919791989199919A919BE3C0919C919D919E919F91A091A1BAB691A291A391A4B6AE91A591A691A791A891A9D0B891AAB0C3EDAE91AB91AC91AD91AE91AFEDAFC0C191B0E3C191B191B291B391B491B591B691B791B891B991BA91BB91BC91BD91BE91BF91C091C1C5B391C291C391C491C591C691C791C891C991CA91CB91CC91CD91CE91CFE3C291D091D191D291D391D491D591D691D791D8DCB291D991DA91DB91DC91DD91DEEDB091DFB8EA91E0CEECEAA7D0E7CAF9C8D6CFB7B3C9CED2BDE491E191E2E3DEBBF2EAA8D5BD91E3C6DDEAA991E491E591E6EAAA91E7EAACEAAB91E8EAAEEAAD91E991EA91EB91ECBDD891EDEAAF91EEC2BE91EF91F091F191F2B4C1B4F791F391F4BBA791F591F691F791F891F9ECE6ECE5B7BFCBF9B1E291FAECE791FB91FC91FDC9C8ECE8ECE991FECAD6DED0B2C5D4FA92409241C6CBB0C7B4F2C8D3924292439244CDD092459246BFB8924792489249924A924B924C924DBFDB924E924FC7A4D6B49250C0A9DED1C9A8D1EFC5A4B0E7B3B6C8C592519252B0E292539254B7F692559256C5FA92579258B6F39259D5D2B3D0BCBC925A925B925CB3AD925D925E925F9260BEF1B0D1926192629263926492659266D2D6CAE3D7A59267CDB6B6B6BFB9D5DB9268B8A7C5D79269926A926BDED2BFD9C2D5C7C0926CBBA4B1A8926D926EC5EA926F9270C5FBCCA79271927292739274B1A7927592769277B5D692789279927AC4A8927BDED3D1BAB3E9927CC3F2927D927EB7F79280D6F4B5A3B2F0C4B4C4E9C0ADDED49281B0E8C5C4C1E09282B9D59283BEDCCDD8B0CE9284CDCFDED6BED0D7BEDED5D5D0B0DD92859286C4E292879288C2A3BCF09289D3B5C0B9C5A1B2A6D4F1928A928BC0A8CAC3DED7D5FC928CB9B0928DC8ADCBA9928EDED9BFBD928F929092919292C6B4D7A7CAB0C4C39293B3D6B9D29294929592969297D6B8EAFCB0B492989299929A929BBFE6929C929DCCF4929E929F92A092A1CDDA92A292A392A4D6BFC2CE92A5CECECCA2D0AEC4D3B5B2DED8D5F5BCB7BBD392A692A7B0A492A8C5B2B4EC92A992AA92ABD5F192AC92ADEAFD92AE92AF92B092B192B292B3DEDACDA692B492B5CDEC92B692B792B892B9CEE6DEDC92BACDB1C0A692BB92BCD7BD92BDDEDBB0C6BAB4C9D3C4F3BEE892BE92BF92C092C1B2B692C292C392C492C592C692C792C892C9C0CCCBF092CABCF1BBBBB5B792CB92CC92CDC5F592CEDEE692CF92D092D1DEE3BEDD92D292D3DEDF92D492D592D692D7B4B7BDDD92D892D9DEE0C4ED92DA92DB92DC92DDCFC692DEB5E092DF92E092E192E2B6DECADAB5F4DEE592E3D5C692E4DEE1CCCDC6FE92E5C5C592E692E792E8D2B492E9BEF292EA92EB92EC92ED92EE92EF92F0C2D392F1CCBDB3B892F2BDD392F3BFD8CDC6D1DAB4EB92F4DEE4DEDDDEE792F5EAFE92F692F7C2B0DEE292F892F9D6C0B5A792FAB2F492FBDEE892FCDEF292FD92FE934093419342DEED9343DEF193449345C8E0934693479348D7E1DEEFC3E8CCE19349B2E5934A934B934CD2BE934D934E934F9350935193529353DEEE9354DEEBCED59355B4A79356935793589359935ABFABBEBE935B935CBDD2935D935E935F9360DEE99361D4AE9362DEDE9363DEEA9364936593669367C0BF9368DEECB2F3B8E9C2A79369936ABDC1936B936C936D936E936FDEF5DEF893709371B2ABB4A493729373B4EAC9A6937493759376937793789379DEF6CBD1937AB8E3937BDEF7DEFA937C937D937E9380DEF9938193829383CCC29384B0E1B4EE93859386938793889389938AE5BA938B938C938D938E938FD0AF93909391B2EB9392EBA19393DEF493949395C9E3DEF3B0DAD2A1B1F79396CCAF939793989399939A939B939C939DDEF0939ECBA4939F93A093A1D5AA93A293A393A493A593A6DEFB93A793A893A993AA93AB93AC93AD93AEB4DD93AFC4A693B093B193B2DEFD93B393B493B593B693B793B893B993BA93BB93BCC3FEC4A1DFA193BD93BE93BF93C093C193C293C3C1CC93C4DEFCBEEF93C5C6B293C693C793C893C993CA93CB93CC93CD93CEB3C5C8F693CF93D0CBBADEFE93D193D2DFA493D393D493D593D6D7B293D793D893D993DA93DBB3B793DC93DD93DE93DFC1C393E093E1C7CBB2A5B4E993E2D7AB93E393E493E593E6C4EC93E7DFA2DFA393E8DFA593E9BAB393EA93EB93ECDFA693EDC0DE93EE93EFC9C393F093F193F293F393F493F593F6B2D9C7E693F7DFA793F8C7DC93F993FA93FB93FCDFA8EBA293FD93FE944094419442CBD3944394449445DFAA9446DFA99447B2C194489449944A944B944C944D944E944F9450945194529453945494559456945794589459945A945B945C945D945E945F9460C5CA94619462946394649465946694679468DFAB9469946A946B946C946D946E946F9470D4DC94719472947394749475C8C19476947794789479947A947B947C947D947E948094819482DFAC94839484948594869487BEF094889489DFADD6A7948A948B948C948DEAB7EBB6CAD5948ED8FCB8C4948FB9A594909491B7C5D5FE94929493949494959496B9CA94979498D0A7F4CD9499949AB5D0949B949CC3F4949DBEC8949E949F94A0EBB7B0BD94A194A2BDCC94A3C1B294A4B1D6B3A894A594A694A7B8D2C9A294A894A9B6D894AA94AB94AC94ADEBB8BEB494AE94AF94B0CAFD94B1C7C394B2D5FB94B394B4B7F394B594B694B794B894B994BA94BB94BC94BD94BE94BF94C094C194C294C3CEC494C494C594C6D5ABB1F394C794C894C9ECB3B0DF94CAECB594CB94CC94CDB6B794CEC1CF94CFF5FAD0B194D094D1D5E594D2CED394D394D4BDEFB3E294D5B8AB94D6D5B694D7EDBD94D8B6CF94D9CBB9D0C294DA94DB94DC94DD94DE94DF94E094E1B7BD94E294E3ECB6CAA994E494E594E6C5D494E7ECB9ECB8C2C3ECB794E894E994EA94EBD0FDECBA94ECECBBD7E594ED94EEECBC94EF94F094F1ECBDC6EC94F294F394F494F594F694F794F894F9CEDE94FABCC894FB94FCC8D5B5A9BEC9D6BCD4E794FD94FED1AED0F1EAB8EAB9EABABAB59540954195429543CAB1BFF595449545CDFA9546954795489549954AEAC0954BB0BAEABE954C954DC0A5954E954F9550EABB9551B2FD9552C3F7BBE8955395549555D2D7CEF4EABF955695579558EABC9559955A955BEAC3955CD0C7D3B3955D955E955F9560B4BA9561C3C1D7F29562956395649565D5D19566CAC79567EAC595689569EAC4EAC7EAC6956A956B956C956D956ED6E7956FCFD495709571EACB9572BBCE9573957495759576957795789579BDFAC9CE957A957BEACC957C957DC9B9CFFEEACAD4CEEACDEACF957E9580CDED9581958295839584EAC99585EACE95869587CEEE9588BBDE9589B3BF958A958B958C958D958EC6D5BEB0CEFA958F95909591C7E79592BEA7EAD095939594D6C7959595969597C1C095989599959AD4DD959BEAD1959C959DCFBE959E959F95A095A1EAD295A295A395A495A5CAEE95A695A795A895A9C5AFB0B595AA95AB95AC95AD95AEEAD495AF95B095B195B295B395B495B595B695B7EAD3F4DF95B895B995BA95BB95BCC4BA95BD95BE95BF95C095C1B1A995C295C395C495C5E5DF95C695C795C895C9EAD595CA95CB95CC95CD95CE95CF95D095D195D295D395D495D595D695D795D895D995DA95DB95DC95DD95DE95DF95E095E195E295E3CAEF95E4EAD6EAD7C6D895E595E695E795E895E995EA95EB95ECEAD895ED95EEEAD995EF95F095F195F295F395F4D4BB95F5C7FAD2B7B8FC95F695F7EAC295F8B2DC95F995FAC2FC95FBD4F8CCE6D7EE95FC95FD95FE9640964196429643D4C2D3D0EBC3C5F39644B7FE96459646EBD4964796489649CBB7EBDE964AC0CA964B964C964DCDFB964EB3AF964FC6DA965096519652965396549655EBFC9656C4BE9657CEB4C4A9B1BED4FD9658CAF59659D6EC965A965BC6D3B6E4965C965D965E965FBBFA96609661D0E096629663C9B19664D4D3C8A896659666B8CB9667E8BEC9BC96689669E8BB966AC0EED0D3B2C4B4E5966BE8BC966C966DD5C8966E966F967096719672B6C59673E8BDCAF8B8DCCCF5967496759676C0B496779678D1EEE8BFE8C29679967ABABC967BB1ADBDDC967CEABDE8C3967DE8C6967EE8CB9680968196829683E8CC9684CBC9B0E59685BCAB96869687B9B996889689E8C1968ACDF7968BE8CA968C968D968E968FCEF69690969196929693D5ED9694C1D6E8C49695C3B69696B9FBD6A6E8C8969796989699CAE0D4E6969AE8C0969BE8C5E8C7969CC7B9B7E3969DE8C9969EBFDDE8D2969F96A0E8D796A1E8D5BCDCBCCFE8DB96A296A396A496A596A696A796A896A9E8DE96AAE8DAB1FA96AB96AC96AD96AE96AF96B096B196B296B396B4B0D8C4B3B8CCC6E2C8BEC8E196B596B696B7E8CFE8D4E8D696B8B9F1E8D8D7F596B9C4FB96BAE8DC96BB96BCB2E996BD96BE96BFE8D196C096C1BCED96C296C3BFC2E8CDD6F996C4C1F8B2F196C596C696C796C896C996CA96CB96CCE8DF96CDCAC1E8D996CE96CF96D096D1D5A496D2B1EAD5BBE8CEE8D0B6B0E8D396D3E8DDC0B896D4CAF796D5CBA896D696D7C6DCC0F596D896D996DA96DB96DCE8E996DD96DE96DFD0A396E096E196E296E396E496E596E6E8F2D6EA96E796E896E996EA96EB96EC96EDE8E0E8E196EE96EF96F0D1F9BACBB8F996F196F2B8F1D4D4E8EF96F3E8EEE8ECB9F0CCD2E8E6CEA6BFF296F4B0B8E8F1E8F096F5D7C096F6E8E496F7CDA9C9A396F8BBB8BDDBE8EA96F996FA96FB96FC96FD96FE9740974197429743E8E2E8E3E8E5B5B5E8E7C7C5E8EBE8EDBDB0D7AE9744E8F897459746974797489749974A974B974CE8F5974DCDB0E8F6974E974F9750975197529753975497559756C1BA9757E8E89758C3B7B0F09759975A975B975C975D975E975F9760E8F4976197629763E8F7976497659766B9A3976797689769976A976B976C976D976E976F9770C9D2977197729773C3CECEE0C0E69774977597769777CBF39778CCDDD0B59779977ACAE1977BE8F3977C977D977E9780978197829783978497859786BCEC9787E8F997889789978A978B978C978DC3DE978EC6E5978FB9F79790979197929793B0F497949795D7D897969797BCAC9798C5EF9799979A979B979C979DCCC4979E979FE9A697A097A197A297A397A497A597A697A797A897A9C9AD97AAE9A2C0E297AB97AC97ADBFC397AE97AF97B0E8FEB9D797B1E8FB97B297B397B497B5E9A497B697B797B8D2CE97B997BA97BB97BC97BDE9A397BED6B2D7B597BFE9A797C0BDB797C197C297C397C497C597C697C797C897C997CA97CB97CCE8FCE8FD97CD97CE97CFE9A197D097D197D297D397D497D597D697D7CDD697D897D9D2AC97DA97DB97DCE9B297DD97DE97DF97E0E9A997E197E297E3B4AA97E4B4BB97E597E6E9AB97E797E897E997EA97EB97EC97ED97EE97EF97F097F197F297F397F497F597F697F7D0A897F897F9E9A597FA97FBB3FE97FC97FDE9ACC0E397FEE9AA98409841E9B998429843E9B89844984598469847E9AE98489849E8FA984A984BE9A8984C984D984E984F9850BFACE9B1E9BA98519852C2A5985398549855E9AF9856B8C59857E9AD9858D3DCE9B4E9B5E9B79859985A985BE9C7985C985D985E985F98609861C0C6E9C598629863E9B098649865E9BBB0F19866986798689869986A986B986C986D986E986FE9BCD5A598709871E9BE9872E9BF987398749875E9C198769877C1F198789879C8B6987A987B987CE9BD987D987E988098819882E9C29883988498859886988798889889988AE9C3988BE9B3988CE9B6988DBBB1988E988F9890E9C0989198929893989498959896BCF7989798989899E9C4E9C6989A989B989C989D989E989F98A098A198A298A398A498A5E9CA98A698A798A898A9E9CE98AA98AB98AC98AD98AE98AF98B098B198B298B3B2DB98B4E9C898B598B698B798B898B998BA98BB98BC98BD98BEB7AE98BF98C098C198C298C398C498C598C698C798C898C998CAE9CBE9CC98CB98CC98CD98CE98CF98D0D5C198D1C4A398D298D398D498D598D698D7E9D898D8BAE198D998DA98DB98DCE9C998DDD3A398DE98DF98E0E9D498E198E298E398E498E598E698E7E9D7E9D098E898E998EA98EB98ECE9CF98ED98EEC7C198EF98F098F198F298F398F498F598F6E9D298F798F898F998FA98FB98FC98FDE9D9B3C898FEE9D399409941994299439944CFF0994599469947E9CD99489949994A994B994C994D994E994F995099519952B3F79953995499559956995799589959E9D6995A995BE9DA995C995D995ECCB4995F99609961CFAD99629963996499659966996799689969996AE9D5996BE9DCE9DB996C996D996E996F9970E9DE99719972997399749975997699779978E9D19979997A997B997C997D997E99809981E9DD9982E9DFC3CA9983998499859986998799889989998A998B998C998D998E998F9990999199929993999499959996999799989999999A999B999C999D999E999F99A099A199A299A399A499A599A699A799A899A999AA99AB99AC99AD99AE99AF99B099B199B299B399B499B599B699B799B899B999BA99BB99BC99BD99BE99BF99C099C199C299C399C499C599C699C799C899C999CA99CB99CC99CD99CE99CF99D099D199D299D399D499D599D699D799D899D999DA99DB99DC99DD99DE99DF99E099E199E299E399E499E599E699E799E899E999EA99EB99EC99ED99EE99EF99F099F199F299F399F499F5C7B7B4CEBBB6D0C0ECA399F699F7C5B799F899F999FA99FB99FC99FD99FE9A409A419A42D3FB9A439A449A459A46ECA49A47ECA5C6DB9A489A499A4ABFEE9A4B9A4C9A4D9A4EECA69A4F9A50ECA7D0AA9A51C7B89A529A53B8E89A549A559A569A579A589A599A5A9A5B9A5C9A5D9A5E9A5FECA89A609A619A629A639A649A659A669A67D6B9D5FDB4CBB2BDCEE4C6E79A689A69CDE19A6A9A6B9A6C9A6D9A6E9A6F9A709A719A729A739A749A759A769A77B4F59A78CBC0BCDF9A799A7A9A7B9A7CE9E2E9E3D1EAE9E59A7DB4F9E9E49A7ED1B3CAE2B2D09A80E9E89A819A829A839A84E9E6E9E79A859A86D6B39A879A889A89E9E9E9EA9A8A9A8B9A8C9A8D9A8EE9EB9A8F9A909A919A929A939A949A959A96E9EC9A979A989A999A9A9A9B9A9C9A9D9A9EECAFC5B9B6CE9A9FD2F39AA09AA19AA29AA39AA49AA59AA6B5EE9AA7BBD9ECB19AA89AA9D2E39AAA9AAB9AAC9AAD9AAECEE39AAFC4B89AB0C3BF9AB19AB2B6BED8B9B1C8B1CFB1D1C5FE9AB3B1D09AB4C3AB9AB59AB69AB79AB89AB9D5B19ABA9ABB9ABC9ABD9ABE9ABF9AC09AC1EBA4BAC19AC29AC39AC4CCBA9AC59AC69AC7EBA59AC8EBA79AC99ACA9ACBEBA89ACC9ACD9ACEEBA69ACF9AD09AD19AD29AD39AD49AD5EBA9EBABEBAA9AD69AD79AD89AD99ADAEBAC9ADBCACFD8B5C3F19ADCC3A5C6F8EBADC4CA9ADDEBAEEBAFEBB0B7D59ADE9ADF9AE0B7FA9AE1EBB1C7E29AE2EBB39AE3BAA4D1F5B0B1EBB2EBB49AE49AE59AE6B5AAC2C8C7E89AE7EBB59AE8CBAEE3DF9AE99AEAD3C09AEB9AEC9AED9AEED9DB9AEF9AF0CDA1D6ADC7F39AF19AF29AF3D9E0BBE39AF4BABAE3E29AF59AF69AF79AF89AF9CFAB9AFA9AFB9AFCE3E0C9C79AFDBAB99AFE9B409B41D1B4E3E1C8EAB9AFBDADB3D8CEDB9B429B43CCC09B449B459B46E3E8E3E9CDF49B479B489B499B4A9B4BCCAD9B4CBCB39B4DE3EA9B4EE3EB9B4F9B50D0DA9B519B529B53C6FBB7DA9B549B55C7DFD2CACED69B56E3E4E3EC9B57C9F2B3C19B589B59E3E79B5A9B5BC6E3E3E59B5C9B5DEDB3E3E69B5E9B5F9B609B61C9B39B62C5E69B639B649B65B9B59B66C3BB9B67E3E3C5BDC1A4C2D9B2D79B68E3EDBBA6C4AD9B69E3F0BEDA9B6A9B6BE3FBE3F5BAD39B6C9B6D9B6E9B6FB7D0D3CD9B70D6CED5D3B9C1D5B4D1D89B719B729B739B74D0B9C7F69B759B769B77C8AAB2B49B78C3DA9B799B7A9B7BE3EE9B7C9B7DE3FCE3EFB7A8E3F7E3F49B7E9B809B81B7BA9B829B83C5A29B84E3F6C5DDB2A8C6FC9B85C4E09B869B87D7A29B88C0E1E3F99B899B8AE3FAE3FDCCA9E3F39B8BD3BE9B8CB1C3EDB4E3F1E3F29B8DE3F8D0BAC6C3D4F3E3FE9B8E9B8FBDE09B909B91E4A79B929B93E4A69B949B959B96D1F3E4A39B97E4A99B989B999B9AC8F79B9B9B9C9B9D9B9ECFB49B9FE4A8E4AEC2E59BA09BA1B6B49BA29BA39BA49BA59BA69BA7BDF29BA8E4A29BA99BAABAE9E4AA9BAB9BACE4AC9BAD9BAEB6FDD6DEE4B29BAFE4AD9BB09BB19BB2E4A19BB3BBEECDDDC7A2C5C99BB49BB5C1F79BB6E4A49BB7C7B3BDACBDBDE4A59BB8D7C7B2E29BB9E4ABBCC3E4AF9BBABBEBE4B0C5A8E4B19BBB9BBC9BBD9BBED5E3BFA39BBFE4BA9BC0E4B79BC1E4BB9BC29BC3E4BD9BC49BC5C6D69BC69BC7BAC6C0CB9BC89BC99BCAB8A1E4B49BCB9BCC9BCD9BCED4A19BCF9BD0BAA3BDFE9BD19BD29BD3E4BC9BD49BD59BD69BD79BD8CDBF9BD99BDAC4F99BDB9BDCCFFBC9E69BDD9BDED3BF9BDFCFD19BE09BE1E4B39BE2E4B8E4B9CCE99BE39BE49BE59BE69BE7CCCE9BE8C0D4E4B5C1B0E4B6CED09BE9BBC1B5D39BEAC8F3BDA7D5C7C9ACB8A2E4CA9BEB9BECE4CCD1C49BED9BEED2BA9BEF9BF0BAAD9BF19BF2BAD49BF39BF49BF59BF69BF79BF8E4C3B5ED9BF99BFA9BFBD7CDE4C0CFFDE4BF9BFC9BFD9BFEC1DCCCCA9C409C419C429C43CAE79C449C459C469C47C4D79C48CCD4E4C89C499C4A9C4BE4C7E4C19C4CE4C4B5AD9C4D9C4ED3D99C4FE4C69C509C519C529C53D2F9B4E39C54BBB49C559C56C9EE9C57B4BE9C589C599C5ABBEC9C5BD1CD9C5CCCEDEDB59C5D9C5E9C5F9C609C619C629C639C64C7E59C659C669C679C68D4A89C69E4CBD7D5E4C29C6ABDA5E4C59C6B9C6CD3E69C6DE4C9C9F89C6E9C6FE4BE9C709C71D3E59C729C73C7FEB6C99C74D4FCB2B3E4D79C759C769C77CEC29C78E4CD9C79CEBC9C7AB8DB9C7B9C7CE4D69C7DBFCA9C7E9C809C81D3CE9C82C3EC9C839C849C859C869C879C889C899C8AC5C8E4D89C8B9C8C9C8D9C8E9C8F9C909C919C92CDC4E4CF9C939C949C959C96E4D4E4D59C97BAFE9C98CFE69C999C9AD5BF9C9B9C9C9C9DE4D29C9E9C9F9CA09CA19CA29CA39CA49CA59CA69CA79CA8E4D09CA99CAAE4CE9CAB9CAC9CAD9CAE9CAF9CB09CB19CB29CB39CB49CB59CB69CB79CB89CB9CDE5CAAA9CBA9CBB9CBCC0A39CBDBDA6E4D39CBE9CBFB8C89CC09CC19CC29CC39CC4E4E7D4B49CC59CC69CC79CC89CC99CCA9CCBE4DB9CCC9CCD9CCEC1EF9CCF9CD0E4E99CD19CD2D2E79CD39CD4E4DF9CD5E4E09CD69CD7CFAA9CD89CD99CDA9CDBCBDD9CDCE4DAE4D19CDDE4E59CDEC8DCE4E39CDF9CE0C4E7E4E29CE1E4E19CE29CE39CE4B3FCE4E89CE59CE69CE79CE8B5E19CE99CEA9CEBD7CC9CEC9CED9CEEE4E69CEFBBAC9CF0D7D2CCCFEBF89CF1E4E49CF29CF3B9F69CF49CF59CF6D6CDE4D9E4DCC2FAE4DE9CF7C2CBC0C4C2D09CF8B1F5CCB29CF99CFA9CFB9CFC9CFD9CFE9D409D419D429D43B5CE9D449D459D469D47E4EF9D489D499D4A9D4B9D4C9D4D9D4E9D4FC6AF9D509D519D52C6E19D539D54E4F59D559D569D579D589D59C2A99D5A9D5B9D5CC0ECD1DDE4EE9D5D9D5E9D5F9D609D619D629D639D649D659D66C4AE9D679D689D69E4ED9D6A9D6B9D6C9D6DE4F6E4F4C2FE9D6EE4DD9D6FE4F09D70CAFE9D71D5C49D729D73E4F19D749D759D769D779D789D799D7AD1FA9D7B9D7C9D7D9D7E9D809D819D82E4EBE4EC9D839D849D85E4F29D86CEAB9D879D889D899D8A9D8B9D8C9D8D9D8E9D8F9D90C5CB9D919D929D93C7B19D94C2BA9D959D969D97E4EA9D989D999D9AC1CA9D9B9D9C9D9D9D9E9D9F9DA0CCB6B3B19DA19DA29DA3E4FB9DA4E4F39DA59DA69DA7E4FA9DA8E4FD9DA9E4FC9DAA9DAB9DAC9DAD9DAE9DAF9DB0B3CE9DB19DB29DB3B3BAE4F79DB49DB5E4F9E4F8C5EC9DB69DB79DB89DB99DBA9DBB9DBC9DBD9DBE9DBF9DC09DC19DC2C0BD9DC39DC49DC59DC6D4E89DC79DC89DC99DCA9DCBE5A29DCC9DCD9DCE9DCF9DD09DD19DD29DD39DD49DD59DD6B0C49DD79DD8E5A49DD99DDAE5A39DDB9DDC9DDD9DDE9DDF9DE0BCA49DE1E5A59DE29DE39DE49DE59DE69DE7E5A19DE89DE99DEA9DEB9DEC9DED9DEEE4FEB1F49DEF9DF09DF19DF29DF39DF49DF59DF69DF79DF89DF9E5A89DFAE5A9E5A69DFB9DFC9DFD9DFE9E409E419E429E439E449E459E469E47E5A7E5AA9E489E499E4A9E4B9E4C9E4D9E4E9E4F9E509E519E529E539E549E559E569E579E589E599E5A9E5B9E5C9E5D9E5E9E5F9E609E619E629E639E649E659E669E679E68C6D99E699E6A9E6B9E6C9E6D9E6E9E6F9E70E5ABE5AD9E719E729E739E749E759E769E77E5AC9E789E799E7A9E7B9E7C9E7D9E7E9E809E819E829E839E849E859E869E879E889E89E5AF9E8A9E8B9E8CE5AE9E8D9E8E9E8F9E909E919E929E939E949E959E969E979E989E999E9A9E9B9E9C9E9D9E9EB9E09E9F9EA0E5B09EA19EA29EA39EA49EA59EA69EA79EA89EA99EAA9EAB9EAC9EAD9EAEE5B19EAF9EB09EB19EB29EB39EB49EB59EB69EB79EB89EB99EBABBF0ECE1C3F09EBBB5C6BBD29EBC9EBD9EBE9EBFC1E9D4EE9EC0BEC49EC19EC29EC3D7C69EC4D4D6B2D3ECBE9EC59EC69EC79EC8EAC19EC99ECA9ECBC2AFB4B69ECC9ECD9ECED1D79ECF9ED09ED1B3B49ED2C8B2BFBBECC09ED39ED4D6CB9ED59ED6ECBFECC19ED79ED89ED99EDA9EDB9EDC9EDD9EDE9EDF9EE09EE19EE29EE3ECC5BEE6CCBFC5DABEBC9EE4ECC69EE5B1FE9EE69EE79EE8ECC4D5A8B5E39EE9ECC2C1B6B3E39EEA9EEBECC3CBB8C0C3CCFE9EEC9EED9EEE9EEFC1D29EF0ECC89EF19EF29EF39EF49EF59EF69EF79EF89EF99EFA9EFB9EFC9EFDBAE6C0D39EFED6F29F409F419F42D1CC9F439F449F459F46BFBE9F47B7B3C9D5ECC7BBE29F48CCCCBDFDC8C89F49CFA99F4A9F4B9F4C9F4D9F4E9F4F9F50CDE99F51C5EB9F529F539F54B7E99F559F569F579F589F599F5A9F5B9F5C9F5D9F5E9F5FD1C9BAB89F609F619F629F639F64ECC99F659F66ECCA9F67BBC0ECCB9F68ECE2B1BAB7D99F699F6A9F6B9F6C9F6D9F6E9F6F9F709F719F729F73BDB99F749F759F769F779F789F799F7A9F7BECCCD1E6ECCD9F7C9F7D9F7E9F80C8BB9F819F829F839F849F859F869F879F889F899F8A9F8B9F8C9F8D9F8EECD19F8F9F909F919F92ECD39F93BBCD9F94BCE59F959F969F979F989F999F9A9F9B9F9C9F9D9F9E9F9F9FA09FA1ECCF9FA2C9B79FA39FA49FA59FA69FA7C3BA9FA8ECE3D5D5ECD09FA99FAA9FAB9FAC9FADD6F39FAE9FAF9FB0ECD2ECCE9FB19FB29FB39FB4ECD49FB5ECD59FB69FB7C9BF9FB89FB99FBA9FBB9FBC9FBDCFA89FBE9FBF9FC09FC19FC2D0DC9FC39FC49FC59FC6D1AC9FC79FC89FC99FCAC8DB9FCB9FCC9FCDECD6CEF59FCE9FCF9FD09FD19FD2CAECECDA9FD39FD49FD59FD69FD79FD89FD9ECD99FDA9FDB9FDCB0BE9FDD9FDE9FDF9FE09FE19FE2ECD79FE3ECD89FE49FE59FE6ECE49FE79FE89FE99FEA9FEB9FEC9FED9FEE9FEFC8BC9FF09FF19FF29FF39FF49FF59FF69FF79FF89FF9C1C79FFA9FFB9FFC9FFD9FFEECDCD1E0A040A041A042A043A044A045A046A047A048A049ECDBA04AA04BA04CA04DD4EFA04EECDDA04FA050A051A052A053A054DBC6A055A056A057A058A059A05AA05BA05CA05DA05EECDEA05FA060A061A062A063A064A065A066A067A068A069A06AB1ACA06BA06CA06DA06EA06FA070A071A072A073A074A075A076A077A078A079A07AA07BA07CA07DA07EA080A081ECDFA082A083A084A085A086A087A088A089A08AA08BECE0A08CD7A6A08DC5C0A08EA08FA090EBBCB0AEA091A092A093BEF4B8B8D2AFB0D6B5F9A094D8B3A095CBACA096E3DDA097A098A099A09AA09BA09CA09DC6ACB0E6A09EA09FA0A0C5C6EBB9A0A1A0A2A0A3A0A4EBBAA0A5A0A6A0A7EBBBA0A8A0A9D1C0A0AAC5A3A0ABEAF2A0ACC4B2A0ADC4B5C0CEA0AEA0AFA0B0EAF3C4C1A0B1CEEFA0B2A0B3A0B4A0B5EAF0EAF4A0B6A0B7C9FCA0B8A0B9C7A3A0BAA0BBA0BCCCD8CEFEA0BDA0BEA0BFEAF5EAF6CFACC0E7A0C0A0C1EAF7A0C2A0C3A0C4A0C5A0C6B6BFEAF8A0C7EAF9A0C8EAFAA0C9A0CAEAFBA0CBA0CCA0CDA0CEA0CFA0D0A0D1A0D2A0D3A0D4A0D5A0D6EAF1A0D7A0D8A0D9A0DAA0DBA0DCA0DDA0DEA0DFA0E0A0E1A0E2C8AEE1EBA0E3B7B8E1ECA0E4A0E5A0E6E1EDA0E7D7B4E1EEE1EFD3CCA0E8A0E9A0EAA0EBA0ECA0EDA0EEE1F1BFF1E1F0B5D2A0EFA0F0A0F1B1B7A0F2A0F3A0F4A0F5E1F3E1F2A0F6BAFCA0F7E1F4A0F8A0F9A0FAA0FBB9B7A0FCBED1A0FDA0FEAA40AA41C4FCAA42BADDBDC6AA43AA44AA45AA46AA47AA48E1F5E1F7AA49AA4AB6C0CFC1CAA8E1F6D5F8D3FCE1F8E1FCE1F9AA4BAA4CE1FAC0EAAA4DE1FEE2A1C0C7AA4EAA4FAA50AA51E1FBAA52E1FDAA53AA54AA55AA56AA57AA58E2A5AA59AA5AAA5BC1D4AA5CAA5DAA5EAA5FE2A3AA60E2A8B2FEE2A2AA61AA62AA63C3CDB2C2E2A7E2A6AA64AA65E2A4E2A9AA66AA67E2ABAA68AA69AA6AD0C9D6EDC3A8E2ACAA6BCFD7AA6CAA6DE2AEAA6EAA6FBAEFAA70AA71E9E0E2ADE2AAAA72AA73AA74AA75BBABD4B3AA76AA77AA78AA79AA7AAA7BAA7CAA7DAA7EAA80AA81AA82AA83E2B0AA84AA85E2AFAA86E9E1AA87AA88AA89AA8AE2B1AA8BAA8CAA8DAA8EAA8FAA90AA91AA92E2B2AA93AA94AA95AA96AA97AA98AA99AA9AAA9BAA9CAA9DE2B3CCA1AA9EE2B4AA9FAAA0AB40AB41AB42AB43AB44AB45AB46AB47AB48AB49AB4AAB4BE2B5AB4CAB4DAB4EAB4FAB50D0FEAB51AB52C2CAAB53D3F1AB54CDF5AB55AB56E7E0AB57AB58E7E1AB59AB5AAB5BAB5CBEC1AB5DAB5EAB5FAB60C2EAAB61AB62AB63E7E4AB64AB65E7E3AB66AB67AB68AB69AB6AAB6BCDE6AB6CC3B5AB6DAB6EE7E2BBB7CFD6AB6FC1E1E7E9AB70AB71AB72E7E8AB73AB74E7F4B2A3AB75AB76AB77AB78E7EAAB79E7E6AB7AAB7BAB7CAB7DAB7EE7ECE7EBC9BAAB80AB81D5E4AB82E7E5B7A9E7E7AB83AB84AB85AB86AB87AB88AB89E7EEAB8AAB8BAB8CAB8DE7F3AB8ED6E9AB8FAB90AB91AB92E7EDAB93E7F2AB94E7F1AB95AB96AB97B0E0AB98AB99AB9AAB9BE7F5AB9CAB9DAB9EAB9FABA0AC40AC41AC42AC43AC44AC45AC46AC47AC48AC49AC4AC7F2AC4BC0C5C0EDAC4CAC4DC1F0E7F0AC4EAC4FAC50AC51E7F6CBF6AC52AC53AC54AC55AC56AC57AC58AC59AC5AE8A2E8A1AC5BAC5CAC5DAC5EAC5FAC60D7C1AC61AC62E7FAE7F9AC63E7FBAC64E7F7AC65E7FEAC66E7FDAC67E7FCAC68AC69C1D5C7D9C5FDC5C3AC6AAC6BAC6CAC6DAC6EC7EDAC6FAC70AC71AC72E8A3AC73AC74AC75AC76AC77AC78AC79AC7AAC7BAC7CAC7DAC7EAC80AC81AC82AC83AC84AC85AC86E8A6AC87E8A5AC88E8A7BAF7E7F8E8A4AC89C8F0C9AAAC8AAC8BAC8CAC8DAC8EAC8FAC90AC91AC92AC93AC94AC95AC96E8A9AC97AC98B9E5AC99AC9AAC9BAC9CAC9DD1FEE8A8AC9EAC9FACA0AD40AD41AD42E8AAAD43E8ADE8AEAD44C1A7AD45AD46AD47E8AFAD48AD49AD4AE8B0AD4BAD4CE8ACAD4DE8B4AD4EAD4FAD50AD51AD52AD53AD54AD55AD56AD57AD58E8ABAD59E8B1AD5AAD5BAD5CAD5DAD5EAD5FAD60AD61E8B5E8B2E8B3AD62AD63AD64AD65AD66AD67AD68AD69AD6AAD6BAD6CAD6DAD6EAD6FAD70AD71E8B7AD72AD73AD74AD75AD76AD77AD78AD79AD7AAD7BAD7CAD7DAD7EAD80AD81AD82AD83AD84AD85AD86AD87AD88AD89E8B6AD8AAD8BAD8CAD8DAD8EAD8FAD90AD91AD92B9CFAD93F0ACAD94F0ADAD95C6B0B0EAC8BFAD96CDDFAD97AD98AD99AD9AAD9BAD9CAD9DCECDEAB1AD9EAD9FADA0AE40EAB2AE41C6BFB4C9AE42AE43AE44AE45AE46AE47AE48EAB3AE49AE4AAE4BAE4CD5E7AE4DAE4EAE4FAE50AE51AE52AE53AE54DDF9AE55EAB4AE56EAB5AE57EAB6AE58AE59AE5AAE5BB8CADFB0C9F5AE5CCCF0AE5DAE5EC9FAAE5FAE60AE61AE62AE63C9FBAE64AE65D3C3CBA6AE66B8A6F0AEB1C2AE67E5B8CCEFD3C9BCD7C9EAAE68B5E7AE69C4D0B5E9AE6AEEAEBBADAE6BAE6CE7DEAE6DEEAFAE6EAE6FAE70AE71B3A9AE72AE73EEB2AE74AE75EEB1BDE7AE76EEB0CEB7AE77AE78AE79AE7AC5CFAE7BAE7CAE7DAE7EC1F4DBCEEEB3D0F3AE80AE81AE82AE83AE84AE85AE86AE87C2D4C6E8AE88AE89AE8AB7ACAE8BAE8CAE8DAE8EAE8FAE90AE91EEB4AE92B3EBAE93AE94AE95BBFBEEB5AE96AE97AE98AE99AE9AE7DCAE9BAE9CAE9DEEB6AE9EAE9FBDAEAEA0AF40AF41AF42F1E2AF43AF44AF45CAE8AF46D2C9F0DAAF47F0DBAF48F0DCC1C6AF49B8EDBECEAF4AAF4BF0DEAF4CC5B1F0DDD1F1AF4DF0E0B0CCBDEAAF4EAF4FAF50AF51AF52D2DFF0DFAF53B4AFB7E8F0E6F0E5C6A3F0E1F0E2B4C3AF54AF55F0E3D5EEAF56AF57CCDBBED2BCB2AF58AF59AF5AF0E8F0E7F0E4B2A1AF5BD6A2D3B8BEB7C8ACAF5CAF5DF0EAAF5EAF5FAF60AF61D1F7AF62D6CCBADBF0E9AF63B6BBAF64AF65CDB4AF66AF67C6A6AF68AF69AF6AC1A1F0EBF0EEAF6BF0EDF0F0F0ECAF6CBBBEF0EFAF6DAF6EAF6FAF70CCB5F0F2AF71AF72B3D5AF73AF74AF75AF76B1D4AF77AF78F0F3AF79AF7AF0F4F0F6B4E1AF7BF0F1AF7CF0F7AF7DAF7EAF80AF81F0FAAF82F0F8AF83AF84AF85F0F5AF86AF87AF88AF89F0FDAF8AF0F9F0FCF0FEAF8BF1A1AF8CAF8DAF8ECEC1F1A4AF8FF1A3AF90C1F6F0FBCADDAF91AF92B4F1B1F1CCB1AF93F1A6AF94AF95F1A7AF96AF97F1ACD5CEF1A9AF98AF99C8B3AF9AAF9BAF9CF1A2AF9DF1ABF1A8F1A5AF9EAF9FF1AAAFA0B040B041B042B043B044B045B046B0A9F1ADB047B048B049B04AB04BB04CF1AFB04DF1B1B04EB04FB050B051B052F1B0B053F1AEB054B055B056B057D1A2B058B059B05AB05BB05CB05DB05EF1B2B05FB060B061F1B3B062B063B064B065B066B067B068B069B9EFB06AB06BB5C7B06CB0D7B0D9B06DB06EB06FD4EDB070B5C4B071BDD4BBCAF0A7B072B073B8DEB074B075F0A8B076B077B0A8B078F0A9B079B07ACDEEB07BB07CF0AAB07DB07EB080B081B082B083B084B085B086B087F0ABB088B089B08AB08BB08CB08DB08EB08FB090C6A4B091B092D6E5F1E4B093F1E5B094B095B096B097B098B099B09AB09BB09CB09DC3F3B09EB09FD3DBB0A0B140D6D1C5E8B141D3AFB142D2E6B143B144EEC1B0BBD5B5D1CEBCE0BAD0B145BFF8B146B8C7B5C1C5CCB147B148CAA2B149B14AB14BC3CBB14CB14DB14EB14FB150EEC2B151B152B153B154B155B156B157B158C4BFB6A2B159EDECC3A4B15AD6B1B15BB15CB15DCFE0EDEFB15EB15FC5CEB160B6DCB161B162CAA1B163B164EDEDB165B166EDF0EDF1C3BCB167BFB4B168EDEEB169B16AB16BB16CB16DB16EB16FB170B171B172B173EDF4EDF2B174B175B176B177D5E6C3DFB178EDF3B179B17AB17BEDF6B17CD5A3D1A3B17DB17EB180EDF5B181C3D0B182B183B184B185B186EDF7BFF4BEECEDF8B187CCF7B188D1DBB189B18AB18BD7C5D5F6B18CEDFCB18DB18EB18FEDFBB190B191B192B193B194B195B196B197EDF9EDFAB198B199B19AB19BB19CB19DB19EB19FEDFDBEA6B1A0B240B241B242B243CBAFEEA1B6BDB244EEA2C4C0B245EDFEB246B247BDDEB2C7B248B249B24AB24BB24CB24DB24EB24FB250B251B252B253B6C3B254B255B256EEA5D8BAEEA3EEA6B257B258B259C3E9B3F2B25AB25BB25CB25DB25EB25FEEA7EEA4CFB9B260B261EEA8C2F7B262B263B264B265B266B267B268B269B26AB26BB26CB26DEEA9EEAAB26EDEABB26FB270C6B3B271C7C6B272D6F5B5C9B273CBB2B274B275B276EEABB277B278CDABB279EEACB27AB27BB27CB27DB27ED5B0B280EEADB281F6C4B282B283B284B285B286B287B288B289B28AB28BB28CB28DB28EDBC7B28FB290B291B292B293B294B295B296B297B4A3B298B299B29AC3ACF1E6B29BB29CB29DB29EB29FCAB8D2D3B2A0D6AAB340EFF2B341BED8B342BDC3EFF3B6CCB0ABB343B344B345B346CAAFB347B348EDB6B349EDB7B34AB34BB34CB34DCEF9B7AFBFF3EDB8C2EBC9B0B34EB34FB350B351B352B353EDB9B354B355C6F6BFB3B356B357B358EDBCC5F8B359D1D0B35AD7A9EDBAEDBBB35BD1E2B35CEDBFEDC0B35DEDC4B35EB35FB360EDC8B361EDC6EDCED5E8B362EDC9B363B364EDC7EDBEB365B366C5E9B367B368B369C6C6B36AB36BC9E9D4D2EDC1EDC2EDC3EDC5B36CC0F9B36DB4A1B36EB36FB370B371B9E8B372EDD0B373B374B375B376EDD1B377EDCAB378EDCFB379CEF8B37AB37BCBB6EDCCEDCDB37CB37DB37EB380B381CFF5B382B383B384B385B386B387B388B389B38AB38BB38CB38DEDD2C1F2D3B2EDCBC8B7B38EB38FB390B391B392B393B394B395BCEFB396B397B398B399C5F0B39AB39BB39CB39DB39EB39FB3A0B440B441B442EDD6B443B5EFB444B445C2B5B0ADCBE9B446B447B1AEB448EDD4B449B44AB44BCDEBB5E2B44CEDD5EDD3EDD7B44DB44EB5FAB44FEDD8B450EDD9B451EDDCB452B1CCB453B454B455B456B457B458B459B45AC5F6BCEEEDDACCBCB2EAB45BB45CB45DB45EEDDBB45FB460B461B462C4EBB463B464B4C5B465B466B467B0F5B468B469B46AEDDFC0DAB4E8B46BB46CB46DB46EC5CDB46FB470B471EDDDBFC4B472B473B474EDDEB475B476B477B478B479B47AB47BB47CB47DB47EB480B481B482B483C4A5B484B485B486EDE0B487B488B489B48AB48BEDE1B48CEDE3B48DB48EC1D7B48FB490BBC7B491B492B493B494B495B496BDB8B497B498B499EDE2B49AB49BB49CB49DB49EB49FB4A0B540B541B542B543B544B545EDE4B546B547B548B549B54AB54BB54CB54DB54EB54FEDE6B550B551B552B553B554EDE5B555B556B557B558B559B55AB55BB55CB55DB55EB55FB560B561B562B563EDE7B564B565B566B567B568CABEECEAC0F1B569C9E7B56AECEBC6EEB56BB56CB56DB56EECECB56FC6EDECEDB570B571B572B573B574B575B576B577B578ECF0B579B57AD7E6ECF3B57BB57CECF1ECEEECEFD7A3C9F1CBEEECF4B57DECF2B57EB580CFE9B581ECF6C6B1B582B583B584B585BCC0B586ECF5B587B588B589B58AB58BB58CB58DB5BBBBF6B58EECF7B58FB590B591B592B593D9F7BDFBB594B595C2BBECF8B596B597B598B599ECF9B59AB59BB59CB59DB8A3B59EB59FB5A0B640B641B642B643B644B645B646ECFAB647B648B649B64AB64BB64CB64DB64EB64FB650B651B652ECFBB653B654B655B656B657B658B659B65AB65BB65CB65DECFCB65EB65FB660B661B662D3EDD8AEC0EBB663C7DDBACCB664D0E3CBBDB665CDBAB666B667B8D1B668B669B1FCB66AC7EFB66BD6D6B66CB66DB66EBFC6C3EBB66FB670EFF5B671B672C3D8B673B674B675B676B677B678D7E2B679B67AB67BEFF7B3D3B67CC7D8D1EDB67DD6C8B67EEFF8B680EFF6B681BBFDB3C6B682B683B684B685B686B687B688BDD5B689B68AD2C6B68BBBE0B68CB68DCFA1B68EEFFCEFFBB68FB690EFF9B691B692B693B694B3CCB695C9D4CBB0B696B697B698B699B69AEFFEB69BB69CB0DEB69DB69ED6C9B69FB6A0B740EFFDB741B3EDB742B743F6D5B744B745B746B747B748B749B74AB74BB74CB74DB74EB74FB750B751B752CEC8B753B754B755F0A2B756F0A1B757B5BEBCDABBFCB758B8E5B759B75AB75BB75CB75DB75EC4C2B75FB760B761B762B763B764B765B766B767B768F0A3B769B76AB76BB76CB76DCBEBB76EB76FB770B771B772B773B774B775B776B777B778B779B77AB77BB77CB77DB77EB780B781B782B783B784B785B786F0A6B787B788B789D1A8B78ABEBFC7EEF1B6F1B7BFD5B78BB78CB78DB78EB4A9F1B8CDBBB78FC7D4D5ADB790F1B9B791F1BAB792B793B794B795C7CFB796B797B798D2A4D6CFB799B79AF1BBBDD1B4B0BEBDB79BB79CB79DB4DCCED1B79EBFDFF1BDB79FB7A0B840B841BFFAF1BCB842F1BFB843B844B845F1BEF1C0B846B847B848B849B84AF1C1B84BB84CB84DB84EB84FB850B851B852B853B854B855C1FEB856B857B858B859B85AB85BB85CB85DB85EB85FB860C1A2B861B862B863B864B865B866B867B868B869B86ACAFAB86BB86CD5BEB86DB86EB86FB870BEBABEB9D5C2B871B872BFA2B873CDAFF1B5B874B875B876B877B878B879BDDFB87AB6CBB87BB87CB87DB87EB880B881B882B883B884D6F1F3C3B885B886F3C4B887B8CDB888B889B88AF3C6F3C7B88BB0CAB88CF3C5B88DF3C9CBF1B88EB88FB890F3CBB891D0A6B892B893B1CAF3C8B894B895B896F3CFB897B5D1B898B899F3D7B89AF3D2B89BB89CB89DF3D4F3D3B7FBB89EB1BFB89FF3CEF3CAB5DAB8A0F3D0B940B941F3D1B942F3D5B943B944B945B946F3CDB947BCE3B948C1FDB949F3D6B94AB94BB94CB94DB94EB94FF3DAB950F3CCB951B5C8B952BDEEF3DCB953B954B7A4BFF0D6FECDB2B955B4F0B956B2DFB957F3D8B958F3D9C9B8B959F3DDB95AB95BF3DEB95CF3E1B95DB95EB95FB960B961B962B963B964B965B966B967F3DFB968B969F3E3F3E2B96AB96BF3DBB96CBFEAB96DB3EFB96EF3E0B96FB970C7A9B971BCF2B972B973B974B975F3EBB976B977B978B979B97AB97BB97CB9BFB97DB97EF3E4B980B981B982B2ADBBFEB983CBE3B984B985B986B987F3EDF3E9B988B989B98AB9DCF3EEB98BB98CB98DF3E5F3E6F3EAC2E1F3ECF3EFF3E8BCFDB98EB98FB990CFE4B991B992F3F0B993B994B995F3E7B996B997B998B999B99AB99BB99CB99DF3F2B99EB99FB9A0BA40D7ADC6AABA41BA42BA43BA44F3F3BA45BA46BA47BA48F3F1BA49C2A8BA4ABA4BBA4CBA4DBA4EB8DDF3F5BA4FBA50F3F4BA51BA52BA53B4DBBA54BA55BA56F3F6F3F7BA57BA58BA59F3F8BA5ABA5BBA5CC0BABA5DBA5EC0E9BA5FBA60BA61BA62BA63C5F1BA64BA65BA66BA67F3FBBA68F3FABA69BA6ABA6BBA6CBA6DBA6EBA6FBA70B4D8BA71BA72BA73F3FEF3F9BA74BA75F3FCBA76BA77BA78BA79BA7ABA7BF3FDBA7CBA7DBA7EBA80BA81BA82BA83BA84F4A1BA85BA86BA87BA88BA89BA8AF4A3BBC9BA8BBA8CF4A2BA8DBA8EBA8FBA90BA91BA92BA93BA94BA95BA96BA97BA98BA99F4A4BA9ABA9BBA9CBA9DBA9EBA9FB2BEF4A6F4A5BAA0BB40BB41BB42BB43BB44BB45BB46BB47BB48BB49BCAEBB4ABB4BBB4CBB4DBB4EBB4FBB50BB51BB52BB53BB54BB55BB56BB57BB58BB59BB5ABB5BBB5CBB5DBB5EBB5FBB60BB61BB62BB63BB64BB65BB66BB67BB68BB69BB6ABB6BBB6CBB6DBB6EC3D7D9E1BB6FBB70BB71BB72BB73BB74C0E0F4CCD7D1BB75BB76BB77BB78BB79BB7ABB7BBB7CBB7DBB7EBB80B7DBBB81BB82BB83BB84BB85BB86BB87F4CEC1A3BB88BB89C6C9BB8AB4D6D5B3BB8BBB8CBB8DF4D0F4CFF4D1CBDABB8EBB8FF4D2BB90D4C1D6E0BB91BB92BB93BB94B7E0BB95BB96BB97C1B8BB98BB99C1BBF4D3BEACBB9ABB9BBB9CBB9DBB9EB4E2BB9FBBA0F4D4F4D5BEABBC40BC41F4D6BC42BC43BC44F4DBBC45F4D7F4DABC46BAFDBC47F4D8F4D9BC48BC49BC4ABC4BBC4CBC4DBC4EB8E2CCC7F4DCBC4FB2DABC50BC51C3D3BC52BC53D4E3BFB7BC54BC55BC56BC57BC58BC59BC5AF4DDBC5BBC5CBC5DBC5EBC5FBC60C5B4BC61BC62BC63BC64BC65BC66BC67BC68F4E9BC69BC6ACFB5BC6BBC6CBC6DBC6EBC6FBC70BC71BC72BC73BC74BC75BC76BC77BC78CEC9BC79BC7ABC7BBC7CBC7DBC7EBC80BC81BC82BC83BC84BC85BC86BC87BC88BC89BC8ABC8BBC8CBC8DBC8ECBD8BC8FCBF7BC90BC91BC92BC93BDF4BC94BC95BC96D7CFBC97BC98BC99C0DBBC9ABC9BBC9CBC9DBC9EBC9FBCA0BD40BD41BD42BD43BD44BD45BD46BD47BD48BD49BD4ABD4BBD4CBD4DBD4EBD4FBD50BD51BD52BD53BD54BD55BD56BD57BD58BD59BD5ABD5BBD5CBD5DBD5EBD5FBD60BD61BD62BD63BD64BD65BD66BD67BD68BD69BD6ABD6BBD6CBD6DBD6EBD6FBD70BD71BD72BD73BD74BD75BD76D0F5BD77BD78BD79BD7ABD7BBD7CBD7DBD7EF4EABD80BD81BD82BD83BD84BD85BD86BD87BD88BD89BD8ABD8BBD8CBD8DBD8EBD8FBD90BD91BD92BD93BD94BD95BD96BD97BD98BD99BD9ABD9BBD9CBD9DBD9EBD9FBDA0BE40BE41BE42BE43BE44BE45BE46BE47BE48BE49BE4ABE4BBE4CF4EBBE4DBE4EBE4FBE50BE51BE52BE53F4ECBE54BE55BE56BE57BE58BE59BE5ABE5BBE5CBE5DBE5EBE5FBE60BE61BE62BE63BE64BE65BE66BE67BE68BE69BE6ABE6BBE6CBE6DBE6EBE6FBE70BE71BE72BE73BE74BE75BE76BE77BE78BE79BE7ABE7BBE7CBE7DBE7EBE80BE81BE82BE83BE84BE85BE86BE87BE88BE89BE8ABE8BBE8CBE8DBE8EBE8FBE90BE91BE92BE93BE94BE95BE96BE97BE98BE99BE9ABE9BBE9CBE9DBE9EBE9FBEA0BF40BF41BF42BF43BF44BF45BF46BF47BF48BF49BF4ABF4BBF4CBF4DBF4EBF4FBF50BF51BF52BF53BF54BF55BF56BF57BF58BF59BF5ABF5BBF5CBF5DBF5EBF5FBF60BF61BF62BF63BF64BF65BF66BF67BF68BF69BF6ABF6BBF6CBF6DBF6EBF6FBF70BF71BF72BF73BF74BF75BF76BF77BF78BF79BF7ABF7BBF7CBF7DBF7EBF80F7E3BF81BF82BF83BF84BF85B7B1BF86BF87BF88BF89BF8AF4EDBF8BBF8CBF8DBF8EBF8FBF90BF91BF92BF93BF94BF95BF96BF97BF98BF99BF9ABF9BBF9CBF9DBF9EBF9FBFA0C040C041C042C043C044C045C046C047C048C049C04AC04BC04CC04DC04EC04FC050C051C052C053C054C055C056C057C058C059C05AC05BC05CC05DC05EC05FC060C061C062C063D7EBC064C065C066C067C068C069C06AC06BC06CC06DC06EC06FC070C071C072C073C074C075C076C077C078C079C07AC07BF4EEC07CC07DC07EE6F9BEC0E6FABAECE6FBCFCBE6FCD4BCBCB6E6FDE6FEBCCDC8D2CEB3E7A1C080B4BFE7A2C9B4B8D9C4C9C081D7DDC2DAB7D7D6BDCEC6B7C4C082C083C5A6E7A3CFDFE7A4E7A5E7A6C1B7D7E9C9F0CFB8D6AFD6D5E7A7B0EDE7A8E7A9C9DCD2EFBEADE7AAB0F3C8DEBDE1E7ABC8C6C084E7ACBBE6B8F8D1A4E7ADC2E7BEF8BDCACDB3E7AEE7AFBEEED0E5C085CBE7CCD0BCCCE7B0BCA8D0F7E7B1C086D0F8E7B2E7B3B4C2E7B4E7B5C9FECEACC3E0E7B7B1C1B3F1C087E7B8E7B9D7DBD5C0E7BAC2CCD7BAE7BBE7BCE7BDBCEAC3E5C0C2E7BEE7BFBCA9C088E7C0E7C1E7B6B6D0E7C2C089E7C3E7C4BBBAB5DEC2C6B1E0E7C5D4B5E7C6B8BFE7C8E7C7B7ECC08AE7C9B2F8E7CAE7CBE7CCE7CDE7CEE7CFE7D0D3A7CBF5E7D1E7D2E7D3E7D4C9C9E7D5E7D6E7D7E7D8E7D9BDC9E7DAF3BEC08BB8D7C08CC8B1C08DC08EC08FC090C091C092C093F3BFC094F3C0F3C1C095C096C097C098C099C09AC09BC09CC09DC09EB9DECDF8C09FC0A0D8E8BAB1C140C2DEEEB7C141B7A3C142C143C144C145EEB9C146EEB8B0D5C147C148C149C14AC14BEEBBD5D6D7EFC14CC14DC14ED6C3C14FC150EEBDCAF0C151EEBCC152C153C154C155EEBEC156C157C158C159EEC0C15AC15BEEBFC15CC15DC15EC15FC160C161C162C163D1F2C164C7BCC165C3C0C166C167C168C169C16AB8E1C16BC16CC16DC16EC16FC1E7C170C171F4C6D0DFF4C7C172CFDBC173C174C8BAC175C176F4C8C177C178C179C17AC17BC17CC17DF4C9F4CAC17EF4CBC180C181C182C183C184D9FAB8FEC185C186E5F1D3F0C187F4E0C188CECCC189C18AC18BB3E1C18CC18DC18EC18FF1B4C190D2EEC191F4E1C192C193C194C195C196CFE8F4E2C197C198C7CCC199C19AC19BC19CC19DC19EB5D4B4E4F4E4C19FC1A0C240F4E3F4E5C241C242F4E6C243C244C245C246F4E7C247BAB2B0BFC248F4E8C249C24AC24BC24CC24DC24EC24FB7ADD2EDC250C251C252D2ABC0CFC253BFBCEBA3D5DFEAC8C254C255C256C257F1F3B6F8CBA3C258C259C4CDC25AF1E7C25BF1E8B8FBF1E9BAC4D4C5B0D2C25CC25DF1EAC25EC25FC260F1EBC261F1ECC262C263F1EDF1EEF1EFF1F1F1F0C5D5C264C265C266C267C268C269F1F2C26AB6FAC26BF1F4D2AEDEC7CBCAC26CC26DB3DCC26EB5A2C26FB9A2C270C271C4F4F1F5C272C273F1F6C274C275C276C1C4C1FBD6B0F1F7C277C278C279C27AF1F8C27BC1AAC27CC27DC27EC6B8C280BEDBC281C282C283C284C285C286C287C288C289C28AC28BC28CC28DC28EF1F9B4CFC28FC290C291C292C293C294F1FAC295C296C297C298C299C29AC29BC29CC29DC29EC29FC2A0C340EDB2EDB1C341C342CBE0D2DEC343CBC1D5D8C344C8E2C345C0DFBCA1C346C347C348C349C34AC34BEBC1C34CC34DD0A4C34ED6E2C34FB6C7B8D8EBC0B8CEC350EBBFB3A6B9C9D6ABC351B7F4B7CAC352C353C354BCE7B7BEEBC6C355EBC7B0B9BFCFC356EBC5D3FDC357EBC8C358C359EBC9C35AC35BB7CEC35CEBC2EBC4C9F6D6D7D5CDD0B2EBCFCEB8EBD0C35DB5A8C35EC35FC360C361C362B1B3EBD2CCA5C363C364C365C366C367C368C369C5D6EBD3C36AEBD1C5DFEBCECAA4EBD5B0FBC36BC36CBAFAC36DC36ED8B7F1E3C36FEBCAEBCBEBCCEBCDEBD6E6C0EBD9C370BFE8D2C8EBD7EBDCB8ECEBD8C371BDBAC372D0D8C373B0B7C374EBDDC4DCC375C376C377C378D6ACC379C37AC37BB4E0C37CC37DC2F6BCB9C37EC380EBDAEBDBD4E0C6EAC4D4EBDFC5A7D9F5C381B2B1C382EBE4C383BDC5C384C385C386EBE2C387C388C389C38AC38BC38CC38DC38EC38FC390C391C392C393EBE3C394C395B8ACC396CDD1EBE5C397C398C399EBE1C39AC1B3C39BC39CC39DC39EC39FC6A2C3A0C440C441C442C443C444C445CCF3C446EBE6C447C0B0D2B8EBE7C448C449C44AB8AFB8ADC44BEBE8C7BBCDF3C44CC44DC44EEBEAEBEBC44FC450C451C452C453EBEDC454C455C456C457D0C8C458EBF2C459EBEEC45AC45BC45CEBF1C8F9C45DD1FCEBECC45EC45FEBE9C460C461C462C463B8B9CFD9C4E5EBEFEBF0CCDACDC8B0F2C464EBF6C465C466C467C468C469EBF5C46AB2B2C46BC46CC46DC46EB8E0C46FEBF7C470C471C472C473C474C475B1ECC476C477CCC5C4A4CFA5C478C479C47AC47BC47CEBF9C47DC47EECA2C480C5F2C481EBFAC482C483C484C485C486C487C488C489C9C5C48AC48BC48CC48DC48EC48FE2DFEBFEC490C491C492C493CDCEECA1B1DBD3B7C494C495D2DCC496C497C498EBFDC499EBFBC49AC49BC49CC49DC49EC49FC4A0C540C541C542C543C544C545C546C547C548C549C54AC54BC54CC54DC54EB3BCC54FC550C551EAB0C552C553D7D4C554F4ABB3F4C555C556C557C558C559D6C1D6C2C55AC55BC55CC55DC55EC55FD5E9BECAC560F4A7C561D2A8F4A8F4A9C562F4AABECBD3DFC563C564C565C566C567C9E0C9E1C568C569F3C2C56ACAE6C56BCCF2C56CC56DC56EC56FC570C571E2B6CBB4C572CEE8D6DBC573F4ADF4AEF4AFC574C575C576C577F4B2C578BABDF4B3B0E3F4B0C579F4B1BDA2B2D5C57AF4B6F4B7B6E6B2B0CFCFF4B4B4ACC57BF4B5C57CC57DF4B8C57EC580C581C582C583F4B9C584C585CDA7C586F4BAC587F4BBC588C589C58AF4BCC58BC58CC58DC58EC58FC590C591C592CBD2C593F4BDC594C595C596C597F4BEC598C599C59AC59BC59CC59DC59EC59FF4BFC5A0C640C641C642C643F4DEC1BCBCE8C644C9ABD1DEE5F5C645C646C647C648DCB3D2D5C649C64ADCB4B0ACDCB5C64BC64CBDDAC64DDCB9C64EC64FC650D8C2C651DCB7D3F3C652C9D6DCBADCB6C653DCBBC3A2C654C655C656C657DCBCDCC5DCBDC658C659CEDFD6A5C65ADCCFC65BDCCDC65CC65DDCD2BDE6C2ABC65EDCB8DCCBDCCEDCBEB7D2B0C5DCC7D0BEDCC1BBA8C65FB7BCDCCCC660C661DCC6DCBFC7DBC662C663C664D1BFDCC0C665C666DCCAC667C668DCD0C669C66ACEADDCC2C66BDCC3DCC8DCC9B2D4DCD1CBD5C66CD4B7DCDBDCDFCCA6DCE6C66DC3E7DCDCC66EC66FBFC1DCD9C670B0FAB9B6DCE5DCD3C671DCC4DCD6C8F4BFE0C672C673C674C675C9BBC676C677C678B1BDC679D3A2C67AC67BDCDAC67CC67DDCD5C67EC6BBC680DCDEC681C682C683C684C685D7C2C3AFB7B6C7D1C3A9DCE2DCD8DCEBDCD4C686C687DCDDC688BEA5DCD7C689DCE0C68AC68BDCE3DCE4C68CDCF8C68DC68EDCE1DDA2DCE7C68FC690C691C692C693C694C695C696C697C698BCEBB4C4C699C69AC3A3B2E7DCFAC69BDCF2C69CDCEFC69DDCFCDCEED2F0B2E8C69EC8D7C8E3DCFBC69FDCEDC6A0C740C741DCF7C742C743DCF5C744C745BEA3DCF4C746B2DDC747C748C749C74AC74BDCF3BCF6DCE8BBC4C74CC0F3C74DC74EC74FC750C751BCD4DCE9DCEAC752DCF1DCF6DCF9B5B4C753C8D9BBE7DCFEDCFDD3ABDDA1DDA3DDA5D2F1DDA4DDA6DDA7D2A9C754C755C756C757C758C759C75ABAC9DDA9C75BC75CDDB6DDB1DDB4C75DC75EC75FC760C761C762C763DDB0C6CEC764C765C0F2C766C767C768C769C9AFC76AC76BC76CDCECDDAEC76DC76EC76FC770DDB7C771C772DCF0DDAFC773DDB8C774DDACC775C776C777C778C779C77AC77BDDB9DDB3DDADC4AAC77CC77DC77EC780DDA8C0B3C1ABDDAADDABC781DDB2BBF1DDB5D3A8DDBAC782DDBBC3A7C783C784DDD2DDBCC785C786C787DDD1C788B9BDC789C78ABED5C78BBEFAC78CC78DBACAC78EC78FC790C791DDCAC792DDC5C793DDBFC794C795C796B2CBDDC3C797DDCBB2A4DDD5C798C799C79ADDBEC79BC79CC79DC6D0DDD0C79EC79FC7A0C840C841DDD4C1E2B7C6C842C843C844C845C846DDCEDDCFC847C848C849DDC4C84AC84BC84CDDBDC84DDDCDCCD1C84EDDC9C84FC850C851C852DDC2C3C8C6BCCEAEDDCCC853DDC8C854C855C856C857C858C859DDC1C85AC85BC85CDDC6C2DCC85DC85EC85FC860C861C862D3A9D3AADDD3CFF4C8F8C863C864C865C866C867C868C869C86ADDE6C86BC86CC86DC86EC86FC870DDC7C871C872C873DDE0C2E4C874C875C876C877C878C879C87AC87BDDE1C87CC87DC87EC880C881C882C883C884C885C886DDD7C887C888C889C88AC88BD6F8C88CDDD9DDD8B8F0DDD6C88DC88EC88FC890C6CFC891B6ADC892C893C894C895C896DDE2C897BAF9D4E1DDE7C898C899C89AB4D0C89BDDDAC89CBFFBDDE3C89DDDDFC89EDDDDC89FC8A0C940C941C942C943C944B5D9C945C946C947C948DDDBDDDCDDDEC949BDAFDDE4C94ADDE5C94BC94CC94DC94EC94FC950C951C952DDF5C953C3C9C954C955CBE2C956C957C958C959DDF2C95AC95BC95CC95DC95EC95FC960C961C962C963C964C965C966D8E1C967C968C6D1C969DDF4C96AC96BC96CD5F4DDF3DDF0C96DC96EDDECC96FDDEFC970DDE8C971C972D0EEC973C974C975C976C8D8DDEEC977C978DDE9C979C97ADDEACBF2C97BDDEDC97CC97DB1CDC97EC980C981C982C983C984C0B6C985BCBBDDF1C986C987DDF7C988DDF6DDEBC989C98AC98BC98CC98DC5EEC98EC98FC990DDFBC991C992C993C994C995C996C997C998C999C99AC99BDEA4C99CC99DDEA3C99EC99FC9A0CA40CA41CA42CA43CA44CA45CA46CA47CA48DDF8CA49CA4ACA4BCA4CC3EFCA4DC2FBCA4ECA4FCA50D5E1CA51CA52CEB5CA53CA54CA55CA56DDFDCA57B2CCCA58CA59CA5ACA5BCA5CCA5DCA5ECA5FCA60C4E8CADFCA61CA62CA63CA64CA65CA66CA67CA68CA69CA6AC7BEDDFADDFCDDFEDEA2B0AAB1CECA6BCA6CCA6DCA6ECA6FDEACCA70CA71CA72CA73DEA6BDB6C8EFCA74CA75CA76CA77CA78CA79CA7ACA7BCA7CCA7DCA7EDEA1CA80CA81DEA5CA82CA83CA84CA85DEA9CA86CA87CA88CA89CA8ADEA8CA8BCA8CCA8DDEA7CA8ECA8FCA90CA91CA92CA93CA94CA95CA96DEADCA97D4CCCA98CA99CA9ACA9BDEB3DEAADEAECA9CCA9DC0D9CA9ECA9FCAA0CB40CB41B1A1DEB6CB42DEB1CB43CB44CB45CB46CB47CB48CB49DEB2CB4ACB4BCB4CCB4DCB4ECB4FCB50CB51CB52CB53CB54D1A6DEB5CB55CB56CB57CB58CB59CB5ACB5BDEAFCB5CCB5DCB5EDEB0CB5FD0BDCB60CB61CB62DEB4CAEDDEB9CB63CB64CB65CB66CB67CB68DEB8CB69DEB7CB6ACB6BCB6CCB6DCB6ECB6FCB70DEBBCB71CB72CB73CB74CB75CB76CB77BDE5CB78CB79CB7ACB7BCB7CB2D8C3EACB7DCB7EDEBACB80C5BACB81CB82CB83CB84CB85CB86DEBCCB87CB88CB89CB8ACB8BCB8CCB8DCCD9CB8ECB8FCB90CB91B7AACB92CB93CB94CB95CB96CB97CB98CB99CB9ACB9BCB9CCB9DCB9ECB9FCBA0CC40CC41D4E5CC42CC43CC44DEBDCC45CC46CC47CC48CC49DEBFCC4ACC4BCC4CCC4DCC4ECC4FCC50CC51CC52CC53CC54C4A2CC55CC56CC57CC58DEC1CC59CC5ACC5BCC5CCC5DCC5ECC5FCC60CC61CC62CC63CC64CC65CC66CC67CC68DEBECC69DEC0CC6ACC6BCC6CCC6DCC6ECC6FCC70CC71CC72CC73CC74CC75CC76CC77D5BACC78CC79CC7ADEC2CC7BCC7CCC7DCC7ECC80CC81CC82CC83CC84CC85CC86CC87CC88CC89CC8ACC8BF2AEBBA2C2B2C5B0C2C7CC8CCC8DF2AFCC8ECC8FCC90CC91CC92D0E9CC93CC94CC95D3DDCC96CC97CC98EBBDCC99CC9ACC9BCC9CCC9DCC9ECC9FCCA0B3E6F2B0CD40F2B1CD41CD42CAADCD43CD44CD45CD46CD47CD48CD49BAE7F2B3F2B5F2B4CBE4CFBAF2B2CAB4D2CFC2ECCD4ACD4BCD4CCD4DCD4ECD4FCD50CEC3F2B8B0F6F2B7CD51CD52CD53CD54CD55F2BECD56B2CFCD57CD58CD59CD5ACD5BCD5CD1C1F2BACD5DCD5ECD5FCD60CD61F2BCD4E9CD62CD63F2BBF2B6F2BFF2BDCD64F2B9CD65CD66F2C7F2C4F2C6CD67CD68F2CAF2C2F2C0CD69CD6ACD6BF2C5CD6CCD6DCD6ECD6FCD70D6FBCD71CD72CD73F2C1CD74C7F9C9DFCD75F2C8B9C6B5B0CD76CD77F2C3F2C9F2D0F2D6CD78CD79BBD7CD7ACD7BCD7CF2D5CDDCCD7DD6EBCD7ECD80F2D2F2D4CD81CD82CD83CD84B8F2CD85CD86CD87CD88F2CBCD89CD8ACD8BF2CEC2F9CD8CD5DDF2CCF2CDF2CFF2D3CD8DCD8ECD8FF2D9D3BCCD90CD91CD92CD93B6EACD94CAF1CD95B7E4F2D7CD96CD97CD98F2D8F2DAF2DDF2DBCD99CD9AF2DCCD9BCD9CCD9DCD9ED1D1F2D1CD9FCDC9CDA0CECFD6A9CE40F2E3CE41C3DBCE42F2E0CE43CE44C0AFF2ECF2DECE45F2E1CE46CE47CE48F2E8CE49CE4ACE4BCE4CF2E2CE4DCE4EF2E7CE4FCE50F2E6CE51CE52F2E9CE53CE54CE55F2DFCE56CE57F2E4F2EACE58CE59CE5ACE5BCE5CCE5DCE5ED3ACF2E5B2F5CE5FCE60F2F2CE61D0ABCE62CE63CE64CE65F2F5CE66CE67CE68BBC8CE69F2F9CE6ACE6BCE6CCE6DCE6ECE6FF2F0CE70CE71F2F6F2F8F2FACE72CE73CE74CE75CE76CE77CE78CE79F2F3CE7AF2F1CE7BCE7CCE7DBAFBCE7EB5FBCE80CE81CE82CE83F2EFF2F7F2EDF2EECE84CE85CE86F2EBF3A6CE87F3A3CE88CE89F3A2CE8ACE8BF2F4CE8CC8DACE8DCE8ECE8FCE90CE91F2FBCE92CE93CE94F3A5CE95CE96CE97CE98CE99CE9ACE9BC3F8CE9CCE9DCE9ECE9FCEA0CF40CF41CF42F2FDCF43CF44F3A7F3A9F3A4CF45F2FCCF46CF47CF48F3ABCF49F3AACF4ACF4BCF4CCF4DC2DDCF4ECF4FF3AECF50CF51F3B0CF52CF53CF54CF55CF56F3A1CF57CF58CF59F3B1F3ACCF5ACF5BCF5CCF5DCF5EF3AFF2FEF3ADCF5FCF60CF61CF62CF63CF64CF65F3B2CF66CF67CF68CF69F3B4CF6ACF6BCF6CCF6DF3A8CF6ECF6FCF70CF71F3B3CF72CF73CF74F3B5CF75CF76CF77CF78CF79CF7ACF7BCF7CCF7DCF7ED0B7CF80CF81CF82CF83F3B8CF84CF85CF86CF87D9F9CF88CF89CF8ACF8BCF8CCF8DF3B9CF8ECF8FCF90CF91CF92CF93CF94CF95F3B7CF96C8E4F3B6CF97CF98CF99CF9AF3BACF9BCF9CCF9DCF9ECF9FF3BBB4C0CFA0D040D041D042D043D044D045D046D047D048D049D04AD04BD04CD04DEEC3D04ED04FD050D051D052D053F3BCD054D055F3BDD056D057D058D1AAD059D05AD05BF4ACD0C6D05CD05DD05ED05FD060D061D0D0D1DCD062D063D064D065D066D067CFCED068D069BDD6D06AD1C3D06BD06CD06DD06ED06FD070D071BAE2E1E9D2C2F1C2B2B9D072D073B1EDF1C3D074C9C0B3C4D075D9F2D076CBA5D077F1C4D078D079D07AD07BD6D4D07CD07DD07ED080D081F1C5F4C0F1C6D082D4ACF1C7D083B0C0F4C1D084D085F4C2D086D087B4FCD088C5DBD089D08AD08BD08CCCBBD08DD08ED08FD0E4D090D091D092D093D094CDE0D095D096D097D098D099F1C8D09AD9F3D09BD09CD09DD09ED09FD0A0B1BBD140CFAED141D142D143B8A4D144D145D146D147D148F1CAD149D14AD14BD14CF1CBD14DD14ED14FD150B2C3C1D1D151D152D7B0F1C9D153D154F1CCD155D156D157D158F1CED159D15AD15BD9F6D15CD2E1D4A3D15DD15EF4C3C8B9D15FD160D161D162D163F4C4D164D165F1CDF1CFBFE3F1D0D166D167F1D4D168D169D16AD16BD16CD16DD16EF1D6F1D1D16FC9D1C5E1D170D171D172C2E3B9FCD173D174F1D3D175F1D5D176D177D178B9D3D179D17AD17BD17CD17DD17ED180F1DBD181D182D183D184D185BAD6D186B0FDF1D9D187D188D189D18AD18BF1D8F1D2F1DAD18CD18DD18ED18FD190F1D7D191D192D193C8ECD194D195D196D197CDCAF1DDD198D199D19AD19BE5BDD19CD19DD19EF1DCD19FF1DED1A0D240D241D242D243D244D245D246D247D248F1DFD249D24ACFE5D24BD24CD24DD24ED24FD250D251D252D253D254D255D256D257D258D259D25AD25BD25CD25DD25ED25FD260D261D262D263F4C5BDF3D264D265D266D267D268D269F1E0D26AD26BD26CD26DD26ED26FD270D271D272D273D274D275D276D277D278D279D27AD27BD27CD27DF1E1D27ED280D281CEF7D282D2AAD283F1FBD284D285B8B2D286D287D288D289D28AD28BD28CD28DD28ED28FD290D291D292D293D294D295D296D297D298D299D29AD29BD29CD29DD29ED29FD2A0D340D341D342D343D344D345D346D347D348D349D34AD34BD34CD34DD34ED34FD350D351D352D353D354D355D356D357D358D359D35AD35BD35CD35DD35EBCFBB9DBD35FB9E6C3D9CAD3EAE8C0C0BEF5EAE9EAEAEAEBD360EAECEAEDEAEEEAEFBDC7D361D362D363F5FBD364D365D366F5FDD367F5FED368F5FCD369D36AD36BD36CBDE2D36DF6A1B4A5D36ED36FD370D371F6A2D372D373D374F6A3D375D376D377ECB2D378D379D37AD37BD37CD37DD37ED380D381D382D383D384D1D4D385D386D387D388D389D38AD9EAD38BD38CD38DD38ED38FD390D391D392D393D394D395D396D397D398D399D39AD39BD39CD39DD39ED39FD3A0D440D441D442D443D444D445D446D447D448D449D44AD44BD44CD44DD44ED44FD450D451D452D453D454D455D456D457D458D459D45AD45BD45CD45DD45ED45FF6A4D460D461D462D463D464D465D466D467D468EEBAD469D46AD46BD46CD46DD46ED46FD470D471D472D473D474D475D476D477D478D479D47AD47BD47CD47DD47ED480D481D482D483D484D485D486D487D488D489D48AD48BD48CD48DD48ED48FD490D491D492D493D494D495D496D497D498D499D5B2D49AD49BD49CD49DD49ED49FD4A0D540D541D542D543D544D545D546D547D3FECCDCD548D549D54AD54BD54CD54DD54ED54FCAC4D550D551D552D553D554D555D556D557D558D559D55AD55BD55CD55DD55ED55FD560D561D562D563D564D565D566D567D568D569D56AD56BD56CD56DD56ED56FD570D571D572D573D574D575D576D577D578D579D57AD57BD57CD57DD57ED580D581D582D583D584D585D586D587D588D589D58AD58BD58CD58DD58ED58FD590D591D592D593D594D595D596D597D598D599D59AD59BD59CD59DD59ED59FD5A0D640D641D642D643D644D645D646D647D648D649D64AD64BD64CD64DD64ED64FD650D651D652D653D654D655D656D657D658D659D65AD65BD65CD65DD65ED65FD660D661D662E5C0D663D664D665D666D667D668D669D66AD66BD66CD66DD66ED66FD670D671D672D673D674D675D676D677D678D679D67AD67BD67CD67DD67ED680D681F6A5D682D683D684D685D686D687D688D689D68AD68BD68CD68DD68ED68FD690D691D692D693D694D695D696D697D698D699D69AD69BD69CD69DD69ED69FD6A0D740D741D742D743D744D745D746D747D748D749D74AD74BD74CD74DD74ED74FD750D751D752D753D754D755D756D757D758D759D75AD75BD75CD75DD75ED75FBEAFD760D761D762D763D764C6A9D765D766D767D768D769D76AD76BD76CD76DD76ED76FD770D771D772D773D774D775D776D777D778D779D77AD77BD77CD77DD77ED780D781D782D783D784D785D786D787D788D789D78AD78BD78CD78DD78ED78FD790D791D792D793D794D795D796D797D798DAA5BCC6B6A9B8BCC8CFBCA5DAA6DAA7CCD6C8C3DAA8C6FDD799D1B5D2E9D1B6BCC7D79ABDB2BBE4DAA9DAAAD1C8DAABD0EDB6EFC2DBD79BCBCFB7EDC9E8B7C3BEF7D6A4DAACDAADC6C0D7E7CAB6D79CD5A9CBDFD5EFDAAED6DFB4CADAB0DAAFD79DD2EBDAB1DAB2DAB3CAD4DAB4CAABDAB5DAB6B3CFD6EFDAB7BBB0B5AEDAB8DAB9B9EED1AFD2E8DABAB8C3CFEAB2EFDABBDABCD79EBDEBCEDCD3EFDABDCEF3DABED3D5BBE5DABFCBB5CBD0DAC0C7EBD6EEDAC1C5B5B6C1DAC2B7CCBFCEDAC3DAC4CBADDAC5B5F7DAC6C1C2D7BBDAC7CCB8D79FD2EAC4B1DAC8B5FDBBD1DAC9D0B3DACADACBCEBDDACCDACDDACEB2F7DAD1DACFD1E8DAD0C3D5DAD2D7A0DAD3DAD4DAD5D0BBD2A5B0F9DAD6C7ABDAD7BDF7C3A1DAD8DAD9C3FDCCB7DADADADBC0BEC6D7DADCDADDC7B4DADEDADFB9C8D840D841D842D843D844D845D846D847D848BBEDD849D84AD84BD84CB6B9F4F8D84DF4F9D84ED84FCDE3D850D851D852D853D854D855D856D857F5B9D858D859D85AD85BEBE0D85CD85DD85ED85FD860D861CFF3BBBFD862D863D864D865D866D867D868BAC0D4A5D869D86AD86BD86CD86DD86ED86FE1D9D870D871D872D873F5F4B1AAB2F2D874D875D876D877D878D879D87AF5F5D87BD87CF5F7D87DD87ED880BAD1F5F6D881C3B2D882D883D884D885D886D887D888F5F9D889D88AD88BF5F8D88CD88DD88ED88FD890D891D892D893D894D895D896D897D898D899D89AD89BD89CD89DD89ED89FD8A0D940D941D942D943D944D945D946D947D948D949D94AD94BD94CD94DD94ED94FD950D951D952D953D954D955D956D957D958D959D95AD95BD95CD95DD95ED95FD960D961D962D963D964D965D966D967D968D969D96AD96BD96CD96DD96ED96FD970D971D972D973D974D975D976D977D978D979D97AD97BD97CD97DD97ED980D981D982D983D984D985D986D987D988D989D98AD98BD98CD98DD98ED98FD990D991D992D993D994D995D996D997D998D999D99AD99BD99CD99DD99ED99FD9A0DA40DA41DA42DA43DA44DA45DA46DA47DA48DA49DA4ADA4BDA4CDA4DDA4EB1B4D5EAB8BADA4FB9B1B2C6D4F0CFCDB0DCD5CBBBF5D6CAB7B7CCB0C6B6B1E1B9BAD6FCB9E1B7A1BCFAEADAEADBCCF9B9F3EADCB4FBC3B3B7D1BAD8EADDD4F4EADEBCD6BBDFEADFC1DEC2B8D4DFD7CAEAE0EAE1EAE4EAE2EAE3C9DEB8B3B6C4EAE5CAEAC9CDB4CDDA50DA51E2D9C5E2EAE6C0B5DA52D7B8EAE7D7ACC8FCD8D3D8CDD4DEDA53D4F9C9C4D3AEB8D3B3E0DA54C9E2F4F6DA55DA56DA57BAD5DA58F4F7DA59DA5AD7DFDA5BDA5CF4F1B8B0D5D4B8CFC6F0DA5DDA5EDA5FDA60DA61DA62DA63DA64DA65B3C3DA66DA67F4F2B3ACDA68DA69DA6ADA6BD4BDC7F7DA6CDA6DDA6EDA6FDA70F4F4DA71DA72F4F3DA73DA74DA75DA76DA77DA78DA79DA7ADA7BDA7CCCCBDA7DDA7EDA80C8A4DA81DA82DA83DA84DA85DA86DA87DA88DA89DA8ADA8BDA8CDA8DF4F5DA8ED7E3C5BFF5C0DA8FDA90F5BBDA91F5C3DA92F5C2DA93D6BAF5C1DA94DA95DA96D4BEF5C4DA97F5CCDA98DA99DA9ADA9BB0CFB5F8DA9CF5C9F5CADA9DC5DCDA9EDA9FDAA0DB40F5C5F5C6DB41DB42F5C7F5CBDB43BEE0F5C8B8FADB44DB45DB46F5D0F5D3DB47DB48DB49BFE7DB4AB9F2F5BCF5CDDB4BDB4CC2B7DB4DDB4EDB4FCCF8DB50BCF9DB51F5CEF5CFF5D1B6E5F5D2DB52F5D5DB53DB54DB55DB56DB57DB58DB59F5BDDB5ADB5BDB5CF5D4D3BBDB5DB3ECDB5EDB5FCCA4DB60DB61DB62DB63F5D6DB64DB65DB66DB67DB68DB69DB6ADB6BF5D7BEE1F5D8DB6CDB6DCCDFF5DBDB6EDB6FDB70DB71DB72B2C8D7D9DB73F5D9DB74F5DAF5DCDB75F5E2DB76DB77DB78F5E0DB79DB7ADB7BF5DFF5DDDB7CDB7DF5E1DB7EDB80F5DEF5E4F5E5DB81CCE3DB82DB83E5BFB5B8F5E3F5E8CCA3DB84DB85DB86DB87DB88F5E6F5E7DB89DB8ADB8BDB8CDB8DDB8EF5BEDB8FDB90DB91DB92DB93DB94DB95DB96DB97DB98DB99DB9AB1C4DB9BDB9CF5BFDB9DDB9EB5C5B2E4DB9FF5ECF5E9DBA0B6D7DC40F5EDDC41F5EADC42DC43DC44DC45DC46F5EBDC47DC48B4DADC49D4EADC4ADC4BDC4CF5EEDC4DB3F9DC4EDC4FDC50DC51DC52DC53DC54F5EFF5F1DC55DC56DC57F5F0DC58DC59DC5ADC5BDC5CDC5DDC5EF5F2DC5FF5F3DC60DC61DC62DC63DC64DC65DC66DC67DC68DC69DC6ADC6BC9EDB9AADC6CDC6DC7FBDC6EDC6FB6E3DC70DC71DC72DC73DC74DC75DC76CCC9DC77DC78DC79DC7ADC7BDC7CDC7DDC7EDC80DC81DC82DC83DC84DC85DC86DC87DC88DC89DC8AEAA6DC8BDC8CDC8DDC8EDC8FDC90DC91DC92DC93DC94DC95DC96DC97DC98DC99DC9ADC9BDC9CDC9DDC9EDC9FDCA0DD40DD41DD42DD43DD44DD45DD46DD47DD48DD49DD4ADD4BDD4CDD4DDD4EDD4FDD50DD51DD52DD53DD54DD55DD56DD57DD58DD59DD5ADD5BDD5CDD5DDD5EDD5FDD60DD61DD62DD63DD64DD65DD66DD67DD68DD69DD6ADD6BDD6CDD6DDD6EDD6FDD70DD71DD72DD73DD74DD75DD76DD77DD78DD79DD7ADD7BDD7CDD7DDD7EDD80DD81DD82DD83DD84DD85DD86DD87DD88DD89DD8ADD8BDD8CDD8DDD8EDD8FDD90DD91DD92DD93DD94DD95DD96DD97DD98DD99DD9ADD9BDD9CDD9DDD9EDD9FDDA0DE40DE41DE42DE43DE44DE45DE46DE47DE48DE49DE4ADE4BDE4CDE4DDE4EDE4FDE50DE51DE52DE53DE54DE55DE56DE57DE58DE59DE5ADE5BDE5CDE5DDE5EDE5FDE60B3B5D4FEB9ECD0F9DE61E9EDD7AAE9EEC2D6C8EDBAE4E9EFE9F0E9F1D6E1E9F2E9F3E9F5E9F4E9F6E9F7C7E1E9F8D4D8E9F9BDCEDE62E9FAE9FBBDCFE9FCB8A8C1BEE9FDB1B2BBD4B9F5E9FEDE63EAA1EAA2EAA3B7F8BCADDE64CAE4E0CED4AFCFBDD5B7EAA4D5DEEAA5D0C1B9BCDE65B4C7B1D9DE66DE67DE68C0B1DE69DE6ADE6BDE6CB1E6B1E7DE6DB1E8DE6EDE6FDE70DE71B3BDC8E8DE72DE73DE74DE75E5C1DE76DE77B1DFDE78DE79DE7AC1C9B4EFDE7BDE7CC7A8D3D8DE7DC6F9D1B8DE7EB9FDC2F5DE80DE81DE82DE83DE84D3ADDE85D4CBBDFCDE86E5C2B7B5E5C3DE87DE88BBB9D5E2DE89BDF8D4B6CEA5C1ACB3D9DE8ADE8BCCF6DE8CE5C6E5C4E5C8DE8DE5CAE5C7B5CFC6C8DE8EB5FCE5C5DE8FCAF6DE90DE91E5C9DE92DE93DE94C3D4B1C5BCA3DE95DE96DE97D7B7DE98DE99CDCBCBCDCACACCD3E5CCE5CBC4E6DE9ADE9BD1A1D1B7E5CDDE9CE5D0DE9DCDB8D6F0E5CFB5DDDE9ECDBEDE9FE5D1B6BADEA0DF40CDA8B9E4DF41CAC5B3D1CBD9D4ECE5D2B7EADF42DF43DF44E5CEDF45DF46DF47DF48DF49DF4AE5D5B4FEE5D6DF4BDF4CDF4DDF4EDF4FE5D3E5D4DF50D2DDDF51DF52C2DFB1C6DF53D3E2DF54DF55B6DDCBECDF56E5D7DF57DF58D3F6DF59DF5ADF5BDF5CDF5DB1E9DF5EB6F4E5DAE5D8E5D9B5C0DF5FDF60DF61D2C5E5DCDF62DF63E5DEDF64DF65DF66DF67DF68DF69E5DDC7B2DF6AD2A3DF6BDF6CE5DBDF6DDF6EDF6FDF70D4E2D5DADF71DF72DF73DF74DF75E5E0D7F1DF76DF77DF78DF79DF7ADF7BDF7CE5E1DF7DB1DCD1FBDF7EE5E2E5E4DF80DF81DF82DF83E5E3DF84DF85E5E5DF86DF87DF88DF89DF8AD2D8DF8BB5CBDF8CE7DFDF8DDAF5DF8EDAF8DF8FDAF6DF90DAF7DF91DF92DF93DAFAD0CFC4C7DF94DF95B0EEDF96DF97DF98D0B0DF99DAF9DF9AD3CABAAADBA2C7F1DF9BDAFCDAFBC9DBDAFDDF9CDBA1D7DEDAFEC1DADF9DDF9EDBA5DF9FDFA0D3F4E040E041DBA7DBA4E042DBA8E043E044BDBCE045E046E047C0C9DBA3DBA6D6A3E048DBA9E049E04AE04BDBADE04CE04DE04EDBAEDBACBAC2E04FE050E051BFA4DBABE052E053E054DBAAD4C7B2BFE055E056DBAFE057B9F9E058DBB0E059E05AE05BE05CB3BBE05DE05EE05FB5A6E060E061E062E063B6BCDBB1E064E065E066B6F5E067DBB2E068E069E06AE06BE06CE06DE06EE06FE070E071E072E073E074E075E076E077E078E079E07AE07BB1C9E07CE07DE07EE080DBB4E081E082E083DBB3DBB5E084E085E086E087E088E089E08AE08BE08CE08DE08EDBB7E08FDBB6E090E091E092E093E094E095E096DBB8E097E098E099E09AE09BE09CE09DE09EE09FDBB9E0A0E140DBBAE141E142D3CFF4FAC7F5D7C3C5E4F4FCF4FDF4FBE143BEC6E144E145E146E147D0EFE148E149B7D3E14AE14BD4CDCCAAE14CE14DF5A2F5A1BAA8F4FECBD6E14EE14FE150F5A4C0D2E151B3EAE152CDAAF5A5F5A3BDB4F5A8E153F5A9BDCDC3B8BFE1CBE1F5AAE154E155E156F5A6F5A7C4F0E157E158E159E15AE15BF5ACE15CB4BCE15DD7EDE15EB4D7F5ABF5AEE15FE160F5ADF5AFD0D1E161E162E163E164E165E166E167C3D1C8A9E168E169E16AE16BE16CE16DF5B0F5B1E16EE16FE170E171E172E173F5B2E174E175F5B3F5B4F5B5E176E177E178E179F5B7F5B6E17AE17BE17CE17DF5B8E17EE180E181E182E183E184E185E186E187E188E189E18AB2C9E18BD3D4CACDE18CC0EFD6D8D2B0C1BFE18DBDF0E18EE18FE190E191E192E193E194E195E196E197B8AAE198E199E19AE19BE19CE19DE19EE19FE1A0E240E241E242E243E244E245E246E247E248E249E24AE24BE24CE24DE24EE24FE250E251E252E253E254E255E256E257E258E259E25AE25BE25CE25DE25EE25FE260E261E262E263E264E265E266E267E268E269E26AE26BE26CE26DE26EE26FE270E271E272E273E274E275E276E277E278E279E27AE27BE27CE27DE27EE280E281E282E283E284E285E286E287E288E289E28AE28BE28CE28DE28EE28FE290E291E292E293E294E295E296E297E298E299E29AE29BE29CE29DE29EE29FE2A0E340E341E342E343E344E345E346E347E348E349E34AE34BE34CE34DE34EE34FE350E351E352E353E354E355E356E357E358E359E35AE35BE35CE35DE35EE35FE360E361E362E363E364E365E366E367E368E369E36AE36BE36CE36DBCF8E36EE36FE370E371E372E373E374E375E376E377E378E379E37AE37BE37CE37DE37EE380E381E382E383E384E385E386E387F6C6E388E389E38AE38BE38CE38DE38EE38FE390E391E392E393E394E395E396E397E398E399E39AE39BE39CE39DE39EE39FE3A0E440E441E442E443E444E445F6C7E446E447E448E449E44AE44BE44CE44DE44EE44FE450E451E452E453E454E455E456E457E458E459E45AE45BE45CE45DE45EF6C8E45FE460E461E462E463E464E465E466E467E468E469E46AE46BE46CE46DE46EE46FE470E471E472E473E474E475E476E477E478E479E47AE47BE47CE47DE47EE480E481E482E483E484E485E486E487E488E489E48AE48BE48CE48DE48EE48FE490E491E492E493E494E495E496E497E498E499E49AE49BE49CE49DE49EE49FE4A0E540E541E542E543E544E545E546E547E548E549E54AE54BE54CE54DE54EE54FE550E551E552E553E554E555E556E557E558E559E55AE55BE55CE55DE55EE55FE560E561E562E563E564E565E566E567E568E569E56AE56BE56CE56DE56EE56FE570E571E572E573F6C9E574E575E576E577E578E579E57AE57BE57CE57DE57EE580E581E582E583E584E585E586E587E588E589E58AE58BE58CE58DE58EE58FE590E591E592E593E594E595E596E597E598E599E59AE59BE59CE59DE59EE59FF6CAE5A0E640E641E642E643E644E645E646E647E648E649E64AE64BE64CE64DE64EE64FE650E651E652E653E654E655E656E657E658E659E65AE65BE65CE65DE65EE65FE660E661E662F6CCE663E664E665E666E667E668E669E66AE66BE66CE66DE66EE66FE670E671E672E673E674E675E676E677E678E679E67AE67BE67CE67DE67EE680E681E682E683E684E685E686E687E688E689E68AE68BE68CE68DE68EE68FE690E691E692E693E694E695E696E697E698E699E69AE69BE69CE69DF6CBE69EE69FE6A0E740E741E742E743E744E745E746E747F7E9E748E749E74AE74BE74CE74DE74EE74FE750E751E752E753E754E755E756E757E758E759E75AE75BE75CE75DE75EE75FE760E761E762E763E764E765E766E767E768E769E76AE76BE76CE76DE76EE76FE770E771E772E773E774E775E776E777E778E779E77AE77BE77CE77DE77EE780E781E782E783E784E785E786E787E788E789E78AE78BE78CE78DE78EE78FE790E791E792E793E794E795E796E797E798E799E79AE79BE79CE79DE79EE79FE7A0E840E841E842E843E844E845E846E847E848E849E84AE84BE84CE84DE84EF6CDE84FE850E851E852E853E854E855E856E857E858E859E85AE85BE85CE85DE85EE85FE860E861E862E863E864E865E866E867E868E869E86AE86BE86CE86DE86EE86FE870E871E872E873E874E875E876E877E878E879E87AF6CEE87BE87CE87DE87EE880E881E882E883E884E885E886E887E888E889E88AE88BE88CE88DE88EE88FE890E891E892E893E894EEC4EEC5EEC6D5EBB6A4EEC8EEC7EEC9EECAC7A5EECBEECCE895B7B0B5F6EECDEECFE896EECEE897B8C6EED0EED1EED2B6DBB3AED6D3C4C6B1B5B8D6EED3EED4D4BFC7D5BEFBCED9B9B3EED6EED5EED8EED7C5A5EED9EEDAC7AEEEDBC7AFEEDCB2A7EEDDEEDEEEDFEEE0EEE1D7EAEEE2EEE3BCD8EEE4D3CBCCFAB2ACC1E5EEE5C7A6C3ADE898EEE6EEE7EEE8EEE9EEEAEEEBEEECE899EEEDEEEEEEEFE89AE89BEEF0EEF1EEF2EEF4EEF3E89CEEF5CDADC2C1EEF6EEF7EEF8D5A1EEF9CFB3EEFAEEFBE89DEEFCEEFDEFA1EEFEEFA2B8F5C3FAEFA3EFA4BDC2D2BFB2F9EFA5EFA6EFA7D2F8EFA8D6FDEFA9C6CCE89EEFAAEFABC1B4EFACCFFACBF8EFAEEFADB3FAB9F8EFAFEFB0D0E2EFB1EFB2B7E6D0BFEFB3EFB4EFB5C8F1CCE0EFB6EFB7EFB8EFB9EFBAD5E0EFBBB4EDC3AAEFBCE89FEFBDEFBEEFBFE8A0CEFDEFC0C2E0B4B8D7B6BDF5E940CFC7EFC3EFC1EFC2EFC4B6A7BCFCBEE2C3CCEFC5EFC6E941EFC7EFCFEFC8EFC9EFCAC7C2EFF1B6CDEFCBE942EFCCEFCDB6C6C3BEEFCEE943EFD0EFD1EFD2D5F2E944EFD3C4F7E945EFD4C4F8EFD5EFD6B8E4B0F7EFD7EFD8EFD9E946EFDAEFDBEFDCEFDDE947EFDEBEB5EFE1EFDFEFE0E948EFE2EFE3C1CDEFE4EFE5EFE6EFE7EFE8EFE9EFEAEFEBEFECC0D8E949EFEDC1ADEFEEEFEFEFF0E94AE94BCFE2E94CE94DE94EE94FE950E951E952E953B3A4E954E955E956E957E958E959E95AE95BE95CE95DE95EE95FE960E961E962E963E964E965E966E967E968E969E96AE96BE96CE96DE96EE96FE970E971E972E973E974E975E976E977E978E979E97AE97BE97CE97DE97EE980E981E982E983E984E985E986E987E988E989E98AE98BE98CE98DE98EE98FE990E991E992E993E994E995E996E997E998E999E99AE99BE99CE99DE99EE99FE9A0EA40EA41EA42EA43EA44EA45EA46EA47EA48EA49EA4AEA4BEA4CEA4DEA4EEA4FEA50EA51EA52EA53EA54EA55EA56EA57EA58EA59EA5AEA5BC3C5E3C5C9C1E3C6EA5CB1D5CECAB4B3C8F2E3C7CFD0E3C8BCE4E3C9E3CAC3C6D5A2C4D6B9EBCEC5E3CBC3F6E3CCEA5DB7A7B8F3BAD2E3CDE3CED4C4E3CFEA5EE3D0D1CBE3D1E3D2E3D3E3D4D1D6E3D5B2FBC0BBE3D6EA5FC0ABE3D7E3D8E3D9EA60E3DAE3DBEA61B8B7DAE2EA62B6D3EA63DAE4DAE3EA64EA65EA66EA67EA68EA69EA6ADAE6EA6BEA6CEA6DC8EEEA6EEA6FDAE5B7C0D1F4D2F5D5F3BDD7EA70EA71EA72EA73D7E8DAE8DAE7EA74B0A2CDD3EA75DAE9EA76B8BDBCCAC2BDC2A4B3C2DAEAEA77C2AAC4B0BDB5EA78EA79CFDEEA7AEA7BEA7CDAEBC9C2EA7DEA7EEA80EA81EA82B1DDEA83EA84EA85DAECEA86B6B8D4BAEA87B3FDEA88EA89DAEDD4C9CFD5C5E3EA8ADAEEEA8BEA8CEA8DEA8EEA8FDAEFEA90DAF0C1EACCD5CFDDEA91EA92EA93EA94EA95EA96EA97EA98EA99EA9AEA9BEA9CEA9DD3E7C2A1EA9EDAF1EA9FEAA0CBE5EB40DAF2EB41CBE6D2FEEB42EB43EB44B8F4EB45EB46DAF3B0AFCFB6EB47EB48D5CFEB49EB4AEB4BEB4CEB4DEB4EEB4FEB50EB51EB52CBEDEB53EB54EB55EB56EB57EB58EB59EB5ADAF4EB5BEB5CE3C4EB5DEB5EC1A5EB5FEB60F6BFEB61EB62F6C0F6C1C4D1EB63C8B8D1E3EB64EB65D0DBD1C5BCAFB9CDEB66EFF4EB67EB68B4C6D3BAF6C2B3FBEB69EB6AF6C3EB6BEB6CB5F1EB6DEB6EEB6FEB70EB71EB72EB73EB74EB75EB76F6C5EB77EB78EB79EB7AEB7BEB7CEB7DD3EAF6A7D1A9EB7EEB80EB81EB82F6A9EB83EB84EB85F6A8EB86EB87C1E3C0D7EB88B1A2EB89EB8AEB8BEB8CCEEDEB8DD0E8F6ABEB8EEB8FCFF6EB90F6AAD5F0F6ACC3B9EB91EB92EB93BBF4F6AEF6ADEB94EB95EB96C4DEEB97EB98C1D8EB99EB9AEB9BEB9CEB9DCBAAEB9ECFBCEB9FEBA0EC40EC41EC42EC43EC44EC45EC46EC47EC48F6AFEC49EC4AF6B0EC4BEC4CF6B1EC4DC2B6EC4EEC4FEC50EC51EC52B0D4C5F9EC53EC54EC55EC56F6B2EC57EC58EC59EC5AEC5BEC5CEC5DEC5EEC5FEC60EC61EC62EC63EC64EC65EC66EC67EC68EC69C7E0F6A6EC6AEC6BBEB8EC6CEC6DBEB2EC6EB5E5EC6FEC70B7C7EC71BFBFC3D2C3E6EC72EC73D8CCEC74EC75EC76B8EFEC77EC78EC79EC7AEC7BEC7CEC7DEC7EEC80BDF9D1A5EC81B0D0EC82EC83EC84EC85EC86F7B0EC87EC88EC89EC8AEC8BEC8CEC8DEC8EF7B1EC8FEC90EC91EC92EC93D0ACEC94B0B0EC95EC96EC97F7B2F7B3EC98F7B4EC99EC9AEC9BC7CAEC9CEC9DEC9EEC9FECA0ED40ED41BECFED42ED43F7B7ED44ED45ED46ED47ED48ED49ED4AF7B6ED4BB1DEED4CF7B5ED4DED4EF7B8ED4FF7B9ED50ED51ED52ED53ED54ED55ED56ED57ED58ED59ED5AED5BED5CED5DED5EED5FED60ED61ED62ED63ED64ED65ED66ED67ED68ED69ED6AED6BED6CED6DED6EED6FED70ED71ED72ED73ED74ED75ED76ED77ED78ED79ED7AED7BED7CED7DED7EED80ED81CEA4C8CDED82BAABE8B8E8B9E8BABEC2ED83ED84ED85ED86ED87D2F4ED88D4CFC9D8ED89ED8AED8BED8CED8DED8EED8FED90ED91ED92ED93ED94ED95ED96ED97ED98ED99ED9AED9BED9CED9DED9EED9FEDA0EE40EE41EE42EE43EE44EE45EE46EE47EE48EE49EE4AEE4BEE4CEE4DEE4EEE4FEE50EE51EE52EE53EE54EE55EE56EE57EE58EE59EE5AEE5BEE5CEE5DEE5EEE5FEE60EE61EE62EE63EE64EE65EE66EE67EE68EE69EE6AEE6BEE6CEE6DEE6EEE6FEE70EE71EE72EE73EE74EE75EE76EE77EE78EE79EE7AEE7BEE7CEE7DEE7EEE80EE81EE82EE83EE84EE85EE86EE87EE88EE89EE8AEE8BEE8CEE8DEE8EEE8FEE90EE91EE92EE93EE94EE95EE96EE97EE98EE99EE9AEE9BEE9CEE9DEE9EEE9FEEA0EF40EF41EF42EF43EF44EF45D2B3B6A5C7EAF1FCCFEECBB3D0EBE7EFCDE7B9CBB6D9F1FDB0E4CBCCF1FED4A4C2ADC1ECC6C4BEB1F2A1BCD5EF46F2A2F2A3EF47F2A4D2C3C6B5EF48CDC7F2A5EF49D3B1BFC5CCE2EF4AF2A6F2A7D1D5B6EEF2A8F2A9B5DFF2AAF2ABEF4BB2FCF2ACF2ADC8A7EF4CEF4DEF4EEF4FEF50EF51EF52EF53EF54EF55EF56EF57EF58EF59EF5AEF5BEF5CEF5DEF5EEF5FEF60EF61EF62EF63EF64EF65EF66EF67EF68EF69EF6AEF6BEF6CEF6DEF6EEF6FEF70EF71B7E7EF72EF73ECA9ECAAECABEF74ECACEF75EF76C6AEECADECAEEF77EF78EF79B7C9CAB3EF7AEF7BEF7CEF7DEF7EEF80EF81E2B8F7CFEF82EF83EF84EF85EF86EF87EF88EF89EF8AEF8BEF8CEF8DEF8EEF8FEF90EF91EF92EF93EF94EF95EF96EF97EF98EF99EF9AEF9BEF9CEF9DEF9EEF9FEFA0F040F041F042F043F044F7D0F045F046B2CDF047F048F049F04AF04BF04CF04DF04EF04FF050F051F052F053F054F055F056F057F058F059F05AF05BF05CF05DF05EF05FF060F061F062F063F7D1F064F065F066F067F068F069F06AF06BF06CF06DF06EF06FF070F071F072F073F074F075F076F077F078F079F07AF07BF07CF07DF07EF080F081F082F083F084F085F086F087F088F089F7D3F7D2F08AF08BF08CF08DF08EF08FF090F091F092F093F094F095F096E2BBF097BCA2F098E2BCE2BDE2BEE2BFE2C0E2C1B7B9D2FBBDA4CACEB1A5CBC7F099E2C2B6FCC8C4E2C3F09AF09BBDC8F09CB1FDE2C4F09DB6F6E2C5C4D9F09EF09FE2C6CFDAB9DDE2C7C0A1F0A0E2C8B2F6F140E2C9F141C1F3E2CAE2CBC2F8E2CCE2CDE2CECAD7D8B8D9E5CFE3F142F143F144F145F146F147F148F149F14AF14BF14CF0A5F14DF14EDCB0F14FF150F151F152F153F154F155F156F157F158F159F15AF15BF15CF15DF15EF15FF160F161F162F163F164F165F166F167F168F169F16AF16BF16CF16DF16EF16FF170F171F172F173F174F175F176F177F178F179F17AF17BF17CF17DF17EF180F181F182F183F184F185F186F187F188F189F18AF18BF18CF18DF18EF18FF190F191F192F193F194F195F196F197F198F199F19AF19BF19CF19DF19EF19FF1A0F240F241F242F243F244F245F246F247F248F249F24AF24BF24CF24DF24EF24FF250F251F252F253F254F255F256F257F258F259F25AF25BF25CF25DF25EF25FF260F261F262F263F264F265F266F267F268F269F26AF26BF26CF26DF26EF26FF270F271F272F273F274F275F276F277F278F279F27AF27BF27CF27DF27EF280F281F282F283F284F285F286F287F288F289F28AF28BF28CF28DF28EF28FF290F291F292F293F294F295F296F297F298F299F29AF29BF29CF29DF29EF29FF2A0F340F341F342F343F344F345F346F347F348F349F34AF34BF34CF34DF34EF34FF350F351C2EDD4A6CDD4D1B1B3DBC7FDF352B2B5C2BFE6E0CABBE6E1E6E2BED4E6E3D7A4CDD5E6E5BCDDE6E4E6E6E6E7C2EEF353BDBEE6E8C2E6BAA7E6E9F354E6EAB3D2D1E9F355F356BFA5E6EBC6EFE6ECE6EDF357F358E6EEC6ADE6EFF359C9A7E6F0E6F1E6F2E5B9E6F3E6F4C2E2E6F5E6F6D6E8E6F7F35AE6F8B9C7F35BF35CF35DF35EF35FF360F361F7BBF7BAF362F363F364F365F7BEF7BCBAA1F366F7BFF367F7C0F368F369F36AF7C2F7C1F7C4F36BF36CF7C3F36DF36EF36FF370F371F7C5F7C6F372F373F374F375F7C7F376CBE8F377F378F379F37AB8DFF37BF37CF37DF37EF380F381F7D4F382F7D5F383F384F385F386F7D6F387F388F389F38AF7D8F38BF7DAF38CF7D7F38DF38EF38FF390F391F392F393F394F395F7DBF396F7D9F397F398F399F39AF39BF39CF39DD7D7F39EF39FF3A0F440F7DCF441F442F443F444F445F446F7DDF447F448F449F7DEF44AF44BF44CF44DF44EF44FF450F451F452F453F454F7DFF455F456F457F7E0F458F459F45AF45BF45CF45DF45EF45FF460F461F462DBCBF463F464D8AAF465F466F467F468F469F46AF46BF46CE5F7B9EDF46DF46EF46FF470BFFDBBEAF7C9C6C7F7C8F471F7CAF7CCF7CBF472F473F474F7CDF475CEBAF476F7CEF477F478C4A7F479F47AF47BF47CF47DF47EF480F481F482F483F484F485F486F487F488F489F48AF48BF48CF48DF48EF48FF490F491F492F493F494F495F496F497F498F499F49AF49BF49CF49DF49EF49FF4A0F540F541F542F543F544F545F546F547F548F549F54AF54BF54CF54DF54EF54FF550F551F552F553F554F555F556F557F558F559F55AF55BF55CF55DF55EF55FF560F561F562F563F564F565F566F567F568F569F56AF56BF56CF56DF56EF56FF570F571F572F573F574F575F576F577F578F579F57AF57BF57CF57DF57EF580F581F582F583F584F585F586F587F588F589F58AF58BF58CF58DF58EF58FF590F591F592F593F594F595F596F597F598F599F59AF59BF59CF59DF59EF59FF5A0F640F641F642F643F644F645F646F647F648F649F64AF64BF64CF64DF64EF64FF650F651F652F653F654F655F656F657F658F659F65AF65BF65CF65DF65EF65FF660F661F662F663F664F665F666F667F668F669F66AF66BF66CF66DF66EF66FF670F671F672F673F674F675F676F677F678F679F67AF67BF67CF67DF67EF680F681F682F683F684F685F686F687F688F689F68AF68BF68CF68DF68EF68FF690F691F692F693F694F695F696F697F698F699F69AF69BF69CF69DF69EF69FF6A0F740F741F742F743F744F745F746F747F748F749F74AF74BF74CF74DF74EF74FF750F751F752F753F754F755F756F757F758F759F75AF75BF75CF75DF75EF75FF760F761F762F763F764F765F766F767F768F769F76AF76BF76CF76DF76EF76FF770F771F772F773F774F775F776F777F778F779F77AF77BF77CF77DF77EF780D3E3F781F782F6CFF783C2B3F6D0F784F785F6D1F6D2F6D3F6D4F786F787F6D6F788B1ABF6D7F789F6D8F6D9F6DAF78AF6DBF6DCF78BF78CF78DF78EF6DDF6DECFCAF78FF6DFF6E0F6E1F6E2F6E3F6E4C0F0F6E5F6E6F6E7F6E8F6E9F790F6EAF791F6EBF6ECF792F6EDF6EEF6EFF6F0F6F1F6F2F6F3F6F4BEA8F793F6F5F6F6F6F7F6F8F794F795F796F797F798C8FAF6F9F6FAF6FBF6FCF799F79AF6FDF6FEF7A1F7A2F7A3F7A4F7A5F79BF79CF7A6F7A7F7A8B1EEF7A9F7AAF7ABF79DF79EF7ACF7ADC1DBF7AEF79FF7A0F7AFF840F841F842F843F844F845F846F847F848F849F84AF84BF84CF84DF84EF84FF850F851F852F853F854F855F856F857F858F859F85AF85BF85CF85DF85EF85FF860F861F862F863F864F865F866F867F868F869F86AF86BF86CF86DF86EF86FF870F871F872F873F874F875F876F877F878F879F87AF87BF87CF87DF87EF880F881F882F883F884F885F886F887F888F889F88AF88BF88CF88DF88EF88FF890F891F892F893F894F895F896F897F898F899F89AF89BF89CF89DF89EF89FF8A0F940F941F942F943F944F945F946F947F948F949F94AF94BF94CF94DF94EF94FF950F951F952F953F954F955F956F957F958F959F95AF95BF95CF95DF95EF95FF960F961F962F963F964F965F966F967F968F969F96AF96BF96CF96DF96EF96FF970F971F972F973F974F975F976F977F978F979F97AF97BF97CF97DF97EF980F981F982F983F984F985F986F987F988F989F98AF98BF98CF98DF98EF98FF990F991F992F993F994F995F996F997F998F999F99AF99BF99CF99DF99EF99FF9A0FA40FA41FA42FA43FA44FA45FA46FA47FA48FA49FA4AFA4BFA4CFA4DFA4EFA4FFA50FA51FA52FA53FA54FA55FA56FA57FA58FA59FA5AFA5BFA5CFA5DFA5EFA5FFA60FA61FA62FA63FA64FA65FA66FA67FA68FA69FA6AFA6BFA6CFA6DFA6EFA6FFA70FA71FA72FA73FA74FA75FA76FA77FA78FA79FA7AFA7BFA7CFA7DFA7EFA80FA81FA82FA83FA84FA85FA86FA87FA88FA89FA8AFA8BFA8CFA8DFA8EFA8FFA90FA91FA92FA93FA94FA95FA96FA97FA98FA99FA9AFA9BFA9CFA9DFA9EFA9FFAA0FB40FB41FB42FB43FB44FB45FB46FB47FB48FB49FB4AFB4BFB4CFB4DFB4EFB4FFB50FB51FB52FB53FB54FB55FB56FB57FB58FB59FB5AFB5BC4F1F0AFBCA6F0B0C3F9FB5CC5B8D1BBFB5DF0B1F0B2F0B3F0B4F0B5D1BCFB5ED1ECFB5FF0B7F0B6D4A7FB60CDD2F0B8F0BAF0B9F0BBF0BCFB61FB62B8EBF0BDBAE8FB63F0BEF0BFBEE9F0C0B6ECF0C1F0C2F0C3F0C4C8B5F0C5F0C6FB64F0C7C5F4FB65F0C8FB66FB67FB68F0C9FB69F0CAF7BDFB6AF0CBF0CCF0CDFB6BF0CEFB6CFB6DFB6EFB6FF0CFBAD7FB70F0D0F0D1F0D2F0D3F0D4F0D5F0D6F0D8FB71FB72D3A5F0D7FB73F0D9FB74FB75FB76FB77FB78FB79FB7AFB7BFB7CFB7DF5BAC2B9FB7EFB80F7E4FB81FB82FB83FB84F7E5F7E6FB85FB86F7E7FB87FB88FB89FB8AFB8BFB8CF7E8C2B4FB8DFB8EFB8FFB90FB91FB92FB93FB94FB95F7EAFB96F7EBFB97FB98FB99FB9AFB9BFB9CC2F3FB9DFB9EFB9FFBA0FC40FC41FC42FC43FC44FC45FC46FC47FC48F4F0FC49FC4AFC4BF4EFFC4CFC4DC2E9FC4EF7E1F7E2FC4FFC50FC51FC52FC53BBC6FC54FC55FC56FC57D9E4FC58FC59FC5ACAF2C0E8F0A4FC5BBADAFC5CFC5DC7ADFC5EFC5FFC60C4ACFC61FC62F7ECF7EDF7EEFC63F7F0F7EFFC64F7F1FC65FC66F7F4FC67F7F3FC68F7F2F7F5FC69FC6AFC6BFC6CF7F6FC6DFC6EFC6FFC70FC71FC72FC73FC74FC75EDE9FC76EDEAEDEBFC77F6BCFC78FC79FC7AFC7BFC7CFC7DFC7EFC80FC81FC82FC83FC84F6BDFC85F6BEB6A6FC86D8BEFC87FC88B9C4FC89FC8AFC8BD8BBFC8CDCB1FC8DFC8EFC8FFC90FC91FC92CAF3FC93F7F7FC94FC95FC96FC97FC98FC99FC9AFC9BFC9CF7F8FC9DFC9EF7F9FC9FFCA0FD40FD41FD42FD43FD44F7FBFD45F7FAFD46B1C7FD47F7FCF7FDFD48FD49FD4AFD4BFD4CF7FEFD4DFD4EFD4FFD50FD51FD52FD53FD54FD55FD56FD57C6EBECB4FD58FD59FD5AFD5BFD5CFD5DFD5EFD5FFD60FD61FD62FD63FD64FD65FD66FD67FD68FD69FD6AFD6BFD6CFD6DFD6EFD6FFD70FD71FD72FD73FD74FD75FD76FD77FD78FD79FD7AFD7BFD7CFD7DFD7EFD80FD81FD82FD83FD84FD85B3DDF6B3FD86FD87F6B4C1E4F6B5F6B6F6B7F6B8F6B9F6BAC8A3F6BBFD88FD89FD8AFD8BFD8CFD8DFD8EFD8FFD90FD91FD92FD93C1FAB9A8EDE8FD94FD95FD96B9EAD9DFFD97FD98FD99FD9AFD9';
            for (var i = 0; i < str.length; i++) {
                var c = str.charAt(i),
                    code = str.charCodeAt(i);
                if (c == " ") strOut += "+";
                else if (code >= 19968 && code <= 40869) {
                    var index = code - 19968;
                    strOut += "%" + z.substr(index * 4, 2) + "%" + z.substr(index * 4 + 2, 2);
                } else {
                    strOut += "%" + str.charCodeAt(i).toString(16);
                }
            }
            return strOut;
        },
        /* 改变图片大小 */
        scale: function (img, w, h) {
            var ow = img.width,
                oh = img.height;
            if (ow >= oh) {
                img.width = w * ow / oh;
                img.height = h;
                img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
            } else {
                img.width = w;
                img.height = h * oh / ow;
                img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
            }
        },
        getImageData: function(){
            var _this = this,
                key = $G('searchTxt').value,
                type = $G('searchType').value,
                keepOriginName = editor.options.keepOriginName ? "1" : "0",
                url = "http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&st=-1&tn=baiduimagejson&istype=2&rn=32&fm=index&pv=&word=" + _this.encodeToGb2312(key) + type + "&keeporiginname=" + keepOriginName + "&" + +new Date;
            $G('searchListUl').innerHTML = lang.searchLoading;
            ajax.request(url, {
                'dataType': 'jsonp',
                'charset': 'GB18030',
                'onsuccess':function(json){
                    var list = [];
                    if(json && json.data) {
                        for(var i = 0; i < json.data.length; i++) {
                            if(json.data[i].objURL) {
                                list.push({
                                    title: json.data[i].fromPageTitleEnc,
                                    src: json.data[i].objURL,
                                    url: json.data[i].fromURL
                                });
                            }
                        }
                    }
                    _this.setList(list);
                },
                'onerror':function(){
                    $G('searchListUl').innerHTML = lang.searchRetry;
                }
            });
        },
        /* 添加图片到列表界面上 */
        setList: function (list) {
            var i, item, p, img, link, _this = this,
                listUl = $G('searchListUl');
            listUl.innerHTML = '';
            if(list.length) {
                for (i = 0; i < list.length; i++) {
                    item = document.createElement('li');
                    p = document.createElement('p');
                    img = document.createElement('img');
                    link = document.createElement('a');
                    img.onload = function () {
                        _this.scale(this, 113, 113);
                    };
                    img.width = 113;
                    img.setAttribute('src', list[i].src);
                    link.href = list[i].url;
                    link.target = '_blank';
                    link.title = list[i].title;
                    link.innerHTML = list[i].title;
                    p.appendChild(img);
                    item.appendChild(p);
                    item.appendChild(link);
                    listUl.appendChild(item);
                }
            } else {
                listUl.innerHTML = lang.searchRetry;
            }
        },
        getInsertList: function () {
            var child,
                src,
                align = getAlign(),
                list = [],
                items = $G('searchListUl').children;
            for(var i = 0; i < items.length; i++) {
                child = items[i].firstChild && items[i].firstChild.firstChild;
                if(child.tagName && child.tagName.toLowerCase() == 'img' && domUtils.hasClass(items[i], 'selected')) {
                    src = child.src;
                    list.push({
                        src: src,
                        _src: src,
                        alt: src.substr(src.lastIndexOf('/') + 1),
                        floatStyle: align
                    });
                }
            }
            return list;
        }
    };
})();
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/alignicon.jpg
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/bg.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/icons.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/icons.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/image.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/progress.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/success.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/image/images/success.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/insertframe/insertframe.html
New file
@@ -0,0 +1,98 @@
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript" src="../internal.js"></script>
    <style type="text/css">
        .warp {width: 320px;height: 153px;margin-left:5px;padding: 20px 0 0 15px;position: relative;}
        #url {width: 290px; margin-bottom: 2px; margin-left: -6px; margin-left: -2px\9;*margin-left:0;_margin-left:0; }
        .format span{display: inline-block; width: 58px;text-align: center; zoom:1;}
        table td{padding:5px 0;}
        #align{width: 65px;height: 23px;line-height: 22px;}
    </style>
</head>
<body>
<div class="warp">
        <table width="300" cellpadding="0" cellspacing="0">
            <tr>
                <td colspan="2" class="format">
                    <span><var id="lang_input_address"></var></span>
                    <input style="width:200px" id="url" type="text" value=""/>
                </td>
            </tr>
            <tr>
                <td colspan="2" class="format"><span><var id="lang_input_width"></var></span><input style="width:200px" type="text" id="width"/> px</td>
            </tr>
            <tr>
                <td colspan="2" class="format"><span><var id="lang_input_height"></var></span><input style="width:200px" type="text" id="height"/> px</td>
            </tr>
            <tr>
                <td><span><var id="lang_input_isScroll"></var></span><input type="checkbox" id="scroll"/> </td>
                <td><span><var id="lang_input_frameborder"></var></span><input type="checkbox" id="frameborder"/> </td>
            </tr>
            <tr>
                <td colspan="2"><span><var id="lang_input_alignMode"></var></span>
                    <select id="align">
                        <option value=""></option>
                        <option value="left"></option>
                        <option value="right"></option>
                    </select>
                </td>
            </tr>
        </table>
</div>
<script type="text/javascript">
    var iframe = editor._iframe;
    if(iframe){
        $G("url").value = iframe.getAttribute("src")||"";
        $G("width").value = iframe.getAttribute("width")||iframe.style.width.replace("px","")||"";
        $G("height").value = iframe.getAttribute("height") || iframe.style.height.replace("px","") ||"";
        $G("scroll").checked = (iframe.getAttribute("scrolling") == "yes") ? true : false;
        $G("frameborder").checked = (iframe.getAttribute("frameborder") == "1") ? true : false;
        $G("align").value = iframe.align ? iframe.align : "";
    }
    function queding(){
        var  url = $G("url").value.replace(/^\s*|\s*$/ig,""),
                width = $G("width").value,
                height = $G("height").value,
                scroll = $G("scroll"),
                frameborder = $G("frameborder"),
                float = $G("align").value,
                newIframe = editor.document.createElement("iframe"),
                div;
        if(!url){
            alert(lang.enterAddress);
            return false;
        }
        newIframe.setAttribute("src",/http:\/\/|https:\/\//ig.test(url) ? url : "http://"+url);
        /^[1-9]+[.]?\d*$/g.test( width ) ? newIframe.setAttribute("width",width) : "";
        /^[1-9]+[.]?\d*$/g.test( height ) ? newIframe.setAttribute("height",height) : "";
        scroll.checked ?  newIframe.setAttribute("scrolling","yes") : newIframe.setAttribute("scrolling","no");
        frameborder.checked ?  newIframe.setAttribute("frameborder","1",0) : newIframe.setAttribute("frameborder","0",0);
        float ? newIframe.setAttribute("align",float) :  newIframe.setAttribute("align","");
        if(iframe){
            iframe.parentNode.insertBefore(newIframe,iframe);
            domUtils.remove(iframe);
        }else{
            div = editor.document.createElement("div");
            div.appendChild(newIframe);
            editor.execCommand("inserthtml",div.innerHTML);
        }
        editor._iframe = null;
        dialog.close();
    }
    dialog.onok = queding;
    $G("url").onkeydown = function(evt){
        evt = evt || event;
        if(evt.keyCode == 13){
            queding();
        }
    };
    $focus($G( "url" ));
</script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/internal.js
New file
@@ -0,0 +1,81 @@
(function () {
    var parent = window.parent;
    //dialog对象
    dialog = parent.$EDITORUI[window.frameElement.id.replace( /_iframe$/, '' )];
    //当前打开dialog的编辑器实例
    editor = dialog.editor;
    UE = parent.UE;
    domUtils = UE.dom.domUtils;
    utils = UE.utils;
    browser = UE.browser;
    ajax = UE.ajax;
    $G = function ( id ) {
        return document.getElementById( id )
    };
    //focus元素
    $focus = function ( node ) {
        setTimeout( function () {
            if ( browser.ie ) {
                var r = node.createTextRange();
                r.collapse( false );
                r.select();
            } else {
                node.focus()
            }
        }, 0 )
    };
    utils.loadFile(document,{
        href:editor.options.themePath + editor.options.theme + "/dialogbase.css?cache="+Math.random(),
        tag:"link",
        type:"text/css",
        rel:"stylesheet"
    });
    lang = editor.getLang(dialog.className.split( "-" )[2]);
    if(lang){
        domUtils.on(window,'load',function () {
            var langImgPath = editor.options.langPath + editor.options.lang + "/images/";
            //针对静态资源
            for ( var i in lang["static"] ) {
                var dom = $G( i );
                if(!dom) continue;
                var tagName = dom.tagName,
                    content = lang["static"][i];
                if(content.src){
                    //clone
                    content = utils.extend({},content,false);
                    content.src = langImgPath + content.src;
                }
                if(content.style){
                    content = utils.extend({},content,false);
                    content.style = content.style.replace(/url\s*\(/g,"url(" + langImgPath)
                }
                switch ( tagName.toLowerCase() ) {
                    case "var":
                        dom.parentNode.replaceChild( document.createTextNode( content ), dom );
                        break;
                    case "select":
                        var ops = dom.options;
                        for ( var j = 0, oj; oj = ops[j]; ) {
                            oj.innerHTML = content.options[j++];
                        }
                        for ( var p in content ) {
                            p != "options" && dom.setAttribute( p, content[p] );
                        }
                        break;
                    default :
                        domUtils.setAttributes( dom, content);
                }
            }
        } );
    }
})();
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/link/link.html
New file
@@ -0,0 +1,126 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <script type="text/javascript" src="../internal.js"></script>
    <style type="text/css">
        *{margin:0;padding:0;color: #838383;}
        table{font-size: 12px;margin: 10px;line-height: 30px}
        .txt{width:300px;height:21px;line-height:21px;border:1px solid #d7d7d7;}
    </style>
</head>
<body>
    <table>
        <tr>
            <td><label for="text"> <var id="lang_input_text"></var></label></td>
            <td><input class="txt" id="text" type="text" disabled="true"/></td>
        </tr>
        <tr>
            <td><label for="href"> <var id="lang_input_url"></var></label></td>
            <td><input class="txt" id="href" type="text" /></td>
        </tr>
        <tr>
            <td><label for="title"> <var id="lang_input_title"></var></label></td>
            <td><input class="txt" id="title" type="text"/></td>
        </tr>
        <tr>
             <td colspan="2">
                 <label for="target"><var id="lang_input_target"></var></label>
                 <input id="target" type="checkbox"/>
             </td>
        </tr>
        <tr>
            <td colspan="2" id="msg"></td>
        </tr>
    </table>
<script type="text/javascript">
    var range = editor.selection.getRange(),
        link = range.collapsed ? editor.queryCommandValue( "link" ) : editor.selection.getStart(),
        url,
        text = $G('text'),
        rangeLink = domUtils.findParentByTagName(range.getCommonAncestor(),'a',true),
        orgText;
    link = domUtils.findParentByTagName( link, "a", true );
    if(link){
        url = utils.html(link.getAttribute( '_href' ) || link.getAttribute( 'href', 2 ));
        if(rangeLink === link && !link.getElementsByTagName('img').length){
            text.removeAttribute('disabled');
            orgText = text.value = link[browser.ie ? 'innerText':'textContent'];
        }else{
            text.setAttribute('disabled','true');
            text.value = lang.validLink;
        }
    }else{
        if(range.collapsed){
            text.removeAttribute('disabled');
            text.value = '';
        }else{
            text.setAttribute('disabled','true');
            text.value = lang.validLink;
        }
    }
    $G("title").value = url ? link.title : "";
    $G("href").value = url ? url: '';
    $G("target").checked = url && link.target == "_blank" ? true :  false;
    $focus($G("href"));
    function handleDialogOk(){
        var href =$G('href').value.replace(/^\s+|\s+$/g, '');
        if(href){
            if(!hrefStartWith(href,["http","/","ftp://",'#'])) {
                href  = "http://" + href;
            }
            var obj = {
                'href' : href,
                'target' : $G("target").checked ? "_blank" : '_self',
                'title' : $G("title").value.replace(/^\s+|\s+$/g, ''),
                '_href':href
            };
            //修改链接内容的情况太特殊了,所以先做到这里了
            //todo:情况多的时候,做到command里
            if(orgText && text.value != orgText){
                link[browser.ie ? 'innerText' : 'textContent'] =  obj.textValue = text.value;
                range.selectNode(link).select()
            }
            if(range.collapsed){
                obj.textValue = text.value;
            }
            editor.execCommand('link',utils.clearEmptyAttrs(obj) );
            dialog.close();
        }
    }
    dialog.onok = handleDialogOk;
    $G('href').onkeydown = $G('title').onkeydown = function(evt){
        evt = evt || window.event;
        if (evt.keyCode == 13) {
            handleDialogOk();
            return false;
        }
    };
    $G('href').onblur = function(){
        if(!hrefStartWith(this.value,["http","/","ftp://",'#'])){
            $G("msg").innerHTML = "<span style='color: red'>"+lang.httpPrompt+"</span>";
        }else{
            $G("msg").innerHTML = "";
        }
    };
    function hrefStartWith(href,arr){
        href = href.replace(/^\s+|\s+$/g, '');
        for(var i=0,ai;ai=arr[i++];){
            if(href.indexOf(ai)==0){
                return true;
            }
        }
        return false;
    }
</script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/map/map.html
New file
@@ -0,0 +1,135 @@
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript" src="../internal.js"></script>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.1&services=true"></script>
    <style type="text/css">
        .content{width:530px; height: 350px;margin: 10px auto;}
        .content table{width: 100%}
        .content table td{vertical-align: middle;}
        #city,#address{height:21px;background: #FFF;border:1px solid #d7d7d7; line-height: 21px;}
        #city{width:60px}
        #address{width:130px}
        #is_dynamic_label span{vertical-align:middle;margin: 3px 0px 3px 3px;}
        #is_dynamic_label input{vertical-align:middle;margin: 3px 3px 3px 50px;}
    </style>
</head>
<body>
<div class="content">
    <table>
        <tr>
            <td><var id="lang_city"></var>:</td>
            <td><input id="city" type="text" /></td>
            <td><var id="lang_address"></var>:</td>
            <td><input id="address" type="text" value="" /></td>
            <td><a href="javascript:doSearch()" class="button"><var id="lang_search"></var></a></td>
            <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>
        </tr>
    </table>
    <div style="width:100%;height:340px;margin:5px auto;border:1px solid gray" id="container"></div>
</div>
<script type="text/javascript">
    var map = new BMap.Map("container"),marker,point,styleStr;
    map.enableScrollWheelZoom();
    map.enableContinuousZoom();
    function doSearch(){
        if (!document.getElementById('city').value) {
            alert(lang.cityMsg);
            return;
        }
        var search = new BMap.LocalSearch(document.getElementById('city').value, {
            onSearchComplete: function (results){
                if (results && results.getNumPois()) {
                    var points = [];
                    for (var i=0; i<results.getCurrentNumPois(); i++) {
                        points.push(results.getPoi(i).point);
                    }
                    if (points.length > 1) {
                        map.setViewport(points);
                    } else {
                        map.centerAndZoom(points[0], 13);
                    }
                    point = map.getCenter();
                    marker.setPoint(point);
                } else {
                    alert(lang.errorMsg);
                }
            }
        });
        search.search(document.getElementById('address').value || document.getElementById('city').value);
    }
    //获得参数
    function getPars(str,par){
        var reg = new RegExp(par+"=((\\d+|[.,])*)","g");
        return reg.exec(str)[1];
    }
    function init(){
        var mapNode = editor.selection.getRange().getClosedNode(),
            isMapImg = mapNode && /api[.]map[.]baidu[.]com/ig.test(mapNode.getAttribute("src")),
            isMapIframe = mapNode && domUtils.hasClass(mapNode, 'ueditor_baidumap');
        if(isMapImg || isMapIframe){
            var url, centerPos, markerPos;
            if(isMapIframe) {
                url = decodeURIComponent(mapNode.getAttribute("src"));
                $G('is_dynamic').checked = true;
                styleStr = mapNode.style.cssText;
            } else {
                url = mapNode.getAttribute("src");
                styleStr = mapNode.style.cssText;
            }
            centerPos = getPars(url,"center").split(",");
            markerPos = getPars(url, "markers").split(",");
            point = new BMap.Point(Number(centerPos[0]),Number(centerPos[1]));
            marker = new BMap.Marker(new BMap.Point(Number(markerPos[0]), Number(markerPos[1])));
            map.addControl(new BMap.NavigationControl());
            map.centerAndZoom(point, Number(getPars(url,"zoom")));
        }else{
            point = new BMap.Point(116.404, 39.915);    // 创建点坐标
            marker = new BMap.Marker(point);
            map.addControl(new BMap.NavigationControl());
            map.centerAndZoom(point, 10);                     // 初始化地图,设置中心点坐标和地图级别。
        }
        marker.enableDragging();
        map.addOverlay(marker);
    }
    init();
    document.getElementById('address').onkeydown = function (evt){
        evt = evt || event;
        if (evt.keyCode == 13) {
            doSearch();
        }
    };
    dialog.onok = function (){
        var center = map.getCenter();
        var zoom = map.zoomLevel;
        var size = map.getSize();
        var mapWidth = size.width;
        var mapHeight = size.height;
        var point = marker.getPoint();
        if($G('is_dynamic').checked) {
            var URL = editor.options.UEDITOR_HOME_URL,
                url = [URL + (/\/$/.test(URL) ? '':'/') + "dialogs/map/show.html" +
                    '#center=' + center.lng + ',' + center.lat,
                    '&zoom=' + zoom,
                    '&width=' + mapWidth,
                    '&height=' + mapHeight,
                    '&markers=' + point.lng + ',' + point.lat,
                    '&markerStyles=' + 'l,A'].join('');
            editor.execCommand('inserthtml', '<iframe class="ueditor_baidumap" src="' + url + '"' + (styleStr ? ' style="' + styleStr + '"' :'') + ' frameborder="0" width="' + (mapWidth+4) + '" height="' + (mapHeight+4) + '"></iframe>');
        } else {
            var url = "http://api.map.baidu.com/staticimage?center=" + center.lng + ',' + center.lat +
                    "&zoom=" + zoom + "&width=" + size.width + '&height=' + size.height + "&markers=" + point.lng + ',' + point.lat;
            editor.execCommand('inserthtml', '<img width="'+ size.width +'"height="'+ size.height +'" src="' + url + '"' + (styleStr ? ' style="' + styleStr + '"' :'') + '/>');
        }
    };
    document.getElementById("address").focus();
</script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/map/show.html
New file
@@ -0,0 +1,118 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8"/>
    <meta name="keywords" content="百度地图,百度地图API,百度地图自定义工具,百度地图所见即所得工具"/>
    <meta name="description" content="百度地图API自定义地图,帮助用户在可视化操作下生成百度地图"/>
    <title>百度地图API自定义地图</title>
    <!--引用百度地图API-->
    <style type="text/css">
        html, body {
            margin: 0;
            padding: 0;
            overflow: hidden;
        }
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?key=&v=1.1&services=true"></script>
</head>
<body onload="initMap();">
<!--百度地图容器-->
<div style="width:697px;height:550px;border:#ccc solid 1px;" id="dituContent"></div>
</body>
<script type="text/javascript">
    function getParam(name) {
        return location.href.match(new RegExp('[?#&]' + name + '=([^?#&]+)', 'i')) ? RegExp.$1 : '';
    }
    var map, marker;
    var centerParam = getParam('center');
    var zoomParam = getParam('zoom');
    var widthParam = getParam('width');
    var heightParam = getParam('height');
    var markersParam = getParam('markers');
    var markerStylesParam = getParam('markerStyles');
    //创建和初始化地图函数:
    function initMap() {
        // [FF]切换模式后报错
        if (!window.BMap) {
            return;
        }
        var dituContent = document.getElementById('dituContent');
        dituContent.style.width = widthParam + 'px';
        dituContent.style.height = heightParam + 'px';
        createMap();//创建地图
        setMapEvent();//设置地图事件
        addMapControl();//向地图添加控件
        // 创建标注
        var markersArr = markersParam.split(',');
        var point = new BMap.Point(markersArr[0], markersArr[1]);
        marker = new BMap.Marker(point);
        marker.enableDragging();
        map.addOverlay(marker); // 将标注添加到地图中
        if(parent.editor && parent.document.body.contentEditable=="true") { //在编辑状态下
            setMapListener();//地图改变修改外层的iframe标签src属性
        }
    }
    //创建地图函数:
    function createMap() {
        map = new BMap.Map("dituContent");//在百度地图容器中创建一个地图
        var centerArr = centerParam.split(',');
        var point = new BMap.Point(parseFloat(centerArr[0]), parseFloat(centerArr[1]));//定义一个中心点坐标
        map.centerAndZoom(point, parseInt(zoomParam));//设定地图的中心点和坐标并将地图显示在地图容器中
    }
    //地图事件设置函数:
    function setMapEvent() {
        map.enableDragging();//启用地图拖拽事件,默认启用(可不写)
        map.enableScrollWheelZoom();//启用地图滚轮放大缩小
        map.enableDoubleClickZoom();//启用鼠标双击放大,默认启用(可不写)
        map.enableKeyboard();//启用键盘上下左右键移动地图
    }
    //地图控件添加函数:
    function addMapControl() {
        //向地图中添加缩放控件
        var ctrl_nav = new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE});
        map.addControl(ctrl_nav);
        //向地图中添加缩略图控件
        var ctrl_ove = new BMap.OverviewMapControl({anchor: BMAP_ANCHOR_BOTTOM_RIGHT, isOpen: 1});
        map.addControl(ctrl_ove);
        //向地图中添加比例尺控件
        var ctrl_sca = new BMap.ScaleControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT});
        map.addControl(ctrl_sca);
    }
    function setMapListener() {
        var editor = parent.editor, containerIframe,
            iframes = parent.document.getElementsByTagName('iframe');
        for (var key in iframes) {
            if (iframes[key].contentWindow == window) {
                containerIframe = iframes[key];
                break;
            }
        }
        if (containerIframe) {
            map.addEventListener('moveend', mapListenerHandler);
            map.addEventListener('zoomend', mapListenerHandler);
            marker.addEventListener('dragend', mapListenerHandler);
        }
        function mapListenerHandler() {
            var zoom = map.getZoom(),
                center = map.getCenter(),
                marker = window.marker.getPoint();
            containerIframe.src = containerIframe.src.
                replace(new RegExp('([?#&])center=([^?#&]+)', 'i'), '$1center=' + center.lng + ',' + center.lat).
                replace(new RegExp('([?#&])markers=([^?#&]+)', 'i'), '$1markers=' + marker.lng + ',' + marker.lat).
                replace(new RegExp('([?#&])zoom=([^?#&]+)', 'i'), '$1zoom=' + zoom);
            editor.fireEvent('saveScene');
        }
    }
</script>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/music/music.css
New file
@@ -0,0 +1,30 @@
.wrapper{margin: 5px 10px;}
.searchBar{height:30px;padding:7px 0 3px;text-align:center;}
.searchBtn{font-size:13px;height:24px;}
.resultBar{width:460px;margin:5px auto;border: 1px solid #CCC;border-radius: 5px;box-shadow: 2px 2px 5px #D3D6DA;overflow: hidden;}
.listPanel{overflow: hidden;}
.panelon{display:block;}
.paneloff{display:none}
.page{width:220px;margin:20px auto;overflow: hidden;}
.pageon{float:right;width:24px;line-height:24px;height:24px;margin-right: 5px;background: none;border: none;color: #000;font-weight: bold;text-align:center}
.pageoff{float:right;width:24px;line-height:24px;height:24px;cursor:pointer;background-color: #fff;
   border: 1px solid #E7ECF0;color: #2D64B3;margin-right: 5px;text-decoration: none;text-align:center;}
.m-box{width:460px;}
.m-m{float: left;line-height: 20px;height: 20px;}
.m-h{height:24px;line-height:24px;padding-left: 46px;background-color:#FAFAFA;border-bottom: 1px solid #DAD8D8;font-weight: bold;font-size: 12px;color: #333;}
.m-l{float:left;width:40px; }
.m-t{float:left;width:140px;}
.m-s{float:left;width:110px;}
.m-z{float:left;width:100px;}
.m-try-t{float: left;width: 60px;;}
.m-try{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/try_music.gif') no-repeat ;}
.m-trying{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/stop_music.gif') no-repeat ;}
.loading{width:95px;height:7px;font-size:7px;margin:60px auto;background:url(http://static.tieba.baidu.com/tb/editor/images/loading.gif) no-repeat}
.empty{width:300px;height:40px;padding:2px;margin:50px auto;line-height:40px; color:#006699;text-align:center;}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/music/music.html
New file
@@ -0,0 +1,32 @@
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>插入音乐</title>
    <script type="text/javascript" src="../internal.js"></script>
    <link rel="stylesheet" type="text/css" href="music.css">
</head>
<body>
<div class="wrapper">
    <div class="searchBar">
        <input id="J_searchName" type="text"/>
        <input type="button" class="searchBtn" id="J_searchBtn">
    </div>
    <div class="resultBar" id="J_resultBar">
        <div class="loading" style="display:none"></div>
        <div class="empty"><var id="lang_input_tips"></var></div>
    </div>
    <div id="J_preview"></div>
</div>
<script type="text/javascript" src="music.js"></script>
<script type="text/javascript">
    var music = new Music;
    dialog.onok = function () {
        music.exec();
    };
    dialog.oncancel = function () {
        $G('J_preview').innerHTML = "";
    };
</script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/music/music.js
New file
@@ -0,0 +1,192 @@
function Music() {
    this.init();
}
(function () {
    var pages = [],
        panels = [],
        selectedItem = null;
    Music.prototype = {
        total:70,
        pageSize:10,
        dataUrl:"http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.search.common",
        playerUrl:"http://box.baidu.com/widget/flash/bdspacesong.swf",
        init:function () {
            var me = this;
            domUtils.on($G("J_searchName"), "keyup", function (event) {
                var e = window.event || event;
                if (e.keyCode == 13) {
                    me.dosearch();
                }
            });
            domUtils.on($G("J_searchBtn"), "click", function () {
                me.dosearch();
            });
        },
        callback:function (data) {
            var me = this;
            me.data = data.song_list;
            setTimeout(function () {
                $G('J_resultBar').innerHTML = me._renderTemplate(data.song_list);
            }, 300);
        },
        dosearch:function () {
            var me = this;
            selectedItem = null;
            var key = $G('J_searchName').value;
            if (utils.trim(key) == "")return false;
            key = encodeURIComponent(key);
            me._sent(key);
        },
        doselect:function (i) {
            var me = this;
            if (typeof i == 'object') {
                selectedItem = i;
            } else if (typeof i == 'number') {
                selectedItem = me.data[i];
            }
        },
        onpageclick:function (id) {
            var me = this;
            for (var i = 0; i < pages.length; i++) {
                $G(pages[i]).className = 'pageoff';
                $G(panels[i]).className = 'paneloff';
            }
            $G('page' + id).className = 'pageon';
            $G('panel' + id).className = 'panelon';
        },
        listenTest:function (elem) {
            var me = this,
                view = $G('J_preview'),
                is_play_action = (elem.className == 'm-try'),
                old_trying = me._getTryingElem();
            if (old_trying) {
                old_trying.className = 'm-try';
                view.innerHTML = '';
            }
            if (is_play_action) {
                elem.className = 'm-trying';
                view.innerHTML = me._buildMusicHtml(me._getUrl(true));
            }
        },
        _sent:function (param) {
            var me = this;
            $G('J_resultBar').innerHTML = '<div class="loading"></div>';
            utils.loadFile(document, {
                src:me.dataUrl + '&query=' + param + '&page_size=' + me.total + '&callback=music.callback&.r=' + Math.random(),
                tag:"script",
                type:"text/javascript",
                defer:"defer"
            });
        },
        _removeHtml:function (str) {
            var reg = /<\s*\/?\s*[^>]*\s*>/gi;
            return str.replace(reg, "");
        },
        _getUrl:function (isTryListen) {
            var me = this;
            var param = 'from=tiebasongwidget&url=&name=' + encodeURIComponent(me._removeHtml(selectedItem.title)) + '&artist='
                + encodeURIComponent(me._removeHtml(selectedItem.author)) + '&extra='
                + encodeURIComponent(me._removeHtml(selectedItem.album_title))
                + '&autoPlay='+isTryListen+'' + '&loop=true';
            return  me.playerUrl + "?" + param;
        },
        _getTryingElem:function () {
            var s = $G('J_listPanel').getElementsByTagName('span');
            for (var i = 0; i < s.length; i++) {
                if (s[i].className == 'm-trying')
                    return s[i];
            }
            return null;
        },
        _buildMusicHtml:function (playerUrl) {
            var html = '<embed class="BDE_try_Music" allowfullscreen="false" pluginspage="http://www.macromedia.com/go/getflashplayer"';
            html += ' src="' + playerUrl + '"';
            html += ' width="1" height="1" style="position:absolute;left:-2000px;"';
            html += ' type="application/x-shockwave-flash" wmode="transparent" play="true" loop="false"';
            html += ' menu="false" allowscriptaccess="never" scale="noborder">';
            return html;
        },
        _byteLength:function (str) {
            return str.replace(/[^\u0000-\u007f]/g, "\u0061\u0061").length;
        },
        _getMaxText:function (s) {
            var me = this;
            s = me._removeHtml(s);
            if (me._byteLength(s) > 12)
                return s.substring(0, 5) + '...';
            if (!s) s = "&nbsp;";
            return s;
        },
        _rebuildData:function (data) {
            var me = this,
                newData = [],
                d = me.pageSize,
                itembox;
            for (var i = 0; i < data.length; i++) {
                if ((i + d) % d == 0) {
                    itembox = [];
                    newData.push(itembox)
                }
                itembox.push(data[i]);
            }
            return newData;
        },
        _renderTemplate:function (data) {
            var me = this;
            if (data.length == 0)return '<div class="empty">' + lang.emptyTxt + '</div>';
            data = me._rebuildData(data);
            var s = [], p = [], t = [];
            s.push('<div id="J_listPanel" class="listPanel">');
            p.push('<div class="page">');
            for (var i = 0, tmpList; tmpList = data[i++];) {
                panels.push('panel' + i);
                pages.push('page' + i);
                if (i == 1) {
                    s.push('<div id="panel' + i + '" class="panelon">');
                    if (data.length != 1) {
                        t.push('<div id="page' + i + '" onclick="music.onpageclick(' + i + ')" class="pageon">' + (i ) + '</div>');
                    }
                } else {
                    s.push('<div id="panel' + i + '" class="paneloff">');
                    t.push('<div id="page' + i + '" onclick="music.onpageclick(' + i + ')" class="pageoff">' + (i ) + '</div>');
                }
                s.push('<div class="m-box">');
                s.push('<div class="m-h"><span class="m-t">' + lang.chapter + '</span><span class="m-s">' + lang.singer
                    + '</span><span class="m-z">' + lang.special + '</span><span class="m-try-t">' + lang.listenTest + '</span></div>');
                for (var j = 0, tmpObj; tmpObj = tmpList[j++];) {
                    s.push('<label for="radio-' + i + '-' + j + '" class="m-m">');
                    s.push('<input type="radio" id="radio-' + i + '-' + j + '" name="musicId" class="m-l" onclick="music.doselect(' + (me.pageSize * (i-1) + (j-1)) + ')"/>');
                    s.push('<span class="m-t">' + me._getMaxText(tmpObj.title) + '</span>');
                    s.push('<span class="m-s">' + me._getMaxText(tmpObj.author) + '</span>');
                    s.push('<span class="m-z">' + me._getMaxText(tmpObj.album_title) + '</span>');
                    s.push('<span class="m-try" onclick="music.doselect(' + (me.pageSize * (i-1) + (j-1)) + ');music.listenTest(this)"></span>');
                    s.push('</label>');
                }
                s.push('</div>');
                s.push('</div>');
            }
            t.reverse();
            p.push(t.join(''));
            s.push('</div>');
            p.push('</div>');
            return s.join('') + p.join('');
        },
        exec:function () {
            var me = this;
            if (selectedItem == null)   return;
            $G('J_preview').innerHTML = "";
            editor.execCommand('music', {
                url:me._getUrl(false),
                width:400,
                height:95
            });
        }
    };
})();
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/preview/preview.html
New file
@@ -0,0 +1,40 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <style>
            html,body{
                height:100%;
                width:100%;
                padding:0;
                margin:0;
            }
            #preview{
                width:100%;
                height:100%;
                padding:0;
                margin:0;
            }
            #preview *{font-family:sans-serif;font-size:16px;}
        </style>
        <script type="text/javascript" src="../internal.js"></script>
        <script src="../../ueditor.parse.js"></script>
        <title></title>
    </head>
    <body class="view">
        <div id="preview" style="margin:8px">
        </div>
    </body>
    <script>
        document.getElementById('preview').innerHTML = editor.getContent();
        uParse('#preview',{
            rootPath : '../../',
            chartContainerHeight:500
        })
        dialog.oncancel = function(){
            document.getElementById('preview').innerHTML = '';
        }
    </script>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/addimg.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/brush.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/delimg.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/delimgH.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/empty.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/emptyH.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/eraser.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/redo.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/redoH.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/scale.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/scaleH.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/size.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/undo.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/images/undoH.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/scrawl.css
New file
@@ -0,0 +1,72 @@
/*common
*/
body{margin: 0;}
table{width:100%;}
table td{padding:2px 4px;vertical-align: middle;}
a{text-decoration: none;}
em{font-style: normal;}
.border_style1{border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;}
/*module
*/
.main{margin: 8px;overflow: hidden;}
.hot{float:left;height:335px;}
.drawBoard{position: relative; cursor: crosshair;}
.brushBorad{position: absolute;left:0;top:0;z-index: 998;}
.picBoard{border: none;text-align: center;line-height: 300px;cursor: default;}
.operateBar{margin-top:10px;font-size:12px;text-align: center;}
.operateBar span{margin-left: 10px;}
.drawToolbar{float:right;width:110px;height:300px;overflow: hidden;}
.colorBar{margin-top:10px;font-size: 12px;text-align: center;}
.colorBar a{display:block;width: 10px;height: 10px;border:1px solid #1006F1;border-radius: 3px; box-shadow:2px 2px 5px #d3d6da;opacity: 0.3}
.sectionBar{margin-top:15px;font-size: 12px;text-align: center;}
.sectionBar a{display:inline-block;width:10px;height:12px;color: #888;text-indent: -999px;opacity: 0.3}
.size1{background: url('images/size.png') 1px center no-repeat ;}
.size2{background: url('images/size.png') -10px center no-repeat;}
.size3{background: url('images/size.png') -22px center no-repeat;}
.size4{background: url('images/size.png') -35px center no-repeat;}
.addImgH{position: relative;}
.addImgH_form{position: absolute;left: 18px;top: -1px;width: 75px;height: 21px;opacity: 0;cursor: pointer;}
.addImgH_form input{width: 100%;}
/*scrawl遮罩层
*/
.maskLayerNull{display: none;}
.maskLayer{position: absolute;top:0;left:0;width: 100%; height: 100%;opacity: 0.7;
    background-color: #fff;text-align:center;font-weight:bold;line-height:300px;z-index: 1000;}
/*btn state
*/
.previousStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undoH.png');cursor: pointer;}
.previousStepH .text{color:#888;cursor:pointer;}
.previousStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undo.png');cursor:default;}
.previousStep .text{color:#ccc;cursor:default;}
.nextStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redoH.png');cursor: pointer;}
.nextStepH .text{color:#888;cursor:pointer;}
.nextStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redo.png');cursor:default;}
.nextStep .text{color:#ccc;cursor:default;}
.clearBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/emptyH.png');cursor: pointer;}
.clearBoardH .text{color:#888;cursor:pointer;}
.clearBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/empty.png');cursor:default;}
.clearBoard .text{color:#ccc;cursor:default;}
.scaleBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scaleH.png');cursor: pointer;}
.scaleBoardH .text{color:#888;cursor:pointer;}
.scaleBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scale.png');cursor:default;}
.scaleBoard .text{color:#ccc;cursor:default;}
.removeImgH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimgH.png');cursor: pointer;}
.removeImgH .text{color:#888;cursor:pointer;}
.removeImg .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimg.png');cursor:default;}
.removeImg .text{color:#ccc;cursor:default;}
.addImgH .icon{vertical-align:top;display: inline-block;width:16px;height:16px;background-image: url('images/addimg.png')}
.addImgH .text{color:#888;cursor:pointer;}
/*icon
*/
.brushIcon{display: inline-block;width:16px;height:16px;background-image: url('images/brush.png')}
.eraserIcon{display: inline-block;width:16px;height:16px;background-image: url('images/eraser.png')}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/scrawl.html
New file
@@ -0,0 +1,95 @@
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="robots" content="noindex, nofollow"/>
    <script type="text/javascript" src="../internal.js"></script>
    <link rel="stylesheet" type="text/css" href="scrawl.css">
</head>
<body>
<div class="main" id="J_wrap">
    <div class="hot">
        <div class="drawBoard border_style1">
            <canvas id="J_brushBoard" class="brushBorad" width="360" height="300"></canvas>
            <div id="J_picBoard" class="picBoard" style="width: 360px;height: 300px"></div>
        </div>
        <div id="J_operateBar" class="operateBar">
            <span id="J_previousStep" class="previousStep">
                <em class="icon"></em>
                <em class="text"><var id="lang_input_previousStep"></var></em>
            </span>
            <span id="J_nextStep" class="nextStep">
                <em class="icon"></em>
                <em class="text"><var id="lang_input_nextsStep"></var></em>
            </span>
            <span id="J_clearBoard" class="clearBoard">
                <em class="icon"></em>
                <em class="text"><var id="lang_input_clear"></var></em>
            </span>
            <span id="J_sacleBoard" class="scaleBoard">
                <em class="icon"></em>
                <em class="text"><var id="lang_input_ScalePic"></var></em>
            </span>
        </div>
    </div>
    <div class="drawToolbar border_style1">
        <div id="J_colorBar" class="colorBar"></div>
        <div id="J_brushBar" class="sectionBar">
            <em class="brushIcon"></em>
            <a href="javascript:void(0)" class="size1">1</a>
            <a href="javascript:void(0)" class="size2">3</a>
            <a href="javascript:void(0)" class="size3">5</a>
            <a href="javascript:void(0)" class="size4">7</a>
        </div>
        <div id="J_eraserBar" class="sectionBar">
            <em class="eraserIcon"></em>
            <a href="javascript:void(0)" class="size1">1</a>
            <a href="javascript:void(0)" class="size2">3</a>
            <a href="javascript:void(0)" class="size3">5</a>
            <a href="javascript:void(0)" class="size4">7</a>
        </div>
        <div class="sectionBar">
            <div id="J_addImg" class="addImgH">
                <em class="icon"></em>
                <em class="text"><var id="lang_input_addPic"></var></em>
                <form method="post" id="fileForm" enctype="multipart/form-data" class="addImgH_form" target="up">
                    <input type="file" name="upfile" id="J_imgTxt"
                           accept="image/gif,image/jpeg,image/png,image/jpg,image/bmp"/>
                </form>
                <iframe name="up" style="display: none"></iframe>
            </div>
        </div>
        <div class="sectionBar">
            <span id="J_removeImg" class="removeImg">
                <em class="icon"></em>
                <em class="text"><var id="lang_input_removePic"></var></em>
            </span>
        </div>
    </div>
</div>
<div id="J_maskLayer" class="maskLayerNull"></div>
<script type="text/javascript" src="scrawl.js"></script>
<script type="text/javascript">
    var settings = {
        drawBrushSize:3, //画笔初始大小
        drawBrushColor:"#4bacc6", //画笔初始颜色
        colorList:['c00000', 'ff0000', 'ffc000', 'ffff00', '92d050', '00b050', '00b0f0', '0070c0', '002060', '7030a0', 'ffffff',
            '000000', 'eeece1', '1f497d', '4f81bd', 'c0504d', '9bbb59', '8064a2', '4bacc6', 'f79646'], //画笔选择颜色
        saveNum:10  //撤销次数
    };
    var scrawlObj = new scrawl( settings );
    scrawlObj.isCancelScrawl = false;
    dialog.onok = function () {
        exec( scrawlObj );
        return false;
    };
    dialog.oncancel = function () {
        scrawlObj.isCancelScrawl = true;
    };
</script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/scrawl/scrawl.js
New file
@@ -0,0 +1,671 @@
/**
 * Created with JetBrains PhpStorm.
 * User: xuheng
 * Date: 12-5-22
 * Time: 上午11:38
 * To change this template use File | Settings | File Templates.
 */
var scrawl = function (options) {
    options && this.initOptions(options);
};
(function () {
    var canvas = $G("J_brushBoard"),
        context = canvas.getContext('2d'),
        drawStep = [], //undo redo存储
        drawStepIndex = 0; //undo redo指针
    scrawl.prototype = {
        isScrawl:false, //是否涂鸦
        brushWidth:-1, //画笔粗细
        brushColor:"", //画笔颜色
        initOptions:function (options) {
            var me = this;
            me.originalState(options);//初始页面状态
            me._buildToolbarColor(options.colorList);//动态生成颜色选择集合
            me._addBoardListener(options.saveNum);//添加画板处理
            me._addOPerateListener(options.saveNum);//添加undo redo clearBoard处理
            me._addColorBarListener();//添加颜色选择处理
            me._addBrushBarListener();//添加画笔大小处理
            me._addEraserBarListener();//添加橡皮大小处理
            me._addAddImgListener();//添加增添背景图片处理
            me._addRemoveImgListenter();//删除背景图片处理
            me._addScalePicListenter();//添加缩放处理
            me._addClearSelectionListenter();//添加清楚选中状态处理
            me._originalColorSelect(options.drawBrushColor);//初始化颜色选中
            me._originalBrushSelect(options.drawBrushSize);//初始化画笔选中
            me._clearSelection();//清楚选中状态
        },
        originalState:function (options) {
            var me = this;
            me.brushWidth = options.drawBrushSize;//同步画笔粗细
            me.brushColor = options.drawBrushColor;//同步画笔颜色
            context.lineWidth = me.brushWidth;//初始画笔大小
            context.strokeStyle = me.brushColor;//初始画笔颜色
            context.fillStyle = "transparent";//初始画布背景颜色
            context.lineCap = "round";//去除锯齿
            context.fill();
        },
        _buildToolbarColor:function (colorList) {
            var tmp = null, arr = [];
            arr.push("<table id='J_colorList'>");
            for (var i = 0, color; color = colorList[i++];) {
                if ((i - 1) % 5 == 0) {
                    if (i != 1) {
                        arr.push("</tr>");
                    }
                    arr.push("<tr>");
                }
                tmp = '#' + color;
                arr.push("<td><a title='" + tmp + "' href='javascript:void(0)' style='background-color:" + tmp + "'></a></td>");
            }
            arr.push("</tr></table>");
            $G("J_colorBar").innerHTML = arr.join("");
        },
        _addBoardListener:function (saveNum) {
            var me = this,
                margin = 0,
                startX = -1,
                startY = -1,
                isMouseDown = false,
                isMouseMove = false,
                isMouseUp = false,
                buttonPress = 0, button, flag = '';
            margin = parseInt(domUtils.getComputedStyle($G("J_wrap"), "margin-left"));
            drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));
            drawStepIndex += 1;
            domUtils.on(canvas, ["mousedown", "mousemove", "mouseup", "mouseout"], function (e) {
                button = browser.webkit ? e.which : buttonPress;
                switch (e.type) {
                    case 'mousedown':
                        buttonPress = 1;
                        flag = 1;
                        isMouseDown = true;
                        isMouseUp = false;
                        isMouseMove = false;
                        me.isScrawl = true;
                        startX = e.clientX - margin;//10为外边距总和
                        startY = e.clientY - margin;
                        context.beginPath();
                        break;
                    case 'mousemove' :
                        if (!flag && button == 0) {
                            return;
                        }
                        if (!flag && button) {
                            startX = e.clientX - margin;//10为外边距总和
                            startY = e.clientY - margin;
                            context.beginPath();
                            flag = 1;
                        }
                        if (isMouseUp || !isMouseDown) {
                            return;
                        }
                        var endX = e.clientX - margin,
                            endY = e.clientY - margin;
                        context.moveTo(startX, startY);
                        context.lineTo(endX, endY);
                        context.stroke();
                        startX = endX;
                        startY = endY;
                        isMouseMove = true;
                        break;
                    case 'mouseup':
                        buttonPress = 0;
                        if (!isMouseDown)return;
                        if (!isMouseMove) {
                            context.arc(startX, startY, context.lineWidth, 0, Math.PI * 2, false);
                            context.fillStyle = context.strokeStyle;
                            context.fill();
                        }
                        context.closePath();
                        me._saveOPerate(saveNum);
                        isMouseDown = false;
                        isMouseMove = false;
                        isMouseUp = true;
                        startX = -1;
                        startY = -1;
                        break;
                    case 'mouseout':
                        flag = '';
                        buttonPress = 0;
                        if (button == 1) return;
                        context.closePath();
                        break;
                }
            });
        },
        _addOPerateListener:function (saveNum) {
            var me = this;
            domUtils.on($G("J_previousStep"), "click", function () {
                if (drawStepIndex > 1) {
                    drawStepIndex -= 1;
                    context.clearRect(0, 0, context.canvas.width, context.canvas.height);
                    context.putImageData(drawStep[drawStepIndex - 1], 0, 0);
                    me.btn2Highlight("J_nextStep");
                    drawStepIndex == 1 && me.btn2disable("J_previousStep");
                }
            });
            domUtils.on($G("J_nextStep"), "click", function () {
                if (drawStepIndex > 0 && drawStepIndex < drawStep.length) {
                    context.clearRect(0, 0, context.canvas.width, context.canvas.height);
                    context.putImageData(drawStep[drawStepIndex], 0, 0);
                    drawStepIndex += 1;
                    me.btn2Highlight("J_previousStep");
                    drawStepIndex == drawStep.length && me.btn2disable("J_nextStep");
                }
            });
            domUtils.on($G("J_clearBoard"), "click", function () {
                context.clearRect(0, 0, context.canvas.width, context.canvas.height);
                drawStep = [];
                me._saveOPerate(saveNum);
                drawStepIndex = 1;
                me.isScrawl = false;
                me.btn2disable("J_previousStep");
                me.btn2disable("J_nextStep");
                me.btn2disable("J_clearBoard");
            });
        },
        _addColorBarListener:function () {
            var me = this;
            domUtils.on($G("J_colorBar"), "click", function (e) {
                var target = me.getTarget(e),
                    color = target.title;
                if (!!color) {
                    me._addColorSelect(target);
                    me.brushColor = color;
                    context.globalCompositeOperation = "source-over";
                    context.lineWidth = me.brushWidth;
                    context.strokeStyle = color;
                }
            });
        },
        _addBrushBarListener:function () {
            var me = this;
            domUtils.on($G("J_brushBar"), "click", function (e) {
                var target = me.getTarget(e),
                    size = browser.ie ? target.innerText : target.text;
                if (!!size) {
                    me._addBESelect(target);
                    context.globalCompositeOperation = "source-over";
                    context.lineWidth = parseInt(size);
                    context.strokeStyle = me.brushColor;
                    me.brushWidth = context.lineWidth;
                }
            });
        },
        _addEraserBarListener:function () {
            var me = this;
            domUtils.on($G("J_eraserBar"), "click", function (e) {
                var target = me.getTarget(e),
                    size = browser.ie ? target.innerText : target.text;
                if (!!size) {
                    me._addBESelect(target);
                    context.lineWidth = parseInt(size);
                    context.globalCompositeOperation = "destination-out";
                    context.strokeStyle = "#FFF";
                }
            });
        },
        _addAddImgListener:function () {
            var file = $G("J_imgTxt");
            if (!window.FileReader) {
                $G("J_addImg").style.display = 'none';
                $G("J_removeImg").style.display = 'none';
                $G("J_sacleBoard").style.display = 'none';
            }
            domUtils.on(file, "change", function (e) {
                var frm = file.parentNode;
                addMaskLayer(lang.backgroundUploading);
                var target = e.target || e.srcElement,
                    reader = new FileReader();
                reader.onload = function(evt){
                    var target = evt.target || evt.srcElement;
                    ue_callback(target.result, 'SUCCESS');
                };
                reader.readAsDataURL(target.files[0]);
                frm.reset();
            });
        },
        _addRemoveImgListenter:function () {
            var me = this;
            domUtils.on($G("J_removeImg"), "click", function () {
                $G("J_picBoard").innerHTML = "";
                me.btn2disable("J_removeImg");
                me.btn2disable("J_sacleBoard");
            });
        },
        _addScalePicListenter:function () {
            domUtils.on($G("J_sacleBoard"), "click", function () {
                var picBoard = $G("J_picBoard"),
                    scaleCon = $G("J_scaleCon"),
                    img = picBoard.children[0];
                if (img) {
                    if (!scaleCon) {
                        picBoard.style.cssText = "position:relative;z-index:999;"+picBoard.style.cssText;
                        img.style.cssText = "position: absolute;top:" + (canvas.height - img.height) / 2 + "px;left:" + (canvas.width - img.width) / 2 + "px;";
                        var scale = new ScaleBoy();
                        picBoard.appendChild(scale.init());
                        scale.startScale(img);
                    } else {
                        if (scaleCon.style.visibility == "visible") {
                            scaleCon.style.visibility = "hidden";
                            picBoard.style.position = "";
                            picBoard.style.zIndex = "";
                        } else {
                            scaleCon.style.visibility = "visible";
                            picBoard.style.cssText += "position:relative;z-index:999";
                        }
                    }
                }
            });
        },
        _addClearSelectionListenter:function () {
            var doc = document;
            domUtils.on(doc, 'mousemove', function (e) {
                if (browser.ie && browser.version < 11)
                    doc.selection.clear();
                else
                    window.getSelection().removeAllRanges();
            });
        },
        _clearSelection:function () {
            var list = ["J_operateBar", "J_colorBar", "J_brushBar", "J_eraserBar", "J_picBoard"];
            for (var i = 0, group; group = list[i++];) {
                domUtils.unSelectable($G(group));
            }
        },
        _saveOPerate:function (saveNum) {
            var me = this;
            if (drawStep.length <= saveNum) {
                if(drawStepIndex<drawStep.length){
                    me.btn2disable("J_nextStep");
                    drawStep.splice(drawStepIndex);
                }
                drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));
                drawStepIndex = drawStep.length;
            } else {
                drawStep.shift();
                drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));
                drawStepIndex = drawStep.length;
            }
            me.btn2Highlight("J_previousStep");
            me.btn2Highlight("J_clearBoard");
        },
        _originalColorSelect:function (title) {
            var colorList = $G("J_colorList").getElementsByTagName("td");
            for (var j = 0, cell; cell = colorList[j++];) {
                if (cell.children[0].title.toLowerCase() == title) {
                    cell.children[0].style.opacity = 1;
                }
            }
        },
        _originalBrushSelect:function (text) {
            var brushList = $G("J_brushBar").children;
            for (var i = 0, ele; ele = brushList[i++];) {
                if (ele.tagName.toLowerCase() == "a") {
                    var size = browser.ie ? ele.innerText : ele.text;
                    if (size.toLowerCase() == text) {
                        ele.style.opacity = 1;
                    }
                }
            }
        },
        _addColorSelect:function (target) {
            var me = this,
                colorList = $G("J_colorList").getElementsByTagName("td"),
                eraserList = $G("J_eraserBar").children,
                brushList = $G("J_brushBar").children;
            for (var i = 0, cell; cell = colorList[i++];) {
                cell.children[0].style.opacity = 0.3;
            }
            for (var k = 0, ele; ele = brushList[k++];) {
                if (ele.tagName.toLowerCase() == "a") {
                    ele.style.opacity = 0.3;
                    var size = browser.ie ? ele.innerText : ele.text;
                    if (size.toLowerCase() == this.brushWidth) {
                        ele.style.opacity = 1;
                    }
                }
            }
            for (var j = 0, node; node = eraserList[j++];) {
                if (node.tagName.toLowerCase() == "a") {
                    node.style.opacity = 0.3;
                }
            }
            target.style.opacity = 1;
            target.blur();
        },
        _addBESelect:function (target) {
            var brushList = $G("J_brushBar").children;
            var eraserList = $G("J_eraserBar").children;
            for (var i = 0, ele; ele = brushList[i++];) {
                if (ele.tagName.toLowerCase() == "a") {
                    ele.style.opacity = 0.3;
                }
            }
            for (var j = 0, node; node = eraserList[j++];) {
                if (node.tagName.toLowerCase() == "a") {
                    node.style.opacity = 0.3;
                }
            }
            target.style.opacity = 1;
            target.blur();
        },
        getCanvasData:function () {
            var picContainer = $G("J_picBoard"),
                img = picContainer.children[0];
            if (img) {
                var x, y;
                if (img.style.position == "absolute") {
                    x = parseInt(img.style.left);
                    y = parseInt(img.style.top);
                } else {
                    x = (picContainer.offsetWidth - img.width) / 2;
                    y = (picContainer.offsetHeight - img.height) / 2;
                }
                context.globalCompositeOperation = "destination-over";
                context.drawImage(img, x, y, img.width, img.height);
            } else {
                context.globalCompositeOperation = "destination-atop";
                context.fillStyle = "#fff";//重置画布背景白色
                context.fillRect(0, 0, canvas.width, canvas.height);
            }
            try {
                return canvas.toDataURL("image/png").substring(22);
            } catch (e) {
                return "";
            }
        },
        btn2Highlight:function (id) {
            var cur = $G(id);
            cur.className.indexOf("H") == -1 && (cur.className += "H");
        },
        btn2disable:function (id) {
            var cur = $G(id);
            cur.className.indexOf("H") != -1 && (cur.className = cur.className.replace("H", ""));
        },
        getTarget:function (evt) {
            return evt.target || evt.srcElement;
        }
    };
})();
var ScaleBoy = function () {
    this.dom = null;
    this.scalingElement = null;
};
(function () {
    function _appendStyle() {
        var doc = document,
            head = doc.getElementsByTagName('head')[0],
            style = doc.createElement('style'),
            cssText = '.scale{visibility:hidden;cursor:move;position:absolute;left:0;top:0;width:100px;height:50px;background-color:#fff;font-size:0;line-height:0;opacity:.4;filter:Alpha(opacity=40);}'
                + '.scale span{position:absolute;left:0;top:0;width:6px;height:6px;background-color:#006DAE;}'
                + '.scale .hand0, .scale .hand7{cursor:nw-resize;}'
                + '.scale .hand1, .scale .hand6{left:50%;margin-left:-3px;cursor:n-resize;}'
                + '.scale .hand2, .scale .hand4, .scale .hand7{left:100%;margin-left:-6px;}'
                + '.scale .hand3, .scale .hand4{top:50%;margin-top:-3px;cursor:w-resize;}'
                + '.scale .hand5, .scale .hand6, .scale .hand7{margin-top:-6px;top:100%;}'
                + '.scale .hand2, .scale .hand5{cursor:ne-resize;}';
        style.type = 'text/css';
        try {
            style.appendChild(doc.createTextNode(cssText));
        } catch (e) {
            style.styleSheet.cssText = cssText;
        }
        head.appendChild(style);
    }
    function _getDom() {
        var doc = document,
            hand,
            arr = [],
            scale = doc.createElement('div');
        scale.id = 'J_scaleCon';
        scale.className = 'scale';
        for (var i = 0; i < 8; i++) {
            arr.push("<span class='hand" + i + "'></span>");
        }
        scale.innerHTML = arr.join("");
        return scale;
    }
    var rect = [
        //[left, top, width, height]
        [1, 1, -1, -1],
        [0, 1, 0, -1],
        [0, 1, 1, -1],
        [1, 0, -1, 0],
        [0, 0, 1, 0],
        [1, 0, -1, 1],
        [0, 0, 0, 1],
        [0, 0, 1, 1]
    ];
    ScaleBoy.prototype = {
        init:function () {
            _appendStyle();
            var me = this,
                scale = me.dom = _getDom();
            me.scaleMousemove.fp = me;
            domUtils.on(scale, 'mousedown', function (e) {
                var target = e.target || e.srcElement;
                me.start = {x:e.clientX, y:e.clientY};
                if (target.className.indexOf('hand') != -1) {
                    me.dir = target.className.replace('hand', '');
                }
                domUtils.on(document.body, 'mousemove', me.scaleMousemove);
                e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;
            });
            domUtils.on(document.body, 'mouseup', function (e) {
                if (me.start) {
                    domUtils.un(document.body, 'mousemove', me.scaleMousemove);
                    if (me.moved) {
                        me.updateScaledElement({position:{x:scale.style.left, y:scale.style.top}, size:{w:scale.style.width, h:scale.style.height}});
                    }
                    delete me.start;
                    delete me.moved;
                    delete me.dir;
                }
            });
            return scale;
        },
        startScale:function (objElement) {
            var me = this, Idom = me.dom;
            Idom.style.cssText = 'visibility:visible;top:' + objElement.style.top + ';left:' + objElement.style.left + ';width:' + objElement.offsetWidth + 'px;height:' + objElement.offsetHeight + 'px;';
            me.scalingElement = objElement;
        },
        updateScaledElement:function (objStyle) {
            var cur = this.scalingElement,
                pos = objStyle.position,
                size = objStyle.size;
            if (pos) {
                typeof pos.x != 'undefined' && (cur.style.left = pos.x);
                typeof pos.y != 'undefined' && (cur.style.top = pos.y);
            }
            if (size) {
                size.w && (cur.style.width = size.w);
                size.h && (cur.style.height = size.h);
            }
        },
        updateStyleByDir:function (dir, offset) {
            var me = this,
                dom = me.dom, tmp;
            rect['def'] = [1, 1, 0, 0];
            if (rect[dir][0] != 0) {
                tmp = parseInt(dom.style.left) + offset.x;
                dom.style.left = me._validScaledProp('left', tmp) + 'px';
            }
            if (rect[dir][1] != 0) {
                tmp = parseInt(dom.style.top) + offset.y;
                dom.style.top = me._validScaledProp('top', tmp) + 'px';
            }
            if (rect[dir][2] != 0) {
                tmp = dom.clientWidth + rect[dir][2] * offset.x;
                dom.style.width = me._validScaledProp('width', tmp) + 'px';
            }
            if (rect[dir][3] != 0) {
                tmp = dom.clientHeight + rect[dir][3] * offset.y;
                dom.style.height = me._validScaledProp('height', tmp) + 'px';
            }
            if (dir === 'def') {
                me.updateScaledElement({position:{x:dom.style.left, y:dom.style.top}});
            }
        },
        scaleMousemove:function (e) {
            var me = arguments.callee.fp,
                start = me.start,
                dir = me.dir || 'def',
                offset = {x:e.clientX - start.x, y:e.clientY - start.y};
            me.updateStyleByDir(dir, offset);
            arguments.callee.fp.start = {x:e.clientX, y:e.clientY};
            arguments.callee.fp.moved = 1;
        },
        _validScaledProp:function (prop, value) {
            var ele = this.dom,
                wrap = $G("J_picBoard");
            value = isNaN(value) ? 0 : value;
            switch (prop) {
                case 'left':
                    return value < 0 ? 0 : (value + ele.clientWidth) > wrap.clientWidth ? wrap.clientWidth - ele.clientWidth : value;
                case 'top':
                    return value < 0 ? 0 : (value + ele.clientHeight) > wrap.clientHeight ? wrap.clientHeight - ele.clientHeight : value;
                case 'width':
                    return value <= 0 ? 1 : (value + ele.offsetLeft) > wrap.clientWidth ? wrap.clientWidth - ele.offsetLeft : value;
                case 'height':
                    return value <= 0 ? 1 : (value + ele.offsetTop) > wrap.clientHeight ? wrap.clientHeight - ele.offsetTop : value;
            }
        }
    };
})();
//后台回调
function ue_callback(url, state) {
    var doc = document,
        picBorard = $G("J_picBoard"),
        img = doc.createElement("img");
    //图片缩放
    function scale(img, max, oWidth, oHeight) {
        var width = 0, height = 0, percent, ow = img.width || oWidth, oh = img.height || oHeight;
        if (ow > max || oh > max) {
            if (ow >= oh) {
                if (width = ow - max) {
                    percent = (width / ow).toFixed(2);
                    img.height = oh - oh * percent;
                    img.width = max;
                }
            } else {
                if (height = oh - max) {
                    percent = (height / oh).toFixed(2);
                    img.width = ow - ow * percent;
                    img.height = max;
                }
            }
        }
    }
    //移除遮罩层
    removeMaskLayer();
    //状态响应
    if (state == "SUCCESS") {
        picBorard.innerHTML = "";
        img.onload = function () {
            scale(this, 300);
            picBorard.appendChild(img);
            var obj = new scrawl();
            obj.btn2Highlight("J_removeImg");
            //trace 2457
            obj.btn2Highlight("J_sacleBoard");
        };
        img.src = url;
    } else {
        alert(state);
    }
}
//去掉遮罩层
function removeMaskLayer() {
    var maskLayer = $G("J_maskLayer");
    maskLayer.className = "maskLayerNull";
    maskLayer.innerHTML = "";
    dialog.buttons[0].setDisabled(false);
}
//添加遮罩层
function addMaskLayer(html) {
    var maskLayer = $G("J_maskLayer");
    dialog.buttons[0].setDisabled(true);
    maskLayer.className = "maskLayer";
    maskLayer.innerHTML = html;
}
//执行确认按钮方法
function exec(scrawlObj) {
    if (scrawlObj.isScrawl) {
        addMaskLayer(lang.scrawlUpLoading);
        var base64 = scrawlObj.getCanvasData();
        if (!!base64) {
            var options = {
                timeout:100000,
                onsuccess:function (xhr) {
                    if (!scrawlObj.isCancelScrawl) {
                        var responseObj;
                        responseObj = eval("(" + xhr.responseText + ")");
                        if (responseObj.state == "SUCCESS") {
                            var imgObj = {},
                                url = editor.options.scrawlUrlPrefix + responseObj.url;
                            imgObj.src = url;
                            imgObj._src = url;
                            imgObj.alt = responseObj.original || '';
                            imgObj.title = responseObj.title || '';
                            editor.execCommand("insertImage", imgObj);
                            dialog.close();
                        } else {
                            alert(responseObj.state);
                        }
                    }
                },
                onerror:function () {
                    alert(lang.imageError);
                    dialog.close();
                }
            };
            options[editor.getOpt('scrawlFieldName')] = base64;
            var actionUrl = editor.getActionUrl(editor.getOpt('scrawlActionName')),
                params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',
                url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + params);
            ajax.request(url, options);
        }
    } else {
        addMaskLayer(lang.noScarwl + "&nbsp;&nbsp;&nbsp;<input type='button' value='" + lang.continueBtn + "'  onclick='removeMaskLayer()'/>");
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/searchreplace/searchreplace.html
New file
@@ -0,0 +1,102 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title></title>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
    <script type="text/javascript" src="../internal.js"></script>
    <style type="text/css">
        .warpper{ position:relative;width: 380px; height: 100%; margin: 10px auto;}
        .tabbody{height: 160px;}
        .tabbody table{width:100%;border-collapse: separate;border-spacing: 3px;}
        .tabbody .panel{width:373px;height:100%;padding-left: 5px;position: absolute;background-color: #fff;}
        .tabbody input.int{ width:190px;height:21px;border:1px solid #d7d7d7;line-height:21px;}
        .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; }
    </style>
</head>
<body>
<div class="warpper" id="searchtab">
    <div id="head" class="tabhead">
        <span  tabsrc="find" class="focus"><var id="lang_tab_search"></var></span>
        <span  tabsrc="replace" ><var id="lang_tab_replace"></var></span>
    </div>
    <div class="tabbody">
        <div class="panel" id="find">
            <table>
                <tr>
                    <td width="80"><var id="lang_search1"></var>: </td>
                    <td><input id="findtxt" type="text" class="int" /></td>
                </tr>
                <!--<tr>-->
                    <!--<td colspan="2"><span style="color:red"><var id="lang_searchReg"></var></span></td>-->
                <!--</tr>-->
                <tr>
                    <td><var id="lang_case_sensitive1"></var></td>
                    <td>
                        <input id="matchCase" type="checkbox" />
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <input id="nextFindBtn" type="button" class="btn" />
                        <input id="preFindBtn" type="button" class="btn" />
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        &nbsp;
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <span id="search-msg" style="color:red"></span>
                    </td>
                </tr>
            </table>
        </div>
        <div class="panel" id="replace">
            <table>
                <tr>
                    <td width="80"><var id="lang_search2"></var>: </td>
                    <td><input id="findtxt1" type="text" class="int"  /></td>
                </tr>
                <!--<tr>-->
                    <!--<td colspan="2"><span style="color:red"><var id="lang_searchReg1"></var></span></td>-->
                <!--</tr>-->
                <tr>
                    <td><var id="lang_replace"></var>: </td>
                    <td><input id="replacetxt" type="text" class="int" /></td>
                </tr>
                <tr>
                    <td><var id="lang_case_sensitive2"></var></td>
                    <td>
                        <input id="matchCase1" type="checkbox" />
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <input id="nextReplaceBtn" type="button" class="btn" />
                        <input id="preReplaceBtn" type="button" class="btn" />
                        <input id="repalceBtn" type="button" class="btn" />
                        <input id="repalceAllBtn" type="button" class="btn" />
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        &nbsp;
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <span id="replace-msg" style="color:red"></span>
                    </td>
                </tr>
            </table>
        </div>
    </div>
</div>
<script type="text/javascript" src="searchreplace.js"></script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/searchreplace/searchreplace.js
New file
@@ -0,0 +1,164 @@
/**
 * Created with JetBrains PhpStorm.
 * User: xuheng
 * Date: 12-9-26
 * Time: 下午12:29
 * To change this template use File | Settings | File Templates.
 */
//清空上次查选的痕迹
editor.firstForSR = 0;
editor.currentRangeForSR = null;
//给tab注册切换事件
/**
 * tab点击处理事件
 * @param tabHeads
 * @param tabBodys
 * @param obj
 */
function clickHandler( tabHeads,tabBodys,obj ) {
    //head样式更改
    for ( var k = 0, len = tabHeads.length; k < len; k++ ) {
        tabHeads[k].className = "";
    }
    obj.className = "focus";
    //body显隐
    var tabSrc = obj.getAttribute( "tabSrc" );
    for ( var j = 0, length = tabBodys.length; j < length; j++ ) {
        var body = tabBodys[j],
            id = body.getAttribute( "id" );
        if ( id != tabSrc ) {
            body.style.zIndex = 1;
        } else {
            body.style.zIndex = 200;
        }
    }
}
/**
 * TAB切换
 * @param tabParentId  tab的父节点ID或者对象本身
 */
function switchTab( tabParentId ) {
    var tabElements = $G( tabParentId ).children,
        tabHeads = tabElements[0].children,
        tabBodys = tabElements[1].children;
    for ( var i = 0, length = tabHeads.length; i < length; i++ ) {
        var head = tabHeads[i];
        if ( head.className === "focus" )clickHandler(tabHeads,tabBodys, head );
        head.onclick = function () {
            clickHandler(tabHeads,tabBodys,this);
        }
    }
}
$G('searchtab').onmousedown = function(){
    $G('search-msg').innerHTML = '';
    $G('replace-msg').innerHTML = ''
}
//是否区分大小写
function getMatchCase(id) {
    return $G(id).checked ? true : false;
}
//查找
$G("nextFindBtn").onclick = function (txt, dir, mcase) {
    var findtxt = $G("findtxt").value, obj;
    if (!findtxt) {
        return false;
    }
    obj = {
        searchStr:findtxt,
        dir:1,
        casesensitive:getMatchCase("matchCase")
    };
    if (!frCommond(obj)) {
        var bk = editor.selection.getRange().createBookmark();
        $G('search-msg').innerHTML = lang.getEnd;
        editor.selection.getRange().moveToBookmark(bk).select();
    }
};
$G("nextReplaceBtn").onclick = function (txt, dir, mcase) {
    var findtxt = $G("findtxt1").value, obj;
    if (!findtxt) {
        return false;
    }
    obj = {
        searchStr:findtxt,
        dir:1,
        casesensitive:getMatchCase("matchCase1")
    };
    frCommond(obj);
};
$G("preFindBtn").onclick = function (txt, dir, mcase) {
    var findtxt = $G("findtxt").value, obj;
    if (!findtxt) {
        return false;
    }
    obj = {
        searchStr:findtxt,
        dir:-1,
        casesensitive:getMatchCase("matchCase")
    };
    if (!frCommond(obj)) {
        $G('search-msg').innerHTML = lang.getStart;
    }
};
$G("preReplaceBtn").onclick = function (txt, dir, mcase) {
    var findtxt = $G("findtxt1").value, obj;
    if (!findtxt) {
        return false;
    }
    obj = {
        searchStr:findtxt,
        dir:-1,
        casesensitive:getMatchCase("matchCase1")
    };
    frCommond(obj);
};
//替换
$G("repalceBtn").onclick = function () {
    var findtxt = $G("findtxt1").value.replace(/^\s|\s$/g, ""), obj,
        replacetxt = $G("replacetxt").value.replace(/^\s|\s$/g, "");
    if (!findtxt) {
        return false;
    }
    if (findtxt == replacetxt || (!getMatchCase("matchCase1") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {
        return false;
    }
    obj = {
        searchStr:findtxt,
        dir:1,
        casesensitive:getMatchCase("matchCase1"),
        replaceStr:replacetxt
    };
    frCommond(obj);
};
//全部替换
$G("repalceAllBtn").onclick = function () {
    var findtxt = $G("findtxt1").value.replace(/^\s|\s$/g, ""), obj,
        replacetxt = $G("replacetxt").value.replace(/^\s|\s$/g, "");
    if (!findtxt) {
        return false;
    }
    if (findtxt == replacetxt || (!getMatchCase("matchCase1") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {
        return false;
    }
    obj = {
        searchStr:findtxt,
        casesensitive:getMatchCase("matchCase1"),
        replaceStr:replacetxt,
        all:true
    };
    var num = frCommond(obj);
    if (num) {
        $G('replace-msg').innerHTML = lang.countMsg.replace("{#count}", num);
    }
};
//执行
var frCommond = function (obj) {
    return editor.execCommand("searchreplace", obj);
};
switchTab("searchtab");
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/snapscreen/snapscreen.html
New file
@@ -0,0 +1,58 @@
<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
        <script type="text/javascript" src="../internal.js"></script>
        <style type="text/css">
            *{color: #838383}
            html,body {
                font-size: 12px;
                width:100%;
                height:100%;
                overflow: hidden;
                margin:0px;
                padding:0px;
            }
            h2 { font-size: 16px; margin: 20px auto;}
            .content{
                padding:5px 15px 0 15px;
                height:100%;
            }
            dt,dd { margin-left: 0; padding-left: 0;}
            dt a { display: block;
                    height: 30px;
                    line-height: 30px;
                    width: 55px;
                    background: #EFEFEF;
                    border: 1px solid #CCC;
                    padding: 0 10px;
                    text-decoration: none;
            }
            dt a:hover{
                background: #e0e0e0;
                border-color: #999
            }
            dt a:active{
                background: #ccc;
                border-color: #999;
                color: #666;
            }
            dd { line-height:20px;margin-top: 10px;}
            span{ padding-right:4px;}
            input{width:210px;height:21px;background: #FFF;border:1px solid #d7d7d7;padding: 0px; margin: 0px; }
        </style>
    </head>
    <body>
        <div class="content">
            <h2><var id="lang_showMsg"></var></h2>
            <dl>
                <dt><a href="../../third-party/snapscreen/UEditorSnapscreen.exe" target="_blank" id="downlink"><var id="lang_download"></var></a></dt>
                <dd><var id="lang_step1"></var></dd>
                <dd><var id="lang_step2"></var></dd>
            </dl>
        </div>
    </body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/spechars/spechars.html
New file
@@ -0,0 +1,21 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <script type="text/javascript" src="../internal.js"></script>
    <style type="text/css">
        html,body{overflow:hidden;}
        #specharsTab{width: 97%;margin: 10px auto; zoom:1;position: relative}
        .tabbody {height:447px;}
        .tabbody span{ margin: 5px 3px;text-align: center;display:inline-block;width: 40px;height:16px;line-height: 16px;cursor: pointer; }
    </style>
</head>
<body>
    <div id="specharsTab">
        <div id="tabHeads" class="tabhead"></div><div id="tabBodys" class="tabbody"></div>
    </div>
<script type="text/javascript" src="spechars.js"></script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/spechars/spechars.js
New file
@@ -0,0 +1,57 @@
/**
 * Created with JetBrains PhpStorm.
 * User: xuheng
 * Date: 12-9-26
 * Time: 下午1:09
 * To change this template use File | Settings | File Templates.
 */
var charsContent = [
    { name:"tsfh", title:lang.tsfh, content:toArray("、,。,·,ˉ,ˇ,¨,〃,々,—,~,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,$,¤,¢,£,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,¬,¦,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞")},
    { name:"lmsz", title:lang.lmsz, content:toArray("ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ")},
    { name:"szfh", title:lang.szfh, content:toArray("⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩")},
    { name:"rwfh", title:lang.rwfh, content:toArray("ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ")},
    { name:"xlzm", title:lang.xlzm, content:toArray("Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω")},
    { name:"ewzm", title:lang.ewzm, content:toArray("А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я")},
    { name:"pyzm", title:lang.pyzm, content:toArray("ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü")},
    { name:"yyyb", title:lang.yyyb, content:toArray("i:,i,e,æ,ʌ,ə:,ə,u:,u,ɔ:,ɔ,a:,ei,ai,ɔi,əu,au,iə,εə,uə,p,t,k,b,d,g,f,s,ʃ,θ,h,v,z,ʒ,ð,tʃ,tr,ts,dʒ,dr,dz,m,n,ŋ,l,r,w,j,")},
    { name:"zyzf", title:lang.zyzf, content:toArray("ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ")}
];
(function createTab(content) {
    for (var i = 0, ci; ci = content[i++];) {
        var span = document.createElement("span");
        span.setAttribute("tabSrc", ci.name);
        span.innerHTML = ci.title;
        if (i == 1)span.className = "focus";
        domUtils.on(span, "click", function () {
            var tmps = $G("tabHeads").children;
            for (var k = 0, sk; sk = tmps[k++];) {
                sk.className = "";
            }
            tmps = $G("tabBodys").children;
            for (var k = 0, sk; sk = tmps[k++];) {
                sk.style.display = "none";
            }
            this.className = "focus";
            $G(this.getAttribute("tabSrc")).style.display = "";
        });
        $G("tabHeads").appendChild(span);
        domUtils.insertAfter(span, document.createTextNode("\n"));
        var div = document.createElement("div");
        div.id = ci.name;
        div.style.display = (i == 1) ? "" : "none";
        var cons = ci.content;
        for (var j = 0, con; con = cons[j++];) {
            var charSpan = document.createElement("span");
            charSpan.innerHTML = con;
            domUtils.on(charSpan, "click", function () {
                editor.execCommand("insertHTML", this.innerHTML);
                dialog.close();
            });
            div.appendChild(charSpan);
        }
        $G("tabBodys").appendChild(div);
    }
})(charsContent);
function toArray(str) {
    return str.split(",");
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/table/dragicon.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/table/edittable.css
New file
@@ -0,0 +1,84 @@
body{
    overflow: hidden;
    width: 540px;
}
.wrapper {
    margin: 10px auto 0;
    font-size: 12px;
    overflow: hidden;
    width: 520px;
    height: 315px;
}
.clear {
    clear: both;
}
.wrapper .left {
    float: left;
    margin-left: 10px;;
}
.wrapper .right {
    float: right;
    border-left: 2px dotted #EDEDED;
    padding-left: 15px;
}
.section {
    margin-bottom: 15px;
    width: 240px;
    overflow: hidden;
}
.section h3 {
    font-weight: bold;
    padding: 5px 0;
    margin-bottom: 10px;
    border-bottom: 1px solid #EDEDED;
    font-size: 12px;
}
.section ul {
    list-style: none;
    overflow: hidden;
    clear: both;
}
.section li {
    float: left;
    width: 120px;;
}
.section .tone {
    width: 80px;;
}
.section .preview {
    width: 220px;
}
.section .preview table {
    text-align: center;
    vertical-align: middle;
    color: #666;
}
.section .preview caption {
    font-weight: bold;
}
.section .preview td {
    border-width: 1px;
    border-style: solid;
    height: 22px;
}
.section .preview th {
    border-style: solid;
    border-color: #DDD;
    border-width: 2px 1px 1px 1px;
    height: 22px;
    background-color: #F7F7F7;
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/table/edittable.html
New file
@@ -0,0 +1,64 @@
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="../internal.js"></script>
    <link rel="stylesheet" type="text/css" href="edittable.css">
</head>
<body>
<div class="wrapper">
    <div class="left">
        <div class="section">
            <h3><var id="lang_tableStyle"></var></h3>
            <ul>
                <li>
                    <label onselectstart="return false"><input type="checkbox" id="J_title" name="style"/><var id="lang_insertTitle"></var></label>
                </li>
                <li>
                    <label onselectstart="return false"><input type="checkbox" id="J_titleCol" name="style"/><var id="lang_insertTitleCol"></var></label>
                </li>
            </ul>
            <ul>
                <li>
                    <label onselectstart="return false"><input type="checkbox" id="J_caption" name="style"/><var id="lang_insertCaption"></var></label>
                </li>
                <li>
                    <label onselectstart="return false"><input type="checkbox" id="J_sorttable" name="style"/><var id="lang_orderbycontent"></var></label>
                </li>
            </ul>
            <div class="clear"></div>
        </div>
        <div class="section">
            <h3><var id="lang_tableSize"></var></h3>
            <ul>
                <li>
                    <label><input type="radio" id="J_autoSizeContent" name="size"/><var id="lang_autoSizeContent"></var></label>
                </li>
                <li>
                    <label><input type="radio" id="J_autoSizePage" name="size"/><var id="lang_autoSizePage"></var></label>
                </li>
            </ul>
            <div class="clear"></div>
        </div>
        <div class="section">
            <h3><var id="lang_borderStyle"></var></h3>
            <ul>
                <li>
                    <span><var id="lang_color"></var></span>
                    <input type="text" class="tone" id="J_tone" readonly='readonly' />
                </li>
            </ul>
            <div class="clear"></div>
        </div>
    </div>
    <div class="right">
        <div class="section">
            <h3><var id="lang_example"></var></h3>
            <div class="preview" id="J_preview">
            </div>
        </div>
    </div>
</div>
<script type="text/javascript" src="edittable.js"></script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/table/edittable.js
New file
@@ -0,0 +1,237 @@
/**
 * Created with JetBrains PhpStorm.
 * User: xuheng
 * Date: 12-12-19
 * Time: 下午4:55
 * To change this template use File | Settings | File Templates.
 */
(function () {
    var title = $G("J_title"),
        titleCol = $G("J_titleCol"),
        caption = $G("J_caption"),
        sorttable = $G("J_sorttable"),
        autoSizeContent = $G("J_autoSizeContent"),
        autoSizePage = $G("J_autoSizePage"),
        tone = $G("J_tone"),
        me,
        preview = $G("J_preview");
    var editTable = function () {
        me = this;
        me.init();
    };
    editTable.prototype = {
        init:function () {
            var colorPiker = new UE.ui.ColorPicker({
                    editor:editor
                }),
                colorPop = new UE.ui.Popup({
                    editor:editor,
                    content:colorPiker
                });
            title.checked = editor.queryCommandState("inserttitle") == -1;
            titleCol.checked = editor.queryCommandState("inserttitlecol") == -1;
            caption.checked = editor.queryCommandState("insertcaption") == -1;
            sorttable.checked = editor.queryCommandState("enablesort") == 1;
            var enablesortState = editor.queryCommandState("enablesort"),
                disablesortState = editor.queryCommandState("disablesort");
            sorttable.checked = !!(enablesortState < 0 && disablesortState >=0);
            sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0);
            sorttable.title = enablesortState < 0 && disablesortState < 0 ? lang.errorMsg:'';
            me.createTable(title.checked, titleCol.checked, caption.checked);
            me.setAutoSize();
            me.setColor(me.getColor());
            domUtils.on(title, "click", me.titleHanler);
            domUtils.on(titleCol, "click", me.titleColHanler);
            domUtils.on(caption, "click", me.captionHanler);
            domUtils.on(sorttable, "click", me.sorttableHanler);
            domUtils.on(autoSizeContent, "click", me.autoSizeContentHanler);
            domUtils.on(autoSizePage, "click", me.autoSizePageHanler);
            domUtils.on(tone, "click", function () {
                colorPop.showAnchor(tone);
            });
            domUtils.on(document, 'mousedown', function () {
                colorPop.hide();
            });
            colorPiker.addListener("pickcolor", function () {
                me.setColor(arguments[1]);
                colorPop.hide();
            });
            colorPiker.addListener("picknocolor", function () {
                me.setColor("");
                colorPop.hide();
            });
        },
        createTable:function (hasTitle, hasTitleCol, hasCaption) {
            var arr = [],
                sortSpan = '<span>^</span>';
            arr.push("<table id='J_example'>");
            if (hasCaption) {
                arr.push("<caption>" + lang.captionName + "</caption>")
            }
            if (hasTitle) {
                arr.push("<tr>");
                if(hasTitleCol) { arr.push("<th>" + lang.titleName + "</th>"); }
                for (var j = 0; j < 5; j++) {
                    arr.push("<th>" + lang.titleName + "</th>");
                }
                arr.push("</tr>");
            }
            for (var i = 0; i < 6; i++) {
                arr.push("<tr>");
                if(hasTitleCol) { arr.push("<th>" + lang.titleName + "</th>") }
                for (var k = 0; k < 5; k++) {
                    arr.push("<td>" + lang.cellsName + "</td>")
                }
                arr.push("</tr>");
            }
            arr.push("</table>");
            preview.innerHTML = arr.join("");
            this.updateSortSpan();
        },
        titleHanler:function () {
            var example = $G("J_example"),
                frg=document.createDocumentFragment(),
                color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"),
                colCount = example.rows[0].children.length;
            if (title.checked) {
                example.insertRow(0);
                for (var i = 0, node; i < colCount; i++) {
                    node = document.createElement("th");
                    node.innerHTML = lang.titleName;
                    frg.appendChild(node);
                }
                example.rows[0].appendChild(frg);
            } else {
                domUtils.remove(example.rows[0]);
            }
            me.setColor(color);
            me.updateSortSpan();
        },
        titleColHanler:function () {
            var example = $G("J_example"),
                color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"),
                colArr = example.rows,
                colCount = colArr.length;
            if (titleCol.checked) {
                for (var i = 0, node; i < colCount; i++) {
                    node = document.createElement("th");
                    node.innerHTML = lang.titleName;
                    colArr[i].insertBefore(node, colArr[i].children[0]);
                }
            } else {
                for (var i = 0; i < colCount; i++) {
                    domUtils.remove(colArr[i].children[0]);
                }
            }
            me.setColor(color);
            me.updateSortSpan();
        },
        captionHanler:function () {
            var example = $G("J_example");
            if (caption.checked) {
                var row = document.createElement('caption');
                row.innerHTML = lang.captionName;
                example.insertBefore(row, example.firstChild);
            } else {
                domUtils.remove(domUtils.getElementsByTagName(example, 'caption')[0]);
            }
        },
        sorttableHanler:function(){
            me.updateSortSpan();
        },
        autoSizeContentHanler:function () {
            var example = $G("J_example");
            example.removeAttribute("width");
        },
        autoSizePageHanler:function () {
            var example = $G("J_example");
            var tds = example.getElementsByTagName(example, "td");
            utils.each(tds, function (td) {
                td.removeAttribute("width");
            });
            example.setAttribute('width', '100%');
        },
        updateSortSpan: function(){
            var example = $G("J_example"),
                row = example.rows[0];
            var spans = domUtils.getElementsByTagName(example,"span");
            utils.each(spans,function(span){
                span.parentNode.removeChild(span);
            });
            if (sorttable.checked) {
                utils.each(row.cells, function(cell, i){
                    var span = document.createElement("span");
                    span.innerHTML = "^";
                    cell.appendChild(span);
                });
            }
        },
        getColor:function () {
            var start = editor.selection.getStart(), color,
                cell = domUtils.findParentByTagName(start, ["td", "th", "caption"], true);
            color = cell && domUtils.getComputedStyle(cell, "border-color");
            if (!color)  color = "#DDDDDD";
            return color;
        },
        setColor:function (color) {
            var example = $G("J_example"),
                arr = domUtils.getElementsByTagName(example, "td").concat(
                    domUtils.getElementsByTagName(example, "th"),
                    domUtils.getElementsByTagName(example, "caption")
                );
            tone.value = color;
            utils.each(arr, function (node) {
                node.style.borderColor = color;
            });
        },
        setAutoSize:function () {
            var me = this;
            autoSizePage.checked = true;
            me.autoSizePageHanler();
        }
    };
    new editTable;
    dialog.onok = function () {
        editor.__hasEnterExecCommand = true;
        var checks = {
            title:"inserttitle deletetitle",
            titleCol:"inserttitlecol deletetitlecol",
            caption:"insertcaption deletecaption",
            sorttable:"enablesort disablesort"
        };
        editor.fireEvent('saveScene');
        for(var i in checks){
            var cmds = checks[i].split(" "),
                input = $G("J_" + i);
            if(input["checked"]){
                editor.queryCommandState(cmds[0])!=-1 &&editor.execCommand(cmds[0]);
            }else{
                editor.queryCommandState(cmds[1])!=-1 &&editor.execCommand(cmds[1]);
            }
        }
        editor.execCommand("edittable", tone.value);
        autoSizeContent.checked ?editor.execCommand('adaptbytext') : "";
        autoSizePage.checked ? editor.execCommand("adaptbywindow") : "";
        editor.fireEvent('saveScene');
        editor.__hasEnterExecCommand = false;
    };
})();
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/table/edittd.html
New file
@@ -0,0 +1,61 @@
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="../internal.js"></script>
    <style type="text/css">
        .section {
            text-align: center;
            margin-top: 10px;
        }
        .section input {
            margin-left: 5px;
            width: 70px;
        }
    </style>
</head>
<body>
<div class="section">
    <span><var id="lang_tdBkColor"></var></span>
    <input type="text" id="J_tone"/>
</div>
<script type="text/javascript">
    var tone = $G("J_tone"),
            colorPiker = new UE.ui.ColorPicker({
                editor:editor
            }),
            colorPop = new UE.ui.Popup({
                editor:editor,
                content:colorPiker
            });
    domUtils.on(tone, "click", function () {
        colorPop.showAnchor(tone);
    });
    domUtils.on(document, 'mousedown', function () {
        colorPop.hide();
    });
    colorPiker.addListener("pickcolor", function () {
        tone.value = arguments[1];
        colorPop.hide();
    });
    colorPiker.addListener("picknocolor", function () {
        tone.value="";
        colorPop.hide();
    });
    dialog.onok=function(){
        editor.execCommand("edittd",tone.value);
    };
    var start = editor.selection.getStart(),
        cell = start && domUtils.findParentByTagName(start, ["td", "th"], true);
    if(cell){
        var color = domUtils.getComputedStyle(cell,'background-color');
        if(/^#/.test(color)){
            tone.value = color
        }
    }
</script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/table/edittip.html
New file
@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
    <title>表格删除提示</title>
    <script type="text/javascript" src="../internal.js"></script>
    <style type="text/css">
        .section {
            width: 200px;
            margin: 10px auto 0;
            font-size: 14px;
        }
        .item {
            text-align: center;
        }
    </style>
</head>
<body>
<div class="section">
    <div class="item">
        <label><input type="radio" id="J_delRow" name="cmd" checked/><var id="lang_delRow"></var></label>
    </div>
    <div class="item">
        <label><input type="radio" id="J_delCol" name="cmd"/><var id="lang_delCol"></var></label>
    </div>
</div>
<script type="text/javascript">
    dialog.onok = function () {
        $G("J_delRow").checked ? editor.execCommand("deleterow") : editor.execCommand("deletecol");
    };
</script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/config.js
New file
@@ -0,0 +1,42 @@
/**
 * Created with JetBrains PhpStorm.
 * User: xuheng
 * Date: 12-8-8
 * Time: 下午2:00
 * To change this template use File | Settings | File Templates.
 */
var templates = [
    {
        "pre":"pre0.png",
        'title':lang.blank,
        'preHtml':'<p class="ue_t">&nbsp;欢迎使用UEditor!</p>',
        "html":'<p class="ue_t">欢迎使用UEditor!</p>'
    },
    {
        "pre":"pre1.png",
        'title':lang.blog,
        'preHtml':'<h1 label="Title center" name="tc" style="border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;"><span style="color:#c0504d;">深入理解Range</span></h1><p style="text-align:center;"><strong class=" ">UEditor二次开发</strong></p><h3><span class=" " style="font-family:幼圆">什么是Range</span></h3><p style="text-indent:2em;">对于“插入”选项卡上的库,在设计时都充分考虑了其中的项与文档整体外观的协调性。 </p><br /><h3><span class=" " style="font-family:幼圆">Range能干什么</span></h3><p style="text-indent:2em;">在“开始”选项卡上,通过从快速样式库中为所选文本选择一种外观,您可以方便地更改文档中所选文本的格式。</p>',
        "html":'<h1 class="ue_t" label="Title center" name="tc" style="border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;"><span style="color:#c0504d;">[键入文档标题]</span></h1><p style="text-align:center;"><strong class="ue_t">[键入文档副标题]</strong></p><h3><span class="ue_t" style="font-family:幼圆">[标题 1]</span></h3><p class="ue_t"  style="text-indent:2em;">对于“插入”选项卡上的库,在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><h3><span class="ue_t" style="font-family:幼圆">[标题 2]</span></h3><p class="ue_t"  style="text-indent:2em;">在“开始”选项卡上,通过从快速样式库中为所选文本选择一种外观,您可以方便地更改文档中所选文本的格式。 您还可以使用“开始”选项卡上的其他控件来直接设置文本格式。大多数控件都允许您选择是使用当前主题外观,还是使用某种直接指定的格式。 </p><h3><span class="ue_t" style="font-family:幼圆">[标题 3]</span></h3><p class="ue_t">对于“插入”选项卡上的库,在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><p class="ue_t"><br /></p>'
    },
    {
        "pre":"pre2.png",
        'title':lang.resume,
        'preHtml':'<h1 label="Title left" name="tl" style="border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;"><span style="color:#e36c09;" class=" ">WEB前端开发简历</span></h1><table width="100%" border="1" bordercolor="#95B3D7" style="border-collapse:collapse;"><tbody><tr><td width="100" style="text-align:center;"><p><span style="background-color:transparent;">插</span><br /></p><p>入</p><p>照</p><p>片</p></td><td><p><span style="background-color:transparent;"> 联系电话:</span><span class="ue_t" style="background-color:transparent;">[键入您的电话]</span><br /></p><p><span style="background-color:transparent;"> 电子邮件:</span><span class="ue_t" style="background-color:transparent;">[键入您的电子邮件地址]</span><br /></p><p><span style="background-color:transparent;"> 家庭住址:</span><span class="ue_t" style="background-color:transparent;">[键入您的地址]</span><br /></p></td></tr></tbody></table><h3><span style="color:#E36C09;font-size:20px;">目标职位</span></h3><p style="text-indent:2em;" class=" ">WEB前端研发工程师</p><h3><span style="color:#e36c09;font-size:20px;">学历</span></h3><p><span style="display:none;line-height:0px;" id="_baidu_bookmark_start_26"></span></p><ol style="list-style-type:decimal;"><li><p><span class="ue_t">[起止时间]</span> <span class="ue_t">[学校名称] </span> <span class="ue_t">[所学专业]</span> <span class="ue_t">[所获学位]</span></p></li></ol><h3><span style="color:#e36c09;font-size:20px;" class="ue_t">工作经验</span></h3><p><br /></p>',
        "html":'<h1 label="Title left" name="tl" style="border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;"><span style="color:#e36c09;" class="ue_t">[此处键入简历标题]</span></h1><p><span style="color:#e36c09;"><br /></span></p><table width="100%" border="1" bordercolor="#95B3D7" style="border-collapse:collapse;"><tbody><tr><td width="200" style="text-align:center;" class="ue_t">【此处插入照片】</td><td><p><br /></p><p> 联系电话:<span class="ue_t">[键入您的电话]</span></p><p><br /></p><p> 电子邮件:<span class="ue_t">[键入您的电子邮件地址]</span></p><p><br /></p><p> 家庭住址:<span class="ue_t">[键入您的地址]</span></p><p><br /></p></td></tr></tbody></table><h3><span style="color:#e36c09;font-size:20px;">目标职位</span></h3><p style="text-indent:2em;" class="ue_t">[此处键入您的期望职位]</p><h3><span style="color:#e36c09;font-size:20px;">学历</span></h3><p><span style="display:none;line-height:0px;" id="_baidu_bookmark_start_26"></span></p><ol style="list-style-type:decimal;"><li><p><span class="ue_t">[键入起止时间]</span> <span class="ue_t">[键入学校名称] </span> <span class="ue_t">[键入所学专业]</span> <span class="ue_t">[键入所获学位]</span></p></li><li><p><span class="ue_t">[键入起止时间]</span> <span class="ue_t">[键入学校名称]</span> <span class="ue_t">[键入所学专业]</span> <span class="ue_t">[键入所获学位]</span></p></li></ol><h3><span style="color:#e36c09;font-size:20px;" class="ue_t">工作经验</span></h3><ol style="list-style-type:decimal;"><li><p><span class="ue_t">[键入起止时间]</span> <span class="ue_t">[键入公司名称]</span> <span class="ue_t">[键入职位名称]</span> </p></li><ol style="list-style-type:lower-alpha;"><li><p><span class="ue_t">[键入负责项目]</span> <span class="ue_t">[键入项目简介]</span></p></li><li><p><span class="ue_t">[键入负责项目]</span> <span class="ue_t">[键入项目简介]</span></p></li></ol><li><p><span class="ue_t">[键入起止时间]</span> <span class="ue_t">[键入公司名称]</span> <span class="ue_t">[键入职位名称]</span> </p></li><ol style="list-style-type:lower-alpha;"><li><p><span class="ue_t">[键入负责项目]</span> <span class="ue_t">[键入项目简介]</span></p></li></ol></ol><p><span style="color:#e36c09;font-size:20px;">掌握技能</span></p><p style="text-indent:2em;"> &nbsp;<span class="ue_t">[这里可以键入您所掌握的技能]</span><br /></p>'
    },
    {
        "pre":"pre3.png",
        'title':lang.richText,
        'preHtml':'<h1 label="Title center" name="tc" style="border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;" class="ue_t">[此处键入文章标题]</h1><p><img src="http://img.baidu.com/hi/youa/y_0034.gif" width="150" height="100" border="0" hspace="0" vspace="0" style="width:150px;height:100px;float:left;" />图文混排方法</p><p>图片居左,文字围绕图片排版</p><p>方法:在文字前面插入图片,设置居左对齐,然后即可在右边输入多行文</p><p><br /></p><p><img src="http://img.baidu.com/hi/youa/y_0040.gif" width="100" height="100" border="0" hspace="0" vspace="0" style="width:100px;height:100px;float:right;" /></p><p>还有没有什么其他的环绕方式呢?这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试,为UEditor提供更多高质量模板!</p>',
        "html":'<p><br /></p><h1 label="Title center" name="tc" style="border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;" class="ue_t">[此处键入文章标题]</h1><p><img src="http://img.baidu.com/hi/youa/y_0034.gif" width="300" height="200" border="0" hspace="0" vspace="0" style="width:300px;height:200px;float:left;" />图文混排方法</p><p>1. 图片居左,文字围绕图片排版</p><p>方法:在文字前面插入图片,设置居左对齐,然后即可在右边输入多行文本</p><p><br /></p><p>2. 图片居右,文字围绕图片排版</p><p>方法:在文字前面插入图片,设置居右对齐,然后即可在左边输入多行文本</p><p><br /></p><p>3. 图片居中环绕排版</p><p>方法:亲,这个真心没有办法。。。</p><p><br /></p><p><br /></p><p><img src="http://img.baidu.com/hi/youa/y_0040.gif" width="300" height="300" border="0" hspace="0" vspace="0" style="width:300px;height:300px;float:right;" /></p><p>还有没有什么其他的环绕方式呢?这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试,为UEditor提供更多高质量模板!</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p><br /></p>'
    },
    {
        "pre":"pre4.png",
        'title':lang.sciPapers,
        'preHtml':'<h2 style="border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;" class="ue_t">[键入文章标题]</h2><p><strong><span style="font-size:12px;">摘要</span></strong><span style="font-size:12px;" class="ue_t">:这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style="line-height:1.5em;"><strong>标题 1</strong></p><p style="text-indent:2em;"><span style="font-size:14px;" class="ue_t">这里可以输入很多内容,可以图文混排,可以有列表等。</span></p><p style="line-height:1.5em;"><strong>标题 2</strong></p><ol style="list-style-type:lower-alpha;"><li><p class="ue_t">列表 1</p></li><li><p class="ue_t">列表 2</p></li><ol style="list-style-type:lower-roman;"><li><p class="ue_t">多级列表 1</p></li><li><p class="ue_t">多级列表 2</p></li></ol><li><p class="ue_t">列表 3<br /></p></li></ol><p style="line-height:1.5em;"><strong>标题 3</strong></p><p style="text-indent:2em;"><span style="font-size:14px;" class="ue_t">来个文字图文混排的</span></p><p style="text-indent:2em;"><br /></p>',
        'html':'<h2 style="border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;" class="ue_t">[键入文章标题]</h2><p><strong><span style="font-size:12px;">摘要</span></strong><span style="font-size:12px;" class="ue_t">:这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style="line-height:1.5em;"><strong>标题 1</strong></p><p style="text-indent:2em;"><span style="font-size:14px;" class="ue_t">这里可以输入很多内容,可以图文混排,可以有列表等。</span></p><p style="line-height:1.5em;"><strong>标题 2</strong></p><p style="text-indent:2em;"><span style="font-size:14px;" class="ue_t">来个列表瞅瞅:</span></p><ol style="list-style-type:lower-alpha;"><li><p class="ue_t">列表 1</p></li><li><p class="ue_t">列表 2</p></li><ol style="list-style-type:lower-roman;"><li><p class="ue_t">多级列表 1</p></li><li><p class="ue_t">多级列表 2</p></li></ol><li><p class="ue_t">列表 3<br /></p></li></ol><p style="line-height:1.5em;"><strong>标题 3</strong></p><p style="text-indent:2em;"><span style="font-size:14px;" class="ue_t">来个文字图文混排的</span></p><p style="text-indent:2em;"><span style="font-size:14px;" class="ue_t">这里可以多行</span></p><p style="text-indent:2em;"><span style="font-size:14px;" class="ue_t">右边是图片</span></p><p style="text-indent:2em;"><span style="font-size:14px;" class="ue_t">绝对没有问题的,不信你也可以试试看</span></p><p><br /></p>'
    }
];
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/images/bg.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/images/pre0.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/images/pre1.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/images/pre2.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/images/pre3.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/images/pre4.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/template.css
New file
@@ -0,0 +1,18 @@
.wrap{ padding: 5px;font-size: 14px;}
.left{width:425px;float: left;}
.right{width:160px;border: 1px solid #ccc;float: right;padding: 5px;margin-right: 5px;}
.right .pre{height: 332px;overflow-y: auto;}
.right .preitem{border: white 1px solid;margin: 5px 0;padding: 2px 0;}
.right .preitem:hover{background-color: lemonChiffon;cursor: pointer;border: #ccc 1px solid;}
.right .preitem img{display: block;margin: 0 auto;width:100px;}
.clear{clear: both;}
.top{height:26px;line-height: 26px;padding: 5px;}
.bottom{height:320px;width:100%;margin: 0 auto;}
.transparent{ background: url("images/bg.gif") repeat;}
.bottom table tr td{border:1px dashed #ccc;}
#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;}
.border_style1{padding:2px;border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;}
p{margin: 5px 0}
table{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all;}
li{clear:both}
ol{padding-left:40px; }
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/template.html
New file
@@ -0,0 +1,26 @@
<!DOCTYPE HTML>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <script type="text/javascript" src="../internal.js"></script>
    <link rel="stylesheet" type="text/css" href="template.css">
</head>
<body>
    <div class="wrap">
        <div class="left">
            <div class="top">
                <label><var id="lang_template_clear"></var>:<input id="issave" type="checkbox"></label>
            </div>
            <div class="bottom border_style1" id="preview"></div>
        </div>
        <fieldset  class="right border_style1">
            <legend><var id="lang_template_select"></var></legend>
            <div class="pre" id="preitem"></div>
        </fieldset>
        <div class="clear"></div>
    </div>
    <script type="text/javascript" src="config.js"></script>
    <script type="text/javascript" src="template.js"></script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/template/template.js
New file
@@ -0,0 +1,53 @@
/**
 * Created with JetBrains PhpStorm.
 * User: xuheng
 * Date: 12-8-8
 * Time: 下午2:09
 * To change this template use File | Settings | File Templates.
 */
(function () {
    var me = editor,
            preview = $G( "preview" ),
            preitem = $G( "preitem" ),
            tmps = templates,
            currentTmp;
    var initPre = function () {
        var str = "";
        for ( var i = 0, tmp; tmp = tmps[i++]; ) {
            str += '<div class="preitem" onclick="pre(' + i + ')"><img src="' + "images/" + tmp.pre + '" ' + (tmp.title ? "alt=" + tmp.title + " title=" + tmp.title + "" : "") + '></div>';
        }
        preitem.innerHTML = str;
    };
    var pre = function ( n ) {
        var tmp = tmps[n - 1];
        currentTmp = tmp;
        clearItem();
        domUtils.setStyles( preitem.childNodes[n - 1], {
            "background-color":"lemonChiffon",
            "border":"#ccc 1px solid"
        } );
        preview.innerHTML = tmp.preHtml ? tmp.preHtml : "";
    };
    var clearItem = function () {
        var items = preitem.children;
        for ( var i = 0, item; item = items[i++]; ) {
            domUtils.setStyles( item, {
                "background-color":"",
                "border":"white 1px solid"
            } );
        }
    };
    dialog.onok = function () {
        if ( !$G( "issave" ).checked ){
            me.execCommand( "cleardoc" );
        }
        var obj = {
            html:currentTmp && currentTmp.html
        };
        me.execCommand( "template", obj );
    };
    initPre();
    window.pre = pre;
    pre(2)
})();
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/bg.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/center_focus.jpg
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/file-icons.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/file-icons.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/icons.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/icons.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/image.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/left_focus.jpg
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/none_focus.jpg
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/progress.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/right_focus.jpg
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/success.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/images/success.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/video.css
New file
@@ -0,0 +1,635 @@
@charset "utf-8";
.wrapper{ width: 570px;_width:575px;margin: 10px auto; zoom:1;position: relative}
.tabbody{height: 335px;}
.tabbody .panel {
    position: absolute;
    width: 0;
    height: 0;
    background: #fff;
    overflow: hidden;
    display: none;
}
.tabbody .panel.focus {
    width: 100%;
    height: 335px;
    display: block;
}
.tabbody .panel table td{vertical-align: middle;}
#videoUrl {
    width: 490px;
    height: 21px;
    line-height: 21px;
    margin: 8px 5px;
    background: #FFF;
    border: 1px solid #d7d7d7;
}
#videoSearchTxt{margin-left:15px;background: #FFF;width:200px;height:21px;line-height:21px;border: 1px solid #d7d7d7;}
#searchList{width: 570px;overflow: auto;zoom:1;height: 270px;}
#searchList div{float: left;width: 120px;height: 135px;margin: 5px 15px;}
#searchList img{margin: 2px 8px;cursor: pointer;border: 2px solid #fff} /*不用缩略图*/
#searchList p{margin-left: 10px;}
#videoType{
    width: 65px;
    height: 23px;
    line-height: 22px;
    border: 1px solid #d7d7d7;
}
#videoSearchBtn,#videoSearchReset{
    /*width: 80px;*/
    height: 25px;
    line-height: 25px;
    background: #eee;
    border: 1px solid #d7d7d7;
    cursor: pointer;
    padding: 0 5px;
}
#preview{position: relative;width: 420px;padding:0;overflow: hidden; margin-left: 10px; _margin-left:5px; height: 280px;background-color: #ddd;float: left}
#preview .previewMsg {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;background-color: #666;}
#preview .previewMsg span{display:block;margin: 125px auto 0 auto;text-align:center;font-size:18px;color:#fff;}
#preview .previewVideo {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;}
.edui-video-wrapper fieldset{
    border: 1px solid #ddd;
    padding-left: 5px;
    margin-bottom: 20px;
    padding-bottom: 5px;
    width: 115px;
}
#videoInfo {width: 120px;float: left;margin-left: 10px;_margin-left:7px;}
fieldset{
    border: 1px solid #ddd;
    padding-left: 5px;
    margin-bottom: 20px;
    padding-bottom: 5px;
    width: 115px;
}
fieldset legend{font-weight: bold;}
fieldset p{line-height: 30px;}
fieldset input.txt{
    width: 65px;
    height: 21px;
    line-height: 21px;
    margin: 8px 5px;
    background: #FFF;
    border: 1px solid #d7d7d7;
}
label.url{font-weight: bold;margin-left: 5px;color: #06c;}
#videoFloat div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;}
#videoFloat .focus{opacity: 1;filter: alpha(opacity = 100)}
span.view{display: inline-block;width: 30px;float: right;cursor: pointer;color: blue}
/* upload video */
.tabbody #upload.panel {
    width: 0;
    height: 0;
    overflow: hidden;
    position: absolute !important;
    clip: rect(1px, 1px, 1px, 1px);
    background: #fff;
    display: block;
}
.tabbody #upload.panel.focus {
    width: 100%;
    height: 335px;
    display: block;
    clip: auto;
}
#upload_alignment div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;}
#upload_alignment .focus{opacity: 1;filter: alpha(opacity = 100)}
#upload_left { width:427px; float:left; }
#upload_left .controller { height: 30px; clear: both; }
#uploadVideoInfo{margin-top:10px;float:right;padding-right:8px;}
#upload .queueList {
    margin: 0;
}
#upload p {
    margin: 0;
}
.element-invisible {
    width: 0 !important;
    height: 0 !important;
    border: 0;
    padding: 0;
    margin: 0;
    overflow: hidden;
    position: absolute !important;
    clip: rect(1px, 1px, 1px, 1px);
}
#upload .placeholder {
    margin: 10px;
    margin-right:0;
    border: 2px dashed #e6e6e6;
    *border: 0px dashed #e6e6e6;
    height: 161px;
    padding-top: 150px;
    text-align: center;
    width: 97%;
    float: left;
    background: url(./images/image.png) center 70px no-repeat;
    color: #cccccc;
    font-size: 18px;
    position: relative;
    top:0;
    *margin-left: 0;
    *left: 10px;
}
#upload .placeholder .webuploader-pick {
    font-size: 18px;
    background: #00b7ee;
    border-radius: 3px;
    line-height: 44px;
    padding: 0 30px;
    *width: 120px;
    color: #fff;
    display: inline-block;
    margin: 0 auto 20px auto;
    cursor: pointer;
    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
}
#upload .placeholder .webuploader-pick-hover {
    background: #00a2d4;
}
#filePickerContainer {
    text-align: center;
}
#upload .placeholder .flashTip {
    color: #666666;
    font-size: 12px;
    position: absolute;
    width: 100%;
    text-align: center;
    bottom: 20px;
}
#upload .placeholder .flashTip a {
    color: #0785d1;
    text-decoration: none;
}
#upload .placeholder .flashTip a:hover {
    text-decoration: underline;
}
#upload .placeholder.webuploader-dnd-over {
    border-color: #999999;
}
#upload .filelist {
    list-style: none;
    margin: 0;
    padding: 0;
    overflow-x: hidden;
    overflow-y: auto;
    position: relative;
    height: 285px;
}
#upload .filelist:after {
    content: '';
    display: block;
    width: 0;
    height: 0;
    overflow: hidden;
    clear: both;
}
#upload .filelist li {
    width: 113px;
    height: 113px;
    background: url(./images/bg.png);
    text-align: center;
    margin: 15px 0 0 20px;
    *margin: 15px 0 0 15px;
    position: relative;
    display: block;
    float: left;
    overflow: hidden;
    font-size: 12px;
}
#upload .filelist li p.log {
    position: relative;
    top: -45px;
}
#upload .filelist li p.title {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    top: 5px;
    text-indent: 5px;
    text-align: left;
}
#upload .filelist li p.progress {
    position: absolute;
    width: 100%;
    bottom: 0;
    left: 0;
    height: 8px;
    overflow: hidden;
    z-index: 50;
    margin: 0;
    border-radius: 0;
    background: none;
    -webkit-box-shadow: 0 0 0;
}
#upload .filelist li p.progress span {
    display: none;
    overflow: hidden;
    width: 0;
    height: 100%;
    background: #1483d8 url(./images/progress.png) repeat-x;
    -webit-transition: width 200ms linear;
    -moz-transition: width 200ms linear;
    -o-transition: width 200ms linear;
    -ms-transition: width 200ms linear;
    transition: width 200ms linear;
    -webkit-animation: progressmove 2s linear infinite;
    -moz-animation: progressmove 2s linear infinite;
    -o-animation: progressmove 2s linear infinite;
    -ms-animation: progressmove 2s linear infinite;
    animation: progressmove 2s linear infinite;
    -webkit-transform: translateZ(0);
}
@-webkit-keyframes progressmove {
    0% {
        background-position: 0 0;
    }
    100% {
        background-position: 17px 0;
    }
}
@-moz-keyframes progressmove {
    0% {
        background-position: 0 0;
    }
    100% {
        background-position: 17px 0;
    }
}
@keyframes progressmove {
    0% {
        background-position: 0 0;
    }
    100% {
        background-position: 17px 0;
    }
}
#upload .filelist li p.imgWrap {
    position: relative;
    z-index: 2;
    line-height: 113px;
    vertical-align: middle;
    overflow: hidden;
    width: 113px;
    height: 113px;
    -webkit-transform-origin: 50% 50%;
    -moz-transform-origin: 50% 50%;
    -o-transform-origin: 50% 50%;
    -ms-transform-origin: 50% 50%;
    transform-origin: 50% 50%;
    -webit-transition: 200ms ease-out;
    -moz-transition: 200ms ease-out;
    -o-transition: 200ms ease-out;
    -ms-transition: 200ms ease-out;
    transition: 200ms ease-out;
}
#upload .filelist li p.imgWrap.notimage {
    margin-top: 0;
    width: 111px;
    height: 111px;
    border: 1px #eeeeee solid;
}
#upload .filelist li p.imgWrap.notimage i.file-preview {
    margin-top: 15px;
}
#upload .filelist li img {
    width: 100%;
}
#upload .filelist li p.error {
    background: #f43838;
    color: #fff;
    position: absolute;
    bottom: 0;
    left: 0;
    height: 28px;
    line-height: 28px;
    width: 100%;
    z-index: 100;
    display:none;
}
#upload .filelist li .success {
    display: block;
    position: absolute;
    left: 0;
    bottom: 0;
    height: 40px;
    width: 100%;
    z-index: 200;
    background: url(./images/success.png) no-repeat right bottom;
    background-image: url(./images/success.gif) \9;
}
#upload .filelist li.filePickerBlock {
    width: 113px;
    height: 113px;
    background: url(./images/image.png) no-repeat center 12px;
    border: 1px solid #eeeeee;
    border-radius: 0;
}
#upload .filelist li.filePickerBlock div.webuploader-pick  {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    opacity: 0;
    background: none;
    font-size: 0;
}
#upload .filelist div.file-panel {
    position: absolute;
    height: 0;
    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0;
    background: rgba(0, 0, 0, 0.5);
    width: 100%;
    top: 0;
    left: 0;
    overflow: hidden;
    z-index: 300;
}
#upload .filelist div.file-panel span {
    width: 24px;
    height: 24px;
    display: inline;
    float: right;
    text-indent: -9999px;
    overflow: hidden;
    background: url(./images/icons.png) no-repeat;
    background: url(./images/icons.gif) no-repeat \9;
    margin: 5px 1px 1px;
    cursor: pointer;
    -webkit-tap-highlight-color: rgba(0,0,0,0);
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
#upload .filelist div.file-panel span.rotateLeft {
    display:none;
    background-position: 0 -24px;
}
#upload .filelist div.file-panel span.rotateLeft:hover {
    background-position: 0 0;
}
#upload .filelist div.file-panel span.rotateRight {
    display:none;
    background-position: -24px -24px;
}
#upload .filelist div.file-panel span.rotateRight:hover {
    background-position: -24px 0;
}
#upload .filelist div.file-panel span.cancel {
    background-position: -48px -24px;
}
#upload .filelist div.file-panel span.cancel:hover {
    background-position: -48px 0;
}
#upload .statusBar {
    height: 45px;
    border-bottom: 1px solid #dadada;
    margin: 0 10px;
    padding: 0;
    line-height: 45px;
    vertical-align: middle;
    position: relative;
}
#upload .statusBar .progress {
    border: 1px solid #1483d8;
    width: 198px;
    background: #fff;
    height: 18px;
    position: absolute;
    top: 12px;
    display: none;
    text-align: center;
    line-height: 18px;
    color: #6dbfff;
    margin: 0 10px 0 0;
}
#upload .statusBar .progress span.percentage {
    width: 0;
    height: 100%;
    left: 0;
    top: 0;
    background: #1483d8;
    position: absolute;
}
#upload .statusBar .progress span.text {
    position: relative;
    z-index: 10;
}
#upload .statusBar .info {
    display: inline-block;
    font-size: 14px;
    color: #666666;
}
#upload .statusBar .btns {
    position: absolute;
    top: 7px;
    right: 0;
    line-height: 30px;
}
#filePickerBtn {
    display: inline-block;
    float: left;
}
#upload .statusBar .btns .webuploader-pick,
#upload .statusBar .btns .uploadBtn,
#upload .statusBar .btns .uploadBtn.state-uploading,
#upload .statusBar .btns .uploadBtn.state-paused {
    background: #ffffff;
    border: 1px solid #cfcfcf;
    color: #565656;
    padding: 0 18px;
    display: inline-block;
    border-radius: 3px;
    margin-left: 10px;
    cursor: pointer;
    font-size: 14px;
    float: left;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
#upload .statusBar .btns .webuploader-pick-hover,
#upload .statusBar .btns .uploadBtn:hover,
#upload .statusBar .btns .uploadBtn.state-uploading:hover,
#upload .statusBar .btns .uploadBtn.state-paused:hover {
    background: #f0f0f0;
}
#upload .statusBar .btns .uploadBtn,
#upload .statusBar .btns .uploadBtn.state-paused{
    background: #00b7ee;
    color: #fff;
    border-color: transparent;
}
#upload .statusBar .btns .uploadBtn:hover,
#upload .statusBar .btns .uploadBtn.state-paused:hover{
    background: #00a2d4;
}
#upload .statusBar .btns .uploadBtn.disabled {
    pointer-events: none;
    filter:alpha(opacity=60);
    -moz-opacity:0.6;
    -khtml-opacity: 0.6;
    opacity: 0.6;
}
/* 在线文件的文件预览图标 */
i.file-preview {
    display: block;
    margin: 10px auto;
    width: 70px;
    height: 70px;
    background-image: url("./images/file-icons.png");
    background-image: url("./images/file-icons.gif") \9;
    background-position: -140px center;
    background-repeat: no-repeat;
}
i.file-preview.file-type-dir{
    background-position: 0 center;
}
i.file-preview.file-type-file{
    background-position: -140px center;
}
i.file-preview.file-type-filelist{
    background-position: -210px center;
}
i.file-preview.file-type-zip,
i.file-preview.file-type-rar,
i.file-preview.file-type-7z,
i.file-preview.file-type-tar,
i.file-preview.file-type-gz,
i.file-preview.file-type-bz2{
    background-position: -280px center;
}
i.file-preview.file-type-xls,
i.file-preview.file-type-xlsx{
    background-position: -350px center;
}
i.file-preview.file-type-doc,
i.file-preview.file-type-docx{
    background-position: -420px center;
}
i.file-preview.file-type-ppt,
i.file-preview.file-type-pptx{
    background-position: -490px center;
}
i.file-preview.file-type-vsd{
    background-position: -560px center;
}
i.file-preview.file-type-pdf{
    background-position: -630px center;
}
i.file-preview.file-type-txt,
i.file-preview.file-type-md,
i.file-preview.file-type-json,
i.file-preview.file-type-htm,
i.file-preview.file-type-xml,
i.file-preview.file-type-html,
i.file-preview.file-type-js,
i.file-preview.file-type-css,
i.file-preview.file-type-php,
i.file-preview.file-type-jsp,
i.file-preview.file-type-asp{
    background-position: -700px center;
}
i.file-preview.file-type-apk{
    background-position: -770px center;
}
i.file-preview.file-type-exe{
    background-position: -840px center;
}
i.file-preview.file-type-ipa{
    background-position: -910px center;
}
i.file-preview.file-type-mp4,
i.file-preview.file-type-swf,
i.file-preview.file-type-mkv,
i.file-preview.file-type-avi,
i.file-preview.file-type-flv,
i.file-preview.file-type-mov,
i.file-preview.file-type-mpg,
i.file-preview.file-type-mpeg,
i.file-preview.file-type-ogv,
i.file-preview.file-type-webm,
i.file-preview.file-type-rm,
i.file-preview.file-type-rmvb{
    background-position: -980px center;
}
i.file-preview.file-type-ogg,
i.file-preview.file-type-wav,
i.file-preview.file-type-wmv,
i.file-preview.file-type-mid,
i.file-preview.file-type-mp3{
    background-position: -1050px center;
}
i.file-preview.file-type-jpg,
i.file-preview.file-type-jpeg,
i.file-preview.file-type-gif,
i.file-preview.file-type-bmp,
i.file-preview.file-type-png,
i.file-preview.file-type-psd{
    background-position: -140px center;
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/video.html
New file
@@ -0,0 +1,86 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <script type="text/javascript" src="../internal.js"></script>
    <link rel="stylesheet" type="text/css" href="video.css" />
</head>
<body>
<div class="wrapper">
    <div id="videoTab">
        <div id="tabHeads" class="tabhead">
            <span tabSrc="video" class="focus" data-content-id="video"><var id="lang_tab_insertV"></var></span>
            <span tabSrc="upload" data-content-id="upload"><var id="lang_tab_uploadV"></var></span>
        </div>
        <div id="tabBodys" class="tabbody">
            <div id="video" class="panel focus">
               <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>
               <div id="preview"></div>
               <div id="videoInfo">
                   <fieldset>
                       <legend><var id="lang_video_size"></var></legend>
                       <table>
                           <tr><td><label for="videoWidth"><var id="lang_videoW"></var></label></td><td><input class="txt" id="videoWidth" type="text"/></td></tr>
                           <tr><td><label for="videoHeight"><var id="lang_videoH"></var></label></td><td><input class="txt" id="videoHeight" type="text"/></td></tr>
                       </table>
                   </fieldset>
                   <fieldset>
                      <legend><var id="lang_alignment"></var></legend>
                      <div id="videoFloat"></div>
                  </fieldset>
               </div>
            </div>
            <div id="upload" class="panel">
                <div id="upload_left">
                    <div id="queueList" class="queueList">
                        <div class="statusBar element-invisible">
                            <div class="progress">
                                <span class="text">0%</span>
                                <span class="percentage"></span>
                            </div><div class="info"></div>
                            <div class="btns">
                                <div id="filePickerBtn"></div>
                                <div class="uploadBtn"><var id="lang_start_upload"></var></div>
                            </div>
                        </div>
                        <div id="dndArea" class="placeholder">
                            <div class="filePickerContainer">
                                <div id="filePickerReady"></div>
                            </div>
                        </div>
                        <ul class="filelist element-invisible">
                            <li id="filePickerBlock" class="filePickerBlock"></li>
                        </ul>
                    </div>
                </div>
                <div id="uploadVideoInfo">
                    <fieldset>
                        <legend><var id="lang_upload_size"></var></legend>
                        <table>
                            <tr><td><label><var id="lang_upload_width"></var></label></td><td><input class="txt" id="upload_width" type="text"/></td></tr>
                            <tr><td><label><var id="lang_upload_height"></var></label></td><td><input class="txt" id="upload_height" type="text"/></td></tr>
                        </table>
                    </fieldset>
                    <fieldset>
                        <legend><var id="lang_upload_alignment"></var></legend>
                        <div id="upload_alignment"></div>
                    </fieldset>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- jquery -->
<script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>
<!-- webuploader -->
<script type="text/javascript" src="../../third-party/webuploader/webuploader.min.js"></script>
<link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">
<!-- video -->
<script type="text/javascript" src="video.js"></script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/video/video.js
New file
@@ -0,0 +1,789 @@
/**
 * Created by JetBrains PhpStorm.
 * User: taoqili
 * Date: 12-2-20
 * Time: 上午11:19
 * To change this template use File | Settings | File Templates.
 */
(function(){
    var video = {},
        uploadVideoList = [],
        isModifyUploadVideo = false,
        uploadFile;
    window.onload = function(){
        $focus($G("videoUrl"));
        initTabs();
        initVideo();
        initUpload();
    };
    /* 初始化tab标签 */
    function initTabs(){
        var tabs = $G('tabHeads').children;
        for (var i = 0; i < tabs.length; i++) {
            domUtils.on(tabs[i], "click", function (e) {
                var j, bodyId, target = e.target || e.srcElement;
                for (j = 0; j < tabs.length; j++) {
                    bodyId = tabs[j].getAttribute('data-content-id');
                    if(tabs[j] == target){
                        domUtils.addClass(tabs[j], 'focus');
                        domUtils.addClass($G(bodyId), 'focus');
                    }else {
                        domUtils.removeClasses(tabs[j], 'focus');
                        domUtils.removeClasses($G(bodyId), 'focus');
                    }
                }
            });
        }
    }
    function initVideo(){
        createAlignButton( ["videoFloat", "upload_alignment"] );
        addUrlChangeListener($G("videoUrl"));
        addOkListener();
        //编辑视频时初始化相关信息
        (function(){
            var img = editor.selection.getRange().getClosedNode(),url;
            if(img && img.className){
                var hasFakedClass = (img.className == "edui-faked-video"),
                    hasUploadClass = img.className.indexOf("edui-upload-video")!=-1;
                if(hasFakedClass || hasUploadClass) {
                    $G("videoUrl").value = url = img.getAttribute("_url");
                    $G("videoWidth").value = img.width;
                    $G("videoHeight").value = img.height;
                    var align = domUtils.getComputedStyle(img,"float"),
                        parentAlign = domUtils.getComputedStyle(img.parentNode,"text-align");
                    updateAlignButton(parentAlign==="center"?"center":align);
                }
                if(hasUploadClass) {
                    isModifyUploadVideo = true;
                }
            }
            createPreviewVideo(url);
        })();
    }
    /**
     * 监听确认和取消两个按钮事件,用户执行插入或者清空正在播放的视频实例操作
     */
    function addOkListener(){
        dialog.onok = function(){
            $G("preview").innerHTML = "";
            var currentTab =  findFocus("tabHeads","tabSrc");
            switch(currentTab){
                case "video":
                    return insertSingle();
                    break;
                case "videoSearch":
                    return insertSearch("searchList");
                    break;
                case "upload":
                    return insertUpload();
                    break;
            }
        };
        dialog.oncancel = function(){
            $G("preview").innerHTML = "";
        };
    }
    /**
     * 依据传入的align值更新按钮信息
     * @param align
     */
    function updateAlignButton( align ) {
        var aligns = $G( "videoFloat" ).children;
        for ( var i = 0, ci; ci = aligns[i++]; ) {
            if ( ci.getAttribute( "name" ) == align ) {
                if ( ci.className !="focus" ) {
                    ci.className = "focus";
                }
            } else {
                if ( ci.className =="focus" ) {
                    ci.className = "";
                }
            }
        }
    }
    /**
     * 将单个视频信息插入编辑器中
     */
    function insertSingle(){
        var width = $G("videoWidth"),
            height = $G("videoHeight"),
            url=$G('videoUrl').value,
            align = findFocus("videoFloat","name");
        if(!url) return false;
        if ( !checkNum( [width, height] ) ) return false;
        editor.execCommand('insertvideo', {
            url: convert_url(url),
            width: width.value,
            height: height.value,
            align: align
        }, isModifyUploadVideo ? 'upload':null);
    }
    /**
     * 将元素id下的所有代表视频的图片插入编辑器中
     * @param id
     */
    function insertSearch(id){
        var imgs = domUtils.getElementsByTagName($G(id),"img"),
            videoObjs=[];
        for(var i=0,img; img=imgs[i++];){
            if(img.getAttribute("selected")){
                videoObjs.push({
                    url:img.getAttribute("ue_video_url"),
                    width:420,
                    height:280,
                    align:"none"
                });
            }
        }
        editor.execCommand('insertvideo',videoObjs);
    }
    /**
     * 找到id下具有focus类的节点并返回该节点下的某个属性
     * @param id
     * @param returnProperty
     */
    function findFocus( id, returnProperty ) {
        var tabs = $G( id ).children,
                property;
        for ( var i = 0, ci; ci = tabs[i++]; ) {
            if ( ci.className=="focus" ) {
                property = ci.getAttribute( returnProperty );
                break;
            }
        }
        return property;
    }
    function convert_url(url){
        if ( !url ) return '';
        url = utils.trim(url)
            .replace(/v\.youku\.com\/v_show\/id_([\w\-=]+)\.html/i, 'player.youku.com/player.php/sid/$1/v.swf')
            .replace(/(www\.)?youtube\.com\/watch\?v=([\w\-]+)/i, "www.youtube.com/v/$2")
            .replace(/youtu.be\/(\w+)$/i, "www.youtube.com/v/$1")
            .replace(/v\.ku6\.com\/.+\/([\w\.]+)\.html.*$/i, "player.ku6.com/refer/$1/v.swf")
            .replace(/www\.56\.com\/u\d+\/v_([\w\-]+)\.html/i, "player.56.com/v_$1.swf")
            .replace(/www.56.com\/w\d+\/play_album\-aid\-\d+_vid\-([^.]+)\.html/i, "player.56.com/v_$1.swf")
            .replace(/v\.pps\.tv\/play_([\w]+)\.html.*$/i, "player.pps.tv/player/sid/$1/v.swf")
            .replace(/www\.letv\.com\/ptv\/vplay\/([\d]+)\.html.*$/i, "i7.imgs.letv.com/player/swfPlayer.swf?id=$1&autoplay=0")
            .replace(/www\.tudou\.com\/programs\/view\/([\w\-]+)\/?/i, "www.tudou.com/v/$1")
            .replace(/v\.qq\.com\/cover\/[\w]+\/[\w]+\/([\w]+)\.html/i, "static.video.qq.com/TPout.swf?vid=$1")
            .replace(/v\.qq\.com\/.+[\?\&]vid=([^&]+).*$/i, "static.video.qq.com/TPout.swf?vid=$1")
            .replace(/my\.tv\.sohu\.com\/[\w]+\/[\d]+\/([\d]+)\.shtml.*$/i, "share.vrs.sohu.com/my/v.swf&id=$1");
        return url;
    }
    /**
      * 检测传入的所有input框中输入的长宽是否是正数
      * @param nodes input框集合,
      */
     function checkNum( nodes ) {
         for ( var i = 0, ci; ci = nodes[i++]; ) {
             var value = ci.value;
             if ( !isNumber( value ) && value) {
                 alert( lang.numError );
                 ci.value = "";
                 ci.focus();
                 return false;
             }
         }
         return true;
     }
    /**
     * 数字判断
     * @param value
     */
    function isNumber( value ) {
        return /(0|^[1-9]\d*$)/.test( value );
    }
    /**
      * 创建图片浮动选择按钮
      * @param ids
      */
     function createAlignButton( ids ) {
         for ( var i = 0, ci; ci = ids[i++]; ) {
             var floatContainer = $G( ci ),
                     nameMaps = {"none":lang['default'], "left":lang.floatLeft, "right":lang.floatRight, "center":lang.block};
             for ( var j in nameMaps ) {
                 var div = document.createElement( "div" );
                 div.setAttribute( "name", j );
                 if ( j == "none" ) div.className="focus";
                 div.style.cssText = "background:url(images/" + j + "_focus.jpg);";
                 div.setAttribute( "title", nameMaps[j] );
                 floatContainer.appendChild( div );
             }
             switchSelect( ci );
         }
     }
    /**
     * 选择切换
     * @param selectParentId
     */
    function switchSelect( selectParentId ) {
        var selects = $G( selectParentId ).children;
        for ( var i = 0, ci; ci = selects[i++]; ) {
            domUtils.on( ci, "click", function () {
                for ( var j = 0, cj; cj = selects[j++]; ) {
                    cj.className = "";
                    cj.removeAttribute && cj.removeAttribute( "class" );
                }
                this.className = "focus";
            } )
        }
    }
    /**
     * 监听url改变事件
     * @param url
     */
    function addUrlChangeListener(url){
        if (browser.ie) {
            url.onpropertychange = function () {
                createPreviewVideo( this.value );
            }
        } else {
            url.addEventListener( "input", function () {
                createPreviewVideo( this.value );
            }, false );
        }
    }
    /**
     * 根据url生成视频预览
     * @param url
     */
    function createPreviewVideo(url){
        if ( !url )return;
        var conUrl = convert_url(url);
        $G("preview").innerHTML = '<div class="previewMsg"><span>'+lang.urlError+'</span></div>'+
        '<embed class="previewVideo" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"' +
            ' src="' + conUrl + '"' +
            ' width="' + 420  + '"' +
            ' height="' + 280  + '"' +
            ' wmode="transparent" play="true" loop="false" menu="false" allowscriptaccess="never" allowfullscreen="true" >' +
        '</embed>';
    }
    /* 插入上传视频 */
    function insertUpload(){
        var videoObjs=[],
            uploadDir = editor.getOpt('videoUrlPrefix'),
            width = $G('upload_width').value || 420,
            height = $G('upload_height').value || 280,
            align = findFocus("upload_alignment","name") || 'none';
        for(var key in uploadVideoList) {
            var file = uploadVideoList[key];
            videoObjs.push({
                url: uploadDir + file.url,
                width:width,
                height:height,
                align:align
            });
        }
        var count = uploadFile.getQueueCount();
        if (count) {
            $('.info', '#queueList').html('<span style="color:red;">' + '还有2个未上传文件'.replace(/[\d]/, count) + '</span>');
            return false;
        } else {
            editor.execCommand('insertvideo', videoObjs, 'upload');
        }
    }
    /*初始化上传标签*/
    function initUpload(){
        uploadFile = new UploadFile('queueList');
    }
    /* 上传附件 */
    function UploadFile(target) {
        this.$wrap = target.constructor == String ? $('#' + target) : $(target);
        this.init();
    }
    UploadFile.prototype = {
        init: function () {
            this.fileList = [];
            this.initContainer();
            this.initUploader();
        },
        initContainer: function () {
            this.$queue = this.$wrap.find('.filelist');
        },
        /* 初始化容器 */
        initUploader: function () {
            var _this = this,
                $ = jQuery,    // just in case. Make sure it's not an other libaray.
                $wrap = _this.$wrap,
            // 图片容器
                $queue = $wrap.find('.filelist'),
            // 状态栏,包括进度和控制按钮
                $statusBar = $wrap.find('.statusBar'),
            // 文件总体选择信息。
                $info = $statusBar.find('.info'),
            // 上传按钮
                $upload = $wrap.find('.uploadBtn'),
            // 上传按钮
                $filePickerBtn = $wrap.find('.filePickerBtn'),
            // 上传按钮
                $filePickerBlock = $wrap.find('.filePickerBlock'),
            // 没选择文件之前的内容。
                $placeHolder = $wrap.find('.placeholder'),
            // 总体进度条
                $progress = $statusBar.find('.progress').hide(),
            // 添加的文件数量
                fileCount = 0,
            // 添加的文件总大小
                fileSize = 0,
            // 优化retina, 在retina下这个值是2
                ratio = window.devicePixelRatio || 1,
            // 缩略图大小
                thumbnailWidth = 113 * ratio,
                thumbnailHeight = 113 * ratio,
            // 可能有pedding, ready, uploading, confirm, done.
                state = '',
            // 所有文件的进度信息,key为file id
                percentages = {},
                supportTransition = (function () {
                    var s = document.createElement('p').style,
                        r = 'transition' in s ||
                            'WebkitTransition' in s ||
                            'MozTransition' in s ||
                            'msTransition' in s ||
                            'OTransition' in s;
                    s = null;
                    return r;
                })(),
            // WebUploader实例
                uploader,
                actionUrl = editor.getActionUrl(editor.getOpt('videoActionName')),
                fileMaxSize = editor.getOpt('videoMaxSize'),
                acceptExtensions = (editor.getOpt('videoAllowFiles') || []).join('').replace(/\./g, ',').replace(/^[,]/, '');;
            if (!WebUploader.Uploader.support()) {
                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();
                return;
            } else if (!editor.getOpt('videoActionName')) {
                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();
                return;
            }
            uploader = _this.uploader = WebUploader.create({
                pick: {
                    id: '#filePickerReady',
                    label: lang.uploadSelectFile
                },
                swf: '../../third-party/webuploader/Uploader.swf',
                server: actionUrl,
                fileVal: editor.getOpt('videoFieldName'),
                duplicate: true,
                fileSingleSizeLimit: fileMaxSize,
                compress: false
            });
            uploader.addButton({
                id: '#filePickerBlock'
            });
            uploader.addButton({
                id: '#filePickerBtn',
                label: lang.uploadAddFile
            });
            setState('pedding');
            // 当有文件添加进来时执行,负责view的创建
            function addFile(file) {
                var $li = $('<li id="' + file.id + '">' +
                        '<p class="title">' + file.name + '</p>' +
                        '<p class="imgWrap"></p>' +
                        '<p class="progress"><span></span></p>' +
                        '</li>'),
                    $btns = $('<div class="file-panel">' +
                        '<span class="cancel">' + lang.uploadDelete + '</span>' +
                        '<span class="rotateRight">' + lang.uploadTurnRight + '</span>' +
                        '<span class="rotateLeft">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),
                    $prgress = $li.find('p.progress span'),
                    $wrap = $li.find('p.imgWrap'),
                    $info = $('<p class="error"></p>').hide().appendTo($li),
                    showError = function (code) {
                        switch (code) {
                            case 'exceed_size':
                                text = lang.errorExceedSize;
                                break;
                            case 'interrupt':
                                text = lang.errorInterrupt;
                                break;
                            case 'http':
                                text = lang.errorHttp;
                                break;
                            case 'not_allow_type':
                                text = lang.errorFileType;
                                break;
                            default:
                                text = lang.errorUploadRetry;
                                break;
                        }
                        $info.text(text).show();
                    };
                if (file.getStatus() === 'invalid') {
                    showError(file.statusText);
                } else {
                    $wrap.text(lang.uploadPreview);
                    if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|'+file.ext.toLowerCase()+'|') == -1) {
                        $wrap.empty().addClass('notimage').append('<i class="file-preview file-type-' + file.ext.toLowerCase() + '"></i>' +
                            '<span class="file-title">' + file.name + '</span>');
                    } else {
                        if (browser.ie && browser.version <= 7) {
                            $wrap.text(lang.uploadNoPreview);
                        } else {
                            uploader.makeThumb(file, function (error, src) {
                                if (error || !src || (/^data:/.test(src) && browser.ie && browser.version <= 7)) {
                                    $wrap.text(lang.uploadNoPreview);
                                } else {
                                    var $img = $('<img src="' + src + '">');
                                    $wrap.empty().append($img);
                                    $img.on('error', function () {
                                        $wrap.text(lang.uploadNoPreview);
                                    });
                                }
                            }, thumbnailWidth, thumbnailHeight);
                        }
                    }
                    percentages[ file.id ] = [ file.size, 0 ];
                    file.rotation = 0;
                    /* 检查文件格式 */
                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {
                        showError('not_allow_type');
                        uploader.removeFile(file);
                    }
                }
                file.on('statuschange', function (cur, prev) {
                    if (prev === 'progress') {
                        $prgress.hide().width(0);
                    } else if (prev === 'queued') {
                        $li.off('mouseenter mouseleave');
                        $btns.remove();
                    }
                    // 成功
                    if (cur === 'error' || cur === 'invalid') {
                        showError(file.statusText);
                        percentages[ file.id ][ 1 ] = 1;
                    } else if (cur === 'interrupt') {
                        showError('interrupt');
                    } else if (cur === 'queued') {
                        percentages[ file.id ][ 1 ] = 0;
                    } else if (cur === 'progress') {
                        $info.hide();
                        $prgress.css('display', 'block');
                    } else if (cur === 'complete') {
                    }
                    $li.removeClass('state-' + prev).addClass('state-' + cur);
                });
                $li.on('mouseenter', function () {
                    $btns.stop().animate({height: 30});
                });
                $li.on('mouseleave', function () {
                    $btns.stop().animate({height: 0});
                });
                $btns.on('click', 'span', function () {
                    var index = $(this).index(),
                        deg;
                    switch (index) {
                        case 0:
                            uploader.removeFile(file);
                            return;
                        case 1:
                            file.rotation += 90;
                            break;
                        case 2:
                            file.rotation -= 90;
                            break;
                    }
                    if (supportTransition) {
                        deg = 'rotate(' + file.rotation + 'deg)';
                        $wrap.css({
                            '-webkit-transform': deg,
                            '-mos-transform': deg,
                            '-o-transform': deg,
                            'transform': deg
                        });
                    } else {
                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');
                    }
                });
                $li.insertBefore($filePickerBlock);
            }
            // 负责view的销毁
            function removeFile(file) {
                var $li = $('#' + file.id);
                delete percentages[ file.id ];
                updateTotalProgress();
                $li.off().find('.file-panel').off().end().remove();
            }
            function updateTotalProgress() {
                var loaded = 0,
                    total = 0,
                    spans = $progress.children(),
                    percent;
                $.each(percentages, function (k, v) {
                    total += v[ 0 ];
                    loaded += v[ 0 ] * v[ 1 ];
                });
                percent = total ? loaded / total : 0;
                spans.eq(0).text(Math.round(percent * 100) + '%');
                spans.eq(1).css('width', Math.round(percent * 100) + '%');
                updateStatus();
            }
            function setState(val, files) {
                if (val != state) {
                    var stats = uploader.getStats();
                    $upload.removeClass('state-' + state);
                    $upload.addClass('state-' + val);
                    switch (val) {
                        /* 未选择文件 */
                        case 'pedding':
                            $queue.addClass('element-invisible');
                            $statusBar.addClass('element-invisible');
                            $placeHolder.removeClass('element-invisible');
                            $progress.hide(); $info.hide();
                            uploader.refresh();
                            break;
                        /* 可以开始上传 */
                        case 'ready':
                            $placeHolder.addClass('element-invisible');
                            $queue.removeClass('element-invisible');
                            $statusBar.removeClass('element-invisible');
                            $progress.hide(); $info.show();
                            $upload.text(lang.uploadStart);
                            uploader.refresh();
                            break;
                        /* 上传中 */
                        case 'uploading':
                            $progress.show(); $info.hide();
                            $upload.text(lang.uploadPause);
                            break;
                        /* 暂停上传 */
                        case 'paused':
                            $progress.show(); $info.hide();
                            $upload.text(lang.uploadContinue);
                            break;
                        case 'confirm':
                            $progress.show(); $info.hide();
                            $upload.text(lang.uploadStart);
                            stats = uploader.getStats();
                            if (stats.successNum && !stats.uploadFailNum) {
                                setState('finish');
                                return;
                            }
                            break;
                        case 'finish':
                            $progress.hide(); $info.show();
                            if (stats.uploadFailNum) {
                                $upload.text(lang.uploadRetry);
                            } else {
                                $upload.text(lang.uploadStart);
                            }
                            break;
                    }
                    state = val;
                    updateStatus();
                }
                if (!_this.getQueueCount()) {
                    $upload.addClass('disabled')
                } else {
                    $upload.removeClass('disabled')
                }
            }
            function updateStatus() {
                var text = '', stats;
                if (state === 'ready') {
                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));
                } else if (state === 'confirm') {
                    stats = uploader.getStats();
                    if (stats.uploadFailNum) {
                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);
                    }
                } else {
                    stats = uploader.getStats();
                    text = lang.updateStatusFinish.replace('_', fileCount).
                        replace('_KB', WebUploader.formatSize(fileSize)).
                        replace('_', stats.successNum);
                    if (stats.uploadFailNum) {
                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);
                    }
                }
                $info.html(text);
            }
            uploader.on('fileQueued', function (file) {
                fileCount++;
                fileSize += file.size;
                if (fileCount === 1) {
                    $placeHolder.addClass('element-invisible');
                    $statusBar.show();
                }
                addFile(file);
            });
            uploader.on('fileDequeued', function (file) {
                fileCount--;
                fileSize -= file.size;
                removeFile(file);
                updateTotalProgress();
            });
            uploader.on('filesQueued', function (file) {
                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {
                    setState('ready');
                }
                updateTotalProgress();
            });
            uploader.on('all', function (type, files) {
                switch (type) {
                    case 'uploadFinished':
                        setState('confirm', files);
                        break;
                    case 'startUpload':
                        /* 添加额外的GET参数 */
                        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',
                            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params);
                        uploader.option('server', url);
                        setState('uploading', files);
                        break;
                    case 'stopUpload':
                        setState('paused', files);
                        break;
                }
            });
            uploader.on('uploadBeforeSend', function (file, data, header) {
                //这里可以通过data对象添加POST参数
                header['X_Requested_With'] = 'XMLHttpRequest';
            });
            uploader.on('uploadProgress', function (file, percentage) {
                var $li = $('#' + file.id),
                    $percent = $li.find('.progress span');
                $percent.css('width', percentage * 100 + '%');
                percentages[ file.id ][ 1 ] = percentage;
                updateTotalProgress();
            });
            uploader.on('uploadSuccess', function (file, ret) {
                var $file = $('#' + file.id);
                try {
                    var responseText = (ret._raw || ret),
                        json = utils.str2json(responseText);
                    if (json.state == 'SUCCESS') {
                        uploadVideoList.push({
                            'url': json.url,
                            'type': json.type,
                            'original':json.original
                        });
                        $file.append('<span class="success"></span>');
                    } else {
                        $file.find('.error').text(json.state).show();
                    }
                } catch (e) {
                    $file.find('.error').text(lang.errorServerUpload).show();
                }
            });
            uploader.on('uploadError', function (file, code) {
            });
            uploader.on('error', function (code, file) {
                if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {
                    addFile(file);
                }
            });
            uploader.on('uploadComplete', function (file, ret) {
            });
            $upload.on('click', function () {
                if ($(this).hasClass('disabled')) {
                    return false;
                }
                if (state === 'ready') {
                    uploader.upload();
                } else if (state === 'paused') {
                    uploader.upload();
                } else if (state === 'uploading') {
                    uploader.stop();
                }
            });
            $upload.addClass('state-' + state);
            updateTotalProgress();
        },
        getQueueCount: function () {
            var file, i, status, readyFile = 0, files = this.uploader.getFiles();
            for (i = 0; file = files[i++]; ) {
                status = file.getStatus();
                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;
            }
            return readyFile;
        },
        refresh: function(){
            this.uploader.refresh();
        }
    };
})();
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/webapp/webapp.html
New file
@@ -0,0 +1,53 @@
<!DOCTYPE>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <script type="text/javascript" src="../internal.js"></script>
    <style type="text/css">
        .wrapper{width: 540px; margin: 10px auto;}
        #appShow {border: 1px solid #ddd;}
        .errorMsg{font-size: 13px;margin: 10px;color: #dd0000}
    </style>
</head>
<body>
    <div class="wrapper">
        <div id="appShow"></div>
    </div>
    <script type="text/javascript">
        //此处配置您在百度上申请到的appkey。
        var apikey = editor.options.webAppKey;
        if ( apikey && apikey.length == 24 ) {
            var searchConfig = {
                container:'appShow', //容器ID
                tips:"", //该值用于自动清空
                search:1, //是否显示搜索框
                ps:12, //每页显示的条数
                suggest:1, //是否开启搜索自动完成
                limit:0, //搜索结果显示条数,0表示无限制
                searchNow:0, //是否在初始化完成时立即搜索
                apikey:apikey, //每人得
                pager:1,
                cid:7134562,
                outputHTML:1
            },baiduApp;
            function clickCallback() {
                baiduApp.addEventListener( 'getAppHTML', function ( e, data ) {
                    var url = 'http://app.baidu.com/app/enter?appid='+data.data['app_id'] +'&tn=app_canvas&app_spce_id=1&apikey='+apikey+'&api_key=' + apikey;
                    editor.execCommand( "webapp", {url:url,width:data.uniWidth,height:data.uniHeight+60,logo:data.data['app_logo'],title:data.data['app_name']});
                    dialog.close();
                } );
            }
            var script = document.createElement( "script" );
            script.type = "text/javascript";
            script.src = "http://app.baidu.com/appweb/api/search?auto=yes&container=container&apikey=" + apikey + "&instanceName=baiduApp&callback=clickCallback&config=searchConfig";
            document.body.appendChild( script );
        } else {
            $G( "appShow" ).innerHTML = "<p class='errorMsg'>"+lang.tip1+"<a title='"+lang.anthorApi+"' href='http://app.baidu.com/static/cms/getapikey.html' target='_blank'>"+lang.applyFor+"</a></p><p class='errorMsg'>"+lang.tip2+"</p>" ;
        }
    </script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/wordimage/fClipboard_ueditor.swf
Binary files differ
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/wordimage/imageUploader.swf
Binary files differ
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/wordimage/tangram.js
New file
@@ -0,0 +1,1495 @@
// Copyright (c) 2009, Baidu Inc. All rights reserved.
//
// Licensed under the BSD License
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http:// tangram.baidu.com/license.html
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
 /**
 * @namespace T Tangram七巧板
 * @name T
 * @version 1.6.0
*/
/**
 * 声明baidu包
 * @author: allstar, erik, meizz, berg
 */
var T,
    baidu = T = baidu || {version: "1.5.0"};
baidu.guid = "$BAIDU$";
baidu.$$ = window[baidu.guid] = window[baidu.guid] || {global:{}};
/**
 * 使用flash资源封装的一些功能
 * @namespace baidu.flash
 */
baidu.flash = baidu.flash || {};
/**
 * 操作dom的方法
 * @namespace baidu.dom
 */
baidu.dom = baidu.dom || {};
/**
 * 从文档中获取指定的DOM元素
 * @name baidu.dom.g
 * @function
 * @grammar baidu.dom.g(id)
 * @param {string|HTMLElement} id 元素的id或DOM元素.
 * @shortcut g,T.G
 * @meta standard
 * @see baidu.dom.q
 *
 * @return {HTMLElement|null} 获取的元素,查找不到时返回null,如果参数不合法,直接返回参数.
 */
baidu.dom.g = function(id) {
    if (!id) return null;
    if ('string' == typeof id || id instanceof String) {
        return document.getElementById(id);
    } else if (id.nodeName && (id.nodeType == 1 || id.nodeType == 9)) {
        return id;
    }
    return null;
};
baidu.g = baidu.G = baidu.dom.g;
/**
 * 操作数组的方法
 * @namespace baidu.array
 */
baidu.array = baidu.array || {};
/**
 * 遍历数组中所有元素
 * @name baidu.array.each
 * @function
 * @grammar baidu.array.each(source, iterator[, thisObject])
 * @param {Array} source 需要遍历的数组
 * @param {Function} iterator 对每个数组元素进行调用的函数,该函数有两个参数,第一个为数组元素,第二个为数组索引值,function (item, index)。
 * @param {Object} [thisObject] 函数调用时的this指针,如果没有此参数,默认是当前遍历的数组
 * @remark
 * each方法不支持对Object的遍历,对Object的遍历使用baidu.object.each 。
 * @shortcut each
 * @meta standard
 *
 * @returns {Array} 遍历的数组
 */
baidu.each = baidu.array.forEach = baidu.array.each = function (source, iterator, thisObject) {
    var returnValue, item, i, len = source.length;
    if ('function' == typeof iterator) {
        for (i = 0; i < len; i++) {
            item = source[i];
            returnValue = iterator.call(thisObject || source, item, i);
            if (returnValue === false) {
                break;
            }
        }
    }
    return source;
};
/**
 * 对语言层面的封装,包括类型判断、模块扩展、继承基类以及对象自定义事件的支持。
 * @namespace baidu.lang
 */
baidu.lang = baidu.lang || {};
/**
 * 判断目标参数是否为function或Function实例
 * @name baidu.lang.isFunction
 * @function
 * @grammar baidu.lang.isFunction(source)
 * @param {Any} source 目标参数
 * @version 1.2
 * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate
 * @meta standard
 * @returns {boolean} 类型判断结果
 */
baidu.lang.isFunction = function (source) {
    return '[object Function]' == Object.prototype.toString.call(source);
};
/**
 * 判断目标参数是否string类型或String对象
 * @name baidu.lang.isString
 * @function
 * @grammar baidu.lang.isString(source)
 * @param {Any} source 目标参数
 * @shortcut isString
 * @meta standard
 * @see baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate
 *
 * @returns {boolean} 类型判断结果
 */
baidu.lang.isString = function (source) {
    return '[object String]' == Object.prototype.toString.call(source);
};
baidu.isString = baidu.lang.isString;
/**
 * 判断浏览器类型和特性的属性
 * @namespace baidu.browser
 */
baidu.browser = baidu.browser || {};
/**
 * 判断是否为opera浏览器
 * @property opera opera版本号
 * @grammar baidu.browser.opera
 * @meta standard
 * @see baidu.browser.ie,baidu.browser.firefox,baidu.browser.safari,baidu.browser.chrome
 * @returns {Number} opera版本号
 */
/**
 * opera 从10开始不是用opera后面的字符串进行版本的判断
 * 在Browser identification最后添加Version + 数字进行版本标识
 * opera后面的数字保持在9.80不变
 */
baidu.browser.opera = /opera(\/| )(\d+(\.\d+)?)(.+?(version\/(\d+(\.\d+)?)))?/i.test(navigator.userAgent) ?  + ( RegExp["\x246"] || RegExp["\x242"] ) : undefined;
/**
 * 在目标元素的指定位置插入HTML代码
 * @name baidu.dom.insertHTML
 * @function
 * @grammar baidu.dom.insertHTML(element, position, html)
 * @param {HTMLElement|string} element 目标元素或目标元素的id
 * @param {string} position 插入html的位置信息,取值为beforeBegin,afterBegin,beforeEnd,afterEnd
 * @param {string} html 要插入的html
 * @remark
 *
 * 对于position参数,大小写不敏感<br>
 * 参数的意思:beforeBegin&lt;span&gt;afterBegin   this is span! beforeEnd&lt;/span&gt; afterEnd <br />
 * 此外,如果使用本函数插入带有script标签的HTML字符串,script标签对应的脚本将不会被执行。
 *
 * @shortcut insertHTML
 * @meta standard
 *
 * @returns {HTMLElement} 目标元素
 */
baidu.dom.insertHTML = function (element, position, html) {
    element = baidu.dom.g(element);
    var range,begin;
    if (element.insertAdjacentHTML && !baidu.browser.opera) {
        element.insertAdjacentHTML(position, html);
    } else {
        range = element.ownerDocument.createRange();
        position = position.toUpperCase();
        if (position == 'AFTERBEGIN' || position == 'BEFOREEND') {
            range.selectNodeContents(element);
            range.collapse(position == 'AFTERBEGIN');
        } else {
            begin = position == 'BEFOREBEGIN';
            range[begin ? 'setStartBefore' : 'setEndAfter'](element);
            range.collapse(begin);
        }
        range.insertNode(range.createContextualFragment(html));
    }
    return element;
};
baidu.insertHTML = baidu.dom.insertHTML;
/**
 * 操作flash对象的方法,包括创建flash对象、获取flash对象以及判断flash插件的版本号
 * @namespace baidu.swf
 */
baidu.swf = baidu.swf || {};
/**
 * 浏览器支持的flash插件版本
 * @property version 浏览器支持的flash插件版本
 * @grammar baidu.swf.version
 * @return {String} 版本号
 * @meta standard
 */
baidu.swf.version = (function () {
    var n = navigator;
    if (n.plugins && n.mimeTypes.length) {
        var plugin = n.plugins["Shockwave Flash"];
        if (plugin && plugin.description) {
            return plugin.description
                    .replace(/([a-zA-Z]|\s)+/, "")
                    .replace(/(\s)+r/, ".") + ".0";
        }
    } else if (window.ActiveXObject && !window.opera) {
        for (var i = 12; i >= 2; i--) {
            try {
                var c = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.' + i);
                if (c) {
                    var version = c.GetVariable("$version");
                    return version.replace(/WIN/g,'').replace(/,/g,'.');
                }
            } catch(e) {}
        }
    }
})();
/**
 * 操作字符串的方法
 * @namespace baidu.string
 */
baidu.string = baidu.string || {};
/**
 * 对目标字符串进行html编码
 * @name baidu.string.encodeHTML
 * @function
 * @grammar baidu.string.encodeHTML(source)
 * @param {string} source 目标字符串
 * @remark
 * 编码字符有5个:&<>"'
 * @shortcut encodeHTML
 * @meta standard
 * @see baidu.string.decodeHTML
 *
 * @returns {string} html编码后的字符串
 */
baidu.string.encodeHTML = function (source) {
    return String(source)
                .replace(/&/g,'&amp;')
                .replace(/</g,'&lt;')
                .replace(/>/g,'&gt;')
                .replace(/"/g, "&quot;")
                .replace(/'/g, "&#39;");
};
baidu.encodeHTML = baidu.string.encodeHTML;
/**
 * 创建flash对象的html字符串
 * @name baidu.swf.createHTML
 * @function
 * @grammar baidu.swf.createHTML(options)
 *
 * @param {Object}     options                     创建flash的选项参数
 * @param {string}     options.id                     要创建的flash的标识
 * @param {string}     options.url                 flash文件的url
 * @param {String}     options.errorMessage         未安装flash player或flash player版本号过低时的提示
 * @param {string}     options.ver                 最低需要的flash player版本号
 * @param {string}     options.width                 flash的宽度
 * @param {string}     options.height                 flash的高度
 * @param {string}     options.align                 flash的对齐方式,允许值:middle/left/right/top/bottom
 * @param {string}     options.base                 设置用于解析swf文件中的所有相对路径语句的基本目录或URL
 * @param {string}     options.bgcolor             swf文件的背景色
 * @param {string}     options.salign                 设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值:l/r/t/b/tl/tr/bl/br
 * @param {boolean} options.menu                 是否显示右键菜单,允许值:true/false
 * @param {boolean} options.loop                 播放到最后一帧时是否重新播放,允许值: true/false
 * @param {boolean} options.play                 flash是否在浏览器加载时就开始播放。允许值:true/false
 * @param {string}     options.quality             设置flash播放的画质,允许值:low/medium/high/autolow/autohigh/best
 * @param {string}     options.scale                 设置flash内容如何缩放来适应设置的宽高。允许值:showall/noborder/exactfit
 * @param {string}     options.wmode                 设置flash的显示模式。允许值:window/opaque/transparent
 * @param {string}     options.allowscriptaccess     设置flash与页面的通信权限。允许值:always/never/sameDomain
 * @param {string}     options.allownetworking     设置swf文件中允许使用的网络API。允许值:all/internal/none
 * @param {boolean} options.allowfullscreen     是否允许flash全屏。允许值:true/false
 * @param {boolean} options.seamlesstabbing     允许设置执行无缝跳格,从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值:true/false
 * @param {boolean} options.devicefont             设置静态文本对象是否以设备字体呈现。允许值:true/false
 * @param {boolean} options.swliveconnect         第一次加载flash时浏览器是否应启动Java。允许值:true/false
 * @param {Object}     options.vars                 要传递给flash的参数,支持JSON或string类型。
 *
 * @see baidu.swf.create
 * @meta standard
 * @returns {string} flash对象的html字符串
 */
baidu.swf.createHTML = function (options) {
    options = options || {};
    var version = baidu.swf.version,
        needVersion = options['ver'] || '6.0.0',
        vUnit1, vUnit2, i, k, len, item, tmpOpt = {},
        encodeHTML = baidu.string.encodeHTML;
    for (k in options) {
        tmpOpt[k] = options[k];
    }
    options = tmpOpt;
    if (version) {
        version = version.split('.');
        needVersion = needVersion.split('.');
        for (i = 0; i < 3; i++) {
            vUnit1 = parseInt(version[i], 10);
            vUnit2 = parseInt(needVersion[i], 10);
            if (vUnit2 < vUnit1) {
                break;
            } else if (vUnit2 > vUnit1) {
                return '';
            }
        }
    } else {
        return '';
    }
    var vars = options['vars'],
        objProperties = ['classid', 'codebase', 'id', 'width', 'height', 'align'];
    options['align'] = options['align'] || 'middle';
    options['classid'] = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000';
    options['codebase'] = 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0';
    options['movie'] = options['url'] || '';
    delete options['vars'];
    delete options['url'];
    if ('string' == typeof vars) {
        options['flashvars'] = vars;
    } else {
        var fvars = [];
        for (k in vars) {
            item = vars[k];
            fvars.push(k + "=" + encodeURIComponent(item));
        }
        options['flashvars'] = fvars.join('&');
    }
    var str = ['<object '];
    for (i = 0, len = objProperties.length; i < len; i++) {
        item = objProperties[i];
        str.push(' ', item, '="', encodeHTML(options[item]), '"');
    }
    str.push('>');
    var params = {
        'wmode'             : 1,
        'scale'             : 1,
        'quality'           : 1,
        'play'              : 1,
        'loop'              : 1,
        'menu'              : 1,
        'salign'            : 1,
        'bgcolor'           : 1,
        'base'              : 1,
        'allowscriptaccess' : 1,
        'allownetworking'   : 1,
        'allowfullscreen'   : 1,
        'seamlesstabbing'   : 1,
        'devicefont'        : 1,
        'swliveconnect'     : 1,
        'flashvars'         : 1,
        'movie'             : 1
    };
    for (k in options) {
        item = options[k];
        k = k.toLowerCase();
        if (params[k] && (item || item === false || item === 0)) {
            str.push('<param name="' + k + '" value="' + encodeHTML(item) + '" />');
        }
    }
    options['src']  = options['movie'];
    options['name'] = options['id'];
    delete options['id'];
    delete options['movie'];
    delete options['classid'];
    delete options['codebase'];
    options['type'] = 'application/x-shockwave-flash';
    options['pluginspage'] = 'http://www.macromedia.com/go/getflashplayer';
    str.push('<embed');
    var salign;
    for (k in options) {
        item = options[k];
        if (item || item === false || item === 0) {
            if ((new RegExp("^salign\x24", "i")).test(k)) {
                salign = item;
                continue;
            }
            str.push(' ', k, '="', encodeHTML(item), '"');
        }
    }
    if (salign) {
        str.push(' salign="', encodeHTML(salign), '"');
    }
    str.push('></embed></object>');
    return str.join('');
};
/**
 * 在页面中创建一个flash对象
 * @name baidu.swf.create
 * @function
 * @grammar baidu.swf.create(options[, container])
 *
 * @param {Object}     options                     创建flash的选项参数
 * @param {string}     options.id                     要创建的flash的标识
 * @param {string}     options.url                 flash文件的url
 * @param {String}     options.errorMessage         未安装flash player或flash player版本号过低时的提示
 * @param {string}     options.ver                 最低需要的flash player版本号
 * @param {string}     options.width                 flash的宽度
 * @param {string}     options.height                 flash的高度
 * @param {string}     options.align                 flash的对齐方式,允许值:middle/left/right/top/bottom
 * @param {string}     options.base                 设置用于解析swf文件中的所有相对路径语句的基本目录或URL
 * @param {string}     options.bgcolor             swf文件的背景色
 * @param {string}     options.salign                 设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值:l/r/t/b/tl/tr/bl/br
 * @param {boolean} options.menu                 是否显示右键菜单,允许值:true/false
 * @param {boolean} options.loop                 播放到最后一帧时是否重新播放,允许值: true/false
 * @param {boolean} options.play                 flash是否在浏览器加载时就开始播放。允许值:true/false
 * @param {string}     options.quality             设置flash播放的画质,允许值:low/medium/high/autolow/autohigh/best
 * @param {string}     options.scale                 设置flash内容如何缩放来适应设置的宽高。允许值:showall/noborder/exactfit
 * @param {string}     options.wmode                 设置flash的显示模式。允许值:window/opaque/transparent
 * @param {string}     options.allowscriptaccess     设置flash与页面的通信权限。允许值:always/never/sameDomain
 * @param {string}     options.allownetworking     设置swf文件中允许使用的网络API。允许值:all/internal/none
 * @param {boolean} options.allowfullscreen     是否允许flash全屏。允许值:true/false
 * @param {boolean} options.seamlesstabbing     允许设置执行无缝跳格,从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值:true/false
 * @param {boolean} options.devicefont             设置静态文本对象是否以设备字体呈现。允许值:true/false
 * @param {boolean} options.swliveconnect         第一次加载flash时浏览器是否应启动Java。允许值:true/false
 * @param {Object}     options.vars                 要传递给flash的参数,支持JSON或string类型。
 *
 * @param {HTMLElement|string} [container]         flash对象的父容器元素,不传递该参数时在当前代码位置创建flash对象。
 * @meta standard
 * @see baidu.swf.createHTML,baidu.swf.getMovie
 */
baidu.swf.create = function (options, target) {
    options = options || {};
    var html = baidu.swf.createHTML(options)
               || options['errorMessage']
               || '';
    if (target && 'string' == typeof target) {
        target = document.getElementById(target);
    }
    baidu.dom.insertHTML( target || document.body ,'beforeEnd',html );
};
/**
 * 判断是否为ie浏览器
 * @name baidu.browser.ie
 * @field
 * @grammar baidu.browser.ie
 * @returns {Number} IE版本号
 */
baidu.browser.ie = baidu.ie = /msie (\d+\.\d+)/i.test(navigator.userAgent) ? (document.documentMode || + RegExp['\x241']) : undefined;
/**
 * 移除数组中的项
 * @name baidu.array.remove
 * @function
 * @grammar baidu.array.remove(source, match)
 * @param {Array} source 需要移除项的数组
 * @param {Any} match 要移除的项
 * @meta standard
 * @see baidu.array.removeAt
 *
 * @returns {Array} 移除后的数组
 */
baidu.array.remove = function (source, match) {
    var len = source.length;
    while (len--) {
        if (len in source && source[len] === match) {
            source.splice(len, 1);
        }
    }
    return source;
};
/**
 * 判断目标参数是否Array对象
 * @name baidu.lang.isArray
 * @function
 * @grammar baidu.lang.isArray(source)
 * @param {Any} source 目标参数
 * @meta standard
 * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate
 *
 * @returns {boolean} 类型判断结果
 */
baidu.lang.isArray = function (source) {
    return '[object Array]' == Object.prototype.toString.call(source);
};
/**
 * 将一个变量转换成array
 * @name baidu.lang.toArray
 * @function
 * @grammar baidu.lang.toArray(source)
 * @param {mix} source 需要转换成array的变量
 * @version 1.3
 * @meta standard
 * @returns {array} 转换后的array
 */
baidu.lang.toArray = function (source) {
    if (source === null || source === undefined)
        return [];
    if (baidu.lang.isArray(source))
        return source;
    if (typeof source.length !== 'number' || typeof source === 'string' || baidu.lang.isFunction(source)) {
        return [source];
    }
    if (source.item) {
        var l = source.length, array = new Array(l);
        while (l--)
            array[l] = source[l];
        return array;
    }
    return [].slice.call(source);
};
/**
 * 获得flash对象的实例
 * @name baidu.swf.getMovie
 * @function
 * @grammar baidu.swf.getMovie(name)
 * @param {string} name flash对象的名称
 * @see baidu.swf.create
 * @meta standard
 * @returns {HTMLElement} flash对象的实例
 */
baidu.swf.getMovie = function (name) {
    var movie = document[name], ret;
    return baidu.browser.ie == 9 ?
        movie && movie.length ?
            (ret = baidu.array.remove(baidu.lang.toArray(movie),function(item){
                return item.tagName.toLowerCase() != "embed";
            })).length == 1 ? ret[0] : ret
            : movie
        : movie || window[name];
};
baidu.flash._Base = (function(){
    var prefix = 'bd__flash__';
    /**
     * 创建一个随机的字符串
     * @private
     * @return {String}
     */
    function _createString(){
        return  prefix + Math.floor(Math.random() * 2147483648).toString(36);
    };
    /**
     * 检查flash状态
     * @private
     * @param {Object} target flash对象
     * @return {Boolean}
     */
    function _checkReady(target){
        if(typeof target !== 'undefined' && typeof target.flashInit !== 'undefined' && target.flashInit()){
            return true;
        }else{
            return false;
        }
    };
    /**
     * 调用之前进行压栈的函数
     * @private
     * @param {Array} callQueue 调用队列
     * @param {Object} target flash对象
     * @return {Null}
     */
    function _callFn(callQueue, target){
        var result = null;
        callQueue = callQueue.reverse();
        baidu.each(callQueue, function(item){
            result = target.call(item.fnName, item.params);
            item.callBack(result);
        });
    };
    /**
     * 为传入的匿名函数创建函数名
     * @private
     * @param {String|Function} fun 传入的匿名函数或者函数名
     * @return {String}
     */
    function _createFunName(fun){
        var name = '';
        if(baidu.lang.isFunction(fun)){
            name = _createString();
            window[name] = function(){
                fun.apply(window, arguments);
            };
            return name;
        }else if(baidu.lang.isString){
            return fun;
        }
    };
    /**
     * 绘制flash
     * @private
     * @param {Object} options 创建参数
     * @return {Object}
     */
    function _render(options){
        if(!options.id){
            options.id = _createString();
        }
        var container = options.container || '';
        delete(options.container);
        baidu.swf.create(options, container);
        return baidu.swf.getMovie(options.id);
    };
    return function(options, callBack){
        var me = this,
            autoRender = (typeof options.autoRender !== 'undefined' ? options.autoRender : true),
            createOptions = options.createOptions || {},
            target = null,
            isReady = false,
            callQueue = [],
            timeHandle = null,
            callBack = callBack || [];
        /**
         * 将flash文件绘制到页面上
         * @public
         * @return {Null}
         */
        me.render = function(){
            target = _render(createOptions);
            if(callBack.length > 0){
                baidu.each(callBack, function(funName, index){
                    callBack[index] = _createFunName(options[funName] || new Function());
                });
            }
            me.call('setJSFuncName', [callBack]);
        };
        /**
         * 返回flash状态
         * @return {Boolean}
         */
        me.isReady = function(){
            return isReady;
        };
        /**
         * 调用flash接口的统一入口
         * @param {String} fnName 调用的函数名
         * @param {Array} params 传入的参数组成的数组,若不许要参数,需传入空数组
         * @param {Function} [callBack] 异步调用后将返回值作为参数的调用回调函数,如无返回值,可以不传入此参数
         * @return {Null}
        */
        me.call = function(fnName, params, callBack){
            if(!fnName) return null;
            callBack = callBack || new Function();
            var result = null;
            if(isReady){
                result = target.call(fnName, params);
                callBack(result);
            }else{
                callQueue.push({
                    fnName: fnName,
                    params: params,
                    callBack: callBack
                });
                (!timeHandle) && (timeHandle = setInterval(_check, 200));
            }
        };
        /**
         * 为传入的匿名函数创建函数名
         * @public
         * @param {String|Function} fun 传入的匿名函数或者函数名
         * @return {String}
         */
        me.createFunName = function(fun){
            return _createFunName(fun);
        };
        /**
         * 检查flash是否ready, 并进行调用
         * @private
         * @return {Null}
         */
        function _check(){
            if(_checkReady(target)){
                clearInterval(timeHandle);
                timeHandle = null;
                _call();
                isReady = true;
            }
        };
        /**
         * 调用之前进行压栈的函数
         * @private
         * @return {Null}
         */
        function _call(){
            _callFn(callQueue, target);
            callQueue = [];
        }
        autoRender && me.render();
    };
})();
/**
 * 创建flash based imageUploader
 * @class
 * @grammar baidu.flash.imageUploader(options)
 * @param {Object} createOptions 创建flash时需要的参数,请参照baidu.swf.create文档
 * @config {Object} vars 创建imageUploader时所需要的参数
 * @config {Number} vars.gridWidth 每一个预览图片所占的宽度,应该为flash寛的整除
 * @config {Number} vars.gridHeight 每一个预览图片所占的高度,应该为flash高的整除
 * @config {Number} vars.picWidth 单张预览图片的宽度
 * @config {Number} vars.picHeight 单张预览图片的高度
 * @config {String} vars.uploadDataFieldName POST请求中图片数据的key,默认值'picdata'
 * @config {String} vars.picDescFieldName POST请求中图片描述的key,默认值'picDesc'
 * @config {Number} vars.maxSize 文件的最大体积,单位'MB'
 * @config {Number} vars.compressSize 上传前如果图片体积超过该值,会先压缩
 * @config {Number} vars.maxNum:32 最大上传多少个文件
 * @config {Number} vars.compressLength 能接受的最大边长,超过该值会等比压缩
 * @config {String} vars.url 上传的url地址
 * @config {Number} vars.mode mode == 0时,是使用滚动条,mode == 1时,拉伸flash, 默认值为0
 * @see baidu.swf.createHTML
 * @param {String} backgroundUrl 背景图片路径
 * @param {String} listBacgroundkUrl 布局控件背景
 * @param {String} buttonUrl 按钮图片不背景
 * @param {String|Function} selectFileCallback 选择文件的回调
 * @param {String|Function} exceedFileCallback文件超出限制的最大体积时的回调
 * @param {String|Function} deleteFileCallback 删除文件的回调
 * @param {String|Function} startUploadCallback 开始上传某个文件时的回调
 * @param {String|Function} uploadCompleteCallback 某个文件上传完成的回调
 * @param {String|Function} uploadErrorCallback 某个文件上传失败的回调
 * @param {String|Function} allCompleteCallback 全部上传完成时的回调
 * @param {String|Function} changeFlashHeight 改变Flash的高度,mode==1的时候才有用
 */
baidu.flash.imageUploader = baidu.flash.imageUploader || function(options){
    var me = this,
        options = options || {},
        _flash = new baidu.flash._Base(options, [
            'selectFileCallback',
            'exceedFileCallback',
            'deleteFileCallback',
            'startUploadCallback',
            'uploadCompleteCallback',
            'uploadErrorCallback',
            'allCompleteCallback',
            'changeFlashHeight'
        ]);
    /**
     * 开始或回复上传图片
     * @public
     * @return {Null}
     */
    me.upload = function(){
        _flash.call('upload');
    };
    /**
     * 暂停上传图片
     * @public
     * @return {Null}
     */
    me.pause = function(){
        _flash.call('pause');
    };
    me.addCustomizedParams = function(index,obj){
        _flash.call('addCustomizedParams',[index,obj]);
    }
};
/**
 * 操作原生对象的方法
 * @namespace baidu.object
 */
baidu.object = baidu.object || {};
/**
 * 将源对象的所有属性拷贝到目标对象中
 * @author erik
 * @name baidu.object.extend
 * @function
 * @grammar baidu.object.extend(target, source)
 * @param {Object} target 目标对象
 * @param {Object} source 源对象
 * @see baidu.array.merge
 * @remark
 *
1.目标对象中,与源对象key相同的成员将会被覆盖。<br>
2.源对象的prototype成员不会拷贝。
 * @shortcut extend
 * @meta standard
 *
 * @returns {Object} 目标对象
 */
baidu.extend =
baidu.object.extend = function (target, source) {
    for (var p in source) {
        if (source.hasOwnProperty(p)) {
            target[p] = source[p];
        }
    }
    return target;
};
/**
 * 创建flash based fileUploader
 * @class
 * @grammar baidu.flash.fileUploader(options)
 * @param {Object} options
 * @config {Object} createOptions 创建flash时需要的参数,请参照baidu.swf.create文档
 * @config {String} createOptions.width
 * @config {String} createOptions.height
 * @config {Number} maxNum 最大可选文件数
 * @config {Function|String} selectFile
 * @config {Function|String} exceedMaxSize
 * @config {Function|String} deleteFile
 * @config {Function|String} uploadStart
 * @config {Function|String} uploadComplete
 * @config {Function|String} uploadError
 * @config {Function|String} uploadProgress
 */
baidu.flash.fileUploader = baidu.flash.fileUploader || function(options){
    var me = this,
        options = options || {};
    options.createOptions = baidu.extend({
        wmod: 'transparent'
    },options.createOptions || {});
    var _flash = new baidu.flash._Base(options, [
        'selectFile',
        'exceedMaxSize',
        'deleteFile',
        'uploadStart',
        'uploadComplete',
        'uploadError',
        'uploadProgress'
    ]);
    _flash.call('setMaxNum', options.maxNum ? [options.maxNum] : [1]);
    /**
     * 设置当鼠标移动到flash上时,是否变成手型
     * @public
     * @param {Boolean} isCursor
     * @return {Null}
     */
    me.setHandCursor = function(isCursor){
        _flash.call('setHandCursor', [isCursor || false]);
    };
    /**
     * 设置鼠标相应函数名
     * @param {String|Function} fun
     */
    me.setMSFunName = function(fun){
        _flash.call('setMSFunName',[_flash.createFunName(fun)]);
    };
    /**
     * 执行上传操作
     * @param {String} url 上传的url
     * @param {String} fieldName 上传的表单字段名
     * @param {Object} postData 键值对,上传的POST数据
     * @param {Number|Array|null|-1} [index]上传的文件序列
     *                            Int值上传该文件
     *                            Array一次串行上传该序列文件
     *                            -1/null上传所有文件
     * @return {Null}
     */
    me.upload = function(url, fieldName, postData, index){
        if(typeof url !== 'string' || typeof fieldName !== 'string') return null;
        if(typeof index === 'undefined') index = -1;
        _flash.call('upload', [url, fieldName, postData, index]);
    };
    /**
     * 取消上传操作
     * @public
     * @param {Number|-1} index
     */
    me.cancel = function(index){
        if(typeof index === 'undefined') index = -1;
        _flash.call('cancel', [index]);
    };
    /**
     * 删除文件
     * @public
     * @param {Number|Array} [index] 要删除的index,不传则全部删除
     * @param {Function} callBack
     * */
    me.deleteFile = function(index, callBack){
        var callBackAll = function(list){
                callBack && callBack(list);
            };
        if(typeof index === 'undefined'){
            _flash.call('deleteFilesAll', [], callBackAll);
            return;
        };
        if(typeof index === 'Number') index = [index];
        index.sort(function(a,b){
            return b-a;
        });
        baidu.each(index, function(item){
            _flash.call('deleteFileBy', item, callBackAll);
        });
    };
    /**
     * 添加文件类型,支持macType
     * @public
     * @param {Object|Array[Object]} type {description:String, extention:String}
     * @return {Null};
     */
    me.addFileType = function(type){
        var type = type || [[]];
        if(type instanceof Array) type = [type];
        else type = [[type]];
        _flash.call('addFileTypes', type);
    };
    /**
     * 设置文件类型,支持macType
     * @public
     * @param {Object|Array[Object]} type {description:String, extention:String}
     * @return {Null};
     */
    me.setFileType = function(type){
        var type = type || [[]];
        if(type instanceof Array) type = [type];
        else type = [[type]];
        _flash.call('setFileTypes', type);
    };
    /**
     * 设置可选文件的数量限制
     * @public
     * @param {Number} num
     * @return {Null}
     */
    me.setMaxNum = function(num){
        _flash.call('setMaxNum', [num]);
    };
    /**
     * 设置可选文件大小限制,以兆M为单位
     * @public
     * @param {Number} num,0为无限制
     * @return {Null}
     */
    me.setMaxSize = function(num){
        _flash.call('setMaxSize', [num]);
    };
    /**
     * @public
     */
    me.getFileAll = function(callBack){
        _flash.call('getFileAll', [], callBack);
    };
    /**
     * @public
     * @param {Number} index
     * @param {Function} [callBack]
     */
    me.getFileByIndex = function(index, callBack){
        _flash.call('getFileByIndex', [], callBack);
    };
    /**
     * @public
     * @param {Number} index
     * @param {function} [callBack]
     */
    me.getStatusByIndex = function(index, callBack){
        _flash.call('getStatusByIndex', [], callBack);
    };
};
/**
 * 使用动态script标签请求服务器资源,包括由服务器端的回调和浏览器端的回调
 * @namespace baidu.sio
 */
baidu.sio = baidu.sio || {};
/**
 *
 * @param {HTMLElement} src script节点
 * @param {String} url script节点的地址
 * @param {String} [charset] 编码
 */
baidu.sio._createScriptTag = function(scr, url, charset){
    scr.setAttribute('type', 'text/javascript');
    charset && scr.setAttribute('charset', charset);
    scr.setAttribute('src', url);
    document.getElementsByTagName('head')[0].appendChild(scr);
};
/**
 * 删除script的属性,再删除script标签,以解决修复内存泄漏的问题
 *
 * @param {HTMLElement} src script节点
 */
baidu.sio._removeScriptTag = function(scr){
    if (scr.clearAttributes) {
        scr.clearAttributes();
    } else {
        for (var attr in scr) {
            if (scr.hasOwnProperty(attr)) {
                delete scr[attr];
            }
        }
    }
    if(scr && scr.parentNode){
        scr.parentNode.removeChild(scr);
    }
    scr = null;
};
/**
 * 通过script标签加载数据,加载完成由浏览器端触发回调
 * @name baidu.sio.callByBrowser
 * @function
 * @grammar baidu.sio.callByBrowser(url, opt_callback, opt_options)
 * @param {string} url 加载数据的url
 * @param {Function|string} opt_callback 数据加载结束时调用的函数或函数名
 * @param {Object} opt_options 其他可选项
 * @config {String} [charset] script的字符集
 * @config {Integer} [timeOut] 超时时间,超过这个时间将不再响应本请求,并触发onfailure函数
 * @config {Function} [onfailure] timeOut设定后才生效,到达超时时间时触发本函数
 * @remark
 * 1、与callByServer不同,callback参数只支持Function类型,不支持string。
 * 2、如果请求了一个不存在的页面,callback函数在IE/opera下也会被调用,因此使用者需要在onsuccess函数中判断数据是否正确加载。
 * @meta standard
 * @see baidu.sio.callByServer
 */
baidu.sio.callByBrowser = function (url, opt_callback, opt_options) {
    var scr = document.createElement("SCRIPT"),
        scriptLoaded = 0,
        options = opt_options || {},
        charset = options['charset'],
        callback = opt_callback || function(){},
        timeOut = options['timeOut'] || 0,
        timer;
    scr.onload = scr.onreadystatechange = function () {
        if (scriptLoaded) {
            return;
        }
        var readyState = scr.readyState;
        if ('undefined' == typeof readyState
            || readyState == "loaded"
            || readyState == "complete") {
            scriptLoaded = 1;
            try {
                callback();
                clearTimeout(timer);
            } finally {
                scr.onload = scr.onreadystatechange = null;
                baidu.sio._removeScriptTag(scr);
            }
        }
    };
    if( timeOut ){
        timer = setTimeout(function(){
            scr.onload = scr.onreadystatechange = null;
            baidu.sio._removeScriptTag(scr);
            options.onfailure && options.onfailure();
        }, timeOut);
    }
    baidu.sio._createScriptTag(scr, url, charset);
};
/**
 * 通过script标签加载数据,加载完成由服务器端触发回调
 * @name baidu.sio.callByServer
 * @function
 * @grammar baidu.sio.callByServer(url, callback[, opt_options])
 * @param {string} url 加载数据的url.
 * @param {Function|string} callback 服务器端调用的函数或函数名。如果没有指定本参数,将在URL中寻找options['queryField']做为callback的方法名.
 * @param {Object} opt_options 加载数据时的选项.
 * @config {string} [charset] script的字符集
 * @config {string} [queryField] 服务器端callback请求字段名,默认为callback
 * @config {Integer} [timeOut] 超时时间(单位:ms),超过这个时间将不再响应本请求,并触发onfailure函数
 * @config {Function} [onfailure] timeOut设定后才生效,到达超时时间时触发本函数
 * @remark
 * 如果url中已经包含key为“options['queryField']”的query项,将会被替换成callback中参数传递或自动生成的函数名。
 * @meta standard
 * @see baidu.sio.callByBrowser
 */
baidu.sio.callByServer = /**@function*/function(url, callback, opt_options) {
    var scr = document.createElement('SCRIPT'),
        prefix = 'bd__cbs__',
        callbackName,
        callbackImpl,
        options = opt_options || {},
        charset = options['charset'],
        queryField = options['queryField'] || 'callback',
        timeOut = options['timeOut'] || 0,
        timer,
        reg = new RegExp('(\\?|&)' + queryField + '=([^&]*)'),
        matches;
    if (baidu.lang.isFunction(callback)) {
        callbackName = prefix + Math.floor(Math.random() * 2147483648).toString(36);
        window[callbackName] = getCallBack(0);
    } else if(baidu.lang.isString(callback)){
        callbackName = callback;
    } else {
        if (matches = reg.exec(url)) {
            callbackName = matches[2];
        }
    }
    if( timeOut ){
        timer = setTimeout(getCallBack(1), timeOut);
    }
    url = url.replace(reg, '\x241' + queryField + '=' + callbackName);
    if (url.search(reg) < 0) {
        url += (url.indexOf('?') < 0 ? '?' : '&') + queryField + '=' + callbackName;
    }
    baidu.sio._createScriptTag(scr, url, charset);
    /*
     * 返回一个函数,用于立即(挂在window上)或者超时(挂在setTimeout中)时执行
     */
    function getCallBack(onTimeOut){
        /*global callbackName, callback, scr, options;*/
        return function(){
            try {
                if( onTimeOut ){
                    options.onfailure && options.onfailure();
                }else{
                    callback.apply(window, arguments);
                    clearTimeout(timer);
                }
                window[callbackName] = null;
                delete window[callbackName];
            } catch (exception) {
            } finally {
                baidu.sio._removeScriptTag(scr);
            }
        }
    }
};
/**
 * 通过请求一个图片的方式令服务器存储一条日志
 * @function
 * @grammar baidu.sio.log(url)
 * @param {string} url 要发送的地址.
 * @author: int08h,leeight
 */
baidu.sio.log = function(url) {
  var img = new Image(),
      key = 'tangram_sio_log_' + Math.floor(Math.random() *
            2147483648).toString(36);
  window[key] = img;
  img.onload = img.onerror = img.onabort = function() {
    img.onload = img.onerror = img.onabort = null;
    window[key] = null;
    img = null;
  };
  img.src = url;
};
/*
 * Tangram
 * Copyright 2009 Baidu Inc. All rights reserved.
 *
 * path: baidu/json.js
 * author: erik
 * version: 1.1.0
 * date: 2009/12/02
 */
/**
 * 操作json对象的方法
 * @namespace baidu.json
 */
baidu.json = baidu.json || {};
/*
 * Tangram
 * Copyright 2009 Baidu Inc. All rights reserved.
 *
 * path: baidu/json/parse.js
 * author: erik, berg
 * version: 1.2
 * date: 2009/11/23
 */
/**
 * 将字符串解析成json对象。注:不会自动祛除空格
 * @name baidu.json.parse
 * @function
 * @grammar baidu.json.parse(data)
 * @param {string} source 需要解析的字符串
 * @remark
 * 该方法的实现与ecma-262第五版中规定的JSON.parse不同,暂时只支持传入一个参数。后续会进行功能丰富。
 * @meta standard
 * @see baidu.json.stringify,baidu.json.decode
 *
 * @returns {JSON} 解析结果json对象
 */
baidu.json.parse = function (data) {
    //2010/12/09:更新至不使用原生parse,不检测用户输入是否正确
    return (new Function("return (" + data + ")"))();
};
/*
 * Tangram
 * Copyright 2009 Baidu Inc. All rights reserved.
 *
 * path: baidu/json/decode.js
 * author: erik, cat
 * version: 1.3.4
 * date: 2010/12/23
 */
/**
 * 将字符串解析成json对象,为过时接口,今后会被baidu.json.parse代替
 * @name baidu.json.decode
 * @function
 * @grammar baidu.json.decode(source)
 * @param {string} source 需要解析的字符串
 * @meta out
 * @see baidu.json.encode,baidu.json.parse
 *
 * @returns {JSON} 解析结果json对象
 */
baidu.json.decode = baidu.json.parse;
/*
 * Tangram
 * Copyright 2009 Baidu Inc. All rights reserved.
 *
 * path: baidu/json/stringify.js
 * author: erik
 * version: 1.1.0
 * date: 2010/01/11
 */
/**
 * 将json对象序列化
 * @name baidu.json.stringify
 * @function
 * @grammar baidu.json.stringify(value)
 * @param {JSON} value 需要序列化的json对象
 * @remark
 * 该方法的实现与ecma-262第五版中规定的JSON.stringify不同,暂时只支持传入一个参数。后续会进行功能丰富。
 * @meta standard
 * @see baidu.json.parse,baidu.json.encode
 *
 * @returns {string} 序列化后的字符串
 */
baidu.json.stringify = (function () {
    /**
     * 字符串处理时需要转义的字符表
     * @private
     */
    var escapeMap = {
        "\b": '\\b',
        "\t": '\\t',
        "\n": '\\n',
        "\f": '\\f',
        "\r": '\\r',
        '"' : '\\"',
        "\\": '\\\\'
    };
    /**
     * 字符串序列化
     * @private
     */
    function encodeString(source) {
        if (/["\\\x00-\x1f]/.test(source)) {
            source = source.replace(
                /["\\\x00-\x1f]/g,
                function (match) {
                    var c = escapeMap[match];
                    if (c) {
                        return c;
                    }
                    c = match.charCodeAt();
                    return "\\u00"
                            + Math.floor(c / 16).toString(16)
                            + (c % 16).toString(16);
                });
        }
        return '"' + source + '"';
    }
    /**
     * 数组序列化
     * @private
     */
    function encodeArray(source) {
        var result = ["["],
            l = source.length,
            preComma, i, item;
        for (i = 0; i < l; i++) {
            item = source[i];
            switch (typeof item) {
            case "undefined":
            case "function":
            case "unknown":
                break;
            default:
                if(preComma) {
                    result.push(',');
                }
                result.push(baidu.json.stringify(item));
                preComma = 1;
            }
        }
        result.push("]");
        return result.join("");
    }
    /**
     * 处理日期序列化时的补零
     * @private
     */
    function pad(source) {
        return source < 10 ? '0' + source : source;
    }
    /**
     * 日期序列化
     * @private
     */
    function encodeDate(source){
        return '"' + source.getFullYear() + "-"
                + pad(source.getMonth() + 1) + "-"
                + pad(source.getDate()) + "T"
                + pad(source.getHours()) + ":"
                + pad(source.getMinutes()) + ":"
                + pad(source.getSeconds()) + '"';
    }
    return function (value) {
        switch (typeof value) {
        case 'undefined':
            return 'undefined';
        case 'number':
            return isFinite(value) ? String(value) : "null";
        case 'string':
            return encodeString(value);
        case 'boolean':
            return String(value);
        default:
            if (value === null) {
                return 'null';
            } else if (value instanceof Array) {
                return encodeArray(value);
            } else if (value instanceof Date) {
                return encodeDate(value);
            } else {
                var result = ['{'],
                    encode = baidu.json.stringify,
                    preComma,
                    item;
                for (var key in value) {
                    if (Object.prototype.hasOwnProperty.call(value, key)) {
                        item = value[key];
                        switch (typeof item) {
                        case 'undefined':
                        case 'unknown':
                        case 'function':
                            break;
                        default:
                            if (preComma) {
                                result.push(',');
                            }
                            preComma = 1;
                            result.push(encode(key) + ':' + encode(item));
                        }
                    }
                }
                result.push('}');
                return result.join('');
            }
        }
    };
})();
/*
 * Tangram
 * Copyright 2009 Baidu Inc. All rights reserved.
 *
 * path: baidu/json/encode.js
 * author: erik, cat
 * version: 1.3.4
 * date: 2010/12/23
 */
/**
 * 将json对象序列化,为过时接口,今后会被baidu.json.stringify代替
 * @name baidu.json.encode
 * @function
 * @grammar baidu.json.encode(value)
 * @param {JSON} value 需要序列化的json对象
 * @meta out
 * @see baidu.json.decode,baidu.json.stringify
 *
 * @returns {string} 序列化后的字符串
 */
baidu.json.encode = baidu.json.stringify;
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/wordimage/wordimage.html
New file
@@ -0,0 +1,111 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <script type="text/javascript" src="../internal.js"></script>
    <style type="text/css">
        .wrapper{width: 600px;padding: 10px;height: 352px;overflow: hidden;position: relative;border-bottom: 1px solid #d7d7d7}
        .localPath input{float: left;width: 350px;line-height: 20px;height: 20px;}
        #clipboard{float:left;width: 70px;height: 30px; }
        .description{ color: #0066cc; margin-top: 2px; width: 450px; height: 45px;float: left;line-height: 22px}
        #upload{width: 100px;height: 30px;float: right; margin:10px 2px 0 0;cursor: pointer;}
        #msg{ width: 140px; height: 30px; line-height:25px;float: left;color: red}
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="localPath">
            <input id="localPath" type="text" readonly />
            <div id="clipboard"></div>
            <div id="msg"></div>
        </div>
        <div id="flashContainer"></div>
        <div>
            <div id="upload" style="display: none" ><img id="uploadBtn"></div>
            <div class="description">
                <span style="color: red"><var id="lang_resave"></var>: </span><var id="lang_step"></var>
            </div>
          </div>
    </div>
    <script type="text/javascript" src="tangram.js"></script>
    <script type="text/javascript" src="wordimage.js"></script>
    <script type="text/javascript">
        editor.setOpt({
            wordImageFieldName:"upfile",
            compressSide:0,
            maxImageSideLength:900
        });
            //全局变量
        var imageUrls = [],          //用于保存从服务器返回的图片信息数组
            selectedImageCount = 0,  //当前已选择的但未上传的图片数量
            optImageUrl = editor.getActionUrl(editor.getOpt('imageActionName')),
            optImageFieldName = editor.getOpt('imageFieldName'),
            optImageCompressBorder = editor.getOpt('imageCompressEnable') ? editor.getOpt('imageCompressBorder'):null,
            maxSize = editor.getOpt('imageMaxSize') / 1024,
            extension = editor.getOpt('imageAllowFiles').join(';').replace(/\./g, '*.');
        /* 添加额外的GET参数 */
        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',
            urlWidthParams = optImageUrl + (optImageUrl.indexOf('?') == -1 ? '?':'&') + params;
        utils.domReady(function(){
            //创建Flash相关的参数集合
            var flashOptions = {
                container:"flashContainer",                                                    //flash容器id
                url:urlWidthParams,                                           // 上传处理页面的url地址
                ext:editor.queryCommandValue('serverParam') || {},                                 //可向服务器提交的自定义参数列表
                fileType:'{"description":"'+lang.fileType+'", "extension":"' + extension + '"}',     //上传文件格式限制
                flashUrl:'imageUploader.swf',                                                  //上传用的flash组件地址
                width:600,          //flash的宽度
                height:272,         //flash的高度
                gridWidth:120,     // 每一个预览图片所占的宽度
                gridHeight:120,    // 每一个预览图片所占的高度
                picWidth:100,      // 单张预览图片的宽度
                picHeight:100,     // 单张预览图片的高度
                uploadDataFieldName: optImageFieldName,    // POST请求中图片数据的key
                picDescFieldName:'pictitle',      // POST请求中图片描述的key
                maxSize: maxSize,                         // 文件的最大体积,单位M
                compressSize:1,                   // 上传前如果图片体积超过该值,会先压缩,单位M
                maxNum:32,                         // 单次最大可上传多少个文件
                compressSide: 0,                 //等比压缩的基准,0为按照最长边,1为按照宽度,2为按照高度
                compressLength: optImageCompressBorder        //能接受的最大边长,超过该值Flash会自动等比压缩
            };
            //回调函数集合,支持传递函数名的字符串、函数句柄以及函数本身三种类型
            var callbacks={
                selectFileCallback: function(selectFiles){                // 选择文件的回调
                    selectedImageCount += selectFiles.length;
                    if(selectedImageCount) baidu.g("upload").style.display = "";
                    dialog.buttons[0].setDisabled(true); //初始化时置灰确定按钮
                },
                deleteFileCallback: function(delFiles){                 // 删除文件的回调
                    selectedImageCount -= delFiles.length;
                    if (!selectedImageCount) {
                        baidu.g("upload").style.display = "none";
                        dialog.buttons[0].setDisabled(false);         //没有选择图片时重新点亮按钮
                    }
                },
                uploadCompleteCallback: function(data){               // 单个文件上传完成的回调
                    try{var info = eval("(" + data.info + ")");
                    info && imageUrls.push(info);
                    selectedImageCount--;
                    }catch(e){}
                },
                uploadErrorCallback: function (data){         // 单个文件上传失败的回调,
                    console && console.log(data);
                },
                allCompleteCallback: function(){              // 全部上传完成时的回调
                    dialog.buttons[0].setDisabled(false);    //上传完毕后点亮按钮
                }
                //exceedFileCallback: 'exceedFileCallback',   // 文件超出限制的最大体积时的回调
                //startUploadCallback: startUploadCallback    // 开始上传某个文件时的回调
            };
            wordImage.init(flashOptions,callbacks);
        });
    </script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/dialogs/wordimage/wordimage.js
New file
@@ -0,0 +1,157 @@
/**
 * Created by JetBrains PhpStorm.
 * User: taoqili
 * Date: 12-1-30
 * Time: 下午12:50
 * To change this template use File | Settings | File Templates.
 */
var wordImage = {};
//(function(){
var g = baidu.g,
    flashObj,flashContainer;
wordImage.init = function(opt, callbacks) {
    showLocalPath("localPath");
    //createCopyButton("clipboard","localPath");
    createFlashUploader(opt, callbacks);
    addUploadListener();
    addOkListener();
};
function hideFlash(){
    flashObj = null;
    flashContainer.innerHTML = "";
}
function addOkListener() {
    dialog.onok = function() {
        if (!imageUrls.length) return;
        var urlPrefix = editor.getOpt('imageUrlPrefix'),
            images = domUtils.getElementsByTagName(editor.document,"img");
        editor.fireEvent('saveScene');
        for (var i = 0,img; img = images[i++];) {
            var src = img.getAttribute("word_img");
            if (!src) continue;
            for (var j = 0,url; url = imageUrls[j++];) {
                if (src.indexOf(url.original.replace(" ","")) != -1) {
                    img.src = urlPrefix + url.url;
                    img.setAttribute("_src", urlPrefix + url.url);  //同时修改"_src"属性
                    img.setAttribute("title",url.title);
                    domUtils.removeAttributes(img, ["word_img","style","width","height"]);
                    editor.fireEvent("selectionchange");
                    break;
                }
            }
        }
        editor.fireEvent('saveScene');
        hideFlash();
    };
    dialog.oncancel = function(){
        hideFlash();
    }
}
/**
 * 绑定开始上传事件
 */
function addUploadListener() {
    g("upload").onclick = function () {
        flashObj.upload();
        this.style.display = "none";
    };
}
function showLocalPath(id) {
    //单张编辑
    var img = editor.selection.getRange().getClosedNode();
    var images = editor.execCommand('wordimage');
    if(images.length==1 || img && img.tagName == 'IMG'){
        g(id).value = images[0];
        return;
    }
    var path = images[0];
    var leftSlashIndex  = path.lastIndexOf("/")||0,  //不同版本的doc和浏览器都可能影响到这个符号,故直接判断两种
        rightSlashIndex = path.lastIndexOf("\\")||0,
        separater = leftSlashIndex > rightSlashIndex ? "/":"\\" ;
    path = path.substring(0, path.lastIndexOf(separater)+1);
    g(id).value = path;
}
function createFlashUploader(opt, callbacks) {
    //由于lang.flashI18n是静态属性,不可以直接进行修改,否则会影响到后续内容
    var i18n = utils.extend({},lang.flashI18n);
    //处理图片资源地址的编码,补全等问题
    for(var i in i18n){
        if(!(i in {"lang":1,"uploadingTF":1,"imageTF":1,"textEncoding":1}) && i18n[i]){
            i18n[i] = encodeURIComponent(editor.options.langPath + editor.options.lang + "/images/" + i18n[i]);
        }
    }
    opt = utils.extend(opt,i18n,false);
    var option = {
        createOptions:{
            id:'flash',
            url:opt.flashUrl,
            width:opt.width,
            height:opt.height,
            errorMessage:lang.flashError,
            wmode:browser.safari ? 'transparent' : 'window',
            ver:'10.0.0',
            vars:opt,
            container:opt.container
        }
    };
    option = extendProperty(callbacks, option);
    flashObj = new baidu.flash.imageUploader(option);
    flashContainer = $G(opt.container);
}
function extendProperty(fromObj, toObj) {
    for (var i in fromObj) {
        if (!toObj[i]) {
            toObj[i] = fromObj[i];
        }
    }
    return toObj;
}
//})();
function getPasteData(id) {
    baidu.g("msg").innerHTML = lang.copySuccess + "</br>";
    setTimeout(function() {
        baidu.g("msg").innerHTML = "";
    }, 5000);
    return baidu.g(id).value;
}
function createCopyButton(id, dataFrom) {
    baidu.swf.create({
            id:"copyFlash",
            url:"fClipboard_ueditor.swf",
            width:"58",
            height:"25",
            errorMessage:"",
            bgColor:"#CBCBCB",
            wmode:"transparent",
            ver:"10.0.0",
            vars:{
                tid:dataFrom
            }
        }, id
    );
    var clipboard = baidu.swf.getMovie("copyFlash");
    var clipinterval = setInterval(function() {
        if (clipboard && clipboard.flashInit) {
            clearInterval(clipinterval);
            clipboard.setHandCursor(true);
            clipboard.setContentFuncName("getPasteData");
            //clipboard.setMEFuncName("mouseEventHandler");
        }
    }, 500);
}
createCopyButton("clipboard", "localPath");
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/index.html
New file
@@ -0,0 +1,175 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>完整demo</title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <script type="text/javascript" charset="utf-8" src="ueditor.config.js"></script>
    <script type="text/javascript" charset="utf-8" src="ueditor.all.min.js"> </script>
    <!--建议手动加在语言,避免在ie下有时因为加载语言失败导致编辑器加载失败-->
    <!--这里加载的语言文件会覆盖你在配置项目里添加的语言类型,比如你在配置项目里配置的是英文,这里加载的中文,那最后就是中文-->
    <script type="text/javascript" charset="utf-8" src="lang/zh-cn/zh-cn.js"></script>
    <style type="text/css">
        div{
            width:100%;
        }
    </style>
</head>
<body>
<div>
    <h1>完整demo</h1>
    <script id="editor" type="text/plain" style="width:1024px;height:500px;"></script>
</div>
<div id="btns">
    <div>
        <button onclick="getAllHtml()">获得整个html的内容</button>
        <button onclick="getContent()">获得内容</button>
        <button onclick="setContent()">写入内容</button>
        <button onclick="setContent(true)">追加内容</button>
        <button onclick="getContentTxt()">获得纯文本</button>
        <button onclick="getPlainTxt()">获得带格式的纯文本</button>
        <button onclick="hasContent()">判断是否有内容</button>
        <button onclick="setFocus()">使编辑器获得焦点</button>
        <button onmousedown="isFocus(event)">编辑器是否获得焦点</button>
        <button onmousedown="setblur(event)" >编辑器失去焦点</button>
    </div>
    <div>
        <button onclick="getText()">获得当前选中的文本</button>
        <button onclick="insertHtml()">插入给定的内容</button>
        <button id="enable" onclick="setEnabled()">可以编辑</button>
        <button onclick="setDisabled()">不可编辑</button>
        <button onclick=" UE.getEditor('editor').setHide()">隐藏编辑器</button>
        <button onclick=" UE.getEditor('editor').setShow()">显示编辑器</button>
        <button onclick=" UE.getEditor('editor').setHeight(300)">设置高度为300默认关闭了自动长高</button>
    </div>
    <div>
        <button onclick="getLocalData()" >获取草稿箱内容</button>
        <button onclick="clearLocalData()" >清空草稿箱</button>
    </div>
</div>
<div>
    <button onclick="createEditor()">
    创建编辑器</button>
    <button onclick="deleteEditor()">
    删除编辑器</button>
</div>
<script type="text/javascript">
    //实例化编辑器
    //建议使用工厂方法getEditor创建和引用编辑器实例,如果在某个闭包下引用该编辑器,直接调用UE.getEditor('editor')就能拿到相关的实例
    var ue = UE.getEditor('editor');
    function isFocus(e){
        alert(UE.getEditor('editor').isFocus());
        UE.dom.domUtils.preventDefault(e)
    }
    function setblur(e){
        UE.getEditor('editor').blur();
        UE.dom.domUtils.preventDefault(e)
    }
    function insertHtml() {
        var value = prompt('插入html代码', '');
        UE.getEditor('editor').execCommand('insertHtml', value)
    }
    function createEditor() {
        enableBtn();
        UE.getEditor('editor');
    }
    function getAllHtml() {
        alert(UE.getEditor('editor').getAllHtml())
    }
    function getContent() {
        var arr = [];
        arr.push("使用editor.getContent()方法可以获得编辑器的内容");
        arr.push("内容为:");
        arr.push(UE.getEditor('editor').getContent());
        alert(arr.join("\n"));
    }
    function getPlainTxt() {
        var arr = [];
        arr.push("使用editor.getPlainTxt()方法可以获得编辑器的带格式的纯文本内容");
        arr.push("内容为:");
        arr.push(UE.getEditor('editor').getPlainTxt());
        alert(arr.join('\n'))
    }
    function setContent(isAppendTo) {
        var arr = [];
        arr.push("使用editor.setContent('欢迎使用ueditor')方法可以设置编辑器的内容");
        UE.getEditor('editor').setContent('欢迎使用ueditor', isAppendTo);
        alert(arr.join("\n"));
    }
    function setDisabled() {
        UE.getEditor('editor').setDisabled('fullscreen');
        disableBtn("enable");
    }
    function setEnabled() {
        UE.getEditor('editor').setEnabled();
        enableBtn();
    }
    function getText() {
        //当你点击按钮时编辑区域已经失去了焦点,如果直接用getText将不会得到内容,所以要在选回来,然后取得内容
        var range = UE.getEditor('editor').selection.getRange();
        range.select();
        var txt = UE.getEditor('editor').selection.getText();
        alert(txt)
    }
    function getContentTxt() {
        var arr = [];
        arr.push("使用editor.getContentTxt()方法可以获得编辑器的纯文本内容");
        arr.push("编辑器的纯文本内容为:");
        arr.push(UE.getEditor('editor').getContentTxt());
        alert(arr.join("\n"));
    }
    function hasContent() {
        var arr = [];
        arr.push("使用editor.hasContents()方法判断编辑器里是否有内容");
        arr.push("判断结果为:");
        arr.push(UE.getEditor('editor').hasContents());
        alert(arr.join("\n"));
    }
    function setFocus() {
        UE.getEditor('editor').focus();
    }
    function deleteEditor() {
        disableBtn();
        UE.getEditor('editor').destroy();
    }
    function disableBtn(str) {
        var div = document.getElementById('btns');
        var btns = UE.dom.domUtils.getElementsByTagName(div, "button");
        for (var i = 0, btn; btn = btns[i++];) {
            if (btn.id == str) {
                UE.dom.domUtils.removeAttributes(btn, ["disabled"]);
            } else {
                btn.setAttribute("disabled", "true");
            }
        }
    }
    function enableBtn() {
        var div = document.getElementById('btns');
        var btns = UE.dom.domUtils.getElementsByTagName(div, "button");
        for (var i = 0, btn; btn = btns[i++];) {
            UE.dom.domUtils.removeAttributes(btn, ["disabled"]);
        }
    }
    function getLocalData () {
        alert(UE.getEditor('editor').execCommand( "getlocaldata" ));
    }
    function clearLocalData () {
        UE.getEditor('editor').execCommand( "clearlocaldata" );
        alert("已清空草稿箱")
    }
</script>
</body>
</html>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/config.json
New file
@@ -0,0 +1,94 @@
/* 前后端通信相关的配置,注释只允许使用多行方式 */
{
    /* 上传图片配置项 */
    "imageActionName": "uploadimage", /* 执行上传图片的action名称 */
    "imageFieldName": "upfile", /* 提交的图片表单名称 */
    "imageMaxSize": 2048000, /* 上传大小限制,单位B */
    "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
    "imageCompressEnable": true, /* 是否压缩图片,默认是true */
    "imageCompressBorder": 1600, /* 图片压缩最长边限制 */
    "imageInsertAlign": "none", /* 插入的图片浮动方式 */
    "imageUrlPrefix": "", /* 图片访问路径前缀 */
    "imagePathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
                                /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
                                /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
                                /* {time} 会替换成时间戳 */
                                /* {yyyy} 会替换成四位年份 */
                                /* {yy} 会替换成两位年份 */
                                /* {mm} 会替换成两位月份 */
                                /* {dd} 会替换成两位日期 */
                                /* {hh} 会替换成两位小时 */
                                /* {ii} 会替换成两位分钟 */
                                /* {ss} 会替换成两位秒 */
                                /* 非法字符 \ : * ? " < > | */
                                /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */
    /* 涂鸦图片上传配置项 */
    "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */
    "scrawlFieldName": "upfile", /* 提交的图片表单名称 */
    "scrawlPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */
    "scrawlUrlPrefix": "", /* 图片访问路径前缀 */
    "scrawlInsertAlign": "none",
    /* 截图工具上传 */
    "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */
    "snapscreenPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */
    "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */
    /* 抓取远程图片配置 */
    "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
    "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */
    "catcherFieldName": "source", /* 提交的图片列表表单名称 */
    "catcherPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "catcherUrlPrefix": "", /* 图片访问路径前缀 */
    "catcherMaxSize": 2048000, /* 上传大小限制,单位B */
    "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */
    /* 上传视频配置 */
    "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */
    "videoFieldName": "upfile", /* 提交的视频表单名称 */
    "videoPathFormat": "/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "videoUrlPrefix": "", /* 视频访问路径前缀 */
    "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */
    "videoAllowFiles": [
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */
    /* 上传文件配置 */
    "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */
    "fileFieldName": "upfile", /* 提交的文件表单名称 */
    "filePathFormat": "/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "fileUrlPrefix": "", /* 文件访问路径前缀 */
    "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */
    "fileAllowFiles": [
        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
    ], /* 上传文件格式显示 */
    /* 列出指定目录下的图片 */
    "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */
    "imageManagerListPath": "/ueditor/jsp/upload/image/", /* 指定要列出图片的目录 */
    "imageManagerListSize": 20, /* 每次列出文件数量 */
    "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */
    "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
    "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */
    /* 列出指定目录下的文件 */
    "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
    "fileManagerListPath": "/ueditor/jsp/upload/file/", /* 指定要列出文件的目录 */
    "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */
    "fileManagerListSize": 20, /* 每次列出文件数量 */
    "fileManagerAllowFiles": [
        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
    ] /* 列出的文件类型 */
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/controller.jsp
New file
@@ -0,0 +1,14 @@
<%@ page language="java" contentType="text/html; charset=UTF-8"
    import="com.baidu.ueditor.ActionEnter"
    pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%
    request.setCharacterEncoding( "utf-8" );
    response.setHeader("Content-Type" , "text/html");
    String rootPath = application.getRealPath( "/" );
    out.write( new ActionEnter( request, rootPath ).exec() );
%>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/ActionEnter.java
New file
@@ -0,0 +1,127 @@
package com.baidu.ueditor;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.baidu.ueditor.define.ActionMap;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.State;
import com.baidu.ueditor.hunter.FileManager;
import com.baidu.ueditor.hunter.ImageHunter;
import com.baidu.ueditor.upload.Uploader;
public class ActionEnter {
    private HttpServletRequest request = null;
    private String rootPath = null;
    private String contextPath = null;
    private String actionType = null;
    private ConfigManager configManager = null;
    public ActionEnter ( HttpServletRequest request, String rootPath ) {
        this.request = request;
        this.rootPath = rootPath;
        this.actionType = request.getParameter( "action" );
        this.contextPath = request.getContextPath();
        this.configManager = ConfigManager.getInstance( this.rootPath, this.contextPath, request.getRequestURI() );
    }
    public String exec () {
        String callbackName = this.request.getParameter("callback");
        if ( callbackName != null ) {
            if ( !validCallbackName( callbackName ) ) {
                return new BaseState( false, AppInfo.ILLEGAL ).toJSONString();
            }
            return callbackName+"("+this.invoke()+");";
        } else {
            return this.invoke();
        }
    }
    public String invoke() {
        if ( actionType == null || !ActionMap.mapping.containsKey( actionType ) ) {
            return new BaseState( false, AppInfo.INVALID_ACTION ).toJSONString();
        }
        if ( this.configManager == null || !this.configManager.valid() ) {
            return new BaseState( false, AppInfo.CONFIG_ERROR ).toJSONString();
        }
        State state = null;
        int actionCode = ActionMap.getType( this.actionType );
        Map<String, Object> conf = null;
        switch ( actionCode ) {
            case ActionMap.CONFIG:
                return this.configManager.getAllConfig().toString();
            case ActionMap.UPLOAD_IMAGE:
            case ActionMap.UPLOAD_SCRAWL:
            case ActionMap.UPLOAD_VIDEO:
            case ActionMap.UPLOAD_FILE:
                conf = this.configManager.getConfig( actionCode );
                state = new Uploader( request, conf ).doExec();
                break;
            case ActionMap.CATCH_IMAGE:
                conf = configManager.getConfig( actionCode );
                String[] list = this.request.getParameterValues( (String)conf.get( "fieldName" ) );
                state = new ImageHunter( conf ).capture( list );
                break;
            case ActionMap.LIST_IMAGE:
            case ActionMap.LIST_FILE:
                conf = configManager.getConfig( actionCode );
                int start = this.getStartIndex();
                state = new FileManager( conf ).listFile( start );
                break;
        }
        return state.toJSONString();
    }
    public int getStartIndex () {
        String start = this.request.getParameter( "start" );
        try {
            return Integer.parseInt( start );
        } catch ( Exception e ) {
            return 0;
        }
    }
    /**
     * callback参数验证
     */
    public boolean validCallbackName ( String name ) {
        if ( name.matches( "^[a-zA-Z_]+[\\w0-9_]*$" ) ) {
            return true;
        }
        return false;
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/ConfigManager.java
New file
@@ -0,0 +1,222 @@
package com.baidu.ueditor;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONObject;
import com.baidu.ueditor.define.ActionMap;
/**
 * 配置管理器
 * @author hancong03@baidu.com
 *
 */
public final class ConfigManager {
    private final String rootPath;
    private final String originalPath;
    private final String contextPath;
    private static final String configFileName = "config.json";
    private String parentPath = null;
    private JSONObject jsonConfig = null;
    // 涂鸦上传filename定义
    private final static String SCRAWL_FILE_NAME = "scrawl";
    // 远程图片抓取filename定义
    private final static String REMOTE_FILE_NAME = "remote";
    /*
     * 通过一个给定的路径构建一个配置管理器, 该管理器要求地址路径所在目录下必须存在config.properties文件
     */
    private ConfigManager ( String rootPath, String contextPath, String uri ) throws FileNotFoundException, IOException {
        rootPath = rootPath.replace( "\\", "/" );
        this.rootPath = rootPath;
        this.contextPath = contextPath;
        if ( contextPath.length() > 0 ) {
            this.originalPath = this.rootPath + uri.substring( contextPath.length() );
        } else {
            this.originalPath = this.rootPath + uri;
        }
        this.initEnv();
    }
    /**
     * 配置管理器构造工厂
     * @param rootPath 服务器根路径
     * @param contextPath 服务器所在项目路径
     * @param uri 当前访问的uri
     * @return 配置管理器实例或者null
     */
    public static ConfigManager getInstance ( String rootPath, String contextPath, String uri ) {
        try {
            return new ConfigManager(rootPath, contextPath, uri);
        } catch ( Exception e ) {
            return null;
        }
    }
    // 验证配置文件加载是否正确
    public boolean valid () {
        return this.jsonConfig != null;
    }
    public JSONObject getAllConfig () {
        return this.jsonConfig;
    }
    public Map<String, Object> getConfig ( int type ) {
        Map<String, Object> conf = new HashMap<String, Object>();
        String savePath = null;
        switch ( type ) {
            case ActionMap.UPLOAD_FILE:
                conf.put( "isBase64", "false" );
                conf.put( "maxSize", this.jsonConfig.getLong( "fileMaxSize" ) );
                conf.put( "allowFiles", this.getArray( "fileAllowFiles" ) );
                conf.put( "fieldName", this.jsonConfig.getString( "fileFieldName" ) );
                savePath = this.jsonConfig.getString( "filePathFormat" );
                break;
            case ActionMap.UPLOAD_IMAGE:
                conf.put( "isBase64", "false" );
                conf.put( "maxSize", this.jsonConfig.getLong( "imageMaxSize" ) );
                conf.put( "allowFiles", this.getArray( "imageAllowFiles" ) );
                conf.put( "fieldName", this.jsonConfig.getString( "imageFieldName" ) );
                savePath = this.jsonConfig.getString( "imagePathFormat" );
                break;
            case ActionMap.UPLOAD_VIDEO:
                conf.put( "maxSize", this.jsonConfig.getLong( "videoMaxSize" ) );
                conf.put( "allowFiles", this.getArray( "videoAllowFiles" ) );
                conf.put( "fieldName", this.jsonConfig.getString( "videoFieldName" ) );
                savePath = this.jsonConfig.getString( "videoPathFormat" );
                break;
            case ActionMap.UPLOAD_SCRAWL:
                conf.put( "filename", ConfigManager.SCRAWL_FILE_NAME );
                conf.put( "maxSize", this.jsonConfig.getLong( "scrawlMaxSize" ) );
                conf.put( "fieldName", this.jsonConfig.getString( "scrawlFieldName" ) );
                conf.put( "isBase64", "true" );
                savePath = this.jsonConfig.getString( "scrawlPathFormat" );
                break;
            case ActionMap.CATCH_IMAGE:
                conf.put( "filename", ConfigManager.REMOTE_FILE_NAME );
                conf.put( "filter", this.getArray( "catcherLocalDomain" ) );
                conf.put( "maxSize", this.jsonConfig.getLong( "catcherMaxSize" ) );
                conf.put( "allowFiles", this.getArray( "catcherAllowFiles" ) );
                conf.put( "fieldName", this.jsonConfig.getString( "catcherFieldName" ) + "[]" );
                savePath = this.jsonConfig.getString( "catcherPathFormat" );
                break;
            case ActionMap.LIST_IMAGE:
                conf.put( "allowFiles", this.getArray( "imageManagerAllowFiles" ) );
                conf.put( "dir", this.jsonConfig.getString( "imageManagerListPath" ) );
                conf.put( "count", this.jsonConfig.getInt( "imageManagerListSize" ) );
                break;
            case ActionMap.LIST_FILE:
                conf.put( "allowFiles", this.getArray( "fileManagerAllowFiles" ) );
                conf.put( "dir", this.jsonConfig.getString( "fileManagerListPath" ) );
                conf.put( "count", this.jsonConfig.getInt( "fileManagerListSize" ) );
                break;
        }
        conf.put( "savePath", savePath );
        conf.put( "rootPath", this.rootPath );
        return conf;
    }
    private void initEnv () throws FileNotFoundException, IOException {
        File file = new File( this.originalPath );
        if ( !file.isAbsolute() ) {
            file = new File( file.getAbsolutePath() );
        }
        this.parentPath = file.getParent();
        String configContent = this.readFile( this.getConfigPath() );
        try{
            JSONObject jsonConfig = new JSONObject( configContent );
            this.jsonConfig = jsonConfig;
        } catch ( Exception e ) {
            this.jsonConfig = null;
        }
    }
    private String getConfigPath () {
        return this.parentPath + File.separator + ConfigManager.configFileName;
    }
    private String[] getArray ( String key ) {
        JSONArray jsonArray = this.jsonConfig.getJSONArray( key );
        String[] result = new String[ jsonArray.length() ];
        for ( int i = 0, len = jsonArray.length(); i < len; i++ ) {
            result[i] = jsonArray.getString( i );
        }
        return result;
    }
    private String readFile ( String path ) throws IOException {
        StringBuilder builder = new StringBuilder();
        try {
            InputStreamReader reader = new InputStreamReader( new FileInputStream( path ), "UTF-8" );
            BufferedReader bfReader = new BufferedReader( reader );
            String tmpContent = null;
            while ( ( tmpContent = bfReader.readLine() ) != null ) {
                builder.append( tmpContent );
            }
            bfReader.close();
        } catch ( UnsupportedEncodingException e ) {
            // 忽略
        }
        return this.filter( builder.toString() );
    }
    // 过滤输入字符串, 剔除多行注释以及替换掉反斜杠
    private String filter ( String input ) {
        return input.replaceAll( "/\\*[\\s\\S]*?\\*/", "" );
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/Encoder.java
New file
@@ -0,0 +1,24 @@
package com.baidu.ueditor;
public class Encoder {
    public static String toUnicode ( String input ) {
        StringBuilder builder = new StringBuilder();
        char[] chars = input.toCharArray();
        for ( char ch : chars ) {
            if ( ch < 256 ) {
                builder.append( ch );
            } else {
                builder.append( "\\u" +  Integer.toHexString( ch& 0xffff ) );
            }
        }
        return builder.toString();
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/PathFormat.java
New file
@@ -0,0 +1,157 @@
package com.baidu.ueditor;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PathFormat {
    private static final String TIME = "time";
    private static final String FULL_YEAR = "yyyy";
    private static final String YEAR = "yy";
    private static final String MONTH = "mm";
    private static final String DAY = "dd";
    private static final String HOUR = "hh";
    private static final String MINUTE = "ii";
    private static final String SECOND = "ss";
    private static final String RAND = "rand";
    private static Date currentDate = null;
    public static String parse ( String input ) {
        Pattern pattern = Pattern.compile( "\\{([^\\}]+)\\}", Pattern.CASE_INSENSITIVE  );
        Matcher matcher = pattern.matcher(input);
        PathFormat.currentDate = new Date();
        StringBuffer sb = new StringBuffer();
        while ( matcher.find() ) {
            matcher.appendReplacement(sb, PathFormat.getString( matcher.group( 1 ) ) );
        }
        matcher.appendTail(sb);
        return sb.toString();
    }
    /**
     * 格式化路径, 把windows路径替换成标准路径
     * @param input 待格式化的路径
     * @return 格式化后的路径
     */
    public static String format ( String input ) {
        return input.replace( "\\", "/" );
    }
    public static String parse ( String input, String filename ) {
        Pattern pattern = Pattern.compile( "\\{([^\\}]+)\\}", Pattern.CASE_INSENSITIVE  );
        Matcher matcher = pattern.matcher(input);
        String matchStr = null;
        PathFormat.currentDate = new Date();
        StringBuffer sb = new StringBuffer();
        while ( matcher.find() ) {
            matchStr = matcher.group( 1 );
            if ( matchStr.indexOf( "filename" ) != -1 ) {
                filename = filename.replace( "$", "\\$" ).replaceAll( "[\\/:*?\"<>|]", "" );
                matcher.appendReplacement(sb, filename );
            } else {
                matcher.appendReplacement(sb, PathFormat.getString( matchStr ) );
            }
        }
        matcher.appendTail(sb);
        return sb.toString();
    }
    private static String getString ( String pattern ) {
        pattern = pattern.toLowerCase();
        // time 处理
        if ( pattern.indexOf( PathFormat.TIME ) != -1 ) {
            return PathFormat.getTimestamp();
        } else if ( pattern.indexOf( PathFormat.FULL_YEAR ) != -1 ) {
            return PathFormat.getFullYear();
        } else if ( pattern.indexOf( PathFormat.YEAR ) != -1 ) {
            return PathFormat.getYear();
        } else if ( pattern.indexOf( PathFormat.MONTH ) != -1 ) {
            return PathFormat.getMonth();
        } else if ( pattern.indexOf( PathFormat.DAY ) != -1 ) {
            return PathFormat.getDay();
        } else if ( pattern.indexOf( PathFormat.HOUR ) != -1 ) {
            return PathFormat.getHour();
        } else if ( pattern.indexOf( PathFormat.MINUTE ) != -1 ) {
            return PathFormat.getMinute();
        } else if ( pattern.indexOf( PathFormat.SECOND ) != -1 ) {
            return PathFormat.getSecond();
        } else if ( pattern.indexOf( PathFormat.RAND ) != -1 ) {
            return PathFormat.getRandom( pattern );
        }
        return pattern;
    }
    private static String getTimestamp () {
        return System.currentTimeMillis() + "";
    }
    private static String getFullYear () {
        return new SimpleDateFormat( "yyyy" ).format( PathFormat.currentDate );
    }
    private static String getYear () {
        return new SimpleDateFormat( "yy" ).format( PathFormat.currentDate );
    }
    private static String getMonth () {
        return new SimpleDateFormat( "MM" ).format( PathFormat.currentDate );
    }
    private static String getDay () {
        return new SimpleDateFormat( "dd" ).format( PathFormat.currentDate );
    }
    private static String getHour () {
        return new SimpleDateFormat( "HH" ).format( PathFormat.currentDate );
    }
    private static String getMinute () {
        return new SimpleDateFormat( "mm" ).format( PathFormat.currentDate );
    }
    private static String getSecond () {
        return new SimpleDateFormat( "ss" ).format( PathFormat.currentDate );
    }
    private static String getRandom ( String pattern ) {
        int length = 0;
        pattern = pattern.split( ":" )[ 1 ].trim();
        length = Integer.parseInt( pattern );
        return ( Math.random() + "" ).replace( ".", "" ).substring( 0, length );
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/ActionMap.java
New file
@@ -0,0 +1,42 @@
package com.baidu.ueditor.define;
import java.util.Map;
import java.util.HashMap;
/**
 * 定义请求action类型
 * @author hancong03@baidu.com
 *
 */
@SuppressWarnings("serial")
public final class ActionMap {
    public static final Map<String, Integer> mapping;
    // 获取配置请求
    public static final int CONFIG = 0;
    public static final int UPLOAD_IMAGE = 1;
    public static final int UPLOAD_SCRAWL = 2;
    public static final int UPLOAD_VIDEO = 3;
    public static final int UPLOAD_FILE = 4;
    public static final int CATCH_IMAGE = 5;
    public static final int LIST_FILE = 6;
    public static final int LIST_IMAGE = 7;
    static {
        mapping = new HashMap<String, Integer>(){{
            put( "config", ActionMap.CONFIG );
            put( "uploadimage", ActionMap.UPLOAD_IMAGE );
            put( "uploadscrawl", ActionMap.UPLOAD_SCRAWL );
            put( "uploadvideo", ActionMap.UPLOAD_VIDEO );
            put( "uploadfile", ActionMap.UPLOAD_FILE );
            put( "catchimage", ActionMap.CATCH_IMAGE );
            put( "listfile", ActionMap.LIST_FILE );
            put( "listimage", ActionMap.LIST_IMAGE );
        }};
    }
    public static int getType ( String key ) {
        return ActionMap.mapping.get( key );
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/ActionState.java
New file
@@ -0,0 +1,5 @@
package com.baidu.ueditor.define;
public enum ActionState {
    UNKNOW_ERROR
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/AppInfo.java
New file
@@ -0,0 +1,77 @@
package com.baidu.ueditor.define;
import java.util.HashMap;
import java.util.Map;
public final class AppInfo {
    public static final int SUCCESS = 0;
    public static final int MAX_SIZE = 1;
    public static final int PERMISSION_DENIED = 2;
    public static final int FAILED_CREATE_FILE = 3;
    public static final int IO_ERROR = 4;
    public static final int NOT_MULTIPART_CONTENT = 5;
    public static final int PARSE_REQUEST_ERROR = 6;
    public static final int NOTFOUND_UPLOAD_DATA = 7;
    public static final int NOT_ALLOW_FILE_TYPE = 8;
    public static final int INVALID_ACTION = 101;
    public static final int CONFIG_ERROR = 102;
    public static final int PREVENT_HOST = 201;
    public static final int CONNECTION_ERROR = 202;
    public static final int REMOTE_FAIL = 203;
    public static final int NOT_DIRECTORY = 301;
    public static final int NOT_EXIST = 302;
    public static final int ILLEGAL = 401;
    public static Map<Integer, String> info = new HashMap<Integer, String>(){{
        put( AppInfo.SUCCESS, "SUCCESS" );
        // 无效的Action
        put( AppInfo.INVALID_ACTION, "\u65E0\u6548\u7684Action" );
        // 配置文件初始化失败
        put( AppInfo.CONFIG_ERROR, "\u914D\u7F6E\u6587\u4EF6\u521D\u59CB\u5316\u5931\u8D25" );
        // 抓取远程图片失败
        put( AppInfo.REMOTE_FAIL, "\u6293\u53D6\u8FDC\u7A0B\u56FE\u7247\u5931\u8D25" );
        // 被阻止的远程主机
        put( AppInfo.PREVENT_HOST, "\u88AB\u963B\u6B62\u7684\u8FDC\u7A0B\u4E3B\u673A" );
        // 远程连接出错
        put( AppInfo.CONNECTION_ERROR, "\u8FDC\u7A0B\u8FDE\u63A5\u51FA\u9519" );
        // "文件大小超出限制"
        put( AppInfo.MAX_SIZE, "\u6587\u4ef6\u5927\u5c0f\u8d85\u51fa\u9650\u5236" );
        // 权限不足, 多指写权限
        put( AppInfo.PERMISSION_DENIED, "\u6743\u9650\u4E0D\u8DB3" );
        // 创建文件失败
        put( AppInfo.FAILED_CREATE_FILE, "\u521B\u5EFA\u6587\u4EF6\u5931\u8D25" );
        // IO错误
        put( AppInfo.IO_ERROR, "IO\u9519\u8BEF" );
        // 上传表单不是multipart/form-data类型
        put( AppInfo.NOT_MULTIPART_CONTENT, "\u4E0A\u4F20\u8868\u5355\u4E0D\u662Fmultipart/form-data\u7C7B\u578B" );
        // 解析上传表单错误
        put( AppInfo.PARSE_REQUEST_ERROR, "\u89E3\u6790\u4E0A\u4F20\u8868\u5355\u9519\u8BEF" );
        // 未找到上传数据
        put( AppInfo.NOTFOUND_UPLOAD_DATA, "\u672A\u627E\u5230\u4E0A\u4F20\u6570\u636E" );
        // 不允许的文件类型
        put( AppInfo.NOT_ALLOW_FILE_TYPE, "\u4E0D\u5141\u8BB8\u7684\u6587\u4EF6\u7C7B\u578B" );
        // 指定路径不是目录
        put( AppInfo.NOT_DIRECTORY, "\u6307\u5B9A\u8DEF\u5F84\u4E0D\u662F\u76EE\u5F55" );
        // 指定路径并不存在
        put( AppInfo.NOT_EXIST, "\u6307\u5B9A\u8DEF\u5F84\u5E76\u4E0D\u5B58\u5728" );
        // callback参数名不合法
        put( AppInfo.ILLEGAL, "Callback\u53C2\u6570\u540D\u4E0D\u5408\u6CD5" );
    }};
    public static String getStateInfo ( int key ) {
        return AppInfo.info.get( key );
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/BaseState.java
New file
@@ -0,0 +1,90 @@
package com.baidu.ueditor.define;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.baidu.ueditor.Encoder;
public class BaseState implements State {
    private boolean state = false;
    private String info = null;
    private Map<String, String> infoMap = new HashMap<String, String>();
    public BaseState () {
        this.state = true;
    }
    public BaseState ( boolean state ) {
        this.setState( state );
    }
    public BaseState ( boolean state, String info ) {
        this.setState( state );
        this.info = info;
    }
    public BaseState ( boolean state, int infoCode ) {
        this.setState( state );
        this.info = AppInfo.getStateInfo( infoCode );
    }
    public boolean isSuccess () {
        return this.state;
    }
    public void setState ( boolean state ) {
        this.state = state;
    }
    public void setInfo ( String info ) {
        this.info = info;
    }
    public void setInfo ( int infoCode ) {
        this.info = AppInfo.getStateInfo( infoCode );
    }
    @Override
    public String toJSONString() {
        return this.toString();
    }
    public String toString () {
        String key = null;
        String stateVal = this.isSuccess() ? AppInfo.getStateInfo( AppInfo.SUCCESS ) : this.info;
        StringBuilder builder = new StringBuilder();
        builder.append( "{\"state\": \"" + stateVal + "\"" );
        Iterator<String> iterator = this.infoMap.keySet().iterator();
        while ( iterator.hasNext() ) {
            key = iterator.next();
            builder.append( ",\"" + key + "\": \"" + this.infoMap.get(key) + "\"" );
        }
        builder.append( "}" );
        return Encoder.toUnicode( builder.toString() );
    }
    @Override
    public void putInfo(String name, String val) {
        this.infoMap.put(name, val);
    }
    @Override
    public void putInfo(String name, long val) {
        this.putInfo(name, val+"");
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/FileType.java
New file
@@ -0,0 +1,31 @@
package com.baidu.ueditor.define;
import java.util.HashMap;
import java.util.Map;
public class FileType {
    public static final String JPG = "JPG";
    private static final Map<String, String> types = new HashMap<String, String>(){{
        put( FileType.JPG, ".jpg" );
    }};
    public static String getSuffix ( String key ) {
        return FileType.types.get( key );
    }
    /**
     * 根据给定的文件名,获取其后缀信息
     * @param filename
     * @return
     */
    public static String getSuffixByFilename ( String filename ) {
        return filename.substring( filename.lastIndexOf( "." ) ).toLowerCase();
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/MIMEType.java
New file
@@ -0,0 +1,20 @@
package com.baidu.ueditor.define;
import java.util.HashMap;
import java.util.Map;
public class MIMEType {
    public static final Map<String, String> types = new HashMap<String, String>(){{
        put( "image/gif", ".gif" );
        put( "image/jpeg", ".jpg" );
        put( "image/jpg", ".jpg" );
        put( "image/png", ".png" );
        put( "image/bmp", ".bmp" );
    }};
    public static String getSuffix ( String mime ) {
        return MIMEType.types.get( mime );
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/MultiState.java
New file
@@ -0,0 +1,112 @@
package com.baidu.ueditor.define;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.baidu.ueditor.Encoder;
/**
 * 多状态集合状态
 * 其包含了多个状态的集合, 其本身自己也是一个状态
 * @author hancong03@baidu.com
 *
 */
public class MultiState implements State {
    private boolean state = false;
    private String info = null;
    private Map<String, Long> intMap = new HashMap<String, Long>();
    private Map<String, String> infoMap = new HashMap<String, String>();
    private List<String> stateList = new ArrayList<String>();
    public MultiState ( boolean state ) {
        this.state = state;
    }
    public MultiState ( boolean state, String info ) {
        this.state = state;
        this.info = info;
    }
    public MultiState ( boolean state, int infoKey ) {
        this.state = state;
        this.info = AppInfo.getStateInfo( infoKey );
    }
    @Override
    public boolean isSuccess() {
        return this.state;
    }
    public void addState ( State state ) {
        stateList.add( state.toJSONString() );
    }
    /**
     * 该方法调用无效果
     */
    @Override
    public void putInfo(String name, String val) {
        this.infoMap.put(name, val);
    }
    @Override
    public String toJSONString() {
        String stateVal = this.isSuccess() ? AppInfo.getStateInfo( AppInfo.SUCCESS ) : this.info;
        StringBuilder builder = new StringBuilder();
        builder.append( "{\"state\": \"" + stateVal + "\"" );
        // 数字转换
        Iterator<String> iterator = this.intMap.keySet().iterator();
        while ( iterator.hasNext() ) {
            stateVal = iterator.next();
            builder.append( ",\""+ stateVal +"\": " + this.intMap.get( stateVal ) );
        }
        iterator = this.infoMap.keySet().iterator();
        while ( iterator.hasNext() ) {
            stateVal = iterator.next();
            builder.append( ",\""+ stateVal +"\": \"" + this.infoMap.get( stateVal ) + "\"" );
        }
        builder.append( ", list: [" );
        iterator = this.stateList.iterator();
        while ( iterator.hasNext() ) {
            builder.append( iterator.next() + "," );
        }
        if ( this.stateList.size() > 0 ) {
            builder.deleteCharAt( builder.length() - 1 );
        }
        builder.append( " ]}" );
        return Encoder.toUnicode( builder.toString() );
    }
    @Override
    public void putInfo(String name, long val) {
        this.intMap.put( name, val );
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/define/State.java
New file
@@ -0,0 +1,18 @@
package com.baidu.ueditor.define;
/**
 * 处理状态接口
 * @author hancong03@baidu.com
 *
 */
public interface State {
    public boolean isSuccess ();
    public void putInfo( String name, String val );
    public void putInfo ( String name, long val );
    public String toJSONString ();
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/hunter/FileManager.java
New file
@@ -0,0 +1,112 @@
package com.baidu.ueditor.hunter;
import java.io.File;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import com.baidu.ueditor.PathFormat;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.MultiState;
import com.baidu.ueditor.define.State;
public class FileManager {
    private String dir = null;
    private String rootPath = null;
    private String[] allowFiles = null;
    private int count = 0;
    public FileManager ( Map<String, Object> conf ) {
        this.rootPath = (String)conf.get( "rootPath" );
        this.dir = this.rootPath + (String)conf.get( "dir" );
        this.allowFiles = this.getAllowFiles( conf.get("allowFiles") );
        this.count = (Integer)conf.get( "count" );
    }
    public State listFile ( int index ) {
        File dir = new File( this.dir );
        State state = null;
        if ( !dir.exists() ) {
            return new BaseState( false, AppInfo.NOT_EXIST );
        }
        if ( !dir.isDirectory() ) {
            return new BaseState( false, AppInfo.NOT_DIRECTORY );
        }
        Collection<File> list = FileUtils.listFiles( dir, this.allowFiles, true );
        if ( index < 0 || index > list.size() ) {
            state = new MultiState( true );
        } else {
            Object[] fileList = Arrays.copyOfRange( list.toArray(), index, index + this.count );
            state = this.getState( fileList );
        }
        state.putInfo( "start", index );
        state.putInfo( "total", list.size() );
        return state;
    }
    private State getState ( Object[] files ) {
        MultiState state = new MultiState( true );
        BaseState fileState = null;
        File file = null;
        for ( Object obj : files ) {
            if ( obj == null ) {
                break;
            }
            file = (File)obj;
            fileState = new BaseState( true );
            fileState.putInfo( "url", PathFormat.format( this.getPath( file ) ) );
            state.addState( fileState );
        }
        return state;
    }
    private String getPath ( File file ) {
        String path = file.getAbsolutePath();
        return path.replace( this.rootPath, "/" );
    }
    private String[] getAllowFiles ( Object fileExt ) {
        String[] exts = null;
        String ext = null;
        if ( fileExt == null ) {
            return new String[ 0 ];
        }
        exts = (String[])fileExt;
        for ( int i = 0, len = exts.length; i < len; i++ ) {
            ext = exts[ i ];
            exts[ i ] = ext.replace( ".", "" );
        }
        return exts;
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/hunter/ImageHunter.java
New file
@@ -0,0 +1,133 @@
package com.baidu.ueditor.hunter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import com.baidu.ueditor.PathFormat;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.MIMEType;
import com.baidu.ueditor.define.MultiState;
import com.baidu.ueditor.define.State;
import com.baidu.ueditor.upload.StorageManager;
/**
 * 图片抓取器
 * @author hancong03@baidu.com
 *
 */
public class ImageHunter {
    private String filename = null;
    private String savePath = null;
    private String rootPath = null;
    private List<String> allowTypes = null;
    private long maxSize = -1;
    private List<String> filters = null;
    public ImageHunter ( Map<String, Object> conf ) {
        this.filename = (String)conf.get( "filename" );
        this.savePath = (String)conf.get( "savePath" );
        this.rootPath = (String)conf.get( "rootPath" );
        this.maxSize = (Long)conf.get( "maxSize" );
        this.allowTypes = Arrays.asList( (String[])conf.get( "allowFiles" ) );
        this.filters = Arrays.asList( (String[])conf.get( "filter" ) );
    }
    public State capture ( String[] list ) {
        MultiState state = new MultiState( true );
        for ( String source : list ) {
            state.addState( captureRemoteData( source ) );
        }
        return state;
    }
    public State captureRemoteData ( String urlStr ) {
        HttpURLConnection connection = null;
        URL url = null;
        String suffix = null;
        try {
            url = new URL( urlStr );
            if ( !validHost( url.getHost() ) ) {
                return new BaseState( false, AppInfo.PREVENT_HOST );
            }
            connection = (HttpURLConnection) url.openConnection();
            connection.setInstanceFollowRedirects( true );
            connection.setUseCaches( true );
            if ( !validContentState( connection.getResponseCode() ) ) {
                return new BaseState( false, AppInfo.CONNECTION_ERROR );
            }
            suffix = MIMEType.getSuffix( connection.getContentType() );
            if ( !validFileType( suffix ) ) {
                return new BaseState( false, AppInfo.NOT_ALLOW_FILE_TYPE );
            }
            if ( !validFileSize( connection.getContentLength() ) ) {
                return new BaseState( false, AppInfo.MAX_SIZE );
            }
            String savePath = this.getPath( this.savePath, this.filename, suffix );
            String physicalPath = this.rootPath + savePath;
            State state = StorageManager.saveFileByInputStream( connection.getInputStream(), physicalPath );
            if ( state.isSuccess() ) {
                state.putInfo( "url", PathFormat.format( savePath ) );
                state.putInfo( "source", urlStr );
            }
            return state;
        } catch ( Exception e ) {
            return new BaseState( false, AppInfo.REMOTE_FAIL );
        }
    }
    private String getPath ( String savePath, String filename, String suffix  ) {
        return PathFormat.parse( savePath + suffix, filename );
    }
    private boolean validHost ( String hostname ) {
        return !filters.contains( hostname );
    }
    private boolean validContentState ( int code ) {
        return HttpURLConnection.HTTP_OK == code;
    }
    private boolean validFileType ( String type ) {
        return this.allowTypes.contains( type );
    }
    private boolean validFileSize ( int size ) {
        return size < this.maxSize;
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/upload/Base64Uploader.java
New file
@@ -0,0 +1,52 @@
package com.baidu.ueditor.upload;
import com.baidu.ueditor.PathFormat;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.FileType;
import com.baidu.ueditor.define.State;
import java.util.Map;
import org.apache.commons.codec.binary.Base64;
public final class Base64Uploader {
    public static State save(String content, Map<String, Object> conf) {
        byte[] data = decode(content);
        long maxSize = ((Long) conf.get("maxSize")).longValue();
        if (!validSize(data, maxSize)) {
            return new BaseState(false, AppInfo.MAX_SIZE);
        }
        String suffix = FileType.getSuffix("JPG");
        String savePath = PathFormat.parse((String) conf.get("savePath"),
                (String) conf.get("filename"));
        savePath = savePath + suffix;
        String physicalPath = (String) conf.get("rootPath") + savePath;
        State storageState = StorageManager.saveBinaryFile(data, physicalPath);
        if (storageState.isSuccess()) {
            storageState.putInfo("url", PathFormat.format(savePath));
            storageState.putInfo("type", suffix);
            storageState.putInfo("original", "");
        }
        return storageState;
    }
    private static byte[] decode(String content) {
        return Base64.decodeBase64(content);
    }
    private static boolean validSize(byte[] data, long length) {
        return data.length <= length;
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/upload/BinaryUploader.java
New file
@@ -0,0 +1,98 @@
package com.baidu.ueditor.upload;
import com.baidu.ueditor.PathFormat;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.FileType;
import com.baidu.ueditor.define.State;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class BinaryUploader {
    public static final State save(HttpServletRequest request,
            Map<String, Object> conf) {
        FileItemStream fileStream = null;
        boolean isAjaxUpload = request.getHeader( "X_Requested_With" ) != null;
        if (!ServletFileUpload.isMultipartContent(request)) {
            return new BaseState(false, AppInfo.NOT_MULTIPART_CONTENT);
        }
        ServletFileUpload upload = new ServletFileUpload(
                new DiskFileItemFactory());
        if ( isAjaxUpload ) {
            upload.setHeaderEncoding( "UTF-8" );
        }
        try {
            FileItemIterator iterator = upload.getItemIterator(request);
            while (iterator.hasNext()) {
                fileStream = iterator.next();
                if (!fileStream.isFormField())
                    break;
                fileStream = null;
            }
            if (fileStream == null) {
                return new BaseState(false, AppInfo.NOTFOUND_UPLOAD_DATA);
            }
            String savePath = (String) conf.get("savePath");
            String originFileName = fileStream.getName();
            String suffix = FileType.getSuffixByFilename(originFileName);
            originFileName = originFileName.substring(0,
                    originFileName.length() - suffix.length());
            savePath = savePath + suffix;
            long maxSize = ((Long) conf.get("maxSize")).longValue();
            if (!validType(suffix, (String[]) conf.get("allowFiles"))) {
                return new BaseState(false, AppInfo.NOT_ALLOW_FILE_TYPE);
            }
            savePath = PathFormat.parse(savePath, originFileName);
            String physicalPath = (String) conf.get("rootPath") + savePath;
            InputStream is = fileStream.openStream();
            State storageState = StorageManager.saveFileByInputStream(is,
                    physicalPath, maxSize);
            is.close();
            if (storageState.isSuccess()) {
                storageState.putInfo("url", PathFormat.format(savePath));
                storageState.putInfo("type", suffix);
                storageState.putInfo("original", originFileName + suffix);
            }
            return storageState;
        } catch (FileUploadException e) {
            return new BaseState(false, AppInfo.PARSE_REQUEST_ERROR);
        } catch (IOException e) {
        }
        return new BaseState(false, AppInfo.IO_ERROR);
    }
    private static boolean validType(String type, String[] allowTypes) {
        List<String> list = Arrays.asList(allowTypes);
        return list.contains(type);
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/upload/StorageManager.java
New file
@@ -0,0 +1,155 @@
package com.baidu.ueditor.upload;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.State;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.FileUtils;
public class StorageManager {
    public static final int BUFFER_SIZE = 8192;
    public StorageManager() {
    }
    public static State saveBinaryFile(byte[] data, String path) {
        File file = new File(path);
        State state = valid(file);
        if (!state.isSuccess()) {
            return state;
        }
        try {
            BufferedOutputStream bos = new BufferedOutputStream(
                    new FileOutputStream(file));
            bos.write(data);
            bos.flush();
            bos.close();
        } catch (IOException ioe) {
            return new BaseState(false, AppInfo.IO_ERROR);
        }
        state = new BaseState(true, file.getAbsolutePath());
        state.putInfo( "size", data.length );
        state.putInfo( "title", file.getName() );
        return state;
    }
    public static State saveFileByInputStream(InputStream is, String path,
            long maxSize) {
        State state = null;
        File tmpFile = getTmpFile();
        byte[] dataBuf = new byte[ 2048 ];
        BufferedInputStream bis = new BufferedInputStream(is, StorageManager.BUFFER_SIZE);
        try {
            BufferedOutputStream bos = new BufferedOutputStream(
                    new FileOutputStream(tmpFile), StorageManager.BUFFER_SIZE);
            int count = 0;
            while ((count = bis.read(dataBuf)) != -1) {
                bos.write(dataBuf, 0, count);
            }
            bos.flush();
            bos.close();
            if (tmpFile.length() > maxSize) {
                tmpFile.delete();
                return new BaseState(false, AppInfo.MAX_SIZE);
            }
            state = saveTmpFile(tmpFile, path);
            if (!state.isSuccess()) {
                tmpFile.delete();
            }
            return state;
        } catch (IOException e) {
        }
        return new BaseState(false, AppInfo.IO_ERROR);
    }
    public static State saveFileByInputStream(InputStream is, String path) {
        State state = null;
        File tmpFile = getTmpFile();
        byte[] dataBuf = new byte[ 2048 ];
        BufferedInputStream bis = new BufferedInputStream(is, StorageManager.BUFFER_SIZE);
        try {
            BufferedOutputStream bos = new BufferedOutputStream(
                    new FileOutputStream(tmpFile), StorageManager.BUFFER_SIZE);
            int count = 0;
            while ((count = bis.read(dataBuf)) != -1) {
                bos.write(dataBuf, 0, count);
            }
            bos.flush();
            bos.close();
            state = saveTmpFile(tmpFile, path);
            if (!state.isSuccess()) {
                tmpFile.delete();
            }
            return state;
        } catch (IOException e) {
        }
        return new BaseState(false, AppInfo.IO_ERROR);
    }
    private static File getTmpFile() {
        File tmpDir = FileUtils.getTempDirectory();
        String tmpFileName = (Math.random() * 10000 + "").replace(".", "");
        return new File(tmpDir, tmpFileName);
    }
    private static State saveTmpFile(File tmpFile, String path) {
        State state = null;
        File targetFile = new File(path);
        if (targetFile.canWrite()) {
            return new BaseState(false, AppInfo.PERMISSION_DENIED);
        }
        try {
            FileUtils.moveFile(tmpFile, targetFile);
        } catch (IOException e) {
            return new BaseState(false, AppInfo.IO_ERROR);
        }
        state = new BaseState(true);
        state.putInfo( "size", targetFile.length() );
        state.putInfo( "title", targetFile.getName() );
        return state;
    }
    private static State valid(File file) {
        File parentPath = file.getParentFile();
        if ((!parentPath.exists()) && (!parentPath.mkdirs())) {
            return new BaseState(false, AppInfo.FAILED_CREATE_FILE);
        }
        if (!parentPath.canWrite()) {
            return new BaseState(false, AppInfo.PERMISSION_DENIED);
        }
        return new BaseState(true);
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/jsp/src/com/baidu/ueditor/upload/Uploader.java
New file
@@ -0,0 +1,29 @@
package com.baidu.ueditor.upload;
import com.baidu.ueditor.define.State;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
public class Uploader {
    private HttpServletRequest request = null;
    private Map<String, Object> conf = null;
    public Uploader(HttpServletRequest request, Map<String, Object> conf) {
        this.request = request;
        this.conf = conf;
    }
    public final State doExec() {
        String filedName = (String) this.conf.get("fieldName");
        State state = null;
        if ("true".equals(this.conf.get("isBase64"))) {
            state = Base64Uploader.save(this.request.getParameter(filedName),
                    this.conf);
        } else {
            state = BinaryUploader.save(this.request, this.conf);
        }
        return state;
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/en.js
New file
@@ -0,0 +1,684 @@
/**
 * Created with JetBrains PhpStorm.
 * User: taoqili
 * Date: 12-6-12
 * Time: 下午6:57
 * To change this template use File | Settings | File Templates.
 */
UE.I18N['en'] = {
    'labelMap':{
        'anchor':'Anchor', 'undo':'Undo', 'redo':'Redo', 'bold':'Bold', 'indent':'Indent', 'snapscreen':'SnapScreen',
        'italic':'Italic', 'underline':'Underline', 'strikethrough':'Strikethrough', 'subscript':'SubScript','fontborder':'text border',
        'superscript':'SuperScript', 'formatmatch':'Format Match', 'source':'Source', 'blockquote':'BlockQuote',
        'pasteplain':'PastePlain', 'selectall':'SelectAll', 'print':'Print', 'preview':'Preview',
        'horizontal':'Horizontal', 'removeformat':'RemoveFormat', 'time':'Time', 'date':'Date',
        'unlink':'Unlink', 'insertrow':'InsertRow', 'insertcol':'InsertCol', 'mergeright':'MergeRight', 'mergedown':'MergeDown',
        'deleterow':'DeleteRow', 'deletecol':'DeleteCol', 'splittorows':'SplitToRows','insertcode':'insert code',
        'splittocols':'SplitToCols', 'splittocells':'SplitToCells','deletecaption':'DeleteCaption','inserttitle':'InsertTitle',
        'mergecells':'MergeCells', 'deletetable':'DeleteTable', 'cleardoc':'Clear', 'insertparagraphbeforetable':"InsertParagraphBeforeTable",
        'fontfamily':'FontFamily', 'fontsize':'FontSize', 'paragraph':'Paragraph','simpleupload':'Single Image','insertimage':'Multi Image','edittable':'Edit Table', 'edittd':'Edit Td','link':'Link',
        'emotion':'Emotion', 'spechars':'Spechars', 'searchreplace':'SearchReplace', 'map':'BaiduMap', 'gmap':'GoogleMap',
        'insertvideo':'Video', 'help':'Help', 'justifyleft':'JustifyLeft', 'justifyright':'JustifyRight', 'justifycenter':'JustifyCenter',
        'justifyjustify':'Justify', 'forecolor':'FontColor', 'backcolor':'BackColor', 'insertorderedlist':'OL',
        'insertunorderedlist':'UL', 'fullscreen':'FullScreen', 'directionalityltr':'EnterFromLeft', 'directionalityrtl':'EnterFromRight',
        'rowspacingtop':'RowSpacingTop', 'rowspacingbottom':'RowSpacingBottom', 'pagebreak':'PageBreak', 'insertframe':'Iframe', 'imagenone':'Default',
        'imageleft':'ImageLeft', 'imageright':'ImageRight', 'attachment':'Attachment', 'imagecenter':'ImageCenter', 'wordimage':'WordImage',
        'lineheight':'LineHeight','edittip':'EditTip','customstyle':'CustomStyle', 'scrawl':'Scrawl', 'autotypeset':'AutoTypeset',
        'webapp':'WebAPP', 'touppercase':'UpperCase', 'tolowercase':'LowerCase','template':'Template','background':'Background','inserttable':'InsertTable',
        'music':'Music', 'charts': 'charts','drafts': 'Load from Drafts'
    },
    'insertorderedlist':{
        'num':'1,2,3...',
        'num1':'1),2),3)...',
        'num2':'(1),(2),(3)...',
        'cn':'一,二,三....',
        'cn1':'一),二),三)....',
        'cn2':'(一),(二),(三)....',
        'decimal':'1,2,3...',
        'lower-alpha':'a,b,c...',
        'lower-roman':'i,ii,iii...',
        'upper-alpha':'A,B,C...',
        'upper-roman':'I,II,III...'
    },
    'insertunorderedlist':{
        'circle':'○ Circle',
        'disc':'● Circle dot',
        'square':'■ Rectangle ',
        'dash' :'- Dash',
        'dot' : '。dot'
    },
    'paragraph':{'p':'Paragraph', 'h1':'Title 1', 'h2':'Title 2', 'h3':'Title 3', 'h4':'Title 4', 'h5':'Title 5', 'h6':'Title 6'},
    'fontfamily':{
        'songti':'Sim Sun',
        'kaiti':'Sim Kai',
        'heiti':'Sim Hei',
        'lishu':'Sim Li',
        'yahei': 'Microsoft YaHei',
        'andaleMono':'Andale Mono',
        'arial': 'Arial',
        'arialBlack':'Arial Black',
        'comicSansMs':'Comic Sans MS',
        'impact':'Impact',
        'timesNewRoman':'Times New Roman'
    },
    'customstyle':{
        'tc':'Title center',
        'tl':'Title left',
        'im':'Important',
        'hi':'Highlight'
    },
    'autoupload': {
        'exceedSizeError': 'File Size Exceed',
        'exceedTypeError': 'File Type Not Allow',
        'jsonEncodeError': 'Server Return Format Error',
        'loading':"loading...",
        'loadError':"load error",
        'errorLoadConfig': 'Server config not loaded, upload can not work.',
    },
    'simpleupload':{
        'exceedSizeError': 'File Size Exceed',
        'exceedTypeError': 'File Type Not Allow',
        'jsonEncodeError': 'Server Return Format Error',
        'loading':"loading...",
        'loadError':"load error",
        'errorLoadConfig': 'Server config not loaded, upload can not work.',
    },
    'elementPathTip':"Path",
    'wordCountTip':"Word Count",
    'wordCountMsg':'{#count} characters entered,{#leave} left. ',
    'wordOverFlowMsg':'<span style="color:red;">The number of characters has exceeded allowable maximum values, the server may refuse to save!</span>',
    'ok':"OK",
    'cancel':"Cancel",
    'closeDialog':"closeDialog",
    'tableDrag':"You must import the file uiUtils.js before drag! ",
    'autofloatMsg':"The plugin AutoFloat depends on EditorUI!",
    'loadconfigError': 'Get server config error.',
    'loadconfigFormatError': 'Server config format error.',
    'loadconfigHttpError': 'Get server config http error.',
    'snapScreen_plugin':{
        'browserMsg':"Only IE supported!",
        'callBackErrorMsg':"The callback data is wrong,please check the config!",
        'uploadErrorMsg':"Upload error,please check your server environment! "
    },
    'insertcode':{
        'as3':'ActionScript 3',
        'bash':'Bash/Shell',
        'cpp':'C/C++',
        'css':'CSS',
        'cf':'ColdFusion',
        'c#':'C#',
        'delphi':'Delphi',
        'diff':'Diff',
        'erlang':'Erlang',
        'groovy':'Groovy',
        'html':'HTML',
        'java':'Java',
        'jfx':'JavaFX',
        'js':'JavaScript',
        'pl':'Perl',
        'php':'PHP',
        'plain':'Plain Text',
        'ps':'PowerShell',
        'python':'Python',
        'ruby':'Ruby',
        'scala':'Scala',
        'sql':'SQL',
        'vb':'Visual Basic',
        'xml':'XML'
    },
    'confirmClear':"Do you confirm to clear the Document?",
    'contextMenu':{
        'delete':"Delete",
        'selectall':"Select all",
        'deletecode':"Delete Code",
        'cleardoc':"Clear Document",
        'confirmclear':"Do you confirm to clear the Document?",
        'unlink':"Unlink",
        'paragraph':"Paragraph",
        'edittable':"Table property",
        'aligncell':'Align cell',
        'aligntable':'Table alignment',
        'tableleft':'Left float',
        'tablecenter':'Center',
        'tableright':'Right float',
        'aligntd':'Cell alignment',
        'edittd':"Cell property",
        'setbordervisible':'set table edge visible',
        'table':"Table",
        'justifyleft':'Justify Left',
        'justifyright':'Justify Right',
        'justifycenter':'Justify Center',
        'justifyjustify':'Default',
        'deletetable':"Delete table",
        'insertparagraphbefore':"InsertedBeforeLine",
        'insertparagraphafter':'InsertedAfterLine',
        'inserttable':'Insert table',
        'insertcaption':'Insert caption',
        'deletecaption':'Delete Caption',
        'inserttitle':'Insert Title',
        'deletetitle':'Delete Title',
        'inserttitlecol':'Insert Title Col',
        'deletetitlecol':'Delete Title Col',
        'averageDiseRow':'AverageDise Row',
        'averageDisCol':'AverageDis Col',
        'deleterow':"Delete row",
        'deletecol':"Delete col",
        'insertrow':"Insert row",
        'insertcol':"Insert col",
        'insertrownext':'Insert Row Next',
        'insertcolnext':'Insert Col Next',
        'mergeright':"Merge right",
        'mergeleft':"Merge left",
        'mergedown':"Merge down",
        'mergecells':"Merge cells",
        'splittocells':"Split to cells",
        'splittocols':"Split to Cols",
        'splittorows':"Split to Rows",
        'tablesort':'Table sorting',
        'enablesort':'Sorting Enable',
        'disablesort':'Sorting Disable',
        'reversecurrent':'Reverse current',
        'orderbyasc':'Order By ASCII',
        'reversebyasc':'Reverse By ASCII',
        'orderbynum':'Order By Num',
        'reversebynum':'Reverse By Num',
        'borderbk':'Border shading',
        'setcolor':'interlaced color',
        'unsetcolor':'Cancel interlacedcolor',
        'setbackground':'Background interlaced',
        'unsetbackground':'Cancel Bk interlaced',
        'redandblue':'Blue and red',
        'threecolorgradient':'Three-color gradient',
        'copy':"Copy(Ctrl + c)",
        'copymsg':"Browser does not support. Please use 'Ctrl + c' instead!",
        'paste':"Paste(Ctrl + v)",
        'pastemsg':"Browser does not support. Please use 'Ctrl + v' instead!"
    },
    'copymsg': "Browser does not support. Please use 'Ctrl + c' instead!",
    'pastemsg': "Browser does not support. Please use 'Ctrl + v' instead!",
    'anthorMsg':"Link",
    'clearColor':'Clear',
    'standardColor':'Standard color',
    'themeColor':'Theme color',
    'property':'Property',
    'default':'Default',
    'modify':'Modify',
    'justifyleft':'Justify Left',
    'justifyright':'Justify Right',
    'justifycenter':'Justify Center',
    'justify':'Default',
    'clear':'Clear',
    'anchorMsg':'Anchor',
    'delete':'Delete',
    'clickToUpload':"Click to upload",
    'unset':'Language hasn\'t been set!',
    't_row':'row',
    't_col':'col',
    'pasteOpt':'Paste Option',
    'pasteSourceFormat':"Keep Source Formatting",
    'tagFormat':'Keep tag',
    'pasteTextFormat':'Keep Text only',
    'more':'More',
    'autoTypeSet':{
        'mergeLine':"Merge empty line",
        'delLine':"Del empty line",
        'removeFormat':"Remove format",
        'indent':"Indent",
        'alignment':"Alignment",
        'imageFloat':"Image float",
        'removeFontsize':"Remove font size",
        'removeFontFamily':"Remove fontFamily",
        'removeHtml':"Remove redundant HTML code",
        'pasteFilter':"Paste filter",
        'run':"Done",
        'symbol':'Symbol Conversion',
        'bdc2sb':'Full-width to Half-width',
        'tobdc':'Half-width to Full-width'
    },
    'background':{
        'static':{
            'lang_background_normal':'Normal',
            'lang_background_local':'Online',
            'lang_background_set':'Background Set',
            'lang_background_none':'No Background',
            'lang_background_colored':'Colored Background',
            'lang_background_color':'Color Set',
            'lang_background_netimg':'Net-Image',
            'lang_background_align':'Align Type',
            'lang_background_position':'Position',
            'repeatType':{'options':["Center", "Repeat-x", "Repeat-y", "Tile","Custom"]}
        },
        'noUploadImage':"No pictures has been uploaded!",
        'toggleSelect':'Change the active state by click!\n Image Size: '
    },
    //===============dialog i18N=======================
    'insertimage':{
        'static':{
            'lang_tab_remote':"Insert",
            'lang_tab_upload':"Local",
            'lang_tab_online':"Manager",
            'lang_tab_search':"Search",
            'lang_input_url':"Address:",
            'lang_input_size':"Size:",
            'lang_input_width':"Width",
            'lang_input_height':"Height",
            'lang_input_border':"Border:",
            'lang_input_vhspace':"Margins:",
            'lang_input_title':"Title:",
            'lang_input_align':'Image Float Style:',
            'lang_imgLoading':"Loading...",
            'lang_start_upload':"Start Upload",
            'lock':{'title':"Lock rate"},
            'searchType':{'title':"ImageType", 'options':["News", "Wallpaper", "emotions", "photo"]},
            'searchTxt':{'value':"Enter the search keyword!"},
            'searchBtn':{'value':"Search"},
            'searchReset':{'value':"Clear"},
            'noneAlign':{'title':'None Float'},
            'leftAlign':{'title':'Left Float'},
            'rightAlign':{'title':'Right Float'},
            'centerAlign':{'title':'Center In A Line'}
        },
        'uploadSelectFile':'Select File',
        'uploadAddFile':'Add File',
        'uploadStart':'Start Upload',
        'uploadPause':'Pause Upload',
        'uploadContinue':'Continue Upload',
        'uploadRetry':'Retry Upload',
        'uploadDelete':'Delete',
        'uploadTurnLeft':'Turn Left',
        'uploadTurnRight':'Turn Right',
        'uploadPreview':'Doing Preview',
        'uploadNoPreview':'Can Not Preview',
        'updateStatusReady': 'Selected _ pictures, total _KB.',
        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',
        'updateStatusFinish': 'Total _ pictures (_KB), _  uploaded successfully',
        'updateStatusError': ' and _ upload failed',
        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',
        'errorLoadConfig': 'Server config not loaded, upload can not work.',
        'errorExceedSize':'File Size Exceed',
        'errorFileType':'File Type Not Allow',
        'errorInterrupt':'File Upload Interrupted',
        'errorUploadRetry':'Upload Error, Please Retry.',
        'errorHttp':'Http Error',
        'errorServerUpload':'Server Result Error.',
        'remoteLockError':"Cannot Lock the Proportion between width and height",
        'numError':"Please enter the correct Num. e.g 123,400",
        'imageUrlError':"The image format may be wrong!",
        'imageLoadError':"Error,please check the network or URL!",
        'searchRemind':"Enter the search keyword!",
        'searchLoading':"Image is loading,please wait...",
        'searchRetry':" Sorry,can't find the image,please try again!"
    },
    'attachment':{
        'static':{
            'lang_tab_upload': 'Upload',
            'lang_tab_online': 'Online',
            'lang_start_upload':"Start upload",
            'lang_drop_remind':"You can drop files here, a single maximum of 300 files"
        },
        'uploadSelectFile':'Select File',
        'uploadAddFile':'Add File',
        'uploadStart':'Start Upload',
        'uploadPause':'Pause Upload',
        'uploadContinue':'Continue Upload',
        'uploadRetry':'Retry Upload',
        'uploadDelete':'Delete',
        'uploadTurnLeft':'Turn Left',
        'uploadTurnRight':'Turn Right',
        'uploadPreview':'Doing Preview',
        'updateStatusReady': 'Selected _ files, total _KB.',
        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',
        'updateStatusFinish': 'Total _ files (_KB), _  uploaded successfully',
        'updateStatusError': ' and _ upload failed',
        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',
        'errorLoadConfig': 'Server config not loaded, upload can not work.',
        'errorExceedSize':'File Size Exceed',
        'errorFileType':'File Type Not Allow',
        'errorInterrupt':'File Upload Interrupted',
        'errorUploadRetry':'Upload Error, Please Retry.',
        'errorHttp':'Http Error',
        'errorServerUpload':'Server Result Error.'
    },
    'insertvideo':{
        'static':{
            'lang_tab_insertV':"Video",
            'lang_tab_searchV':"Search",
            'lang_tab_uploadV':"Upload",
            'lang_video_url':" URL ",
            'lang_video_size':"Video Size",
            'lang_videoW':"Width",
            'lang_videoH':"Height",
            'lang_alignment':"Alignment",
            'videoSearchTxt':{'value':"Enter the search keyword!"},
            'videoType':{'options':["All", "Hot", "Entertainment", "Funny", "Sports", "Science", "variety"]},
            'videoSearchBtn':{'value':"Search in Baidu"},
            'videoSearchReset':{'value':"Clear result"},
            'lang_input_fileStatus':' No file uploaded!',
            'startUpload':{'style':"background:url(upload.png) no-repeat;"},
            'lang_upload_size':"Video Size",
            'lang_upload_width':"Width",
            'lang_upload_height':"Height",
            'lang_upload_alignment':"Alignment",
            'lang_format_advice':"Recommends mp4 format."
        },
        'numError':"Please enter the correct Num. e.g 123,400",
        'floatLeft':"Float left",
        'floatRight':"Float right",
        'default':"Default",
        'block':"Display in block",
        'urlError':"The video url format may be wrong!",
        'loading':" &nbsp;The video is loading, please wait…",
        'clickToSelect':"Click to select",
        'goToSource':'Visit source video ',
        'noVideo':" &nbsp; &nbsp;Sorry,can't find the video,please try again!",
        'browseFiles':'Open files',
        'uploadSuccess':'Upload Successful!',
        'delSuccessFile':'Remove from the success of the queue',
        'delFailSaveFile':'Remove the save failed file',
        'statusPrompt':' file(s) uploaded! ',
        'flashVersionError':'The current Flash version is too low, please update FlashPlayer,then try again!',
        'flashLoadingError':'The Flash failed loading! Please check the path or network state',
        'fileUploadReady':'Wait for uploading...',
        'delUploadQueue':'Remove from the uploading queue ',
        'limitPrompt1':'Can not choose more than single',
        'limitPrompt2':'file(s)!Please choose again!',
        'delFailFile':'Remove failure file',
        'fileSizeLimit':'File size exceeds the limit!',
        'emptyFile':'Can not upload an empty file!',
        'fileTypeError':'File type error!',
        'unknownError':'Unknown error!',
        'fileUploading':'Uploading,please wait...',
        'cancelUpload':'Cancel upload',
        'netError':'Network error',
        'failUpload':'Upload failed',
        'serverIOError':'Server IO error!',
        'noAuthority':'No Permission!',
        'fileNumLimit':'Upload limit to the number',
        'failCheck':'Authentication fails, the upload is skipped!',
        'fileCanceling':'Cancel, please wait...',
        'stopUploading':'Upload has stopped...',
        'uploadSelectFile':'Select File',
        'uploadAddFile':'Add File',
        'uploadStart':'Start Upload',
        'uploadPause':'Pause Upload',
        'uploadContinue':'Continue Upload',
        'uploadRetry':'Retry Upload',
        'uploadDelete':'Delete',
        'uploadTurnLeft':'Turn Left',
        'uploadTurnRight':'Turn Right',
        'uploadPreview':'Doing Preview',
        'updateStatusReady': 'Selected _ files, total _KB.',
        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',
        'updateStatusFinish': 'Total _ files (_KB), _  uploaded successfully',
        'updateStatusError': ' and _ upload failed',
        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',
        'errorLoadConfig': 'Server config not loaded, upload can not work.',
        'errorExceedSize':'File Size Exceed',
        'errorFileType':'File Type Not Allow',
        'errorInterrupt':'File Upload Interrupted',
        'errorUploadRetry':'Upload Error, Please Retry.',
        'errorHttp':'Http Error',
        'errorServerUpload':'Server Result Error.'
    },
    'webapp':{
        'tip1':"This function provided by Baidu APP,please apply for baidu APPKey webmaster first!",
        'tip2':"And then open the file ueditor.config.js to set it! ",
        'applyFor':"APPLY FOR",
        'anthorApi':"Baidu API"
    },
    'template':{
        'static':{
            'lang_template_bkcolor':'Background Color',
            'lang_template_clear' : 'Keep Content',
            'lang_template_select':'Select Template'
        },
        'blank':"Blank",
        'blog':"Blog",
        'resume':"Resume",
        'richText':"Rich Text",
        'scrPapers':"Scientific Papers"
    },
    scrawl:{
        'static':{
            'lang_input_previousStep':"Previous",
            'lang_input_nextsStep':"Next",
            'lang_input_clear':'Clear',
            'lang_input_addPic':'AddImage',
            'lang_input_ScalePic':'ScaleImage',
            'lang_input_removePic':'RemoveImage',
            'J_imgTxt':{title:'Add background image'}
        },
        'noScarwl':"No paint, a white paper...",
        'scrawlUpLoading':"Image is uploading, please wait...",
        'continueBtn':"Try again",
        'imageError':"Image failed to load!",
        'backgroundUploading':'Image is uploading,please wait...'
    },
    'music':{
        'static':{
            'lang_input_tips':"Input singer/song/album, search you interested in music!",
            'J_searchBtn':{value:'Search songs'}
        },
        'emptyTxt':'Not search to the relevant music results, please change a keyword try.',
        'chapter':'Songs',
        'singer':'Singer',
        'special':'Album',
        'listenTest':'Audition'
    },
    anchor:{
        'static':{
            'lang_input_anchorName':'Anchor Name:'
        }
    },
    'charts':{
        'static':{
            'lang_data_source':'Data source:',
            'lang_chart_format': 'Chart format:',
            'lang_data_align': 'Align',
            'lang_chart_align_same': 'Consistent with the X-axis Y-axis',
            'lang_chart_align_reverse': 'X-axis Y-axis opposite',
            'lang_chart_title': 'Title',
            'lang_chart_main_title': 'main title:',
            'lang_chart_sub_title': 'sub title:',
            'lang_chart_x_title': 'X-axis title:',
            'lang_chart_y_title': 'Y-axis title:',
            'lang_chart_tip': 'Prompt',
            'lang_cahrt_tip_prefix': 'prefix:',
            'lang_cahrt_tip_description': '仅饼图有效, 当鼠标移动到饼图中相应的块上时,提示框内的文字的前缀',
            'lang_chart_data_unit': 'Unit',
            'lang_chart_data_unit_title': 'unit:',
            'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位, 比如: 温度的单位 ℃',
            'lang_chart_type': 'Chart type:',
            'lang_prev_btn': 'Previous',
            'lang_next_btn': 'Next'
        }
    },
    emotion:{
        'static':{
            'lang_input_choice':'Choice',
            'lang_input_Tuzki':'Tuzki',
            'lang_input_lvdouwa':'LvDouWa',
            'lang_input_BOBO':'BOBO',
            'lang_input_babyCat':'BabyCat',
            'lang_input_bubble':'Bubble',
            'lang_input_youa':'YouA'
        }
    },
    gmap:{
        'static':{
            'lang_input_address':'Address:',
            'lang_input_search':'Search',
            'address':{value:"Beijing"}
        },
        searchError:'Unable to locate the address!'
    },
    help:{
        'static':{
            'lang_input_about':'About',
            'lang_input_shortcuts':'Shortcuts',
            'lang_input_introduction':"UEditor is developed by Baidu Co.ltd.  It is lightweight, customizable , focusing on user experience and etc. , UEditor is based on open source BSD license , allowing free use and redistribution.",
            'lang_Txt_shortcuts':'Shortcuts',
            'lang_Txt_func':'Function',
            'lang_Txt_bold':'Bold',
            'lang_Txt_copy':'Copy',
            'lang_Txt_cut':'Cut',
            'lang_Txt_Paste':'Paste',
            'lang_Txt_undo':'Undo',
            'lang_Txt_redo':'Redo',
            'lang_Txt_italic':'Italic',
            'lang_Txt_underline':'Underline',
            'lang_Txt_selectAll':'Select All',
            'lang_Txt_visualEnter':'Submit',
            'lang_Txt_fullscreen':'Fullscreen'
        }
    },
    insertframe:{
        'static':{
            'lang_input_address':'Address:',
            'lang_input_width':'Width:',
            'lang_input_height':'height:',
            'lang_input_isScroll':'Enable scrollbars:',
            'lang_input_frameborder':'Show frame border:',
            'lang_input_alignMode':'Alignment:',
            'align':{title:"Alignment", options:["Default", "Left", "Right", "Center"]}
        },
        'enterAddress':'Please enter an address!'
    },
    link:{
        'static':{
            'lang_input_text':'Text:',
            'lang_input_url':'URL:',
            'lang_input_title':'Title:',
            'lang_input_target':'open in new window:'
        },
        'validLink':'Supports only effective when a link is selected',
        'httpPrompt':'The hyperlink you enter should start with "http|https|ftp://"!'
    },
    map:{
        'static':{
            lang_city:"City",
            lang_address:"Address",
            city:{value:"Beijing"},
            lang_search:"Search",
            lang_dynamicmap:"Dynamic map"
        },
        cityMsg:"Please enter the city name!",
        errorMsg:"Can't find the place!"
    },
    searchreplace:{
        'static':{
            lang_tab_search:"Search",
            lang_tab_replace:"Replace",
            lang_search1:"Search",
            lang_search2:"Search",
            lang_replace:"Replace",
            lang_searchReg:'Support regular expression ,which starts and ends with a slash ,for example "/expression/"',
            lang_searchReg1:'Support regular expression ,which starts and ends with a slash ,for example "/expression/"',
            lang_case_sensitive1:"Case sense",
            lang_case_sensitive2:"Case sense",
            nextFindBtn:{value:"Next"},
            preFindBtn:{value:"Preview"},
            nextReplaceBtn:{value:"Next"},
            preReplaceBtn:{value:"Preview"},
            repalceBtn:{value:"Replace"},
            repalceAllBtn:{value:"Replace all"}
        },
        getEnd:"Has the search to the bottom!",
        getStart:"Has the search to the top!",
        countMsg:"Altogether replaced {#count} character(s)!"
    },
    snapscreen:{
        'static':{
            lang_showMsg:"You should install the UEditor screenshots program first!",
            lang_download:"Download!",
            lang_step1:"Step1:Download the program and then run it",
            lang_step2:"Step2:After complete install,try to click the button again"
        }
    },
    spechars:{
        'static':{},
        tsfh:"Special",
        lmsz:"Roman",
        szfh:"Numeral",
        rwfh:"Japanese",
        xlzm:"The Greek",
        ewzm:"Russian",
        pyzm:"Phonetic",
        yyyb:"English",
        zyzf:"Others"
    },
    'edittable':{
        'static':{
            'lang_tableStyle':'Table style',
            'lang_insertCaption':'Add table header row',
            'lang_insertTitle':'Add table title row',
            'lang_insertTitleCol':'Add table title col',
            'lang_tableSize':'Automatically adjust table size',
            'lang_autoSizeContent':'Adaptive by form text',
            'lang_orderbycontent':"Table of contents sortable",
            'lang_autoSizePage':'Page width adaptive',
            'lang_example':'Example',
            'lang_borderStyle':'Table Border',
            'lang_color':'Color:'
        },
        captionName:'Caption',
        titleName:'Title',
        cellsName:'text',
        errorMsg:'There are merged cells, can not sort.'
    },
    'edittip':{
        'static':{
            lang_delRow:'Delete entire row',
            lang_delCol:'Delete entire col'
        }
    },
    'edittd':{
        'static':{
            lang_tdBkColor:'Background Color:'
        }
    },
    'formula':{
        'static':{
        }
    },
    wordimage:{
        'static':{
            lang_resave:"The re-save step",
            uploadBtn:{src:"upload.png", alt:"Upload"},
            clipboard:{style:"background: url(copy.png) -153px -1px no-repeat;"},
            lang_step:" 1. Click top button to copy the url and then open the dialog to paste it. 2. Open after choose photos uploaded process."
        },
        fileType:"Image",
        flashError:"Flash initialization failed!",
        netError:"Network error! Please try again!",
        copySuccess:"URL has been copied!",
        'flashI18n':{
            lang:encodeURI( '{"UploadingState":"totalNum: ${a},uploadComplete: ${b}", "BeforeUpload":"waitingNum: ${a}", "ExceedSize":"Size exceed${a}", "ErrorInPreview":"Preview failed", "DefaultDescription":"Description", "LoadingImage":"Loading..."}' ),
            uploadingTF:encodeURI( '{"font":"Arial", "size":12, "color":"0x000", "bold":"true", "italic":"false", "underline":"false"}' ),
            imageTF:encodeURI( '{"font":"Arial", "size":11, "color":"red", "bold":"false", "italic":"false", "underline":"false"}' ),
            textEncoding:"utf-8",
            addImageSkinURL:"addImage.png",
            allDeleteBtnUpSkinURL:"allDeleteBtnUpSkin.png",
            allDeleteBtnHoverSkinURL:"allDeleteBtnHoverSkin.png",
            rotateLeftBtnEnableSkinURL:"rotateLeftEnable.png",
            rotateLeftBtnDisableSkinURL:"rotateLeftDisable.png",
            rotateRightBtnEnableSkinURL:"rotateRightEnable.png",
            rotateRightBtnDisableSkinURL:"rotateRightDisable.png",
            deleteBtnEnableSkinURL:"deleteEnable.png",
            deleteBtnDisableSkinURL:"deleteDisable.png",
            backgroundURL:'',
            listBackgroundURL:'',
            buttonURL:'button.png'
        }
    },
    'autosave': {
        'success':'Local conservation success'
    }
};
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/addimage.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/alldeletebtnhoverskin.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/alldeletebtnupskin.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/background.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/button.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/copy.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/deletedisable.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/deleteenable.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/listbackground.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/localimage.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/music.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/rotateleftdisable.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/rotateleftenable.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/rotaterightdisable.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/rotaterightenable.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/en/images/upload.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/zh-cn/images/copy.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/zh-cn/images/localimage.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/zh-cn/images/music.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/zh-cn/images/upload.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/lang/zh-cn/zh-cn.js
New file
@@ -0,0 +1,669 @@
/**
 * Created with JetBrains PhpStorm.
 * User: taoqili
 * Date: 12-6-12
 * Time: 下午5:02
 * To change this template use File | Settings | File Templates.
 */
UE.I18N['zh-cn'] = {
    'labelMap':{
        'anchor':'锚点', 'undo':'撤销', 'redo':'重做', 'bold':'加粗', 'indent':'首行缩进', 'snapscreen':'截图',
        'italic':'斜体', 'underline':'下划线', 'strikethrough':'删除线', 'subscript':'下标','fontborder':'字符边框',
        'superscript':'上标', 'formatmatch':'格式刷', 'source':'源代码', 'blockquote':'引用',
        'pasteplain':'纯文本粘贴模式', 'selectall':'全选', 'print':'打印', 'preview':'预览',
        'horizontal':'分隔线', 'removeformat':'清除格式', 'time':'时间', 'date':'日期',
        'unlink':'取消链接', 'insertrow':'前插入行', 'insertcol':'前插入列', 'mergeright':'右合并单元格', 'mergedown':'下合并单元格',
        'deleterow':'删除行', 'deletecol':'删除列', 'splittorows':'拆分成行',
        'splittocols':'拆分成列', 'splittocells':'完全拆分单元格','deletecaption':'删除表格标题','inserttitle':'插入标题',
        'mergecells':'合并多个单元格', 'deletetable':'删除表格', 'cleardoc':'清空文档','insertparagraphbeforetable':"表格前插入行",'insertcode':'代码语言',
        'fontfamily':'字体', 'fontsize':'字号', 'paragraph':'段落格式', 'simpleupload':'单图上传', 'insertimage':'多图上传','edittable':'表格属性','edittd':'单元格属性', 'link':'超链接',
        'emotion':'表情', 'spechars':'特殊字符', 'searchreplace':'查询替换', 'map':'Baidu地图',
        'insertvideo':'视频', 'help':'帮助', 'justifyleft':'居左对齐', 'justifyright':'居右对齐', 'justifycenter':'居中对齐',
        'justifyjustify':'两端对齐', 'forecolor':'字体颜色', 'backcolor':'背景色', 'insertorderedlist':'有序列表',
        'insertunorderedlist':'无序列表', 'fullscreen':'全屏', 'directionalityltr':'从左向右输入', 'directionalityrtl':'从右向左输入',
        'rowspacingtop':'段前距', 'rowspacingbottom':'段后距',  'pagebreak':'分页', 'insertframe':'插入Iframe', 'imagenone':'默认',
        'imageleft':'左浮动', 'imageright':'右浮动', 'attachment':'附件', 'imagecenter':'居中', 'wordimage':'图片转存',
        'lineheight':'行间距','edittip' :'编辑提示','customstyle':'自定义标题', 'autotypeset':'自动排版',
        'webapp':'百度应用','touppercase':'字母大写', 'tolowercase':'字母小写','background':'背景','template':'模板','scrawl':'涂鸦',
        'music':'音乐','inserttable':'插入表格','drafts': '从草稿箱加载', 'charts': '图表'
    },
    'insertorderedlist':{
        'num':'1,2,3...',
        'num1':'1),2),3)...',
        'num2':'(1),(2),(3)...',
        'cn':'一,二,三....',
        'cn1':'一),二),三)....',
        'cn2':'(一),(二),(三)....',
        'decimal':'1,2,3...',
        'lower-alpha':'a,b,c...',
        'lower-roman':'i,ii,iii...',
        'upper-alpha':'A,B,C...',
        'upper-roman':'I,II,III...'
    },
    'insertunorderedlist':{
        'circle':'○ 大圆圈',
        'disc':'● 小黑点',
        'square':'■ 小方块 ',
        'dash' :'— 破折号',
        'dot':' 。 小圆圈'
    },
    'paragraph':{'p':'段落', 'h1':'标题 1', 'h2':'标题 2', 'h3':'标题 3', 'h4':'标题 4', 'h5':'标题 5', 'h6':'标题 6'},
    'fontfamily':{
        'songti':'宋体',
        'kaiti':'楷体',
        'heiti':'黑体',
        'lishu':'隶书',
        'yahei':'微软雅黑',
        'andaleMono':'andale mono',
        'arial': 'arial',
        'arialBlack':'arial black',
        'comicSansMs':'comic sans ms',
        'impact':'impact',
        'timesNewRoman':'times new roman'
    },
    'customstyle':{
        'tc':'标题居中',
        'tl':'标题居左',
        'im':'强调',
        'hi':'明显强调'
    },
    'autoupload': {
        'exceedSizeError': '文件大小超出限制',
        'exceedTypeError': '文件格式不允许',
        'jsonEncodeError': '服务器返回格式错误',
        'loading':"正在上传...",
        'loadError':"上传错误",
        'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!'
    },
    'simpleupload':{
        'exceedSizeError': '文件大小超出限制',
        'exceedTypeError': '文件格式不允许',
        'jsonEncodeError': '服务器返回格式错误',
        'loading':"正在上传...",
        'loadError':"上传错误",
        'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!'
    },
    'elementPathTip':"元素路径",
    'wordCountTip':"字数统计",
    'wordCountMsg':'当前已输入{#count}个字符, 您还可以输入{#leave}个字符。 ',
    'wordOverFlowMsg':'<span style="color:red;">字数超出最大允许值,服务器可能拒绝保存!</span>',
    'ok':"确认",
    'cancel':"取消",
    'closeDialog':"关闭对话框",
    'tableDrag':"表格拖动必须引入uiUtils.js文件!",
    'autofloatMsg':"工具栏浮动依赖编辑器UI,您首先需要引入UI文件!",
    'loadconfigError': '获取后台配置项请求出错,上传功能将不能正常使用!',
    'loadconfigFormatError': '后台配置项返回格式出错,上传功能将不能正常使用!',
    'loadconfigHttpError': '请求后台配置项http错误,上传功能将不能正常使用!',
    'snapScreen_plugin':{
        'browserMsg':"仅支持IE浏览器!",
        'callBackErrorMsg':"服务器返回数据有误,请检查配置项之后重试。",
        'uploadErrorMsg':"截图上传失败,请检查服务器端环境! "
    },
    'insertcode':{
        'as3':'ActionScript 3',
        'bash':'Bash/Shell',
        'cpp':'C/C++',
        'css':'CSS',
        'cf':'ColdFusion',
        'c#':'C#',
        'delphi':'Delphi',
        'diff':'Diff',
        'erlang':'Erlang',
        'groovy':'Groovy',
        'html':'HTML',
        'java':'Java',
        'jfx':'JavaFX',
        'js':'JavaScript',
        'pl':'Perl',
        'php':'PHP',
        'plain':'Plain Text',
        'ps':'PowerShell',
        'python':'Python',
        'ruby':'Ruby',
        'scala':'Scala',
        'sql':'SQL',
        'vb':'Visual Basic',
        'xml':'XML'
    },
    'confirmClear':"确定清空当前文档么?",
    'contextMenu':{
        'delete':"删除",
        'selectall':"全选",
        'deletecode':"删除代码",
        'cleardoc':"清空文档",
        'confirmclear':"确定清空当前文档么?",
        'unlink':"删除超链接",
        'paragraph':"段落格式",
        'edittable':"表格属性",
        'aligntd':"单元格对齐方式",
        'aligntable':'表格对齐方式',
        'tableleft':'左浮动',
        'tablecenter':'居中显示',
        'tableright':'右浮动',
        'edittd':"单元格属性",
        'setbordervisible':'设置表格边线可见',
        'justifyleft':'左对齐',
        'justifyright':'右对齐',
        'justifycenter':'居中对齐',
        'justifyjustify':'两端对齐',
        'table':"表格",
        'inserttable':'插入表格',
        'deletetable':"删除表格",
        'insertparagraphbefore':"前插入段落",
        'insertparagraphafter':'后插入段落',
        'deleterow':"删除当前行",
        'deletecol':"删除当前列",
        'insertrow':"前插入行",
        'insertcol':"左插入列",
        'insertrownext':'后插入行',
        'insertcolnext':'右插入列',
        'insertcaption':'插入表格名称',
        'deletecaption':'删除表格名称',
        'inserttitle':'插入表格标题行',
        'deletetitle':'删除表格标题行',
        'inserttitlecol':'插入表格标题列',
        'deletetitlecol':'删除表格标题列',
        'averageDiseRow':'平均分布各行',
        'averageDisCol':'平均分布各列',
        'mergeright':"向右合并",
        'mergeleft':"向左合并",
        'mergedown':"向下合并",
        'mergecells':"合并单元格",
        'splittocells':"完全拆分单元格",
        'splittocols':"拆分成列",
        'splittorows':"拆分成行",
        'tablesort':'表格排序',
        'enablesort':'设置表格可排序',
        'disablesort':'取消表格可排序',
        'reversecurrent':'逆序当前',
        'orderbyasc':'按ASCII字符升序',
        'reversebyasc':'按ASCII字符降序',
        'orderbynum':'按数值大小升序',
        'reversebynum':'按数值大小降序',
        'borderbk':'边框底纹',
        'setcolor':'表格隔行变色',
        'unsetcolor':'取消表格隔行变色',
        'setbackground':'选区背景隔行',
        'unsetbackground':'取消选区背景',
        'redandblue':'红蓝相间',
        'threecolorgradient':'三色渐变',
        'copy':"复制(Ctrl + c)",
        'copymsg': "浏览器不支持,请使用 'Ctrl + c'",
        'paste':"粘贴(Ctrl + v)",
         'pastemsg': "浏览器不支持,请使用 'Ctrl + v'"
    },
    'copymsg': "浏览器不支持,请使用 'Ctrl + c'",
    'pastemsg': "浏览器不支持,请使用 'Ctrl + v'",
    'anthorMsg':"链接",
    'clearColor':'清空颜色',
    'standardColor':'标准颜色',
    'themeColor':'主题颜色',
    'property':'属性',
    'default':'默认',
    'modify':'修改',
    'justifyleft':'左对齐',
    'justifyright':'右对齐',
    'justifycenter':'居中',
    'justify':'默认',
    'clear':'清除',
    'anchorMsg':'锚点',
    'delete':'删除',
    'clickToUpload':"点击上传",
    'unset':'尚未设置语言文件',
    't_row':'行',
    't_col':'列',
    'more':'更多',
    'pasteOpt':'粘贴选项',
    'pasteSourceFormat':"保留源格式",
    'tagFormat':'只保留标签',
    'pasteTextFormat':'只保留文本',
    'autoTypeSet':{
        'mergeLine':"合并空行",
        'delLine':"清除空行",
        'removeFormat':"清除格式",
        'indent':"首行缩进",
        'alignment':"对齐方式",
        'imageFloat':"图片浮动",
        'removeFontsize':"清除字号",
        'removeFontFamily':"清除字体",
        'removeHtml':"清除冗余HTML代码",
        'pasteFilter':"粘贴过滤",
        'run':"执行",
        'symbol':'符号转换',
        'bdc2sb':'全角转半角',
        'tobdc':'半角转全角'
    },
    'background':{
        'static':{
            'lang_background_normal':'背景设置',
            'lang_background_local':'在线图片',
            'lang_background_set':'选项',
            'lang_background_none':'无背景色',
            'lang_background_colored':'有背景色',
            'lang_background_color':'颜色设置',
            'lang_background_netimg':'网络图片',
            'lang_background_align':'对齐方式',
            'lang_background_position':'精确定位',
            'repeatType':{'options':["居中", "横向重复", "纵向重复", "平铺","自定义"]}
        },
        'noUploadImage':"当前未上传过任何图片!",
        'toggleSelect':"单击可切换选中状态\n原图尺寸: "
    },
    //===============dialog i18N=======================
    'insertimage':{
        'static':{
            'lang_tab_remote':"插入图片", //节点
            'lang_tab_upload':"本地上传",
            'lang_tab_online':"在线管理",
            'lang_tab_search':"图片搜索",
            'lang_input_url':"地 址:",
            'lang_input_size':"大 小:",
            'lang_input_width':"宽度",
            'lang_input_height':"高度",
            'lang_input_border':"边 框:",
            'lang_input_vhspace':"边 距:",
            'lang_input_title':"描 述:",
            'lang_input_align':'图片浮动方式:',
            'lang_imgLoading':" 图片加载中……",
            'lang_start_upload':"开始上传",
            'lock':{'title':"锁定宽高比例"}, //属性
            'searchType':{'title':"图片类型", 'options':["新闻", "壁纸", "表情", "头像"]}, //select的option
            'searchTxt':{'value':"请输入搜索关键词"},
            'searchBtn':{'value':"百度一下"},
            'searchReset':{'value':"清空搜索"},
            'noneAlign':{'title':'无浮动'},
            'leftAlign':{'title':'左浮动'},
            'rightAlign':{'title':'右浮动'},
            'centerAlign':{'title':'居中独占一行'}
        },
        'uploadSelectFile':'点击选择图片',
        'uploadAddFile':'继续添加',
        'uploadStart':'开始上传',
        'uploadPause':'暂停上传',
        'uploadContinue':'继续上传',
        'uploadRetry':'重试上传',
        'uploadDelete':'删除',
        'uploadTurnLeft':'向左旋转',
        'uploadTurnRight':'向右旋转',
        'uploadPreview':'预览中',
        'uploadNoPreview':'不能预览',
        'updateStatusReady': '选中_张图片,共_KB。',
        'updateStatusConfirm': '已成功上传_张照片,_张照片上传失败',
        'updateStatusFinish': '共_张(_KB),_张上传成功',
        'updateStatusError': ',_张上传失败。',
        'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
        'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
        'errorExceedSize':'文件大小超出',
        'errorFileType':'文件格式不允许',
        'errorInterrupt':'文件传输中断',
        'errorUploadRetry':'上传失败,请重试',
        'errorHttp':'http请求错误',
        'errorServerUpload':'服务器返回出错',
        'remoteLockError':"宽高不正确,不能所定比例",
        'numError':"请输入正确的长度或者宽度值!例如:123,400",
        'imageUrlError':"不允许的图片格式或者图片域!",
        'imageLoadError':"图片加载失败!请检查链接地址或网络状态!",
        'searchRemind':"请输入搜索关键词",
        'searchLoading':"图片加载中,请稍后……",
        'searchRetry':" :( ,抱歉,没有找到图片!请重试一次!"
    },
    'attachment':{
        'static':{
            'lang_tab_upload': '上传附件',
            'lang_tab_online': '在线附件',
            'lang_start_upload':"开始上传",
            'lang_drop_remind':"可以将文件拖到这里,单次最多可选100个文件"
        },
        'uploadSelectFile':'点击选择文件',
        'uploadAddFile':'继续添加',
        'uploadStart':'开始上传',
        'uploadPause':'暂停上传',
        'uploadContinue':'继续上传',
        'uploadRetry':'重试上传',
        'uploadDelete':'删除',
        'uploadTurnLeft':'向左旋转',
        'uploadTurnRight':'向右旋转',
        'uploadPreview':'预览中',
        'updateStatusReady': '选中_个文件,共_KB。',
        'updateStatusConfirm': '已成功上传_个文件,_个文件上传失败',
        'updateStatusFinish': '共_个(_KB),_个上传成功',
        'updateStatusError': ',_张上传失败。',
        'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
        'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
        'errorExceedSize':'文件大小超出',
        'errorFileType':'文件格式不允许',
        'errorInterrupt':'文件传输中断',
        'errorUploadRetry':'上传失败,请重试',
        'errorHttp':'http请求错误',
        'errorServerUpload':'服务器返回出错'
    },
    'insertvideo':{
        'static':{
            'lang_tab_insertV':"插入视频",
            'lang_tab_searchV':"搜索视频",
            'lang_tab_uploadV':"上传视频",
            'lang_video_url':"视频网址",
            'lang_video_size':"视频尺寸",
            'lang_videoW':"宽度",
            'lang_videoH':"高度",
            'lang_alignment':"对齐方式",
            'videoSearchTxt':{'value':"请输入搜索关键字!"},
            'videoType':{'options':["全部", "热门", "娱乐", "搞笑", "体育", "科技", "综艺"]},
            'videoSearchBtn':{'value':"百度一下"},
            'videoSearchReset':{'value':"清空结果"},
            'lang_input_fileStatus':' 当前未上传文件',
            'startUpload':{'style':"background:url(upload.png) no-repeat;"},
            'lang_upload_size':"视频尺寸",
            'lang_upload_width':"宽度",
            'lang_upload_height':"高度",
            'lang_upload_alignment':"对齐方式",
            'lang_format_advice':"建议使用mp4格式."
        },
        'numError':"请输入正确的数值,如123,400",
        'floatLeft':"左浮动",
        'floatRight':"右浮动",
        '"default"':"默认",
        'block':"独占一行",
        'urlError':"输入的视频地址有误,请检查后再试!",
        'loading':" &nbsp;视频加载中,请等待……",
        'clickToSelect':"点击选中",
        'goToSource':'访问源视频',
        'noVideo':" &nbsp; &nbsp;抱歉,找不到对应的视频,请重试!",
        'browseFiles':'浏览文件',
        'uploadSuccess':'上传成功!',
        'delSuccessFile':'从成功队列中移除',
        'delFailSaveFile':'移除保存失败文件',
        'statusPrompt':' 个文件已上传! ',
        'flashVersionError':'当前Flash版本过低,请更新FlashPlayer后重试!',
        'flashLoadingError':'Flash加载失败!请检查路径或网络状态',
        'fileUploadReady':'等待上传……',
        'delUploadQueue':'从上传队列中移除',
        'limitPrompt1':'单次不能选择超过',
        'limitPrompt2':'个文件!请重新选择!',
        'delFailFile':'移除失败文件',
        'fileSizeLimit':'文件大小超出限制!',
        'emptyFile':'空文件无法上传!',
        'fileTypeError':'文件类型不允许!',
        'unknownError':'未知错误!',
        'fileUploading':'上传中,请等待……',
        'cancelUpload':'取消上传',
        'netError':'网络错误',
        'failUpload':'上传失败!',
        'serverIOError':'服务器IO错误!',
        'noAuthority':'无权限!',
        'fileNumLimit':'上传个数限制',
        'failCheck':'验证失败,本次上传被跳过!',
        'fileCanceling':'取消中,请等待……',
        'stopUploading':'上传已停止……',
        'uploadSelectFile':'点击选择文件',
        'uploadAddFile':'继续添加',
        'uploadStart':'开始上传',
        'uploadPause':'暂停上传',
        'uploadContinue':'继续上传',
        'uploadRetry':'重试上传',
        'uploadDelete':'删除',
        'uploadTurnLeft':'向左旋转',
        'uploadTurnRight':'向右旋转',
        'uploadPreview':'预览中',
        'updateStatusReady': '选中_个文件,共_KB。',
        'updateStatusConfirm': '成功上传_个,_个失败',
        'updateStatusFinish': '共_个(_KB),_个成功上传',
        'updateStatusError': ',_张上传失败。',
        'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
        'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
        'errorExceedSize':'文件大小超出',
        'errorFileType':'文件格式不允许',
        'errorInterrupt':'文件传输中断',
        'errorUploadRetry':'上传失败,请重试',
        'errorHttp':'http请求错误',
        'errorServerUpload':'服务器返回出错'
    },
    'webapp':{
        'tip1':"本功能由百度APP提供,如看到此页面,请各位站长首先申请百度APPKey!",
        'tip2':"申请完成之后请至ueditor.config.js中配置获得的appkey! ",
        'applyFor':"点此申请",
        'anthorApi':"百度API"
    },
    'template':{
        'static':{
            'lang_template_bkcolor':'背景颜色',
            'lang_template_clear' : '保留原有内容',
            'lang_template_select' : '选择模板'
        },
        'blank':"空白文档",
        'blog':"博客文章",
        'resume':"个人简历",
        'richText':"图文混排",
        'sciPapers':"科技论文"
    },
    'scrawl':{
        'static':{
            'lang_input_previousStep':"上一步",
            'lang_input_nextsStep':"下一步",
            'lang_input_clear':'清空',
            'lang_input_addPic':'添加背景',
            'lang_input_ScalePic':'缩放背景',
            'lang_input_removePic':'删除背景',
            'J_imgTxt':{title:'添加背景图片'}
        },
        'noScarwl':"尚未作画,白纸一张~",
        'scrawlUpLoading':"涂鸦上传中,别急哦~",
        'continueBtn':"继续",
        'imageError':"糟糕,图片读取失败了!",
        'backgroundUploading':'背景图片上传中,别急哦~'
    },
    'music':{
        'static':{
            'lang_input_tips':"输入歌手/歌曲/专辑,搜索您感兴趣的音乐!",
            'J_searchBtn':{value:'搜索歌曲'}
        },
        'emptyTxt':'未搜索到相关音乐结果,请换一个关键词试试。',
        'chapter':'歌曲',
        'singer':'歌手',
        'special':'专辑',
        'listenTest':'试听'
    },
    'anchor':{
        'static':{
            'lang_input_anchorName':'锚点名字:'
        }
    },
    'charts':{
        'static':{
            'lang_data_source':'数据源:',
            'lang_chart_format': '图表格式:',
            'lang_data_align': '数据对齐方式',
            'lang_chart_align_same': '数据源与图表X轴Y轴一致',
            'lang_chart_align_reverse': '数据源与图表X轴Y轴相反',
            'lang_chart_title': '图表标题',
            'lang_chart_main_title': '主标题:',
            'lang_chart_sub_title': '子标题:',
            'lang_chart_x_title': 'X轴标题:',
            'lang_chart_y_title': 'Y轴标题:',
            'lang_chart_tip': '提示文字',
            'lang_cahrt_tip_prefix': '提示文字前缀:',
            'lang_cahrt_tip_description': '仅饼图有效, 当鼠标移动到饼图中相应的块上时,提示框内的文字的前缀',
            'lang_chart_data_unit': '数据单位',
            'lang_chart_data_unit_title': '单位:',
            'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位, 比如: 温度的单位 ℃',
            'lang_chart_type': '图表类型:',
            'lang_prev_btn': '上一个',
            'lang_next_btn': '下一个'
        }
    },
    'emotion':{
        'static':{
            'lang_input_choice':'精选',
            'lang_input_Tuzki':'兔斯基',
            'lang_input_BOBO':'BOBO',
            'lang_input_lvdouwa':'绿豆蛙',
            'lang_input_babyCat':'baby猫',
            'lang_input_bubble':'泡泡',
            'lang_input_youa':'有啊'
        }
    },
    'gmap':{
        'static':{
            'lang_input_address':'地址',
            'lang_input_search':'搜索',
            'address':{value:"北京"}
        },
        searchError:'无法定位到该地址!'
    },
    'help':{
        'static':{
            'lang_input_about':'关于UEditor',
            'lang_input_shortcuts':'快捷键',
            'lang_input_introduction':'UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点。开源基于BSD协议,允许自由使用和修改代码。',
            'lang_Txt_shortcuts':'快捷键',
            'lang_Txt_func':'功能',
            'lang_Txt_bold':'给选中字设置为加粗',
            'lang_Txt_copy':'复制选中内容',
            'lang_Txt_cut':'剪切选中内容',
            'lang_Txt_Paste':'粘贴',
            'lang_Txt_undo':'重新执行上次操作',
            'lang_Txt_redo':'撤销上一次操作',
            'lang_Txt_italic':'给选中字设置为斜体',
            'lang_Txt_underline':'给选中字加下划线',
            'lang_Txt_selectAll':'全部选中',
            'lang_Txt_visualEnter':'软回车',
            'lang_Txt_fullscreen':'全屏'
        }
    },
    'insertframe':{
        'static':{
            'lang_input_address':'地址:',
            'lang_input_width':'宽度:',
            'lang_input_height':'高度:',
            'lang_input_isScroll':'允许滚动条:',
            'lang_input_frameborder':'显示框架边框:',
            'lang_input_alignMode':'对齐方式:',
            'align':{title:"对齐方式", options:["默认", "左对齐", "右对齐", "居中"]}
        },
        'enterAddress':'请输入地址!'
    },
    'link':{
        'static':{
            'lang_input_text':'文本内容:',
            'lang_input_url':'链接地址:',
            'lang_input_title':'标题:',
            'lang_input_target':'是否在新窗口打开:'
        },
        'validLink':'只支持选中一个链接时生效',
        'httpPrompt':'您输入的超链接中不包含http等协议名称,默认将为您添加http://前缀'
    },
    'map':{
        'static':{
            lang_city:"城市",
            lang_address:"地址",
            city:{value:"北京"},
            lang_search:"搜索",
            lang_dynamicmap:"插入动态地图"
        },
        cityMsg:"请选择城市",
        errorMsg:"抱歉,找不到该位置!"
    },
    'searchreplace':{
        'static':{
            lang_tab_search:"查找",
            lang_tab_replace:"替换",
            lang_search1:"查找",
            lang_search2:"查找",
            lang_replace:"替换",
            lang_searchReg:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”',
            lang_searchReg1:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”',
            lang_case_sensitive1:"区分大小写",
            lang_case_sensitive2:"区分大小写",
            nextFindBtn:{value:"下一个"},
            preFindBtn:{value:"上一个"},
            nextReplaceBtn:{value:"下一个"},
            preReplaceBtn:{value:"上一个"},
            repalceBtn:{value:"替换"},
            repalceAllBtn:{value:"全部替换"}
        },
        getEnd:"已经搜索到文章末尾!",
        getStart:"已经搜索到文章头部",
        countMsg:"总共替换了{#count}处!"
    },
    'snapscreen':{
        'static':{
            lang_showMsg:"截图功能需要首先安装UEditor截图插件! ",
            lang_download:"点此下载",
            lang_step1:"第一步,下载UEditor截图插件并运行安装。",
            lang_step2:"第二步,插件安装完成后即可使用,如不生效,请重启浏览器后再试!"
        }
    },
    'spechars':{
        'static':{},
        tsfh:"特殊字符",
        lmsz:"罗马字符",
        szfh:"数学字符",
        rwfh:"日文字符",
        xlzm:"希腊字母",
        ewzm:"俄文字符",
        pyzm:"拼音字母",
        yyyb:"英语音标",
        zyzf:"其他"
    },
    'edittable':{
        'static':{
            'lang_tableStyle':'表格样式',
            'lang_insertCaption':'添加表格名称行',
            'lang_insertTitle':'添加表格标题行',
            'lang_insertTitleCol':'添加表格标题列',
            'lang_orderbycontent':"使表格内容可排序",
            'lang_tableSize':'自动调整表格尺寸',
            'lang_autoSizeContent':'按表格文字自适应',
            'lang_autoSizePage':'按页面宽度自适应',
            'lang_example':'示例',
            'lang_borderStyle':'表格边框',
            'lang_color':'颜色:'
        },
        captionName:'表格名称',
        titleName:'标题',
        cellsName:'内容',
        errorMsg:'有合并单元格,不可排序'
    },
    'edittip':{
        'static':{
            lang_delRow:'删除整行',
            lang_delCol:'删除整列'
        }
    },
    'edittd':{
        'static':{
            lang_tdBkColor:'背景颜色:'
        }
    },
    'formula':{
        'static':{
        }
    },
    'wordimage':{
        'static':{
            lang_resave:"转存步骤",
            uploadBtn:{src:"upload.png",alt:"上传"},
            clipboard:{style:"background: url(copy.png) -153px -1px no-repeat;"},
            lang_step:"1、点击顶部复制按钮,将地址复制到剪贴板;2、点击添加照片按钮,在弹出的对话框中使用Ctrl+V粘贴地址;3、点击打开后选择图片上传流程。"
        },
        'fileType':"图片",
        'flashError':"FLASH初始化失败,请检查FLASH插件是否正确安装!",
        'netError':"网络连接错误,请重试!",
        'copySuccess':"图片地址已经复制!",
        'flashI18n':{} //留空默认中文
    },
    'autosave': {
        'saving':'保存中...',
        'success':'本地保存成功'
    }
};
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/Config.cs
New file
@@ -0,0 +1,55 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.IO;
using System.Linq;
using System.Web;
/// <summary>
/// Config 的摘要说明
/// </summary>
public static class Config
{
    private static bool noCache = true;
    private static JObject BuildItems()
    {
        var json = File.ReadAllText(HttpContext.Current.Server.MapPath("config.json"));
        return JObject.Parse(json);
    }
    public static JObject Items
    {
        get
        {
            if (noCache || _Items == null)
            {
                _Items = BuildItems();
            }
            return _Items;
        }
    }
    private static JObject _Items;
    public static T GetValue<T>(string key)
    {
        return Items[key].Value<T>();
    }
    public static String[] GetStringList(string key)
    {
        return Items[key].Select(x => x.Value<String>()).ToArray();
    }
    public static String GetString(string key)
    {
        return GetValue<String>(key);
    }
    public static int GetInt(string key)
    {
        return GetValue<int>(key);
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/ConfigHandler.cs
New file
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
/// Config 的摘要说明
/// </summary>
public class ConfigHandler : Handler
{
    public ConfigHandler(HttpContext context) : base(context) { }
    public override void Process()
    {
        WriteJson(Config.Items);
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/CrawlerHandler.cs
New file
@@ -0,0 +1,103 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
/// <summary>
/// Crawler 的摘要说明
/// </summary>
public class CrawlerHandler : Handler
{
    private string[] Sources;
    private Crawler[] Crawlers;
    public CrawlerHandler(HttpContext context) : base(context) { }
    public override void Process()
    {
        Sources = Request.Form.GetValues("source[]");
        if (Sources == null || Sources.Length == 0)
        {
            WriteJson(new
            {
                state = "参数错误:没有指定抓取源"
            });
            return;
        }
        Crawlers = Sources.Select(x => new Crawler(x, Server).Fetch()).ToArray();
        WriteJson(new
        {
            state = "SUCCESS",
            list = Crawlers.Select(x => new
            {
                state = x.State,
                source = x.SourceUrl,
                url = x.ServerUrl
            })
        });
    }
}
public class Crawler
{
    public string SourceUrl { get; set; }
    public string ServerUrl { get; set; }
    public string State { get; set; }
    private HttpServerUtility Server { get; set; }
    public Crawler(string sourceUrl, HttpServerUtility server)
    {
        this.SourceUrl = sourceUrl;
        this.Server = server;
    }
    public Crawler Fetch()
    {
        var request = HttpWebRequest.Create(this.SourceUrl) as HttpWebRequest;
        using (var response = request.GetResponse() as HttpWebResponse)
        {
            if (response.StatusCode != HttpStatusCode.OK)
            {
                State = "Url returns " + response.StatusCode + ", " + response.StatusDescription;
                return this;
            }
            if (response.ContentType.IndexOf("image") == -1)
            {
                State = "Url is not an image";
                return this;
            }
            ServerUrl = PathFormatter.Format(Path.GetFileName(this.SourceUrl), Config.GetString("catcherPathFormat"));
            var savePath = Server.MapPath(ServerUrl);
            if (!Directory.Exists(Path.GetDirectoryName(savePath)))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(savePath));
            }
            try
            {
                var stream = response.GetResponseStream();
                var reader = new BinaryReader(stream);
                byte[] bytes;
                using (var ms = new MemoryStream())
                {
                    byte[] buffer = new byte[4096];
                    int count;
                    while ((count = reader.Read(buffer, 0, buffer.Length)) != 0)
                    {
                        ms.Write(buffer, 0, count);
                    }
                    bytes = ms.ToArray();
                }
                File.WriteAllBytes(savePath, bytes);
                State = "SUCCESS";
            }
            catch (Exception e)
            {
                State = "抓取错误:" + e.Message;
            }
            return this;
        }
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/Handler.cs
New file
@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Newtonsoft.Json;
/// <summary>
/// Handler 的摘要说明
/// </summary>
public abstract class Handler
{
    public Handler(HttpContext context)
    {
        this.Request = context.Request;
        this.Response = context.Response;
        this.Context = context;
        this.Server = context.Server;
    }
    public abstract void Process();
    protected void WriteJson(object response)
    {
        string jsonpCallback = Request["callback"],
            json = JsonConvert.SerializeObject(response);
        if (String.IsNullOrWhiteSpace(jsonpCallback))
        {
            Response.AddHeader("Content-Type", "text/plain");
            Response.Write(json);
        }
        else
        {
            Response.AddHeader("Content-Type", "application/javascript");
            Response.Write(String.Format("{0}({1});", jsonpCallback, json));
        }
        Response.End();
    }
    public HttpRequest Request { get; private set; }
    public HttpResponse Response { get; private set; }
    public HttpContext Context { get; private set; }
    public HttpServerUtility Server { get; private set; }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/ListFileHandler.cs
New file
@@ -0,0 +1,106 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
/// <summary>
/// FileManager 的摘要说明
/// </summary>
public class ListFileManager : Handler
{
    enum ResultState
    {
        Success,
        InvalidParam,
        AuthorizError,
        IOError,
        PathNotFound
    }
    private int Start;
    private int Size;
    private int Total;
    private ResultState State;
    private String PathToList;
    private String[] FileList;
    private String[] SearchExtensions;
    public ListFileManager(HttpContext context, string pathToList, string[] searchExtensions)
        : base(context)
    {
        this.SearchExtensions = searchExtensions.Select(x => x.ToLower()).ToArray();
        this.PathToList = pathToList;
    }
    public override void Process()
    {
        try
        {
            Start = String.IsNullOrEmpty(Request["start"]) ? 0 : Convert.ToInt32(Request["start"]);
            Size = String.IsNullOrEmpty(Request["size"]) ? Config.GetInt("imageManagerListSize") : Convert.ToInt32(Request["size"]);
        }
        catch (FormatException)
        {
            State = ResultState.InvalidParam;
            WriteResult();
            return;
        }
        var buildingList = new List<String>();
        try
        {
            var localPath = Server.MapPath(PathToList);
            buildingList.AddRange(Directory.GetFiles(localPath, "*", SearchOption.AllDirectories)
                .Where(x => SearchExtensions.Contains(Path.GetExtension(x).ToLower()))
                .Select(x => PathToList + x.Substring(localPath.Length).Replace("\\", "/")));
            Total = buildingList.Count;
            FileList = buildingList.OrderBy(x => x).Skip(Start).Take(Size).ToArray();
        }
        catch (UnauthorizedAccessException)
        {
            State = ResultState.AuthorizError;
        }
        catch (DirectoryNotFoundException)
        {
            State = ResultState.PathNotFound;
        }
        catch (IOException)
        {
            State = ResultState.IOError;
        }
        finally
        {
            WriteResult();
        }
    }
    private void WriteResult()
    {
        WriteJson(new
        {
            state = GetStateString(),
            list = FileList == null ? null : FileList.Select(x => new { url = x }),
            start = Start,
            size = Size,
            total = Total
        });
    }
    private string GetStateString()
    {
        switch (State)
        {
            case ResultState.Success:
                return "SUCCESS";
            case ResultState.InvalidParam:
                return "参数不正确";
            case ResultState.PathNotFound:
                return "路径不存在";
            case ResultState.AuthorizError:
                return "文件系统权限不足";
            case ResultState.IOError:
                return "文件系统读取错误";
        }
        return "未知错误";
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/NotSupportedHandler.cs
New file
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
/// NotSupportedHandler 的摘要说明
/// </summary>
public class NotSupportedHandler : Handler
{
    public NotSupportedHandler(HttpContext context)
        : base(context)
    {
    }
    public override void Process()
    {
        WriteJson(new
        {
            state = "action 参数为空或者 action 不被支持。"
        });
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/PathFormater.cs
New file
@@ -0,0 +1,50 @@

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
/// <summary>
/// PathFormater 的摘要说明
/// </summary>
public static class PathFormatter
{
    public static string Format(string originFileName, string pathFormat)
    {
        if (String.IsNullOrWhiteSpace(pathFormat))
        {
            pathFormat = "{filename}{rand:6}";
        }
        var invalidPattern = new Regex(@"[\\\/\:\*\?\042\<\>\|]");
        originFileName = invalidPattern.Replace(originFileName, "");
        string extension = Path.GetExtension(originFileName);
        string filename = Path.GetFileNameWithoutExtension(originFileName);
        pathFormat = pathFormat.Replace("{filename}", filename);
        pathFormat = new Regex(@"\{rand(\:?)(\d+)\}", RegexOptions.Compiled).Replace(pathFormat, new MatchEvaluator(delegate(Match match)
        {
            var digit = 6;
            if (match.Groups.Count > 2)
            {
                digit = Convert.ToInt32(match.Groups[2].Value);
            }
            var rand = new Random();
            return rand.Next((int)Math.Pow(10, digit), (int)Math.Pow(10, digit + 1)).ToString();
        }));
        pathFormat = pathFormat.Replace("{time}", DateTime.Now.Ticks.ToString());
        pathFormat = pathFormat.Replace("{yyyy}", DateTime.Now.Year.ToString());
        pathFormat = pathFormat.Replace("{yy}", (DateTime.Now.Year % 100).ToString("D2"));
        pathFormat = pathFormat.Replace("{mm}", DateTime.Now.Month.ToString("D2"));
        pathFormat = pathFormat.Replace("{dd}", DateTime.Now.Day.ToString("D2"));
        pathFormat = pathFormat.Replace("{hh}", DateTime.Now.Hour.ToString("D2"));
        pathFormat = pathFormat.Replace("{ii}", DateTime.Now.Minute.ToString("D2"));
        pathFormat = pathFormat.Replace("{ss}", DateTime.Now.Second.ToString("D2"));
        return pathFormat + extension;
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/App_Code/UploadHandler.cs
New file
@@ -0,0 +1,182 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
/// <summary>
/// UploadHandler 的摘要说明
/// </summary>
public class UploadHandler : Handler
{
    public UploadConfig UploadConfig { get; private set; }
    public UploadResult Result { get; private set; }
    public UploadHandler(HttpContext context, UploadConfig config)
        : base(context)
    {
        this.UploadConfig = config;
        this.Result = new UploadResult() { State = UploadState.Unknown };
    }
    public override void Process()
    {
        byte[] uploadFileBytes = null;
        string uploadFileName = null;
        if (UploadConfig.Base64)
        {
            uploadFileName = UploadConfig.Base64Filename;
            uploadFileBytes = Convert.FromBase64String(Request[UploadConfig.UploadFieldName]);
        }
        else
        {
            var file = Request.Files[UploadConfig.UploadFieldName];
            uploadFileName = file.FileName;
            if (!CheckFileType(uploadFileName))
            {
                Result.State = UploadState.TypeNotAllow;
                WriteResult();
                return;
            }
            if (!CheckFileSize(file.ContentLength))
            {
                Result.State = UploadState.SizeLimitExceed;
                WriteResult();
                return;
            }
            uploadFileBytes = new byte[file.ContentLength];
            try
            {
                file.InputStream.Read(uploadFileBytes, 0, file.ContentLength);
            }
            catch (Exception)
            {
                Result.State = UploadState.NetworkError;
                WriteResult();
            }
        }
        Result.OriginFileName = uploadFileName;
        var savePath = PathFormatter.Format(uploadFileName, UploadConfig.PathFormat);
        var localPath = Server.MapPath(savePath);
        try
        {
            if (!Directory.Exists(Path.GetDirectoryName(localPath)))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(localPath));
            }
            File.WriteAllBytes(localPath, uploadFileBytes);
            Result.Url = savePath;
            Result.State = UploadState.Success;
        }
        catch (Exception e)
        {
            Result.State = UploadState.FileAccessError;
            Result.ErrorMessage = e.Message;
        }
        finally
        {
            WriteResult();
        }
    }
    private void WriteResult()
    {
        this.WriteJson(new
        {
            state = GetStateMessage(Result.State),
            url = Result.Url,
            title = Result.OriginFileName,
            original = Result.OriginFileName,
            error = Result.ErrorMessage
        });
    }
    private string GetStateMessage(UploadState state)
    {
        switch (state)
        {
            case UploadState.Success:
                return "SUCCESS";
            case UploadState.FileAccessError:
                return "文件访问出错,请检查写入权限";
            case UploadState.SizeLimitExceed:
                return "文件大小超出服务器限制";
            case UploadState.TypeNotAllow:
                return "不允许的文件格式";
            case UploadState.NetworkError:
                return "网络错误";
        }
        return "未知错误";
    }
    private bool CheckFileType(string filename)
    {
        var fileExtension = Path.GetExtension(filename).ToLower();
        return UploadConfig.AllowExtensions.Select(x => x.ToLower()).Contains(fileExtension);
    }
    private bool CheckFileSize(int size)
    {
        return size < UploadConfig.SizeLimit;
    }
}
public class UploadConfig
{
    /// <summary>
    /// 文件命名规则
    /// </summary>
    public string PathFormat { get; set; }
    /// <summary>
    /// 上传表单域名称
    /// </summary>
    public string UploadFieldName { get; set; }
    /// <summary>
    /// 上传大小限制
    /// </summary>
    public int SizeLimit { get; set; }
    /// <summary>
    /// 上传允许的文件格式
    /// </summary>
    public string[] AllowExtensions { get; set; }
    /// <summary>
    /// 文件是否以 Base64 的形式上传
    /// </summary>
    public bool Base64 { get; set; }
    /// <summary>
    /// Base64 字符串所表示的文件名
    /// </summary>
    public string Base64Filename { get; set; }
}
public class UploadResult
{
    public UploadState State { get; set; }
    public string Url { get; set; }
    public string OriginFileName { get; set; }
    public string ErrorMessage { get; set; }
}
public enum UploadState
{
    Success = 0,
    SizeLimitExceed = -1,
    TypeNotAllow = -2,
    FileAccessError = -3,
    NetworkError = -4,
    Unknown = 1,
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/Bin/Newtonsoft.Json.dll
Binary files differ
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/Bin/Newtonsoft.Json.pdb
Binary files differ
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/Bin/Newtonsoft.Json.xml
New file
Diff too large
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/README.md
New file
@@ -0,0 +1,141 @@
UEditor ASP.NET 后台使用说明
=====
## 背景
UEditor 在 1.4 版本之后进行了一次[前后端统一配置](../_doc/3.1 后端请求规范.md)的整理,.Net 的后台也进行了一次重写,跟之前的版本差别较大,升级的用户注意阅读本文档。
本文档介绍 UEditor ASP.NET 后台的部署、配置、源码说明。
## 1. 部署说明
### 1.1. 安装并注册 .NET Framework 4.0
代码的运行时环境是 .NET Framework 4.0,首先要确认 IIS 已经安装了 .NET 4.0 的运行时框架。方法是打开「IIS 管理器」,选择根目录下的「应用程序池」,在右侧查看是否有一个应用程序池的版本是 v4.0,如果存在,则 IIS 已经安装了所需的运行时环境,此时读者可以跳过本节。
![检查 .NET 4.0 安装情况](../_doc/images/net-publish-1.png)
如果没有找到对应的应用程序池,需要手动安装。
Windows 7 和 Windows Server 2008 R2 默认安装了 .Net Framework 4.0,如果是 Server 03 和老掉牙的 Windows XP,则需要手动安装 [.NET Framework 4.0](http://www.microsoft.com/zh-cn/download/details.aspx?id=17718)。
安装完 .NET Framework 4.0 后,还需要向 IIS 注册应用程序池,注册的方法是,使用**管理员权限**打开命令提示符(CMD),输入以下命令:
```shell
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -i
```
安装完毕后,在 IIS 管理器刷新就能看到 4.0 的应用程序池。
### 1.2. 设置 .NET 应用程序
代码要求以应用程序的形式来运行(可以方便加入库依赖和组织代码)。需要把 `net` 目录转换为应用程序。
1. 在 IIS 中,展开到 `ueditor/net` 目录,在目录上右击,点击「转换为应用程序」。
   ![转换为应用程序](../_doc/images/net-publish-2.png)
2. 弹出的对话框中,点击「选择...」来指定使用的应用程序池。选择版本为 4.0 的应用程序池,然后点确定。
   ![选择应用程序池](../_doc/images/net-publish-3.png)
3. 设置连接凭据。点击「链接为...」按钮,在弹出的对话框中指定一个对目录具有读写权限的用户(如 administrator),然后点确定。
   ![设置连接凭据](../_doc/images/net-publish-4.png)
   设置完毕后,可以点击「测试设置...」来测试权限是否正常。
   ![设置连接凭据](../_doc/images/net-publish-5.png)
### 1.3. 运行测试
在浏览器中运行 `net/controller.ashx`,如果返回 "`{"state":"action 参数为空或者 action 不被支持。"}`",则表示应用程序运行成功。
如果你确认上述步骤已经执行,但是依然有问题,请给我们[提 Issue](https://github.com/fex-team/ueditor/issues/new?labels=NET%E5%90%8E%E5%8F%B0),我们会尽快答复解决。
## 2. 配置说明
前后端配置统一之后,配置文件由后台读取,返回给前端。但是部分配置是给后台使用的。
### 2.1. 上传配置说明
关于上传的部分,后台需要关心以下模板的配置项。
```json
{
    "{tpl}FieldName": "upfile",
    "{tpl}PathFormat": "upload/{tpl}/{yyyy}{mm}{dd}/{time}{rand:6}",
    "{tpl}UrlPrefix": "/ueditor/net/",
    "{tpl}AllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"],
    "{tpl}MaxSize": 2048000
}
```
"{tpl}FieldName" 表示提交的表单的文件域名称。
"{tpl}PathFormat" 表示上传文件保存的路径和名称。注意,这里的路径是相对应用程序的,如果需要修改的话,请自行修改源码。
"{tpl}UrlPrefix" 表示上传文件访问的 URL 前缀。注意,这里应该给出应用程序的 URL 路径,否则上传的文件不能正确定位。
> 举个例子,如果你的 UEditor 的位置在 `http://www.mydomain.com/myapp/ueditor`,对应的本地路径是 `C:\iis_pub\www\myapp\ueditor`,那么 .NET 应用程序的位置在 `http://www.mydomain.com/myapp/ueditor/net`,对应的本地路径是 `C:\iis_pub\www\myapp\ueditor\net`。图片上传配置项应该如下:
>
> {
>    "imagePathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}",
>    "imageUrlPrefix": "/myapp/ueditor/net/",
> }
>
> 上传的文件会保存在 `C:\iis_pub\www\myapp\ueditor\net\upload\image\{日期}\{文件名}`
"{tpl}AllowFiles" 限制文件上传的类型,注意要有 "."。
"{tpl}MaxSize" 限制文件上传的大小。注意这里的限制是代码上的判断,应用程序本身还有一个请求报文大小限制。该限制在 web.config 文件中修改,注意要有以下的节:
```xml
<configuration>
  <system.web>
    <httpRuntime requestValidationMode="2.0" maxRequestLength="102400" />
  </system.web>
</configuration>
```
maxRequestLength 就是请求报文大小限制,该大小应该要比设置的所有上传大小都大,否则应用程序执行之前,请求会被被拒绝。
## 3. 源码说明
可以看到 net 目录内的源码结构是这样的:
```
net
    App_Code
        Config.cs
        Handler.cs
        PathFormatter.cs
        *Handler.cs
    Bin
        Newtonsoft.Json.dll
    config.json
    controller.ashx
    net.sln
    README.md
    Web.config
```
App_Code 上的文件是应用程序的源码。
- Config.cs 负责读取配置文件
- Handler.cs 是请求处理器的基类,提供了一些基本对象的访问以及输出控制。如果需要增加处理器,应该从该基类继承
- PathFormatter.cs 解析 PathFormat,把信息填充为运行时信息。
- *Handler.cs 是各种处理器,处理各种 UEditor 需要的请求。
Bin 里面的是应用程序的依赖库,当前依赖 Newtonsoft 的 Json 库。Bin 目录和 App_Code 目录受应用程序保护,不用担心被用户访问到。
config.json 是 UEditor 后端的配置文件,上一节已经介绍了比较重要的配置项。
controller.ashx 是 UEditor 请求的入口,它把不同的 action 分发到不同的 Handler 来处理。
net.sln 是项目的解决方案文件,安装 Visual Studio 2013 或以上的机器可以打开进行项目的改造。
README.md 是本说明文件。
Web.config 是应用程序的配置文件。
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/Web.config
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <httpRuntime requestValidationMode="2.0" maxRequestLength="102400 " />
    <pages validateRequest="false" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"></pages>
    <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" />
  </system.web>
</configuration>
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/config.json
New file
@@ -0,0 +1,94 @@
/* 前后端通信相关的配置,注释只允许使用多行方式 */
{
    /* 上传图片配置项 */
    "imageActionName": "uploadimage", /* 执行上传图片的action名称 */
    "imageFieldName": "upfile", /* 提交的图片表单名称 */
    "imageMaxSize": 2048000, /* 上传大小限制,单位B */
    "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
    "imageCompressEnable": true, /* 是否压缩图片,默认是true */
    "imageCompressBorder": 1600, /* 图片压缩最长边限制 */
    "imageInsertAlign": "none", /* 插入的图片浮动方式 */
    "imageUrlPrefix": "/ueditor/net/", /* 图片访问路径前缀 */
    "imagePathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
                                /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
                                /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
                                /* {time} 会替换成时间戳 */
                                /* {yyyy} 会替换成四位年份 */
                                /* {yy} 会替换成两位年份 */
                                /* {mm} 会替换成两位月份 */
                                /* {dd} 会替换成两位日期 */
                                /* {hh} 会替换成两位小时 */
                                /* {ii} 会替换成两位分钟 */
                                /* {ss} 会替换成两位秒 */
                                /* 非法字符 \ : * ? " < > | */
                                /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */
    /* 涂鸦图片上传配置项 */
    "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */
    "scrawlFieldName": "upfile", /* 提交的图片表单名称 */
    "scrawlPathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */
    "scrawlUrlPrefix": "/ueditor/net/", /* 图片访问路径前缀 */
    "scrawlInsertAlign": "none",
    /* 截图工具上传 */
    "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */
    "snapscreenPathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "snapscreenUrlPrefix": "/ueditor/net/", /* 图片访问路径前缀 */
    "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */
    /* 抓取远程图片配置 */
    "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
    "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */
    "catcherFieldName": "source", /* 提交的图片列表表单名称 */
    "catcherPathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "catcherUrlPrefix": "/ueditor/net/", /* 图片访问路径前缀 */
    "catcherMaxSize": 2048000, /* 上传大小限制,单位B */
    "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */
    /* 上传视频配置 */
    "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */
    "videoFieldName": "upfile", /* 提交的视频表单名称 */
    "videoPathFormat": "upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "videoUrlPrefix": "/ueditor/net/", /* 视频访问路径前缀 */
    "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */
    "videoAllowFiles": [
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */
    /* 上传文件配置 */
    "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */
    "fileFieldName": "upfile", /* 提交的文件表单名称 */
    "filePathFormat": "upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "fileUrlPrefix": "/ueditor/net/", /* 文件访问路径前缀 */
    "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */
    "fileAllowFiles": [
        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
    ], /* 上传文件格式显示 */
    /* 列出指定目录下的图片 */
    "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */
    "imageManagerListPath": "upload/image", /* 指定要列出图片的目录 */
    "imageManagerListSize": 20, /* 每次列出文件数量 */
    "imageManagerUrlPrefix": "/ueditor/net/", /* 图片访问路径前缀 */
    "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
    "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */
    /* 列出指定目录下的文件 */
    "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
    "fileManagerListPath": "upload/file", /* 指定要列出文件的目录 */
    "fileManagerUrlPrefix": "/ueditor/net/", /* 文件访问路径前缀 */
    "fileManagerListSize": 20, /* 每次列出文件数量 */
    "fileManagerAllowFiles": [
        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
    ] /* 列出的文件类型 */
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/controller.ashx
New file
@@ -0,0 +1,80 @@
<%@ WebHandler Language="C#" Class="UEditorHandler" %>
using System;
using System.Web;
using System.IO;
using System.Collections;
using Newtonsoft.Json;
public class UEditorHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        Handler action = null;
        switch (context.Request["action"])
        {
            case "config":
                action = new ConfigHandler(context);
                break;
            case "uploadimage":
                action = new UploadHandler(context, new UploadConfig()
                {
                    AllowExtensions = Config.GetStringList("imageAllowFiles"),
                    PathFormat = Config.GetString("imagePathFormat"),
                    SizeLimit = Config.GetInt("imageMaxSize"),
                    UploadFieldName = Config.GetString("imageFieldName")
                });
                break;
            case "uploadscrawl":
                action = new UploadHandler(context, new UploadConfig()
                {
                    AllowExtensions = new string[] { ".png" },
                    PathFormat = Config.GetString("scrawlPathFormat"),
                    SizeLimit = Config.GetInt("scrawlMaxSize"),
                    UploadFieldName = Config.GetString("scrawlFieldName"),
                    Base64 = true,
                    Base64Filename = "scrawl.png"
                });
                break;
            case "uploadvideo":
                action = new UploadHandler(context, new UploadConfig()
                {
                    AllowExtensions = Config.GetStringList("videoAllowFiles"),
                    PathFormat = Config.GetString("videoPathFormat"),
                    SizeLimit = Config.GetInt("videoMaxSize"),
                    UploadFieldName = Config.GetString("videoFieldName")
                });
                break;
            case "uploadfile":
                action = new UploadHandler(context, new UploadConfig()
                {
                    AllowExtensions = Config.GetStringList("fileAllowFiles"),
                    PathFormat = Config.GetString("filePathFormat"),
                    SizeLimit = Config.GetInt("fileMaxSize"),
                    UploadFieldName = Config.GetString("fileFieldName")
                });
                break;
            case "listimage":
                action = new ListFileManager(context, Config.GetString("imageManagerListPath"), Config.GetStringList("imageManagerAllowFiles"));
                break;
            case "listfile":
                action = new ListFileManager(context, Config.GetString("fileManagerListPath"), Config.GetStringList("fileManagerAllowFiles"));
                break;
            case "catchimage":
                action = new CrawlerHandler(context);
                break;
            default:
                action = new NotSupportedHandler(context);
                break;
        }
        action.Process();
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/net/net.sln
New file
@@ -0,0 +1,38 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.21005.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "net", "http://localhost:7957", "{36F65A7F-64E7-4E05-BBC2-EAB6E4EDAF30}"
    ProjectSection(WebsiteProperties) = preProject
        UseIISExpress = "true"
        TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
        Debug.AspNetCompiler.VirtualPath = "/localhost_7957"
        Debug.AspNetCompiler.PhysicalPath = "..\..\..\..\prj\ueditor\net\"
        Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_7957\"
        Debug.AspNetCompiler.Updateable = "true"
        Debug.AspNetCompiler.ForceOverwrite = "true"
        Debug.AspNetCompiler.FixedNames = "false"
        Debug.AspNetCompiler.Debug = "True"
        Release.AspNetCompiler.VirtualPath = "/localhost_7957"
        Release.AspNetCompiler.PhysicalPath = "..\..\..\..\prj\ueditor\net\"
        Release.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_7957\"
        Release.AspNetCompiler.Updateable = "true"
        Release.AspNetCompiler.ForceOverwrite = "true"
        Release.AspNetCompiler.FixedNames = "false"
        Release.AspNetCompiler.Debug = "False"
        SlnRelativePath = "..\..\..\..\prj\ueditor\net\"
    EndProjectSection
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {36F65A7F-64E7-4E05-BBC2-EAB6E4EDAF30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {36F65A7F-64E7-4E05-BBC2-EAB6E4EDAF30}.Debug|Any CPU.Build.0 = Debug|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
EndGlobal
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/php/Uploader.class.php
New file
@@ -0,0 +1,349 @@
<?php
/**
 * Created by JetBrains PhpStorm.
 * User: taoqili
 * Date: 12-7-18
 * Time: 上午11: 32
 * UEditor编辑器通用上传类
 */
class Uploader
{
    private $fileField; //文件域名
    private $file; //文件上传对象
    private $base64; //文件上传对象
    private $config; //配置信息
    private $oriName; //原始文件名
    private $fileName; //新文件名
    private $fullName; //完整文件名,即从当前配置目录开始的URL
    private $filePath; //完整文件名,即从当前配置目录开始的URL
    private $fileSize; //文件大小
    private $fileType; //文件类型
    private $stateInfo; //上传状态信息,
    private $stateMap = array( //上传状态映射表,国际化用户需考虑此处数据的国际化
        "SUCCESS", //上传成功标记,在UEditor中内不可改变,否则flash判断会出错
        "文件大小超出 upload_max_filesize 限制",
        "文件大小超出 MAX_FILE_SIZE 限制",
        "文件未被完整上传",
        "没有文件被上传",
        "上传文件为空",
        "ERROR_TMP_FILE" => "临时文件错误",
        "ERROR_TMP_FILE_NOT_FOUND" => "找不到临时文件",
        "ERROR_SIZE_EXCEED" => "文件大小超出网站限制",
        "ERROR_TYPE_NOT_ALLOWED" => "文件类型不允许",
        "ERROR_CREATE_DIR" => "目录创建失败",
        "ERROR_DIR_NOT_WRITEABLE" => "目录没有写权限",
        "ERROR_FILE_MOVE" => "文件保存时出错",
        "ERROR_FILE_NOT_FOUND" => "找不到上传文件",
        "ERROR_WRITE_CONTENT" => "写入文件内容错误",
        "ERROR_UNKNOWN" => "未知错误",
        "ERROR_DEAD_LINK" => "链接不可用",
        "ERROR_HTTP_LINK" => "链接不是http链接",
        "ERROR_HTTP_CONTENTTYPE" => "链接contentType不正确"
    );
    /**
     * 构造函数
     * @param string $fileField 表单名称
     * @param array $config 配置项
     * @param bool $base64 是否解析base64编码,可省略。若开启,则$fileField代表的是base64编码的字符串表单名
     */
    public function __construct($fileField, $config, $type = "upload")
    {
        $this->fileField = $fileField;
        $this->config = $config;
        $this->type = $type;
        if ($type == "remote") {
            $this->saveRemote();
        } else if($type == "base64") {
            $this->upBase64();
        } else {
            $this->upFile();
        }
        $this->stateMap['ERROR_TYPE_NOT_ALLOWED'] = iconv('unicode', 'utf-8', $this->stateMap['ERROR_TYPE_NOT_ALLOWED']);
    }
    /**
     * 上传文件的主处理方法
     * @return mixed
     */
    private function upFile()
    {
        $file = $this->file = $_FILES[$this->fileField];
        if (!$file) {
            $this->stateInfo = $this->getStateInfo("ERROR_FILE_NOT_FOUND");
            return;
        }
        if ($this->file['error']) {
            $this->stateInfo = $this->getStateInfo($file['error']);
            return;
        } else if (!file_exists($file['tmp_name'])) {
            $this->stateInfo = $this->getStateInfo("ERROR_TMP_FILE_NOT_FOUND");
            return;
        } else if (!is_uploaded_file($file['tmp_name'])) {
            $this->stateInfo = $this->getStateInfo("ERROR_TMPFILE");
            return;
        }
        $this->oriName = $file['name'];
        $this->fileSize = $file['size'];
        $this->fileType = $this->getFileExt();
        $this->fullName = $this->getFullName();
        $this->filePath = $this->getFilePath();
        $this->fileName = $this->getFileName();
        $dirname = dirname($this->filePath);
        //检查文件大小是否超出限制
        if (!$this->checkSize()) {
            $this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED");
            return;
        }
        //检查是否不允许的文件格式
        if (!$this->checkType()) {
            $this->stateInfo = $this->getStateInfo("ERROR_TYPE_NOT_ALLOWED");
            return;
        }
        //创建目录失败
        if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) {
            $this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR");
            return;
        } else if (!is_writeable($dirname)) {
            $this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE");
            return;
        }
        //移动文件
        if (!(move_uploaded_file($file["tmp_name"], $this->filePath) && file_exists($this->filePath))) { //移动失败
            $this->stateInfo = $this->getStateInfo("ERROR_FILE_MOVE");
        } else { //移动成功
            $this->stateInfo = $this->stateMap[0];
        }
    }
    /**
     * 处理base64编码的图片上传
     * @return mixed
     */
    private function upBase64()
    {
        $base64Data = $_POST[$this->fileField];
        $img = base64_decode($base64Data);
        $this->oriName = $this->config['oriName'];
        $this->fileSize = strlen($img);
        $this->fileType = $this->getFileExt();
        $this->fullName = $this->getFullName();
        $this->filePath = $this->getFilePath();
        $this->fileName = $this->getFileName();
        $dirname = dirname($this->filePath);
        //检查文件大小是否超出限制
        if (!$this->checkSize()) {
            $this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED");
            return;
        }
        //创建目录失败
        if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) {
            $this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR");
            return;
        } else if (!is_writeable($dirname)) {
            $this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE");
            return;
        }
        //移动文件
        if (!(file_put_contents($this->filePath, $img) && file_exists($this->filePath))) { //移动失败
            $this->stateInfo = $this->getStateInfo("ERROR_WRITE_CONTENT");
        } else { //移动成功
            $this->stateInfo = $this->stateMap[0];
        }
    }
    /**
     * 拉取远程图片
     * @return mixed
     */
    private function saveRemote()
    {
        $imgUrl = htmlspecialchars($this->fileField);
        $imgUrl = str_replace("&amp;", "&", $imgUrl);
        //http开头验证
        if (strpos($imgUrl, "http") !== 0) {
            $this->stateInfo = $this->getStateInfo("ERROR_HTTP_LINK");
            return;
        }
        //获取请求头并检测死链
        $heads = get_headers($imgUrl);
        if (!(stristr($heads[0], "200") && stristr($heads[0], "OK"))) {
            $this->stateInfo = $this->getStateInfo("ERROR_DEAD_LINK");
            return;
        }
        //格式验证(扩展名验证和Content-Type验证)
        $fileType = strtolower(strrchr($imgUrl, '.'));
        if (!in_array($fileType, $this->config['allowFiles']) || stristr($heads['Content-Type'], "image")) {
            $this->stateInfo = $this->getStateInfo("ERROR_HTTP_CONTENTTYPE");
            return;
        }
        //打开输出缓冲区并获取远程图片
        ob_start();
        $context = stream_context_create(
            array('http' => array(
                'follow_location' => false // don't follow redirects
            ))
        );
        readfile($imgUrl, false, $context);
        $img = ob_get_contents();
        ob_end_clean();
        preg_match("/[\/]([^\/]*)[\.]?[^\.\/]*$/", $imgUrl, $m);
        $this->oriName = $m ? $m[1]:"";
        $this->fileSize = strlen($img);
        $this->fileType = $this->getFileExt();
        $this->fullName = $this->getFullName();
        $this->filePath = $this->getFilePath();
        $this->fileName = $this->getFileName();
        $dirname = dirname($this->filePath);
        //检查文件大小是否超出限制
        if (!$this->checkSize()) {
            $this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED");
            return;
        }
        //创建目录失败
        if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) {
            $this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR");
            return;
        } else if (!is_writeable($dirname)) {
            $this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE");
            return;
        }
        //移动文件
        if (!(file_put_contents($this->filePath, $img) && file_exists($this->filePath))) { //移动失败
            $this->stateInfo = $this->getStateInfo("ERROR_WRITE_CONTENT");
        } else { //移动成功
            $this->stateInfo = $this->stateMap[0];
        }
    }
    /**
     * 上传错误检查
     * @param $errCode
     * @return string
     */
    private function getStateInfo($errCode)
    {
        return !$this->stateMap[$errCode] ? $this->stateMap["ERROR_UNKNOWN"] : $this->stateMap[$errCode];
    }
    /**
     * 获取文件扩展名
     * @return string
     */
    private function getFileExt()
    {
        return strtolower(strrchr($this->oriName, '.'));
    }
    /**
     * 重命名文件
     * @return string
     */
    private function getFullName()
    {
        //替换日期事件
        $t = time();
        $d = explode('-', date("Y-y-m-d-H-i-s"));
        $format = $this->config["pathFormat"];
        $format = str_replace("{yyyy}", $d[0], $format);
        $format = str_replace("{yy}", $d[1], $format);
        $format = str_replace("{mm}", $d[2], $format);
        $format = str_replace("{dd}", $d[3], $format);
        $format = str_replace("{hh}", $d[4], $format);
        $format = str_replace("{ii}", $d[5], $format);
        $format = str_replace("{ss}", $d[6], $format);
        $format = str_replace("{time}", $t, $format);
        //过滤文件名的非法自负,并替换文件名
        $oriName = substr($this->oriName, 0, strrpos($this->oriName, '.'));
        $oriName = preg_replace("/[\|\?\"\<\>\/\*\\\\]+/", '', $oriName);
        $format = str_replace("{filename}", $oriName, $format);
        //替换随机字符串
        $randNum = rand(1, 10000000000) . rand(1, 10000000000);
        if (preg_match("/\{rand\:([\d]*)\}/i", $format, $matches)) {
            $format = preg_replace("/\{rand\:[\d]*\}/i", substr($randNum, 0, $matches[1]), $format);
        }
        $ext = $this->getFileExt();
        return $format . $ext;
    }
    /**
     * 获取文件名
     * @return string
     */
    private function getFileName () {
        return substr($this->filePath, strrpos($this->filePath, '/') + 1);
    }
    /**
     * 获取文件完整路径
     * @return string
     */
    private function getFilePath()
    {
        $fullname = $this->fullName;
        $rootPath = $_SERVER['DOCUMENT_ROOT'];
        if (substr($fullname, 0, 1) != '/') {
            $fullname = '/' . $fullname;
        }
        return $rootPath . $fullname;
    }
    /**
     * 文件类型检测
     * @return bool
     */
    private function checkType()
    {
        return in_array($this->getFileExt(), $this->config["allowFiles"]);
    }
    /**
     * 文件大小检测
     * @return bool
     */
    private function  checkSize()
    {
        return $this->fileSize <= ($this->config["maxSize"]);
    }
    /**
     * 获取当前上传成功文件的各项信息
     * @return array
     */
    public function getFileInfo()
    {
        return array(
            "state" => $this->stateInfo,
            "url" => $this->fullName,
            "title" => $this->fileName,
            "original" => $this->oriName,
            "type" => $this->fileType,
            "size" => $this->fileSize
        );
    }
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/php/action_crawler.php
New file
@@ -0,0 +1,44 @@
<?php
/**
 * 抓取远程图片
 * User: Jinqn
 * Date: 14-04-14
 * Time: 下午19:18
 */
set_time_limit(0);
include("Uploader.class.php");
/* 上传配置 */
$config = array(
    "pathFormat" => $CONFIG['catcherPathFormat'],
    "maxSize" => $CONFIG['catcherMaxSize'],
    "allowFiles" => $CONFIG['catcherAllowFiles'],
    "oriName" => "remote.png"
);
$fieldName = $CONFIG['catcherFieldName'];
/* 抓取远程图片 */
$list = array();
if (isset($_POST[$fieldName])) {
    $source = $_POST[$fieldName];
} else {
    $source = $_GET[$fieldName];
}
foreach ($source as $imgUrl) {
    $item = new Uploader($imgUrl, $config, "remote");
    $info = $item->getFileInfo();
    array_push($list, array(
        "state" => $info["state"],
        "url" => $info["url"],
        "size" => $info["size"],
        "title" => htmlspecialchars($info["title"]),
        "original" => htmlspecialchars($info["original"]),
        "source" => htmlspecialchars($imgUrl)
    ));
}
/* 返回抓取数据 */
return json_encode(array(
    'state'=> count($list) ? 'SUCCESS':'ERROR',
    'list'=> $list
));
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/php/action_list.php
New file
@@ -0,0 +1,92 @@
<?php
/**
 * 获取已上传的文件列表
 * User: Jinqn
 * Date: 14-04-09
 * Time: 上午10:17
 */
include "Uploader.class.php";
/* 判断类型 */
switch ($_GET['action']) {
    /* 列出文件 */
    case 'listfile':
        $allowFiles = $CONFIG['fileManagerAllowFiles'];
        $listSize = $CONFIG['fileManagerListSize'];
        $path = $CONFIG['fileManagerListPath'];
        break;
    /* 列出图片 */
    case 'listimage':
    default:
        $allowFiles = $CONFIG['imageManagerAllowFiles'];
        $listSize = $CONFIG['imageManagerListSize'];
        $path = $CONFIG['imageManagerListPath'];
}
$allowFiles = substr(str_replace(".", "|", join("", $allowFiles)), 1);
/* 获取参数 */
$size = isset($_GET['size']) ? htmlspecialchars($_GET['size']) : $listSize;
$start = isset($_GET['start']) ? htmlspecialchars($_GET['start']) : 0;
$end = $start + $size;
/* 获取文件列表 */
$path = $_SERVER['DOCUMENT_ROOT'] . (substr($path, 0, 1) == "/" ? "":"/") . $path;
$files = getfiles($path, $allowFiles);
if (!count($files)) {
    return json_encode(array(
        "state" => "no match file",
        "list" => array(),
        "start" => $start,
        "total" => count($files)
    ));
}
/* 获取指定范围的列表 */
$len = count($files);
for ($i = min($end, $len) - 1, $list = array(); $i < $len && $i >= 0 && $i >= $start; $i--){
    $list[] = $files[$i];
}
//倒序
//for ($i = $end, $list = array(); $i < $len && $i < $end; $i++){
//    $list[] = $files[$i];
//}
/* 返回数据 */
$result = json_encode(array(
    "state" => "SUCCESS",
    "list" => $list,
    "start" => $start,
    "total" => count($files)
));
return $result;
/**
 * 遍历获取目录下的指定类型的文件
 * @param $path
 * @param array $files
 * @return array
 */
function getfiles($path, $allowFiles, &$files = array())
{
    if (!is_dir($path)) return null;
    if(substr($path, strlen($path) - 1) != '/') $path .= '/';
    $handle = opendir($path);
    while (false !== ($file = readdir($handle))) {
        if ($file != '.' && $file != '..') {
            $path2 = $path . $file;
            if (is_dir($path2)) {
                getfiles($path2, $allowFiles, $files);
            } else {
                if (preg_match("/\.(".$allowFiles.")$/i", $file)) {
                    $files[] = array(
                        'url'=> substr($path2, strlen($_SERVER['DOCUMENT_ROOT'])),
                        'mtime'=> filemtime($path2)
                    );
                }
            }
        }
    }
    return $files;
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/php/action_upload.php
New file
@@ -0,0 +1,66 @@
<?php
/**
 * 上传附件和上传视频
 * User: Jinqn
 * Date: 14-04-09
 * Time: 上午10:17
 */
include "Uploader.class.php";
/* 上传配置 */
$base64 = "upload";
switch (htmlspecialchars($_GET['action'])) {
    case 'uploadimage':
        $config = array(
            "pathFormat" => $CONFIG['imagePathFormat'],
            "maxSize" => $CONFIG['imageMaxSize'],
            "allowFiles" => $CONFIG['imageAllowFiles']
        );
        $fieldName = $CONFIG['imageFieldName'];
        break;
    case 'uploadscrawl':
        $config = array(
            "pathFormat" => $CONFIG['scrawlPathFormat'],
            "maxSize" => $CONFIG['scrawlMaxSize'],
            "allowFiles" => $CONFIG['scrawlAllowFiles'],
            "oriName" => "scrawl.png"
        );
        $fieldName = $CONFIG['scrawlFieldName'];
        $base64 = "base64";
        break;
    case 'uploadvideo':
        $config = array(
            "pathFormat" => $CONFIG['videoPathFormat'],
            "maxSize" => $CONFIG['videoMaxSize'],
            "allowFiles" => $CONFIG['videoAllowFiles']
        );
        $fieldName = $CONFIG['videoFieldName'];
        break;
    case 'uploadfile':
    default:
        $config = array(
            "pathFormat" => $CONFIG['filePathFormat'],
            "maxSize" => $CONFIG['fileMaxSize'],
            "allowFiles" => $CONFIG['fileAllowFiles']
        );
        $fieldName = $CONFIG['fileFieldName'];
        break;
}
/* 生成上传实例对象并完成上传 */
$up = new Uploader($fieldName, $config, $base64);
/**
 * 得到上传文件所对应的各个参数,数组结构
 * array(
 *     "state" => "",          //上传状态,上传成功时必须返回"SUCCESS"
 *     "url" => "",            //返回的地址
 *     "title" => "",          //新文件名
 *     "original" => "",       //原始文件名
 *     "type" => ""            //文件类型
 *     "size" => "",           //文件大小
 * )
 */
/* 返回数据 */
return json_encode($up->getFileInfo());
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/php/config.json
New file
@@ -0,0 +1,94 @@
/* 前后端通信相关的配置,注释只允许使用多行方式 */
{
    /* 上传图片配置项 */
    "imageActionName": "uploadimage", /* 执行上传图片的action名称 */
    "imageFieldName": "upfile", /* 提交的图片表单名称 */
    "imageMaxSize": 2048000, /* 上传大小限制,单位B */
    "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
    "imageCompressEnable": true, /* 是否压缩图片,默认是true */
    "imageCompressBorder": 1600, /* 图片压缩最长边限制 */
    "imageInsertAlign": "none", /* 插入的图片浮动方式 */
    "imageUrlPrefix": "", /* 图片访问路径前缀 */
    "imagePathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
                                /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
                                /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
                                /* {time} 会替换成时间戳 */
                                /* {yyyy} 会替换成四位年份 */
                                /* {yy} 会替换成两位年份 */
                                /* {mm} 会替换成两位月份 */
                                /* {dd} 会替换成两位日期 */
                                /* {hh} 会替换成两位小时 */
                                /* {ii} 会替换成两位分钟 */
                                /* {ss} 会替换成两位秒 */
                                /* 非法字符 \ : * ? " < > | */
                                /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */
    /* 涂鸦图片上传配置项 */
    "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */
    "scrawlFieldName": "upfile", /* 提交的图片表单名称 */
    "scrawlPathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */
    "scrawlUrlPrefix": "", /* 图片访问路径前缀 */
    "scrawlInsertAlign": "none",
    /* 截图工具上传 */
    "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */
    "snapscreenPathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */
    "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */
    /* 抓取远程图片配置 */
    "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
    "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */
    "catcherFieldName": "source", /* 提交的图片列表表单名称 */
    "catcherPathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "catcherUrlPrefix": "", /* 图片访问路径前缀 */
    "catcherMaxSize": 2048000, /* 上传大小限制,单位B */
    "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */
    /* 上传视频配置 */
    "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */
    "videoFieldName": "upfile", /* 提交的视频表单名称 */
    "videoPathFormat": "/ueditor/php/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "videoUrlPrefix": "", /* 视频访问路径前缀 */
    "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */
    "videoAllowFiles": [
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */
    /* 上传文件配置 */
    "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */
    "fileFieldName": "upfile", /* 提交的文件表单名称 */
    "filePathFormat": "/ueditor/php/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "fileUrlPrefix": "", /* 文件访问路径前缀 */
    "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */
    "fileAllowFiles": [
        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
    ], /* 上传文件格式显示 */
    /* 列出指定目录下的图片 */
    "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */
    "imageManagerListPath": "/ueditor/php/upload/image/", /* 指定要列出图片的目录 */
    "imageManagerListSize": 20, /* 每次列出文件数量 */
    "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */
    "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
    "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */
    /* 列出指定目录下的文件 */
    "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
    "fileManagerListPath": "/ueditor/php/upload/file/", /* 指定要列出文件的目录 */
    "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */
    "fileManagerListSize": 20, /* 每次列出文件数量 */
    "fileManagerAllowFiles": [
        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
    ] /* 列出的文件类型 */
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/php/controller.php
New file
@@ -0,0 +1,59 @@
<?php
//header('Access-Control-Allow-Origin: http://www.baidu.com'); //设置http://www.baidu.com允许跨域访问
//header('Access-Control-Allow-Headers: X-Requested-With,X_Requested_With'); //设置允许的跨域header
date_default_timezone_set("Asia/Chongqing");
error_reporting(E_ERROR);
header("Content-Type: text/html; charset=utf-8");
$CONFIG = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents("config.json")), true);
$action = $_GET['action'];
switch ($action) {
    case 'config':
        $result =  json_encode($CONFIG);
        break;
    /* 上传图片 */
    case 'uploadimage':
    /* 上传涂鸦 */
    case 'uploadscrawl':
    /* 上传视频 */
    case 'uploadvideo':
    /* 上传文件 */
    case 'uploadfile':
        $result = include("action_upload.php");
        break;
    /* 列出图片 */
    case 'listimage':
        $result = include("action_list.php");
        break;
    /* 列出文件 */
    case 'listfile':
        $result = include("action_list.php");
        break;
    /* 抓取远程文件 */
    case 'catchimage':
        $result = include("action_crawler.php");
        break;
    default:
        $result = json_encode(array(
            'state'=> '请求地址出错'
        ));
        break;
}
/* 输出结果 */
if (isset($_GET["callback"])) {
    if (preg_match("/^[\w_]+$/", $_GET["callback"])) {
        echo htmlspecialchars($_GET["callback"]) . '(' . $result . ')';
    } else {
        echo json_encode(array(
            'state'=> 'callback参数不合法'
        ));
    }
} else {
    echo $result;
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/css/ueditor.css
New file
@@ -0,0 +1,1903 @@
/*基础UI构建
*/
/* common layer */
.edui-default .edui-box {
    border: none;
    padding: 0;
    margin: 0;
    overflow: hidden;
}
.edui-default a.edui-box {
    display: block;
    text-decoration: none;
    color: black;
}
.edui-default a.edui-box:hover {
    text-decoration: none;
}
.edui-default a.edui-box:active {
    text-decoration: none;
}
.edui-default table.edui-box {
    border-collapse: collapse;
}
.edui-default ul.edui-box {
    list-style-type: none;
}
div.edui-box {
    position: relative;
    display: -moz-inline-box !important;
    display: inline-block !important;
    vertical-align: top;
}
.edui-default .edui-clearfix {
    zoom: 1
}
.edui-default .edui-clearfix:after {
    content: '\20';
    display: block;
    clear: both;
}
 * html div.edui-box {
    display: inline !important;
}
*:first-child+html div.edui-box {
    display: inline !important;
}
/* control layout */
.edui-default .edui-button-body, .edui-splitbutton-body, .edui-menubutton-body, .edui-combox-body {
    position: relative;
}
.edui-default .edui-popup {
    position: absolute;
    -webkit-user-select: none;
    -moz-user-select: none;
}
.edui-default .edui-popup .edui-shadow {
    position: absolute;
    z-index: -1;
}
.edui-default .edui-popup .edui-bordereraser {
    position: absolute;
    overflow: hidden;
}
.edui-default .edui-tablepicker .edui-canvas {
    position: relative;
}
.edui-default .edui-tablepicker .edui-canvas .edui-overlay {
    position: absolute;
}
.edui-default .edui-dialog-modalmask, .edui-dialog-dragmask {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
}
.edui-default .edui-toolbar {
    position: relative;
}
/*
 * default theme
 */
.edui-default .edui-label {
    cursor: default;
}
.edui-default span.edui-clickable {
    color: blue;
    cursor: pointer;
    text-decoration: underline;
}
.edui-default span.edui-unclickable {
    color: gray;
    cursor: default;
}
/* 工具栏 */
.edui-default .edui-toolbar {
    cursor: default;
    -webkit-user-select: none;
    -moz-user-select: none;
    padding: 1px;
    overflow: hidden; /*全屏下单独一行不占位*/
    zoom: 1;
    width:auto;
    height:auto;
}
.edui-default .edui-toolbar .edui-button,
.edui-default .edui-toolbar .edui-splitbutton,
.edui-default .edui-toolbar .edui-menubutton,
.edui-default .edui-toolbar .edui-combox {
    margin: 1px;
}
/*UI工具栏、编辑区域、底部*/
.edui-default .edui-editor {
    border: 1px solid #d4d4d4;
    background-color: white;
    position: relative;
    overflow: visible;
    -webkit-border-radius: 4px;
    -moz-border-radius: 4px;
    border-radius: 4px;
}
.edui-editor div{
    width:auto;
    height:auto;
}
.edui-default .edui-editor-toolbarbox {
    position: relative;
    zoom: 1;
    -webkit-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);
    -moz-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);
    box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);
    border-top-left-radius:2px;
    border-top-right-radius:2px;
}
.edui-default .edui-editor-toolbarboxouter {
    border-bottom: 1px solid #d4d4d4;
    background-color: #fafafa;
    background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));
    background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);
    background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);
    background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);
    background-repeat: repeat-x;
    /*border: 1px solid #d4d4d4;*/
    -webkit-border-radius: 4px 4px 0 0;
    -moz-border-radius: 4px 4px 0 0;
    border-radius: 4px 4px 0 0;
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);
    *zoom: 1;
    -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
    -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
}
.edui-default .edui-editor-toolbarboxinner {
    padding: 2px;
}
.edui-default .edui-editor-iframeholder {
    position: relative;
    /*for fix ie6 toolbarmsg under iframe bug. relative -> static */
    /*_position: static !important;*
}
.edui-default .edui-editor-iframeholder textarea {
    font-family: consolas, "Courier New", "lucida console", monospace;
    font-size: 12px;
    line-height: 18px;
}
.edui-default .edui-editor-bottombar {
    /*border-top: 1px solid #ccc;*/
    /*height: 20px;*/
    /*width: 40%;*/
    /*float: left;*/
    /*overflow: hidden;*/
}
.edui-default .edui-editor-bottomContainer {
    overflow: hidden;
}
.edui-default .edui-editor-bottomContainer table {
    width: 100%;
    height: 0;
    overflow: hidden;
    border-spacing: 0;
}
.edui-default .edui-editor-bottomContainer td {
    white-space: nowrap;
    border-top: 1px solid #ccc;
    line-height: 20px;
    font-size: 12px;
    font-family: Arial, Helvetica, Tahoma, Verdana, Sans-Serif;
}
.edui-default .edui-editor-wordcount {
    text-align: right;
    margin-right: 5px;
    color: #aaa;
}
.edui-default .edui-editor-scale {
    width: 12px;
}
.edui-default .edui-editor-scale .edui-editor-icon {
    float: right;
    width: 100%;
    height: 12px;
    margin-top: 10px;
    background: url(../images/scale.png) no-repeat;
    cursor: se-resize;
}
.edui-default .edui-editor-breadcrumb {
    margin: 2px 0 0 3px;
}
.edui-default .edui-editor-breadcrumb span {
    cursor: pointer;
    text-decoration: underline;
    color: blue;
}
.edui-default .edui-toolbar .edui-for-fullscreen {
    float: right;
}
.edui-default .edui-bubble .edui-popup-content {
    border: 1px solid #DCAC6C;
    background-color: #fff6d9;
    padding: 5px;
    font-size: 10pt;
    font-family: "宋体";
}
.edui-default .edui-bubble .edui-shadow {
    /*box-shadow: 1px 1px 3px #818181;*/
    /*-webkit-box-shadow: 2px 2px 3px #818181;*/
    /*-moz-box-shadow: 2px 2px 3px #818181;*/
    /*filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '2', MakeShadow = 'true', ShadowOpacity = '0.5');*/
}
.edui-default .edui-editor-toolbarmsg {
    background-color: #FFF6D9;
    border-bottom: 1px solid #ccc;
    position: absolute;
    bottom: -25px;
    left: 0;
    z-index: 1009;
    width: 99.9%;
}
.edui-default .edui-editor-toolbarmsg-upload {
    font-size: 14px;
    color: blue;
    width: 100px;
    height: 16px;
    line-height: 16px;
    cursor: pointer;
    position: absolute;
    top: 5px;
    left: 350px;
}
.edui-default .edui-editor-toolbarmsg-label {
    font-size: 12px;
    line-height: 16px;
    padding: 4px;
}
.edui-default .edui-editor-toolbarmsg-close {
    float: right;
    width: 20px;
    height: 16px;
    line-height: 16px;
    cursor: pointer;
    color: red;
}
/*可选中菜单按钮*/
.edui-default .edui-list .edui-bordereraser {
    display: none;
}
.edui-default .edui-listitem {
    padding: 1px;
    white-space: nowrap;
}
.edui-default .edui-list .edui-state-hover {
    position: relative;
    background-color: #fff5d4;
    border: 1px solid #dcac6c;
    padding: 0;
}
.edui-default .edui-for-fontfamily .edui-listitem-label {
    min-width: 130px;
    _width: 120px;
    font-size: 12px;
    height: 22px;
    line-height: 22px;
    padding-left: 5px;
}
.edui-default .edui-for-insertcode .edui-listitem-label {
    min-width: 120px;
    _width: 120px;
    font-size: 12px;
    height: 22px;
    line-height: 22px;
    padding-left: 5px;
}
.edui-default .edui-for-underline .edui-listitem-label {
    min-width: 120px;
    _width: 120px;
    padding: 3px 5px;
    font-size: 12px;
}
.edui-default .edui-for-fontsize .edui-listitem-label {
    min-width: 120px;
    _width: 120px;
    padding: 3px 5px;
}
.edui-default .edui-for-paragraph .edui-listitem-label {
    min-width: 200px;
    _width: 200px;
    padding: 2px 5px;
}
.edui-default .edui-for-rowspacingtop .edui-listitem-label,
.edui-default .edui-for-rowspacingbottom .edui-listitem-label {
    min-width: 53px;
    _width: 53px;
    padding: 2px 5px;
}
.edui-default .edui-for-lineheight .edui-listitem-label {
    min-width: 53px;
    _width: 53px;
    padding: 2px 5px;
}
.edui-default .edui-for-customstyle .edui-listitem-label {
    min-width: 200px;
    _width: 200px;
    width: 200px !important;
    padding: 2px 5px;
}
/* 可选中按钮弹出菜单*/
.edui-default .edui-menu {
    z-index: 3000;
}
.edui-default .edui-menu .edui-popup-content {
    padding: 3px;
}
.edui-default .edui-menu-body {
    _width: 150px;
    min-width: 170px;
    background: url("../images/sparator_v.png") repeat-y 25px;
}
.edui-default .edui-menuitem-body {
}
.edui-default .edui-menuitem {
    height: 20px;
    cursor: default;
    vertical-align: top;
}
.edui-default .edui-menuitem .edui-icon {
    width: 20px !important;
    height: 20px !important;
    background: url(../images/icons.png) 0 -4000px;
    background: url(../images/icons.gif) 0 -4000px\9;
}
.edui-default .edui-menuitem .edui-label {
    font-size: 12px;
    line-height: 20px;
    height: 20px;
    padding-left: 10px;
}
.edui-default .edui-state-checked .edui-menuitem-body {
    background: url("../images/icons-all.gif") no-repeat 6px -205px;
}
.edui-default .edui-state-disabled .edui-menuitem-label {
    color: gray;
}
/*不可选中菜单按钮 */
.edui-default .edui-toolbar .edui-combox-body .edui-button-body {
    width: 60px;
    font-size: 12px;
    height: 20px;
    line-height: 20px;
    padding-left: 5px;
    white-space: nowrap;
    margin: 0 3px 0 0;
}
.edui-default .edui-toolbar .edui-combox-body .edui-arrow {
    background: url(../images/icons.png) -741px 0;
    _background: url(../images/icons.gif) -741px 0;
    height: 20px;
    width: 9px;
}
.edui-default .edui-toolbar .edui-combox .edui-combox-body {
    border: 1px solid #CCC;
    background-color: white;
    border-radius: 2px;
    -webkit-border-radius: 2px;
    -moz-border-radius: 2px;
}
.edui-default .edui-toolbar .edui-combox-body .edui-splitborder {
    display: none;
}
.edui-default .edui-toolbar .edui-combox-body .edui-arrow {
    border-left: 1px solid #CCC;
}
.edui-default .edui-toolbar .edui-state-hover .edui-combox-body {
    background-color: #fff5d4;
    border: 1px solid #dcac6c;
}
.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow {
    border-left: 1px solid #dcac6c;
}
.edui-default .edui-toolbar .edui-state-checked .edui-combox-body {
    background-color: #FFE69F;
    border: 1px solid #DCAC6C;
}
.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow {
    border-left: 1px solid #DCAC6C;
}
.edui-toolbar .edui-state-disabled .edui-combox-body {
    background-color: #F0F0EE;
    opacity: 0.3;
    filter: alpha(opacity = 30);
}
.edui-toolbar .edui-state-opened .edui-combox-body {
    background-color: white;
    border: 1px solid gray;
}
/*普通按钮样式及状态*/
.edui-default .edui-toolbar .edui-button .edui-icon,
.edui-default .edui-toolbar .edui-menubutton .edui-icon,
.edui-default .edui-toolbar .edui-splitbutton .edui-icon {
    height: 20px !important;
    width: 20px !important;
    background-image: url(../images/icons.png);
    background-image: url(../images/icons.gif) \9;
}
.edui-default .edui-toolbar .edui-button .edui-button-wrap {
    padding: 1px;
    position: relative;
}
.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap {
    background-color: #fff5d4;
    padding: 0;
    border: 1px solid #dcac6c;
}
.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap {
    background-color: #ffe69f;
    padding: 0;
    border: 1px solid #dcac6c;
    border-radius: 2px;
    -webkit-border-radius: 2px;
    -moz-border-radius: 2px;
}
.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap {
    background-color: #ffffff;
    padding: 0;
    border: 1px solid gray;
}
.edui-default .edui-toolbar .edui-state-disabled .edui-label {
    color: #ccc;
}
.edui-default .edui-toolbar .edui-state-disabled .edui-icon {
    opacity: 0.3;
    filter: alpha(opacity = 30);
}
/* toolbar icons */
.edui-default .edui-for-undo .edui-icon {
    background-position: -160px 0;
}
.edui-default  .edui-for-redo .edui-icon {
    background-position: -100px 0;
}
.edui-default  .edui-for-bold .edui-icon {
    background-position: 0 0;
}
.edui-default  .edui-for-italic .edui-icon {
    background-position: -60px 0;
}
.edui-default  .edui-for-fontborder .edui-icon {
    background-position:-160px -40px;
}
.edui-default  .edui-for-underline .edui-icon {
    background-position: -140px 0;
}
.edui-default  .edui-for-strikethrough .edui-icon {
    background-position: -120px 0;
}
.edui-default  .edui-for-subscript .edui-icon {
    background-position: -600px 0;
}
.edui-default  .edui-for-superscript .edui-icon {
    background-position: -620px 0;
}
.edui-default  .edui-for-blockquote .edui-icon {
    background-position: -220px 0;
}
.edui-default  .edui-for-forecolor .edui-icon {
    background-position: -720px 0;
}
.edui-default  .edui-for-backcolor .edui-icon {
    background-position: -760px 0;
}
.edui-default  .edui-for-inserttable .edui-icon {
    background-position: -580px -20px;
}
.edui-default  .edui-for-autotypeset .edui-icon {
    background-position: -640px -40px;
}
.edui-default  .edui-for-justifyleft .edui-icon {
    background-position: -460px 0;
}
.edui-default  .edui-for-justifycenter .edui-icon {
    background-position: -420px 0;
}
.edui-default  .edui-for-justifyright .edui-icon {
    background-position: -480px 0;
}
.edui-default  .edui-for-justifyjustify .edui-icon {
    background-position: -440px 0;
}
.edui-default  .edui-for-insertorderedlist .edui-icon {
    background-position: -80px 0;
}
.edui-default  .edui-for-insertunorderedlist .edui-icon {
    background-position: -20px 0;
}
.edui-default  .edui-for-lineheight .edui-icon {
    background-position: -725px -40px;
}
.edui-default  .edui-for-rowspacingbottom .edui-icon {
    background-position: -745px -40px;
}
.edui-default  .edui-for-rowspacingtop .edui-icon {
    background-position: -765px -40px;
}
.edui-default  .edui-for-horizontal .edui-icon {
    background-position: -360px 0;
}
.edui-default  .edui-for-link .edui-icon {
    background-position: -500px 0;
}
.edui-default  .edui-for-code .edui-icon {
    background-position: -440px -40px;
}
.edui-default  .edui-for-insertimage .edui-icon {
    background-position: -726px -77px;
}
.edui-default  .edui-for-insertframe .edui-icon {
    background-position: -240px -40px;
}
.edui-default  .edui-for-emoticon .edui-icon {
    background-position: -60px -20px;
}
.edui-default  .edui-for-spechars .edui-icon {
    background-position: -240px 0;
}
.edui-default  .edui-for-help .edui-icon {
    background-position: -340px 0;
}
.edui-default  .edui-for-print .edui-icon {
    background-position: -440px -20px;
}
.edui-default  .edui-for-preview .edui-icon {
    background-position: -420px -20px;
}
.edui-default  .edui-for-selectall .edui-icon {
    background-position: -400px -20px;
}
.edui-default  .edui-for-searchreplace .edui-icon {
    background-position: -520px -20px;
}
.edui-default  .edui-for-map .edui-icon {
    background-position: -40px -40px;
}
.edui-default  .edui-for-gmap .edui-icon {
    background-position: -260px -40px;
}
.edui-default  .edui-for-insertvideo .edui-icon {
    background-position: -320px -20px;
}
.edui-default  .edui-for-time .edui-icon {
    background-position: -160px -20px;
}
.edui-default  .edui-for-date .edui-icon {
    background-position: -140px -20px;
}
.edui-default  .edui-for-cut .edui-icon {
    background-position: -680px 0;
}
.edui-default  .edui-for-copy .edui-icon {
    background-position: -700px 0;
}
.edui-default  .edui-for-paste .edui-icon {
    background-position: -560px 0;
}
.edui-default  .edui-for-formatmatch .edui-icon {
    background-position: -40px 0;
}
.edui-default  .edui-for-pasteplain .edui-icon {
    background-position: -360px -20px;
}
.edui-default  .edui-for-directionalityltr .edui-icon {
    background-position: -20px -20px;
}
.edui-default  .edui-for-directionalityrtl .edui-icon {
    background-position: -40px -20px;
}
.edui-default  .edui-for-source .edui-icon {
    background-position: -261px -0px;
}
.edui-default  .edui-for-removeformat .edui-icon {
    background-position: -580px 0;
}
.edui-default  .edui-for-unlink .edui-icon {
    background-position: -640px 0;
}
.edui-default  .edui-for-touppercase .edui-icon {
    background-position: -786px 0;
}
.edui-default  .edui-for-tolowercase .edui-icon {
    background-position: -806px 0;
}
.edui-default  .edui-for-insertrow .edui-icon {
    background-position: -478px -76px;
}
.edui-default  .edui-for-insertrownext .edui-icon {
    background-position: -498px -76px;
}
.edui-default  .edui-for-insertcol .edui-icon {
    background-position: -455px -76px;
}
.edui-default  .edui-for-insertcolnext  .edui-icon {
    background-position: -429px -76px;
}
.edui-default  .edui-for-mergeright .edui-icon {
    background-position: -60px -40px;
}
.edui-default  .edui-for-mergedown .edui-icon {
    background-position: -80px -40px;
}
.edui-default  .edui-for-splittorows .edui-icon {
    background-position: -100px -40px;
}
.edui-default  .edui-for-splittocols .edui-icon {
    background-position: -120px -40px;
}
.edui-default  .edui-for-insertparagraphbeforetable .edui-icon {
    background-position: -140px -40px;
}
.edui-default  .edui-for-deleterow .edui-icon {
    background-position: -660px -20px;
}
.edui-default  .edui-for-deletecol .edui-icon {
    background-position: -640px -20px;
}
.edui-default  .edui-for-splittocells .edui-icon {
    background-position: -800px -20px;
}
.edui-default  .edui-for-mergecells .edui-icon {
    background-position: -760px -20px;
}
.edui-default  .edui-for-deletetable .edui-icon {
    background-position: -620px -20px;
}
.edui-default  .edui-for-cleardoc .edui-icon {
    background-position: -520px 0;
}
.edui-default  .edui-for-fullscreen .edui-icon {
    background-position: -100px -20px;
}
.edui-default  .edui-for-anchor .edui-icon {
    background-position: -200px 0;
}
.edui-default  .edui-for-pagebreak .edui-icon {
    background-position: -460px -40px;
}
.edui-default  .edui-for-imagenone .edui-icon {
    background-position: -480px -40px;
}
.edui-default  .edui-for-imageleft .edui-icon {
    background-position: -500px -40px;
}
.edui-default  .edui-for-wordimage .edui-icon {
    background-position: -660px -40px;
}
.edui-default  .edui-for-imageright .edui-icon {
    background-position: -520px -40px;
}
.edui-default  .edui-for-imagecenter .edui-icon {
    background-position: -540px -40px;
}
.edui-default  .edui-for-indent .edui-icon {
    background-position: -400px 0;
}
.edui-default  .edui-for-outdent .edui-icon {
    background-position: -540px 0;
}
.edui-default  .edui-for-webapp .edui-icon {
    background-position: -601px -40px
}
.edui-default  .edui-for-table .edui-icon {
    background-position: -580px -20px;
}
.edui-default  .edui-for-edittable .edui-icon {
    background-position: -420px -40px;
}
.edui-default  .edui-for-template .edui-icon {
    background-position: -339px -40px;
}
.edui-default  .edui-for-delete .edui-icon {
    background-position: -360px -40px;
}
.edui-default  .edui-for-attachment .edui-icon {
    background-position: -620px -40px;
}
.edui-default  .edui-for-edittd .edui-icon {
    background-position: -700px -40px;
}
.edui-default  .edui-for-snapscreen .edui-icon {
    background-position: -581px -40px
}
.edui-default  .edui-for-scrawl .edui-icon {
    background-position: -801px -41px
}
.edui-default  .edui-for-background .edui-icon {
    background-position: -680px -40px;
}
.edui-default  .edui-for-music .edui-icon {
    background-position: -18px -40px
}
.edui-default  .edui-for-formula .edui-icon {
    background-position: -200px -40px
}
.edui-default  .edui-for-aligntd  .edui-icon {
    background-position: -236px -76px;
}
.edui-default  .edui-for-insertparagraphtrue  .edui-icon {
    background-position: -625px -76px;
}
.edui-default  .edui-for-insertparagraph  .edui-icon {
    background-position: -602px -76px;
}
.edui-default  .edui-for-insertcaption  .edui-icon {
    background-position: -336px -76px;
}
.edui-default  .edui-for-deletecaption  .edui-icon {
    background-position: -362px -76px;
}
.edui-default  .edui-for-inserttitle  .edui-icon {
    background-position: -286px -76px;
}
.edui-default  .edui-for-deletetitle  .edui-icon {
    background-position: -311px -76px;
}
.edui-default  .edui-for-aligntable  .edui-icon {
    background-position: -440px 0;
}
.edui-default  .edui-for-tablealignment-left  .edui-icon {
    background-position: -460px 0;
}
.edui-default  .edui-for-tablealignment-center  .edui-icon {
    background-position: -420px 0;
}
.edui-default  .edui-for-tablealignment-right  .edui-icon {
    background-position: -480px 0;
}
.edui-default  .edui-for-drafts  .edui-icon {
    background-position: -560px 0;
}
.edui-default  .edui-for-charts  .edui-icon {
    background: url( ../images/charts.png ) no-repeat 2px 3px!important;
}
.edui-default  .edui-for-inserttitlecol  .edui-icon {
    background-position: -673px -76px;
}
.edui-default  .edui-for-deletetitlecol  .edui-icon {
    background-position: -698px -76px;
}
.edui-default  .edui-for-simpleupload  .edui-icon {
    background-position: -380px 0px;
}
/*splitbutton*/
.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,
.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow {
    background: url(../images/icons.png) -741px 0;
    _background: url(../images/icons.gif) -741px 0;
    height: 20px;
    width: 9px;
}
.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,
.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body {
    padding: 1px;
}
.edui-default .edui-toolbar .edui-splitborder {
    width: 1px;
    height: 20px;
}
.edui-default .edui-toolbar .edui-state-hover .edui-splitborder {
    width: 1px;
    border-left: 0px solid #dcac6c;
}
.edui-default .edui-toolbar .edui-state-active .edui-splitborder {
    width: 0;
    border-left: 1px solid gray;
}
.edui-default .edui-toolbar .edui-state-opened .edui-splitborder {
    width: 1px;
    border: 0;
}
.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,
.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body {
    background-color: #fff5d4;
    border: 1px solid #dcac6c;
    padding: 0;
}
.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,
.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body {
    background-color: #FFE69F;
    border: 1px solid #DCAC6C;
    padding: 0;
}
.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,
.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body {
    background-color: #ffffff;
    border: 1px solid gray;
    padding: 0;
}
.edui-default .edui-state-disabled .edui-arrow {
    opacity: 0.3;
    _filter: alpha(opacity = 30);
}
.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,
.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body {
    background-color: white;
    border: 1px solid gray;
    padding: 0;
}
.edui-default .edui-for-insertorderedlist .edui-bordereraser,
.edui-default .edui-for-lineheight .edui-bordereraser,
.edui-default .edui-for-rowspacingtop .edui-bordereraser,
.edui-default .edui-for-rowspacingbottom .edui-bordereraser,
.edui-default .edui-for-insertunorderedlist .edui-bordereraser {
    background-color: white;
}
/* 解决嵌套导致的图标问题 */
.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,
.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,
.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,
.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,
.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon {
    /*background-position: 0 -40px;*/
    background-image: none  ;
}
/* 弹出菜单 */
.edui-default .edui-popup {
    z-index: 3000;
    background-color: #ffffff;
    width:auto;
    height:auto;
}
.edui-default .edui-popup .edui-shadow {
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
}
.edui-default .edui-popup-content {
    border:1px solid #ccc;
    border: 1px solid rgba(0, 0, 0, 0.2);
    *border-right-width: 2px;
    *border-bottom-width: 2px;
    -webkit-border-radius: 6px;
    -moz-border-radius: 6px;
    border-radius: 6px;
    -webkit-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);
    -moz-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);
    box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);
    -webkit-background-clip: padding-box;
    -moz-background-clip: padding;
    background-clip: padding-box;
    padding: 5px;
    background:#ffffff;
}
.edui-default .edui-popup .edui-bordereraser {
    background-color: white;
    height: 3px;
}
.edui-default .edui-menu .edui-bordereraser {
    height: 3px;
}
.edui-default .edui-anchor-topleft .edui-bordereraser {
    left: 1px;
    top: -2px;
}
.edui-default .edui-anchor-topright .edui-bordereraser {
    right: 1px;
    top: -2px;
}
.edui-default .edui-anchor-bottomleft .edui-bordereraser {
    left: 0;
    bottom: -6px;
    height: 7px;
    border-left: 1px solid gray;
    border-right: 1px solid gray;
}
.edui-default .edui-anchor-bottomright .edui-bordereraser {
    right: 0;
    bottom: -6px;
    height: 7px;
    border-left: 1px solid gray;
    border-right: 1px solid gray;
}
.edui-popup div{
    width:auto;
    height:auto;
}
.edui-default .edui-editor-messageholder {
    display: block;
    width: 150px;
    height: auto;
    border: 0;
    margin: 0;
    padding: 0;
    position: absolute;
    top: 28px;
    right: 3px;
}
.edui-default .edui-message{
    min-height: 10px;
    text-shadow: 0 1px 0 rgba(255,255,255,0.5);
    padding: 0;
    margin-bottom: 3px;
    position: relative;
}
.edui-default .edui-message-body{
    border-radius: 3px;
    padding: 8px 15px 8px 8px;
    color: #c09853;
    background-color: #fcf8e3;
    border: 1px solid #fbeed5;
}
.edui-default .edui-message-type-info{
    color: #3a87ad;
    background-color: #d9edf7;
    border-color: #bce8f1
}
.edui-default .edui-message-type-success{
    color: #468847;
    background-color: #dff0d8;
    border-color: #d6e9c6
}
.edui-default .edui-message-type-danger,
.edui-default .edui-message-type-error{
    color: #b94a48;
    background-color: #f2dede;
    border-color: #eed3d7
}
.edui-default .edui-message .edui-message-closer {
    display: block;
    width: 16px;
    height: 16px;
    line-height: 16px;
    position: absolute;
    top: 0;
    right: 0;
    padding: 0;
    cursor: pointer;
    background: transparent;
    border: 0;
    float: right;
    font-size: 20px;
    font-weight: bold;
    color: #999;
    text-shadow: 0 1px 0 #fff;
    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
}
.edui-default .edui-message .edui-message-content {
    font-size: 10pt;
    word-wrap: break-word;
    word-break: normal;
}
/* 弹出对话框按钮和对话框大小 */
.edui-default .edui-dialog {
    z-index: 2000;
    position: absolute;
}
.edui-dialog div{
    width:auto;
}
.edui-default .edui-dialog-wrap {
    margin-right: 6px;
    margin-bottom: 6px;
}
.edui-default .edui-dialog-fullscreen-flag {
    margin-right: 0;
    margin-bottom: 0;
}
.edui-default .edui-dialog-body {
    position: relative;
    padding:2px 0 0 2px;
    _zoom: 1;
}
.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body {
    padding: 0;
}
.edui-default .edui-dialog-shadow {
    position: absolute;
    z-index: -1;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background-color: #ffffff;
    border: 1px solid #ccc;
    border: 1px solid rgba(0, 0, 0, 0.2);
    *border-right-width: 2px;
    *border-bottom-width: 2px;
    -webkit-border-radius: 6px;
    -moz-border-radius: 6px;
    border-radius: 6px;
    -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
    -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
    box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
    -webkit-background-clip: padding-box;
    -moz-background-clip: padding;
    background-clip: padding-box;
}
.edui-default .edui-dialog-foot {
    background-color: white;
}
.edui-default .edui-dialog-titlebar {
    height: 26px;
    border-bottom: 1px solid #c6c6c6;
    background: url(../images/dialog-title-bg.png) repeat-x bottom;
    position: relative;
    cursor: move;
}
.edui-default .edui-dialog-caption {
    font-weight: bold;
    font-size: 12px;
    line-height: 26px;
    padding-left: 5px;
}
.edui-default .edui-dialog-draghandle {
    height: 26px;
}
.edui-default .edui-dialog-closebutton {
    position: absolute !important;
    right: 5px;
    top: 3px;
}
.edui-default .edui-dialog-closebutton .edui-button-body {
    height: 20px;
    width: 20px;
    cursor: pointer;
    background: url("../images/icons-all.gif") no-repeat 0 -59px;
}
.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body {
    background: url("../images/icons-all.gif") no-repeat 0 -89px;
}
.edui-default .edui-dialog-foot {
    height: 40px;
}
.edui-default .edui-dialog-buttons {
    position: absolute;
    right: 0;
}
.edui-default .edui-dialog-buttons .edui-button {
    margin-right: 10px;
}
.edui-default .edui-dialog-buttons .edui-button .edui-button-body {
    background: url("../images/icons-all.gif") no-repeat;
    height: 24px;
    width: 96px;
    font-size: 12px;
    line-height: 24px;
    text-align: center;
    cursor: default;
}
.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body {
    background: url("../images/icons-all.gif") no-repeat 0 -30px;
}
.edui-default .edui-dialog iframe {
    border: 0;
    padding: 0;
    margin: 0;
    vertical-align: top;
}
.edui-default .edui-dialog-modalmask {
    opacity: 0.3;
    filter: alpha(opacity = 30);
    background-color: #ccc;
    position: absolute;
    /*z-index: 1999;*/
}
.edui-default .edui-dialog-dragmask {
    position: absolute;
    /*z-index: 2001;*/
    background-color: transparent;
    cursor: move;
}
.edui-default .edui-dialog-content {
    position: relative;
}
.edui-default .dialogcontmask {
    cursor: move;
    visibility: hidden;
    display: block;
    position: absolute;
    width: 100%;
    height: 100%;
    opacity: 0;
    filter: alpha(opacity = 0);
}
/*link-dialog*/
.edui-default .edui-for-link .edui-dialog-content {
    width: 420px;
    height: 200px;
    overflow: hidden;
}
/*background-dialog*/
.edui-default .edui-for-background .edui-dialog-content {
    width: 440px;
    height: 280px;
    overflow: hidden;
}
/*template-dialog*/
.edui-default .edui-for-template .edui-dialog-content {
    width: 630px;
    height: 390px;
    overflow: hidden;
}
/*scrawl-dialog*/
.edui-default .edui-for-scrawl .edui-dialog-content {
    width: 515px;
    *width: 506px;
    height: 360px;
}
/*spechars-dialog*/
.edui-default .edui-for-spechars .edui-dialog-content {
    width: 620px;
    height: 500px;
    *width: 630px;
    *height: 570px;
}
/*image-dialog*/
.edui-default .edui-for-insertimage .edui-dialog-content {
    width: 650px;
    height: 400px;
    overflow: hidden;
}
/*webapp-dialog*/
.edui-default .edui-for-webapp .edui-dialog-content {
    width: 560px;
    _width: 565px;
    height: 450px;
    overflow: hidden;
}
/*image-insertframe*/
.edui-default .edui-for-insertframe .edui-dialog-content {
    width: 350px;
    height: 200px;
    overflow: hidden;
}
/*wordImage-dialog*/
.edui-default .edui-for-wordimage .edui-dialog-content {
    width: 620px;
    height: 380px;
    overflow: hidden;
}
/*attachment-dialog*/
.edui-default .edui-for-attachment .edui-dialog-content {
    width: 650px;
    height: 400px;
    overflow: hidden;
}
/*map-dialog*/
.edui-default .edui-for-map .edui-dialog-content {
    width: 550px;
    height: 400px;
}
/*gmap-dialog*/
.edui-default .edui-for-gmap .edui-dialog-content {
    width: 550px;
    height: 400px;
}
/*video-dialog*/
.edui-default .edui-for-insertvideo .edui-dialog-content {
    width: 590px;
    height: 390px;
}
/*anchor-dialog*/
.edui-default .edui-for-anchor .edui-dialog-content {
    width: 320px;
    height: 60px;
    overflow: hidden;
}
/*searchreplace-dialog*/
.edui-default .edui-for-searchreplace .edui-dialog-content {
    width: 400px;
    height: 220px;
}
/*help-dialog*/
.edui-default .edui-for-help .edui-dialog-content {
    width: 400px;
    height: 420px;
}
/*edittable-dialog*/
.edui-default .edui-for-edittable .edui-dialog-content {
    width: 540px;
    _width:590px;
    height: 335px;
}
/*edittip-dialog*/
.edui-default .edui-for-edittip .edui-dialog-content {
    width: 225px;
    height: 60px;
}
/*edittd-dialog*/
.edui-default .edui-for-edittd .edui-dialog-content {
    width: 240px;
    height: 50px;
}
/*snapscreen-dialog*/
.edui-default .edui-for-snapscreen .edui-dialog-content {
    width: 400px;
    height: 220px;
}
/*music-dialog*/
.edui-default .edui-for-music .edui-dialog-content {
    width: 515px;
    height: 360px;
}
/*段落弹出菜单*/
.edui-default .edui-for-paragraph .edui-listitem-label {
    font-family: Tahoma, Verdana, Arial, Helvetica;
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p {
    font-size: 22px;
    line-height: 27px;
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1 {
    font-weight: bolder;
    font-size: 32px;
    line-height: 36px;
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2 {
    font-weight: bolder;
    font-size: 27px;
    line-height: 29px;
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3 {
    font-weight: bolder;
    font-size: 19px;
    line-height: 23px;
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4 {
    font-weight: bolder;
    font-size: 16px;
    line-height: 19px
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5 {
    font-weight: bolder;
    font-size: 13px;
    line-height: 16px;
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6 {
    font-weight: bolder;
    font-size: 12px;
    line-height: 14px;
}
/* 表格弹出菜单 */
.edui-default .edui-for-inserttable .edui-splitborder {
    display: none
}
.edui-default .edui-for-inserttable  .edui-splitbutton-body .edui-arrow {
    width: 0
}
.edui-default .edui-toolbar .edui-for-inserttable  .edui-state-active .edui-splitborder{
    border-left: 1px solid transparent;
}
.edui-default .edui-tablepicker .edui-infoarea {
    height: 14px;
    line-height: 14px;
    font-size: 12px;
    width: 220px;
    margin-bottom: 3px;
    clear: both;
}
.edui-default .edui-tablepicker .edui-infoarea .edui-label {
    float: left;
}
.edui-default .edui-dialog-buttons .edui-label {
    line-height: 24px;
}
.edui-default .edui-tablepicker .edui-infoarea .edui-clickable {
    float: right;
}
.edui-default .edui-tablepicker .edui-pickarea {
    background: url("../images/unhighlighted.gif") repeat;
    height: 220px;
    width: 220px;
}
.edui-default .edui-tablepicker .edui-pickarea .edui-overlay {
    background: url("../images/highlighted.gif") repeat;
}
/* 颜色弹出菜单 */
.edui-default .edui-colorpicker-topbar {
    height: 27px;
    width: 200px;
    /*border-bottom: 1px gray dashed;*/
}
.edui-default .edui-colorpicker-preview {
    height: 20px;
    border: 1px inset black;
    margin-left: 1px;
    width: 128px;
    float: left;
}
.edui-default .edui-colorpicker-nocolor {
    float: right;
    margin-right: 1px;
    font-size: 12px;
    line-height: 14px;
    height: 14px;
    border: 1px solid #333;
    padding: 3px 5px;
    cursor: pointer;
}
.edui-default .edui-colorpicker-tablefirstrow {
    height: 30px;
}
.edui-default .edui-colorpicker-colorcell {
    width: 14px;
    height: 14px;
    display: block;
    margin: 0;
    cursor: pointer;
}
.edui-default .edui-colorpicker-colorcell:hover {
    width: 14px;
    height: 14px;
    margin: 0;
}
.edui-default .edui-colorpicker-advbtn{
    display: block;
    text-align: center;
    cursor: pointer;
    height:20px;
}
.arrow_down{
    background: white url('../images/arrow_down.png') no-repeat center;
}
.arrow_up{
    background: white url('../images/arrow_up.png') no-repeat center;
}
/*高级的样式*/
.edui-colorpicker-adv{
    position: relative;
    overflow: hidden;
    height: 180px;
    display: none;
}
.edui-colorpicker-plant, .edui-colorpicker-hue {
    border: solid 1px #666;
}
.edui-colorpicker-pad {
    width: 150px;
    height: 150px;
    left: 14px;
    top: 13px;
    position: absolute;
    background: red;
    overflow: hidden;
    cursor: crosshair;
}
.edui-colorpicker-cover{
    position: absolute;
    top: 0;
    left: 0;
    width: 150px;
    height: 150px;
    background: url("../images/tangram-colorpicker.png") -160px -200px;
}
.edui-colorpicker-padDot{
    position: absolute;
    top: 0;
    left: 0;
    width: 11px;
    height: 11px;
    overflow: hidden;
    background: url(../images/tangram-colorpicker.png) 0px -200px repeat-x;
    z-index: 1000;
}
.edui-colorpicker-sliderMain {
    position: absolute;
    left: 171px;
    top: 13px;
    width: 19px;
    height: 152px;
    background: url(../images/tangram-colorpicker.png) -179px -12px no-repeat;
}
.edui-colorpicker-slider {
    width: 100%;
    height: 100%;
    cursor: pointer;
}
.edui-colorpicker-thumb{
    position: absolute;
    top: 0;
    cursor: pointer;
    height: 3px;
    left: -1px;
    right: -1px;
    border: 1px solid black;
    background: white;
    opacity: .8;
}
/*自动排版弹出菜单*/
.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body {
    font-size: 12px;
    margin-bottom: 3px;
    clear: both;
}
.edui-default .edui-autotypesetpicker-body table {
    border-collapse: separate;
    border-spacing: 2px;
}
.edui-default .edui-autotypesetpicker-body td {
    font-size: 12px;
    word-wrap:break-word;
}
.edui-default .edui-autotypesetpicker-body td input {
    margin: 3px 3px 3px 4px;
    *margin: 1px 0 0 0;
}
/*自动排版弹出菜单*/
.edui-default .edui-cellalignpicker .edui-cellalignpicker-body {
    width: 70px;
    font-size: 12px;
    cursor: default;
}
.edui-default .edui-cellalignpicker-body table {
    border-collapse: separate;
    border-spacing: 0;
}
.edui-default .edui-cellalignpicker-body td{
    padding: 1px;
}
.edui-default .edui-cellalignpicker-body .edui-icon{
    height: 20px;
    width: 20px;
    padding: 1px;
    background-image: url(../images/table-cell-align.png);
}
.edui-default .edui-cellalignpicker-body .edui-left{
    background-position: 0 0;
}
.edui-default .edui-cellalignpicker-body .edui-center{
    background-position: -25px 0;
}
.edui-default .edui-cellalignpicker-body .edui-right{
    background-position: -51px 0;
}
.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{
    background-position: -73px 0;
}
.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{
    background-position: -98px 0;
}
.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{
    background-position: -124px 0;
}
.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left {
    background-position: -146px 0;
    background-color: #f1f4f5;
}
.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center {
    background-position: -245px 0;
}
.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right {
    background-position: -271px 0;
}
/*分隔线*/
.edui-default .edui-toolbar .edui-separator {
    width: 2px;
    height: 20px;
    margin: 2px 4px 2px 3px;
    background: url(../images/icons.png) -181px 0;
    background: url(../images/icons.gif) -181px 0 \9;
}
/*颜色按钮 */
.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump {
    position: absolute;
    overflow: hidden;
    bottom: 1px;
    left: 1px;
    width: 18px;
    height: 4px;
}
/*表情按钮及弹出菜单*/
/*去除了表情的下拉箭头*/
.edui-default .edui-for-emotion .edui-icon {
    background-position: -60px -20px;
}
.edui-default .edui-for-emotion .edui-popup-content iframe
{
    width: 514px;
    height: 380px;
    overflow: hidden;
}
.edui-default .edui-for-emotion .edui-popup-content
{
    position: relative;
    z-index: 555
}
.edui-default .edui-for-emotion .edui-splitborder {
    display: none
}
.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow
{
    width: 0
}
.edui-default .edui-toolbar .edui-for-emotion  .edui-state-active .edui-splitborder
{
    border-left: 1px solid transparent;
}
/*contextmenu*/
.edui-default .edui-hassubmenu .edui-arrow {
    height: 20px;
    width: 20px;
    float: right;
    background: url("../images/icons-all.gif") no-repeat 10px -233px;
}
.edui-default .edui-menu-body .edui-menuitem {
    padding: 1px;
}
.edui-default .edui-menuseparator {
    margin: 2px 0;
    height: 1px;
    overflow: hidden;
}
.edui-default .edui-menuseparator-inner {
    border-bottom: 1px solid #e2e3e3;
    margin-left: 29px;
    margin-right: 1px;
}
.edui-default .edui-menu-body .edui-state-hover {
    padding: 0 !important;
    background-color: #fff5d4;
    border: 1px solid #dcac6c;
}
/*弹出菜单*/
.edui-default .edui-shortcutmenu {
    padding: 2px;
    width: 190px;
    height: 50px;
    background-color: #fff;
    border: 1px solid #ccc;
    border-radius: 5px;
}
/*粘贴弹出菜单*/
.edui-default .edui-wordpastepop .edui-popup-content{
    border: none;
    padding: 0;
    width: 54px;
    height: 21px;
}
.edui-default  .edui-pasteicon {
    width: 100%;
    height: 100%;
    background-image: url('../images/wordpaste.png');
    background-position: 0 0;
}
.edui-default  .edui-pasteicon.edui-state-opened {
    background-position: 0 -34px;
}
.edui-default  .edui-pastecontainer {
    position: relative;
    visibility: hidden;
    width: 97px;
    background: #fff;
    border: 1px solid #ccc;
}
.edui-default  .edui-pastecontainer .edui-title {
    font-weight: bold;
    background: #F8F8FF;
    height: 25px;
    line-height: 25px;
    font-size: 12px;
    padding-left: 5px;
}
.edui-default  .edui-pastecontainer .edui-button {
    overflow: hidden;
    margin: 3px 0;
}
.edui-default  .edui-pastecontainer .edui-button .edui-richtxticon,
.edui-default  .edui-pastecontainer .edui-button .edui-tagicon,
.edui-default  .edui-pastecontainer .edui-button .edui-plaintxticon{
    float: left;
    cursor: pointer;
    width: 29px;
    height: 29px;
    margin-left: 5px;
    background-image: url('../images/wordpaste.png');
    background-repeat: no-repeat;
}
.edui-default  .edui-pastecontainer .edui-button .edui-richtxticon {
    margin-left: 0;
    background-position: -109px 0;
}
.edui-default  .edui-pastecontainer .edui-button .edui-tagicon {
    background-position: -148px 1px;
}
.edui-default  .edui-pastecontainer .edui-button .edui-plaintxticon {
    background-position: -72px 0;
}
.edui-default  .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon {
    background-position: -109px -34px;
}
.edui-default  .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{
    background-position: -148px -34px;
}
.edui-default  .edui-pastecontainer .edui-button  .edui-state-hover .edui-plaintxticon{
    background-position: -72px -34px;
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/css/ueditor.min.css
New file
@@ -0,0 +1,8 @@
/*!
 * UEditor
 * version: ueditor
 * build: Thu May 29 2014 16:47:49 GMT+0800 (中国标准时间)
 */
.edui-default .edui-box{border:0;padding:0;margin:0;overflow:hidden}.edui-default a.edui-box{display:block;text-decoration:none;color:#000}.edui-default a.edui-box:hover{text-decoration:none}.edui-default a.edui-box:active{text-decoration:none}.edui-default table.edui-box{border-collapse:collapse}.edui-default ul.edui-box{list-style-type:none}div.edui-box{position:relative;display:-moz-inline-box!important;display:inline-block!important;vertical-align:top}.edui-default .edui-clearfix{zoom:1}.edui-default .edui-clearfix:after{content:'\20';display:block;clear:both}* html div.edui-box{display:inline!important}:first-child+html div.edui-box{display:inline!important}.edui-default .edui-button-body,.edui-splitbutton-body,.edui-menubutton-body,.edui-combox-body{position:relative}.edui-default .edui-popup{position:absolute;-webkit-user-select:none;-moz-user-select:none}.edui-default .edui-popup .edui-shadow{position:absolute;z-index:-1}.edui-default .edui-popup .edui-bordereraser{position:absolute;overflow:hidden}.edui-default .edui-tablepicker .edui-canvas{position:relative}.edui-default .edui-tablepicker .edui-canvas .edui-overlay{position:absolute}.edui-default .edui-dialog-modalmask,.edui-dialog-dragmask{position:absolute;left:0;top:0;width:100%;height:100%}.edui-default .edui-toolbar{position:relative}.edui-default .edui-label{cursor:default}.edui-default span.edui-clickable{color:#00f;cursor:pointer;text-decoration:underline}.edui-default span.edui-unclickable{color:gray;cursor:default}.edui-default .edui-toolbar{cursor:default;-webkit-user-select:none;-moz-user-select:none;padding:1px;overflow:hidden;zoom:1;width:auto;height:auto}.edui-default .edui-toolbar .edui-button,.edui-default .edui-toolbar .edui-splitbutton,.edui-default .edui-toolbar .edui-menubutton,.edui-default .edui-toolbar .edui-combox{margin:1px}.edui-default .edui-editor{border:1px solid #d4d4d4;background-color:#fff;position:relative;overflow:visible;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.edui-editor div{width:auto;height:auto}.edui-default .edui-editor-toolbarbox{position:relative;zoom:1;-webkit-box-shadow:0 1px 4px rgba(204,204,204,.6);-moz-box-shadow:0 1px 4px rgba(204,204,204,.6);box-shadow:0 1px 4px rgba(204,204,204,.6);border-top-left-radius:2px;border-top-right-radius:2px}.edui-default .edui-editor-toolbarboxouter{border-bottom:1px solid #d4d4d4;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,.065);box-shadow:0 1px 4px rgba(0,0,0,.065)}.edui-default .edui-editor-toolbarboxinner{padding:2px}.edui-default .edui-editor-iframeholder{position:relative}.edui-default .edui-editor-bottomContainer{overflow:hidden}.edui-default .edui-editor-bottomContainer table{width:100%;height:0;overflow:hidden;border-spacing:0}.edui-default .edui-editor-bottomContainer td{white-space:nowrap;border-top:1px solid #ccc;line-height:20px;font-size:12px;font-family:Arial,Helvetica,Tahoma,Verdana,Sans-Serif}.edui-default .edui-editor-wordcount{text-align:right;margin-right:5px;color:#aaa}.edui-default .edui-editor-scale{width:12px}.edui-default .edui-editor-scale .edui-editor-icon{float:right;width:100%;height:12px;margin-top:10px;background:url(../images/scale.png) no-repeat;cursor:se-resize}.edui-default .edui-editor-breadcrumb{margin:2px 0 0 3px}.edui-default .edui-editor-breadcrumb span{cursor:pointer;text-decoration:underline;color:#00f}.edui-default .edui-toolbar .edui-for-fullscreen{float:right}.edui-default .edui-bubble .edui-popup-content{border:1px solid #DCAC6C;background-color:#fff6d9;padding:5px;font-size:10pt;font-family:"宋体"}.edui-default .edui-bubble .edui-shadow{}.edui-default .edui-editor-toolbarmsg{background-color:#FFF6D9;border-bottom:1px solid #ccc;position:absolute;bottom:-25px;left:0;z-index:1009;width:99.9%}.edui-default .edui-editor-toolbarmsg-upload{font-size:14px;color:#00f;width:100px;height:16px;line-height:16px;cursor:pointer;position:absolute;top:5px;left:350px}.edui-default .edui-editor-toolbarmsg-label{font-size:12px;line-height:16px;padding:4px}.edui-default .edui-editor-toolbarmsg-close{float:right;width:20px;height:16px;line-height:16px;cursor:pointer;color:red}.edui-default .edui-list .edui-bordereraser{display:none}.edui-default .edui-listitem{padding:1px;white-space:nowrap}.edui-default .edui-list .edui-state-hover{position:relative;background-color:#fff5d4;border:1px solid #dcac6c;padding:0}.edui-default .edui-for-fontfamily .edui-listitem-label{min-width:130px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-insertcode .edui-listitem-label{min-width:120px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-underline .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px;font-size:12px}.edui-default .edui-for-fontsize .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px}.edui-default .edui-for-paragraph .edui-listitem-label{min-width:200px;_width:200px;padding:2px 5px}.edui-default .edui-for-rowspacingtop .edui-listitem-label,.edui-default .edui-for-rowspacingbottom .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-lineheight .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-customstyle .edui-listitem-label{min-width:200px;_width:200px;width:200px!important;padding:2px 5px}.edui-default .edui-menu{z-index:3000}.edui-default .edui-menu .edui-popup-content{padding:3px}.edui-default .edui-menu-body{_width:150px;min-width:170px;background:url(../images/sparator_v.png) repeat-y 25px}.edui-default .edui-menuitem-body{}.edui-default .edui-menuitem{height:20px;cursor:default;vertical-align:top}.edui-default .edui-menuitem .edui-icon{width:20px!important;height:20px!important;background:url(../images/icons.png) 0 -4000px;background:url(../images/icons.gif) 0 -4000px\9}.edui-default .edui-menuitem .edui-label{font-size:12px;line-height:20px;height:20px;padding-left:10px}.edui-default .edui-state-checked .edui-menuitem-body{background:url(../images/icons-all.gif) no-repeat 6px -205px}.edui-default .edui-state-disabled .edui-menuitem-label{color:gray}.edui-default .edui-toolbar .edui-combox-body .edui-button-body{width:60px;font-size:12px;height:20px;line-height:20px;padding-left:5px;white-space:nowrap;margin:0 3px 0 0}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{background:url(../images/icons.png) -741px 0;_background:url(../images/icons.gif) -741px 0;height:20px;width:9px}.edui-default .edui-toolbar .edui-combox .edui-combox-body{border:1px solid #CCC;background-color:#fff;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-combox-body .edui-splitborder{display:none}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{border-left:1px solid #CCC}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body{background-color:#fff5d4;border:1px solid #dcac6c}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow{border-left:1px solid #dcac6c}.edui-default .edui-toolbar .edui-state-checked .edui-combox-body{background-color:#FFE69F;border:1px solid #DCAC6C}.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow{border-left:1px solid #DCAC6C}.edui-toolbar .edui-state-disabled .edui-combox-body{background-color:#F0F0EE;opacity:.3;filter:alpha(opacity=30)}.edui-toolbar .edui-state-opened .edui-combox-body{background-color:#fff;border:1px solid gray}.edui-default .edui-toolbar .edui-button .edui-icon,.edui-default .edui-toolbar .edui-menubutton .edui-icon,.edui-default .edui-toolbar .edui-splitbutton .edui-icon{height:20px!important;width:20px!important;background-image:url(../images/icons.png);background-image:url(../images/icons.gif) \9}.edui-default .edui-toolbar .edui-button .edui-button-wrap{padding:1px;position:relative}.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap{background-color:#fff5d4;padding:0;border:1px solid #dcac6c}.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap{background-color:#ffe69f;padding:0;border:1px solid #dcac6c;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap{background-color:#fff;padding:0;border:1px solid gray}.edui-default .edui-toolbar .edui-state-disabled .edui-label{color:#ccc}.edui-default .edui-toolbar .edui-state-disabled .edui-icon{opacity:.3;filter:alpha(opacity=30)}.edui-default .edui-for-undo .edui-icon{background-position:-160px 0}.edui-default .edui-for-redo .edui-icon{background-position:-100px 0}.edui-default .edui-for-bold .edui-icon{background-position:0 0}.edui-default .edui-for-italic .edui-icon{background-position:-60px 0}.edui-default .edui-for-fontborder .edui-icon{background-position:-160px -40px}.edui-default .edui-for-underline .edui-icon{background-position:-140px 0}.edui-default .edui-for-strikethrough .edui-icon{background-position:-120px 0}.edui-default .edui-for-subscript .edui-icon{background-position:-600px 0}.edui-default .edui-for-superscript .edui-icon{background-position:-620px 0}.edui-default .edui-for-blockquote .edui-icon{background-position:-220px 0}.edui-default .edui-for-forecolor .edui-icon{background-position:-720px 0}.edui-default .edui-for-backcolor .edui-icon{background-position:-760px 0}.edui-default .edui-for-inserttable .edui-icon{background-position:-580px -20px}.edui-default .edui-for-autotypeset .edui-icon{background-position:-640px -40px}.edui-default .edui-for-justifyleft .edui-icon{background-position:-460px 0}.edui-default .edui-for-justifycenter .edui-icon{background-position:-420px 0}.edui-default .edui-for-justifyright .edui-icon{background-position:-480px 0}.edui-default .edui-for-justifyjustify .edui-icon{background-position:-440px 0}.edui-default .edui-for-insertorderedlist .edui-icon{background-position:-80px 0}.edui-default .edui-for-insertunorderedlist .edui-icon{background-position:-20px 0}.edui-default .edui-for-lineheight .edui-icon{background-position:-725px -40px}.edui-default .edui-for-rowspacingbottom .edui-icon{background-position:-745px -40px}.edui-default .edui-for-rowspacingtop .edui-icon{background-position:-765px -40px}.edui-default .edui-for-horizontal .edui-icon{background-position:-360px 0}.edui-default .edui-for-link .edui-icon{background-position:-500px 0}.edui-default .edui-for-code .edui-icon{background-position:-440px -40px}.edui-default .edui-for-insertimage .edui-icon{background-position:-726px -77px}.edui-default .edui-for-insertframe .edui-icon{background-position:-240px -40px}.edui-default .edui-for-emoticon .edui-icon{background-position:-60px -20px}.edui-default .edui-for-spechars .edui-icon{background-position:-240px 0}.edui-default .edui-for-help .edui-icon{background-position:-340px 0}.edui-default .edui-for-print .edui-icon{background-position:-440px -20px}.edui-default .edui-for-preview .edui-icon{background-position:-420px -20px}.edui-default .edui-for-selectall .edui-icon{background-position:-400px -20px}.edui-default .edui-for-searchreplace .edui-icon{background-position:-520px -20px}.edui-default .edui-for-map .edui-icon{background-position:-40px -40px}.edui-default .edui-for-gmap .edui-icon{background-position:-260px -40px}.edui-default .edui-for-insertvideo .edui-icon{background-position:-320px -20px}.edui-default .edui-for-time .edui-icon{background-position:-160px -20px}.edui-default .edui-for-date .edui-icon{background-position:-140px -20px}.edui-default .edui-for-cut .edui-icon{background-position:-680px 0}.edui-default .edui-for-copy .edui-icon{background-position:-700px 0}.edui-default .edui-for-paste .edui-icon{background-position:-560px 0}.edui-default .edui-for-formatmatch .edui-icon{background-position:-40px 0}.edui-default .edui-for-pasteplain .edui-icon{background-position:-360px -20px}.edui-default .edui-for-directionalityltr .edui-icon{background-position:-20px -20px}.edui-default .edui-for-directionalityrtl .edui-icon{background-position:-40px -20px}.edui-default .edui-for-source .edui-icon{background-position:-261px -0px}.edui-default .edui-for-removeformat .edui-icon{background-position:-580px 0}.edui-default .edui-for-unlink .edui-icon{background-position:-640px 0}.edui-default .edui-for-touppercase .edui-icon{background-position:-786px 0}.edui-default .edui-for-tolowercase .edui-icon{background-position:-806px 0}.edui-default .edui-for-insertrow .edui-icon{background-position:-478px -76px}.edui-default .edui-for-insertrownext .edui-icon{background-position:-498px -76px}.edui-default .edui-for-insertcol .edui-icon{background-position:-455px -76px}.edui-default .edui-for-insertcolnext .edui-icon{background-position:-429px -76px}.edui-default .edui-for-mergeright .edui-icon{background-position:-60px -40px}.edui-default .edui-for-mergedown .edui-icon{background-position:-80px -40px}.edui-default .edui-for-splittorows .edui-icon{background-position:-100px -40px}.edui-default .edui-for-splittocols .edui-icon{background-position:-120px -40px}.edui-default .edui-for-insertparagraphbeforetable .edui-icon{background-position:-140px -40px}.edui-default .edui-for-deleterow .edui-icon{background-position:-660px -20px}.edui-default .edui-for-deletecol .edui-icon{background-position:-640px -20px}.edui-default .edui-for-splittocells .edui-icon{background-position:-800px -20px}.edui-default .edui-for-mergecells .edui-icon{background-position:-760px -20px}.edui-default .edui-for-deletetable .edui-icon{background-position:-620px -20px}.edui-default .edui-for-cleardoc .edui-icon{background-position:-520px 0}.edui-default .edui-for-fullscreen .edui-icon{background-position:-100px -20px}.edui-default .edui-for-anchor .edui-icon{background-position:-200px 0}.edui-default .edui-for-pagebreak .edui-icon{background-position:-460px -40px}.edui-default .edui-for-imagenone .edui-icon{background-position:-480px -40px}.edui-default .edui-for-imageleft .edui-icon{background-position:-500px -40px}.edui-default .edui-for-wordimage .edui-icon{background-position:-660px -40px}.edui-default .edui-for-imageright .edui-icon{background-position:-520px -40px}.edui-default .edui-for-imagecenter .edui-icon{background-position:-540px -40px}.edui-default .edui-for-indent .edui-icon{background-position:-400px 0}.edui-default .edui-for-outdent .edui-icon{background-position:-540px 0}.edui-default .edui-for-webapp .edui-icon{background-position:-601px -40px}.edui-default .edui-for-table .edui-icon{background-position:-580px -20px}.edui-default .edui-for-edittable .edui-icon{background-position:-420px -40px}.edui-default .edui-for-template .edui-icon{background-position:-339px -40px}.edui-default .edui-for-delete .edui-icon{background-position:-360px -40px}.edui-default .edui-for-attachment .edui-icon{background-position:-620px -40px}.edui-default .edui-for-edittd .edui-icon{background-position:-700px -40px}.edui-default .edui-for-snapscreen .edui-icon{background-position:-581px -40px}.edui-default .edui-for-scrawl .edui-icon{background-position:-801px -41px}.edui-default .edui-for-background .edui-icon{background-position:-680px -40px}.edui-default .edui-for-music .edui-icon{background-position:-18px -40px}.edui-default .edui-for-formula .edui-icon{background-position:-200px -40px}.edui-default .edui-for-aligntd .edui-icon{background-position:-236px -76px}.edui-default .edui-for-insertparagraphtrue .edui-icon{background-position:-625px -76px}.edui-default .edui-for-insertparagraph .edui-icon{background-position:-602px -76px}.edui-default .edui-for-insertcaption .edui-icon{background-position:-336px -76px}.edui-default .edui-for-deletecaption .edui-icon{background-position:-362px -76px}.edui-default .edui-for-inserttitle .edui-icon{background-position:-286px -76px}.edui-default .edui-for-deletetitle .edui-icon{background-position:-311px -76px}.edui-default .edui-for-aligntable .edui-icon{background-position:-440px 0}.edui-default .edui-for-tablealignment-left .edui-icon{background-position:-460px 0}.edui-default .edui-for-tablealignment-center .edui-icon{background-position:-420px 0}.edui-default .edui-for-tablealignment-right .edui-icon{background-position:-480px 0}.edui-default .edui-for-drafts .edui-icon{background-position:-560px 0}.edui-default .edui-for-charts .edui-icon{background:url( ../images/charts.png ) no-repeat 2px 3px!important}.edui-default .edui-for-inserttitlecol .edui-icon{background-position:-673px -76px}.edui-default .edui-for-deletetitlecol .edui-icon{background-position:-698px -76px}.edui-default .edui-for-simpleupload .edui-icon{background-position:-380px 0}.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow{background:url(../images/icons.png) -741px 0;_background:url(../images/icons.gif) -741px 0;height:20px;width:9px}.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body{padding:1px}.edui-default .edui-toolbar .edui-splitborder{width:1px;height:20px}.edui-default .edui-toolbar .edui-state-hover .edui-splitborder{width:1px;border-left:0 solid #dcac6c}.edui-default .edui-toolbar .edui-state-active .edui-splitborder{width:0;border-left:1px solid gray}.edui-default .edui-toolbar .edui-state-opened .edui-splitborder{width:1px;border:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body{background-color:#fff5d4;border:1px solid #dcac6c;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body{background-color:#FFE69F;border:1px solid #DCAC6C;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body{background-color:#fff;border:1px solid gray;padding:0}.edui-default .edui-state-disabled .edui-arrow{opacity:.3;_filter:alpha(opacity=30)}.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body{background-color:#fff;border:1px solid gray;padding:0}.edui-default .edui-for-insertorderedlist .edui-bordereraser,.edui-default .edui-for-lineheight .edui-bordereraser,.edui-default .edui-for-rowspacingtop .edui-bordereraser,.edui-default .edui-for-rowspacingbottom .edui-bordereraser,.edui-default .edui-for-insertunorderedlist .edui-bordereraser{background-color:#fff}.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon{background-image:none}.edui-default .edui-popup{z-index:3000;background-color:#fff;width:auto;height:auto}.edui-default .edui-popup .edui-shadow{left:0;top:0;width:100%;height:100%}.edui-default .edui-popup-content{border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 4px rgba(0,0,0,.2);-moz-box-shadow:0 3px 4px rgba(0,0,0,.2);box-shadow:0 3px 4px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;padding:5px;background:#fff}.edui-default .edui-popup .edui-bordereraser{background-color:#fff;height:3px}.edui-default .edui-menu .edui-bordereraser{height:3px}.edui-default .edui-anchor-topleft .edui-bordereraser{left:1px;top:-2px}.edui-default .edui-anchor-topright .edui-bordereraser{right:1px;top:-2px}.edui-default .edui-anchor-bottomleft .edui-bordereraser{left:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-default .edui-anchor-bottomright .edui-bordereraser{right:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-popup div{width:auto;height:auto}.edui-default .edui-editor-messageholder{display:block;width:150px;height:auto;border:0;margin:0;padding:0;position:absolute;top:28px;right:3px}.edui-default .edui-message{min-height:10px;text-shadow:0 1px 0 rgba(255,255,255,.5);padding:0;margin-bottom:3px;position:relative}.edui-default .edui-message-body{border-radius:3px;padding:8px 15px 8px 8px;color:#c09853;background-color:#fcf8e3;border:1px solid #fbeed5}.edui-default .edui-message-type-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.edui-default .edui-message-type-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.edui-default .edui-message-type-danger,.edui-default .edui-message-type-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.edui-default .edui-message .edui-message-closer{display:block;width:16px;height:16px;line-height:16px;position:absolute;top:0;right:0;padding:0;cursor:pointer;background:transparent;border:0;float:right;font-size:20px;font-weight:700;color:#999;text-shadow:0 1px 0 #fff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.edui-default .edui-message .edui-message-content{font-size:10pt;word-wrap:break-word;word-break:normal}.edui-default .edui-dialog{z-index:2000;position:absolute}.edui-dialog div{width:auto}.edui-default .edui-dialog-wrap{margin-right:6px;margin-bottom:6px}.edui-default .edui-dialog-fullscreen-flag{margin-right:0;margin-bottom:0}.edui-default .edui-dialog-body{position:relative;padding:2px 0 0 2px;_zoom:1}.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body{padding:0}.edui-default .edui-dialog-shadow{position:absolute;z-index:-1;left:0;top:0;width:100%;height:100%;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.edui-default .edui-dialog-foot{background-color:#fff}.edui-default .edui-dialog-titlebar{height:26px;border-bottom:1px solid #c6c6c6;background:url(../images/dialog-title-bg.png) repeat-x bottom;position:relative;cursor:move}.edui-default .edui-dialog-caption{font-weight:700;font-size:12px;line-height:26px;padding-left:5px}.edui-default .edui-dialog-draghandle{height:26px}.edui-default .edui-dialog-closebutton{position:absolute!important;right:5px;top:3px}.edui-default .edui-dialog-closebutton .edui-button-body{height:20px;width:20px;cursor:pointer;background:url(../images/icons-all.gif) no-repeat 0 -59px}.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body{background:url(../images/icons-all.gif) no-repeat 0 -89px}.edui-default .edui-dialog-foot{height:40px}.edui-default .edui-dialog-buttons{position:absolute;right:0}.edui-default .edui-dialog-buttons .edui-button{margin-right:10px}.edui-default .edui-dialog-buttons .edui-button .edui-button-body{background:url(../images/icons-all.gif) no-repeat;height:24px;width:96px;font-size:12px;line-height:24px;text-align:center;cursor:default}.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body{background:url(../images/icons-all.gif) no-repeat 0 -30px}.edui-default .edui-dialog iframe{border:0;padding:0;margin:0;vertical-align:top}.edui-default .edui-dialog-modalmask{opacity:.3;filter:alpha(opacity=30);background-color:#ccc;position:absolute}.edui-default .edui-dialog-dragmask{position:absolute;background-color:transparent;cursor:move}.edui-default .edui-dialog-content{position:relative}.edui-default .dialogcontmask{cursor:move;visibility:hidden;display:block;position:absolute;width:100%;height:100%;opacity:0;filter:alpha(opacity=0)}.edui-default .edui-for-link .edui-dialog-content{width:420px;height:200px;overflow:hidden}.edui-default .edui-for-background .edui-dialog-content{width:440px;height:280px;overflow:hidden}.edui-default .edui-for-template .edui-dialog-content{width:630px;height:390px;overflow:hidden}.edui-default .edui-for-scrawl .edui-dialog-content{width:515px;*width:506px;height:360px}.edui-default .edui-for-spechars .edui-dialog-content{width:620px;height:500px;*width:630px;*height:570px}.edui-default .edui-for-insertimage .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-webapp .edui-dialog-content{width:560px;_width:565px;height:450px;overflow:hidden}.edui-default .edui-for-insertframe .edui-dialog-content{width:350px;height:200px;overflow:hidden}.edui-default .edui-for-wordimage .edui-dialog-content{width:620px;height:380px;overflow:hidden}.edui-default .edui-for-attachment .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-map .edui-dialog-content{width:550px;height:400px}.edui-default .edui-for-gmap .edui-dialog-content{width:550px;height:400px}.edui-default .edui-for-insertvideo .edui-dialog-content{width:590px;height:390px}.edui-default .edui-for-anchor .edui-dialog-content{width:320px;height:60px;overflow:hidden}.edui-default .edui-for-searchreplace .edui-dialog-content{width:400px;height:220px}.edui-default .edui-for-help .edui-dialog-content{width:400px;height:420px}.edui-default .edui-for-edittable .edui-dialog-content{width:540px;_width:590px;height:335px}.edui-default .edui-for-edittip .edui-dialog-content{width:225px;height:60px}.edui-default .edui-for-edittd .edui-dialog-content{width:240px;height:50px}.edui-default .edui-for-snapscreen .edui-dialog-content{width:400px;height:220px}.edui-default .edui-for-music .edui-dialog-content{width:515px;height:360px}.edui-default .edui-for-paragraph .edui-listitem-label{font-family:Tahoma,Verdana,Arial,Helvetica}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p{font-size:22px;line-height:27px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1{font-weight:bolder;font-size:32px;line-height:36px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2{font-weight:bolder;font-size:27px;line-height:29px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3{font-weight:bolder;font-size:19px;line-height:23px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4{font-weight:bolder;font-size:16px;line-height:19px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5{font-weight:bolder;font-size:13px;line-height:16px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6{font-weight:bolder;font-size:12px;line-height:14px}.edui-default .edui-for-inserttable .edui-splitborder{display:none}.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-tablepicker .edui-infoarea{height:14px;line-height:14px;font-size:12px;width:220px;margin-bottom:3px;clear:both}.edui-default .edui-tablepicker .edui-infoarea .edui-label{float:left}.edui-default .edui-dialog-buttons .edui-label{line-height:24px}.edui-default .edui-tablepicker .edui-infoarea .edui-clickable{float:right}.edui-default .edui-tablepicker .edui-pickarea{background:url(../images/unhighlighted.gif) repeat;height:220px;width:220px}.edui-default .edui-tablepicker .edui-pickarea .edui-overlay{background:url(../images/highlighted.gif) repeat}.edui-default .edui-colorpicker-topbar{height:27px;width:200px}.edui-default .edui-colorpicker-preview{height:20px;border:1px inset #000;margin-left:1px;width:128px;float:left}.edui-default .edui-colorpicker-nocolor{float:right;margin-right:1px;font-size:12px;line-height:14px;height:14px;border:1px solid #333;padding:3px 5px;cursor:pointer}.edui-default .edui-colorpicker-tablefirstrow{height:30px}.edui-default .edui-colorpicker-colorcell{width:14px;height:14px;display:block;margin:0;cursor:pointer}.edui-default .edui-colorpicker-colorcell:hover{width:14px;height:14px;margin:0}.edui-default .edui-colorpicker-advbtn{display:block;text-align:center;cursor:pointer;height:20px}.arrow_down{background:#fff url(../images/arrow_down.png) no-repeat center}.arrow_up{background:#fff url(../images/arrow_up.png) no-repeat center}.edui-colorpicker-adv{position:relative;overflow:hidden;height:180px;display:none}.edui-colorpicker-plant,.edui-colorpicker-hue{border:solid 1px #666}.edui-colorpicker-pad{width:150px;height:150px;left:14px;top:13px;position:absolute;background:red;overflow:hidden;cursor:crosshair}.edui-colorpicker-cover{position:absolute;top:0;left:0;width:150px;height:150px;background:url(../images/tangram-colorpicker.png) -160px -200px}.edui-colorpicker-padDot{position:absolute;top:0;left:0;width:11px;height:11px;overflow:hidden;background:url(../images/tangram-colorpicker.png) 0 -200px repeat-x;z-index:1000}.edui-colorpicker-sliderMain{position:absolute;left:171px;top:13px;width:19px;height:152px;background:url(../images/tangram-colorpicker.png) -179px -12px no-repeat}.edui-colorpicker-slider{width:100%;height:100%;cursor:pointer}.edui-colorpicker-thumb{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:#fff;opacity:.8}.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body{font-size:12px;margin-bottom:3px;clear:both}.edui-default .edui-autotypesetpicker-body table{border-collapse:separate;border-spacing:2px}.edui-default .edui-autotypesetpicker-body td{font-size:12px;word-wrap:break-word}.edui-default .edui-autotypesetpicker-body td input{margin:3px 3px 3px 4px;*margin:1px 0 0}.edui-default .edui-cellalignpicker .edui-cellalignpicker-body{width:70px;font-size:12px;cursor:default}.edui-default .edui-cellalignpicker-body table{border-collapse:separate;border-spacing:0}.edui-default .edui-cellalignpicker-body td{padding:1px}.edui-default .edui-cellalignpicker-body .edui-icon{height:20px;width:20px;padding:1px;background-image:url(../images/table-cell-align.png)}.edui-default .edui-cellalignpicker-body .edui-left{background-position:0 0}.edui-default .edui-cellalignpicker-body .edui-center{background-position:-25px 0}.edui-default .edui-cellalignpicker-body .edui-right{background-position:-51px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{background-position:-73px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{background-position:-98px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{background-position:-124px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left{background-position:-146px 0;background-color:#f1f4f5}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center{background-position:-245px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right{background-position:-271px 0}.edui-default .edui-toolbar .edui-separator{width:2px;height:20px;margin:2px 4px 2px 3px;background:url(../images/icons.png) -181px 0;background:url(../images/icons.gif) -181px 0 \9}.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump{position:absolute;overflow:hidden;bottom:1px;left:1px;width:18px;height:4px}.edui-default .edui-for-emotion .edui-icon{background-position:-60px -20px}.edui-default .edui-for-emotion .edui-popup-content iframe{width:514px;height:380px;overflow:hidden}.edui-default .edui-for-emotion .edui-popup-content{position:relative;z-index:555}.edui-default .edui-for-emotion .edui-splitborder{display:none}.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-hassubmenu .edui-arrow{height:20px;width:20px;float:right;background:url(../images/icons-all.gif) no-repeat 10px -233px}.edui-default .edui-menu-body .edui-menuitem{padding:1px}.edui-default .edui-menuseparator{margin:2px 0;height:1px;overflow:hidden}.edui-default .edui-menuseparator-inner{border-bottom:1px solid #e2e3e3;margin-left:29px;margin-right:1px}.edui-default .edui-menu-body .edui-state-hover{padding:0!important;background-color:#fff5d4;border:1px solid #dcac6c}.edui-default .edui-shortcutmenu{padding:2px;width:190px;height:50px;background-color:#fff;border:1px solid #ccc;border-radius:5px}.edui-default .edui-wordpastepop .edui-popup-content{border:0;padding:0;width:54px;height:21px}.edui-default .edui-pasteicon{width:100%;height:100%;background-image:url(../images/wordpaste.png);background-position:0 0}.edui-default .edui-pasteicon.edui-state-opened{background-position:0 -34px}.edui-default .edui-pastecontainer{position:relative;visibility:hidden;width:97px;background:#fff;border:1px solid #ccc}.edui-default .edui-pastecontainer .edui-title{font-weight:700;background:#F8F8FF;height:25px;line-height:25px;font-size:12px;padding-left:5px}.edui-default .edui-pastecontainer .edui-button{overflow:hidden;margin:3px 0}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon,.edui-default .edui-pastecontainer .edui-button .edui-tagicon,.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{float:left;cursor:pointer;width:29px;height:29px;margin-left:5px;background-image:url(../images/wordpaste.png);background-repeat:no-repeat}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon{margin-left:0;background-position:-109px 0}.edui-default .edui-pastecontainer .edui-button .edui-tagicon{background-position:-148px 1px}.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{background-position:-72px 0}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon{background-position:-109px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{background-position:-148px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon{background-position:-72px -34px}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/dialogbase.css
New file
@@ -0,0 +1,100 @@
/*弹出对话框页面样式组件
*/
/*reset
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
    margin: 0;
    padding: 0;
    outline: 0;
    font-size: 100%;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
ins {
    text-decoration: none;
}
del {
    text-decoration: line-through;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}
/*module
*/
body {
    background-color: #fff;
    font: 12px/1.5 sans-serif, "宋体", "Arial Narrow", HELVETICA;
    color: #646464;
}
/*tab*/
.tabhead {
    position: relative;
    z-index: 10;
}
.tabhead span {
    display: inline-block;
    padding: 0 5px;
    height: 30px;
    border: 1px solid #ccc;
    background: url("images/dialog-title-bg.png") repeat-x;
    text-align: center;
    line-height: 30px;
    cursor: pointer;
    *margin-right: 5px;
}
.tabhead span.focus {
    height: 31px;
    border-bottom: none;
    background: #fff;
}
.tabbody {
    position: relative;
    top: -1px;
    margin: 0 auto;
    border: 1px solid #ccc;
}
/*button*/
a.button {
    display: block;
    text-align: center;
    line-height: 24px;
    text-decoration: none;
    height: 24px;
    width: 95px;
    border: 0;
    color: #838383;
    background: url(../../themes/default/images/icons-all.gif) no-repeat;
}
a.button:hover {
    background-position: 0 -30px;
}
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/anchor.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/arrow.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/arrow_down.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/arrow_up.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/button-bg.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/cancelbutton.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/charts.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/cursor_h.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/cursor_h.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/cursor_v.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/cursor_v.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/dialog-title-bg.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/filescan.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/highlighted.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/icons-all.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/icons.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/icons.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/loaderror.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/loading.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/lock.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/neweditor-tab-bg.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/pagebreak.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/scale.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/sortable.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/spacer.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/sparator_v.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/table-cell-align.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/tangram-colorpicker.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/toolbar_bg.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/unhighlighted.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/upload.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/videologo.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/word.gif
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/default/images/wordpaste.png
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/themes/iframe.css
New file
@@ -0,0 +1 @@
/*可以在这里添加你自己的css*/
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/SyntaxHighlighter/shCore.js
New file
@@ -0,0 +1,3655 @@
// XRegExp 1.5.1
// (c) 2007-2012 Steven Levithan
// MIT License
// <http://xregexp.com>
// Provides an augmented, extensible, cross-browser implementation of regular expressions,
// including support for additional syntax, flags, and methods
var XRegExp;
if (XRegExp) {
    // Avoid running twice, since that would break references to native globals
    throw Error("can't load XRegExp twice in the same frame");
}
// Run within an anonymous function to protect variables and avoid new globals
(function (undefined) {
    //---------------------------------
    //  Constructor
    //---------------------------------
    // Accepts a pattern and flags; returns a new, extended `RegExp` object. Differs from a native
    // regular expression in that additional syntax and flags are supported and cross-browser
    // syntax inconsistencies are ameliorated. `XRegExp(/regex/)` clones an existing regex and
    // converts to type XRegExp
    XRegExp = function (pattern, flags) {
        var output = [],
            currScope = XRegExp.OUTSIDE_CLASS,
            pos = 0,
            context, tokenResult, match, chr, regex;
        if (XRegExp.isRegExp(pattern)) {
            if (flags !== undefined)
                throw TypeError("can't supply flags when constructing one RegExp from another");
            return clone(pattern);
        }
        // Tokens become part of the regex construction process, so protect against infinite
        // recursion when an XRegExp is constructed within a token handler or trigger
        if (isInsideConstructor)
            throw Error("can't call the XRegExp constructor within token definition functions");
        flags = flags || "";
        context = { // `this` object for custom tokens
            hasNamedCapture: false,
            captureNames: [],
            hasFlag: function (flag) {return flags.indexOf(flag) > -1;},
            setFlag: function (flag) {flags += flag;}
        };
        while (pos < pattern.length) {
            // Check for custom tokens at the current position
            tokenResult = runTokens(pattern, pos, currScope, context);
            if (tokenResult) {
                output.push(tokenResult.output);
                pos += (tokenResult.match[0].length || 1);
            } else {
                // Check for native multicharacter metasequences (excluding character classes) at
                // the current position
                if (match = nativ.exec.call(nativeTokens[currScope], pattern.slice(pos))) {
                    output.push(match[0]);
                    pos += match[0].length;
                } else {
                    chr = pattern.charAt(pos);
                    if (chr === "[")
                        currScope = XRegExp.INSIDE_CLASS;
                    else if (chr === "]")
                        currScope = XRegExp.OUTSIDE_CLASS;
                    // Advance position one character
                    output.push(chr);
                    pos++;
                }
            }
        }
        regex = RegExp(output.join(""), nativ.replace.call(flags, flagClip, ""));
        regex._xregexp = {
            source: pattern,
            captureNames: context.hasNamedCapture ? context.captureNames : null
        };
        return regex;
    };
    //---------------------------------
    //  Public properties
    //---------------------------------
    XRegExp.version = "1.5.1";
    // Token scope bitflags
    XRegExp.INSIDE_CLASS = 1;
    XRegExp.OUTSIDE_CLASS = 2;
    //---------------------------------
    //  Private variables
    //---------------------------------
    var replacementToken = /\$(?:(\d\d?|[$&`'])|{([$\w]+)})/g,
        flagClip = /[^gimy]+|([\s\S])(?=[\s\S]*\1)/g, // Nonnative and duplicate flags
        quantifier = /^(?:[?*+]|{\d+(?:,\d*)?})\??/,
        isInsideConstructor = false,
        tokens = [],
    // Copy native globals for reference ("native" is an ES3 reserved keyword)
        nativ = {
            exec: RegExp.prototype.exec,
            test: RegExp.prototype.test,
            match: String.prototype.match,
            replace: String.prototype.replace,
            split: String.prototype.split
        },
        compliantExecNpcg = nativ.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups
        compliantLastIndexIncrement = function () {
            var x = /^/g;
            nativ.test.call(x, "");
            return !x.lastIndex;
        }(),
        hasNativeY = RegExp.prototype.sticky !== undefined,
        nativeTokens = {};
    // `nativeTokens` match native multicharacter metasequences only (including deprecated octals,
    // excluding character classes)
    nativeTokens[XRegExp.INSIDE_CLASS] = /^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/;
    nativeTokens[XRegExp.OUTSIDE_CLASS] = /^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/;
    //---------------------------------
    //  Public methods
    //---------------------------------
    // Lets you extend or change XRegExp syntax and create custom flags. This is used internally by
    // the XRegExp library and can be used to create XRegExp plugins. This function is intended for
    // users with advanced knowledge of JavaScript's regular expression syntax and behavior. It can
    // be disabled by `XRegExp.freezeTokens`
    XRegExp.addToken = function (regex, handler, scope, trigger) {
        tokens.push({
            pattern: clone(regex, "g" + (hasNativeY ? "y" : "")),
            handler: handler,
            scope: scope || XRegExp.OUTSIDE_CLASS,
            trigger: trigger || null
        });
    };
    // Accepts a pattern and flags; returns an extended `RegExp` object. If the pattern and flag
    // combination has previously been cached, the cached copy is returned; otherwise the newly
    // created regex is cached
    XRegExp.cache = function (pattern, flags) {
        var key = pattern + "/" + (flags || "");
        return XRegExp.cache[key] || (XRegExp.cache[key] = XRegExp(pattern, flags));
    };
    // Accepts a `RegExp` instance; returns a copy with the `/g` flag set. The copy has a fresh
    // `lastIndex` (set to zero). If you want to copy a regex without forcing the `global`
    // property, use `XRegExp(regex)`. Do not use `RegExp(regex)` because it will not preserve
    // special properties required for named capture
    XRegExp.copyAsGlobal = function (regex) {
        return clone(regex, "g");
    };
    // Accepts a string; returns the string with regex metacharacters escaped. The returned string
    // can safely be used at any point within a regex to match the provided literal string. Escaped
    // characters are [ ] { } ( ) * + ? - . , \ ^ $ | # and whitespace
    XRegExp.escape = function (str) {
        return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
    };
    // Accepts a string to search, regex to search with, position to start the search within the
    // string (default: 0), and an optional Boolean indicating whether matches must start at-or-
    // after the position or at the specified position only. This function ignores the `lastIndex`
    // of the provided regex in its own handling, but updates the property for compatibility
    XRegExp.execAt = function (str, regex, pos, anchored) {
        var r2 = clone(regex, "g" + ((anchored && hasNativeY) ? "y" : "")),
            match;
        r2.lastIndex = pos = pos || 0;
        match = r2.exec(str); // Run the altered `exec` (required for `lastIndex` fix, etc.)
        if (anchored && match && match.index !== pos)
            match = null;
        if (regex.global)
            regex.lastIndex = match ? r2.lastIndex : 0;
        return match;
    };
    // Breaks the unrestorable link to XRegExp's private list of tokens, thereby preventing
    // syntax and flag changes. Should be run after XRegExp and any plugins are loaded
    XRegExp.freezeTokens = function () {
        XRegExp.addToken = function () {
            throw Error("can't run addToken after freezeTokens");
        };
    };
    // Accepts any value; returns a Boolean indicating whether the argument is a `RegExp` object.
    // Note that this is also `true` for regex literals and regexes created by the `XRegExp`
    // constructor. This works correctly for variables created in another frame, when `instanceof`
    // and `constructor` checks would fail to work as intended
    XRegExp.isRegExp = function (o) {
        return Object.prototype.toString.call(o) === "[object RegExp]";
    };
    // Executes `callback` once per match within `str`. Provides a simpler and cleaner way to
    // iterate over regex matches compared to the traditional approaches of subverting
    // `String.prototype.replace` or repeatedly calling `exec` within a `while` loop
    XRegExp.iterate = function (str, regex, callback, context) {
        var r2 = clone(regex, "g"),
            i = -1, match;
        while (match = r2.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.)
            if (regex.global)
                regex.lastIndex = r2.lastIndex; // Doing this to follow expectations if `lastIndex` is checked within `callback`
            callback.call(context, match, ++i, str, regex);
            if (r2.lastIndex === match.index)
                r2.lastIndex++;
        }
        if (regex.global)
            regex.lastIndex = 0;
    };
    // Accepts a string and an array of regexes; returns the result of using each successive regex
    // to search within the matches of the previous regex. The array of regexes can also contain
    // objects with `regex` and `backref` properties, in which case the named or numbered back-
    // references specified are passed forward to the next regex or returned. E.g.:
    // var xregexpImgFileNames = XRegExp.matchChain(html, [
    //     {regex: /<img\b([^>]+)>/i, backref: 1}, // <img> tag attributes
    //     {regex: XRegExp('(?ix) \\s src=" (?<src> [^"]+ )'), backref: "src"}, // src attribute values
    //     {regex: XRegExp("^http://xregexp\\.com(/[^#?]+)", "i"), backref: 1}, // xregexp.com paths
    //     /[^\/]+$/ // filenames (strip directory paths)
    // ]);
    XRegExp.matchChain = function (str, chain) {
        return function recurseChain (values, level) {
            var item = chain[level].regex ? chain[level] : {regex: chain[level]},
                regex = clone(item.regex, "g"),
                matches = [], i;
            for (i = 0; i < values.length; i++) {
                XRegExp.iterate(values[i], regex, function (match) {
                    matches.push(item.backref ? (match[item.backref] || "") : match[0]);
                });
            }
            return ((level === chain.length - 1) || !matches.length) ?
                matches : recurseChain(matches, level + 1);
        }([str], 0);
    };
    //---------------------------------
    //  New RegExp prototype methods
    //---------------------------------
    // Accepts a context object and arguments array; returns the result of calling `exec` with the
    // first value in the arguments array. the context is ignored but is accepted for congruity
    // with `Function.prototype.apply`
    RegExp.prototype.apply = function (context, args) {
        return this.exec(args[0]);
    };
    // Accepts a context object and string; returns the result of calling `exec` with the provided
    // string. the context is ignored but is accepted for congruity with `Function.prototype.call`
    RegExp.prototype.call = function (context, str) {
        return this.exec(str);
    };
    //---------------------------------
    //  Overriden native methods
    //---------------------------------
    // Adds named capture support (with backreferences returned as `result.name`), and fixes two
    // cross-browser issues per ES3:
    // - Captured values for nonparticipating capturing groups should be returned as `undefined`,
    //   rather than the empty string.
    // - `lastIndex` should not be incremented after zero-length matches.
    RegExp.prototype.exec = function (str) {
        var match, name, r2, origLastIndex;
        if (!this.global)
            origLastIndex = this.lastIndex;
        match = nativ.exec.apply(this, arguments);
        if (match) {
            // Fix browsers whose `exec` methods don't consistently return `undefined` for
            // nonparticipating capturing groups
            if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) {
                r2 = RegExp(this.source, nativ.replace.call(getNativeFlags(this), "g", ""));
                // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed
                // matching due to characters outside the match
                nativ.replace.call((str + "").slice(match.index), r2, function () {
                    for (var i = 1; i < arguments.length - 2; i++) {
                        if (arguments[i] === undefined)
                            match[i] = undefined;
                    }
                });
            }
            // Attach named capture properties
            if (this._xregexp && this._xregexp.captureNames) {
                for (var i = 1; i < match.length; i++) {
                    name = this._xregexp.captureNames[i - 1];
                    if (name)
                        match[name] = match[i];
                }
            }
            // Fix browsers that increment `lastIndex` after zero-length matches
            if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))
                this.lastIndex--;
        }
        if (!this.global)
            this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)
        return match;
    };
    // Fix browser bugs in native method
    RegExp.prototype.test = function (str) {
        // Use the native `exec` to skip some processing overhead, even though the altered
        // `exec` would take care of the `lastIndex` fixes
        var match, origLastIndex;
        if (!this.global)
            origLastIndex = this.lastIndex;
        match = nativ.exec.call(this, str);
        // Fix browsers that increment `lastIndex` after zero-length matches
        if (match && !compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))
            this.lastIndex--;
        if (!this.global)
            this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)
        return !!match;
    };
    // Adds named capture support and fixes browser bugs in native method
    String.prototype.match = function (regex) {
        if (!XRegExp.isRegExp(regex))
            regex = RegExp(regex); // Native `RegExp`
        if (regex.global) {
            var result = nativ.match.apply(this, arguments);
            regex.lastIndex = 0; // Fix IE bug
            return result;
        }
        return regex.exec(this); // Run the altered `exec`
    };
    // Adds support for `${n}` tokens for named and numbered backreferences in replacement text,
    // and provides named backreferences to replacement functions as `arguments[0].name`. Also
    // fixes cross-browser differences in replacement text syntax when performing a replacement
    // using a nonregex search value, and the value of replacement regexes' `lastIndex` property
    // during replacement iterations. Note that this doesn't support SpiderMonkey's proprietary
    // third (`flags`) parameter
    String.prototype.replace = function (search, replacement) {
        var isRegex = XRegExp.isRegExp(search),
            captureNames, result, str, origLastIndex;
        // There are too many combinations of search/replacement types/values and browser bugs that
        // preclude passing to native `replace`, so don't try
        //if (...)
        //    return nativ.replace.apply(this, arguments);
        if (isRegex) {
            if (search._xregexp)
                captureNames = search._xregexp.captureNames; // Array or `null`
            if (!search.global)
                origLastIndex = search.lastIndex;
        } else {
            search = search + ""; // Type conversion
        }
        if (Object.prototype.toString.call(replacement) === "[object Function]") {
            result = nativ.replace.call(this + "", search, function () {
                if (captureNames) {
                    // Change the `arguments[0]` string primitive to a String object which can store properties
                    arguments[0] = new String(arguments[0]);
                    // Store named backreferences on `arguments[0]`
                    for (var i = 0; i < captureNames.length; i++) {
                        if (captureNames[i])
                            arguments[0][captureNames[i]] = arguments[i + 1];
                    }
                }
                // Update `lastIndex` before calling `replacement` (fix browsers)
                if (isRegex && search.global)
                    search.lastIndex = arguments[arguments.length - 2] + arguments[0].length;
                return replacement.apply(null, arguments);
            });
        } else {
            str = this + ""; // Type conversion, so `args[args.length - 1]` will be a string (given nonstring `this`)
            result = nativ.replace.call(str, search, function () {
                var args = arguments; // Keep this function's `arguments` available through closure
                return nativ.replace.call(replacement + "", replacementToken, function ($0, $1, $2) {
                    // Numbered backreference (without delimiters) or special variable
                    if ($1) {
                        switch ($1) {
                            case "$": return "$";
                            case "&": return args[0];
                            case "`": return args[args.length - 1].slice(0, args[args.length - 2]);
                            case "'": return args[args.length - 1].slice(args[args.length - 2] + args[0].length);
                            // Numbered backreference
                            default:
                                // What does "$10" mean?
                                // - Backreference 10, if 10 or more capturing groups exist
                                // - Backreference 1 followed by "0", if 1-9 capturing groups exist
                                // - Otherwise, it's the string "$10"
                                // Also note:
                                // - Backreferences cannot be more than two digits (enforced by `replacementToken`)
                                // - "$01" is equivalent to "$1" if a capturing group exists, otherwise it's the string "$01"
                                // - There is no "$0" token ("$&" is the entire match)
                                var literalNumbers = "";
                                $1 = +$1; // Type conversion; drop leading zero
                                if (!$1) // `$1` was "0" or "00"
                                    return $0;
                                while ($1 > args.length - 3) {
                                    literalNumbers = String.prototype.slice.call($1, -1) + literalNumbers;
                                    $1 = Math.floor($1 / 10); // Drop the last digit
                                }
                                return ($1 ? args[$1] || "" : "$") + literalNumbers;
                        }
                        // Named backreference or delimited numbered backreference
                    } else {
                        // What does "${n}" mean?
                        // - Backreference to numbered capture n. Two differences from "$n":
                        //   - n can be more than two digits
                        //   - Backreference 0 is allowed, and is the entire match
                        // - Backreference to named capture n, if it exists and is not a number overridden by numbered capture
                        // - Otherwise, it's the string "${n}"
                        var n = +$2; // Type conversion; drop leading zeros
                        if (n <= args.length - 3)
                            return args[n];
                        n = captureNames ? indexOf(captureNames, $2) : -1;
                        return n > -1 ? args[n + 1] : $0;
                    }
                });
            });
        }
        if (isRegex) {
            if (search.global)
                search.lastIndex = 0; // Fix IE, Safari bug (last tested IE 9.0.5, Safari 5.1.2 on Windows)
            else
                search.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)
        }
        return result;
    };
    // A consistent cross-browser, ES3 compliant `split`
    String.prototype.split = function (s /* separator */, limit) {
        // If separator `s` is not a regex, use the native `split`
        if (!XRegExp.isRegExp(s))
            return nativ.split.apply(this, arguments);
        var str = this + "", // Type conversion
            output = [],
            lastLastIndex = 0,
            match, lastLength;
        // Behavior for `limit`: if it's...
        // - `undefined`: No limit
        // - `NaN` or zero: Return an empty array
        // - A positive number: Use `Math.floor(limit)`
        // - A negative number: No limit
        // - Other: Type-convert, then use the above rules
        if (limit === undefined || +limit < 0) {
            limit = Infinity;
        } else {
            limit = Math.floor(+limit);
            if (!limit)
                return [];
        }
        // This is required if not `s.global`, and it avoids needing to set `s.lastIndex` to zero
        // and restore it to its original value when we're done using the regex
        s = XRegExp.copyAsGlobal(s);
        while (match = s.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.)
            if (s.lastIndex > lastLastIndex) {
                output.push(str.slice(lastLastIndex, match.index));
                if (match.length > 1 && match.index < str.length)
                    Array.prototype.push.apply(output, match.slice(1));
                lastLength = match[0].length;
                lastLastIndex = s.lastIndex;
                if (output.length >= limit)
                    break;
            }
            if (s.lastIndex === match.index)
                s.lastIndex++;
        }
        if (lastLastIndex === str.length) {
            if (!nativ.test.call(s, "") || lastLength)
                output.push("");
        } else {
            output.push(str.slice(lastLastIndex));
        }
        return output.length > limit ? output.slice(0, limit) : output;
    };
    //---------------------------------
    //  Private helper functions
    //---------------------------------
    // Supporting function for `XRegExp`, `XRegExp.copyAsGlobal`, etc. Returns a copy of a `RegExp`
    // instance with a fresh `lastIndex` (set to zero), preserving properties required for named
    // capture. Also allows adding new flags in the process of copying the regex
    function clone (regex, additionalFlags) {
        if (!XRegExp.isRegExp(regex))
            throw TypeError("type RegExp expected");
        var x = regex._xregexp;
        regex = XRegExp(regex.source, getNativeFlags(regex) + (additionalFlags || ""));
        if (x) {
            regex._xregexp = {
                source: x.source,
                captureNames: x.captureNames ? x.captureNames.slice(0) : null
            };
        }
        return regex;
    }
    function getNativeFlags (regex) {
        return (regex.global     ? "g" : "") +
            (regex.ignoreCase ? "i" : "") +
            (regex.multiline  ? "m" : "") +
            (regex.extended   ? "x" : "") + // Proposed for ES4; included in AS3
            (regex.sticky     ? "y" : "");
    }
    function runTokens (pattern, index, scope, context) {
        var i = tokens.length,
            result, match, t;
        // Protect against constructing XRegExps within token handler and trigger functions
        isInsideConstructor = true;
        // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws
        try {
            while (i--) { // Run in reverse order
                t = tokens[i];
                if ((scope & t.scope) && (!t.trigger || t.trigger.call(context))) {
                    t.pattern.lastIndex = index;
                    match = t.pattern.exec(pattern); // Running the altered `exec` here allows use of named backreferences, etc.
                    if (match && match.index === index) {
                        result = {
                            output: t.handler.call(context, match, scope),
                            match: match
                        };
                        break;
                    }
                }
            }
        } catch (err) {
            throw err;
        } finally {
            isInsideConstructor = false;
        }
        return result;
    }
    function indexOf (array, item, from) {
        if (Array.prototype.indexOf) // Use the native array method if available
            return array.indexOf(item, from);
        for (var i = from || 0; i < array.length; i++) {
            if (array[i] === item)
                return i;
        }
        return -1;
    }
    //---------------------------------
    //  Built-in tokens
    //---------------------------------
    // Augment XRegExp's regular expression syntax and flags. Note that when adding tokens, the
    // third (`scope`) argument defaults to `XRegExp.OUTSIDE_CLASS`
    // Comment pattern: (?# )
    XRegExp.addToken(
        /\(\?#[^)]*\)/,
        function (match) {
            // Keep tokens separated unless the following token is a quantifier
            return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)";
        }
    );
    // Capturing group (match the opening parenthesis only).
    // Required for support of named capturing groups
    XRegExp.addToken(
        /\((?!\?)/,
        function () {
            this.captureNames.push(null);
            return "(";
        }
    );
    // Named capturing group (match the opening delimiter only): (?<name>
    XRegExp.addToken(
        /\(\?<([$\w]+)>/,
        function (match) {
            this.captureNames.push(match[1]);
            this.hasNamedCapture = true;
            return "(";
        }
    );
    // Named backreference: \k<name>
    XRegExp.addToken(
        /\\k<([\w$]+)>/,
        function (match) {
            var index = indexOf(this.captureNames, match[1]);
            // Keep backreferences separate from subsequent literal numbers. Preserve back-
            // references to named groups that are undefined at this point as literal strings
            return index > -1 ?
                "\\" + (index + 1) + (isNaN(match.input.charAt(match.index + match[0].length)) ? "" : "(?:)") :
                match[0];
        }
    );
    // Empty character class: [] or [^]
    XRegExp.addToken(
        /\[\^?]/,
        function (match) {
            // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S].
            // (?!) should work like \b\B, but is unreliable in Firefox
            return match[0] === "[]" ? "\\b\\B" : "[\\s\\S]";
        }
    );
    // Mode modifier at the start of the pattern only, with any combination of flags imsx: (?imsx)
    // Does not support x(?i), (?-i), (?i-m), (?i: ), (?i)(?m), etc.
    XRegExp.addToken(
        /^\(\?([imsx]+)\)/,
        function (match) {
            this.setFlag(match[1]);
            return "";
        }
    );
    // Whitespace and comments, in free-spacing (aka extended) mode only
    XRegExp.addToken(
        /(?:\s+|#.*)+/,
        function (match) {
            // Keep tokens separated unless the following token is a quantifier
            return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)";
        },
        XRegExp.OUTSIDE_CLASS,
        function () {return this.hasFlag("x");}
    );
    // Dot, in dotall (aka singleline) mode only
    XRegExp.addToken(
        /\./,
        function () {return "[\\s\\S]";},
        XRegExp.OUTSIDE_CLASS,
        function () {return this.hasFlag("s");}
    );
    //---------------------------------
    //  Backward compatibility
    //---------------------------------
    // Uncomment the following block for compatibility with XRegExp 1.0-1.2:
    /*
     XRegExp.matchWithinChain = XRegExp.matchChain;
     RegExp.prototype.addFlags = function (s) {return clone(this, s);};
     RegExp.prototype.execAll = function (s) {var r = []; XRegExp.iterate(s, this, function (m) {r.push(m);}); return r;};
     RegExp.prototype.forEachExec = function (s, f, c) {return XRegExp.iterate(s, this, f, c);};
     RegExp.prototype.validate = function (s) {var r = RegExp("^(?:" + this.source + ")$(?!\\s)", getNativeFlags(this)); if (this.global) this.lastIndex = 0; return s.search(r) === 0;};
     */
})();
//
// Begin anonymous function. This is used to contain local scope variables without polutting global scope.
//
if (typeof(SyntaxHighlighter) == 'undefined') var SyntaxHighlighter = function() {
// CommonJS
    if (typeof(require) != 'undefined' && typeof(XRegExp) == 'undefined')
    {
        XRegExp = require('XRegExp').XRegExp;
    }
// Shortcut object which will be assigned to the SyntaxHighlighter variable.
// This is a shorthand for local reference in order to avoid long namespace
// references to SyntaxHighlighter.whatever...
    var sh = {
        defaults : {
            /** Additional CSS class names to be added to highlighter elements. */
            'class-name' : '',
            /** First line number. */
            'first-line' : 1,
            /**
             * Pads line numbers. Possible values are:
             *
             *   false - don't pad line numbers.
             *   true  - automaticaly pad numbers with minimum required number of leading zeroes.
             *   [int] - length up to which pad line numbers.
             */
            'pad-line-numbers' : false,
            /** Lines to highlight. */
            'highlight' : false,
            /** Title to be displayed above the code block. */
            'title' : null,
            /** Enables or disables smart tabs. */
            'smart-tabs' : true,
            /** Gets or sets tab size. */
            'tab-size' : 4,
            /** Enables or disables gutter. */
            'gutter' : true,
            /** Enables or disables toolbar. */
            'toolbar' : true,
            /** Enables quick code copy and paste from double click. */
            'quick-code' : true,
            /** Forces code view to be collapsed. */
            'collapse' : false,
            /** Enables or disables automatic links. */
            'auto-links' : false,
            /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */
            'light' : false,
            'unindent' : true,
            'html-script' : false
        },
        config : {
            space : '&nbsp;',
            /** Enables use of <SCRIPT type="syntaxhighlighter" /> tags. */
            useScriptTags : true,
            /** Blogger mode flag. */
            bloggerMode : false,
            stripBrs : false,
            /** Name of the tag that SyntaxHighlighter will automatically look for. */
            tagName : 'pre',
            strings : {
                expandSource : 'expand source',
                help : '?',
                alert: 'SyntaxHighlighter\n\n',
                noBrush : 'Can\'t find brush for: ',
                brushNotHtmlScript : 'Brush wasn\'t configured for html-script option: ',
                // this is populated by the build script
                aboutDialog : '@ABOUT@'
            }
        },
        /** Internal 'global' variables. */
        vars : {
            discoveredBrushes : null,
            highlighters : {}
        },
        /** This object is populated by user included external brush files. */
        brushes : {},
        /** Common regular expressions. */
        regexLib : {
            multiLineCComments            : /\/\*[\s\S]*?\*\//gm,
            singleLineCComments            : /\/\/.*$/gm,
            singleLinePerlComments        : /#.*$/gm,
            doubleQuotedString            : /"([^\\"\n]|\\.)*"/g,
            singleQuotedString            : /'([^\\'\n]|\\.)*'/g,
            multiLineDoubleQuotedString    : new XRegExp('"([^\\\\"]|\\\\.)*"', 'gs'),
            multiLineSingleQuotedString    : new XRegExp("'([^\\\\']|\\\\.)*'", 'gs'),
            xmlComments                    : /(&lt;|<)!--[\s\S]*?--(&gt;|>)/gm,
            url                            : /\w+:\/\/[\w-.\/?%&=:@;#]*/g,
            /** <?= ?> tags. */
            phpScriptTags                 : { left: /(&lt;|<)\?(?:=|php)?/g, right: /\?(&gt;|>)/g, 'eof' : true },
            /** <%= %> tags. */
            aspScriptTags                : { left: /(&lt;|<)%=?/g, right: /%(&gt;|>)/g },
            /** <script> tags. */
            scriptScriptTags            : { left: /(&lt;|<)\s*script.*?(&gt;|>)/gi, right: /(&lt;|<)\/\s*script\s*(&gt;|>)/gi }
        },
        toolbar: {
            /**
             * Generates HTML markup for the toolbar.
             * @param {Highlighter} highlighter Highlighter instance.
             * @return {String} Returns HTML markup.
             */
            getHtml: function(highlighter)
            {
                var html = '<div class="toolbar">',
                    items = sh.toolbar.items,
                    list = items.list
                    ;
                function defaultGetHtml(highlighter, name)
                {
                    return sh.toolbar.getButtonHtml(highlighter, name, sh.config.strings[name]);
                };
                for (var i = 0; i < list.length; i++)
                    html += (items[list[i]].getHtml || defaultGetHtml)(highlighter, list[i]);
                html += '</div>';
                return html;
            },
            /**
             * Generates HTML markup for a regular button in the toolbar.
             * @param {Highlighter} highlighter Highlighter instance.
             * @param {String} commandName        Command name that would be executed.
             * @param {String} label            Label text to display.
             * @return {String}                    Returns HTML markup.
             */
            getButtonHtml: function(highlighter, commandName, label)
            {
                return '<span><a href="#" class="toolbar_item'
                    + ' command_' + commandName
                    + ' ' + commandName
                    + '">' + label + '</a></span>'
                    ;
            },
            /**
             * Event handler for a toolbar anchor.
             */
            handler: function(e)
            {
                var target = e.target,
                    className = target.className || ''
                    ;
                function getValue(name)
                {
                    var r = new RegExp(name + '_(\\w+)'),
                        match = r.exec(className)
                        ;
                    return match ? match[1] : null;
                };
                var highlighter = getHighlighterById(findParentElement(target, '.syntaxhighlighter').id),
                    commandName = getValue('command')
                    ;
                // execute the toolbar command
                if (highlighter && commandName)
                    sh.toolbar.items[commandName].execute(highlighter);
                // disable default A click behaviour
                e.preventDefault();
            },
            /** Collection of toolbar items. */
            items : {
                // Ordered lis of items in the toolbar. Can't expect `for (var n in items)` to be consistent.
                list: ['expandSource', 'help'],
                expandSource: {
                    getHtml: function(highlighter)
                    {
                        if (highlighter.getParam('collapse') != true)
                            return '';
                        var title = highlighter.getParam('title');
                        return sh.toolbar.getButtonHtml(highlighter, 'expandSource', title ? title : sh.config.strings.expandSource);
                    },
                    execute: function(highlighter)
                    {
                        var div = getHighlighterDivById(highlighter.id);
                        removeClass(div, 'collapsed');
                    }
                },
                /** Command to display the about dialog window. */
                help: {
                    execute: function(highlighter)
                    {
                        var wnd = popup('', '_blank', 500, 250, 'scrollbars=0'),
                            doc = wnd.document
                            ;
                        doc.write(sh.config.strings.aboutDialog);
                        doc.close();
                        wnd.focus();
                    }
                }
            }
        },
        /**
         * Finds all elements on the page which should be processes by SyntaxHighlighter.
         *
         * @param {Object} globalParams        Optional parameters which override element's
         *                                     parameters. Only used if element is specified.
         *
         * @param {Object} element    Optional element to highlight. If none is
         *                             provided, all elements in the current document
         *                             are returned which qualify.
         *
         * @return {Array}    Returns list of <code>{ target: DOMElement, params: Object }</code> objects.
         */
        findElements: function(globalParams, element)
        {
            var elements = element ? [element] : toArray(document.getElementsByTagName(sh.config.tagName)),
                conf = sh.config,
                result = []
                ;
            // support for <SCRIPT TYPE="syntaxhighlighter" /> feature
            if (conf.useScriptTags)
                elements = elements.concat(getSyntaxHighlighterScriptTags());
            if (elements.length === 0)
                return result;
            for (var i = 0; i < elements.length; i++)
            {
                var item = {
                    target: elements[i],
                    // local params take precedence over globals
                    params: merge(globalParams, parseParams(elements[i].className))
                };
                if (item.params['brush'] == null)
                    continue;
                result.push(item);
            }
            return result;
        },
        /**
         * Shorthand to highlight all elements on the page that are marked as
         * SyntaxHighlighter source code.
         *
         * @param {Object} globalParams        Optional parameters which override element's
         *                                     parameters. Only used if element is specified.
         *
         * @param {Object} element    Optional element to highlight. If none is
         *                             provided, all elements in the current document
         *                             are highlighted.
         */
        highlight: function(globalParams, element)
        {
            var elements = this.findElements(globalParams, element),
                propertyName = 'innerHTML',
                highlighter = null,
                conf = sh.config
                ;
            if (elements.length === 0)
                return;
            for (var i = 0; i < elements.length; i++)
            {
                var element = elements[i],
                    target = element.target,
                    params = element.params,
                    brushName = params.brush,
                    code
                    ;
                if (brushName == null)
                    continue;
                // Instantiate a brush
                if (params['html-script'] == 'true' || sh.defaults['html-script'] == true)
                {
                    highlighter = new sh.HtmlScript(brushName);
                    brushName = 'htmlscript';
                }
                else
                {
                    var brush = findBrush(brushName);
                    if (brush)
                        highlighter = new brush();
                    else
                        continue;
                }
                code = target[propertyName];
                // remove CDATA from <SCRIPT/> tags if it's present
                if (conf.useScriptTags)
                    code = stripCData(code);
                // Inject title if the attribute is present
                if ((target.title || '') != '')
                    params.title = target.title;
                params['brush'] = brushName;
                highlighter.init(params);
                element = highlighter.getDiv(code);
                // carry over ID
                if ((target.id || '') != '')
                    element.id = target.id;
                //by zhanyi 去掉多余的外围div
                var tmp = element.firstChild.firstChild;
                tmp.className = element.firstChild.className;
                target.parentNode.replaceChild(tmp, target);
            }
        },
        /**
         * Main entry point for the SyntaxHighlighter.
         * @param {Object} params Optional params to apply to all highlighted elements.
         */
        all: function(params)
        {
            attachEvent(
                window,
                'load',
                function() { sh.highlight(params); }
            );
        }
    }; // end of sh
    /**
     * Checks if target DOM elements has specified CSS class.
     * @param {DOMElement} target Target DOM element to check.
     * @param {String} className Name of the CSS class to check for.
     * @return {Boolean} Returns true if class name is present, false otherwise.
     */
    function hasClass(target, className)
    {
        return target.className.indexOf(className) != -1;
    };
    /**
     * Adds CSS class name to the target DOM element.
     * @param {DOMElement} target Target DOM element.
     * @param {String} className New CSS class to add.
     */
    function addClass(target, className)
    {
        if (!hasClass(target, className))
            target.className += ' ' + className;
    };
    /**
     * Removes CSS class name from the target DOM element.
     * @param {DOMElement} target Target DOM element.
     * @param {String} className CSS class to remove.
     */
    function removeClass(target, className)
    {
        target.className = target.className.replace(className, '');
    };
    /**
     * Converts the source to array object. Mostly used for function arguments and
     * lists returned by getElementsByTagName() which aren't Array objects.
     * @param {List} source Source list.
     * @return {Array} Returns array.
     */
    function toArray(source)
    {
        var result = [];
        for (var i = 0; i < source.length; i++)
            result.push(source[i]);
        return result;
    };
    /**
     * Splits block of text into lines.
     * @param {String} block Block of text.
     * @return {Array} Returns array of lines.
     */
    function splitLines(block)
    {
        return block.split(/\r?\n/);
    }
    /**
     * Generates HTML ID for the highlighter.
     * @param {String} highlighterId Highlighter ID.
     * @return {String} Returns HTML ID.
     */
    function getHighlighterId(id)
    {
        var prefix = 'highlighter_';
        return id.indexOf(prefix) == 0 ? id : prefix + id;
    };
    /**
     * Finds Highlighter instance by ID.
     * @param {String} highlighterId Highlighter ID.
     * @return {Highlighter} Returns instance of the highlighter.
     */
    function getHighlighterById(id)
    {
        return sh.vars.highlighters[getHighlighterId(id)];
    };
    /**
     * Finds highlighter's DIV container.
     * @param {String} highlighterId Highlighter ID.
     * @return {Element} Returns highlighter's DIV element.
     */
    function getHighlighterDivById(id)
    {
        return document.getElementById(getHighlighterId(id));
    };
    /**
     * Stores highlighter so that getHighlighterById() can do its thing. Each
     * highlighter must call this method to preserve itself.
     * @param {Highilghter} highlighter Highlighter instance.
     */
    function storeHighlighter(highlighter)
    {
        sh.vars.highlighters[getHighlighterId(highlighter.id)] = highlighter;
    };
    /**
     * Looks for a child or parent node which has specified classname.
     * Equivalent to jQuery's $(container).find(".className")
     * @param {Element} target Target element.
     * @param {String} search Class name or node name to look for.
     * @param {Boolean} reverse If set to true, will go up the node tree instead of down.
     * @return {Element} Returns found child or parent element on null.
     */
    function findElement(target, search, reverse /* optional */)
    {
        if (target == null)
            return null;
        var nodes            = reverse != true ? target.childNodes : [ target.parentNode ],
            propertyToFind    = { '#' : 'id', '.' : 'className' }[search.substr(0, 1)] || 'nodeName',
            expectedValue,
            found
            ;
        expectedValue = propertyToFind != 'nodeName'
            ? search.substr(1)
            : search.toUpperCase()
        ;
        // main return of the found node
        if ((target[propertyToFind] || '').indexOf(expectedValue) != -1)
            return target;
        for (var i = 0; nodes && i < nodes.length && found == null; i++)
            found = findElement(nodes[i], search, reverse);
        return found;
    };
    /**
     * Looks for a parent node which has specified classname.
     * This is an alias to <code>findElement(container, className, true)</code>.
     * @param {Element} target Target element.
     * @param {String} className Class name to look for.
     * @return {Element} Returns found parent element on null.
     */
    function findParentElement(target, className)
    {
        return findElement(target, className, true);
    };
    /**
     * Finds an index of element in the array.
     * @ignore
     * @param {Object} searchElement
     * @param {Number} fromIndex
     * @return {Number} Returns index of element if found; -1 otherwise.
     */
    function indexOf(array, searchElement, fromIndex)
    {
        fromIndex = Math.max(fromIndex || 0, 0);
        for (var i = fromIndex; i < array.length; i++)
            if(array[i] == searchElement)
                return i;
        return -1;
    };
    /**
     * Generates a unique element ID.
     */
    function guid(prefix)
    {
        return (prefix || '') + Math.round(Math.random() * 1000000).toString();
    };
    /**
     * Merges two objects. Values from obj2 override values in obj1.
     * Function is NOT recursive and works only for one dimensional objects.
     * @param {Object} obj1 First object.
     * @param {Object} obj2 Second object.
     * @return {Object} Returns combination of both objects.
     */
    function merge(obj1, obj2)
    {
        var result = {}, name;
        for (name in obj1)
            result[name] = obj1[name];
        for (name in obj2)
            result[name] = obj2[name];
        return result;
    };
    /**
     * Attempts to convert string to boolean.
     * @param {String} value Input string.
     * @return {Boolean} Returns true if input was "true", false if input was "false" and value otherwise.
     */
    function toBoolean(value)
    {
        var result = { "true" : true, "false" : false }[value];
        return result == null ? value : result;
    };
    /**
     * Opens up a centered popup window.
     * @param {String} url        URL to open in the window.
     * @param {String} name        Popup name.
     * @param {int} width        Popup width.
     * @param {int} height        Popup height.
     * @param {String} options    window.open() options.
     * @return {Window}            Returns window instance.
     */
    function popup(url, name, width, height, options)
    {
        var x = (screen.width - width) / 2,
            y = (screen.height - height) / 2
            ;
        options +=    ', left=' + x +
            ', top=' + y +
            ', width=' + width +
            ', height=' + height
        ;
        options = options.replace(/^,/, '');
        var win = window.open(url, name, options);
        win.focus();
        return win;
    };
    /**
     * Adds event handler to the target object.
     * @param {Object} obj        Target object.
     * @param {String} type        Name of the event.
     * @param {Function} func    Handling function.
     */
    function attachEvent(obj, type, func, scope)
    {
        function handler(e)
        {
            e = e || window.event;
            if (!e.target)
            {
                e.target = e.srcElement;
                e.preventDefault = function()
                {
                    this.returnValue = false;
                };
            }
            func.call(scope || window, e);
        };
        if (obj.attachEvent)
        {
            obj.attachEvent('on' + type, handler);
        }
        else
        {
            obj.addEventListener(type, handler, false);
        }
    };
    /**
     * Displays an alert.
     * @param {String} str String to display.
     */
    function alert(str)
    {
        window.alert(sh.config.strings.alert + str);
    };
    /**
     * Finds a brush by its alias.
     *
     * @param {String} alias        Brush alias.
     * @param {Boolean} showAlert    Suppresses the alert if false.
     * @return {Brush}                Returns bursh constructor if found, null otherwise.
     */
    function findBrush(alias, showAlert)
    {
        var brushes = sh.vars.discoveredBrushes,
            result = null
            ;
        if (brushes == null)
        {
            brushes = {};
            // Find all brushes
            for (var brush in sh.brushes)
            {
                var info = sh.brushes[brush],
                    aliases = info.aliases
                    ;
                if (aliases == null)
                    continue;
                // keep the brush name
                info.brushName = brush.toLowerCase();
                for (var i = 0; i < aliases.length; i++)
                    brushes[aliases[i]] = brush;
            }
            sh.vars.discoveredBrushes = brushes;
        }
        result = sh.brushes[brushes[alias]];
        if (result == null && showAlert)
            alert(sh.config.strings.noBrush + alias);
        return result;
    };
    /**
     * Executes a callback on each line and replaces each line with result from the callback.
     * @param {Object} str            Input string.
     * @param {Object} callback        Callback function taking one string argument and returning a string.
     */
    function eachLine(str, callback)
    {
        var lines = splitLines(str);
        for (var i = 0; i < lines.length; i++)
            lines[i] = callback(lines[i], i);
        // include \r to enable copy-paste on windows (ie8) without getting everything on one line
        return lines.join('\r\n');
    };
    /**
     * This is a special trim which only removes first and last empty lines
     * and doesn't affect valid leading space on the first line.
     *
     * @param {String} str   Input string
     * @return {String}      Returns string without empty first and last lines.
     */
    function trimFirstAndLastLines(str)
    {
        return str.replace(/^[ ]*[\n]+|[\n]*[ ]*$/g, '');
    };
    /**
     * Parses key/value pairs into hash object.
     *
     * Understands the following formats:
     * - name: word;
     * - name: [word, word];
     * - name: "string";
     * - name: 'string';
     *
     * For example:
     *   name1: value; name2: [value, value]; name3: 'value'
     *
     * @param {String} str    Input string.
     * @return {Object}       Returns deserialized object.
     */
    function parseParams(str)
    {
        var match,
            result = {},
            arrayRegex = new XRegExp("^\\[(?<values>(.*?))\\]$"),
            regex = new XRegExp(
                "(?<name>[\\w-]+)" +
                    "\\s*:\\s*" +
                    "(?<value>" +
                    "[\\w-%#]+|" +        // word
                    "\\[.*?\\]|" +        // [] array
                    '".*?"|' +            // "" string
                    "'.*?'" +            // '' string
                    ")\\s*;?",
                "g"
            )
            ;
        while ((match = regex.exec(str)) != null)
        {
            var value = match.value
                    .replace(/^['"]|['"]$/g, '') // strip quotes from end of strings
                ;
            // try to parse array value
            if (value != null && arrayRegex.test(value))
            {
                var m = arrayRegex.exec(value);
                value = m.values.length > 0 ? m.values.split(/\s*,\s*/) : [];
            }
            result[match.name] = value;
        }
        return result;
    };
    /**
     * Wraps each line of the string into <code/> tag with given style applied to it.
     *
     * @param {String} str   Input string.
     * @param {String} css   Style name to apply to the string.
     * @return {String}      Returns input string with each line surrounded by <span/> tag.
     */
    function wrapLinesWithCode(str, css)
    {
        if (str == null || str.length == 0 || str == '\n')
            return str;
        str = str.replace(/</g, '&lt;');
        // Replace two or more sequential spaces with &nbsp; leaving last space untouched.
        str = str.replace(/ {2,}/g, function(m)
        {
            var spaces = '';
            for (var i = 0; i < m.length - 1; i++)
                spaces += sh.config.space;
            return spaces + ' ';
        });
        // Split each line and apply <span class="...">...</span> to them so that
        // leading spaces aren't included.
        if (css != null)
            str = eachLine(str, function(line)
            {
                if (line.length == 0)
                    return '';
                var spaces = '';
                line = line.replace(/^(&nbsp;| )+/, function(s)
                {
                    spaces = s;
                    return '';
                });
                if (line.length == 0)
                    return spaces;
                return spaces + '<code class="' + css + '">' + line + '</code>';
            });
        return str;
    };
    /**
     * Pads number with zeros until it's length is the same as given length.
     *
     * @param {Number} number    Number to pad.
     * @param {Number} length    Max string length with.
     * @return {String}            Returns a string padded with proper amount of '0'.
     */
    function padNumber(number, length)
    {
        var result = number.toString();
        while (result.length < length)
            result = '0' + result;
        return result;
    };
    /**
     * Replaces tabs with spaces.
     *
     * @param {String} code        Source code.
     * @param {Number} tabSize    Size of the tab.
     * @return {String}            Returns code with all tabs replaces by spaces.
     */
    function processTabs(code, tabSize)
    {
        var tab = '';
        for (var i = 0; i < tabSize; i++)
            tab += ' ';
        return code.replace(/\t/g, tab);
    };
    /**
     * Replaces tabs with smart spaces.
     *
     * @param {String} code    Code to fix the tabs in.
     * @param {Number} tabSize Number of spaces in a column.
     * @return {String}        Returns code with all tabs replaces with roper amount of spaces.
     */
    function processSmartTabs(code, tabSize)
    {
        var lines = splitLines(code),
            tab = '\t',
            spaces = ''
            ;
        // Create a string with 1000 spaces to copy spaces from...
        // It's assumed that there would be no indentation longer than that.
        for (var i = 0; i < 50; i++)
            spaces += '                    '; // 20 spaces * 50
        // This function inserts specified amount of spaces in the string
        // where a tab is while removing that given tab.
        function insertSpaces(line, pos, count)
        {
            return line.substr(0, pos)
                + spaces.substr(0, count)
                + line.substr(pos + 1, line.length) // pos + 1 will get rid of the tab
                ;
        };
        // Go through all the lines and do the 'smart tabs' magic.
        code = eachLine(code, function(line)
        {
            if (line.indexOf(tab) == -1)
                return line;
            var pos = 0;
            while ((pos = line.indexOf(tab)) != -1)
            {
                // This is pretty much all there is to the 'smart tabs' logic.
                // Based on the position within the line and size of a tab,
                // calculate the amount of spaces we need to insert.
                var spaces = tabSize - pos % tabSize;
                line = insertSpaces(line, pos, spaces);
            }
            return line;
        });
        return code;
    };
    /**
     * Performs various string fixes based on configuration.
     */
    function fixInputString(str)
    {
        var br = /<br\s*\/?>|&lt;br\s*\/?&gt;/gi;
        if (sh.config.bloggerMode == true)
            str = str.replace(br, '\n');
        if (sh.config.stripBrs == true)
            str = str.replace(br, '');
        return str;
    };
    /**
     * Removes all white space at the begining and end of a string.
     *
     * @param {String} str   String to trim.
     * @return {String}      Returns string without leading and following white space characters.
     */
    function trim(str)
    {
        return str.replace(/^\s+|\s+$/g, '');
    };
    /**
     * Unindents a block of text by the lowest common indent amount.
     * @param {String} str   Text to unindent.
     * @return {String}      Returns unindented text block.
     */
    function unindent(str)
    {
        var lines = splitLines(fixInputString(str)),
            indents = new Array(),
            regex = /^\s*/,
            min = 1000
            ;
        // go through every line and check for common number of indents
        for (var i = 0; i < lines.length && min > 0; i++)
        {
            var line = lines[i];
            if (trim(line).length == 0)
                continue;
            var matches = regex.exec(line);
            // In the event that just one line doesn't have leading white space
            // we can't unindent anything, so bail completely.
            if (matches == null)
                return str;
            min = Math.min(matches[0].length, min);
        }
        // trim minimum common number of white space from the begining of every line
        if (min > 0)
            for (var i = 0; i < lines.length; i++)
                lines[i] = lines[i].substr(min);
        return lines.join('\n');
    };
    /**
     * Callback method for Array.sort() which sorts matches by
     * index position and then by length.
     *
     * @param {Match} m1    Left object.
     * @param {Match} m2    Right object.
     * @return {Number}     Returns -1, 0 or -1 as a comparison result.
     */
    function matchesSortCallback(m1, m2)
    {
        // sort matches by index first
        if(m1.index < m2.index)
            return -1;
        else if(m1.index > m2.index)
            return 1;
        else
        {
            // if index is the same, sort by length
            if(m1.length < m2.length)
                return -1;
            else if(m1.length > m2.length)
                return 1;
        }
        return 0;
    };
    /**
     * Executes given regular expression on provided code and returns all
     * matches that are found.
     *
     * @param {String} code    Code to execute regular expression on.
     * @param {Object} regex   Regular expression item info from <code>regexList</code> collection.
     * @return {Array}         Returns a list of Match objects.
     */
    function getMatches(code, regexInfo)
    {
        function defaultAdd(match, regexInfo)
        {
            return match[0];
        };
        var index = 0,
            match = null,
            matches = [],
            func = regexInfo.func ? regexInfo.func : defaultAdd
            ;
        while((match = regexInfo.regex.exec(code)) != null)
        {
            var resultMatch = func(match, regexInfo);
            if (typeof(resultMatch) == 'string')
                resultMatch = [new sh.Match(resultMatch, match.index, regexInfo.css)];
            matches = matches.concat(resultMatch);
        }
        return matches;
    };
    /**
     * Turns all URLs in the code into <a/> tags.
     * @param {String} code Input code.
     * @return {String} Returns code with </a> tags.
     */
    function processUrls(code)
    {
        var gt = /(.*)((&gt;|&lt;).*)/;
        return code.replace(sh.regexLib.url, function(m)
        {
            var suffix = '',
                match = null
                ;
            // We include &lt; and &gt; in the URL for the common cases like <http://google.com>
            // The problem is that they get transformed into &lt;http://google.com&gt;
            // Where as &gt; easily looks like part of the URL string.
            if (match = gt.exec(m))
            {
                m = match[1];
                suffix = match[2];
            }
            return '<a href="' + m + '">' + m + '</a>' + suffix;
        });
    };
    /**
     * Finds all <SCRIPT TYPE="syntaxhighlighter" /> elementss.
     * @return {Array} Returns array of all found SyntaxHighlighter tags.
     */
    function getSyntaxHighlighterScriptTags()
    {
        var tags = document.getElementsByTagName('script'),
            result = []
            ;
        for (var i = 0; i < tags.length; i++)
            if (tags[i].type == 'syntaxhighlighter')
                result.push(tags[i]);
        return result;
    };
    /**
     * Strips <![CDATA[]]> from <SCRIPT /> content because it should be used
     * there in most cases for XHTML compliance.
     * @param {String} original    Input code.
     * @return {String} Returns code without leading <![CDATA[]]> tags.
     */
    function stripCData(original)
    {
        var left = '<![CDATA[',
            right = ']]>',
        // for some reason IE inserts some leading blanks here
            copy = trim(original),
            changed = false,
            leftLength = left.length,
            rightLength = right.length
            ;
        if (copy.indexOf(left) == 0)
        {
            copy = copy.substring(leftLength);
            changed = true;
        }
        var copyLength = copy.length;
        if (copy.indexOf(right) == copyLength - rightLength)
        {
            copy = copy.substring(0, copyLength - rightLength);
            changed = true;
        }
        return changed ? copy : original;
    };
    /**
     * Quick code mouse double click handler.
     */
    function quickCodeHandler(e)
    {
        var target = e.target,
            highlighterDiv = findParentElement(target, '.syntaxhighlighter'),
            container = findParentElement(target, '.container'),
            textarea = document.createElement('textarea'),
            highlighter
            ;
        if (!container || !highlighterDiv || findElement(container, 'textarea'))
            return;
        highlighter = getHighlighterById(highlighterDiv.id);
        // add source class name
        addClass(highlighterDiv, 'source');
        // Have to go over each line and grab it's text, can't just do it on the
        // container because Firefox loses all \n where as Webkit doesn't.
        var lines = container.childNodes,
            code = []
            ;
        for (var i = 0; i < lines.length; i++)
            code.push(lines[i].innerText || lines[i].textContent);
        // using \r instead of \r or \r\n makes this work equally well on IE, FF and Webkit
        code = code.join('\r');
        // For Webkit browsers, replace nbsp with a breaking space
        code = code.replace(/\u00a0/g, " ");
        // inject <textarea/> tag
        textarea.appendChild(document.createTextNode(code));
        container.appendChild(textarea);
        // preselect all text
        textarea.focus();
        textarea.select();
        // set up handler for lost focus
        attachEvent(textarea, 'blur', function(e)
        {
            textarea.parentNode.removeChild(textarea);
            removeClass(highlighterDiv, 'source');
        });
    };
    /**
     * Match object.
     */
    sh.Match = function(value, index, css)
    {
        this.value = value;
        this.index = index;
        this.length = value.length;
        this.css = css;
        this.brushName = null;
    };
    sh.Match.prototype.toString = function()
    {
        return this.value;
    };
    /**
     * Simulates HTML code with a scripting language embedded.
     *
     * @param {String} scriptBrushName Brush name of the scripting language.
     */
    sh.HtmlScript = function(scriptBrushName)
    {
        var brushClass = findBrush(scriptBrushName),
            scriptBrush,
            xmlBrush = new sh.brushes.Xml(),
            bracketsRegex = null,
            ref = this,
            methodsToExpose = 'getDiv getHtml init'.split(' ')
            ;
        if (brushClass == null)
            return;
        scriptBrush = new brushClass();
        for(var i = 0; i < methodsToExpose.length; i++)
            // make a closure so we don't lose the name after i changes
            (function() {
                var name = methodsToExpose[i];
                ref[name] = function()
                {
                    return xmlBrush[name].apply(xmlBrush, arguments);
                };
            })();
        if (scriptBrush.htmlScript == null)
        {
            alert(sh.config.strings.brushNotHtmlScript + scriptBrushName);
            return;
        }
        xmlBrush.regexList.push(
            { regex: scriptBrush.htmlScript.code, func: process }
        );
        function offsetMatches(matches, offset)
        {
            for (var j = 0; j < matches.length; j++)
                matches[j].index += offset;
        }
        function process(match, info)
        {
            var code = match.code,
                matches = [],
                regexList = scriptBrush.regexList,
                offset = match.index + match.left.length,
                htmlScript = scriptBrush.htmlScript,
                result
                ;
            // add all matches from the code
            for (var i = 0; i < regexList.length; i++)
            {
                result = getMatches(code, regexList[i]);
                offsetMatches(result, offset);
                matches = matches.concat(result);
            }
            // add left script bracket
            if (htmlScript.left != null && match.left != null)
            {
                result = getMatches(match.left, htmlScript.left);
                offsetMatches(result, match.index);
                matches = matches.concat(result);
            }
            // add right script bracket
            if (htmlScript.right != null && match.right != null)
            {
                result = getMatches(match.right, htmlScript.right);
                offsetMatches(result, match.index + match[0].lastIndexOf(match.right));
                matches = matches.concat(result);
            }
            for (var j = 0; j < matches.length; j++)
                matches[j].brushName = brushClass.brushName;
            return matches;
        }
    };
    /**
     * Main Highlither class.
     * @constructor
     */
    sh.Highlighter = function()
    {
        // not putting any code in here because of the prototype inheritance
    };
    sh.Highlighter.prototype = {
        /**
         * Returns value of the parameter passed to the highlighter.
         * @param {String} name                Name of the parameter.
         * @param {Object} defaultValue        Default value.
         * @return {Object}                    Returns found value or default value otherwise.
         */
        getParam: function(name, defaultValue)
        {
            var result = this.params[name];
            return toBoolean(result == null ? defaultValue : result);
        },
        /**
         * Shortcut to document.createElement().
         * @param {String} name        Name of the element to create (DIV, A, etc).
         * @return {HTMLElement}    Returns new HTML element.
         */
        create: function(name)
        {
            return document.createElement(name);
        },
        /**
         * Applies all regular expression to the code and stores all found
         * matches in the `this.matches` array.
         * @param {Array} regexList        List of regular expressions.
         * @param {String} code            Source code.
         * @return {Array}                Returns list of matches.
         */
        findMatches: function(regexList, code)
        {
            var result = [];
            if (regexList != null)
                for (var i = 0; i < regexList.length; i++)
                    // BUG: length returns len+1 for array if methods added to prototype chain (oising@gmail.com)
                    if (typeof (regexList[i]) == "object")
                        result = result.concat(getMatches(code, regexList[i]));
            // sort and remove nested the matches
            return this.removeNestedMatches(result.sort(matchesSortCallback));
        },
        /**
         * Checks to see if any of the matches are inside of other matches.
         * This process would get rid of highligted strings inside comments,
         * keywords inside strings and so on.
         */
        removeNestedMatches: function(matches)
        {
            // Optimized by Jose Prado (http://joseprado.com)
            for (var i = 0; i < matches.length; i++)
            {
                if (matches[i] === null)
                    continue;
                var itemI = matches[i],
                    itemIEndPos = itemI.index + itemI.length
                    ;
                for (var j = i + 1; j < matches.length && matches[i] !== null; j++)
                {
                    var itemJ = matches[j];
                    if (itemJ === null)
                        continue;
                    else if (itemJ.index > itemIEndPos)
                        break;
                    else if (itemJ.index == itemI.index && itemJ.length > itemI.length)
                        matches[i] = null;
                    else if (itemJ.index >= itemI.index && itemJ.index < itemIEndPos)
                        matches[j] = null;
                }
            }
            return matches;
        },
        /**
         * Creates an array containing integer line numbers starting from the 'first-line' param.
         * @return {Array} Returns array of integers.
         */
        figureOutLineNumbers: function(code)
        {
            var lines = [],
                firstLine = parseInt(this.getParam('first-line'))
                ;
            eachLine(code, function(line, index)
            {
                lines.push(index + firstLine);
            });
            return lines;
        },
        /**
         * Determines if specified line number is in the highlighted list.
         */
        isLineHighlighted: function(lineNumber)
        {
            var list = this.getParam('highlight', []);
            if (typeof(list) != 'object' && list.push == null)
                list = [ list ];
            return indexOf(list, lineNumber.toString()) != -1;
        },
        /**
         * Generates HTML markup for a single line of code while determining alternating line style.
         * @param {Integer} lineNumber    Line number.
         * @param {String} code Line    HTML markup.
         * @return {String}                Returns HTML markup.
         */
        getLineHtml: function(lineIndex, lineNumber, code)
        {
            var classes = [
                'line',
                'number' + lineNumber,
                'index' + lineIndex,
                'alt' + (lineNumber % 2 == 0 ? 1 : 2).toString()
            ];
            if (this.isLineHighlighted(lineNumber))
                classes.push('highlighted');
            if (lineNumber == 0)
                classes.push('break');
            return '<div class="' + classes.join(' ') + '">' + code + '</div>';
        },
        /**
         * Generates HTML markup for line number column.
         * @param {String} code            Complete code HTML markup.
         * @param {Array} lineNumbers    Calculated line numbers.
         * @return {String}                Returns HTML markup.
         */
        getLineNumbersHtml: function(code, lineNumbers)
        {
            var html = '',
                count = splitLines(code).length,
                firstLine = parseInt(this.getParam('first-line')),
                pad = this.getParam('pad-line-numbers')
                ;
            if (pad == true)
                pad = (firstLine + count - 1).toString().length;
            else if (isNaN(pad) == true)
                pad = 0;
            for (var i = 0; i < count; i++)
            {
                var lineNumber = lineNumbers ? lineNumbers[i] : firstLine + i,
                    code = lineNumber == 0 ? sh.config.space : padNumber(lineNumber, pad)
                    ;
                html += this.getLineHtml(i, lineNumber, code);
            }
            return html;
        },
        /**
         * Splits block of text into individual DIV lines.
         * @param {String} code            Code to highlight.
         * @param {Array} lineNumbers    Calculated line numbers.
         * @return {String}                Returns highlighted code in HTML form.
         */
        getCodeLinesHtml: function(html, lineNumbers)
        {
            html = trim(html);
            var lines = splitLines(html),
                padLength = this.getParam('pad-line-numbers'),
                firstLine = parseInt(this.getParam('first-line')),
                html = '',
                brushName = this.getParam('brush')
                ;
            for (var i = 0; i < lines.length; i++)
            {
                var line = lines[i],
                    indent = /^(&nbsp;|\s)+/.exec(line),
                    spaces = null,
                    lineNumber = lineNumbers ? lineNumbers[i] : firstLine + i;
                ;
                if (indent != null)
                {
                    spaces = indent[0].toString();
                    line = line.substr(spaces.length);
                    spaces = spaces.replace(' ', sh.config.space);
                }
                line = trim(line);
                if (line.length == 0)
                    line = sh.config.space;
                html += this.getLineHtml(
                    i,
                    lineNumber,
                    (spaces != null ? '<code class="' + brushName + ' spaces">' + spaces + '</code>' : '') + line
                );
            }
            return html;
        },
        /**
         * Returns HTML for the table title or empty string if title is null.
         */
        getTitleHtml: function(title)
        {
            return title ? '<caption>' + title + '</caption>' : '';
        },
        /**
         * Finds all matches in the source code.
         * @param {String} code        Source code to process matches in.
         * @param {Array} matches    Discovered regex matches.
         * @return {String} Returns formatted HTML with processed mathes.
         */
        getMatchesHtml: function(code, matches)
        {
            var pos = 0,
                result = '',
                brushName = this.getParam('brush', '')
                ;
            function getBrushNameCss(match)
            {
                var result = match ? (match.brushName || brushName) : brushName;
                return result ? result + ' ' : '';
            };
            // Finally, go through the final list of matches and pull the all
            // together adding everything in between that isn't a match.
            for (var i = 0; i < matches.length; i++)
            {
                var match = matches[i],
                    matchBrushName
                    ;
                if (match === null || match.length === 0)
                    continue;
                matchBrushName = getBrushNameCss(match);
                result += wrapLinesWithCode(code.substr(pos, match.index - pos), matchBrushName + 'plain')
                    + wrapLinesWithCode(match.value, matchBrushName + match.css)
                ;
                pos = match.index + match.length + (match.offset || 0);
            }
            // don't forget to add whatever's remaining in the string
            result += wrapLinesWithCode(code.substr(pos), getBrushNameCss() + 'plain');
            return result;
        },
        /**
         * Generates HTML markup for the whole syntax highlighter.
         * @param {String} code Source code.
         * @return {String} Returns HTML markup.
         */
        getHtml: function(code)
        {
            var html = '',
                classes = [ 'syntaxhighlighter' ],
                tabSize,
                matches,
                lineNumbers
                ;
            // process light mode
            if (this.getParam('light') == true)
                this.params.toolbar = this.params.gutter = false;
            className = 'syntaxhighlighter';
            if (this.getParam('collapse') == true)
                classes.push('collapsed');
            if ((gutter = this.getParam('gutter')) == false)
                classes.push('nogutter');
            // add custom user style name
            classes.push(this.getParam('class-name'));
            // add brush alias to the class name for custom CSS
            classes.push(this.getParam('brush'));
            code = trimFirstAndLastLines(code)
                .replace(/\r/g, ' ') // IE lets these buggers through
            ;
            tabSize = this.getParam('tab-size');
            // replace tabs with spaces
            code = this.getParam('smart-tabs') == true
                ? processSmartTabs(code, tabSize)
                : processTabs(code, tabSize)
            ;
            // unindent code by the common indentation
            if (this.getParam('unindent'))
                code = unindent(code);
            if (gutter)
                lineNumbers = this.figureOutLineNumbers(code);
            // find matches in the code using brushes regex list
            matches = this.findMatches(this.regexList, code);
            // processes found matches into the html
            html = this.getMatchesHtml(code, matches);
            // finally, split all lines so that they wrap well
            html = this.getCodeLinesHtml(html, lineNumbers);
            // finally, process the links
            if (this.getParam('auto-links'))
                html = processUrls(html);
            if (typeof(navigator) != 'undefined' && navigator.userAgent && navigator.userAgent.match(/MSIE/))
                classes.push('ie');
            html =
                '<div id="' + getHighlighterId(this.id) + '" class="' + classes.join(' ') + '">'
                    + (this.getParam('toolbar') ? sh.toolbar.getHtml(this) : '')
                    + '<table border="0" cellpadding="0" cellspacing="0">'
                    + this.getTitleHtml(this.getParam('title'))
                    + '<tbody>'
                    + '<tr>'
                    + (gutter ? '<td class="gutter">' + this.getLineNumbersHtml(code) + '</td>' : '')
                    + '<td class="code">'
                    + '<div class="container">'
                    + html
                    + '</div>'
                    + '</td>'
                    + '</tr>'
                    + '</tbody>'
                    + '</table>'
                    + '</div>'
            ;
            return html;
        },
        /**
         * Highlights the code and returns complete HTML.
         * @param {String} code     Code to highlight.
         * @return {Element}        Returns container DIV element with all markup.
         */
        getDiv: function(code)
        {
            if (code === null)
                code = '';
            this.code = code;
            var div = this.create('div');
            // create main HTML
            div.innerHTML = this.getHtml(code);
            // set up click handlers
            if (this.getParam('toolbar'))
                attachEvent(findElement(div, '.toolbar'), 'click', sh.toolbar.handler);
            if (this.getParam('quick-code'))
                attachEvent(findElement(div, '.code'), 'dblclick', quickCodeHandler);
            return div;
        },
        /**
         * Initializes the highlighter/brush.
         *
         * Constructor isn't used for initialization so that nothing executes during necessary
         * `new SyntaxHighlighter.Highlighter()` call when setting up brush inheritence.
         *
         * @param {Hash} params Highlighter parameters.
         */
        init: function(params)
        {
            this.id = guid();
            // register this instance in the highlighters list
            storeHighlighter(this);
            // local params take precedence over defaults
            this.params = merge(sh.defaults, params || {})
            // process light mode
            if (this.getParam('light') == true)
                this.params.toolbar = this.params.gutter = false;
        },
        /**
         * Converts space separated list of keywords into a regular expression string.
         * @param {String} str    Space separated keywords.
         * @return {String}       Returns regular expression string.
         */
        getKeywords: function(str)
        {
            str = str
                .replace(/^\s+|\s+$/g, '')
                .replace(/\s+/g, '|')
            ;
            return '\\b(?:' + str + ')\\b';
        },
        /**
         * Makes a brush compatible with the `html-script` functionality.
         * @param {Object} regexGroup Object containing `left` and `right` regular expressions.
         */
        forHtmlScript: function(regexGroup)
        {
            var regex = { 'end' : regexGroup.right.source };
            if(regexGroup.eof)
                regex.end = "(?:(?:" + regex.end + ")|$)";
            this.htmlScript = {
                left : { regex: regexGroup.left, css: 'script' },
                right : { regex: regexGroup.right, css: 'script' },
                code : new XRegExp(
                    "(?<left>" + regexGroup.left.source + ")" +
                        "(?<code>.*?)" +
                        "(?<right>" + regex.end + ")",
                    "sgi"
                )
            };
        }
    }; // end of Highlighter
    return sh;
}(); // end of anonymous function
// CommonJS
typeof(exports) != 'undefined' ? exports.SyntaxHighlighter = SyntaxHighlighter : null;
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        // Created by Peter Atoria @ http://iAtoria.com
        var inits      =  'class interface function package';
        var keywords =    '-Infinity ...rest Array as AS3 Boolean break case catch const continue Date decodeURI ' +
                'decodeURIComponent default delete do dynamic each else encodeURI encodeURIComponent escape ' +
                'extends false final finally flash_proxy for get if implements import in include Infinity ' +
                'instanceof int internal is isFinite isNaN isXMLName label namespace NaN native new null ' +
                'Null Number Object object_proxy override parseFloat parseInt private protected public ' +
                'return set static String super switch this throw true try typeof uint undefined unescape ' +
                'use void while with'
            ;
        this.regexList = [
            { regex: SyntaxHighlighter.regexLib.singleLineCComments,    css: 'comments' },        // one line comments
            { regex: SyntaxHighlighter.regexLib.multiLineCComments,        css: 'comments' },        // multiline comments
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,        css: 'string' },        // double quoted strings
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,        css: 'string' },        // single quoted strings
            { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi,                css: 'value' },            // numbers
            { regex: new RegExp(this.getKeywords(inits), 'gm'),            css: 'color3' },        // initializations
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),        css: 'keyword' },        // keywords
            { regex: new RegExp('var', 'gm'),                            css: 'variable' },        // variable
            { regex: new RegExp('trace', 'gm'),                            css: 'color1' }            // trace
        ];
        this.forHtmlScript(SyntaxHighlighter.regexLib.scriptScriptTags);
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['actionscript3', 'as3'];
    SyntaxHighlighter.brushes.AS3 = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        // AppleScript brush by David Chambers
        // http://davidchambersdesign.com/
        var keywords   = 'after before beginning continue copy each end every from return get global in local named of set some that the then times to where whose with without';
        var ordinals   = 'first second third fourth fifth sixth seventh eighth ninth tenth last front back middle';
        var specials   = 'activate add alias AppleScript ask attachment boolean class constant delete duplicate empty exists false id integer list make message modal modified new no paragraph pi properties quit real record remove rest result reveal reverse run running save string true word yes';
        this.regexList = [
            { regex: /(--|#).*$/gm,
                css: 'comments' },
            { regex: /\(\*(?:[\s\S]*?\(\*[\s\S]*?\*\))*[\s\S]*?\*\)/gm, // support nested comments
                css: 'comments' },
            { regex: /"[\s\S]*?"/gm,
                css: 'string' },
            { regex: /(?:,|:|¬|'s\b|\(|\)|\{|\}|«|\b\w*»)/g,
                css: 'color1' },
            { regex: /(-)?(\d)+(\.(\d)?)?(E\+(\d)+)?/g, // numbers
                css: 'color1' },
            { regex: /(?:&(amp;|gt;|lt;)?|=|� |>|<|≥|>=|≤|<=|\*|\+|-|\/|÷|\^)/g,
                css: 'color2' },
            { regex: /\b(?:and|as|div|mod|not|or|return(?!\s&)(ing)?|equals|(is(n't| not)? )?equal( to)?|does(n't| not) equal|(is(n't| not)? )?(greater|less) than( or equal( to)?)?|(comes|does(n't| not) come) (after|before)|is(n't| not)?( in)? (back|front) of|is(n't| not)? behind|is(n't| not)?( (in|contained by))?|does(n't| not) contain|contain(s)?|(start|begin|end)(s)? with|((but|end) )?(consider|ignor)ing|prop(erty)?|(a )?ref(erence)?( to)?|repeat (until|while|with)|((end|exit) )?repeat|((else|end) )?if|else|(end )?(script|tell|try)|(on )?error|(put )?into|(of )?(it|me)|its|my|with (timeout( of)?|transaction)|end (timeout|transaction))\b/g,
                css: 'keyword' },
            { regex: /\b\d+(st|nd|rd|th)\b/g, // ordinals
                css: 'keyword' },
            { regex: /\b(?:about|above|against|around|at|below|beneath|beside|between|by|(apart|aside) from|(instead|out) of|into|on(to)?|over|since|thr(ough|u)|under)\b/g,
                css: 'color3' },
            { regex: /\b(?:adding folder items to|after receiving|choose( ((remote )?application|color|folder|from list|URL))?|clipboard info|set the clipboard to|(the )?clipboard|entire contents|display(ing| (alert|dialog|mode))?|document( (edited|file|nib name))?|file( (name|type))?|(info )?for|giving up after|(name )?extension|quoted form|return(ed)?|second(?! item)(s)?|list (disks|folder)|text item(s| delimiters)?|(Unicode )?text|(disk )?item(s)?|((current|list) )?view|((container|key) )?window|with (data|icon( (caution|note|stop))?|parameter(s)?|prompt|properties|seed|title)|case|diacriticals|hyphens|numeric strings|punctuation|white space|folder creation|application(s( folder)?| (processes|scripts position|support))?|((desktop )?(pictures )?|(documents|downloads|favorites|home|keychain|library|movies|music|public|scripts|sites|system|users|utilities|workflows) )folder|desktop|Folder Action scripts|font(s| panel)?|help|internet plugins|modem scripts|(system )?preferences|printer descriptions|scripting (additions|components)|shared (documents|libraries)|startup (disk|items)|temporary items|trash|on server|in AppleTalk zone|((as|long|short) )?user name|user (ID|locale)|(with )?password|in (bundle( with identifier)?|directory)|(close|open for) access|read|write( permission)?|(g|s)et eof|using( delimiters)?|starting at|default (answer|button|color|country code|entr(y|ies)|identifiers|items|name|location|script editor)|hidden( answer)?|open(ed| (location|untitled))?|error (handling|reporting)|(do( shell)?|load|run|store) script|administrator privileges|altering line endings|get volume settings|(alert|boot|input|mount|output|set) volume|output muted|(fax|random )?number|round(ing)?|up|down|toward zero|to nearest|as taught in school|system (attribute|info)|((AppleScript( Studio)?|system) )?version|(home )?directory|(IPv4|primary Ethernet) address|CPU (type|speed)|physical memory|time (stamp|to GMT)|replacing|ASCII (character|number)|localized string|from table|offset|summarize|beep|delay|say|(empty|multiple) selections allowed|(of|preferred) type|invisibles|showing( package contents)?|editable URL|(File|FTP|News|Media|Web) [Ss]ervers|Telnet hosts|Directory services|Remote applications|waiting until completion|saving( (in|to))?|path (for|to( (((current|frontmost) )?application|resource))?)|POSIX (file|path)|(background|RGB) color|(OK|cancel) button name|cancel button|button(s)?|cubic ((centi)?met(re|er)s|yards|feet|inches)|square ((kilo)?met(re|er)s|miles|yards|feet)|(centi|kilo)?met(re|er)s|miles|yards|feet|inches|lit(re|er)s|gallons|quarts|(kilo)?grams|ounces|pounds|degrees (Celsius|Fahrenheit|Kelvin)|print( (dialog|settings))?|clos(e(able)?|ing)|(de)?miniaturized|miniaturizable|zoom(ed|able)|attribute run|action (method|property|title)|phone|email|((start|end)ing|home) page|((birth|creation|current|custom|modification) )?date|((((phonetic )?(first|last|middle))|computer|host|maiden|related) |nick)?name|aim|icq|jabber|msn|yahoo|address(es)?|save addressbook|should enable action|city|country( code)?|formatte(r|d address)|(palette )?label|state|street|zip|AIM [Hh]andle(s)?|my card|select(ion| all)?|unsaved|(alpha )?value|entr(y|ies)|group|(ICQ|Jabber|MSN) handle|person|people|company|department|icon image|job title|note|organization|suffix|vcard|url|copies|collating|pages (across|down)|request print time|target( printer)?|((GUI Scripting|Script menu) )?enabled|show Computer scripts|(de)?activated|awake from nib|became (key|main)|call method|of (class|object)|center|clicked toolbar item|closed|for document|exposed|(can )?hide|idle|keyboard (down|up)|event( (number|type))?|launch(ed)?|load (image|movie|nib|sound)|owner|log|mouse (down|dragged|entered|exited|moved|up)|move|column|localization|resource|script|register|drag (info|types)|resigned (active|key|main)|resiz(e(d)?|able)|right mouse (down|dragged|up)|scroll wheel|(at )?index|should (close|open( untitled)?|quit( after last window closed)?|zoom)|((proposed|screen) )?bounds|show(n)?|behind|in front of|size (mode|to fit)|update(d| toolbar item)?|was (hidden|miniaturized)|will (become active|close|finish launching|hide|miniaturize|move|open|quit|(resign )?active|((maximum|minimum|proposed) )?size|show|zoom)|bundle|data source|movie|pasteboard|sound|tool(bar| tip)|(color|open|save) panel|coordinate system|frontmost|main( (bundle|menu|window))?|((services|(excluded from )?windows) )?menu|((executable|frameworks|resource|scripts|shared (frameworks|support)) )?path|(selected item )?identifier|data|content(s| view)?|character(s)?|click count|(command|control|option|shift) key down|context|delta (x|y|z)|key( code)?|location|pressure|unmodified characters|types|(first )?responder|playing|(allowed|selectable) identifiers|allows customization|(auto saves )?configuration|visible|image( name)?|menu form representation|tag|user(-| )defaults|associated file name|(auto|needs) display|current field editor|floating|has (resize indicator|shadow)|hides when deactivated|level|minimized (image|title)|opaque|position|release when closed|sheet|title(d)?)\b/g,
                css: 'color3' },
            { regex: new RegExp(this.getKeywords(specials), 'gm'), css: 'color3' },
            { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' },
            { regex: new RegExp(this.getKeywords(ordinals), 'gm'), css: 'keyword' }
        ];
    };
    Brush.prototype = new SyntaxHighlighter.Highlighter();
    Brush.aliases = ['applescript'];
    SyntaxHighlighter.brushes.AppleScript = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        var keywords =    'if fi then elif else for do done until while break continue case esac function return in eq ne ge le';
        var commands =  'alias apropos awk basename bash bc bg builtin bzip2 cal cat cd cfdisk chgrp chmod chown chroot' +
                        'cksum clear cmp comm command cp cron crontab csplit cut date dc dd ddrescue declare df ' +
                        'diff diff3 dig dir dircolors dirname dirs du echo egrep eject enable env ethtool eval ' +
                        'exec exit expand export expr false fdformat fdisk fg fgrep file find fmt fold format ' +
                        'free fsck ftp gawk getopts grep groups gzip hash head history hostname id ifconfig ' +
                        'import install join kill less let ln local locate logname logout look lpc lpr lprint ' +
                        'lprintd lprintq lprm ls lsof make man mkdir mkfifo mkisofs mknod more mount mtools ' +
                        'mv netstat nice nl nohup nslookup open op passwd paste pathchk ping popd pr printcap ' +
                        'printenv printf ps pushd pwd quota quotacheck quotactl ram rcp read readonly renice ' +
                        'remsync rm rmdir rsync screen scp sdiff sed select seq set sftp shift shopt shutdown ' +
                        'sleep sort source split ssh strace su sudo sum symlink sync tail tar tee test time ' +
                        'times touch top traceroute trap tr true tsort tty type ulimit umask umount unalias ' +
                        'uname unexpand uniq units unset unshar useradd usermod users uuencode uudecode v vdir ' +
                        'vi watch wc whereis which who whoami Wget xargs yes'
                        ;
        this.regexList = [
            { regex: /^#!.*$/gm,                                            css: 'preprocessor bold' },
            { regex: /\/[\w-\/]+/gm,                                        css: 'plain' },
            { regex: SyntaxHighlighter.regexLib.singleLinePerlComments,        css: 'comments' },        // one line comments
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,            css: 'string' },        // double quoted strings
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,            css: 'string' },        // single quoted strings
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),            css: 'keyword' },        // keywords
            { regex: new RegExp(this.getKeywords(commands), 'gm'),            css: 'functions' }        // commands
            ];
    }
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['bash', 'shell', 'sh'];
    SyntaxHighlighter.brushes.Bash = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        // Contributed by Jen
        // http://www.jensbits.com/2009/05/14/coldfusion-brush-for-syntaxhighlighter-plus
        var funcs    =    'Abs ACos AddSOAPRequestHeader AddSOAPResponseHeader AjaxLink AjaxOnLoad ArrayAppend ArrayAvg ArrayClear ArrayDeleteAt ' +
                        'ArrayInsertAt ArrayIsDefined ArrayIsEmpty ArrayLen ArrayMax ArrayMin ArraySet ArraySort ArraySum ArraySwap ArrayToList ' +
                        'Asc ASin Atn BinaryDecode BinaryEncode BitAnd BitMaskClear BitMaskRead BitMaskSet BitNot BitOr BitSHLN BitSHRN BitXor ' +
                        'Ceiling CharsetDecode CharsetEncode Chr CJustify Compare CompareNoCase Cos CreateDate CreateDateTime CreateObject ' +
                        'CreateODBCDate CreateODBCDateTime CreateODBCTime CreateTime CreateTimeSpan CreateUUID DateAdd DateCompare DateConvert ' +
                        'DateDiff DateFormat DatePart Day DayOfWeek DayOfWeekAsString DayOfYear DaysInMonth DaysInYear DE DecimalFormat DecrementValue ' +
                        'Decrypt DecryptBinary DeleteClientVariable DeserializeJSON DirectoryExists DollarFormat DotNetToCFType Duplicate Encrypt ' +
                        'EncryptBinary Evaluate Exp ExpandPath FileClose FileCopy FileDelete FileExists FileIsEOF FileMove FileOpen FileRead ' +
                        'FileReadBinary FileReadLine FileSetAccessMode FileSetAttribute FileSetLastModified FileWrite Find FindNoCase FindOneOf ' +
                        'FirstDayOfMonth Fix FormatBaseN GenerateSecretKey GetAuthUser GetBaseTagData GetBaseTagList GetBaseTemplatePath ' +
                        'GetClientVariablesList GetComponentMetaData GetContextRoot GetCurrentTemplatePath GetDirectoryFromPath GetEncoding ' +
                        'GetException GetFileFromPath GetFileInfo GetFunctionList GetGatewayHelper GetHttpRequestData GetHttpTimeString ' +
                        'GetK2ServerDocCount GetK2ServerDocCountLimit GetLocale GetLocaleDisplayName GetLocalHostIP GetMetaData GetMetricData ' +
                        'GetPageContext GetPrinterInfo GetProfileSections GetProfileString GetReadableImageFormats GetSOAPRequest GetSOAPRequestHeader ' +
                        'GetSOAPResponse GetSOAPResponseHeader GetTempDirectory GetTempFile GetTemplatePath GetTickCount GetTimeZoneInfo GetToken ' +
                        'GetUserRoles GetWriteableImageFormats Hash Hour HTMLCodeFormat HTMLEditFormat IIf ImageAddBorder ImageBlur ImageClearRect ' +
                        'ImageCopy ImageCrop ImageDrawArc ImageDrawBeveledRect ImageDrawCubicCurve ImageDrawLine ImageDrawLines ImageDrawOval ' +
                        'ImageDrawPoint ImageDrawQuadraticCurve ImageDrawRect ImageDrawRoundRect ImageDrawText ImageFlip ImageGetBlob ImageGetBufferedImage ' +
                        'ImageGetEXIFTag ImageGetHeight ImageGetIPTCTag ImageGetWidth ImageGrayscale ImageInfo ImageNegative ImageNew ImageOverlay ImagePaste ' +
                        'ImageRead ImageReadBase64 ImageResize ImageRotate ImageRotateDrawingAxis ImageScaleToFit ImageSetAntialiasing ImageSetBackgroundColor ' +
                        'ImageSetDrawingColor ImageSetDrawingStroke ImageSetDrawingTransparency ImageSharpen ImageShear ImageShearDrawingAxis ImageTranslate ' +
                        'ImageTranslateDrawingAxis ImageWrite ImageWriteBase64 ImageXORDrawingMode IncrementValue InputBaseN Insert Int IsArray IsBinary ' +
                        'IsBoolean IsCustomFunction IsDate IsDDX IsDebugMode IsDefined IsImage IsImageFile IsInstanceOf IsJSON IsLeapYear IsLocalHost ' +
                        'IsNumeric IsNumericDate IsObject IsPDFFile IsPDFObject IsQuery IsSimpleValue IsSOAPRequest IsStruct IsUserInAnyRole IsUserInRole ' +
                        'IsUserLoggedIn IsValid IsWDDX IsXML IsXmlAttribute IsXmlDoc IsXmlElem IsXmlNode IsXmlRoot JavaCast JSStringFormat LCase Left Len ' +
                        'ListAppend ListChangeDelims ListContains ListContainsNoCase ListDeleteAt ListFind ListFindNoCase ListFirst ListGetAt ListInsertAt ' +
                        'ListLast ListLen ListPrepend ListQualify ListRest ListSetAt ListSort ListToArray ListValueCount ListValueCountNoCase LJustify Log ' +
                        'Log10 LSCurrencyFormat LSDateFormat LSEuroCurrencyFormat LSIsCurrency LSIsDate LSIsNumeric LSNumberFormat LSParseCurrency LSParseDateTime ' +
                        'LSParseEuroCurrency LSParseNumber LSTimeFormat LTrim Max Mid Min Minute Month MonthAsString Now NumberFormat ParagraphFormat ParseDateTime ' +
                        'Pi PrecisionEvaluate PreserveSingleQuotes Quarter QueryAddColumn QueryAddRow QueryConvertForGrid QueryNew QuerySetCell QuotedValueList Rand ' +
                        'Randomize RandRange REFind REFindNoCase ReleaseComObject REMatch REMatchNoCase RemoveChars RepeatString Replace ReplaceList ReplaceNoCase ' +
                        'REReplace REReplaceNoCase Reverse Right RJustify Round RTrim Second SendGatewayMessage SerializeJSON SetEncoding SetLocale SetProfileString ' +
                        'SetVariable Sgn Sin Sleep SpanExcluding SpanIncluding Sqr StripCR StructAppend StructClear StructCopy StructCount StructDelete StructFind ' +
                        'StructFindKey StructFindValue StructGet StructInsert StructIsEmpty StructKeyArray StructKeyExists StructKeyList StructKeyList StructNew ' +
                        'StructSort StructUpdate Tan TimeFormat ToBase64 ToBinary ToScript ToString Trim UCase URLDecode URLEncodedFormat URLSessionFormat Val ' +
                        'ValueList VerifyClient Week Wrap Wrap WriteOutput XmlChildPos XmlElemNew XmlFormat XmlGetNodeType XmlNew XmlParse XmlSearch XmlTransform ' +
                        'XmlValidate Year YesNoFormat';
        var keywords =    'cfabort cfajaximport cfajaxproxy cfapplet cfapplication cfargument cfassociate cfbreak cfcache cfcalendar ' +
                        'cfcase cfcatch cfchart cfchartdata cfchartseries cfcol cfcollection cfcomponent cfcontent cfcookie cfdbinfo ' +
                        'cfdefaultcase cfdirectory cfdiv cfdocument cfdocumentitem cfdocumentsection cfdump cfelse cfelseif cferror ' +
                        'cfexchangecalendar cfexchangeconnection cfexchangecontact cfexchangefilter cfexchangemail cfexchangetask ' +
                        'cfexecute cfexit cffeed cffile cfflush cfform cfformgroup cfformitem cfftp cffunction cfgrid cfgridcolumn ' +
                        'cfgridrow cfgridupdate cfheader cfhtmlhead cfhttp cfhttpparam cfif cfimage cfimport cfinclude cfindex ' +
                        'cfinput cfinsert cfinterface cfinvoke cfinvokeargument cflayout cflayoutarea cfldap cflocation cflock cflog ' +
                        'cflogin cfloginuser cflogout cfloop cfmail cfmailparam cfmailpart cfmenu cfmenuitem cfmodule cfNTauthenticate ' +
                        'cfobject cfobjectcache cfoutput cfparam cfpdf cfpdfform cfpdfformparam cfpdfparam cfpdfsubform cfpod cfpop ' +
                        'cfpresentation cfpresentationslide cfpresenter cfprint cfprocessingdirective cfprocparam cfprocresult ' +
                        'cfproperty cfquery cfqueryparam cfregistry cfreport cfreportparam cfrethrow cfreturn cfsavecontent cfschedule ' +
                        'cfscript cfsearch cfselect cfset cfsetting cfsilent cfslider cfsprydataset cfstoredproc cfswitch cftable ' +
                        'cftextarea cfthread cfthrow cftimer cftooltip cftrace cftransaction cftree cftreeitem cftry cfupdate cfwddx ' +
                        'cfwindow cfxml cfzip cfzipparam';
        var operators =    'all and any between cross in join like not null or outer some';
        this.regexList = [
            { regex: new RegExp('--(.*)$', 'gm'),                        css: 'comments' },  // one line and multiline comments
            { regex: SyntaxHighlighter.regexLib.xmlComments,            css: 'comments' },    // single quoted strings
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,        css: 'string' },    // double quoted strings
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,        css: 'string' },    // single quoted strings
            { regex: new RegExp(this.getKeywords(funcs), 'gmi'),        css: 'functions' }, // functions
            { regex: new RegExp(this.getKeywords(operators), 'gmi'),    css: 'color1' },    // operators and such
            { regex: new RegExp(this.getKeywords(keywords), 'gmi'),        css: 'keyword' }    // keyword
            ];
    }
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['coldfusion','cf'];
    SyntaxHighlighter.brushes.ColdFusion = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        // Copyright 2006 Shin, YoungJin
        var datatypes =    'ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR ' +
                        'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH ' +
                        'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP ' +
                        'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY ' +
                        'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT ' +
                        'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE ' +
                        'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF ' +
                        'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR ' +
                        'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR ' +
                        'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT ' +
                        'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 ' +
                        'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR ' +
                        'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 ' +
                        'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT ' +
                        'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ' +
                        'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM ' +
                        'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t ' +
                        'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS ' +
                        'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t ' +
                        '__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t ' +
                        'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler ' +
                        'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function ' +
                        'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf ' +
                        'va_list wchar_t wctrans_t wctype_t wint_t signed';
        var keywords =    'auto break case catch class const decltype __finally __exception __try ' +
                        'const_cast continue private public protected __declspec ' +
                        'default delete deprecated dllexport dllimport do dynamic_cast ' +
                        'else enum explicit extern if for friend goto inline ' +
                        'mutable naked namespace new noinline noreturn nothrow ' +
                        'register reinterpret_cast return selectany ' +
                        'sizeof static static_cast struct switch template this ' +
                        'thread throw true false try typedef typeid typename union ' +
                        'using uuid virtual void volatile whcar_t while';
        var functions =    'assert isalnum isalpha iscntrl isdigit isgraph islower isprint' +
                        'ispunct isspace isupper isxdigit tolower toupper errno localeconv ' +
                        'setlocale acos asin atan atan2 ceil cos cosh exp fabs floor fmod ' +
                        'frexp ldexp log log10 modf pow sin sinh sqrt tan tanh jmp_buf ' +
                        'longjmp setjmp raise signal sig_atomic_t va_arg va_end va_start ' +
                        'clearerr fclose feof ferror fflush fgetc fgetpos fgets fopen ' +
                        'fprintf fputc fputs fread freopen fscanf fseek fsetpos ftell ' +
                        'fwrite getc getchar gets perror printf putc putchar puts remove ' +
                        'rename rewind scanf setbuf setvbuf sprintf sscanf tmpfile tmpnam ' +
                        'ungetc vfprintf vprintf vsprintf abort abs atexit atof atoi atol ' +
                        'bsearch calloc div exit free getenv labs ldiv malloc mblen mbstowcs ' +
                        'mbtowc qsort rand realloc srand strtod strtol strtoul system ' +
                        'wcstombs wctomb memchr memcmp memcpy memmove memset strcat strchr ' +
                        'strcmp strcoll strcpy strcspn strerror strlen strncat strncmp ' +
                        'strncpy strpbrk strrchr strspn strstr strtok strxfrm asctime ' +
                        'clock ctime difftime gmtime localtime mktime strftime time';
        this.regexList = [
            { regex: SyntaxHighlighter.regexLib.singleLineCComments,    css: 'comments' },            // one line comments
            { regex: SyntaxHighlighter.regexLib.multiLineCComments,        css: 'comments' },            // multiline comments
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,        css: 'string' },            // strings
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,        css: 'string' },            // strings
            { regex: /^ *#.*/gm,                                        css: 'preprocessor' },
            { regex: new RegExp(this.getKeywords(datatypes), 'gm'),        css: 'color1 bold' },
            { regex: new RegExp(this.getKeywords(functions), 'gm'),        css: 'functions bold' },
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),        css: 'keyword bold' }
            ];
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['cpp', 'c'];
    SyntaxHighlighter.brushes.Cpp = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        var keywords =    'abstract as base bool break byte case catch char checked class const ' +
                        'continue decimal default delegate do double else enum event explicit volatile ' +
                        'extern false finally fixed float for foreach get goto if implicit in int ' +
                        'interface internal is lock long namespace new null object operator out ' +
                        'override params private protected public readonly ref return sbyte sealed set ' +
                        'short sizeof stackalloc static string struct switch this throw true try ' +
                        'typeof uint ulong unchecked unsafe ushort using virtual void while var ' +
                        'from group by into select let where orderby join on equals ascending descending';
        function fixComments(match, regexInfo)
        {
            var css = (match[0].indexOf("///") == 0)
                ? 'color1'
                : 'comments'
                ;
            return [new SyntaxHighlighter.Match(match[0], match.index, css)];
        }
        this.regexList = [
            { regex: SyntaxHighlighter.regexLib.singleLineCComments,    func : fixComments },        // one line comments
            { regex: SyntaxHighlighter.regexLib.multiLineCComments,        css: 'comments' },            // multiline comments
            { regex: /@"(?:[^"]|"")*"/g,                                css: 'string' },            // @-quoted strings
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,        css: 'string' },            // strings
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,        css: 'string' },            // strings
            { regex: /^\s*#.*/gm,                                        css: 'preprocessor' },        // preprocessor tags like #region and #endregion
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),        css: 'keyword' },            // c# keyword
            { regex: /\bpartial(?=\s+(?:class|interface|struct)\b)/g,    css: 'keyword' },            // contextual keyword: 'partial'
            { regex: /\byield(?=\s+(?:return|break)\b)/g,                css: 'keyword' }            // contextual keyword: 'yield'
            ];
        this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['c#', 'c-sharp', 'csharp'];
    SyntaxHighlighter.brushes.CSharp = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        function getKeywordsCSS(str)
        {
            return '\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\b|\\b([a-z_\\*]|\\*|)') + '(?=:)\\b';
        };
        function getValuesCSS(str)
        {
            return '\\b' + str.replace(/ /g, '(?!-)(?!:)\\b|\\b()') + '\:\\b';
        };
        var keywords =    'ascent azimuth background-attachment background-color background-image background-position ' +
                        'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +
                        'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +
                        'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +
                        'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +
                        'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +
                        'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +
                        'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +
                        'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +
                        'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +
                        'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +
                        'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +
                        'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +
                        'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';
        var values =    'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+
                        'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+
                        'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+
                        'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+
                        'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+
                        'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+
                        'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+
                        'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+
                        'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+
                        'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+
                        'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+
                        'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+
                        'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+
                        'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';
        var fonts =        '[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';
        this.regexList = [
            { regex: SyntaxHighlighter.regexLib.multiLineCComments,        css: 'comments' },    // multiline comments
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,        css: 'string' },    // double quoted strings
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,        css: 'string' },    // single quoted strings
            { regex: /\#[a-fA-F0-9]{3,6}/g,                                css: 'value' },        // html colors
            { regex: /(-?\d+)(\.\d+)?(px|em|pt|\:|\%|)/g,                css: 'value' },        // sizes
            { regex: /!important/g,                                        css: 'color3' },    // !important
            { regex: new RegExp(getKeywordsCSS(keywords), 'gm'),        css: 'keyword' },    // keywords
            { regex: new RegExp(getValuesCSS(values), 'g'),                css: 'value' },        // values
            { regex: new RegExp(this.getKeywords(fonts), 'g'),            css: 'color1' }        // fonts
            ];
        this.forHtmlScript({
            left: /(&lt;|<)\s*style.*?(&gt;|>)/gi,
            right: /(&lt;|<)\/\s*style\s*(&gt;|>)/gi
            });
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['css'];
    SyntaxHighlighter.brushes.CSS = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        var keywords =    'abs addr and ansichar ansistring array as asm begin boolean byte cardinal ' +
                        'case char class comp const constructor currency destructor div do double ' +
                        'downto else end except exports extended false file finalization finally ' +
                        'for function goto if implementation in inherited int64 initialization ' +
                        'integer interface is label library longint longword mod nil not object ' +
                        'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended ' +
                        'pint64 pointer private procedure program property pshortstring pstring ' +
                        'pvariant pwidechar pwidestring protected public published raise real real48 ' +
                        'record repeat set shl shortint shortstring shr single smallint string then ' +
                        'threadvar to true try type unit until uses val var varirnt while widechar ' +
                        'widestring with word write writeln xor';
        this.regexList = [
            { regex: /\(\*[\s\S]*?\*\)/gm,                                css: 'comments' },      // multiline comments (* *)
            { regex: /{(?!\$)[\s\S]*?}/gm,                                css: 'comments' },      // multiline comments { }
            { regex: SyntaxHighlighter.regexLib.singleLineCComments,    css: 'comments' },      // one line
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,        css: 'string' },        // strings
            { regex: /\{\$[a-zA-Z]+ .+\}/g,                                css: 'color1' },        // compiler Directives and Region tags
            { regex: /\b[\d\.]+\b/g,                                    css: 'value' },            // numbers 12345
            { regex: /\$[a-zA-Z0-9]+\b/g,                                css: 'value' },            // numbers $F5D3
            { regex: new RegExp(this.getKeywords(keywords), 'gmi'),        css: 'keyword' }        // keyword
            ];
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['delphi', 'pascal', 'pas'];
    SyntaxHighlighter.brushes.Delphi = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        this.regexList = [
            { regex: /^\+\+\+ .*$/gm,    css: 'color2' },    // new file
            { regex: /^\-\-\- .*$/gm,    css: 'color2' },    // old file
            { regex: /^\s.*$/gm,        css: 'color1' },    // unchanged
            { regex: /^@@.*@@.*$/gm,    css: 'variable' },    // location
            { regex: /^\+.*$/gm,        css: 'string' },    // additions
            { regex: /^\-.*$/gm,        css: 'color3' }        // deletions
            ];
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['diff', 'patch'];
    SyntaxHighlighter.brushes.Diff = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        // Contributed by Jean-Lou Dupont
        // http://jldupont.blogspot.com/2009/06/erlang-syntax-highlighter.html
        // According to: http://erlang.org/doc/reference_manual/introduction.html#1.5
        var keywords = 'after and andalso band begin bnot bor bsl bsr bxor '+
            'case catch cond div end fun if let not of or orelse '+
            'query receive rem try when xor'+
            // additional
            ' module export import define';
        this.regexList = [
            { regex: new RegExp("[A-Z][A-Za-z0-9_]+", 'g'),             css: 'constants' },
            { regex: new RegExp("\\%.+", 'gm'),                         css: 'comments' },
            { regex: new RegExp("\\?[A-Za-z0-9_]+", 'g'),                 css: 'preprocessor' },
            { regex: new RegExp("[a-z0-9_]+:[a-z0-9_]+", 'g'),             css: 'functions' },
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,        css: 'string' },
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,        css: 'string' },
            { regex: new RegExp(this.getKeywords(keywords),    'gm'),        css: 'keyword' }
            ];
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['erl', 'erlang'];
    SyntaxHighlighter.brushes.Erland = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        // Contributed by Andres Almiray
        // http://jroller.com/aalmiray/entry/nice_source_code_syntax_highlighter
        var keywords =    'as assert break case catch class continue def default do else extends finally ' +
                        'if in implements import instanceof interface new package property return switch ' +
                        'throw throws try while public protected private static';
        var types    =  'void boolean byte char short int long float double';
        var constants = 'null';
        var methods   = 'allProperties count get size '+
                        'collect each eachProperty eachPropertyName eachWithIndex find findAll ' +
                        'findIndexOf grep inject max min reverseEach sort ' +
                        'asImmutable asSynchronized flatten intersect join pop reverse subMap toList ' +
                        'padRight padLeft contains eachMatch toCharacter toLong toUrl tokenize ' +
                        'eachFile eachFileRecurse eachB yte eachLine readBytes readLine getText ' +
                        'splitEachLine withReader append encodeBase64 decodeBase64 filterLine ' +
                        'transformChar transformLine withOutputStream withPrintWriter withStream ' +
                        'withStreams withWriter withWriterAppend write writeLine '+
                        'dump inspect invokeMethod print println step times upto use waitForOrKill '+
                        'getText';
        this.regexList = [
            { regex: SyntaxHighlighter.regexLib.singleLineCComments,                css: 'comments' },        // one line comments
            { regex: SyntaxHighlighter.regexLib.multiLineCComments,                    css: 'comments' },        // multiline comments
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,                    css: 'string' },        // strings
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,                    css: 'string' },        // strings
            { regex: /""".*"""/g,                                                    css: 'string' },        // GStrings
            { regex: new RegExp('\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b', 'gi'),    css: 'value' },            // numbers
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),                    css: 'keyword' },        // goovy keyword
            { regex: new RegExp(this.getKeywords(types), 'gm'),                        css: 'color1' },        // goovy/java type
            { regex: new RegExp(this.getKeywords(constants), 'gm'),                    css: 'constants' },        // constants
            { regex: new RegExp(this.getKeywords(methods), 'gm'),                    css: 'functions' }        // methods
            ];
        this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);
    }
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['groovy'];
    SyntaxHighlighter.brushes.Groovy = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        var keywords =    'abstract assert boolean break byte case catch char class const ' +
                        'continue default do double else enum extends ' +
                        'false final finally float for goto if implements import ' +
                        'instanceof int interface long native new null ' +
                        'package private protected public return ' +
                        'short static strictfp super switch synchronized this throw throws true ' +
                        'transient try void volatile while';
        this.regexList = [
            { regex: SyntaxHighlighter.regexLib.singleLineCComments,    css: 'comments' },        // one line comments
            { regex: /\/\*([^\*][\s\S]*)?\*\//gm,                        css: 'comments' },         // multiline comments
            { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm,                    css: 'preprocessor' },    // documentation comments
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,        css: 'string' },        // strings
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,        css: 'string' },        // strings
            { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi,                css: 'value' },            // numbers
            { regex: /(?!\@interface\b)\@[\$\w]+\b/g,                    css: 'color1' },        // annotation @anno
            { regex: /\@interface\b/g,                                    css: 'color2' },        // @interface keyword
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),        css: 'keyword' }        // java keyword
            ];
        this.forHtmlScript({
            left    : /(&lt;|<)%[@!=]?/g,
            right    : /%(&gt;|>)/g
        });
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['java'];
    SyntaxHighlighter.brushes.Java = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        // Contributed by Patrick Webster
        // http://patrickwebster.blogspot.com/2009/04/javafx-brush-for-syntaxhighlighter.html
        var datatypes =    'Boolean Byte Character Double Duration '
                        + 'Float Integer Long Number Short String Void'
                        ;
        var keywords = 'abstract after and as assert at before bind bound break catch class '
                        + 'continue def delete else exclusive extends false finally first for from '
                        + 'function if import in indexof init insert instanceof into inverse last '
                        + 'lazy mixin mod nativearray new not null on or override package postinit '
                        + 'protected public public-init public-read replace return reverse sizeof '
                        + 'step super then this throw true try tween typeof var where while with '
                        + 'attribute let private readonly static trigger'
                        ;
        this.regexList = [
            { regex: SyntaxHighlighter.regexLib.singleLineCComments,    css: 'comments' },
            { regex: SyntaxHighlighter.regexLib.multiLineCComments,        css: 'comments' },
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,        css: 'string' },
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,        css: 'string' },
            { regex: /(-?\.?)(\b(\d*\.?\d+|\d+\.?\d*)(e[+-]?\d+)?|0x[a-f\d]+)\b\.?/gi, css: 'color2' },    // numbers
            { regex: new RegExp(this.getKeywords(datatypes), 'gm'),        css: 'variable' },    // datatypes
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),        css: 'keyword' }
        ];
        this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['jfx', 'javafx'];
    SyntaxHighlighter.brushes.JavaFX = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        var keywords =    'break case catch continue ' +
                        'default delete do else false  ' +
                        'for function if in instanceof ' +
                        'new null return super switch ' +
                        'this throw true try typeof var while with'
                        ;
        var r = SyntaxHighlighter.regexLib;
        this.regexList = [
            { regex: r.multiLineDoubleQuotedString,                    css: 'string' },            // double quoted strings
            { regex: r.multiLineSingleQuotedString,                    css: 'string' },            // single quoted strings
            { regex: r.singleLineCComments,                            css: 'comments' },            // one line comments
            { regex: r.multiLineCComments,                            css: 'comments' },            // multiline comments
            { regex: /\s*#.*/gm,                                    css: 'preprocessor' },        // preprocessor tags like #region and #endregion
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),    css: 'keyword' }            // keywords
            ];
        this.forHtmlScript(r.scriptScriptTags);
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['js', 'jscript', 'javascript'];
    SyntaxHighlighter.brushes.JScript = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        // Contributed by David Simmons-Duffin and Marty Kube
        var funcs =
            'abs accept alarm atan2 bind binmode chdir chmod chomp chop chown chr ' +
            'chroot close closedir connect cos crypt defined delete each endgrent ' +
            'endhostent endnetent endprotoent endpwent endservent eof exec exists ' +
            'exp fcntl fileno flock fork format formline getc getgrent getgrgid ' +
            'getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr ' +
            'getnetbyname getnetent getpeername getpgrp getppid getpriority ' +
            'getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid ' +
            'getservbyname getservbyport getservent getsockname getsockopt glob ' +
            'gmtime grep hex index int ioctl join keys kill lc lcfirst length link ' +
            'listen localtime lock log lstat map mkdir msgctl msgget msgrcv msgsnd ' +
            'oct open opendir ord pack pipe pop pos print printf prototype push ' +
            'quotemeta rand read readdir readline readlink readpipe recv rename ' +
            'reset reverse rewinddir rindex rmdir scalar seek seekdir select semctl ' +
            'semget semop send setgrent sethostent setnetent setpgrp setpriority ' +
            'setprotoent setpwent setservent setsockopt shift shmctl shmget shmread ' +
            'shmwrite shutdown sin sleep socket socketpair sort splice split sprintf ' +
            'sqrt srand stat study substr symlink syscall sysopen sysread sysseek ' +
            'system syswrite tell telldir time times tr truncate uc ucfirst umask ' +
            'undef unlink unpack unshift utime values vec wait waitpid warn write ' +
            // feature
            'say';
        var keywords =
            'bless caller continue dbmclose dbmopen die do dump else elsif eval exit ' +
            'for foreach goto if import last local my next no our package redo ref ' +
            'require return sub tie tied unless untie until use wantarray while ' +
            // feature
            'given when default ' +
            // Try::Tiny
            'try catch finally ' +
            // Moose
            'has extends with before after around override augment';
        this.regexList = [
            { regex: /(<<|&lt;&lt;)((\w+)|(['"])(.+?)\4)[\s\S]+?\n\3\5\n/g,    css: 'string' },    // here doc (maybe html encoded)
            { regex: /#.*$/gm,                                        css: 'comments' },
            { regex: /^#!.*\n/g,                                    css: 'preprocessor' },    // shebang
            { regex: /-?\w+(?=\s*=(>|&gt;))/g,    css: 'string' }, // fat comma
            // is this too much?
            { regex: /\bq[qwxr]?\([\s\S]*?\)/g,    css: 'string' }, // quote-like operators ()
            { regex: /\bq[qwxr]?\{[\s\S]*?\}/g,    css: 'string' }, // quote-like operators {}
            { regex: /\bq[qwxr]?\[[\s\S]*?\]/g,    css: 'string' }, // quote-like operators []
            { regex: /\bq[qwxr]?(<|&lt;)[\s\S]*?(>|&gt;)/g,    css: 'string' }, // quote-like operators <>
            { regex: /\bq[qwxr]?([^\w({<[])[\s\S]*?\1/g,    css: 'string' }, // quote-like operators non-paired
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,    css: 'string' },
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,    css: 'string' },
            // currently ignoring single quote package separator and utf8 names
            { regex: /(?:&amp;|[$@%*]|\$#)[a-zA-Z_](\w+|::)*/g,           css: 'variable' },
            { regex: /\b__(?:END|DATA)__\b[\s\S]*$/g,                css: 'comments' },
            { regex: /(^|\n)=\w[\s\S]*?(\n=cut\s*\n|$)/g,                css: 'comments' },        // pod
            { regex: new RegExp(this.getKeywords(funcs), 'gm'),        css: 'functions' },
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),    css: 'keyword' }
        ];
        this.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags);
    }
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases        = ['perl', 'Perl', 'pl'];
    SyntaxHighlighter.brushes.Perl = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        var funcs    =    'abs acos acosh addcslashes addslashes ' +
                        'array_change_key_case array_chunk array_combine array_count_values array_diff '+
                        'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+
                        'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+
                        'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+
                        'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+
                        'array_push array_rand array_reduce array_reverse array_search array_shift '+
                        'array_slice array_splice array_sum array_udiff array_udiff_assoc '+
                        'array_udiff_uassoc array_uintersect array_uintersect_assoc '+
                        'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+
                        'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+
                        'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+
                        'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+
                        'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+
                        'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+
                        'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+
                        'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+
                        'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+
                        'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+
                        'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+
                        'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+
                        'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+
                        'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+
                        'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+
                        'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+
                        'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+
                        'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+
                        'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+
                        'parse_ini_file parse_str parse_url passthru pathinfo print readlink realpath rewind rewinddir rmdir '+
                        'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+
                        'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+
                        'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+
                        'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+
                        'strtoupper strtr strval substr substr_compare';
        var keywords =    'abstract and array as break case catch cfunction class clone const continue declare default die do ' +
                        'else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach ' +
                        'function global goto if implements include include_once interface instanceof insteadof namespace new ' +
                        'old_function or private protected public return require require_once static switch ' +
                        'trait throw try use var while xor ';
        var constants    = '__FILE__ __LINE__ __METHOD__ __FUNCTION__ __CLASS__';
        this.regexList = [
            { regex: SyntaxHighlighter.regexLib.singleLineCComments,    css: 'comments' },            // one line comments
            { regex: SyntaxHighlighter.regexLib.multiLineCComments,        css: 'comments' },            // multiline comments
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,        css: 'string' },            // double quoted strings
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,        css: 'string' },            // single quoted strings
            { regex: /\$\w+/g,                                            css: 'variable' },            // variables
            { regex: new RegExp(this.getKeywords(funcs), 'gmi'),        css: 'functions' },            // common functions
            { regex: new RegExp(this.getKeywords(constants), 'gmi'),    css: 'constants' },            // constants
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),        css: 'keyword' }            // keyword
            ];
        this.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags);
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['php'];
    SyntaxHighlighter.brushes.Php = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['text', 'plain'];
    SyntaxHighlighter.brushes.Plain = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        // Contributed by Joel 'Jaykul' Bennett, http://PoshCode.org | http://HuddledMasses.org
        var keywords =    'while validateset validaterange validatepattern validatelength validatecount ' +
                        'until trap switch return ref process param parameter in if global: '+
                        'function foreach for finally filter end elseif else dynamicparam do default ' +
                        'continue cmdletbinding break begin alias \\? % #script #private #local #global '+
                        'mandatory parametersetname position valuefrompipeline ' +
                        'valuefrompipelinebypropertyname valuefromremainingarguments helpmessage ';
        var operators =    ' and as band bnot bor bxor casesensitive ccontains ceq cge cgt cle ' +
                        'clike clt cmatch cne cnotcontains cnotlike cnotmatch contains ' +
                        'creplace eq exact f file ge gt icontains ieq ige igt ile ilike ilt ' +
                        'imatch ine inotcontains inotlike inotmatch ireplace is isnot le like ' +
                        'lt match ne not notcontains notlike notmatch or regex replace wildcard';
        var verbs =        'write where wait use update unregister undo trace test tee take suspend ' +
                        'stop start split sort skip show set send select scroll resume restore ' +
                        'restart resolve resize reset rename remove register receive read push ' +
                        'pop ping out new move measure limit join invoke import group get format ' +
                        'foreach export expand exit enter enable disconnect disable debug cxnew ' +
                        'copy convertto convertfrom convert connect complete compare clear ' +
                        'checkpoint aggregate add';
        // I can't find a way to match the comment based help in multi-line comments, because SH won't highlight in highlights, and javascript doesn't support lookbehind
        var commenthelp = ' component description example externalhelp forwardhelpcategory forwardhelptargetname forwardhelptargetname functionality inputs link notes outputs parameter remotehelprunspace role synopsis';
        this.regexList = [
            { regex: new RegExp('^\\s*#[#\\s]*\\.('+this.getKeywords(commenthelp)+').*$', 'gim'),            css: 'preprocessor help bold' },        // comment-based help
            { regex: SyntaxHighlighter.regexLib.singleLinePerlComments,                                        css: 'comments' },                        // one line comments
            { regex: /(&lt;|<)#[\s\S]*?#(&gt;|>)/gm,                                                        css: 'comments here' },                    // multi-line comments
            { regex: new RegExp('@"\\n[\\s\\S]*?\\n"@', 'gm'),                                                css: 'script string here' },            // double quoted here-strings
            { regex: new RegExp("@'\\n[\\s\\S]*?\\n'@", 'gm'),                                                css: 'script string single here' },        // single quoted here-strings
            { regex: new RegExp('"(?:\\$\\([^\\)]*\\)|[^"]|`"|"")*[^`]"','g'),                                css: 'string' },                        // double quoted strings
            { regex: new RegExp("'(?:[^']|'')*'", 'g'),                                                        css: 'string single' },                    // single quoted strings
            { regex: new RegExp('[\\$|@|@@](?:(?:global|script|private|env):)?[A-Z0-9_]+', 'gi'),            css: 'variable' },                        // $variables
            { regex: new RegExp('(?:\\b'+verbs.replace(/ /g, '\\b|\\b')+')-[a-zA-Z_][a-zA-Z0-9_]*', 'gmi'),    css: 'functions' },                        // functions and cmdlets
            { regex: new RegExp(this.getKeywords(keywords), 'gmi'),                                            css: 'keyword' },                        // keywords
            { regex: new RegExp('-'+this.getKeywords(operators), 'gmi'),                                    css: 'operator value' },                // operators
            { regex: new RegExp('\\[[A-Z_\\[][A-Z0-9_. `,\\[\\]]*\\]', 'gi'),                                css: 'constants' },                        // .Net [Type]s
            { regex: new RegExp('\\s+-(?!'+this.getKeywords(operators)+')[a-zA-Z_][a-zA-Z0-9_]*', 'gmi'),    css: 'color1' },                        // parameters
        ];
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['powershell', 'ps', 'posh'];
    SyntaxHighlighter.brushes.PowerShell = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        // Contributed by Gheorghe Milas and Ahmad Sherif
        var keywords =  'and assert break class continue def del elif else ' +
                        'except exec finally for from global if import in is ' +
                        'lambda not or pass print raise return try yield while';
        var funcs = '__import__ abs all any apply basestring bin bool buffer callable ' +
                    'chr classmethod cmp coerce compile complex delattr dict dir ' +
                    'divmod enumerate eval execfile file filter float format frozenset ' +
                    'getattr globals hasattr hash help hex id input int intern ' +
                    'isinstance issubclass iter len list locals long map max min next ' +
                    'object oct open ord pow print property range raw_input reduce ' +
                    'reload repr reversed round set setattr slice sorted staticmethod ' +
                    'str sum super tuple type type unichr unicode vars xrange zip';
        var special =  'None True False self cls class_';
        this.regexList = [
                { regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' },
                { regex: /^\s*@\w+/gm,                                         css: 'decorator' },
                { regex: /(['\"]{3})([^\1])*?\1/gm,                         css: 'comments' },
                { regex: /"(?!")(?:\.|\\\"|[^\""\n])*"/gm,                     css: 'string' },
                { regex: /'(?!')(?:\.|(\\\')|[^\''\n])*'/gm,                 css: 'string' },
                { regex: /\+|\-|\*|\/|\%|=|==/gm,                             css: 'keyword' },
                { regex: /\b\d+\.?\w*/g,                                     css: 'value' },
                { regex: new RegExp(this.getKeywords(funcs), 'gmi'),        css: 'functions' },
                { regex: new RegExp(this.getKeywords(keywords), 'gm'),         css: 'keyword' },
                { regex: new RegExp(this.getKeywords(special), 'gm'),         css: 'color1' }
                ];
        this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['py', 'python'];
    SyntaxHighlighter.brushes.Python = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        // Contributed by Erik Peterson.
        var keywords =    'alias and BEGIN begin break case class def define_method defined do each else elsif ' +
                        'END end ensure false for if in module new next nil not or raise redo rescue retry return ' +
                        'self super then throw true undef unless until when while yield';
        var builtins =    'Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload ' +
                        'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol ' +
                        'ThreadGroup Thread Time TrueClass';
        this.regexList = [
            { regex: SyntaxHighlighter.regexLib.singleLinePerlComments,    css: 'comments' },        // one line comments
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,        css: 'string' },        // double quoted strings
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,        css: 'string' },        // single quoted strings
            { regex: /\b[A-Z0-9_]+\b/g,                                    css: 'constants' },        // constants
            { regex: /:[a-z][A-Za-z0-9_]*/g,                            css: 'color2' },        // symbols
            { regex: /(\$|@@|@)\w+/g,                                    css: 'variable bold' },    // $global, @instance, and @@class variables
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),        css: 'keyword' },        // keywords
            { regex: new RegExp(this.getKeywords(builtins), 'gm'),        css: 'color1' }            // builtins
            ];
        this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['ruby', 'rails', 'ror', 'rb'];
    SyntaxHighlighter.brushes.Ruby = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        function getKeywordsCSS(str)
        {
            return '\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\b|\\b([a-z_\\*]|\\*|)') + '(?=:)\\b';
        };
        function getValuesCSS(str)
        {
            return '\\b' + str.replace(/ /g, '(?!-)(?!:)\\b|\\b()') + '\:\\b';
        };
        var keywords =    'ascent azimuth background-attachment background-color background-image background-position ' +
                        'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +
                        'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +
                        'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +
                        'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +
                        'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +
                        'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +
                        'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +
                        'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +
                        'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +
                        'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +
                        'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +
                        'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +
                        'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';
        var values =    'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+
                        'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+
                        'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero digits disc dotted double '+
                        'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+
                        'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+
                        'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+
                        'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+
                        'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+
                        'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+
                        'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+
                        'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+
                        'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+
                        'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+
                        'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';
        var fonts =        '[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';
        var statements        = '!important !default';
        var preprocessor    = '@import @extend @debug @warn @if @for @while @mixin @include';
        var r = SyntaxHighlighter.regexLib;
        this.regexList = [
            { regex: r.multiLineCComments,                                css: 'comments' },        // multiline comments
            { regex: r.singleLineCComments,                                css: 'comments' },        // singleline comments
            { regex: r.doubleQuotedString,                                css: 'string' },        // double quoted strings
            { regex: r.singleQuotedString,                                css: 'string' },        // single quoted strings
            { regex: /\#[a-fA-F0-9]{3,6}/g,                                css: 'value' },            // html colors
            { regex: /\b(-?\d+)(\.\d+)?(px|em|pt|\:|\%|)\b/g,            css: 'value' },            // sizes
            { regex: /\$\w+/g,                                            css: 'variable' },        // variables
            { regex: new RegExp(this.getKeywords(statements), 'g'),        css: 'color3' },        // statements
            { regex: new RegExp(this.getKeywords(preprocessor), 'g'),    css: 'preprocessor' },    // preprocessor
            { regex: new RegExp(getKeywordsCSS(keywords), 'gm'),        css: 'keyword' },        // keywords
            { regex: new RegExp(getValuesCSS(values), 'g'),                css: 'value' },            // values
            { regex: new RegExp(this.getKeywords(fonts), 'g'),            css: 'color1' }            // fonts
            ];
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['sass', 'scss'];
    SyntaxHighlighter.brushes.Sass = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        // Contributed by Yegor Jbanov and David Bernard.
        var keywords =    'val sealed case def true trait implicit forSome import match object null finally super ' +
                        'override try lazy for var catch throw type extends class while with new final yield abstract ' +
                        'else do if return protected private this package false';
        var keyops =    '[_:=><%#@]+';
        this.regexList = [
            { regex: SyntaxHighlighter.regexLib.singleLineCComments,            css: 'comments' },    // one line comments
            { regex: SyntaxHighlighter.regexLib.multiLineCComments,                css: 'comments' },    // multiline comments
            { regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString,    css: 'string' },    // multi-line strings
            { regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,    css: 'string' },    // double-quoted string
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,                css: 'string' },    // strings
            { regex: /0x[a-f0-9]+|\d+(\.\d+)?/gi,                                css: 'value' },        // numbers
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),                css: 'keyword' },    // keywords
            { regex: new RegExp(keyops, 'gm'),                                    css: 'keyword' }    // scala keyword
            ];
    }
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['scala'];
    SyntaxHighlighter.brushes.Scala = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        var funcs    =    'abs avg case cast coalesce convert count current_timestamp ' +
                        'current_user day isnull left lower month nullif replace right ' +
                        'session_user space substring sum system_user upper user year';
        var keywords =    'absolute action add after alter as asc at authorization begin bigint ' +
                        'binary bit by cascade char character check checkpoint close collate ' +
                        'column commit committed connect connection constraint contains continue ' +
                        'create cube current current_date current_time cursor database date ' +
                        'deallocate dec decimal declare default delete desc distinct double drop ' +
                        'dynamic else end end-exec escape except exec execute false fetch first ' +
                        'float for force foreign forward free from full function global goto grant ' +
                        'group grouping having hour ignore index inner insensitive insert instead ' +
                        'int integer intersect into is isolation key last level load local max min ' +
                        'minute modify move name national nchar next no numeric of off on only ' +
                        'open option order out output partial password precision prepare primary ' +
                        'prior privileges procedure public read real references relative repeatable ' +
                        'restrict return returns revoke rollback rollup rows rule schema scroll ' +
                        'second section select sequence serializable set size smallint static ' +
                        'statistics table temp temporary then time timestamp to top transaction ' +
                        'translation trigger true truncate uncommitted union unique update values ' +
                        'varchar varying view when where with work';
        var operators =    'all and any between cross in join like not null or outer some';
        this.regexList = [
            { regex: /--(.*)$/gm,                                                css: 'comments' },            // one line and multiline comments
            { regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,    css: 'string' },            // double quoted strings
            { regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString,    css: 'string' },            // single quoted strings
            { regex: new RegExp(this.getKeywords(funcs), 'gmi'),                css: 'color2' },            // functions
            { regex: new RegExp(this.getKeywords(operators), 'gmi'),            css: 'color1' },            // operators and such
            { regex: new RegExp(this.getKeywords(keywords), 'gmi'),                css: 'keyword' }            // keyword
            ];
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['sql'];
    SyntaxHighlighter.brushes.Sql = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        var keywords =    'AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto ' +
                        'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate ' +
                        'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType ' +
                        'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each ' +
                        'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend ' +
                        'Function Get GetType GoSub GoTo Handles If Implements Imports In ' +
                        'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module ' +
                        'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing ' +
                        'NotInheritable NotOverridable Object On Option Optional Or OrElse ' +
                        'Overloads Overridable Overrides ParamArray Preserve Private Property ' +
                        'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume ' +
                        'Return Select Set Shadows Shared Short Single Static Step Stop String ' +
                        'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until ' +
                        'Variant When While With WithEvents WriteOnly Xor';
        this.regexList = [
            { regex: /'.*$/gm,                                        css: 'comments' },            // one line comments
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,    css: 'string' },            // strings
            { regex: /^\s*#.*$/gm,                                    css: 'preprocessor' },        // preprocessor tags like #region and #endregion
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),    css: 'keyword' }            // vb keyword
            ];
        this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['vb', 'vbnet'];
    SyntaxHighlighter.brushes.Vb = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
;(function()
{
    // CommonJS
    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
    function Brush()
    {
        function process(match, regexInfo)
        {
            var constructor = SyntaxHighlighter.Match,
                code = match[0],
                tag = new XRegExp('(&lt;|<)[\\s\\/\\?]*(?<name>[:\\w-\\.]+)', 'xg').exec(code),
                result = []
                ;
            if (match.attributes != null)
            {
                var attributes,
                    regex = new XRegExp('(?<name> [\\w:\\-\\.]+)' +
                                        '\\s*=\\s*' +
                                        '(?<value> ".*?"|\'.*?\'|\\w+)',
                                        'xg');
                while ((attributes = regex.exec(code)) != null)
                {
                    result.push(new constructor(attributes.name, match.index + attributes.index, 'color1'));
                    result.push(new constructor(attributes.value, match.index + attributes.index + attributes[0].indexOf(attributes.value), 'string'));
                }
            }
            if (tag != null)
                result.push(
                    new constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword')
                );
            return result;
        }
        this.regexList = [
            { regex: new XRegExp('(\\&lt;|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\\&gt;|>)', 'gm'),            css: 'color2' },    // <![ ... [ ... ]]>
            { regex: SyntaxHighlighter.regexLib.xmlComments,                                                css: 'comments' },    // <!-- ... -->
            { regex: new XRegExp('(&lt;|<)[\\s\\/\\?]*(\\w+)(?<attributes>.*?)[\\s\\/\\?]*(&gt;|>)', 'sg'), func: process }
        ];
    };
    Brush.prototype    = new SyntaxHighlighter.Highlighter();
    Brush.aliases    = ['xml', 'xhtml', 'xslt', 'html'];
    SyntaxHighlighter.brushes.Xml = Brush;
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
Diff truncated after the above file
ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/SyntaxHighlighter/shCoreDefault.css ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/codemirror/codemirror.css ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/codemirror/codemirror.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/adapters/mootools-adapter.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/adapters/mootools-adapter.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/adapters/prototype-adapter.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/adapters/prototype-adapter.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/adapters/standalone-framework.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/adapters/standalone-framework.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/highcharts-more.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/highcharts-more.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/highcharts.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/highcharts.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/annotations.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/annotations.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/canvas-tools.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/canvas-tools.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/data.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/data.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/drilldown.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/drilldown.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/exporting.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/exporting.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/funnel.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/funnel.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/heatmap.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/heatmap.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/map.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/map.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/no-data-to-display.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/modules/no-data-to-display.src.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/themes/dark-blue.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/themes/dark-green.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/themes/gray.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/themes/grid.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/highcharts/themes/skies.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/jquery-1.10.2.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/jquery-1.10.2.min.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/jquery-1.10.2.min.map ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/snapscreen/UEditorSnapscreen.exe ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/font/vjs.eot ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/font/vjs.svg ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/font/vjs.ttf ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/font/vjs.woff ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/video-js.css ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/video-js.min.css ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/video-js.swf ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/video.dev.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/video-js/video.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/Uploader.swf ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.css ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.custom.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.custom.min.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.flashonly.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.flashonly.min.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.html5only.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.html5only.min.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.min.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.withoutimage.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/webuploader/webuploader.withoutimage.min.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/zeroclipboard/ZeroClipboard.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/zeroclipboard/ZeroClipboard.min.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/third-party/zeroclipboard/ZeroClipboard.swf ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/ueditor.all.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/ueditor.all.min.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/ueditor.config.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/ueditor.parse.js ManagementNTTravel/guns-admin/src/main/webapp/static/js/ueditor/1.4.3/ueditor.parse.min.js