markdown语法功能测试

int main(){
    return 0;
}

111111111111111111111111111
111111111111111111111111111

int main(){
    return 0;
}

粗体测试
粗体

斜体测试
斜体测试

标题测试

标题一

标题二

标题三

标题四

标题五
标题六

链接测试
oschina

图片测试
人物

EMOJI测试
:fa-glass:

无序列表测试

  • 无序列表项一
  • 无序列表项二
  • 无序列表项三

有序列表测试
1. 有序列表项一
2. 有序列表项二
3. 有序列表项三

代码测试

/**
 * Created by ling on 2015/5/6.
 */
!function (global) {
    if (!global)
        return;
    'use strict';
    var doc,
        logger = new Logger(),
        mod = 'dev';
    var LeeJS = function (options) {
        this.fn = {};
        this.summary = {
            "author": "Lee",
            "license": "NO",
            "name": "LeeJS",
            "version": "2.0.0",
            "description": "LeeJS",
            "readme": "README",
            "repository": {
                "type": "",
                "url": ""
            }
        };

        this.debug = false;//调试模式
        this.pageDefine = 'data-define';
        this.module = {};//控制中心,页面对象集合
        this.base = {};//基类或工具类
        this.global = {};//全局类
        this.init(options);
    };

    LeeJS.prototype = {
        constructor: LeeJS,
        init: function (options) {
            if (options) {
                this.pageDefine = options.pageDefine ? options.pageDefine : this.pageDefine;
            }
        },
        /**
         * 功能:动态为page对象添加属性
         *
         * @param page{Object}
         * @param vals{NodeList}
         */
        initParams: function (page, vals) {
            var val = null,
                valAttr = '',
                valValue = '',
                length = vals.length;
            for (var i = 0; i < length; ++i) {
                val = vals[i];
                if (val instanceof HTMLElement) {
                    valAttr = val.getAttribute('data-name');
                    valValue = val.getAttribute('data-value');
                    if (valAttr) {
                        page[valAttr] = valValue;
                        if (mod !== 'pro') {
                            logger.logAttribute(valAttr, valValue);
                        }
                    }
                }
            }
        },
        /**
         * 功能:从控制中心取得基类或工具类
         * @param name{String}
         * @returns {Object}
         */
        fetch: function (name) {
            return this.base[name];
        },

        /**
         * 功能:织入切面,主要用于测量用户function性能、调用、日志等信息
         *     生产环境可去掉些功能以提高性能
         *
         * @param page{Object}
         * @param log{boolean}
         */
        handerFunction: function (page, log) {
            if (mod === 'pro')
                return;
            var keys = Object.getOwnPropertyNames(page.constructor.prototype).concat(Object.getOwnPropertyNames(page)),
                length = keys.length,
                i = 0;
            for (i; i < length; ++i) {
                var funcName = keys[i], fn = page[funcName];
                if (typeof fn === 'function' && funcName !== 'constructor') {
                    page[funcName] = fn.around(funcName);
                    if (log)
                        logger.logFunction(funcName);
                }
            }
        },
        /**
         * 功能:提供能外部调用
         * 兼容1.0版本提供的API
         */
        loadImg: function () {
            var imgs = global.document.querySelectorAll('img[data-delay]');
            this.loadDelayImg(imgs);
        },
        /**
         * 功能:将图象的懒加载属性写入src属性,进行图象加载
         *
         * @param imgs{NodeList}
         */
        loadDelayImg: function (imgs) {
            var length = imgs.length, i = 0;
            for (i; i < length; ++i) {
                var img = imgs[i], src;
                if (img instanceof HTMLElement) {
                    img.setAttribute('load', 'unload');
                    src = img.getAttribute('data-delay');
                    img.addEventListener('load', function () {
                        this.setAttribute('load', 'loaded');
                    });
                    img.addEventListener('error', function () {
                        this.setAttribute('load', 'error');
                    });
                    if (src)
                        img.setAttribute('src', src);
                }
            }
        },
        /**
         * 功能:检测img图象是否加载完成
         *
         * @param imgs{NodeList}
         * @returns {boolean}
         */
        delayImgLoaded: function (imgs) {
            var length = imgs.length, i = 0;
            for (; i < length; ++i) {
                var img = imgs[i];
                if (img instanceof HTMLElement) {
                    var load = img.getAttribute('load');
                    if (load === 'unload')
                        return false;
                }
            }
            return true;
        }
    };

    doc = global.document;
    global.action = new LeeJS({
        debug: true,
        pageDefine: 'data-define'
    });

    /**
     * 功能:定义普通页面对象
     *
     * @param name{String}
     * @param target{Function}
     */
    global.define = function (name, target) {
        if (typeof name === 'string' && typeof target === 'object' && '' !== name) {
            if (global.action.module[name] === undefined) {
                global.action.module[name] = target;
            }
        }
    };

    /**
     * 功能:定义普通基类或工具类
     *
     * @param name{String}
     * @param target{Function}
     */
    global.base = function (name, target) {
        if (typeof name === 'string' && typeof target === 'object' && '' !== name) {
            if (global.action.base[name] === undefined) {
                global.action.base[name] = target;
                global.action.handerFunction(global.action.base[name], false);
            }
        }
    };

    /**
     * 功能:定义全局执行的类
     * @param name{String}
     * @param target{Function}
     */
    global.global = function (name, target) {
        if (typeof name === 'string' && typeof target === 'object' && '' !== name) {
            if (global.action.global[name] === undefined) {
                global.action.global[name] = target;
                global.action.handerFunction(global.action.global[name], false);
            }
        }
    };

    /**
     * 功能:阻止事件冒泡
     *
     * @param evt{Event}
     * @returns {boolean}
     */
    global.stopEvent = function (evt) {
        evt = evt || window.event;
        if (evt.preventDefault) {
            evt.preventDefault();
            evt.stopPropagation();
        }
        if (evt.returnValue)
            evt.returnValue = false;
        if (evt.cancelBubble)
            evt.cancelBubble = true;
        return false;
    };


    /**
     * 初始化
     * 过程:1.检测x-foo-deine定义、读取x-foo-val和img延迟集合。
     *      2.如果页面定义了x-foo-deine元素,并且页面对象引用是合法存在控制中。将对象引用注入到全局page属性(window.page)。
     *      3.将x-foo-val集合注入到页面对象引用,即当前window.page上。
     *      4.调用当前页面引用(window.page)的ready和register方法。
     *      5.加载页面所有延迟加载img。
     *      5.检测页面所有延迟加载img集合是否加载完成,加载完成调用当前页面引用的imgReady方法。
     */
    global.onload = function () {
        var defineValue,
            pageDefine = doc.querySelector('[data-define]') || doc.querySelector('x-foo-define'),
            vals = doc.querySelectorAll('val') || doc.querySelectorAll('x-foo-val'),
            gVals = doc.querySelectorAll('gval') || doc.querySelectorAll('x-global-val'),
            delayImgs = doc.querySelectorAll('img[data-delay]');
        if (mod !== 'pro')
            logger.logMessage('Debug info:');
        //先开始加载图片
        if (delayImgs instanceof NodeList || delayImgs instanceof HTMLElement) {
            global.action.loadDelayImg(delayImgs);
        }
        if (pageDefine instanceof  HTMLElement) {
            defineValue = pageDefine.getAttribute(global.action.pageDefine);
            global.page = global.action.module[defineValue] ? global.action.module[defineValue] : null;
            if (global.page) {
                if (mod !== 'pro') {
                    logger.logMessage('[data-define = ' + defineValue + ']');
                    global.action.handerFunction(global.page, true);
                }

                //注入页面key-value
                if (vals)
                    global.action.initParams(global.page, vals);

                //图片加载后调用
                if (typeof global.page['imgReady'] === 'function') {
                    //1.5s检测一次
                    var check = self.setInterval(function () {
                        if (global.action.delayImgLoaded(delayImgs)) {
                            global.clearInterval(check);
                            global.page['imgReady']();
                        }
                    }, 1500);
                }

                try {
                    if (typeof global.page['ready'] === 'function')
                        global.page['ready']();
                    if (typeof global.page['register'] === 'function')
                        global.page['register']();
                } catch (e) {
                    console.log(e.message);
                }
            }
        } else {
            if (mod !== 'pro') {
                logger.logMessage('Attribute \'data-define\' is undefined!');
            }
            var fetch = doc.querySelector('[data-fetch]'),
                obj = '',
                func = '',
                args = [];
            if (fetch instanceof  HTMLElement) {
                obj = fetch.getAttribute('data-fetch');
                func = fetch.getAttribute('data-func');
                args = fetch.getAttribute('data-args');
                if (obj && fetch) {
                    var util = global.action.fetch(obj);
                    if (typeof util[func] === 'function') {
                        var arr = JSON.parse('[' + args + ']');
                        if (arr instanceof  Array)
                            util[func].apply(util, arr);
                        else
                            util[func].apply(util, []);
                    }
                }
            }
        }

        if (global.action.global) {
            var gs = Object.getOwnPropertyNames(global.action.global),
                length = gs.length,
                i = 0;
            for (; i < length; ++i) {
                var g = global.action.global[gs[i]];
                if (g && g instanceof Object) {
                    //注入页面key-value
                    if (gVals)
                        global.action.initParams(g, gVals);
                    try {
                        if (typeof g['register'] === 'function')
                            g['register']();
                    } catch (e) {
                        console.log(e.message);
                    }
                }
            }
        }
    };

}(window);

