精华内容
下载资源
问答
  • Atom是Github打造的一款开源代码编辑器支持 macOS、Windows和Linux操作系统,支持Node.js所写的插件,并内置由Github提供的Git版本控制系统,也可被当作 IDE 使用。 Atom的特色在于它极其丰富的可定制性,以及...

    俗话说,磨刀不误砍柴工,程序员的代码编辑器,就如同学生的笔,医生的手术刀一样,是每天都离不开的必备工具。因此,一个趁手的编辑器对你的编程学习至关重要。

    今天,给大家推荐8款最受程序员喜爱的代码编辑器,让我们来了解一下吧!

    1、Atom

    在这里插入图片描述
    Atom是Github打造的一款开源代码编辑器,支持 macOS、Windows和Linux操作系统,支持Node.js所写的插件,并内置由Github提供的Git版本控制系统,也可被当作 IDE 使用。

    Atom的特色在于它极其丰富的可定制性,以及赏心悦目的界面。特别是自带的代码缩略图和代码折叠功能,不管是用Python还是做前端都非常好用。

    2、EMACS

    在这里插入图片描述
    EMACS的强大之处在于已经超出了编辑器的范畴,搞成了大的平台,很多开发人员在上面直接都以他为入口完成各种功能需求了。

    主要有如下特性:

    上网浏览网页看视频,收发邮件

    调试程序

    玩游戏,计算器,

    文件比较

    记日记,目录管理

    3、Notepad++

    在这里插入图片描述
    Notepad++被称为是JAVA程序员的最爱,几乎可以替代记事本的最佳编辑器,很多强大的功能集于一身。可以在Windows操作系统下编辑,有完整的中文化接口支持多国语言编写的功能(UTF8技术),支持自定义语言。该程序还支持自动完成某些编程语言的API子集。

    4、Sublime Text

    在这里插入图片描述
    Sublime 是一种比Notepad++功能强大的多编辑器,现在很多前端开发人员都很喜欢,虽然代码不开源,里面需要拿到注册码才能使用,但是它几乎涵盖了notepad++的所有特性,界面美观功能全的编辑器。

    主要有如下特性:

    跨平台,几乎在各个操作系统上都能使用

    查找和替换功能做得非常友善

    不仅支持多种语言关键字的高亮提示,还能针对编程语言编译错误给提示

    支持插件功能

    能够支持多种布局方式

    5、Brackets

    在这里插入图片描述
    Brackets是一款为Linux开发者设计的开源代码编辑器,使用Brackets写代码,你不会被任何事情所打断。比如在写HTML代码时,即便你没有保存代码也可以及时预览你的Web页面效果。你也可以使用Theseus来检查变量,Brackets默认提供一种主题,当然你也可以在扩展中心获取更多的主题。

    6、Vim

    在这里插入图片描述
    Vim 是一款高度可定制的文本编辑器,可以用于包括编写代码在内的各种文本创建与编辑工作。

    Vim 的特色在于,它可以仅仅通过键盘来在插入、执行命令、文本批量处理等模式之中切换。这就使得 Vim 可以不用进行菜单或者鼠标操作,并且最小化组合键的操作。对文字录入员或者程序员可以大大增强速度和效率。

    7、Visual Studio Code

    在这里插入图片描述
    Visual Studio Code是目前最受欢迎的代码编辑器。Visual Studio Code是一个由微软公司发布的免费开源且跨平台的代码编辑器,刚一问世,它就以强大的功能、美观的界面、高度的可定制性,被誉为微软的良心之作。

    Visual StudioCode 内置了代码调试、Git 版本控制、代码高亮、智能代码补完、代码片段管理、代码重构等丰富的功能。此外,VS Code 的用户个性配置选项也很丰富,能方便地修改主题颜色、键盘快捷方式等各种属性和参数,还在内置了扩展程序管理的功能。

    8、Eclipse

    在这里插入图片描述
    Eclipse以一种友好的集成开发环境,为各种类型的用户,提供了一系列针对开发Web和Java应用的可用工具。虽然专注于Java,但是也支持其他各种编程语言,如C ++、JavaScript、PHP、C、Perl、Fortran、Ruby、Python,甚至是COBOL。它还包括了适用于各种语言、向导和内置应用程序以简化开发的源代码和图形编辑器,以及支持部署、运行和测试app的工具和API。

    Eclipse提供的插件功能相当丰富,有助于更加简便地创建、集成和使用软件工具,节省时间和金钱。

    那么,你心爱的编辑器是哪一款呢?如果你有其他喜欢的代码编辑器,欢迎在留言区分享给我们~

    想了解更多程序员入门知识,如果你想了解更多,可以加裙八零六,四三五,七零二,会定期为大家分享编程发展趋势、学习资料,助力大家学好编程!

    展开全文
  • UEditor简介 UEditor是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于...135编辑器是一款提供微信公众号文章排版和内容编辑的在线工具,样式丰富,支持...

    UEditor简介

    UEditor是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。

    本文以最新版本的1.4.3.3版本为教程来讲述

    具体文档参见:http://fex.baidu.com/ueditor/

    135编辑器简介

    135编辑器是一款提供微信公众号文章排版和内容编辑的在线工具,样式丰富,支持秒刷、收藏样式和颜色、图片素材编辑、图片水印、一键排版等功能,轻松编辑微信公众号图文。他是一款基于UEditor富文本的编辑器,一共分为两种类型,一种是免费类型的嵌入型,也就是把135编辑器嵌入到UEditor富文本里面的菜单中,还有一种就是收费类型的无缝嵌入,这种会把135编辑器整体嵌入到个人或企业的内容编辑区域,在下图给大家看出来他们的区别。

    免费版:

    免费版

    收费版:

    收费版

    使用优势

    功能UEditor135编辑器
    上传图片需配置上传图片的选项无需配置(上传的图片由135编辑器返回超链接,你无需配置)
    上传视频需配置上传视频的选项无需配置(上传的视频由135编辑器返回超链接,你无需配置)
    上传音乐需配置上传音乐的选项无需配置(上传的音乐由135编辑器返回超链接,你无需配置)
    大多数功能需配置大多数功能的选项无需配置(大多数功能由135编辑器返回超链接,你无需配置)

    安装UEditor

    由于135编辑器是基于UEditor富文本的所以需要先安装UEditor富文本来支持135编辑器的嵌入,此方法只针对于免费使用135编辑器的人群,如果你是要付费使用的话你可以联系135编辑器的人,他们会有专门的技术人员提供技术支持。

    下载UEditor编辑器

    这里我是使用Flask来作为后端程序,如果你使用UEditor官网所指定的程序的话可以直接看UEditor的文档,访问UEditor首页,下载1.4.3.3 PHP UTF-8版本的UEditor,并解压到Flask应用程序的static目录。解压之后的目录结构是这样的:

    |+static/
    | |+ueditor/
    | | |+dialogs/
    | | |+lang/
    | | |+php/ #因为我是Flask,所以这个目录中只有config.json对我有用,我已经把他放到了ueditor目录里面
    | | |+themes/
    | | |+third-party/
    | | |-config.json
    | | |-index.html
    | | |-ueditor.all.js
    | | |-ueditor.all.min.js
    | | |-ueditor.config.js
    | | |-ueditor.parse.js
    | | |-ueditor.parse.min.js

    +代表目录
    -代表文件

    在index.html中加入UEditor:

    因为我是Flask程序,所以需要在templates目录中新建一个index.html的文件,你们可以根据自己语言和框架来选择文件建在那个目录中。

    在index.html文件的head标签中加入下面几行:

    <script type="text/javascript" charset="utf-8" src="{{ url_for('static', filename='ueditor/ueditor.config.js') }}"></script>
    <script type="text/javascript" charset="utf-8" src="{{ url_for('static', filename='ueditor/ueditor.all.min.js') }}"> </script>
    <!--建议手动加在语言,避免在ie下有时因为加载语言失败导致编辑器加载失败-->
    <!--这里加载的语言文件会覆盖你在配置项目里添加的语言类型,比如你在配置项目里配置的是英文,这里加载的中文,那最后就是中文-->
    <script type="text/javascript" charset="utf-8" src="{{ url_for('static', filename='ueditor/lang/zh-cn/zh-cn.js') }}"></script>
    <style>
        .edui-button.edui-for-135editor .edui-button-wrap .edui-button-body .edui-icon{
            background-image: url("http://static.135editor.com/img/icons/editor-135-icon.png") !important;
            background-size: 85%;
            background-position: center;
            background-repeat: no-repeat;
        }
        .edui-default{
            width: 920px;
            margin: 0 auto;
        }
    </style>
    

    在body标签加入:

    <script id="editor" type="text/plain"></script>
    <script type="text/javascript">
        //实例化编辑器
        //建议使用工厂方法getEditor创建和引用编辑器实例,如果在某个闭包下引用该编辑器,直接调用UE.getEditor('editor')就能拿到相关的实例
        var ue = UE.getEditor('editor', {
            serverUrl: "/upload/"
        });
    </script>
    

    请求路径配置:

    UEditor 1.4.2+ 起,推荐使用统一的请求路径,在部署好前端代码后,需要修改 ueditor.config.js 里的 serverUrl 参数(或者初始化时指定,见上面的代码),改成 ‘/upload/’ 。

    UEditor初始化时,会向后端请求配置文件,后端收到请求后返回JSON格式的配置文件。具体实现参照后面的代码。

    详细配置内容参见文档。

    创建Flask应用程序(app.py):
    # -*- coding: utf-8 -*-
     
    from flask import Flask, render_template
     
    app = Flask(__name__)
     
    @app.route('/')
    def index():
        return render_template('index.html')
     
    @app.route('/upload/', methods=['GET', 'POST'])
    def upload():
        pass
     
    if __name__ == '__main__':
        app.run(debug=True)
    

    应用程序运行之后,我们访问 http://localhost:5000/ 就可以看到UEditor编辑器了,上图:
    UEditor编辑器

    UEditor后端请求规范说明

    与后台通信的功能列表:
    • 上传图片
    • 拖放图片上传、粘贴板图片上传
    • word文档图片转存
    • 截图工具上传
    • 上传涂鸦
    • 上传视频
    • 上传附件
    • 在线图片管理
    • 粘贴转存远程图片
    统一请求格式说明:
    • 前端请求通过唯一的后台文件 /upload/ 处理前端的请求
    • /upload/通过GET上的action参数,判断是什么类型的请求
    • 省去不必要的请求,去除涂鸦添加背景的请求,用前端FileReader读取本地图片代替
    • 请求返回数据的格式,常规返回json字符串,数据包含state属性(成功时返回’SUCCESS’,错误* 时返回错误信息)。
    • 请求支持jsonp请求格式,当请求有通过GET方式传callback的参数时,返回json数据前后加上括* 号,再在前面加上callback的值,格式类似这样:
      cb({“key”: “value”})

    详细说明:http://fex-team.github.io/ueditor/#dev-request_specification

    Flask实现后端请求

    获取配置信息

    由于接口升级,编辑器初始化时,首先会向后端请求配置信息,后端收到请求后,返
    回相应的配置信息即可。

    请求参数:
    GET {"action": "config"}
    POST "upfile": File Data
    
    返回格式:
    // 需要支持callback参数,返回jsonp格式
    {
        "imageUrl": "http://localhost/ueditor/php/controller.php?action=uploadimage",
        "imagePath": "/ueditor/php/",
        "imageFieldName": "upfile",
        "imageMaxSize": 2048,
        "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"]
    }
    
    主要功能代码:
    @app.route('/upload/', methods=['GET', 'POST'])
    def upload():
        action = request.args.get('action')
     
        # 解析JSON格式的配置文件
        # 这里使用PHP版本自带的config.json文件
        with open(os.path.join(app.static_folder, 'ueditor', 'php','config.json')) as fp:
            try:
                # 删除 `/**/` 之间的注释
                CONFIG = json.loads(re.sub(r'\/\*.*\*\/', '', fp.read()))
            except:
                CONFIG = {}
     
        if action == 'config':
            # 初始化时,返回配置文件给客户端
            result = CONFIG
     
        return json.dumps(result)
    

    这样的话就不会有什么问题出现了。

    安装135编辑器

    现在可以开始安装135编辑器了,因为笔者没有钱,所以使用的是免费版的135编辑器,所以他是嵌入在UEditor里面的,并且通过笔者不断观察135编辑器的网站和严格的一致性,导致笔者的UEditor和135编辑器的UEditor一模一样,在下面开始分享给大家。

    安装插件

    将插件的两个文件下载到项目ueditor对应的目录里,并将135editor.js加载到自己的网页中

    http://www.135editor.com/js/ueditor/plugins/135editor.js
    http://www.135editor.com/js/ueditor/dialogs/135editor/135EditorDialogPage.html

    加载135editor.js

    在index.html中的body标签中加入135editor.js文件

    <script id="editor" type="text/plain"></script>
    <script type="text/javascript" src="{{ url_for('static',filename='ueditor/plugins/135editor.js') }}"></script>
    <script type="text/javascript">
        //实例化编辑器
        //建议使用工厂方法getEditor创建和引用编辑器实例,如果在某个闭包下引用该编辑器,直接调用UE.getEditor('editor')就能拿到相关的实例
        var ue = UE.getEditor('editor', {
            serverUrl: "/upload/"
        });
    </script>
    
    重写themes目录下的iframe.css文件
    @charset "utf-8";
    html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height: 1.6;background: #FFF;height:100%;}
    * {-webkit-max-logical-width: 100%;margin:0;padding:0;box-sizing: border-box!important;-webkit-box-sizing: border-box!important;}
    body{-webkit-touch-callout:none;position: absolute; width: 100%;margin: 0;padding: 15px !important;font-size:16px;overflow-x:hidden;font-family:'微软雅黑','Microsoft YaHei',Arial,sans-serif;background-color:#FFF;line-height:inherit;height:100%;}
    p{clear:both;margin:0 0;white-space: normal;}
    img{*zoom:1;max-width:100%;*max-width:96%;height:auto !important;}
    iframe{width:100% !important;border:0;background-color:inherit;}
    .vote_area{display:block}
    .vote_iframe{height:100%;width:100%!important;*width:96%!important}
    .qqmusic_iframe{width:100%!important;height:75px;background-color:#fcfcfc;}
    .audio_iframe{width:100%!important;background-color:#fcfcfc;height:82px}
    .blockquote_iframe{width:100%!important;height:64px}
    .blockquote_tips_iframe{width:100%!important;height:42px}
    .video_iframe{background-color:#000;width:100%!important;*width:96%!important;position:static}
    .shopcard_iframe{width:100%!important;height:95px;margin:14px 0}
    .topic_iframe{width:100%!important;height:118px;margin:14px 0}
    .weapp_app_iframe{height:330px;margin:14px 0}
    
    body{cursor:text;}
    a{color:#607fa6;text-decoration:none}
    .guide{background-repeat:no-repeat;background-image: url(https://image.135editor.com/files/users/0/1/201708/xvCbQwOV_Ofmg.png);}
    [contenteditable] {  caret-color: red;}
    ::-webkit-scrollbar {width:6px;height:6px;background: #f1f1f1;}
    ::-webkit-scrollbar-thumb {-webkit-box-shadow: inset 0 0 16px #c1c1c1;}
    ::-webkit-input-placeholder {color:    #ddd;}
    * {
    outline:0 none !important; blr:expression(this.onFocus=this.blur());
    }
    *:focus {
        outline: none !important;
    }
    
    li.placeholder {
        position: relative;list-style-type: none;
        margin: 0;
        padding: 0;
        border: none;
    }
    li.placeholder:before {
        position: absolute;
        content: " ";
        width: 0;
        height: 0;
        margin-top: -5px;
        left: 0px;
        top: -4px;
        border: 8px solid transparent;
        border-left-color: red;
        border-right: none;
    }
    .dragged {
        position: absolute !important;
        top: 0;
        opacity: 0.5;
        z-index: 2000;
    }
    
    .hiddenIn135{display:none !important;visibility: hidden !important;}.showIn135{display:initial !important;opacity: 1 !important;    visibility: visible !important;}
    .hoverimg:hover{background:#000;}
    
    blockquote{margin:0;padding-left:10px;border-left:3px solid #DBDBDB;}
    
    ol,ul,dl
    {
    	/* IE7: reset rtl list margin. (#7334) */
    	*margin-right: 0px;
    	/* preserved spaces for list items with text direction other than the list. (#6249,#8049)*/
    	padding: 0 0 0 30px;
    }
    
    table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd;}
    table{margin-bottom:10px;border-collapse:collapse;display:table;width:100%;margin:0 auto;}
    td,th{word-wrap:break-word;word-break:break-all;padding:5px;border:1px solid #DDD}
    caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center}
    th{border-top:2px solid #BBB;background:#f7f7f7}
    .ue-table-interlace-color-single{background-color:#fcfcfc}
    .ue-table-interlace-color-double{background-color:#f7faff}
     td p{margin:0;padding:0;width:auto;height:auto;}
    
    hr{border: 0px;border-top: 1px solid #ccc;}
    img:hover {z-index:-1;cursor:pointer;}
    pre{
    	white-space: pre-wrap; /* CSS 2.1 */
    	word-wrap: break-word; /* IE7 */
    }
    .marker {
    	background-color: Yellow;
    }
    
    figure {
    	text-align: center;
    	border: solid 1px #ccc;
    	border-radius: 2px;
    	background: rgba(0,0,0,0.05);
    	padding: 10px;
    	margin: 10px 20px;
    	display: inline-block;
    }
    
    figure > figcaption {
    	text-align: center;
    	display: block; /* For IE8 */
    }
    em{font-style: italic;}
    .view{height:100%;position: relative !important;}
    /*.view:after { content: ''; height: 60px; display: block;} */
    ._135editor {border:0 none;padding: 0px;z-index:0;position: relative !important;}
    ._135editor.active,.active{
        z-index: 100;
        outline: 1.5px dashed red !important;
        outline-offset: 2px;
    }
    ._135editor .overActive{
        z-index: 100;
        outline: 1.5px dashed #6085ef !important;
        outline-offset: 2px;
    }
    ._135editor .styleActive{
    	z-index: 100;
        outline: 1.5px dashed #6085ef !important;
        outline-offset: 2px;
    }
    .mark-changed {
        z-index: 101;
        outline: 2px dashed darkturquoise !important;
        outline-offset: 2px;
    }
    /*._135editor.active:before{content: "";z-index: -1;display: block;position: absolute;box-sizing:border-box;width: 102%;left:-1%;height: 100%;border:1px dashed red;}
    .view .active-135item:before {position: absolute;content: ''; left: 0;right: 0;top: 0;bottom: 0; box-sizing: border-box;border: 2px dashed red;margin:-5px;z-index: 1000;}*/
    ._135editor .draghandle{position: absolute;background-color:rgba(200,200,200,0.8);color:#333;cursor: move;top:-30px;right:-5px;padding: 3px 5px;font-size:12px;}
    .view .active-135item{position: relative !important;}
    
    h1,h2,h3,h4,h5,h6{font-weight:400;font-size:16px}
    .hidden{display: none;visibility: hidden;}
    .otf-poptools{ line-height: 24px; padding: 8px;
        border-radius: 0;border: 0 none;color: #FFF;position:absolute;width: 80%;left:15px;background:rgb(103,91,84);}
    .otf-poptools span {
        cursor: pointer;
        margin: 0 5px;
    }
    .slider{height:16px!important;width:auto;position:relative;background-color:#FFF;margin-bottom:5px}
    .slider .complete{height:100%;width:auto;color:#333;font-size:10px;line-height:16px;text-align:center;background-color:#ccc;z-index:2}
    .slider .marker{height:16px;width:12px;cursor:pointer;position:absolute;top:0;left:0;background-color:#999;z-index:3}
    
    
    /** 微信音乐,微信音频的样式 **/
    .db {  display: block;}
    
    qqmusic{
    	min-height: 60px;
        width: 100%;
        background: #ccc;
        margin: 17px 1px 16px 0;
        display: block;
        opacity: 0.9;
        background-image: url('https://image.135editor.com/files/users/0/1/201611/Omfdq9uS_SNXj.png');
        background-size: contain;
        background-position: center;
        background-repeat: no-repeat;
    }
    mpvoice{
        min-height: 90px;
        width: 100%;
        background: #ccc;
        margin: 17px 1px 16px 0;
        display: block;
        opacity: 0.9;
        background-color:#FCFCFC;
        background-image: url('https://by.135editor.com/img/icons/mpvoice.png');
        background-size: auto;
        background-position: left center;
        background-repeat: no-repeat;
    }
    
    覆盖themes的images目录下的所有图片

    百度云链接:https://pan.baidu.com/s/1rriaUhgCeNhlgwfmzTTOJA
    提取码:5j19

    重写ueditor.config.js文件
    /**
     * ueditor完整配置项
     * 可以在这里配置整个编辑器的特性
     */
    /**************************提示********************************
     * 所有被注释的配置项均为UEditor默认值。
     * 修改默认配置请首先确保已经完全明确该参数的真实用途。
     * 主要有两种修改方案,一种是取消此处注释,然后修改成对应参数;另一种是在实例化编辑器时传入对应参数。
     * 当升级编辑器时,可直接使用旧版配置文件替换新版配置文件,不用担心旧版配置文件中因缺少新功能所需的参数而导致脚本报错。
     **************************提示********************************/
    
    (function () {
    
        /**
         * 编辑器资源文件根路径。它所表示的含义是:以编辑器实例化页面为当前路径,指向编辑器资源文件(即dialog等文件夹)的路径。
         * 鉴于很多同学在使用编辑器的时候出现的种种路径问题,此处强烈建议大家使用"相对于网站根目录的相对路径"进行配置。
         * "相对于网站根目录的相对路径"也就是以斜杠开头的形如"/myProject/ueditor/"这样的路径。
         * 如果站点中有多个不在同一层级的页面需要实例化编辑器,且引用了同一UEditor的时候,此处的URL可能不适用于每个页面的编辑器。
         * 因此,UEditor提供了针对不同页面的编辑器可单独配置的根路径,具体来说,在需要实例化编辑器的页面最顶部写上如下代码即可。当然,需要令此处的URL等于对应的配置。
         * window.UEDITOR_HOME_URL = "/xxxx/xxxx/";
         */
        var URL = window.UEDITOR_HOME_URL || getUEBasePath();
    
        /**
         * 配置项主体。注意,此处所有涉及到路径的配置别遗漏URL变量。
         */
        window.UEDITOR_CONFIG = {
    
            //为编辑器实例添加一个路径,这个不能被注释
            UEDITOR_HOME_URL: URL
    
            // 服务器统一请求接口路径
            , serverUrl: URL + "/upload/"
    
            //工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的重新定义
            , toolbars: [[
                'fullscreen', 'source', '|', 'undo', 'redo', '|',
                'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|',
                'rowspacingtop', 'rowspacingbottom', 'lineheight', '|',
                'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|',
                'directionalityltr', 'directionalityrtl', 'indent', '|',
                'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|',
                'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|',
                'simpleupload', 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|',
                'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|',
                'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|',
                'print', 'preview', 'searchreplace', 'drafts', 'help'
            ]]
            //当鼠标放在工具栏上时显示的tooltip提示,留空支持自动多语言配置,否则以配置值为准
            //,labelMap:{
            //    'anchor':'', 'undo':''
            //}
    
            //语言配置项,默认是zh-cn。有需要的话也可以使用如下这样的方式来自动多语言切换,当然,前提条件是lang文件夹下存在对应的语言文件:
            //lang值也可以通过自动获取 (navigator.language||navigator.browserLanguage ||navigator.userLanguage).toLowerCase()
            //,lang:"zh-cn"
            //,langPath:URL +"lang/"
    
            //主题配置项,默认是default。有需要的话也可以使用如下这样的方式来自动多主题切换,当然,前提条件是themes文件夹下存在对应的主题文件:
            //现有如下皮肤:default
            //,theme:'default'
            //,themePath:URL +"themes/"
    
            ,zIndex : 1     //编辑器层级的基数,默认是900
    
            // 针对getAllHtml方法,会在对应的head标签中增加该编码设置。
            ,charset:"utf-8"
    
            //若实例化编辑器的页面手动修改的domain,此处需要设置为true
            //,customDomain:false
    
            //常用配置项目
            //,isShow : true    //默认显示编辑器
    
            ,textarea:'content' // 提交表单时,服务器获取编辑器提交内容的所用的参数,多实例时可以给容器name属性,会将name给定的值最为每个实例的键值,不用每次实例化的时候都设置这个值
    
            //,initialContent:'欢迎使用ueditor!'    //初始化编辑器的内容,也可以通过textarea/script给值,看官网例子
    
            //,autoClearinitialContent:true //是否自动清除编辑器初始内容,注意:如果focus属性设置为true,这个也为真,那么编辑器一上来就会触发导致初始化的内容看不到了
    
            //,focus:false //初始化时,是否让编辑器获得焦点true或false
    
            //如果自定义,最好给p标签如下的行高,要不输入中文时,会有跳动感
            //,initialStyle:'p{line-height:1em}'//编辑器层级的基数,可以用来改变字体等
    
            ,iframeCssUrl: URL + '/themes/iframe.css' //给编辑区域的iframe引入一个css文件
    
            //indentValue
            //首行缩进距离,默认是2em
            //,indentValue:'2em'
    
            // ,initialFrameWidth:1000  //初始化编辑器宽度,默认1000
            // ,initialFrameHeight:800  //初始化编辑器高度,默认320
    
            ,readonly : false //编辑器初始化结束后,编辑区域是否是只读的,默认是false
    
            //,autoClearEmptyNode : true //getContent时,是否删除空的inlineElement节点(包括嵌套的情况)
    
            //启用自动保存
            //,enableAutoSave: true
            //自动保存间隔时间, 单位ms
            ,saveInterval: 60000
    
            //,fullscreen : false //是否开启初始化时即全屏,默认关闭
    
            ,imagePopup:true      //图片操作的浮层开关,默认打开
    
            ,autoSyncData:true //自动同步编辑器要提交的数据
            //,emotionLocalization:false //是否开启表情本地化,默认关闭。若要开启请确保emotion文件夹下包含官网提供的images表情文件夹
    
            //粘贴只保留标签,去除标签所有属性
            //,retainOnlyLabelPasted: false
    
            //,pasteplain:false  //是否默认为纯文本粘贴。false为不使用纯文本粘贴,true为使用纯文本粘贴
            //纯文本粘贴模式下的过滤规则
            //'filterTxtRules' : function(){
            //    function transP(node){
            //        node.tagName = 'p';
            //        node.setStyle();
            //    }
            //    return {
            //        //直接删除及其字节点内容
            //        '-' : 'script style object iframe embed input select',
            //        'p': {$:{}},
            //        'br':{$:{}},
            //        'div':{'$':{}},
            //        'li':{'$':{}},
            //        'caption':transP,
            //        'th':transP,
            //        'tr':transP,
            //        'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP,
            //        'td':function(node){
            //            //没有内容的td直接删掉
            //            var txt = !!node.innerText();
            //            if(txt){
            //                node.parentNode.insertAfter(UE.uNode.createText(' &nbsp; &nbsp;'),node);
            //            }
            //            node.parentNode.removeChild(node,node.innerText())
            //        }
            //    }
            //}()
    
            //,allHtmlEnabled:false //提交到后台的数据是否包含整个html字符串
    
            //insertorderedlist
            //有序列表的下拉配置,值留空时支持多语言自动识别,若配置值,则以此值为准
            ,'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' : '' , //lang   //'A,B,C'
                 'upper-roman' : '' ,     //'I,II,III...'
                 'cjk-ideographic' : '一、二、三、',
                 'lower-greek':'α,β,γ,δ'
            }
    
            //insertunorderedlist
            //无序列表的下拉配置,值留空时支持多语言自动识别,若配置值,则以此值为准
            ,insertunorderedlist : {
            	//自定的样式
                //'dash' :'— 破折号', //-破折号
                //'dot':' 。 小圆圈',
            	//系统自带
                'circle' : '',  // '○ 小圆圈'
                'disc' : '',    // '● 小圆点'
                'square' : ''   //'■ 小方块'
            }
            ,listDefaultPaddingLeft : '30'//默认的左边缩进的基数倍
            //,listiconpath : 'http://bs.baidu.com/listicon/'//自定义标号的路径
            ,maxListLevel : -1 //限制可以tab的级数, 设置-1为不限制
    
            ,autoTransWordToList:true  //禁止word中粘贴进来的列表自动变成列表标签
    
            //fontfamily
            //字体设置 label留空支持多语言自动切换,若配置,则以配置值为准
            ,'fontfamily':[
                { label:'',name:'yahei',val:'微软雅黑'}, // 微软雅黑,Microsoft YaHei
                { label:'',name:'songti',val:'宋体,SimSun'},
                { label:'',name:'kaiti',val:'楷体,楷体_GB2312,SimKai'},
                { label:'',name:'heiti',val:'黑体,SimHei'},
                { label:'',name:'lishu',val:'隶书,SimLi'},
              //{ label:'文泉驿等宽正黑',name:'',val:'文泉驿等宽正黑'},
                //{ label:'文泉驿等宽微米黑',name:'',val:'文泉驿等宽微米黑'},
                { label:'站酷高端黑',name:'',val:'站酷高端黑'},
                { label:'站酷快乐体',name:'', val:'HappyZcool'},
                { label:'仿宋',name:'',val:'仿宋'},
                //{ label:'思源粗体',name:'',val:'Source Han Sans K Heavy'},
                //{ label:'思源极细',name:'',val:'Source Han Sans K ExtraLight'},
                { label:'',name:'arial',val:'arial,helvetica,sans-serif'}
            ]
            //fontsize
            //字号
    		,'fontsize':[10,11,12,13,14,15,16,17,18,19,20,24,28,32,36]
            ,'letterspacing':[0,0.25,0.5,1,1.5,2,2.5,3,4,5]
    		//lineheight
            //行内间距 值和显示的名字相同
            ,'lineheight':['1', '1.5','1.75','2','2.5', '3', '4', '5']
    
            //paragraph
            //段落格式 值留空时支持多语言自动识别,若配置,则以配置值为准
            //,'paragraph':{'p':'', 'h1':'', 'h2':'', 'h3':'', 'h4':'', 'h5':'', 'h6':''}
    
            //rowspacingtop
            //段间距 值和显示的名字相同
            //,'rowspacingtop':['5', '10', '15', '20', '25']
    
            //rowspacingBottom
            //段间距 值和显示的名字相同
            //,'rowspacingbottom':['5', '10', '15', '20', '25']
    
            //customstyle
            //自定义样式,不支持国际化,此处配置值即可最后显示值
            //block的元素是依据设置段落的逻辑设置的,inline的元素依据BIU的逻辑设置
            //尽量使用一些常用的标签
            //参数说明
            //tag 使用的标签名字
            //label 显示的名字也是用来标识不同类型的标识符,注意这个值每个要不同,
            //style 添加的样式
            //每一个对象就是一个自定义的样式
            //,'customstyle':[
            //    {tag:'h1', name:'tc', label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;'},
            //    {tag:'h1', name:'tl',label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;margin:0 0 10px 0;'},
            //    {tag:'span',name:'im', label:'', style:'font-style:italic;font-weight:bold'},
            //    {tag:'span',name:'hi', label:'', style:'font-style:italic;font-weight:bold;color:rgb(51, 153, 204)'}
            //]
    
            //打开右键菜单功能
            ,enableContextMenu: true
            //右键菜单的内容,可以参考plugins/contextmenu.js里边的默认菜单的例子,label留空支持国际化,否则以此配置为准
            //,contextMenu:[
            //    {
            //        label:'',       //显示的名称
            //        cmdName:'selectall',//执行的command命令,当点击这个右键菜单时
            //        //exec可选,有了exec就会在点击时执行这个function,优先级高于cmdName
            //        exec:function () {
            //            //this是当前编辑器的实例
            //            //this.ui._dialogs['inserttableDialog'].open();
            //        }
            //    }
            //]
    
            //快捷菜单
    		,shortcutMenu:["fontfamily","fontsize","|",
            "bold","italic","underline",'fontborder','strikethrough',"forecolor","shadowcolor","insertorderedlist","insertunorderedlist","superscript", "subscript",
            "|","justifyleft","justifycenter","justifyright",'justifyjustify',"indent","rowspacingtop",'rowspacingbottom',"lineheight",'letterspacing']
    
            ,newShortcutMenu:["fontfamily","fontsize","justifyleft","justifycenter","justifyright",'justifyjustify',"indent","outpadding",'letterspacing','<br>', "rowspacingtop",'rowspacingbottom',"lineheight",
            "insertorderedlist","insertunorderedlist","bold","italic","underline",'fontborder','strikethrough','<br>',"forecolor","shadowcolor","backcolor","superscript", "subscript",'link','unlink']
            //elementPathEnabled
            //是否启用元素路径,默认是显示
            ,elementPathEnabled : false
    
            //wordCount
            ,wordCount:true          //是否开启字数统计
            //,maximumWords:10000       //允许的最大字符数
            //字数统计提示,{#count}代表当前字数,{#leave}代表还可以输入多少字符数,留空支持多语言自动切换,否则按此配置显示
            ,wordCountMsg:'当前已输入 {#count} 个字符,您还可以输入{#leave} 个字符'   //当前已输入 {#count} 个字符,您还可以输入{#leave} 个字符
            //超出字数限制提示  留空支持多语言自动切换,否则按此配置显示
            //,wordOverFlowMsg:''    //<span style="color:red;">你输入的字符个数已经超出最大允许值,服务器可能会拒绝保存!</span>
    
            //tab
            //点击tab键时移动的距离,tabSize倍数,tabNode什么字符做为单位
            //,tabSize:4
            //,tabNode:'&nbsp;'
    
            //removeFormat
            //清除格式时可以删除的标签和属性
            //removeForamtTags标签
            ,removeFormatTags:'a,b,big,code,del,dfn,em,font,i,section,blockquote,pre,fieldset,ins,kbd,q,samp,small,span,label,strike,strong,sub,sup,tt,u,var'
            //removeFormatAttributes属性
            ,removeFormatAttributes:'class,style,lang,width,accuse,height,align,hspace,valign,data-width,data-brushtype,opacity,border,title,placeholder'
    
            //undo
            //可以最多回退的次数,默认20
            ,maxUndoCount:20
            //当输入的字符数超过该值时,保存一次现场
            //,maxInputCount:1
    
            //autoHeightEnabled
            // 是否自动长高,默认true
            ,autoHeightEnabled:false
    
            //scaleEnabled
            //是否可以拉伸长高,默认true(当开启时,自动长高失效)
            ,scaleEnabled:false
    		,imageScaleEnabled:true
            //,minFrameWidth:800    //编辑器拖动时最小宽度,默认800
            //,minFrameHeight:220  //编辑器拖动时最小高度,默认220
    
            //autoFloatEnabled
            //是否保持toolbar的位置不动,默认true
            ,autoFloatEnabled:false
            //浮动时工具栏距离浏览器顶部的高度,用于某些具有固定头部的页面
            //,topOffset:30
            //编辑器底部距离工具栏高度(如果参数大于等于编辑器高度,则设置无效)
            //,toolbarTopOffset:400
    		,'remoteName':'#remoteName','remoteSummary':'#remoteSummary','remoteCoverimg':'#remoteCoverimg'
            //设置远程图片是否抓取到本地保存
            ,catchRemoteImageEnable: true //设置是否抓取远程图片
    
            //pageBreakTag
            //分页标识符,默认是_ueditor_page_break_tag_
            //,pageBreakTag:'_ueditor_page_break_tag_'
    
            // autotypeset
            // 自动排版参数
            ,autotypeset: {
                mergeEmptyline: true,           //合并空行
                removeClass: false,              //去掉冗余的class
                removeEmptyline: false,         //去掉空行
                textAlign:false,
                //textAlign:"left",               //段落的排版方式,可以是 left,right,center,justify 去掉这个属性表示不执行排版
                imageBlockLine: false,       //图片的浮动方式,独占一行剧中,左右浮动,默认: center,left,right,none 去掉这个属性表示不执行排版
                pasteFilter: false,             //根据规则过滤没事粘贴进来的内容
                clearFontSize: false,           //去掉所有的内嵌字号,使用编辑器默认的字号
                clearFontFamily: false,         //去掉所有的内嵌字体,使用编辑器默认的字体
                removeEmptyNode: false,         // 去掉空节点
                //可以去掉的标签
                //removeTagNames: {标签名字:1},
                indent: false,                  // 行首缩进
                indentValue : '2em',            //行首缩进的大小
                bdc2sb: false,
                tobdc: false
            }
    
            //tableDragable
            //表格是否可以拖拽
            //,tableDragable: true
    
    
    
            //sourceEditor
            //源码的查看方式,codemirror 是代码高亮,textarea是文本框,默认是codemirror
            //注意默认codemirror只能在ie8+和非ie中使用
            ,sourceEditor:"codemirror"
            //如果sourceEditor是codemirror,还用配置一下两个参数
            //codeMirrorJsUrl js加载的路径,默认是 URL + "third-party/codemirror/codemirror.js"
            //,codeMirrorJsUrl:URL + "third-party/codemirror/codemirror.js"
            //codeMirrorCssUrl css加载的路径,默认是 URL + "third-party/codemirror/codemirror.css"
            //,codeMirrorCssUrl:URL + "third-party/codemirror/codemirror.css"
            //编辑器初始化完成后是否进入源码模式,默认为否。
            //,sourceEditorFirst:false
    
            //iframeUrlMap
            //dialog内容的路径 ~会被替换成URL,垓属性一旦打开,将覆盖所有的dialog的默认路径
            //,iframeUrlMap:{
            //    'anchor':'~/dialogs/anchor/anchor.html',
            //}
    
            //allowLinkProtocol 允许的链接地址,有这些前缀的链接地址不会自动添加http
            //, allowLinkProtocols: ['http:', 'https:', '#', '/', 'ftp:', 'mailto:', 'tel:', 'git:', 'svn:']
    
            //webAppKey 百度应用的APIkey,每个站长必须首先去百度官网注册一个key后方能正常使用app功能,注册介绍,http://app.baidu.com/static/cms/getapikey.html
            //, webAppKey: ""
    
            //默认过滤规则相关配置项目
            ,disabledTableInTable:false  //禁止表格嵌套
            //,allowDivTransToP:true      //允许进入编辑器的div标签自动变成p标签
            ,rgb2Hex:true               //默认产出的数据中的color自动从rgb格式变成16进制格式
    
    		// xss 过滤是否开启,inserthtml等操作
    		,xssFilterRules: true
    		//input xss过滤
    		,inputXssFilter: true
    		//output xss过滤
    		,outputXssFilter: true
    		// xss过滤白名单 名单来源: https://raw.githubusercontent.com/leizongmin/js-xss/master/lib/default.js
    		// ,whitList: {
    		// 	a:      ['target', 'href', 'title', 'class', 'style'],
    		// 	abbr:   ['title', 'class', 'style'],
    		// 	address: ['class', 'style'],
    		// 	area:   ['shape', 'coords', 'href', 'alt'],
    		// 	article: [],
    		// 	aside:  [],
    		// 	audio:  ['autoplay', 'controls', 'loop', 'preload', 'src', 'class', 'style'],
    		// 	b:      ['class', 'style'],
    		// 	bdi:    ['dir'],
    		// 	bdo:    ['dir'],
    		// 	big:    [],
    		// 	blockquote: ['cite', 'class', 'style'],
    		// 	br:     [],
    		// 	caption: ['class', 'style'],
    		// 	center: [],
    		// 	cite:   [],
    		// 	code:   ['class', 'style'],
    		// 	col:    ['align', 'valign', 'span', 'width', 'class', 'style'],
    		// 	colgroup: ['align', 'valign', 'span', 'width', 'class', 'style'],
    		// 	dd:     ['class', 'style'],
    		// 	del:    ['datetime'],
    		// 	details: ['open'],
    		// 	div:    ['class', 'style'],
    		// 	dl:     ['class', 'style'],
    		// 	dt:     ['class', 'style'],
    		// 	em:     ['class', 'style'],
    		// 	font:   ['color', 'size', 'face'],
    		// 	footer: [],
    		// 	h1:     ['class', 'style'],
    		// 	h2:     ['class', 'style'],
    		// 	h3:     ['class', 'style'],
    		// 	h4:     ['class', 'style'],
    		// 	h5:     ['class', 'style'],
    		// 	h6:     ['class', 'style'],
    		// 	header: [],
    		// 	hr:     [],
    		// 	i:      ['class', 'style'],
    		// 	img:    ['src', 'alt', 'title', 'width', 'height', 'id', '_src', 'loadingclass', 'class', 'data-latex'],
    		// 	ins:    ['datetime'],
    		// 	li:     ['class', 'style'],
    		// 	mark:   [],
    		// 	nav:    [],
    		// 	ol:     ['class', 'style'],
    		// 	p:      ['class', 'style'],
    		// 	pre:    ['class', 'style'],
    		// 	s:      [],
    		// 	section:[],
    		// 	small:  [],
    		// 	span:   ['class', 'style'],
    		// 	sub:    ['class', 'style'],
    		// 	sup:    ['class', 'style'],
    		// 	strong: ['class', 'style'],
    		// 	table:  ['width', 'border', 'align', 'valign', 'class', 'style'],
    		// 	tbody:  ['align', 'valign', 'class', 'style'],
    		// 	td:     ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'],
    		// 	tfoot:  ['align', 'valign', 'class', 'style'],
    		// 	th:     ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'],
    		// 	thead:  ['align', 'valign', 'class', 'style'],
    		// 	tr:     ['rowspan', 'align', 'valign', 'class', 'style'],
    		// 	tt:     [],
    		// 	u:      [],
    		// 	ul:     ['class', 'style'],
    		// 	video:  ['autoplay', 'controls', 'loop', 'preload', 'src', 'height', 'width', 'class', 'style']
    		// }
        };
    
        function getUEBasePath(docUrl, confUrl) {
            return getBasePath(docUrl || self.document.URL || self.location.href, confUrl || getConfigFilePath());
    
        }
    
        function getConfigFilePath() {
    
            var configPath = document.getElementsByTagName('script');
    
            return configPath[ configPath.length - 1 ].src;
    
        }
    
        function getBasePath(docUrl, confUrl) {
    
            var basePath = confUrl;
    
    
            if (/^(\/|\\\\)/.test(confUrl)) {
    
                basePath = /^.+?\w(\/|\\\\)/.exec(docUrl)[0] + confUrl.replace(/^(\/|\\\\)/, '');
    
            } else if (!/^[a-z]+:/i.test(confUrl)) {
    
                docUrl = docUrl.split("#")[0].split("?")[0].replace(/[^\\\/]+$/, '');
    
                basePath = docUrl + "" + confUrl;
    
            }
    
            return optimizationPath(basePath);
    
        }
    
        function optimizationPath(path) {
    
            var protocol = /^[a-z]+:\/\//.exec(path)[ 0 ],
                tmp = null,
                res = [];
    
            path = path.replace(protocol, "").split("?")[0].split("#")[0];
    
            path = path.replace(/\\/g, '/').split(/\//);
    
            path[ path.length - 1 ] = "";
    
            while (path.length) {
    
                if (( tmp = path.shift() ) === "..") {
                    res.pop();
                } else if (tmp !== ".") {
                    res.push(tmp);
                }
    
            }
    
            return protocol + res.join("/");
    
        }
    
        window.UE = {
            getUEBasePath: getUEBasePath
        };
    
    })();
    
    
    修改index.html文件

    修改index.html文件body标签中的内容即可

    <script id="editor" type="text/plain"></script>
    <script type="text/javascript" src="{{ url_for('static',filename='ueditor/plugins/135editor.js') }}"></script>
    <script type="text/javascript">
                //实例化编辑器
                //建议使用工厂方法getEditor创建和引用编辑器实例,如果在某个闭包下引用该编辑器,直接调用UE.getEditor('editor')就能拿到相关的实例
                current_editor = UE.getEditor('editor',{
                    serverUrl:'/upload/',
                    initialFrameHeight:400,
                    focus:true,
                    toolbars:[
                    ['bold','italic', 'underline', 'fontborder', 'strikethrough',  '135editor','rowspacingtop', 'rowspacingbottom', 'lineheight','removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|','superscript', 'subscript' ]],
                    focusInEnd:true
                });
    
    查看效果

    最后就是检验效果的时候到了,先看看135编辑器给的demo案例中的编辑器吧

    135编辑器demo
    135编辑器demo笔者完成的demo:
    笔者完成的demo不仅仅是表面一样,连内容也是一样,给你们看看135编辑器的内容效果。

    内容效果:
    内容效果
    如果在实现135编辑器的时候出现任何情况都可以联系笔者,笔者尽可能为大家解决烦恼,以上内容部分是参照http://flask123.sinaapp.com/article/47/文章所写。

    QQ联系方式:1670044143

    展开全文
  • ueditor文本编辑器原本支持ctrl+v时复制文字和样式,由于ie协议的原因必须必须点击,图片无法上传,本例是通过编写active控件解除限制向ftp上传,有更好的希望能告知,谢谢   负责复制粘贴的ueditor文本编辑器js是...

            ueditor文本编辑器原本支持ctrl+v时复制文字和样式,由于ie协议的原因<input type='file' />必须必须点击,图片无法上传,本例是通过编写active控件解除限制向ftp上传,有更好的希望能告知,谢谢。

           看很多小伙伴说不好使,其实不是不好使,是我编译的控件只支持xp,因为我是用xp编译调试的,这样把早期的c++源码也放出来,自己编译吧。

     

    支持复制粘贴word图片的文本编辑器下载地址:http://download.csdn.net/detail/myfmyfmyfmyf/7493931

    支持复制粘贴word图片的c++源码下载地址:http://download.csdn.net/detail/myfmyfmyfmyf/9477844

     

    负责复制粘贴的ueditor文本编辑器js是ueditor1_2_6_1-src\_src\plugins\wordimage.js,改写其中UE.plugins["wordimage"] = function ()方法

    //作者:牟云飞
    //时间:2014年01月14日
    //qq:1147417467
    //active自定义粘贴图片
    function uploadPasrseImage(src){
    	//alert("上传黏贴过来的图片");
    	//连接ftp
    	var address = "***.**.**.**";
    	var port    = "21";
    	var user    = "**";
    	var pass    = "*******";
    	var mode    = "1";
    	var dir     = "KMOCX";//这个名字的文件夹需要在ftp根目录中提前建立
    	var Ret = ToFtp.ConnectFtp(address,port,user,pass,mode);
    	alert(src);
    	image = src.substring(8,src.length);
    	//上传的图片名
    	 //取得当前时间     
    	var now= new Date();     
    	var year=now.getFullYear();     
    	var month=now.getMonth()+1;     
    	var day=now.getDate();     
    	var hour=now.getHours();     
    	var minute=now.getMinutes();     
    	var second=now.getSeconds();      
    	var imageName=year+""+month+""+day+""+hour+""+minute+""+second+src.substring( src.lastIndexOf("."),src.length);
    	dir =dir+"/"+year+""+month+""+day+"";
    	//传图片第一个参数上传的文件路径,第二个上传服务器后的名字,第三个ftp根目录下的一个文件夹
    	var result=ToFtp.uploadToFtp(image, imageName,dir);
    	alert(result);
    	//上传服务器后的路径
    	image="ftp://"+user+":"+pass+"@"+address+"/"+dir+"/"+imageName;
    }
    //存放上传服务器后的路径
    var image;
    UE.plugins["wordimage"] = function () {
        var me = this,
            images;
        me.addInputRule(function (root) {
    		alert("-----"+image);
            utils.each(root.getNodesByTagName('img'), function (img) {
                var attrs = img.attrs,
                    flag = parseInt(attrs.width) < 128 || parseInt(attrs.height) < 43,
                    opt = me.options,
                    src = opt.UEDITOR_HOME_URL + 'themes/default/images/spacer.gif';
    			//执行插件上传图片
    			if((attrs._src).indexOf("ftp")==-1){
    	            //如果是粘贴操作,执行插件上传
    	            uploadPasrseImage(attrs._src);
    	            alert("####"+image);
    	            //image=attrs._src;
               	}else{
               		image=attrs._src;
               	}
                if (attrs['_src'] && attrs['_src'].indexOf("file:///")!==-1) {
                    img.setAttr({
                        width:attrs.width,
                        height:attrs.height,
                        alt:attrs.alt,
                        word_img:"",
                        src:image,
                        _src:"",
                        style:'background:url(' + ( flag ? opt.themePath + opt.theme + '/images/word.gif' : opt.langPath + opt.lang + '/images/localimage.png') + ') no-repeat center center;border:1px solid #ddd'
                    })
                }
    				alert("执行完毕");
            })
        });
        me.commands['wordimage'] = {
            execCommand:function () {
                images = domUtils.getElementsByTagName(me.document.body, "img");
                var urlList = [];
                for (var i = 0, ci; ci = images[i++];) {
                    var url = ci.getAttribute("word_img");
                    url && urlList.push(url);
                }
                if (images.length) {
                    this["word_img"] = urlList;
                }
            },
            queryCommandState:function () {
                images = domUtils.getElementsByTagName(me.document.body, "img");
                for (var i = 0, ci; ci = images[i++];) {
                    if (ci.getAttribute("word_img")) {
                        return 1;
                    }
                }
                return -1;
            }
        };
    
    };


    c++编写active时用的是如下方式上传ftp,本人现在做java, c++不是很好只能用这种方式了啊,c++的大神路过就好

    m_pSesInternet = new CInternetSession;

    m_pFtpCnt = m_pSesInternet->GetFtpConnection(Address, User, Pass, _wtoi(Port),bMode);

    m_pFtpCnt->PutFile(LocalFile, FtpFile);

     

    // UpToFtpCtrl.cpp : CUpToFtpCtrl ActiveX 控件类的实现。
    
    #include "stdafx.h"
    #include "UpToFtp.h"
    #include "UpToFtpCtrl.h"
    #include "UpToFtpPropPage.h"
    
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    IMPLEMENT_DYNCREATE(CUpToFtpCtrl, COleControl)
    
    
    
    // 消息映射
    
    BEGIN_MESSAGE_MAP(CUpToFtpCtrl, COleControl)
    	ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
    	ON_WM_CREATE()
    END_MESSAGE_MAP()
    
    
    
    // 调度映射
    
    BEGIN_DISPATCH_MAP(CUpToFtpCtrl, COleControl)
    	DISP_FUNCTION_ID(CUpToFtpCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
    	DISP_FUNCTION_ID(CUpToFtpCtrl, "ConnectFtp", dispidConnectFtp, ConnectFtp, VT_I4, VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR)
    	DISP_FUNCTION_ID(CUpToFtpCtrl, "WriteFtpFile", dispidWriteFtpFile, WriteFtpFile, VT_I4, VTS_BSTR VTS_BSTR)
    	DISP_FUNCTION_ID(CUpToFtpCtrl, "writeToFtp", dispidwriteToFtp, writeToFtp, VT_BSTR, VTS_BSTR)
    	DISP_FUNCTION_ID(CUpToFtpCtrl, "uploadToFtp", dispiduploadToFtp, uploadToFtp, VT_BSTR, VTS_BSTR VTS_BSTR VTS_BSTR)
    END_DISPATCH_MAP()
    
    
    
    // 事件映射
    
    BEGIN_EVENT_MAP(CUpToFtpCtrl, COleControl)
    END_EVENT_MAP()
    
    
    
    // 属性页
    
    // TODO: 按需要添加更多属性页。请记住增加计数!
    BEGIN_PROPPAGEIDS(CUpToFtpCtrl, 1)
    	PROPPAGEID(CUpToFtpPropPage::guid)
    END_PROPPAGEIDS(CUpToFtpCtrl)
    
    
    
    // 初始化类工厂和 guid
    
    IMPLEMENT_OLECREATE_EX(CUpToFtpCtrl, "UPTOFTP.UpToFtpCtrl.1",
    	0xec5307a6, 0x6b48, 0x4614, 0xb3, 0x6, 0xd0, 0x1, 0x34, 0x53, 0x74, 0x25)
    
    
    
    // 键入库 ID 和版本
    
    IMPLEMENT_OLETYPELIB(CUpToFtpCtrl, _tlid, _wVerMajor, _wVerMinor)
    
    
    
    // 接口 ID
    
    const IID BASED_CODE IID_DUpToFtp =
    		{ 0xCFC272C1, 0x21E3, 0x477D, { 0x8E, 0xDA, 0x3, 0x3F, 0x70, 0xC1, 0xD1, 0x49 } };
    const IID BASED_CODE IID_DUpToFtpEvents =
    		{ 0xBFCA23EB, 0x98AC, 0x45C2, { 0x96, 0x3F, 0xAD, 0x19, 0xE9, 0x43, 0x48, 0xA7 } };
    
    
    
    // 控件类型信息
    
    static const DWORD BASED_CODE _dwUpToFtpOleMisc =
    	OLEMISC_ACTIVATEWHENVISIBLE |
    	OLEMISC_SETCLIENTSITEFIRST |
    	OLEMISC_INSIDEOUT |
    	OLEMISC_CANTLINKINSIDE |
    	OLEMISC_RECOMPOSEONRESIZE;
    
    IMPLEMENT_OLECTLTYPE(CUpToFtpCtrl, IDS_UPTOFTP, _dwUpToFtpOleMisc)
    
    
    
    // CUpToFtpCtrl::CUpToFtpCtrlFactory::UpdateRegistry -
    // 添加或移除 CUpToFtpCtrl 的系统注册表项
    
    BOOL CUpToFtpCtrl::CUpToFtpCtrlFactory::UpdateRegistry(BOOL bRegister)
    {
    	// TODO: 验证您的控件是否符合单元模型线程处理规则。
    	// 有关更多信息,请参考 MFC 技术说明 64。
    	// 如果您的控件不符合单元模型规则,则
    	// 必须修改如下代码,将第六个参数从
    	// afxRegApartmentThreading 改为 0。
    
    	if (bRegister)
    		return AfxOleRegisterControlClass(
    			AfxGetInstanceHandle(),
    			m_clsid,
    			m_lpszProgID,
    			IDS_UPTOFTP,
    			IDB_UPTOFTP,
    			afxRegApartmentThreading,
    			_dwUpToFtpOleMisc,
    			_tlid,
    			_wVerMajor,
    			_wVerMinor);
    	else
    		return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
    }
    
    
    
    // CUpToFtpCtrl::CUpToFtpCtrl - 构造函数
    
    CUpToFtpCtrl::CUpToFtpCtrl()
    {
    	InitializeIIDs(&IID_DUpToFtp, &IID_DUpToFtpEvents);
    	m_pSesInternet = NULL;
    }
    
    
    
    // CUpToFtpCtrl::~CUpToFtpCtrl - 析构函数
    
    CUpToFtpCtrl::~CUpToFtpCtrl()
    {
    	if(NULL != m_pSesInternet)
    		delete m_pSesInternet;
    }
    
    
    
    // CUpToFtpCtrl::OnDraw - 绘图函数
    
    void CUpToFtpCtrl::OnDraw(
    			CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
    {
    	if (!pdc)
    		return;
    
    	// TODO: 用您自己的绘图代码替换下面的代码。
    	pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
    	pdc->Ellipse(rcBounds);
    }
    
    
    
    // CUpToFtpCtrl::DoPropExchange - 持久性支持
    
    void CUpToFtpCtrl::DoPropExchange(CPropExchange* pPX)
    {
    	ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    	COleControl::DoPropExchange(pPX);
    
    	// TODO: 为每个持久的自定义属性调用 PX_ 函数。
    }
    
    
    
    // CUpToFtpCtrl::OnResetState - 将控件重置为默认状态
    
    void CUpToFtpCtrl::OnResetState()
    {
    	COleControl::OnResetState();  // 重置 DoPropExchange 中找到的默认值
    
    	// TODO: 在此重置任意其他控件状态。
    }
    
    
    
    // CUpToFtpCtrl::AboutBox - 向用户显示“关于”框
    
    void CUpToFtpCtrl::AboutBox()
    {
    	CDialog dlgAbout(IDD_ABOUTBOX_UPTOFTP);
    	dlgAbout.DoModal();
    }
    
    
    
    // CUpToFtpCtrl 消息处理程序
    
    LONG CUpToFtpCtrl::ConnectFtp(LPCTSTR Address, LPCTSTR Port, LPCTSTR User, LPCTSTR Pass, LPCTSTR Mode)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
    	try
    	{
    		m_pSesInternet = new CInternetSession;
    
    		BOOL bMode;
    		if(0 == wcscmp(Mode, _T("1")))
    			bMode = TRUE;
    		else
    			bMode = FALSE;
    
    		m_pFtpCnt = m_pSesInternet->GetFtpConnection(Address, User, Pass, _wtoi(Port),bMode); 	
    
    	}
    	catch (CInternetException *pEx)
    	{
    		TCHAR szMsg[MAX_PATH];
    		pEx->GetErrorMessage(szMsg, MAX_PATH);
    		MessageBox(szMsg);
    		return -1;
    	}
    
    	return 0;
    }
    
    LONG CUpToFtpCtrl::WriteFtpFile(LPCTSTR LocalFile, LPCTSTR FtpFile)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
    	return m_pFtpCnt->PutFile(LocalFile, FtpFile);
    }
    
    int CUpToFtpCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    	if (COleControl::OnCreate(lpCreateStruct) == -1)
    		return -1;
    
    	CButton* pButton = new CButton();
    	pButton->Create(_T("我是一个按钮"), BS_BOTTOM, CRect(5, 5, 50, 20), this, 1001);
    	pButton->ShowWindow(SW_SHOW);
    	
    
    	return 0;
    }
    
    BSTR CUpToFtpCtrl::writeToFtp(LPCTSTR imageurl)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
    	CString strResult;
    
    	// TODO: 在此添加调度处理程序代码
    	
    	m_pFtpCnt->CreateDirectory(_T("testActive/TEST"));
    	//设置当前目录 
    	m_pFtpCnt->SetCurrentDirectory(_T("testActive/TEST"));
    	 //生成时间文件夹
    	time_t curTime= time(0);
    	char tmp[64]; 
    	strftime( tmp, sizeof(tmp), "%Y/%m/%d",localtime(&curTime) ); 
    	CString dirName= CString(tmp);
    	m_pFtpCnt->CreateDirectory(dirName);
    
    
    	m_pFtpCnt->GetCurrentDirectoryW(strResult);
    	m_pFtpCnt->PutFile(_T("C:\\aa.gif"),_T("aa.gif"));
    	
    	return strResult.AllocSysString();
    }
    
    BSTR CUpToFtpCtrl::uploadToFtp(LPCTSTR localFile, LPCTSTR FtpFile, LPCTSTR ftpDir)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
    	CString strResult;
    
    	// TODO: 在此添加调度处理程序代码
    	//目录写法 testActive/TEST
    	//设置目录 
    	BOOL flag=m_pFtpCnt->SetCurrentDirectory(ftpDir);
    	if(0==flag)
    	{
    		//如果目录不存在,则创建目录
    		m_pFtpCnt->CreateDirectory(ftpDir);
    		m_pFtpCnt->SetCurrentDirectory(ftpDir);
    	}
    	
    	m_pFtpCnt->SetCurrentDirectory(ftpDir);
    
    	//上传图片
    	BOOL isSuccess= m_pFtpCnt->PutFile(localFile, FtpFile);
    	if(1==isSuccess){
    		return _T("1");
    	}else{
    		return _T("2");
    	}
    }
    



    完成控件之后,用regsvr32.exe 路径\**.ocx  注册一下控件

    用ActiveX Control Pad编译控件

    <OBJECT ID="ToFtp" WIDTH=0 HEIGHT=0
     CLASSID="CLSID:EC5307A6-6B48-4614-B306-D00134537425">
        <PARAM NAME="_Version" VALUE="65536">
        <PARAM NAME="_ExtentX" VALUE="0">
        <PARAM NAME="_ExtentY" VALUE="0">
        <PARAM NAME="_StockProps" VALUE="0">
    </OBJECT>放在使用ueditor的页面

     

    展开全文
  • 最好用的十六进制编辑器010 Editor

    千次阅读 2019-04-15 11:47:42
    010 Editormac破解版是mac上一款非常强大的十六进制编辑器,可以帮助用户进行编辑十六进制和二进制,可选择自己需要的进制进行编辑,还可对任何的文件进行编辑;软件内置了强大的模块、脚本操作,只需要用户将一个...

    010 Editor mac破解版是mac上一款非常强大的十六进制编辑器,可以帮助用户进行编辑十六进制和二进制,可选择自己需要的进制进行编辑,还可对任何的文件进行编辑;软件内置了强大的模块、脚本操作,只需要用户将一个类型的二进制文件进行定义模块,以后这您需要进行编辑相同类型文件的时候,即可调用以前的模块进行使用,分析文件,而且是自动的进行分析,轻松地编辑任何文件在您的计算机上的内容。

    010 Editor 破解版破解教程

    010 Editor 破解版镜像包下载完成后打开,将左侧的【010 Editor】拖到右侧的应用程序进行安装。

    点我下载安装~

    点击左上角about 010 Editor.如图:

    点击register.如图:

    弹出010 Editor注册界面,我们name中输入【orsoon】password随意输入【123】然后点击【check license】。

    010 Editor Mac版破解成功!

    010 Editor mac破解版官方介绍

    010 Editor是专业的文本编辑器和十六进制编辑器,能够编辑和解析任何二进制文件。上面的截图显示了010 Editor的主窗口。文件在中心区域显示为一系列文本字符或十六进制字节。010 Editor最强大的功能是能够将二进制文件解析为可以理解的数据结构。解析由二进制模板完成,如右上方所示,运行模板的结果显示在十六进制编辑器下面的“模板结果”面板中。

    010 Editor for Mac破解版功能介绍

    010 Editor:专业文字编辑器

    编辑文本文件,XML,HTML,Unicode和UTF-8文件,C / C ++源代码等。

    无限制的撤消和强大的编辑和脚本工具。

    巨大的文件支持(50 GB +)。

    010 Editor:世界上最好的十六进制编辑

    任何大小的文件都具有无与伦比的二进制编辑性能。

    使用强大的二进制模板技术来理解二进制数据。

    查找并修复硬盘驱动器,内存密钥,闪存驱动器,CD-ROM等问题。

    调查和修改进程的内存。

    二进制模板 - 十六进制编辑到一个新的水平

    为什么010 Editor如此强大?与仅显示文件(1)的原始十六进制字节的传统十六进制编辑器不同,010 Editor还可以使用二进制模板(2)将文件解析为层次结构。运行二进制模板的结果比仅使用原始十六进制字节更容易理解和编辑。

    二进制模板易于编写,看起来类似于C / C ++结构,除了它们可能包含if,for或while语句以及函数或复杂表达式。

    功能强大,几乎可以解析任何二进制文件格式。

    可以设置为在打开文件时自动运行。

    分析工具 - 深入了解您的数据

    010 Editor中包含许多复杂的工具,用于分析和编辑二进制文件:

    对于许多不同的数据类型,完全查找,替换,在文件中查找和替换文件功能。

    强大的二进制比较工具,用于分析两个文件之间的逐字节差异。

    使用直方图工具计算字节出现次数并可视化数据。

    计算校验和/哈希算法,包括CRC-16,CRC-32,Adler32,MD2,MD4,MD5,RIPEMD160,SHA-1,SHA-256,TIGER等。

    脚本 - 自动编辑

    可以使用类似于C / C ++的语法自动执行简单或复杂的编辑操作。

    具有300多种不同的功能,可用于数据操作。

    与二进制模板集成以直观地编辑文件。只需分配二进制模板中定义的变量即可修改文件。

    可以共享脚本,并在我们的脚本存档中提供可供下载的脚本列表。

    从命令行运行脚本,没有用于批处理的用户界面。

    .....还有更多。

    功能强大的工作区视图,包括文件浏览器

    在ASCII,EBCDIC,Unicode,UTF-8等之间转换数据。

    Inspector允许以不同格式快速解释数据。

    使用书签标记重要字节。

    完整的综合表达计算器

    应用突出显示规则以标识文件中的字节。

    以Intel Hex格式,Motorola S-Records,Hex Text,C / C ++ / Java Code,Base64,Uuencoding,RTF或HTML导入或导出数据。

    使用完整打印预览,页眉,页脚和页边距打印。

    010 Editor 9 mac破解版模版介绍

    二进制模板

    帮助您理解二进制数据

    编辑二进制数据很难。您必须确切地知道要在文件中编辑哪些字节,编辑错误的字节会导致文件无法使用。二进制模板允许您以 强大,直观的方式理解数据并对其进行编辑,从而揭开二进制数据的神秘面纱。

    右侧的图像显示在010 Editor中打开的ZIP文件。大多数十六进制编辑器只显示文件的原始十六进制字节(1),但是010 Editor通过将文件解析为分层数据结构以便于编辑来超越这个(2)。数据结构由一系列变量组成,并且在列表中选择一个变量显示哪个十六进制字节对应于该变量(在图像中,变量'frVersion'对应于十六进制字节'14 00')。

    010编辑器可以在打开文件时自动将二进制模板应用于文件。010 Editor中包含ZIP,BMP和WAV文件的二进制模板,我们的模板存档中还提供了一系列其他模板供下载。如果您使用自己的二进制格式,编写自己的二进制模板并不困难。

    编写二进制模板

    二进制模板看起来与C / C ++中的结构定义类似,但更灵活,因为它们可能包含if,for或 while语句以及函数或复杂表达式。模板作为程序执行,从文件的第一行开始。每当声明一个变量时,该变量就会映射到文件中的一组字节。然后,可以通过访问创建的变量来读取或写入来自该文件的数据。有关模板如何工作的示例,请参阅下一节。

    010 Editor包含对编辑和运行二进制模板的完全支持。集成的源代码编辑器提供语法突出显示(如左图所示)。

    注意:其他一些编辑器使用类似于C / C ++的结构提供结构查看器; 但是,这些查看器的功能不如二进制模板无法解析整个二进制文件。

    示例模板

    以下示例演示了一个简单的二进制模板。此模板设计用于包含一系列员工记录的二进制文件。

    在模板中定义变量时,该变量将映射到文件中的一组字节。在这种情况下,可变类型将被映射到的前四个字节的文件,版本将被映射到下四个字节, numRecords下两个字节等(见下面的图)。执行模板时,可以在声明任何变量后立即访问它们。这里file.header.version可用于从文件中读取数据,即使文件未完全定义。

    模板非常灵活,任何可能包含复杂表达式,包括任何常规C运算符,如+, - ,*,/,&,|,^,〜,%,++, - ,?:等。大量函数可用于修改模板的运行方式。

    编辑模板结果

    运行模板后,可以在“十六进制编辑器”下方或“检查器”的“ 变量”选项卡中显示的“ 模板结果”面板中访问模板中定义 的变量。模板结果显示了数据的完整分层视图,如左侧所示。从列表中选择变量时,将在主十六进制编辑器窗口中选择相应的十六进制字节。通过单击“值”字段,输入新值并按Enter键,可以编辑变量。

    从Template变量读取值的另一种方法是将鼠标光标放在Hex Editor窗口中的某些字节上。将显示一个提示弹出窗口,指示该位置的变量值。要查找哪个变量对应于某个字节位置,请将光标移动到该位置并按Ctrl + J(跳转到模板变量),010 Editor将在模板结果中找到该变量。

    使用脚本编辑

    编辑从模板生成的变量的另一种方法是使用脚本。脚本具有类似于C的语法,并以常规方式定义变量。例如,要将每个员工的工资加倍,可以使用以下脚本:

    脚本可以自动修改模板中定义的任何变量。与任何其他编辑操作一样,Scripts支持撤消和重做。

    高级功能

    010 Editor包含一些使模板更强大的附加功能。例如:

    使用local关键字在模板中定义常规C变量。

    应用颜色到模板变量,使他们在编辑器中脱颖而出(见的功能SetBackColor,SetForeColor,或为setColor的文档中)。

    该端可以在模板中进行切换,从而可以从同一个文件中读取大端或小端的数据(见大尾端或LittleEndian文档中的功能)。

    通过使用FSeek或FTell函数 在文件中移动,可以按任何顺序读取模板变量。

    通过编写特殊的读写函数来定义自己的自定义变量。该语法允许以几乎任何格式读取数据。

    可以从文件中读取数据,而无需使用函数ReadByte,ReadShort,ReadInt等声明Template变量。

    在变量声明后,使用语法 更改模板结果中显示的数据的格式。

    结构和联合都受支持,可用于定义递归数据类型。

    通过使用按需结构,可以编写包含数百万个变量的模板。

    展开全文
  • vc所支持文件类型

    2010-07-21 13:39:00
    vc所支持文件类型 <br /> DSW:全称是Developer Studio Workspace,最高级别的配置文件,记录了整个工作空间的配置信息,她是一个纯文本的文件,在vc创建新项目的时候自动生成 DSP:全称是...
  • 网页文本编辑器

    千次阅读 2013-05-07 09:42:39
    它所表示的含义是:以编辑器实例化页面当前路径,指向编辑器资源文件(即dialog等文件夹)的路径。 * 鉴于很多同学在使用编辑器的时候出现的种种路径问题,此处强烈建议大家使用"相对于网站根目录的相对路径"进行...
  • 是破解版的,用了几天,感觉很好,除了启动慢以外,行号、列操作、日期、行高亮显示、可集成编译器、10个剪贴板、十六进制编辑、右键菜单打开等功能都让我非常满意,当时一度认为这是最好的编辑器,有编辑器如此,夫...
  • FCKeditor编辑器详解

    千次阅读 2018-02-22 17:37:14
    FCKeditor 编辑器
  • 最新版本:x-studio10.0.5900.509(2020年1月9日更新) ... ... x-studio是一款强大的游戏开发IDE;...具有的完整2D粒子编辑功能,场景(UI)编辑功能,屏幕适配预览功能(让手动适配问题彻底解放)。...
  • 在C语言特征本身,不提供运行时信息...在游戏开发中,可以利用内省信息反射出类对象,包括游戏UI编辑器都是通过内省类信息来实现的。C# 是在C++,Java语言发展而来,同时也对运行时内省提供强大支持。对于这些语言的内省信
  • zxEditor 移动端HTML文档(富文本)编辑器支持图文混排、引用、大标题、无序列表,字体颜色、加粗、斜体。 可用于独立web项目开发,也可以用于与原生App混合(hybrid)开发。 源码地址:...
  • 毫无疑问SublimeText,Notepad++,webstorm等,是市面上最主导的编辑器,但当然也有一些更多的JavaScript编辑器提供众多的特性和功能,方便和轻松自由的编码。本文整理了20款JavaScript编辑器,哪家强你说了算 ...
  • 数学公式编辑器:MathType 7 for mac

    千次阅读 2019-07-07 17:30:48
    此外,JetBrains CLion 2019 for Mac中文破解版它的C ++重构现在更加准确,代码突出显示已转移到Clangd以使编辑器更具响应性。为了帮助您遵循首选的编码风格,CLion现在与着名的 ClangFormat 工具集成,并添加了对...
  • Intellij Idea 2017编辑器详解

    万次阅读 2017-06-25 17:24:04
    所有的其他的编辑器也都支持书签,断点,语法高亮,代码提示,Zooming,代码折叠等。 当然这里还有很多诸如宏指令,高亮TODO,代码分析、事件、快捷智能导航的高级特性。可以使用setting中的editor配置编辑器环境。...
  • VS code 安装使用教程,VS code 使用 markdown
  • 在线代码编辑器 Codeanywhere介绍

    千次阅读 2018-11-14 16:01:46
    在线代码编辑器 Codeanywhere介绍
  • 【转】文本编辑器

    千次阅读 2010-02-25 12:39:00
    是破解版的,用了几天,感觉很好,除了启动慢以外,行号、列操作、日期、行高亮显示、可集成编译器、10个剪贴板、十六进制编辑、右键菜单打开等功能都让我非常满意,当时一度认为这是最好的编辑器,有编辑器如此,夫...
  • html部分引入百度编辑器 配置文件编辑器源码文件 放置编辑器的位置 <div><script id="container" name="content" type="text/plain" style="width:1106px;" data-bind="value:item_cont"></...
  • 百度富文本编辑器引入问题

    千次阅读 2017-03-10 15:22:06
    页面引入支持 <!-- 引入ueditor --> <!-- 配置文件 --> ...<!-- 编辑器源码文件 --> <script type="text/javascript" charset="utf-8" sr
  • 输入法编辑器概述

    千次阅读 2008-04-14 15:09:00
    输入法编辑器概述 来源: 作者: 发布时间:2007-05-15
  • 前言 一款好用的在线文本编辑器一直是博客作者,网文作者梦寐以求的创作工具,随着 javascript技术的改进和各种文本编辑器的开发和升级,在线文本编辑器也逐渐的成熟和易用起来,本文将以现在较为流行的...
  • 使用Phabricator做为Code Review工具

    千次阅读 2017-11-12 21:48:16
    目录 0x10 概述 0x20 我的应用环境 0x30 路线图 0x40 安装 0x41 LNMP环境的安装 0x42 Phabricator源码下载及运行 0x50 配置 0x51 解决基本的配置问题 ...0x60 使用Phabricator进行Code Review 0x61
  • Code Project

    千次阅读 2011-02-26 21:44:00
    Code Project
  • vscode作为宇宙最强编辑器,能不能用它来编辑keil工程呢?答案是当然可以。keil虽然编辑方面很糟糕,但是其他方面还是可以的,我打算keil创建工程,vscode编辑,最后再回到keil下载调试。用过vscode的都知道,它本身...
  • 仿简书APP富文本编辑器实现

    万次阅读 多人点赞 2016-10-17 15:49:50
    最近看到了简书App中的编辑器可以实现字体的加粗,斜体,删除线等多种样式,而且可以插入图片,链接,分割线。支持字符串数据提交服务器,然后在TextView中直接展示。 如果我们没有了解其中原理之前,感觉还是...
  • VS code 超详细安装流程(通用版本)

    千次阅读 2021-01-26 15:05:08
    Code 注册为受支持的文件类型编辑器 对于受支持文件类型的文件,可以右键 > 打开方式 > Visual Studio Code, 来用 VS Code 打开该文件 5. 添加到 PATH (重启后生效) 将 VS Code 添加到环境变量 Path 中,默认...
  • 在线代码编辑器:Codeanywhere介绍

    千次阅读 2013-08-13 16:14:59
    本文分为几个部分: 1.Codeanywhere介绍 2.Codeanywhere使用前奏 3.Codeanywhere与Dropbox连接 ...Codeanywhere是一个在线的代码编辑器,你可以在浏览器中编写html、css、javascript、php、XML的代码,目前支持
  • github地址 演示地址 特点 支持简体中文、英语、法语、西班牙语四种语言 ...基于Vue的markdown编辑器 English Documents Demo for jsfiddle example (图片展示) PC Install mavon-editor (安装) $ npm ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,430
精华内容 10,572
关键字:

code注册为受支持的文件类型的编辑器