引用测试

引用测试

粗体测试
粗体

斜体测试
斜体测试

标题测试

标题一

标题二

标题三

标题四

标题五
标题六

链接测试
oschina

图片测试
人物

EMOJI测试
:fa-glass:

无序列表测试

  • 无序列表项一
  • 无序列表项二
  • 无序列表项三

有序列表测试
1. 有序列表项一
2. 有序列表项二
3. 有序列表项三

代码测试

/**
 * Created by ling on 2015/5/6.
 */
!function (global) {
    if (!global)
        return;
    'use strict';
    var doc,
        logger = new Logger(),
        mod = 'dev';
    var LeeJS = function (options) {
        this.fn = {};
        this.summary = {
            "author": "Lee",
            "license": "NO",
            "name": "LeeJS",
            "version": "2.0.0",
            "description": "LeeJS",
            "readme": "README",
            "repository": {
                "type": "",
                "url": ""
            }
        };

        this.debug = false;//调试模式
        this.pageDefine = 'data-define';
        this.module = {};//控制中心,页面对象集合
        this.base = {};//基类或工具类
        this.global = {};//全局类
        this.init(options);
    };

    LeeJS.prototype = {
        constructor: LeeJS,
        init: function (options) {
            if (options) {
                this.pageDefine = options.pageDefine ? options.pageDefine : this.pageDefine;
            }
        },
        /**
         * 功能:动态为page对象添加属性
         *
         * @param page{Object}
         * @param vals{NodeList}
         */
        initParams: function (page, vals) {
            var val = null,
                valAttr = '',
                valValue = '',
                length = vals.length;
            for (var i = 0; i < length; ++i) {
                val = vals[i];
                if (val instanceof HTMLElement) {
                    valAttr = val.getAttribute('data-name');
                    valValue = val.getAttribute('data-value');
                    if (valAttr) {
                        page[valAttr] = valValue;
                        if (mod !== 'pro') {
                            logger.logAttribute(valAttr, valValue);
                        }
                    }
                }
            }
        },
        /**
         * 功能:从控制中心取得基类或工具类
         * @param name{String}
         * @returns {Object}
         */
        fetch: function (name) {
            return this.base[name];
        },

        /**
         * 功能:织入切面,主要用于测量用户function性能、调用、日志等信息
         *     生产环境可去掉些功能以提高性能
         *
         * @param page{Object}
         * @param log{boolean}
         */
        handerFunction: function (page, log) {
            if (mod === 'pro')
                return;
            var keys = Object.getOwnPropertyNames(page.constructor.prototype).concat(Object.getOwnPropertyNames(page)),
                length = keys.length,
                i = 0;
            for (i; i < length; ++i) {
                var funcName = keys[i], fn = page[funcName];
                if (typeof fn === 'function' && funcName !== 'constructor') {
                    page[funcName] = fn.around(funcName);
                    if (log)
                        logger.logFunction(funcName);
                }
            }
        },
        /**
         * 功能:提供能外部调用
         * 兼容1.0版本提供的API
         */
        loadImg: function () {
            var imgs = global.document.querySelectorAll('img[data-delay]');
            this.loadDelayImg(imgs);
        },
        /**
         * 功能:将图象的懒加载属性写入src属性,进行图象加载
         *
         * @param imgs{NodeList}
         */
        loadDelayImg: function (imgs) {
            var length = imgs.length, i = 0;
            for (i; i < length; ++i) {
                var img = imgs[i], src;
                if (img instanceof HTMLElement) {
                    img.setAttribute('load', 'unload');
                    src = img.getAttribute('data-delay');
                    img.addEventListener('load', function () {
                        this.setAttribute('load', 'loaded');
                    });
                    img.addEventListener('error', function () {
                        this.setAttribute('load', 'error');
                    });
                    if (src)
                        img.setAttribute('src', src);
                }
            }
        },
        /**
         * 功能:检测img图象是否加载完成
         *
         * @param imgs{NodeList}
         * @returns {boolean}
         */
        delayImgLoaded: function (imgs) {
            var length = imgs.length, i = 0;
            for (; i < length; ++i) {
                var img = imgs[i];
                if (img instanceof HTMLElement) {
                    var load = img.getAttribute('load');
                    if (load === 'unload')
                        return false;
                }
            }
            return true;
        }
    };

    doc = global.document;
    global.action = new LeeJS({
        debug: true,
        pageDefine: 'data-define'
    });

    /**
     * 功能:定义普通页面对象
     *
     * @param name{String}
     * @param target{Function}
     */
    global.define = function (name, target) {
        if (typeof name === 'string' && typeof target === 'object' && '' !== name) {
            if (global.action.module[name] === undefined) {
                global.action.module[name] = target;
            }
        }
    };

    /**
     * 功能:定义普通基类或工具类
     *
     * @param name{String}
     * @param target{Function}
     */
    global.base = function (name, target) {
        if (typeof name === 'string' && typeof target === 'object' && '' !== name) {
            if (global.action.base[name] === undefined) {
                global.action.base[name] = target;
                global.action.handerFunction(global.action.base[name], false);
            }
        }
    };

    /**
     * 功能:定义全局执行的类
     * @param name{String}
     * @param target{Function}
     */
    global.global = function (name, target) {
        if (typeof name === 'string' && typeof target === 'object' && '' !== name) {
            if (global.action.global[name] === undefined) {
                global.action.global[name] = target;
                global.action.handerFunction(global.action.global[name], false);
            }
        }
    };

    /**
     * 功能:阻止事件冒泡
     *
     * @param evt{Event}
     * @returns {boolean}
     */
    global.stopEvent = function (evt) {
        evt = evt || window.event;
        if (evt.preventDefault) {
            evt.preventDefault();
            evt.stopPropagation();
        }
        if (evt.returnValue)
            evt.returnValue = false;
        if (evt.cancelBubble)
            evt.cancelBubble = true;
        return false;
    };


    /**
     * 初始化
     * 过程:1.检测x-foo-deine定义、读取x-foo-val和img延迟集合。
     *      2.如果页面定义了x-foo-deine元素,并且页面对象引用是合法存在控制中。将对象引用注入到全局page属性(window.page)。
     *      3.将x-foo-val集合注入到页面对象引用,即当前window.page上。
     *      4.调用当前页面引用(window.page)的ready和register方法。
     *      5.加载页面所有延迟加载img。
     *      5.检测页面所有延迟加载img集合是否加载完成,加载完成调用当前页面引用的imgReady方法。
     */
    global.onload = function () {
        var defineValue,
            pageDefine = doc.querySelector('[data-define]') || doc.querySelector('x-foo-define'),
            vals = doc.querySelectorAll('val') || doc.querySelectorAll('x-foo-val'),
            gVals = doc.querySelectorAll('gval') || doc.querySelectorAll('x-global-val'),
            delayImgs = doc.querySelectorAll('img[data-delay]');
        if (mod !== 'pro')
            logger.logMessage('Debug info:');
        //先开始加载图片
        if (delayImgs instanceof NodeList || delayImgs instanceof HTMLElement) {
            global.action.loadDelayImg(delayImgs);
        }
        if (pageDefine instanceof  HTMLElement) {
            defineValue = pageDefine.getAttribute(global.action.pageDefine);
            global.page = global.action.module[defineValue] ? global.action.module[defineValue] : null;
            if (global.page) {
                if (mod !== 'pro') {
                    logger.logMessage('[data-define = ' + defineValue + ']');
                    global.action.handerFunction(global.page, true);
                }

                //注入页面key-value
                if (vals)
                    global.action.initParams(global.page, vals);

                //图片加载后调用
                if (typeof global.page['imgReady'] === 'function') {
                    //1.5s检测一次
                    var check = self.setInterval(function () {
                        if (global.action.delayImgLoaded(delayImgs)) {
                            global.clearInterval(check);
                            global.page['imgReady']();
                        }
                    }, 1500);
                }

                try {
                    if (typeof global.page['ready'] === 'function')
                        global.page['ready']();
                    if (typeof global.page['register'] === 'function')
                        global.page['register']();
                } catch (e) {
                    console.log(e.message);
                }
            }
        } else {
            if (mod !== 'pro') {
                logger.logMessage('Attribute \'data-define\' is undefined!');
            }
            var fetch = doc.querySelector('[data-fetch]'),
                obj = '',
                func = '',
                args = [];
            if (fetch instanceof  HTMLElement) {
                obj = fetch.getAttribute('data-fetch');
                func = fetch.getAttribute('data-func');
                args = fetch.getAttribute('data-args');
                if (obj && fetch) {
                    var util = global.action.fetch(obj);
                    if (typeof util[func] === 'function') {
                        var arr = JSON.parse('[' + args + ']');
                        if (arr instanceof  Array)
                            util[func].apply(util, arr);
                        else
                            util[func].apply(util, []);
                    }
                }
            }
        }

        if (global.action.global) {
            var gs = Object.getOwnPropertyNames(global.action.global),
                length = gs.length,
                i = 0;
            for (; i < length; ++i) {
                var g = global.action.global[gs[i]];
                if (g && g instanceof Object) {
                    //注入页面key-value
                    if (gVals)
                        global.action.initParams(g, gVals);
                    try {
                        if (typeof g['register'] === 'function')
                            g['register']();
                    } catch (e) {
                        console.log(e.message);
                    }
                }
            }
        }
    };

}(window);

引用测试

引用测试