├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── docker-compose.yml ├── img ├── account.jpg ├── account_article_list.jpg ├── donate.png ├── index.jpg ├── licecap.gif └── search.jpg └── src ├── app.py ├── apps ├── __init__.py └── front │ ├── __init__.py │ ├── urls.py │ └── views.py ├── config.py ├── db └── readme.md ├── exts.py ├── manage.py ├── models.py ├── requirements.txt ├── static ├── common │ ├── editor.md │ │ ├── .gitignore │ │ ├── .jshintrc │ │ ├── BUGS.md │ │ ├── CHANGE.md │ │ ├── Gulpfile.js │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bower.json │ │ ├── css │ │ │ ├── editormd.css │ │ │ ├── editormd.logo.css │ │ │ ├── editormd.logo.min.css │ │ │ ├── editormd.min.css │ │ │ ├── editormd.preview.css │ │ │ └── editormd.preview.min.css │ │ ├── docs │ │ │ ├── editormd.js.html │ │ │ ├── fonts │ │ │ │ ├── OpenSans-Bold-webfont.eot │ │ │ │ ├── OpenSans-Bold-webfont.svg │ │ │ │ ├── OpenSans-Bold-webfont.woff │ │ │ │ ├── OpenSans-BoldItalic-webfont.eot │ │ │ │ ├── OpenSans-BoldItalic-webfont.svg │ │ │ │ ├── OpenSans-BoldItalic-webfont.woff │ │ │ │ ├── OpenSans-Italic-webfont.eot │ │ │ │ ├── OpenSans-Italic-webfont.svg │ │ │ │ ├── OpenSans-Italic-webfont.woff │ │ │ │ ├── OpenSans-Light-webfont.eot │ │ │ │ ├── OpenSans-Light-webfont.svg │ │ │ │ ├── OpenSans-Light-webfont.woff │ │ │ │ ├── OpenSans-LightItalic-webfont.eot │ │ │ │ ├── OpenSans-LightItalic-webfont.svg │ │ │ │ ├── OpenSans-LightItalic-webfont.woff │ │ │ │ ├── OpenSans-Regular-webfont.eot │ │ │ │ ├── OpenSans-Regular-webfont.svg │ │ │ │ └── OpenSans-Regular-webfont.woff │ │ │ ├── index.html │ │ │ ├── scripts │ │ │ │ ├── linenumber.js │ │ │ │ └── prettify │ │ │ │ │ ├── Apache-License-2.0.txt │ │ │ │ │ ├── lang-css.js │ │ │ │ │ └── prettify.js │ │ │ └── styles │ │ │ │ ├── jsdoc-default.css │ │ │ │ ├── prettify-jsdoc.css │ │ │ │ └── prettify-tomorrow.css │ │ ├── editormd.amd.js │ │ ├── editormd.amd.min.js │ │ ├── editormd.js │ │ ├── editormd.min.js │ │ ├── examples │ │ │ ├── @links.html │ │ │ ├── auto-height.html │ │ │ ├── change-mode.html │ │ │ ├── code-fold.html │ │ │ ├── css │ │ │ │ └── style.css │ │ │ ├── custom-keyboard-shortcuts.html │ │ │ ├── custom-toolbar.html │ │ │ ├── define-plugin.html │ │ │ ├── delay-renderer-preview.html │ │ │ ├── dynamic-create-editormd.html │ │ │ ├── emoji.html │ │ │ ├── extends.html │ │ │ ├── external-use.html │ │ │ ├── flowchart.html │ │ │ ├── form-get-value.html │ │ │ ├── full.html │ │ │ ├── goto-line.html │ │ │ ├── html-preview-markdown-to-html-custom-toc-container.html │ │ │ ├── html-preview-markdown-to-html.html │ │ │ ├── html-tags-decode.html │ │ │ ├── image-cross-domain-upload.html │ │ │ ├── image-upload.html │ │ │ ├── images │ │ │ │ ├── 4.jpg │ │ │ │ ├── 7.jpg │ │ │ │ ├── 8.jpg │ │ │ │ └── editormd-screenshot.png │ │ │ ├── index.html │ │ │ ├── js │ │ │ │ ├── jquery.min.js │ │ │ │ ├── require.min.js │ │ │ │ ├── sea.js │ │ │ │ ├── seajs-main.js │ │ │ │ └── zepto.min.js │ │ │ ├── katex.html │ │ │ ├── manually-load-modules.html │ │ │ ├── multi-editormd.html │ │ │ ├── multi-languages.html │ │ │ ├── on-off.html │ │ │ ├── onchange.html │ │ │ ├── onfullscreen.html │ │ │ ├── onload.html │ │ │ ├── onpreviewing-onpreviewed.html │ │ │ ├── onresize.html │ │ │ ├── onscroll-onpreviewscroll.html │ │ │ ├── onwatch-onunwatch.html │ │ │ ├── page-break.html │ │ │ ├── php │ │ │ │ ├── cross-domain-upload.php │ │ │ │ ├── editormd.uploader.class.php │ │ │ │ ├── post.php │ │ │ │ ├── upload.php │ │ │ │ └── upload_callback.html │ │ │ ├── readonly.html │ │ │ ├── resettings.html │ │ │ ├── search-replace.html │ │ │ ├── sequence-diagram.html │ │ │ ├── set-get-replace-selection.html │ │ │ ├── simple.html │ │ │ ├── sync-scrolling.html │ │ │ ├── task-lists.html │ │ │ ├── test.md │ │ │ ├── themes.html │ │ │ ├── toc.html │ │ │ ├── toolbar-auto-fixed.html │ │ │ ├── use-requirejs.html │ │ │ ├── use-seajs.html │ │ │ └── use-zepto.html │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── editormd-logo.eot │ │ │ ├── editormd-logo.svg │ │ │ ├── editormd-logo.ttf │ │ │ ├── editormd-logo.woff │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── images │ │ │ ├── loading.gif │ │ │ ├── loading@2x.gif │ │ │ ├── loading@3x.gif │ │ │ └── logos │ │ │ │ ├── editormd-favicon-16x16.ico │ │ │ │ ├── editormd-favicon-24x24.ico │ │ │ │ ├── editormd-favicon-32x32.ico │ │ │ │ ├── editormd-favicon-48x48.ico │ │ │ │ ├── editormd-favicon-64x64.ico │ │ │ │ ├── editormd-logo-114x114.png │ │ │ │ ├── editormd-logo-120x120.png │ │ │ │ ├── editormd-logo-144x144.png │ │ │ │ ├── editormd-logo-16x16.png │ │ │ │ ├── editormd-logo-180x180.png │ │ │ │ ├── editormd-logo-240x240.png │ │ │ │ ├── editormd-logo-24x24.png │ │ │ │ ├── editormd-logo-320x320.png │ │ │ │ ├── editormd-logo-32x32.png │ │ │ │ ├── editormd-logo-48x48.png │ │ │ │ ├── editormd-logo-57x57.png │ │ │ │ ├── editormd-logo-64x64.png │ │ │ │ ├── editormd-logo-72x72.png │ │ │ │ ├── editormd-logo-96x96.png │ │ │ │ └── vi.png │ │ ├── languages │ │ │ ├── en.js │ │ │ └── zh-tw.js │ │ ├── package.json │ │ ├── plugins │ │ │ ├── code-block-dialog │ │ │ │ └── code-block-dialog.js │ │ │ ├── emoji-dialog │ │ │ │ ├── emoji-dialog.js │ │ │ │ └── emoji.json │ │ │ ├── goto-line-dialog │ │ │ │ └── goto-line-dialog.js │ │ │ ├── help-dialog │ │ │ │ ├── help-dialog.js │ │ │ │ └── help.md │ │ │ ├── html-entities-dialog │ │ │ │ ├── html-entities-dialog.js │ │ │ │ └── html-entities.json │ │ │ ├── image-dialog │ │ │ │ └── image-dialog.js │ │ │ ├── link-dialog │ │ │ │ └── link-dialog.js │ │ │ ├── plugin-template.js │ │ │ ├── preformatted-text-dialog │ │ │ │ └── preformatted-text-dialog.js │ │ │ ├── reference-link-dialog │ │ │ │ └── reference-link-dialog.js │ │ │ ├── table-dialog │ │ │ │ └── table-dialog.js │ │ │ └── test-plugin │ │ │ │ └── test-plugin.js │ │ ├── scss │ │ │ ├── editormd.codemirror.scss │ │ │ ├── editormd.dialog.scss │ │ │ ├── editormd.form.scss │ │ │ ├── editormd.grid.scss │ │ │ ├── editormd.logo.scss │ │ │ ├── editormd.menu.scss │ │ │ ├── editormd.preview.scss │ │ │ ├── editormd.preview.themes.scss │ │ │ ├── editormd.scss │ │ │ ├── editormd.tab.scss │ │ │ ├── editormd.themes.scss │ │ │ ├── font-awesome.scss │ │ │ ├── github-markdown.scss │ │ │ └── prettify.scss │ │ ├── src │ │ │ └── editormd.js │ │ └── tests │ │ │ ├── bootstrap-test.html │ │ │ ├── codemirror-searchbox-test.html │ │ │ ├── codemirror-test.html │ │ │ ├── css │ │ │ ├── bootstrap-theme.min.css │ │ │ └── bootstrap.min.css │ │ │ ├── js │ │ │ ├── bootstrap.min.js │ │ │ └── searchbox.js │ │ │ ├── katex-tests.html │ │ │ ├── marked-@at-test.html │ │ │ ├── marked-emoji-test.html │ │ │ ├── marked-heading-link-test.html │ │ │ ├── marked-todo-list-test.html │ │ │ └── qunit │ │ │ ├── qunit-1.16.0.css │ │ │ └── qunit-1.16.0.js │ ├── jquery.leoweather.min.js │ ├── jquery.min.js │ ├── jquery.slimscroll.min.js │ ├── jquery.toTop.min.js │ ├── jump.js │ ├── layui │ │ ├── css │ │ │ ├── layui.css │ │ │ ├── layui.mobile.css │ │ │ └── modules │ │ │ │ ├── code.css │ │ │ │ ├── laydate │ │ │ │ └── default │ │ │ │ │ └── laydate.css │ │ │ │ └── layer │ │ │ │ └── default │ │ │ │ ├── icon-ext.png │ │ │ │ ├── icon.png │ │ │ │ ├── layer.css │ │ │ │ ├── loading-0.gif │ │ │ │ ├── loading-1.gif │ │ │ │ └── loading-2.gif │ │ ├── font │ │ │ ├── iconfont.eot │ │ │ ├── iconfont.svg │ │ │ ├── iconfont.ttf │ │ │ ├── iconfont.woff │ │ │ └── iconfont.woff2 │ │ ├── images │ │ │ └── face │ │ │ │ ├── 0.gif │ │ │ │ ├── 1.gif │ │ │ │ ├── 10.gif │ │ │ │ ├── 11.gif │ │ │ │ ├── 12.gif │ │ │ │ ├── 13.gif │ │ │ │ ├── 14.gif │ │ │ │ ├── 15.gif │ │ │ │ ├── 16.gif │ │ │ │ ├── 17.gif │ │ │ │ ├── 18.gif │ │ │ │ ├── 19.gif │ │ │ │ ├── 2.gif │ │ │ │ ├── 20.gif │ │ │ │ ├── 21.gif │ │ │ │ ├── 22.gif │ │ │ │ ├── 23.gif │ │ │ │ ├── 24.gif │ │ │ │ ├── 25.gif │ │ │ │ ├── 26.gif │ │ │ │ ├── 27.gif │ │ │ │ ├── 28.gif │ │ │ │ ├── 29.gif │ │ │ │ ├── 3.gif │ │ │ │ ├── 30.gif │ │ │ │ ├── 31.gif │ │ │ │ ├── 32.gif │ │ │ │ ├── 33.gif │ │ │ │ ├── 34.gif │ │ │ │ ├── 35.gif │ │ │ │ ├── 36.gif │ │ │ │ ├── 37.gif │ │ │ │ ├── 38.gif │ │ │ │ ├── 39.gif │ │ │ │ ├── 4.gif │ │ │ │ ├── 40.gif │ │ │ │ ├── 41.gif │ │ │ │ ├── 42.gif │ │ │ │ ├── 43.gif │ │ │ │ ├── 44.gif │ │ │ │ ├── 45.gif │ │ │ │ ├── 46.gif │ │ │ │ ├── 47.gif │ │ │ │ ├── 48.gif │ │ │ │ ├── 49.gif │ │ │ │ ├── 5.gif │ │ │ │ ├── 50.gif │ │ │ │ ├── 51.gif │ │ │ │ ├── 52.gif │ │ │ │ ├── 53.gif │ │ │ │ ├── 54.gif │ │ │ │ ├── 55.gif │ │ │ │ ├── 56.gif │ │ │ │ ├── 57.gif │ │ │ │ ├── 58.gif │ │ │ │ ├── 59.gif │ │ │ │ ├── 6.gif │ │ │ │ ├── 60.gif │ │ │ │ ├── 61.gif │ │ │ │ ├── 62.gif │ │ │ │ ├── 63.gif │ │ │ │ ├── 64.gif │ │ │ │ ├── 65.gif │ │ │ │ ├── 66.gif │ │ │ │ ├── 67.gif │ │ │ │ ├── 68.gif │ │ │ │ ├── 69.gif │ │ │ │ ├── 7.gif │ │ │ │ ├── 70.gif │ │ │ │ ├── 71.gif │ │ │ │ ├── 8.gif │ │ │ │ └── 9.gif │ │ ├── lay │ │ │ └── modules │ │ │ │ ├── carousel.js │ │ │ │ ├── code.js │ │ │ │ ├── colorpicker.js │ │ │ │ ├── element.js │ │ │ │ ├── flow.js │ │ │ │ ├── form.js │ │ │ │ ├── jquery.js │ │ │ │ ├── laydate.js │ │ │ │ ├── layedit.js │ │ │ │ ├── layer.js │ │ │ │ ├── laypage.js │ │ │ │ ├── laytpl.js │ │ │ │ ├── mobile.js │ │ │ │ ├── rate.js │ │ │ │ ├── slider.js │ │ │ │ ├── table.js │ │ │ │ ├── transfer.js │ │ │ │ ├── tree.js │ │ │ │ ├── upload.js │ │ │ │ └── util.js │ │ ├── layui.all.js │ │ └── layui.js │ ├── zlajax.js │ └── zlparam.js ├── favicon.ico └── front │ ├── css │ ├── bootstrap.min.css │ ├── font-awesome.min.css │ ├── front_announcement.css │ ├── front_article.css │ ├── front_base.css │ ├── front_index.css │ ├── front_wechat_github.css │ ├── front_weekly.css │ ├── front_weekly_detail.css │ └── style.css │ ├── fonts │ ├── FontAwesome.otf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ └── glyphicons-halflings-regular.woff │ ├── img │ ├── close.png │ ├── close1.png │ ├── donate.png │ ├── doonsec.png │ ├── doonsec_bak.png │ ├── doonsec_bak3.png │ ├── greenarrowright.gif │ ├── like.png │ ├── list.png │ ├── list1.png │ ├── search.png │ ├── search1.png │ ├── tipbg.png │ └── wechat.jpg │ └── js │ ├── bootstrap.js │ ├── countUp.js │ ├── custom.js │ ├── front_announcement.js │ ├── front_base.js │ ├── front_index.js │ └── front_search.js ├── templates └── front │ ├── 2019.html │ ├── front_404.html │ ├── front_account_list.html │ ├── front_announcement.html │ ├── front_base.html │ ├── front_index.html │ └── front_wechat_github.html └── utils ├── __init__.py ├── field.py └── tools.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | *.db 6 | # C extensions 7 | *.so 8 | .idea 9 | wechat.md 10 | # Distribution / packaging 11 | .Python 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | pip-wheel-metadata/ 25 | share/python-wheels/ 26 | *.egg-info/ 27 | .installed.cfg 28 | *.egg 29 | MANIFEST 30 | 31 | # PyInstaller 32 | # Usually these files are written by a python script from a template 33 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 34 | *.manifest 35 | *.spec 36 | 37 | # Installer logs 38 | pip-log.txt 39 | pip-delete-this-directory.txt 40 | 41 | # Unit test / coverage reports 42 | htmlcov/ 43 | .tox/ 44 | .nox/ 45 | .coverage 46 | .coverage.* 47 | .cache 48 | nosetests.xml 49 | coverage.xml 50 | *.cover 51 | *.py,cover 52 | .hypothesis/ 53 | .pytest_cache/ 54 | 55 | # Translations 56 | *.mo 57 | *.pot 58 | 59 | # Django stuff: 60 | *.log 61 | local_settings.py 62 | db.sqlite3 63 | db.sqlite3-journal 64 | 65 | # Flask stuff: 66 | instance/ 67 | .webassets-cache 68 | 69 | # Scrapy stuff: 70 | .scrapy 71 | 72 | # Sphinx documentation 73 | docs/_build/ 74 | 75 | # PyBuilder 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | .python-version 87 | 88 | # pipenv 89 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 90 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 91 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 92 | # install all needed dependencies. 93 | #Pipfile.lock 94 | 95 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 96 | __pypackages__/ 97 | 98 | # Celery stuff 99 | celerybeat-schedule 100 | celerybeat.pid 101 | 102 | # SageMath parsed files 103 | *.sage.py 104 | 105 | # Environments 106 | .env 107 | .venv 108 | env/ 109 | venv/ 110 | ENV/ 111 | env.bak/ 112 | venv.bak/ 113 | 114 | # Spyder project settings 115 | .spyderproject 116 | .spyproject 117 | 118 | # Rope project settings 119 | .ropeproject 120 | 121 | # mkdocs documentation 122 | /site 123 | 124 | # mypy 125 | .mypy_cache/ 126 | .dmypy.json 127 | dmypy.json 128 | 129 | # Pyre type checker 130 | .pyre/ 131 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.6 2 | 3 | 4 | COPY ./src /app/src 5 | 6 | WORKDIR /app/src 7 | 8 | RUN pip install -r requirements.txt -i https://pypi.douban.com/simple 9 | RUN pip install gunicorn==19.5.0 gevent==1.4.0 -i https://pypi.douban.com/simple 10 | 11 | CMD ["gunicorn", "-k", "gevent", "-b", "0.0.0.0:8000", "app:app"] -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 洞见网安 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WechatTogetherOffline 2 | 微信聚合在线演示 http://wechat.doonsec.com 3 | 4 | ![gif动态使用效果图](/img/licecap.gif) 5 | 6 | 7 | ## 当前版本信息 8 | 9 | - V.0.1.2 Beta 10 | 11 | 12 | ## 介绍 13 | 14 | 当我们看过一篇公众号文章忘记收藏,那天想找的时候可能已经忘了是那个公众号的那篇历史文章了。 15 | 16 | **洞见微信聚合**是一个收录安全圈公众号历史文章链接的工具。帮助使用者根据关键字快速找到公众号的历史文章。解决微信`搜一搜`搜索信息不全面的困扰。 17 | 18 | 19 | - **数据全**:目前整理数据已有10W+,每月数据增量大约5000篇。 20 | - **速度快**:检索结果1s出现,更有多种查询语法,可根据源码魔改查询方式。 21 | - **轻安装**:使用python开发,安装简便,docker一步搞定,可在`win`+`mac`+`linux`平台快速部署 22 | 23 | 数据库信息的不足肯定会成为一个诟病的地方。前期数据的收录相对局限,需要多人提交维护一个相对全面的公众号列表。 24 | 25 | 26 | ## 部署 27 | 28 | 本项目提供较大的数据源,故源码与数据分离。部署时候需要分别下载这两部分内容。 29 | 30 | **本地安装** 31 | 32 | 语言选择: 33 | - python 3.5+ 34 | 35 | 步骤: 36 | 1. 下载源码 37 | 38 | ``` 39 | https://github.com/doonsec/WechatTogetherOffline.git 40 | ``` 41 | 2. 下载文章数据库--`wechat.db` 42 | 43 | ``` 44 | 链接:https://pan.baidu.com/s/1YHpyqgYCS6asiCy8t0U17w 45 | 提取码:doon 46 | ``` 47 | 48 | 3. 移动下载的数据库`wechat.db`至目录`src/db`下 49 | 50 | 51 | 4. 安装python第三方库 52 | 53 | ``` 54 | cd src 55 | pip install -r requirements.txt 56 | ``` 57 | 5. 运行 58 | 59 | ``` 60 | cd src 61 | python app.py 62 | ``` 63 | 6. 打开浏览器,访问`127.0.0.1:8000` 64 | 65 | 部署完成。 66 | 67 | **docker部署** 68 | 69 | *方法一* 70 | 71 | 步骤: 72 | 1. 下载源码 73 | 74 | ``` 75 | https://github.com/doonsec/WechatTogetherOffline.git 76 | ``` 77 | 2. 下载文章数据库--`wechat.db` 78 | 79 | ``` 80 | 见上 81 | ``` 82 | 83 | 3. 移动下载的数据库`wechat.db`至目录`src/db`下 84 | 85 | 4. 部署docker 86 | 生成镜像 87 | ``` 88 | docker build -t 'wechattogether' . 89 | ``` 90 | 运行容器 91 | 92 | ``` 93 | docker run -name doonsec_wechat -p 8000:8000 wechattogether -d 94 | ``` 95 | 6. 打开浏览器,访问`127.0.0.1:8000` 96 | 97 | 部署完成。 98 | 99 | *方法二* 100 | 101 | 步骤: 102 | 1. 下载源码 103 | 104 | ``` 105 | https://github.com/doonsec/WechatTogetherOffline.git 106 | ``` 107 | 2. 下载文章数据库--`wechat.db` 108 | 109 | ``` 110 | 见上 111 | ``` 112 | 113 | 3. 移动下载的数据库`wechat.db`至目录`src/db`下 114 | 115 | 4. 执行docker-compose.yml文件 116 | ``` 117 | docker-compose up -d 118 | ``` 119 | 5. 打开浏览器,访问`127.0.0.1:8000` 120 | 121 | 部署完成。 122 | 123 | 124 | 125 | ## 界面展示 126 | 127 | **首页展示** 128 | 129 | ![](/img/index.jpg) 130 | 131 | **单个公众号文章列表** 132 | 133 | ![](/img/account_article_list.jpg) 134 | 135 | **关键字索引** 136 | 支持`|`、`&`语法索引 137 | ![](/img/search.jpg) 138 | 139 | **公众号展示** 140 | ![](/img/account.jpg) 141 | 142 | 143 | ## 版本迭代 144 | 145 | - v.0.1.2 修复公众号展示错误 146 | - v.0.1.1 修复公众号展示错误 147 | - v.0.1.0 初始化项目 148 | 149 | ## 贡献 150 | you don`t 151 | 152 | ![](img/donate.png) 153 | 154 | 155 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | web: 4 | build: . 5 | ports: 6 | - "8000:8000" -------------------------------------------------------------------------------- /img/account.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/img/account.jpg -------------------------------------------------------------------------------- /img/account_article_list.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/img/account_article_list.jpg -------------------------------------------------------------------------------- /img/donate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/img/donate.png -------------------------------------------------------------------------------- /img/index.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/img/index.jpg -------------------------------------------------------------------------------- /img/licecap.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/img/licecap.gif -------------------------------------------------------------------------------- /img/search.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/img/search.jpg -------------------------------------------------------------------------------- /src/app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | from flask_wtf.csrf import CSRFProtect 3 | 4 | import config 5 | from apps.front import bp as front_bp 6 | from exts import db 7 | 8 | csrf = CSRFProtect() 9 | 10 | 11 | def create_app(): 12 | app = Flask(__name__) 13 | app.config.from_object(config) # 初始化测试环境配置 14 | app.register_blueprint(front_bp) 15 | db.init_app(app) 16 | csrf.init_app(app) 17 | return app 18 | 19 | 20 | app = create_app() 21 | 22 | if __name__ == '__main__': 23 | app.run(host='0.0.0.0', port=8000, debug=True) 24 | -------------------------------------------------------------------------------- /src/apps/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | @project : src 4 | @Time : 2020/11/1 15:17 5 | @Auth : AJay13 6 | @File :__init__.py.py 7 | @IDE :PyCharm 8 | @Motto:ABC(Always Be Coding) 9 | 10 | """ -------------------------------------------------------------------------------- /src/apps/front/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: UTF-8 -*- 2 | __author__ = 'Joynice' 3 | from .urls import bp 4 | -------------------------------------------------------------------------------- /src/apps/front/urls.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | @project : src 4 | @Time : 2020/11/1 15:34 5 | @Auth : AJay13 6 | @File :urls.py 7 | @IDE :PyCharm 8 | @Motto:ABC(Always Be Coding) 9 | 10 | """ 11 | from flask import Blueprint,render_template 12 | 13 | from utils import tools 14 | from .views import AccountListView, YearReportView, AnnouncementView, WechatGithubView, IndexView, ArticleIDView, \ 15 | ArticlesView, GetImgView, SearchView, TagsView 16 | 17 | bp = Blueprint('front', __name__, url_prefix='/') 18 | 19 | bp.add_url_rule('/', view_func=IndexView.as_view('index')) # 首页展示 20 | bp.add_url_rule('article_id/', view_func=ArticleIDView.as_view('article_id')) # 获取指定ID文章的内容 21 | bp.add_url_rule('articles/', view_func=ArticlesView.as_view('articles')) # 公告展示 22 | 23 | bp.add_url_rule('get_img/', view_func=GetImgView.as_view('get_img')) # 公告展示 24 | bp.add_url_rule('search/', view_func=SearchView.as_view('search')) # 公告展示 25 | bp.add_url_rule('tags/', view_func=TagsView.as_view('tags')) # 公告展示 26 | 27 | # 公告模块 28 | bp.add_url_rule('announcement/', view_func=AnnouncementView.as_view('announcement')) # 公告展示 29 | 30 | # 快速关注公众号(彩蛋 ) 31 | bp.add_url_rule('wechat_github/', view_func=WechatGithubView.as_view('wechat_github')) # 快速关注公众号 32 | 33 | # 2019年报(公众号图表总结 ) 34 | bp.add_url_rule('year_report/', view_func=YearReportView.as_view('year_report')) # 年报总结 35 | 36 | # 公众号展示 37 | bp.add_url_rule('account_list/', view_func=AccountListView.as_view('account_list')) # 公众号展示 38 | 39 | # 前端过滤器 40 | bp.add_app_template_filter(tools.filter_html, 'Html') 41 | bp.add_app_template_filter(tools.url_remove_info, 'url_remove_info') 42 | bp.add_app_template_filter(tools.markdown2html, 'markdown2html') 43 | 44 | @bp.app_errorhandler(404) 45 | def page_not_found(error): 46 | 47 | return render_template('front/front_404.html'), 404 48 | -------------------------------------------------------------------------------- /src/config.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | @project : src 4 | @Time : 2020/11/1 15:11 5 | @Auth : AJay13 6 | @File :config.py 7 | @IDE :PyCharm 8 | @Motto:ABC(Always Be Coding) 9 | 10 | """ 11 | 12 | SQLALCHEMY_DATABASE_URI = 'sqlite:///db/wechat.db' 13 | SQLALCHEMY_TRACK_MODIFICATIONS = True 14 | SECRET_KEY = 'DROPS' 15 | # 首页文章加载片数 16 | FRONT_ARTICLES = 10 17 | 18 | VERSON ='V.0.1.2' -------------------------------------------------------------------------------- /src/db/readme.md: -------------------------------------------------------------------------------- 1 | ## 放置sqllite数据库目录 2 | 3 | 文件名称为`wechat.db`.如需更新数据需要将新的文件名称更改为`wechat.db`.替换原来的数据库文件 4 | -------------------------------------------------------------------------------- /src/exts.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | @project : src 4 | @Time : 2020/11/1 15:15 5 | @Auth : AJay13 6 | @File :exts.py 7 | @IDE :PyCharm 8 | @Motto:ABC(Always Be Coding) 9 | 10 | """ 11 | 12 | 13 | from flask_sqlalchemy import SQLAlchemy 14 | 15 | db = SQLAlchemy() -------------------------------------------------------------------------------- /src/manage.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | @project : src 4 | @Time : 2020/11/1 15:05 5 | @Auth : AJay13 6 | @File :manage.py 7 | @IDE :PyCharm 8 | @Motto:ABC(Always Be Coding) 9 | 10 | """ 11 | 12 | from flask_migrate import Migrate, MigrateCommand 13 | from flask_script import Manager 14 | 15 | from app import create_app 16 | from exts import db 17 | 18 | app = create_app() 19 | 20 | manager = Manager(app) 21 | Migrate(app, db) 22 | manager.add_command('db', MigrateCommand) 23 | 24 | if __name__ == '__main__': 25 | manager.run() 26 | -------------------------------------------------------------------------------- /src/requirements.txt: -------------------------------------------------------------------------------- 1 | alembic==1.4.3 2 | click==7.1.2 3 | Flask==1.1.2 4 | Flask-Migrate==2.5.3 5 | Flask-Script==2.0.6 6 | Flask-SQLAlchemy==2.4.4 7 | Flask-WTF==0.14.3 8 | importlib-metadata==2.0.0 9 | itsdangerous==1.1.0 10 | Jinja2==2.11.2 11 | Mako==1.1.3 12 | Markdown==3.3.3 13 | MarkupSafe==1.1.1 14 | python-dateutil==2.8.1 15 | python-editor==1.0.4 16 | shortuuid==1.0.1 17 | six==1.15.0 18 | SQLAlchemy==1.3.20 19 | Werkzeug==1.0.1 20 | WTForms==2.3.3 21 | zipp==3.4.0 22 | -------------------------------------------------------------------------------- /src/static/common/editor.md/.gitignore: -------------------------------------------------------------------------------- 1 | logs 2 | *.log 3 | *.pid 4 | *.seed 5 | node_modules/ 6 | .sass-cache/ 7 | research/ 8 | test/ 9 | backup/ 10 | examples/uploads/**/* 11 | *.bat 12 | *.sh 13 | .project 14 | .url 15 | css/*.map -------------------------------------------------------------------------------- /src/static/common/editor.md/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esnext": true, 3 | "bitwise": true, 4 | "camelcase": true, 5 | "curly": true, 6 | "eqeqeq": true, 7 | "immed": true, 8 | "indent": 4, 9 | "latedef": true, 10 | "newcap": true, 11 | "noarg": true, 12 | "quotmark": "double", 13 | "regexp": true, 14 | "undef": true, 15 | "unused": true, 16 | "strict": true, 17 | "trailing": true, 18 | "smarttabs": true, 19 | "white": true 20 | } -------------------------------------------------------------------------------- /src/static/common/editor.md/BUGS.md: -------------------------------------------------------------------------------- 1 | #Bugs 2 | 3 | > 说明:删除线表示已经解决。 4 | 5 | ####IE8 6 | 7 | - ~~不能加载;~~ 8 | - flowChart(流程图)、sequenceDiagram(序列图)不支持IE8; 9 | - ~~不支持Markdown转HTML页面解析预览;~~ 10 | 11 | ####IE8 & IE9 & IE10 12 | 13 | - KaTeX会出现解析错误,但不影响程序运行; 14 | 15 | ####Sea.js 16 | 17 | - ~~Raphael.js无法加载;~~ 18 | 19 | ####Require.js 20 | 21 | - ~~CodeMirror编辑器的代码无法高亮;~~ 22 | - ~~sequenceDiagram不支持: `Uncaught TypeError: Cannot call method 'isArray' of undefined.`~~ 23 | -------------------------------------------------------------------------------- /src/static/common/editor.md/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 pandao 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /src/static/common/editor.md/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "editor.md", 3 | "version": "1.5.0", 4 | "homepage": "https://github.com/pandao/editor.md", 5 | "authors": [ 6 | "Pandao " 7 | ], 8 | "description": "Open source online markdown editor.", 9 | "keywords": [ 10 | "editor.md", 11 | "markdown", 12 | "editor" 13 | ], 14 | "license": "MIT", 15 | "ignore": [ 16 | "**/.*", 17 | "research", 18 | "docs", 19 | "node_modules", 20 | "bower_components", 21 | "test", 22 | "tests" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /src/static/common/editor.md/css/editormd.logo.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Editor.md 3 | * 4 | * @file editormd.logo.css 5 | * @version v1.5.0 6 | * @description Open source online markdown editor. 7 | * @license MIT License 8 | * @author Pandao 9 | * {@link https://github.com/pandao/editor.md} 10 | * @updateTime 2015-06-09 11 | */ 12 | 13 | /*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */ 14 | @font-face { 15 | font-family: 'editormd-logo'; 16 | src: url("../fonts/editormd-logo.eot?-5y8q6h"); 17 | src: url(".../fonts/editormd-logo.eot?#iefix-5y8q6h") format("embedded-opentype"), url("../fonts/editormd-logo.woff?-5y8q6h") format("woff"), url("../fonts/editormd-logo.ttf?-5y8q6h") format("truetype"), url("../fonts/editormd-logo.svg?-5y8q6h#icomoon") format("svg"); 18 | font-weight: normal; 19 | font-style: normal; 20 | } 21 | .editormd-logo, 22 | .editormd-logo-1x, 23 | .editormd-logo-2x, 24 | .editormd-logo-3x, 25 | .editormd-logo-4x, 26 | .editormd-logo-5x, 27 | .editormd-logo-6x, 28 | .editormd-logo-7x, 29 | .editormd-logo-8x { 30 | font-family: 'editormd-logo'; 31 | speak: none; 32 | font-style: normal; 33 | font-weight: normal; 34 | font-variant: normal; 35 | text-transform: none; 36 | font-size: inherit; 37 | line-height: 1; 38 | display: inline-block; 39 | text-rendering: auto; 40 | vertical-align: inherit; 41 | -webkit-font-smoothing: antialiased; 42 | -moz-osx-font-smoothing: grayscale; 43 | } 44 | .editormd-logo:before, 45 | .editormd-logo-1x:before, 46 | .editormd-logo-2x:before, 47 | .editormd-logo-3x:before, 48 | .editormd-logo-4x:before, 49 | .editormd-logo-5x:before, 50 | .editormd-logo-6x:before, 51 | .editormd-logo-7x:before, 52 | .editormd-logo-8x:before { 53 | content: "\e1987"; 54 | /* 55 | HTML Entity 󡦇 56 | example: 57 | */ 58 | } 59 | 60 | .editormd-logo-1x { 61 | font-size: 1em; 62 | } 63 | 64 | .editormd-logo-lg { 65 | font-size: 1.2em; 66 | } 67 | 68 | .editormd-logo-2x { 69 | font-size: 2em; 70 | } 71 | 72 | .editormd-logo-3x { 73 | font-size: 3em; 74 | } 75 | 76 | .editormd-logo-4x { 77 | font-size: 4em; 78 | } 79 | 80 | .editormd-logo-5x { 81 | font-size: 5em; 82 | } 83 | 84 | .editormd-logo-6x { 85 | font-size: 6em; 86 | } 87 | 88 | .editormd-logo-7x { 89 | font-size: 7em; 90 | } 91 | 92 | .editormd-logo-8x { 93 | font-size: 8em; 94 | } 95 | 96 | .editormd-logo-color { 97 | color: #2196F3; 98 | } 99 | -------------------------------------------------------------------------------- /src/static/common/editor.md/css/editormd.logo.min.css: -------------------------------------------------------------------------------- 1 | /*! Editor.md v1.5.0 | editormd.logo.min.css | Open source online markdown editor. | MIT License | By: Pandao | https://github.com/pandao/editor.md | 2015-06-09 */ 2 | /*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */@font-face{font-family:editormd-logo;src:url(../fonts/editormd-logo.eot?-5y8q6h);src:url(.../fonts/editormd-logo.eot?#iefix-5y8q6h)format("embedded-opentype"),url(../fonts/editormd-logo.woff?-5y8q6h)format("woff"),url(../fonts/editormd-logo.ttf?-5y8q6h)format("truetype"),url(../fonts/editormd-logo.svg?-5y8q6h#icomoon)format("svg");font-weight:400;font-style:normal}.editormd-logo,.editormd-logo-1x,.editormd-logo-2x,.editormd-logo-3x,.editormd-logo-4x,.editormd-logo-5x,.editormd-logo-6x,.editormd-logo-7x,.editormd-logo-8x{font-family:editormd-logo;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;font-size:inherit;line-height:1;display:inline-block;text-rendering:auto;vertical-align:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.editormd-logo-1x:before,.editormd-logo-2x:before,.editormd-logo-3x:before,.editormd-logo-4x:before,.editormd-logo-5x:before,.editormd-logo-6x:before,.editormd-logo-7x:before,.editormd-logo-8x:before,.editormd-logo:before{content:"\e1987"}.editormd-logo-1x{font-size:1em}.editormd-logo-lg{font-size:1.2em}.editormd-logo-2x{font-size:2em}.editormd-logo-3x{font-size:3em}.editormd-logo-4x{font-size:4em}.editormd-logo-5x{font-size:5em}.editormd-logo-6x{font-size:6em}.editormd-logo-7x{font-size:7em}.editormd-logo-8x{font-size:8em}.editormd-logo-color{color:#2196F3} -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/fonts/OpenSans-Bold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/docs/fonts/OpenSans-Bold-webfont.eot -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/fonts/OpenSans-Bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/docs/fonts/OpenSans-Bold-webfont.woff -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/fonts/OpenSans-BoldItalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/docs/fonts/OpenSans-BoldItalic-webfont.eot -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/fonts/OpenSans-BoldItalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/docs/fonts/OpenSans-BoldItalic-webfont.woff -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/fonts/OpenSans-Italic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/docs/fonts/OpenSans-Italic-webfont.eot -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/fonts/OpenSans-Italic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/docs/fonts/OpenSans-Italic-webfont.woff -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/fonts/OpenSans-Light-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/docs/fonts/OpenSans-Light-webfont.eot -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/fonts/OpenSans-Light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/docs/fonts/OpenSans-Light-webfont.woff -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/fonts/OpenSans-LightItalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/docs/fonts/OpenSans-LightItalic-webfont.eot -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/fonts/OpenSans-LightItalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/docs/fonts/OpenSans-LightItalic-webfont.woff -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/fonts/OpenSans-Regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/docs/fonts/OpenSans-Regular-webfont.eot -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/fonts/OpenSans-Regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/docs/fonts/OpenSans-Regular-webfont.woff -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | JSDoc: Home 6 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 |

Home

21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |

30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 |
51 | 52 | 55 | 56 |
57 | 58 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/scripts/linenumber.js: -------------------------------------------------------------------------------- 1 | /*global document */ 2 | (function() { 3 | var source = document.getElementsByClassName('prettyprint source linenums'); 4 | var i = 0; 5 | var lineNumber = 0; 6 | var lineId; 7 | var lines; 8 | var totalLines; 9 | var anchorHash; 10 | 11 | if (source && source[0]) { 12 | anchorHash = document.location.hash.substring(1); 13 | lines = source[0].getElementsByTagName('li'); 14 | totalLines = lines.length; 15 | 16 | for (; i < totalLines; i++) { 17 | lineNumber++; 18 | lineId = 'line' + lineNumber; 19 | lines[i].id = lineId; 20 | if (lineId === anchorHash) { 21 | lines[i].className += ' selected'; 22 | } 23 | } 24 | } 25 | })(); 26 | -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/scripts/prettify/lang-css.js: -------------------------------------------------------------------------------- 1 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", 2 | /^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); 3 | -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/styles/prettify-jsdoc.css: -------------------------------------------------------------------------------- 1 | /* JSDoc prettify.js theme */ 2 | 3 | /* plain text */ 4 | .pln { 5 | color: #000000; 6 | font-weight: normal; 7 | font-style: normal; 8 | } 9 | 10 | /* string content */ 11 | .str { 12 | color: #006400; 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | 17 | /* a keyword */ 18 | .kwd { 19 | color: #000000; 20 | font-weight: bold; 21 | font-style: normal; 22 | } 23 | 24 | /* a comment */ 25 | .com { 26 | font-weight: normal; 27 | font-style: italic; 28 | } 29 | 30 | /* a type name */ 31 | .typ { 32 | color: #000000; 33 | font-weight: normal; 34 | font-style: normal; 35 | } 36 | 37 | /* a literal value */ 38 | .lit { 39 | color: #006400; 40 | font-weight: normal; 41 | font-style: normal; 42 | } 43 | 44 | /* punctuation */ 45 | .pun { 46 | color: #000000; 47 | font-weight: bold; 48 | font-style: normal; 49 | } 50 | 51 | /* lisp open bracket */ 52 | .opn { 53 | color: #000000; 54 | font-weight: bold; 55 | font-style: normal; 56 | } 57 | 58 | /* lisp close bracket */ 59 | .clo { 60 | color: #000000; 61 | font-weight: bold; 62 | font-style: normal; 63 | } 64 | 65 | /* a markup tag name */ 66 | .tag { 67 | color: #006400; 68 | font-weight: normal; 69 | font-style: normal; 70 | } 71 | 72 | /* a markup attribute name */ 73 | .atn { 74 | color: #006400; 75 | font-weight: normal; 76 | font-style: normal; 77 | } 78 | 79 | /* a markup attribute value */ 80 | .atv { 81 | color: #006400; 82 | font-weight: normal; 83 | font-style: normal; 84 | } 85 | 86 | /* a declaration */ 87 | .dec { 88 | color: #000000; 89 | font-weight: bold; 90 | font-style: normal; 91 | } 92 | 93 | /* a variable name */ 94 | .var { 95 | color: #000000; 96 | font-weight: normal; 97 | font-style: normal; 98 | } 99 | 100 | /* a function name */ 101 | .fun { 102 | color: #000000; 103 | font-weight: bold; 104 | font-style: normal; 105 | } 106 | 107 | /* Specify class=linenums on a pre to get line numbering */ 108 | ol.linenums { 109 | margin-top: 0; 110 | margin-bottom: 0; 111 | } 112 | -------------------------------------------------------------------------------- /src/static/common/editor.md/docs/styles/prettify-tomorrow.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Theme */ 2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 3 | /* Pretty printing styles. Used with prettify.js. */ 4 | /* SPAN elements with the classes below are added by prettyprint. */ 5 | /* plain text */ 6 | .pln { 7 | color: #4d4d4c; } 8 | 9 | @media screen { 10 | /* string content */ 11 | .str { 12 | color: #718c00; } 13 | 14 | /* a keyword */ 15 | .kwd { 16 | color: #8959a8; } 17 | 18 | /* a comment */ 19 | .com { 20 | color: #8e908c; } 21 | 22 | /* a type name */ 23 | .typ { 24 | color: #4271ae; } 25 | 26 | /* a literal value */ 27 | .lit { 28 | color: #f5871f; } 29 | 30 | /* punctuation */ 31 | .pun { 32 | color: #4d4d4c; } 33 | 34 | /* lisp open bracket */ 35 | .opn { 36 | color: #4d4d4c; } 37 | 38 | /* lisp close bracket */ 39 | .clo { 40 | color: #4d4d4c; } 41 | 42 | /* a markup tag name */ 43 | .tag { 44 | color: #c82829; } 45 | 46 | /* a markup attribute name */ 47 | .atn { 48 | color: #f5871f; } 49 | 50 | /* a markup attribute value */ 51 | .atv { 52 | color: #3e999f; } 53 | 54 | /* a declaration */ 55 | .dec { 56 | color: #f5871f; } 57 | 58 | /* a variable name */ 59 | .var { 60 | color: #c82829; } 61 | 62 | /* a function name */ 63 | .fun { 64 | color: #4271ae; } } 65 | /* Use higher contrast and text-weight for printable form. */ 66 | @media print, projection { 67 | .str { 68 | color: #060; } 69 | 70 | .kwd { 71 | color: #006; 72 | font-weight: bold; } 73 | 74 | .com { 75 | color: #600; 76 | font-style: italic; } 77 | 78 | .typ { 79 | color: #404; 80 | font-weight: bold; } 81 | 82 | .lit { 83 | color: #044; } 84 | 85 | .pun, .opn, .clo { 86 | color: #440; } 87 | 88 | .tag { 89 | color: #006; 90 | font-weight: bold; } 91 | 92 | .atn { 93 | color: #404; } 94 | 95 | .atv { 96 | color: #060; } } 97 | /* Style */ 98 | /* 99 | pre.prettyprint { 100 | background: white; 101 | font-family: Consolas, Monaco, 'Andale Mono', monospace; 102 | font-size: 12px; 103 | line-height: 1.5; 104 | border: 1px solid #ccc; 105 | padding: 10px; } 106 | */ 107 | 108 | /* Specify class=linenums on a pre to get line numbering */ 109 | ol.linenums { 110 | margin-top: 0; 111 | margin-bottom: 0; } 112 | 113 | /* IE indents via margin-left */ 114 | li.L0, 115 | li.L1, 116 | li.L2, 117 | li.L3, 118 | li.L4, 119 | li.L5, 120 | li.L6, 121 | li.L7, 122 | li.L8, 123 | li.L9 { 124 | /* */ } 125 | 126 | /* Alternate shading for lines */ 127 | li.L1, 128 | li.L3, 129 | li.L5, 130 | li.L7, 131 | li.L9 { 132 | /* */ } 133 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/auto-height.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Auto height - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Auto height test

14 |
15 |
16 | 17 |
18 |
19 | 27 |
28 |
29 | 30 | 31 | 54 | 55 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/code-fold.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Code folding - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Code folding

14 |

Switch code folding : Press Ctrl + Q / Command + Q

15 |
16 |
17 | 18 |
19 |
20 | 21 | 22 | 43 | 44 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/css/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | padding: 0; 3 | margin: 0; 4 | } 5 | 6 | *, *:before, *:after { 7 | -webkit-box-sizing: border-box; 8 | -moz-box-sizing: border-box; 9 | box-sizing: border-box; 10 | } 11 | body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td,hr,button,article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{ 12 | margin: 0; 13 | padding: 0; 14 | } 15 | 16 | article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary { 17 | display: block; 18 | } 19 | 20 | audio, canvas, video { 21 | display: inline-block; 22 | } 23 | 24 | img { 25 | border: none; 26 | vertical-align: middle; 27 | } 28 | 29 | ul, ol { 30 | /*list-style: none;*/ 31 | } 32 | 33 | .clear { 34 | *zoom: 1; /* for IE 6/7 */ 35 | } 36 | 37 | .clear:before, .clear:after { 38 | height: 0; 39 | content: ""; 40 | font-size: 0; 41 | display: table; 42 | line-height: 0; /* for Opera */ 43 | visibility: hidden; 44 | } 45 | 46 | .clear:after { 47 | clear: both; 48 | } 49 | 50 | body { 51 | font-size: 14px; 52 | color: #666; 53 | font-family: "Microsoft YaHei", "微软雅黑", Helvetica, Tahoma, STXihei, "华文细黑", STHeiti, "Helvetica Neue", Helvetica, Tahoma, "Droid Sans", "wenquanyi micro hei", FreeSans, Arimo, Arial, SimSun, "宋体", Heiti, "黑体", sans-serif; 54 | background: #fff; 55 | text-align: center; 56 | } 57 | 58 | #layout { 59 | text-align: left; 60 | } 61 | 62 | #layout > header, .btns { 63 | padding: 15px 0; 64 | width: 90%; 65 | margin: 0 auto; 66 | } 67 | 68 | .btns { 69 | padding-top: 0; 70 | } 71 | 72 | .btns button { 73 | padding: 2px 8px; 74 | } 75 | 76 | #layout > header > h1 { 77 | font-size: 20px; 78 | margin-bottom: 10px; 79 | } 80 | 81 | .btns button, .btn { 82 | padding: 8px 10px; 83 | background: #fff; 84 | border: 1px solid #ddd; 85 | -webkit-border-radius: 3px; 86 | border-radius: 3px; 87 | cursor: pointer; 88 | -webkit-transition: background 300ms ease-out; 89 | transition: background 300ms ease-out; 90 | } 91 | 92 | .btns button:hover, .btn:hover { 93 | background: #f6f6f6; 94 | } -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/delay-renderer-preview.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Delay Rerender & Preview - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Delay Rerender & Preview

14 |

P.S. If you input the content too much and too fast, You can setting the delay value.

15 |

P.S. 适用于输入内容太多太快的情形,但要是一个合理的值,不然会显得预览太慢。打字慢会相对显得慢,打字快时则相对显得快。

16 |
17 |
18 | 26 |
27 |
28 | 29 | 30 | 55 | 56 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/dynamic-create-editormd.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 动态创建 Editor.md - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

动态创建 Editor.md

14 |

Dynamic create Editor.md

15 |
16 |
17 | 18 | 19 |
20 |
21 |
22 | 23 | 24 | 46 | 47 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/flowchart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FlowChart - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

FlowChart 流程图

14 |

Based on flowchart.js:http://adrai.github.io/flowchart.js/

15 |
16 |
17 | 37 |
38 |
39 | 40 | 41 | 42 | 52 | 53 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/form-get-value.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Form get textarea value - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

表单取值

14 |

Form get textarea value.

15 |
16 |
17 |
18 | 19 | 66 |
67 |
68 | 69 |
70 |
71 |
72 | 73 | 74 | 91 | 92 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/image-upload.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 图片上传示例 - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

图片上传示例

14 |

Image upload example

15 |
16 |
17 | 36 |
37 |
38 | 39 | 40 | 67 | 68 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/images/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/examples/images/4.jpg -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/images/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/examples/images/7.jpg -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/images/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/examples/images/8.jpg -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/images/editormd-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/examples/images/editormd-screenshot.png -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/js/seajs-main.js: -------------------------------------------------------------------------------- 1 | define(function(require){ 2 | var $ = require("jquery"); 3 | var editormd = require("editormd"); 4 | 5 | require("../../src/js/languages/en"); // 加载英语语言包 6 | 7 | console.log($, editormd); 8 | 9 | $.get("./test.md", function(md){ 10 | testEditor = editormd("test-editormd", { 11 | width: "90%", 12 | height: 640, 13 | path : '../lib/', 14 | markdown : md, 15 | //toolbar : false, //关闭工具栏 16 | htmlDecode : true, // 开启HTML标签解析,为了安全性,默认不开启 17 | tex : true, // 开启科学公式TeX语言支持,默认关闭 18 | //previewCodeHighlight : false, // 关闭预览窗口的代码高亮,默认开启 19 | flowChart : true, // 疑似Sea.js与Raphael.js有冲突,必须先加载Raphael.js,Editor.md才能在Sea.js下正常进行; 20 | sequenceDiagram : true, // 同上 21 | onload : function() { 22 | console.log('onload', this); 23 | //this.fullscreen(); 24 | //this.unwatch(); 25 | //this.watch().fullscreen(); 26 | 27 | //this.setMarkdown("#PHP"); 28 | //this.width("100%"); 29 | //this.height(480); 30 | //this.resize("100%", 640); 31 | } 32 | }); 33 | }); 34 | 35 | $("#show-btn").bind('click', function(){ 36 | testEditor.show(); 37 | }); 38 | 39 | $("#hide-btn").bind('click', function(){ 40 | testEditor.hide(); 41 | }); 42 | 43 | $("#get-md-btn").bind('click', function(){ 44 | alert(testEditor.getMarkdown()); 45 | }); 46 | 47 | $("#get-html-btn").bind('click', function() { 48 | alert(testEditor.getHTML()); 49 | }); 50 | 51 | $("#watch-btn").bind('click', function() { 52 | testEditor.watch(); 53 | }); 54 | 55 | $("#unwatch-btn").bind('click', function() { 56 | testEditor.unwatch(); 57 | }); 58 | 59 | $("#preview-btn").bind('click', function() { 60 | testEditor.previewing(); 61 | }); 62 | 63 | $("#fullscreen-btn").bind('click', function() { 64 | testEditor.fullscreen(); 65 | }); 66 | 67 | $("#show-toolbar-btn").bind('click', function() { 68 | testEditor.showToolbar(); 69 | }); 70 | 71 | $("#close-toolbar-btn").bind('click', function() { 72 | testEditor.hideToolbar(); 73 | }); 74 | }); -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/multi-editormd.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Multi Editor.md - Editor.md examples 6 | 7 | 8 | 9 | 19 | 20 | 21 |
22 |
23 |

Multi Editor.md

24 |

多个 Editor.md 并存

25 |
26 |
27 |

Editor.md A

28 |
29 |

Editor.md B

30 |
31 |

Editor.md C

32 |
33 |
34 | 35 | 36 | 37 | 63 | 64 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/multi-languages.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 多语言支持 - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

多语言支持(l18n)

14 |

multi-languages for l18n. 15 | 21 |

22 |
23 |
24 | 36 |
37 |
38 | 39 | 40 | 42 | 88 | 89 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/onchange.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Onchange - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Onchange event

14 |

Plaese press F12, open the develop tools.

15 |

16 |
17 |
18 | 29 |
30 |
31 | 32 | 33 | 48 | 49 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/onfullscreen.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Onfullscreen & onfullscreenExit - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Onfullscreen & onfullscreenExit event

14 |

Plaese press F12, open the develop tools.

15 |
16 |
17 | 33 |
34 |
35 | 36 | 37 | 54 | 55 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/onload.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Onload - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Onload event

14 |

Plaese press F12, open the develop tools.

15 |
16 |
17 | 29 |
30 |
31 | 32 | 33 | 51 | 52 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/onpreviewing-onpreviewed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Onpreviewing / Onpreviewed - Editor.md examples 6 | 7 | 8 | 9 | 12 | 13 | 14 |
15 |
16 |

Onpreviewing / Onpreviewed event handle

17 |

Plaese press F12, open the develop tools.

18 |
19 |
20 | 35 |
36 |
37 | 38 | 39 | 54 | 55 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/onresize.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Onresize - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Onresize event handle

14 |

Plaese press F12, open the develop tools.

15 |
16 |
17 | 31 |
32 |
33 | 34 | 35 | 48 | 49 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/onscroll-onpreviewscroll.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Onscroll / Onpreviewscroll - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Onscroll / Onpreviewscroll event handle

14 |

Plaese press F12, open the develop tools.

15 |
16 |
17 | 36 |
37 |
38 | 39 | 40 | 62 | 63 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/onwatch-onunwatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Onwatch / Onunwatch - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Onwatch / Onunwatch event handle

14 |

Plaese press F12, open the develop tools.

15 |
16 |
17 | 31 |
32 |
33 | 34 | 35 | 50 | 51 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/page-break.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Page break - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Page break

14 |
15 |
16 | 17 | 18 | 19 |
20 |
21 | 56 |
57 |
58 | 59 | 60 | 86 | 87 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/php/cross-domain-upload.php: -------------------------------------------------------------------------------- 1 | array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'webp') 28 | ); 29 | 30 | $name = 'editormd-image-file'; // file input name 31 | $callbackUrl = $_GET['callback']; 32 | 33 | if (isset($_FILES[$name])) 34 | { 35 | $imageUploader = new EditorMdUploader($savePath, $saveURL, $formats['image'], false); // Ymdhis表示按日期生成文件名,利用date()函数 36 | 37 | $imageUploader->config(array( 38 | 'maxSize' => 1024, // 允许上传的最大文件大小,以KB为单位,默认值为1024 39 | 'cover' => true // 是否覆盖同名文件,默认为true 40 | )); 41 | 42 | $imageUploader->redirect = true; 43 | $imageUploader->redirectURL = $callbackUrl . (empty(parse_url($callbackUrl)['query']) ? '?' : '&') . 'dialog_id=' . $_GET['dialog_id'] . '&temp=' . date('ymdhis'); 44 | 45 | if ($imageUploader->upload($name)) 46 | { 47 | $imageUploader->message('上传成功!', 1); 48 | } 49 | else 50 | { 51 | $imageUploader->message('上传失败!', 0); 52 | } 53 | } 54 | ?> -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/php/post.php: -------------------------------------------------------------------------------- 1 | "; 7 | echo htmlspecialchars($_POST["test-editormd-markdown-doc"]); 8 | 9 | if(isset($_POST["test-editormd-html-code"])) { 10 | echo "

"; 11 | echo htmlspecialchars($_POST["test-editormd-html-code"]); 12 | } 13 | 14 | echo ""; 15 | } 16 | 17 | exit; 18 | ?> -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/php/upload.php: -------------------------------------------------------------------------------- 1 | array('gif', 'jpg', 'jpeg', 'png', 'bmp') 29 | ); 30 | 31 | $name = 'editormd-image-file'; 32 | 33 | if (isset($_FILES[$name])) 34 | { 35 | $imageUploader = new EditorMdUploader($savePath, $saveURL, $formats['image'], false); // Ymdhis表示按日期生成文件名,利用date()函数 36 | 37 | $imageUploader->config(array( 38 | 'maxSize' => 1024, // 允许上传的最大文件大小,以KB为单位,默认值为1024 39 | 'cover' => true // 是否覆盖同名文件,默认为true 40 | )); 41 | 42 | if ($imageUploader->upload($name)) 43 | { 44 | $imageUploader->message('上传成功!', 1); 45 | } 46 | else 47 | { 48 | $imageUploader->message('上传失败!', 0); 49 | } 50 | } 51 | ?> -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/php/upload_callback.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 34 | 35 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/readonly.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Read only mode - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

只读模式

14 |

Read only mode

15 |
16 |
17 | 18 | 19 |
20 |
21 | 32 |
33 |
34 | 35 | 36 | 59 | 60 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/search-replace.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Search / Replace - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Search / Replace

14 |

Search: Press Ctrl + F / Command + F

15 |

Replace: Press Ctrl + Shift + F / Command + Option + F

16 |

Replace All: Press Ctrl + Shift + R / Command + Option + R

17 |
18 |
19 | 20 |
21 |
22 | 23 | 24 | 45 | 46 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/sequence-diagram.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SequenceDiagram - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

SequenceDiagram 时序图/序列图

14 |

Based on SequenceDiagram.js:http://bramp.github.io/js-sequence-diagrams/

15 |
16 |
17 | 49 |
50 |
51 | 52 | 53 | 54 | 64 | 65 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/simple.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Simple example - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Simple example

14 |
15 |
16 | 49 |
50 |
51 | 52 | 53 | 75 | 76 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/sync-scrolling.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Sync scrolling - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Sync scrolling

14 |
15 |
16 | 17 | 18 | 19 |
20 |
21 | 42 |
43 |
44 | 45 | 46 | 69 | 70 | -------------------------------------------------------------------------------- /src/static/common/editor.md/examples/task-lists.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Github Flavored Markdown task lists - Editor.md examples 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Github Flavored Markdown task lists

14 |
15 |
16 | 45 |
46 |
47 | 48 | 49 | 64 | 65 | -------------------------------------------------------------------------------- /src/static/common/editor.md/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/static/common/editor.md/fonts/editormd-logo.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/fonts/editormd-logo.eot -------------------------------------------------------------------------------- /src/static/common/editor.md/fonts/editormd-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by IcoMoon 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/static/common/editor.md/fonts/editormd-logo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/fonts/editormd-logo.ttf -------------------------------------------------------------------------------- /src/static/common/editor.md/fonts/editormd-logo.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/fonts/editormd-logo.woff -------------------------------------------------------------------------------- /src/static/common/editor.md/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/static/common/editor.md/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/static/common/editor.md/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/static/common/editor.md/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/static/common/editor.md/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/loading.gif -------------------------------------------------------------------------------- /src/static/common/editor.md/images/loading@2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/loading@2x.gif -------------------------------------------------------------------------------- /src/static/common/editor.md/images/loading@3x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/loading@3x.gif -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-favicon-16x16.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-favicon-16x16.ico -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-favicon-24x24.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-favicon-24x24.ico -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-favicon-32x32.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-favicon-32x32.ico -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-favicon-48x48.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-favicon-48x48.ico -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-favicon-64x64.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-favicon-64x64.ico -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-114x114.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-120x120.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-144x144.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-16x16.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-180x180.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-240x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-240x240.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-24x24.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-320x320.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-320x320.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-32x32.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-48x48.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-57x57.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-64x64.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-72x72.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/editormd-logo-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/editormd-logo-96x96.png -------------------------------------------------------------------------------- /src/static/common/editor.md/images/logos/vi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/editor.md/images/logos/vi.png -------------------------------------------------------------------------------- /src/static/common/editor.md/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "editor.md", 3 | "version": "1.5.0", 4 | "description": "Open source online markdown editor.", 5 | "directories": { 6 | "doc": "docs", 7 | "example": "examples", 8 | "test": "tests" 9 | }, 10 | "scripts": { 11 | "test": "echo \"Error: no test specified\" && exit 1" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "https://github.com/pandao/editor.md.git" 16 | }, 17 | "keywords": [ 18 | "editor.md", 19 | "markdown", 20 | "editor" 21 | ], 22 | "author": "Pandao", 23 | "license": "MIT", 24 | "bugs": { 25 | "url": "https://github.com/pandao/editor.md/issues" 26 | }, 27 | "homepage": "https://github.com/pandao/editor.md", 28 | "devDependencies": { 29 | "dateformatter": "^0.1.0", 30 | "gulp": "^3.8.11", 31 | "gulp-concat": "^2.4.2", 32 | "gulp-header": "^1.2.2", 33 | "gulp-jshint": "^1.9.0", 34 | "gulp-minify-css": "^0.4.4", 35 | "gulp-notify": "^2.1.0", 36 | "gulp-rename": "^1.2.0", 37 | "gulp-replace": "^0.5.3", 38 | "gulp-ruby-sass": "^1.0.1", 39 | "gulp-uglifyjs": "^0.6.1", 40 | "gulp-util": "^3.0.1" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/static/common/editor.md/plugins/help-dialog/help-dialog.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Help dialog plugin for Editor.md 3 | * 4 | * @file help-dialog.js 5 | * @author pandao 6 | * @version 1.2.0 7 | * @updateTime 2015-03-08 8 | * {@link https://github.com/pandao/editor.md} 9 | * @license MIT 10 | */ 11 | 12 | (function() { 13 | 14 | var factory = function (exports) { 15 | 16 | var $ = jQuery; 17 | var pluginName = "help-dialog"; 18 | 19 | exports.fn.helpDialog = function() { 20 | var _this = this; 21 | var lang = this.lang; 22 | var editor = this.editor; 23 | var settings = this.settings; 24 | var path = settings.pluginPath + pluginName + "/"; 25 | var classPrefix = this.classPrefix; 26 | var dialogName = classPrefix + pluginName, dialog; 27 | var dialogLang = lang.dialog.help; 28 | 29 | if (editor.find("." + dialogName).length < 1) 30 | { 31 | var dialogContent = "
"; 32 | 33 | dialog = this.createDialog({ 34 | name : dialogName, 35 | title : dialogLang.title, 36 | width : 840, 37 | height : 540, 38 | mask : settings.dialogShowMask, 39 | drag : settings.dialogDraggable, 40 | content : dialogContent, 41 | lockScreen : settings.dialogLockScreen, 42 | maskStyle : { 43 | opacity : settings.dialogMaskOpacity, 44 | backgroundColor : settings.dialogMaskBgColor 45 | }, 46 | buttons : { 47 | close : [lang.buttons.close, function() { 48 | this.hide().lockScreen(false).hideMask(); 49 | 50 | return false; 51 | }] 52 | } 53 | }); 54 | } 55 | 56 | dialog = editor.find("." + dialogName); 57 | 58 | this.dialogShowMask(dialog); 59 | this.dialogLockScreen(); 60 | dialog.show(); 61 | 62 | var helpContent = dialog.find(".markdown-body"); 63 | 64 | if (helpContent.html() === "") 65 | { 66 | $.get(path + "help.md", function(text) { 67 | var md = exports.$marked(text); 68 | helpContent.html(md); 69 | 70 | helpContent.find("a").attr("target", "_blank"); 71 | }); 72 | } 73 | }; 74 | 75 | }; 76 | 77 | // CommonJS/Node.js 78 | if (typeof require === "function" && typeof exports === "object" && typeof module === "object") 79 | { 80 | module.exports = factory; 81 | } 82 | else if (typeof define === "function") // AMD/CMD/Sea.js 83 | { 84 | if (define.amd) { // for Require.js 85 | 86 | define(["editormd"], function(editormd) { 87 | factory(editormd); 88 | }); 89 | 90 | } else { // for Sea.js 91 | define(function(require) { 92 | var editormd = require("./../../editormd"); 93 | factory(editormd); 94 | }); 95 | } 96 | } 97 | else 98 | { 99 | factory(window.editormd); 100 | } 101 | 102 | })(); 103 | -------------------------------------------------------------------------------- /src/static/common/editor.md/plugins/plugin-template.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Link dialog plugin for Editor.md 3 | * 4 | * @file link-dialog.js 5 | * @author pandao 6 | * @version 1.2.0 7 | * @updateTime 2015-03-07 8 | * {@link https://github.com/pandao/editor.md} 9 | * @license MIT 10 | */ 11 | 12 | (function() { 13 | 14 | var factory = function (exports) { 15 | 16 | var $ = jQuery; // if using module loader(Require.js/Sea.js). 17 | 18 | var langs = { 19 | "zh-cn" : { 20 | toolbar : { 21 | table : "表格" 22 | }, 23 | dialog : { 24 | table : { 25 | title : "添加表格", 26 | cellsLabel : "单元格数", 27 | alignLabel : "对齐方式", 28 | rows : "行数", 29 | cols : "列数", 30 | aligns : ["默认", "左对齐", "居中对齐", "右对齐"] 31 | } 32 | } 33 | }, 34 | "zh-tw" : { 35 | toolbar : { 36 | table : "添加表格" 37 | }, 38 | dialog : { 39 | table : { 40 | title : "添加表格", 41 | cellsLabel : "單元格數", 42 | alignLabel : "對齊方式", 43 | rows : "行數", 44 | cols : "列數", 45 | aligns : ["默認", "左對齊", "居中對齊", "右對齊"] 46 | } 47 | } 48 | }, 49 | "en" : { 50 | toolbar : { 51 | table : "Tables" 52 | }, 53 | dialog : { 54 | table : { 55 | title : "Tables", 56 | cellsLabel : "Cells", 57 | alignLabel : "Align", 58 | rows : "Rows", 59 | cols : "Cols", 60 | aligns : ["Default", "Left align", "Center align", "Right align"] 61 | } 62 | } 63 | } 64 | }; 65 | 66 | exports.fn.htmlEntities = function() { 67 | /* 68 | var _this = this; // this == the current instance object of Editor.md 69 | var lang = _this.lang; 70 | var settings = _this.settings; 71 | var editor = this.editor; 72 | var cursor = cm.getCursor(); 73 | var selection = cm.getSelection(); 74 | var classPrefix = this.classPrefix; 75 | 76 | $.extend(true, this.lang, langs[this.lang.name]); // l18n 77 | this.setToolbar(); 78 | 79 | cm.focus(); 80 | */ 81 | //.... 82 | }; 83 | 84 | }; 85 | 86 | // CommonJS/Node.js 87 | if (typeof require === "function" && typeof exports === "object" && typeof module === "object") 88 | { 89 | module.exports = factory; 90 | } 91 | else if (typeof define === "function") // AMD/CMD/Sea.js 92 | { 93 | if (define.amd) { // for Require.js 94 | 95 | define(["editormd"], function(editormd) { 96 | factory(editormd); 97 | }); 98 | 99 | } else { // for Sea.js 100 | define(function(require) { 101 | var editormd = require("./../../editormd"); 102 | factory(editormd); 103 | }); 104 | } 105 | } 106 | else 107 | { 108 | factory(window.editormd); 109 | } 110 | 111 | })(); 112 | -------------------------------------------------------------------------------- /src/static/common/editor.md/plugins/test-plugin/test-plugin.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Test plugin for Editor.md 3 | * 4 | * @file test-plugin.js 5 | * @author pandao 6 | * @version 1.2.0 7 | * @updateTime 2015-03-07 8 | * {@link https://github.com/pandao/editor.md} 9 | * @license MIT 10 | */ 11 | 12 | (function() { 13 | 14 | var factory = function (exports) { 15 | 16 | var $ = jQuery; // if using module loader(Require.js/Sea.js). 17 | 18 | exports.testPlugin = function(){ 19 | alert("testPlugin"); 20 | }; 21 | 22 | exports.fn.testPluginMethodA = function() { 23 | /* 24 | var _this = this; // this == the current instance object of Editor.md 25 | var lang = _this.lang; 26 | var settings = _this.settings; 27 | var editor = this.editor; 28 | var cursor = cm.getCursor(); 29 | var selection = cm.getSelection(); 30 | var classPrefix = this.classPrefix; 31 | 32 | cm.focus(); 33 | */ 34 | //.... 35 | 36 | alert("testPluginMethodA"); 37 | }; 38 | 39 | }; 40 | 41 | // CommonJS/Node.js 42 | if (typeof require === "function" && typeof exports === "object" && typeof module === "object") 43 | { 44 | module.exports = factory; 45 | } 46 | else if (typeof define === "function") // AMD/CMD/Sea.js 47 | { 48 | if (define.amd) { // for Require.js 49 | 50 | define(["editormd"], function(editormd) { 51 | factory(editormd); 52 | }); 53 | 54 | } else { // for Sea.js 55 | define(function(require) { 56 | var editormd = require("./../../editormd"); 57 | factory(editormd); 58 | }); 59 | } 60 | } 61 | else 62 | { 63 | factory(window.editormd); 64 | } 65 | 66 | })(); 67 | -------------------------------------------------------------------------------- /src/static/common/editor.md/scss/editormd.codemirror.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | .editormd .CodeMirror, #{$prefix}preview { 4 | display: inline-block; 5 | width: 50%; 6 | height: 100%; 7 | vertical-align: top; 8 | @include box-sizing(border-box); 9 | margin: 0; 10 | } 11 | 12 | #{$prefix}preview { 13 | position: absolute; 14 | top: 35px; 15 | right: 0; 16 | right: -1px\0; 17 | overflow: auto; 18 | line-height: 1.6; 19 | display: none; 20 | background: #fff; 21 | z-index:10; 22 | } 23 | 24 | .editormd { 25 | 26 | .CodeMirror { 27 | z-index: 10; 28 | float: left; 29 | border-right: 1px solid $borderColor; 30 | font-size: 14px; 31 | font-family: "YaHei Consolas Hybrid", Consolas, "微软雅黑", "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, "Monaco", courier, monospace; 32 | line-height: 1.6; 33 | margin-top: 35px; 34 | 35 | pre { 36 | font-size: 14px; 37 | padding: 0 12px; 38 | } 39 | } 40 | 41 | .CodeMirror-linenumbers { 42 | padding: 0 5px; 43 | } 44 | 45 | .CodeMirror-selected { 46 | background: #70B7FF; 47 | } 48 | 49 | .CodeMirror-focused .CodeMirror-selected { 50 | background: #70B7FF; 51 | } 52 | 53 | .CodeMirror, .CodeMirror-scroll, #{$prefix}preview { 54 | -webkit-overflow-scrolling : touch; 55 | } 56 | 57 | .styled-background { 58 | background-color: #ff7; 59 | } 60 | 61 | .CodeMirror-focused .cm-matchhighlight { 62 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAFklEQVQI12NgYGBgkKzc8x9CMDAwAAAmhwSbidEoSQAAAABJRU5ErkJggg==); 63 | background-position: bottom; 64 | background-repeat: repeat-x; 65 | } 66 | 67 | .CodeMirror-empty { 68 | //outline: 1px solid #c22; 69 | 70 | &.CodeMirror-focused { 71 | outline: none; 72 | } 73 | } 74 | 75 | .CodeMirror pre.CodeMirror-placeholder { 76 | color: #999; 77 | } 78 | 79 | .cm-trailingspace { 80 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAACCAYAAAB/qH1jAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QUXCToH00Y1UgAAACFJREFUCNdjPMDBUc/AwNDAAAFMTAwMDA0OP34wQgX/AQBYgwYEx4f9lQAAAABJRU5ErkJggg==); 81 | background-position: bottom left; 82 | background-repeat: repeat-x; 83 | } 84 | 85 | .cm-tab { 86 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=); 87 | background-position: right; 88 | background-repeat: no-repeat; 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/static/common/editor.md/scss/editormd.form.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | // Form 4 | 5 | #{$prefix}form { 6 | color: $color; 7 | 8 | label { 9 | float: left; 10 | display: block; 11 | width: 75px; 12 | text-align: left; 13 | padding: 7px 0 15px 5px; 14 | margin: 0 0 2px; 15 | font-weight: normal; 16 | } 17 | 18 | br { 19 | clear: both; 20 | } 21 | 22 | iframe { 23 | display: none; 24 | } 25 | 26 | input:focus { 27 | outline: 0; 28 | } 29 | 30 | input[type="text"], input[type="number"] { 31 | color: #999; 32 | padding: 8px; 33 | border: 1px solid $borderColor; 34 | } 35 | 36 | input[type="number"] { 37 | width: 40px; 38 | display: inline-block; 39 | padding: 6px 8px; 40 | } 41 | 42 | input[type="text"] { 43 | display: inline-block; 44 | width: 264px; 45 | } 46 | 47 | .fa-btns { 48 | display: inline-block; 49 | 50 | a { 51 | color: #999; 52 | padding: 7px 10px 0 0; 53 | display: inline-block; 54 | text-decoration: none; 55 | text-align: center; 56 | } 57 | 58 | .fa { 59 | font-size: 1.3em; 60 | } 61 | 62 | label { 63 | float: none; 64 | display: inline-block; 65 | width: auto; 66 | text-align: left; 67 | padding: 0 0 0 5px; 68 | cursor: pointer; 69 | } 70 | } 71 | } 72 | 73 | #{$prefix}form, 74 | #{$prefix}dialog-container, 75 | #{$prefix}dialog-footer { 76 | 77 | input[type="submit"], #{$prefix}btn, button { 78 | color: $color; 79 | min-width: 75px; 80 | cursor: pointer; 81 | background: #fff; 82 | padding: 7px 10px; 83 | border: 1px solid #ddd; 84 | @include border-radius(3px); 85 | @include transition(background 300ms ease-out); 86 | 87 | &:hover { 88 | background: #eee; 89 | } 90 | } 91 | 92 | #{$prefix}btn { 93 | padding: 5px 8px 4px\0; 94 | } 95 | 96 | #{$prefix}btn + #{$prefix}btn { 97 | margin-left: 8px; 98 | } 99 | } 100 | 101 | #{$prefix}file-input { 102 | width: 75px; 103 | height: 32px; 104 | margin-left: 8px; 105 | position: relative; 106 | display: inline-block; 107 | 108 | input[type="file"] { 109 | width: 75px; 110 | height: 32px; 111 | opacity: 0; 112 | cursor: pointer; 113 | background: #000; 114 | display: inline-block; 115 | position: absolute; 116 | top: 0; 117 | right: 0; 118 | 119 | &::-webkit-file-upload-button { 120 | visibility: hidden; 121 | } 122 | } 123 | 124 | input[type="submit"] { 125 | } 126 | 127 | &:hover input[type="submit"] { 128 | background: #eee; 129 | } 130 | } -------------------------------------------------------------------------------- /src/static/common/editor.md/scss/editormd.grid.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .editormd-grid-table { 4 | width: 99%; 5 | display: table; 6 | border: 1px solid #ddd; 7 | border-collapse: collapse; 8 | } 9 | 10 | .editormd-grid-table-row { 11 | width: 100%; 12 | display: table-row; 13 | 14 | a { 15 | font-size: 1.4em; 16 | width: 5%; 17 | height: 36px; 18 | color: #999; 19 | text-align: center; 20 | display: table-cell; 21 | vertical-align: middle; 22 | border: 1px solid #ddd; 23 | text-decoration: none; 24 | @include transition(background-color 300ms ease-out, color 100ms ease-in); 25 | 26 | &.selected { 27 | color: #666; 28 | background-color: #eee; 29 | } 30 | 31 | &:hover { 32 | color: #777; 33 | background-color: #f6f6f6; 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/static/common/editor.md/scss/editormd.logo.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | @import "lib/variables"; 4 | @import "lib/prefixes"; 5 | 6 | @font-face { 7 | font-family: 'editormd-logo'; 8 | src:url('../fonts/editormd-logo.eot?-5y8q6h'); 9 | src:url('../fonts/editormd-logo.eot?#iefix-5y8q6h') format('embedded-opentype'), 10 | url('../fonts/editormd-logo.woff?-5y8q6h') format('woff'), 11 | url('../fonts/editormd-logo.ttf?-5y8q6h') format('truetype'), 12 | url('../fonts/editormd-logo.svg?-5y8q6h#icomoon') format('svg'); 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | 17 | #{$prefix}logo, 18 | #{$prefix}logo-1x, 19 | #{$prefix}logo-2x, 20 | #{$prefix}logo-3x, 21 | #{$prefix}logo-4x, 22 | #{$prefix}logo-5x, 23 | #{$prefix}logo-6x, 24 | #{$prefix}logo-7x, 25 | #{$prefix}logo-8x { 26 | font-family: 'editormd-logo'; 27 | speak: none; 28 | font-style: normal; 29 | font-weight: normal; 30 | font-variant: normal; 31 | text-transform: none; 32 | font-size: inherit; 33 | line-height: 1; 34 | display: inline-block; 35 | text-rendering: auto; 36 | vertical-align: inherit; 37 | 38 | //Better Font Rendering 39 | -webkit-font-smoothing: antialiased; 40 | -moz-osx-font-smoothing: grayscale; 41 | 42 | &:before { 43 | content: "\e1987"; 44 | /* 45 | HTML Entity 󡦇 46 | example: 47 | */ 48 | } 49 | } 50 | 51 | #{$prefix}logo-1x { 52 | font-size: 1em; 53 | } 54 | 55 | #{$prefix}logo-lg { 56 | font-size: 1.2em; 57 | } 58 | 59 | #{$prefix}logo-2x { 60 | font-size: 2em; 61 | } 62 | 63 | #{$prefix}logo-3x { 64 | font-size: 3em; 65 | } 66 | 67 | #{$prefix}logo-4x { 68 | font-size: 4em; 69 | } 70 | 71 | #{$prefix}logo-5x { 72 | font-size: 5em; 73 | } 74 | 75 | #{$prefix}logo-6x { 76 | font-size: 6em; 77 | } 78 | 79 | #{$prefix}logo-7x { 80 | font-size: 7em; 81 | } 82 | 83 | #{$prefix}logo-8x { 84 | font-size: 8em; 85 | } 86 | 87 | #{$prefix}logo-color { 88 | color: $mainColor; 89 | } 90 | -------------------------------------------------------------------------------- /src/static/common/editor.md/scss/editormd.menu.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | #{$prefix}menu { 4 | margin: 0; 5 | padding: 0; 6 | list-style: none; 7 | 8 | > li { 9 | margin: 0; 10 | padding: 5px 1px; 11 | display: inline-block; 12 | position: relative; 13 | 14 | &.divider { 15 | display: inline-block; 16 | text-indent: -9999px; 17 | margin: 0 5px; 18 | height: 65%; 19 | border-right: 1px solid $borderColor; 20 | } 21 | 22 | > a { 23 | outline: 0; 24 | color: $color; 25 | display: inline-block; 26 | min-width: 24px; 27 | font-size: 16px; 28 | text-decoration: none; 29 | text-align: center; 30 | @include border-radius(2px); 31 | border: 1px solid #fff; 32 | @include transition(all 300ms ease-out); 33 | 34 | &:hover, &.active { 35 | border: 1px solid $borderColor; 36 | background: #eee; 37 | } 38 | 39 | > .fa { 40 | text-align: center; 41 | display: block; 42 | padding: 5px; 43 | } 44 | 45 | > #{$prefix}bold { 46 | padding: 5px 2px; 47 | display: inline-block; 48 | font-weight: bold; 49 | } 50 | } 51 | 52 | &:hover #{$prefix}dropdown-menu { 53 | display: block; 54 | } 55 | } 56 | 57 | > li + li > a { 58 | margin-left: 3px; 59 | } 60 | } 61 | 62 | #{$prefix}dropdown-menu { 63 | display: none; 64 | background: #fff; 65 | border: 1px solid $borderColor; 66 | width: 148px; 67 | list-style: none; 68 | position: absolute; 69 | top: 33px; 70 | left: 0; 71 | z-index: 100; 72 | @include box-shadow(1px 2px 6px rgba(0, 0, 0, 0.15)); 73 | 74 | &:before, &:after { 75 | width: 0; 76 | height: 0; 77 | display: block; 78 | content: ""; 79 | position: absolute; 80 | top: -11px; 81 | left: 8px; 82 | border: 5px solid transparent; 83 | } 84 | 85 | &:before { 86 | border-bottom-color: #ccc; 87 | } 88 | 89 | &:after { 90 | border-bottom-color: #ffffff; 91 | top: -10px; 92 | } 93 | 94 | 95 | > li { 96 | 97 | > a { 98 | color: $color; 99 | display: block; 100 | text-decoration: none; 101 | padding: 8px 10px; 102 | 103 | &:hover { 104 | background: #f6f6f6; 105 | @include transition(all 300ms ease-out); 106 | } 107 | } 108 | } 109 | 110 | > li + li { 111 | border-top: 1px solid $borderColor; 112 | } 113 | } -------------------------------------------------------------------------------- /src/static/common/editor.md/scss/editormd.preview.themes.scss: -------------------------------------------------------------------------------- 1 | /* Preview dark theme */ 2 | 3 | #{$prefix}preview-theme-dark { 4 | color: #777; 5 | background:#2C2827; 6 | 7 | #{$prefix}preview-container { 8 | color: #888; 9 | background-color: #2C2827; 10 | //font-family: "Meiryo UI", "Helvetica Neue", "Microsoft YaHei"; 11 | 12 | pre.prettyprint { 13 | border: none; 14 | } 15 | 16 | blockquote { 17 | color: #555; 18 | padding: 0.5em; 19 | background: #222; 20 | border-color: #333; 21 | } 22 | 23 | abbr { 24 | color: #fff; 25 | padding: 1px 3px; 26 | @include border-radius(3px); 27 | background:#ff9900; 28 | } 29 | 30 | code { 31 | color: #fff; 32 | border: none; 33 | padding: 1px 3px; 34 | @include border-radius(3px); 35 | background: #5A9600; 36 | } 37 | 38 | table { 39 | border: none; 40 | } 41 | 42 | .fa-emoji { 43 | color: #B4BF42; 44 | } 45 | 46 | .katex { 47 | color: #FEC93F; 48 | } 49 | } 50 | 51 | .editormd-toc-menu { 52 | > .markdown-toc { 53 | background:#fff; 54 | border:none; 55 | 56 | h1 { 57 | border-color:#ddd; 58 | } 59 | } 60 | } 61 | 62 | .markdown-body { 63 | h1, h2, hr { 64 | border-color: #222; 65 | } 66 | } 67 | 68 | pre { 69 | color: #999; 70 | background-color: #111; 71 | background-color: rgba(0,0,0,.4); 72 | 73 | /* plain text */ 74 | .pln { 75 | color: #999; 76 | } 77 | } 78 | 79 | li.L1, li.L3, li.L5, li.L7, li.L9 { 80 | background: none; 81 | } 82 | 83 | [class*=editormd-logo] { 84 | color: #2196F3; 85 | } 86 | 87 | .sequence-diagram { 88 | text { 89 | fill: #fff; 90 | } 91 | 92 | rect, path { 93 | color:#fff; 94 | fill : #64D1CB; 95 | stroke : #64D1CB; 96 | } 97 | } 98 | 99 | .flowchart { 100 | rect, path { 101 | stroke : #A6C6FF; 102 | } 103 | 104 | rect { 105 | fill: #A6C6FF; 106 | } 107 | 108 | text { 109 | fill: #5879B4; 110 | } 111 | } 112 | } 113 | 114 | @media screen { 115 | 116 | #{$prefix}preview-theme-dark { 117 | .str { color: #080 } /* string content */ 118 | .kwd { color: #ff9900; } /* a keyword */ 119 | .com { color: #444444; } /* a comment */ 120 | .typ { color: #606 } /* a type name */ 121 | .lit { color: #066 } /* a literal value */ 122 | /* punctuation, lisp open bracket, lisp close bracket */ 123 | .pun, .opn, .clo { color: #660 } 124 | .tag { color: #ff9900; } /* a markup tag name */ 125 | .atn { color: #6C95F5; } /* a markup attribute name */ 126 | .atv { color: #080 } /* a markup attribute value */ 127 | .dec, .var { color: #008BA7; } /* a declaration; a variable name */ 128 | .fun { color: red } /* a function name */ 129 | } 130 | 131 | } -------------------------------------------------------------------------------- /src/static/common/editor.md/scss/editormd.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | @import "lib/variables"; 4 | @import "lib/prefixes"; 5 | 6 | .editormd { 7 | width: 90%; 8 | height: 640px; 9 | margin: 0 auto; 10 | text-align: left; 11 | overflow: hidden; 12 | position: relative; 13 | margin-bottom: 15px; 14 | border: 1px solid $borderColor; 15 | font-family: "Meiryo UI", "Microsoft YaHei", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, "Monaco", monospace, Tahoma, STXihei, "华文细黑", STHeiti, "Helvetica Neue", "Droid Sans", "wenquanyi micro hei", FreeSans, Arimo, Arial, SimSun, "宋体", Heiti, "黑体", sans-serif; 16 | 17 | *, *:before, *:after { 18 | @include box-sizing(border-box); 19 | } 20 | 21 | a { 22 | text-decoration: none; 23 | } 24 | 25 | img { 26 | border: none; 27 | vertical-align: middle; 28 | } 29 | 30 | > textarea, 31 | #{$prefix}html-textarea, 32 | #{$prefix}markdown-textarea { 33 | width: 0; 34 | height: 0; 35 | outline: 0; 36 | resize:none; 37 | } 38 | 39 | #{$prefix}html-textarea, 40 | #{$prefix}markdown-textarea { 41 | display : none; 42 | } 43 | 44 | input[type="text"], 45 | input[type="button"], 46 | input[type="submit"], 47 | select, textarea, button { 48 | @include appearance(none); 49 | } 50 | 51 | ::-webkit-scrollbar { 52 | height: 10px; 53 | width: 7px; 54 | background: rgba(0, 0, 0, .1); 55 | 56 | &:hover { 57 | background: rgba(0, 0, 0, .2); 58 | } 59 | } 60 | 61 | ::-webkit-scrollbar-thumb { 62 | background: rgba(0,0,0,0.3); 63 | @include border-radius(6px); 64 | 65 | &:hover { 66 | @include box-shadow(inset 1px 1px 1px rgba(0, 0, 0, .25)); 67 | background-color: rgba(0, 0, 0, .4); 68 | } 69 | } 70 | } 71 | 72 | #{$prefix}user-unselect { 73 | @include user-select(none); 74 | } 75 | 76 | #{$prefix}toolbar { 77 | width: 100%; 78 | min-height: 37px; 79 | background: #fff; 80 | display: none; 81 | position: absolute; 82 | top: 0; 83 | left: 0; 84 | z-index: 10; 85 | border-bottom: 1px solid $borderColor; 86 | } 87 | 88 | #{$prefix}toolbar-container { 89 | padding: 0 8px; 90 | min-height: 35px; 91 | @include user-select(none); 92 | } 93 | 94 | @import "editormd.menu"; 95 | 96 | #{$prefix}container { 97 | margin: 0; 98 | width: 100%; 99 | height: 100%; 100 | overflow: hidden; 101 | padding: 35px 0 0; 102 | position: relative; 103 | background: #fff; 104 | @include box-sizing(border-box); 105 | } 106 | 107 | @import "editormd.dialog"; 108 | @import "editormd.grid"; 109 | @import "editormd.tab"; 110 | @import "editormd.form"; 111 | @import "editormd.codemirror"; 112 | @import "editormd.preview"; 113 | @import "editormd.preview.themes"; 114 | 115 | #{$prefix}onlyread { 116 | #{$prefix}toolbar { 117 | display: none; 118 | } 119 | 120 | .CodeMirror { 121 | margin-top: 0; 122 | } 123 | 124 | #{$prefix}preview { 125 | top: 0; 126 | } 127 | } 128 | 129 | #{$prefix}fullscreen { 130 | position: fixed; 131 | top : 0; 132 | left : 0; 133 | border: none; 134 | margin: 0 auto; 135 | } 136 | 137 | @import "editormd.themes"; -------------------------------------------------------------------------------- /src/static/common/editor.md/scss/editormd.tab.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .editormd-tab { 4 | } 5 | 6 | .editormd-tab-head { 7 | list-style: none; 8 | border-bottom: 1px solid #ddd; 9 | 10 | li { 11 | display: inline-block; 12 | 13 | a { 14 | color: #999; 15 | display: block; 16 | padding: 6px 12px 5px; 17 | text-align: center; 18 | text-decoration: none; 19 | margin-bottom: -1px; 20 | border: 1px solid #ddd; 21 | @include border-top-left-radius(3px); 22 | @include border-top-right-radius(3px); 23 | background: #f6f6f6; 24 | @include transition(all 300ms ease-out); 25 | 26 | &:hover { 27 | color: #666; 28 | background: #eee; 29 | } 30 | } 31 | 32 | &.active a { 33 | color: #666; 34 | background: #fff; 35 | border-bottom-color: #fff; 36 | } 37 | } 38 | 39 | li + li { 40 | margin-left: 3px; 41 | } 42 | } 43 | 44 | .editormd-tab-container { 45 | } 46 | 47 | .editormd-tab-box { 48 | padding: 20px 0; 49 | } -------------------------------------------------------------------------------- /src/static/common/editor.md/scss/editormd.themes.scss: -------------------------------------------------------------------------------- 1 | /* Editor.md Dark theme */ 2 | 3 | #{$prefix}theme-dark { 4 | border-color: #1a1a17; 5 | 6 | #{$prefix}toolbar { 7 | background: #1A1A17; 8 | border-color: #1a1a17; 9 | } 10 | 11 | #{$prefix}menu > li > a { 12 | color: #777; 13 | border-color: #1a1a17; 14 | 15 | &:hover, &.active { 16 | border-color: #333; 17 | background: #333; 18 | } 19 | } 20 | 21 | #{$prefix}menu > li.divider { 22 | border-right: 1px solid #111; 23 | } 24 | 25 | .CodeMirror { 26 | border-right: 1px solid rgba(0,0,0,0.1); 27 | } 28 | } -------------------------------------------------------------------------------- /src/static/common/editor.md/scss/prettify.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /*! Pretty printing styles. Used with prettify.js. */ 4 | /* SPAN elements with the classes below are added by prettyprint. */ 5 | .pln { color: #000 } /* plain text */ 6 | 7 | @media screen { 8 | .str { color: #080 } /* string content */ 9 | .kwd { color: #008 } /* a keyword */ 10 | .com { color: #800 } /* a comment */ 11 | .typ { color: #606 } /* a type name */ 12 | .lit { color: #066 } /* a literal value */ 13 | /* punctuation, lisp open bracket, lisp close bracket */ 14 | .pun, .opn, .clo { color: #660 } 15 | .tag { color: #008 } /* a markup tag name */ 16 | .atn { color: #606 } /* a markup attribute name */ 17 | .atv { color: #080 } /* a markup attribute value */ 18 | .dec, .var { color: #606 } /* a declaration; a variable name */ 19 | .fun { color: red } /* a function name */ 20 | } 21 | 22 | /* Use higher contrast and text-weight for printable form. */ 23 | @media print, projection { 24 | .str { color: #060 } 25 | .kwd { color: #006; font-weight: bold } 26 | .com { color: #600; font-style: italic } 27 | .typ { color: #404; font-weight: bold } 28 | .lit { color: #044 } 29 | .pun, .opn, .clo { color: #440 } 30 | .tag { color: #006; font-weight: bold } 31 | .atn { color: #404 } 32 | .atv { color: #060 } 33 | } 34 | 35 | /* Put a border around prettyprinted code snippets. */ 36 | pre.prettyprint { padding: 2px; border: 1px solid #888 } 37 | 38 | /* Specify class=linenums on a pre to get line numbering */ 39 | ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */ 40 | li.L0, 41 | li.L1, 42 | li.L2, 43 | li.L3, 44 | li.L5, 45 | li.L6, 46 | li.L7, 47 | li.L8 { list-style-type: none } 48 | /* Alternate shading for lines */ 49 | li.L1, 50 | li.L3, 51 | li.L5, 52 | li.L7, 53 | li.L9 { background: #eee } -------------------------------------------------------------------------------- /src/static/common/editor.md/tests/bootstrap-test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Bootstrap 兼容测试 - Editor.md tests 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 |
19 |
20 |

Bootstrap 兼容测试

21 |
22 |
23 | 24 |
25 |
26 | 27 | 28 | 29 | 30 | 31 | 62 | 63 | -------------------------------------------------------------------------------- /src/static/common/editor.md/tests/codemirror-test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CodeMirror Test 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 25 | 36 | 43 | 74 | 75 | -------------------------------------------------------------------------------- /src/static/common/editor.md/tests/marked-todo-list-test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Marked Emoji Test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 60 | 61 | -------------------------------------------------------------------------------- /src/static/common/jquery.toTop.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * jQuery.toTop.js v1.1 3 | * Developed by: MMK Jony 4 | * Fork on Github: https://github.com/mmkjony/jQuery.toTop 5 | **/ 6 | 7 | !function(o){"use strict";o.fn.toTop=function(t){var i=this,e=o(window),s=o("html, body"),n=o.extend({autohide:!0,offset:420,speed:500,position:!0,right:15,bottom:30},t);i.css({cursor:"pointer"}),n.autohide&&i.css("display","none"),n.position&&i.css({position:"fixed",right:n.right,bottom:n.bottom}),i.click(function(){s.animate({scrollTop:0},n.speed)}),e.scroll(function(){var o=e.scrollTop();n.autohide&&(o>n.offset?i.fadeIn(n.speed):i.fadeOut(n.speed))})}}(jQuery); 8 | -------------------------------------------------------------------------------- /src/static/common/jump.js: -------------------------------------------------------------------------------- 1 | var sUserAgent = navigator.userAgent.toLowerCase(); 2 | var bIsIpad = sUserAgent.match(/ipad/i) == "ipad"; 3 | var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os"; 4 | var bIsMidp = sUserAgent.match(/midp/i) == "midp"; 5 | var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4"; 6 | var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb"; 7 | var bIsAndroid = sUserAgent.match(/android/i) == "android"; 8 | var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce"; 9 | var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile"; 10 | 11 | if (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) {//如果是上述设备就会以手机域名打开 12 | window.location.href = 'http:www.baidu.com'; 13 | } -------------------------------------------------------------------------------- /src/static/common/layui/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.4 MIT License By https://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /src/static/common/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /src/static/common/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /src/static/common/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /src/static/common/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /src/static/common/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /src/static/common/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/font/iconfont.eot -------------------------------------------------------------------------------- /src/static/common/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /src/static/common/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/font/iconfont.woff -------------------------------------------------------------------------------- /src/static/common/layui/font/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/font/iconfont.woff2 -------------------------------------------------------------------------------- /src/static/common/layui/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/0.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/1.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/10.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/11.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/12.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/13.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/14.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/15.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/16.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/17.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/18.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/19.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/2.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/20.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/21.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/22.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/23.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/24.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/25.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/26.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/27.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/28.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/29.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/3.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/30.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/31.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/32.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/33.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/34.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/35.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/36.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/37.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/38.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/39.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/4.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/40.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/41.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/42.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/43.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/44.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/45.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/46.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/47.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/48.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/49.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/5.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/50.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/51.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/52.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/53.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/54.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/55.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/56.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/57.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/58.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/59.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/6.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/60.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/61.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/62.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/63.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/64.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/65.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/66.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/67.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/68.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/69.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/7.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/70.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/71.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/8.gif -------------------------------------------------------------------------------- /src/static/common/layui/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/common/layui/images/face/9.gif -------------------------------------------------------------------------------- /src/static/common/layui/lay/modules/code.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.4 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.$,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /src/static/common/layui/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.4 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('
'+d+"
");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); -------------------------------------------------------------------------------- /src/static/common/layui/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.4 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /src/static/common/layui/lay/modules/rate.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.4 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='"+(i.text?''+i.value+"星":"")+"";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)}); -------------------------------------------------------------------------------- /src/static/common/layui/lay/modules/util.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.4 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(t){"use strict";var e=layui.$,i={fixbar:function(t){var i,n,a="layui-fixbar",o="layui-fixbar-top",r=e(document),l=e("body");t=e.extend({showHeight:200},t),t.bar1=t.bar1===!0?"":t.bar1,t.bar2=t.bar2===!0?"":t.bar2,t.bgcolor=t.bgcolor?"background-color:"+t.bgcolor:"";var c=[t.bar1,t.bar2,""],g=e(['"].join("")),s=g.find("."+o),u=function(){var e=r.scrollTop();e>=t.showHeight?i||(s.show(),i=1):i&&(s.hide(),i=0)};e("."+a)[0]||("object"==typeof t.css&&g.css(t.css),l.append(g),u(),g.find("li").on("click",function(){var i=e(this),n=i.attr("lay-type");"top"===n&&e("html,body").animate({scrollTop:0},200),t.click&&t.click.call(this,n)}),r.on("scroll",function(){clearTimeout(n),n=setTimeout(function(){u()},100)}))},countdown:function(t,e,i){var n=this,a="function"==typeof e,o=new Date(t).getTime(),r=new Date(!e||a?(new Date).getTime():e).getTime(),l=o-r,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];a&&(i=e);var g=setTimeout(function(){n.countdown(t,r+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],e,g),l<=0&&clearTimeout(g),g},timeAgo:function(t,e){var i=this,n=[[],[]],a=(new Date).getTime()-new Date(t).getTime();return a>6912e5?(a=new Date(t),n[0][0]=i.digit(a.getFullYear(),4),n[0][1]=i.digit(a.getMonth()+1),n[0][2]=i.digit(a.getDate()),e||(n[1][0]=i.digit(a.getHours()),n[1][1]=i.digit(a.getMinutes()),n[1][2]=i.digit(a.getSeconds())),n[0].join("-")+" "+n[1].join(":")):a>=864e5?(a/1e3/60/60/24|0)+"天前":a>=36e5?(a/1e3/60/60|0)+"小时前":a>=12e4?(a/1e3/60|0)+"分钟前":a<0?"未来":"刚刚"},digit:function(t,e){var i="";t=String(t),e=e||2;for(var n=t.length;n/g,">").replace(/'/g,"'").replace(/"/g,""")},event:function(t,n,a){n=i.event[t]=e.extend(!0,i.event[t],n)||{},e("body").on(a||"click","*["+t+"]",function(){var i=e(this),a=i.attr(t);n[a]&&n[a].call(this,i)})}};!function(t,e,i){"$:nomunge";function n(){a=e[l](function(){o.each(function(){var e=t(this),i=e.width(),n=e.height(),a=t.data(this,g);(i!==a.w||n!==a.h)&&e.trigger(c,[a.w=i,a.h=n])}),n()},r[s])}var a,o=t([]),r=t.resize=t.extend(t.resize,{}),l="setTimeout",c="resize",g=c+"-special-event",s="delay",u="throttleWindow";r[s]=250,r[u]=!0,t.event.special[c]={setup:function(){if(!r[u]&&this[l])return!1;var e=t(this);o=o.add(e),t.data(this,g,{w:e.width(),h:e.height()}),1===o.length&&n()},teardown:function(){if(!r[u]&&this[l])return!1;var e=t(this);o=o.not(e),e.removeData(g),o.length||clearTimeout(a)},add:function(e){function n(e,n,o){var r=t(this),l=t.data(this,g)||{};l.w=n!==i?n:r.width(),l.h=o!==i?o:r.height(),a.apply(this,arguments)}if(!r[u]&&this[l])return!1;var a;return t.isFunction(e)?(a=e,n):(a=e.handler,void(e.handler=n))}}}(e,window),t("util",i)}); -------------------------------------------------------------------------------- /src/static/common/zlajax.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by hynev on 2017/11/10. 3 | */ 4 | // 对jquery的ajax的封装 5 | 6 | 'use strict'; 7 | var zlajax = { 8 | 'get':function(args) { 9 | args['method'] = 'get'; 10 | this.ajax(args); 11 | }, 12 | 'post':function(args) { 13 | args['method'] = 'post'; 14 | this.ajax(args); 15 | }, 16 | 'ajax':function(args) { 17 | // 设置csrftoken 18 | this._ajaxSetup(); 19 | $.ajax(args); 20 | }, 21 | '_ajaxSetup': function() { 22 | $.ajaxSetup({ 23 | 'beforeSend':function(xhr,settings) { 24 | if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) { 25 | var csrftoken = $('meta[name=csrf-token]').attr('content'); 26 | xhr.setRequestHeader("X-CSRFToken", csrftoken) 27 | } 28 | } 29 | }); 30 | } 31 | }; -------------------------------------------------------------------------------- /src/static/common/zlparam.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Administrator on 2017/3/24. 3 | */ 4 | 5 | var zlparam = { 6 | setParam: function (href,key,value) { 7 | // 重新加载整个页面 8 | var isReplaced = false; 9 | var urlArray = href.split('?'); 10 | if(urlArray.length > 1){ 11 | var queryArray = urlArray[1].split('&'); 12 | for(var i=0; i < queryArray.length; i++){ 13 | var paramsArray = queryArray[i].split('='); 14 | if(paramsArray[0] == key){ 15 | paramsArray[1] = value; 16 | queryArray[i] = paramsArray.join('='); 17 | isReplaced = true; 18 | break; 19 | } 20 | } 21 | 22 | if(!isReplaced){ 23 | var params = {}; 24 | params[key] = value; 25 | if(urlArray.length > 1){ 26 | href = href + '&' + $.param(params); 27 | }else{ 28 | href = href + '?' + $.param(params); 29 | } 30 | }else{ 31 | var params = queryArray.join('&'); 32 | urlArray[1] = params; 33 | href = urlArray.join('?'); 34 | } 35 | }else{ 36 | var param = {}; 37 | param[key] = value; 38 | if(urlArray.length > 1){ 39 | href = href + '&' + $.param(param); 40 | }else{ 41 | href = href + '?' + $.param(param); 42 | } 43 | } 44 | return href; 45 | } 46 | }; 47 | -------------------------------------------------------------------------------- /src/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/favicon.ico -------------------------------------------------------------------------------- /src/static/front/css/front_announcement.css: -------------------------------------------------------------------------------- 1 | 2 | .text-title{ 3 | font-size: 30px; 4 | text-align: center; 5 | margin-top: 20px; 6 | } 7 | 8 | #span{ 9 | display: inline-block; 10 | vertical-align: middle; 11 | margin: 0 10px 10px 0; 12 | font-size: 15px; 13 | -webkit-tap-highlight-color: rgba(0,0,0,0); 14 | } 15 | 16 | .xinxi{ 17 | margin-top: 20px; 18 | text-align: center; 19 | } 20 | 21 | .text{ 22 | background: white; 23 | overflow: hidden; 24 | } 25 | /*#account{*/ 26 | /*float: right;*/ 27 | /*}*/ 28 | #button{ 29 | margin-top: 8px; 30 | float: right; 31 | } 32 | #account{ 33 | margin-top: 10px; 34 | } 35 | 36 | .search{ 37 | display: none; 38 | } 39 | 40 | -------------------------------------------------------------------------------- /src/static/front/css/front_article.css: -------------------------------------------------------------------------------- 1 | .text img { 2 | width: 100%; 3 | } 4 | 5 | .text-title{ 6 | font-size: 30px; 7 | text-align: center; 8 | margin-top: 20px; 9 | } 10 | 11 | #span{ 12 | display: inline-block; 13 | vertical-align: middle; 14 | margin: 0 10px 10px 0; 15 | font-size: 15px; 16 | -webkit-tap-highlight-color: rgba(0,0,0,0); 17 | } 18 | 19 | .xinxi{ 20 | margin-top: 20px; 21 | text-align: center; 22 | } 23 | 24 | .text{ 25 | background: white; 26 | overflow: hidden; 27 | } 28 | /*#account{*/ 29 | /*float: right;*/ 30 | /*}*/ 31 | #button{ 32 | margin-top: 8px; 33 | float: right; 34 | } 35 | #account{ 36 | margin-top: 10px; 37 | } 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/static/front/css/front_index.css: -------------------------------------------------------------------------------- 1 | #img img { 2 | height: 80px; 3 | width: 80px; 4 | border-radius: 10px; 5 | margin-left: 30px; 6 | } 7 | 8 | .article { 9 | /*margin-top: 20px;*/ 10 | background: white; 11 | border-radius: 10px; 12 | margin-bottom: 50px; 13 | } 14 | 15 | #test1 img { 16 | width: 100%; 17 | height: 100%; 18 | } 19 | 20 | .title { 21 | font-size: 19px; 22 | line-height: 100%; 23 | text-shadow: #fff 0 1px; 24 | } 25 | 26 | .title a { 27 | color: #333 28 | } 29 | 30 | .title a:visited { 31 | color: #8D8D8D; 32 | 33 | } 34 | 35 | .title a:hover { 36 | color: #009688; 37 | 38 | } 39 | 40 | .digest { 41 | margin-top: 10px; 42 | color: lightslategray; 43 | padding-right: 10%; 44 | } 45 | 46 | #account { 47 | margin-top: 15px; 48 | 49 | } 50 | 51 | #font { 52 | color: #8D8D8D; 53 | } 54 | 55 | #tag { 56 | font-size: 15px; 57 | } 58 | 59 | ul li { 60 | /*font-size: 17px;*/ 61 | color: #8D8D8D 62 | } 63 | 64 | .case span.lihover { 65 | background: url(../img/greenarrowright.gif) no-repeat 10px center #F1F1F1; 66 | border-radius: 10px; 67 | } 68 | 69 | /* tips */ 70 | .tips { 71 | position: absolute; 72 | top: -53px; 73 | left: 300px; 74 | width: 182px; 75 | height: 123px; 76 | visibility: hidden; 77 | background: url(../img/tipbg.png) no-repeat; 78 | opacity: 0.0; 79 | -moz-transition: all 0.5s ease; 80 | -webkit-transition: all 0.5s ease; 81 | -o-transition: all 0.5s ease; 82 | } 83 | 84 | .tips .tipscont { 85 | width: 100px; 86 | text-align: center; 87 | margin: 10px 0 0 50px; 88 | } 89 | 90 | .hover { 91 | visibility: visible; 92 | top: 70px; 93 | left: 100%; 94 | opacity: 1; 95 | z-index: 99999; 96 | } 97 | 98 | ul li:hover { 99 | font-size: 17px; 100 | color: #009688 101 | 102 | } -------------------------------------------------------------------------------- /src/static/front/css/front_wechat_github.css: -------------------------------------------------------------------------------- 1 | /*.text img {*/ 2 | /* width: 100%;*/ 3 | /*}*/ 4 | 5 | .text-title { 6 | font-size: 30px; 7 | text-align: center; 8 | margin-top: 20px; 9 | } 10 | 11 | #span { 12 | display: inline-block; 13 | vertical-align: middle; 14 | margin: 0 10px 10px 0; 15 | font-size: 15px; 16 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 17 | } 18 | 19 | .xinxi { 20 | margin-top: 20px; 21 | text-align: center; 22 | } 23 | 24 | .text { 25 | background: white; 26 | overflow: hidden; 27 | } 28 | 29 | /*#account{*/ 30 | /*float: right;*/ 31 | /*}*/ 32 | #button { 33 | margin-top: 8px; 34 | float: right; 35 | } 36 | 37 | #account { 38 | margin-top: 10px; 39 | } 40 | 41 | .search { 42 | display: none; 43 | } 44 | 45 | .article a { 46 | color: #009688 !important; 47 | } 48 | 49 | 50 | @media screen and (max-width: 979px) { 51 | .editormd-html-preview { 52 | font-size: 35px !important; 53 | } 54 | #content{ 55 | margin-left: 5%; 56 | margin-right: 5%; 57 | } 58 | } 59 | @media screen and (min-width: 979px) { 60 | .editormd-html-preview { 61 | font-size: 15px !important; 62 | } 63 | #content{ 64 | margin-left: 5%; 65 | margin-right: 5%; 66 | } 67 | } 68 | 69 | .article a:hover { 70 | color: #009688b5 !important; 71 | } 72 | 73 | .article a:visited { 74 | color: #81cac369 !important; 75 | } 76 | 77 | -------------------------------------------------------------------------------- /src/static/front/css/front_weekly.css: -------------------------------------------------------------------------------- 1 | .text img { 2 | width: 100%; 3 | } 4 | 5 | .text{ 6 | font-size: 30px; 7 | 8 | margin-top: 20px; 9 | } 10 | 11 | #span{ 12 | display: inline-block; 13 | vertical-align: middle; 14 | margin: 0 10px 10px 0; 15 | font-size: 15px; 16 | -webkit-tap-highlight-color: rgba(0,0,0,0); 17 | } 18 | 19 | .xinxi{ 20 | margin-top: 20px; 21 | text-align: center; 22 | } 23 | 24 | .text{ 25 | background: white; 26 | overflow: hidden; 27 | } 28 | /*#account{*/ 29 | /*float: right;*/ 30 | /*}*/ 31 | #button{ 32 | margin-top: 8px; 33 | float: right; 34 | } 35 | #account{ 36 | margin-top: 10px; 37 | } 38 | .layui-table a:hover{ 39 | color: #009688; 40 | } 41 | -------------------------------------------------------------------------------- /src/static/front/css/front_weekly_detail.css: -------------------------------------------------------------------------------- 1 | .text img { 2 | width: 100%; 3 | } 4 | 5 | .text-title { 6 | font-size: 30px; 7 | text-align: center; 8 | margin-top: 20px; 9 | } 10 | 11 | #span { 12 | display: inline-block; 13 | vertical-align: middle; 14 | margin: 0 10px 10px 0; 15 | font-size: 15px; 16 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 17 | } 18 | 19 | .xinxi { 20 | margin-top: 20px; 21 | text-align: center; 22 | } 23 | 24 | .text { 25 | background: white; 26 | overflow: hidden; 27 | } 28 | 29 | /*#account{*/ 30 | /*float: right;*/ 31 | /*}*/ 32 | #button { 33 | margin-top: 8px; 34 | float: right; 35 | } 36 | 37 | #account { 38 | margin-top: 10px; 39 | } 40 | 41 | .search { 42 | display: none; 43 | } 44 | 45 | .article a { 46 | color: #009688 !important; 47 | } 48 | 49 | @media screen and (max-width: 979px) { 50 | .editormd-html-preview { 51 | font-size: 30px !important; 52 | } 53 | #content{ 54 | margin-left: 5%; 55 | margin-right: 5%; 56 | } 57 | } 58 | @media screen and (min-width: 979px) { 59 | .editormd-html-preview { 60 | font-size: 15px !important; 61 | } 62 | #content{ 63 | margin-left: 15%; 64 | margin-right: 15%; 65 | } 66 | } 67 | 68 | .article a:hover { 69 | color: #009688b5 !important; 70 | } 71 | 72 | .article a:visited { 73 | color: #81cac369 !important; 74 | } -------------------------------------------------------------------------------- /src/static/front/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/static/front/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/static/front/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/static/front/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/static/front/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/static/front/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/static/front/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/static/front/img/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/close.png -------------------------------------------------------------------------------- /src/static/front/img/close1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/close1.png -------------------------------------------------------------------------------- /src/static/front/img/donate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/donate.png -------------------------------------------------------------------------------- /src/static/front/img/doonsec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/doonsec.png -------------------------------------------------------------------------------- /src/static/front/img/doonsec_bak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/doonsec_bak.png -------------------------------------------------------------------------------- /src/static/front/img/doonsec_bak3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/doonsec_bak3.png -------------------------------------------------------------------------------- /src/static/front/img/greenarrowright.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/greenarrowright.gif -------------------------------------------------------------------------------- /src/static/front/img/like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/like.png -------------------------------------------------------------------------------- /src/static/front/img/list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/list.png -------------------------------------------------------------------------------- /src/static/front/img/list1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/list1.png -------------------------------------------------------------------------------- /src/static/front/img/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/search.png -------------------------------------------------------------------------------- /src/static/front/img/search1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/search1.png -------------------------------------------------------------------------------- /src/static/front/img/tipbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/tipbg.png -------------------------------------------------------------------------------- /src/static/front/img/wechat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doonsec/WechatTogetherOffline/b272838eb213aa301e4ca0542d2e3772406a8fc9/src/static/front/img/wechat.jpg -------------------------------------------------------------------------------- /src/static/front/js/custom.js: -------------------------------------------------------------------------------- 1 | /*==================================== 2 | Free To Use For Personal And Commercial Usage 3 | Author: # 4 | License: Open source - MIT 5 | Please visit http://opensource.org/licenses/MIT for more Full Deatils of license. 6 | Share Us if You Like our work 7 | Enjoy Our Codes For Free always. 8 | ======================================*/ 9 | 10 | (function ($) { 11 | "use strict"; 12 | var mainApp = { 13 | 14 | main_fun: function () { 15 | 16 | var count = new countUp("error-link", 10, 404, 0, 5); //CHANGE 404 TO THE ERROR VALUE AS YOU WANT 17 | 18 | window.onload = function () { 19 | count.start(); 20 | } 21 | 22 | /*==================================== 23 | WRITE YOUR SCRIPTS HERE 24 | ======================================*/ 25 | }, 26 | 27 | initialization: function () { 28 | mainApp.main_fun(); 29 | 30 | } 31 | 32 | } 33 | // Initializing /// 34 | 35 | $(document).ready(function () { 36 | mainApp.main_fun(); 37 | }); 38 | 39 | }(jQuery)); 40 | -------------------------------------------------------------------------------- /src/static/front/js/front_announcement.js: -------------------------------------------------------------------------------- 1 | layui.use(['form', 'layedit', 'jquery'], function () { 2 | var form = layui.form; 3 | var layedit = layui.layedit; 4 | 5 | var index = layedit.build('demo', { 6 | tool: [ 7 | 'strong' //加粗 8 | , 'italic' //斜体 9 | , 'underline' //下划线 10 | , 'del' //删除线 11 | , '|' //分割线 12 | , 'left' //左对齐 13 | , 'center' //居中对齐 14 | , 'right' //右对齐 15 | , 'link' //超链接 16 | , 'unlink' //清除链接 17 | , 'face' //表情 18 | ] 19 | }); //建立编辑器 20 | form.verify({ 21 | content: function (value) { 22 | if (value.length > 20) { 23 | return '内容长度不能大于200个字符'; 24 | } 25 | } 26 | }); 27 | //监听提交 28 | form.on('submit(formDemo)', function (data) { 29 | var content = data.field.content; 30 | var graph_captcha = data.field.graph_captcha; 31 | var content = layedit.getContent(index); 32 | if (content.length <= 0) { 33 | layer.msg('内容不能为空!'); 34 | return false; 35 | } 36 | if (content.indexOf('alert') > -1) { 37 | alert('xss');/* 添加一个彩蛋*/ 38 | alert('听说你想alert? 那就给你alert'); 39 | $('#captcha-img').trigger('click'); 40 | return false; 41 | } 42 | zlajax.post({ 43 | 'url': '/admin/msg_board_add/', 44 | 'data': { 45 | 'content': content, 46 | 'graph_captcha':graph_captcha 47 | }, 48 | 'success': function (data) { 49 | if (data['code'] == 200) { 50 | layer.msg(data['message']); 51 | $("input").val(""); 52 | $('#captcha-img').trigger('click'); 53 | } else { 54 | layer.msg(data['message']); 55 | $('#captcha-img').trigger('click'); 56 | } 57 | } 58 | }); 59 | return false; 60 | }); 61 | }); -------------------------------------------------------------------------------- /src/static/front/js/front_base.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | $('#captcha-img').click(function (event) { 3 | var self = $(this); 4 | var src = self.attr('src'); 5 | var newsrc = zlparam.setParam(src, 'xx', Math.random()); 6 | self.attr('src', newsrc); 7 | }); 8 | }); 9 | //页面初始化 10 | layui.use(['element', 'carousel', 'flow', 'form'], function () { 11 | var carousel = layui.carousel; 12 | //建造实例 13 | 14 | form = layui.form; 15 | 16 | 17 | $(function () { 18 | $("#add_account").click(function () { 19 | var self = $(this); 20 | layer.open({ 21 | type: 1, 22 | anim: 1, 23 | area: ['61%', '60%'], 24 | skin: 'demo-class', 25 | // btn: ['立即提交', '取消'], 26 | maxmin: true, 27 | shadeClose: false, 28 | title: '贡献微信公众号', 29 | content: $('#add'), 30 | success: function (index) { 31 | var but = $(".layui-layer-btn0"); 32 | but.attr('lay-filter', 'demo1'); 33 | but.attr('lay-submit', ""); 34 | }, 35 | end: function () { //层销毁时 36 | $("input").val(""); 37 | $("select").val(""); 38 | $('#captcha-img').trigger('click'); 39 | } 40 | }); 41 | }) 42 | }); 43 | form.on('submit(add)', function (data1, index) { 44 | var self = $(this); 45 | var dic = new Object(); 46 | var account_name = data1.field.account_name; 47 | var tag_name = data1.field.tag_name; 48 | var account_link = data1.field.account_link; 49 | var founder = data1.field.founder; 50 | var graph_captcha = data1.field.graph_captcha; 51 | dic.account_name = account_name; 52 | dic.tag_name = tag_name; 53 | dic.account_link = account_link; 54 | dic.founder = founder; 55 | dic.graph_captcha = graph_captcha; 56 | 57 | zlajax.post({ 58 | 'url': '/admin/community_account_add/', 59 | 'data': dic, 60 | 'success': function (data) { 61 | if (data['code'] == 200) { 62 | layer.msg(data['message']); 63 | $("input").val(""); 64 | $("select").val(""); 65 | } else { 66 | layer.msg(data['message']); 67 | } 68 | $('#captcha-img').trigger('click'); 69 | }, 'fail': function () { 70 | layer.msg('网络错误!') 71 | } 72 | }); 73 | 74 | return false 75 | }); 76 | }); 77 | $(document).scroll(function () { 78 | right = $("#right"); 79 | var scroH = $(document).scrollTop(); 80 | if (scroH > 40) { 81 | right.css('top', 0) 82 | } else { 83 | right.removeAttr('style') 84 | } 85 | }); 86 | 87 | $(function () { 88 | $('.to-top').toTop(); 89 | }); -------------------------------------------------------------------------------- /src/templates/front/front_404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 404-洞见微信聚合 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 |
25 |
26 |

What have you done?

27 |
Now Go Back Using Below LInk
28 | 29 |

! ERROR DECETED !

30 |
31 |
32 | 33 |
34 |
35 | 36 |

37 | 返回首页 38 |
39 |
40 | 41 |
42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /src/templates/front/front_announcement.html: -------------------------------------------------------------------------------- 1 | {% extends 'front/front_base.html' %} 2 | 3 | {% block head %} 4 | 5 | 6 | 7 | {% endblock %} 8 | 9 | {% block title %} 10 | 公告-洞见微信聚合 11 | {% endblock %} 12 | 13 | {% block content %} 14 |
15 |
16 |
17 |
18 | 历史公告 19 |
20 |
    21 | {% for annocuncement in annocuncements %} 22 |
  • 23 | 24 |
    25 |

    {{ annocuncement.time|string }}

    26 |

    27 | {{ annocuncement.context|safe }} 28 |

    29 |
    30 |
    31 |
  • 32 | {% endfor %} 33 | 34 |
  • 35 | 36 |
    37 |
    过去
    38 |
    39 |
  • 40 |
41 | 42 |
43 | 44 |
45 | {% endblock %} 46 | 47 | -------------------------------------------------------------------------------- /src/templates/front/front_wechat_github.html: -------------------------------------------------------------------------------- 1 | {% extends 'front/front_base.html' %} 2 | 3 | {% block head %} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 15 | 16 | 17 | 35 | {% endblock %} 36 | 37 | {% block title %} 38 | 快速关注公众号-洞见微信聚合 39 | {% endblock %} 40 | 41 | {% block content %} 42 |
43 |
44 |
45 |
46 | 47 |
48 |
    49 |
    50 |
    51 | {{ content|markdown2html|safe }} 52 |
    53 |
    54 |
55 | 56 |
57 | 58 |
59 | {% endblock %} 60 | 61 | -------------------------------------------------------------------------------- /src/utils/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: UTF-8 -*- 2 | __author__ = 'Joynice' -------------------------------------------------------------------------------- /src/utils/field.py: -------------------------------------------------------------------------------- 1 | # -*- coding: UTF-8 -*- 2 | __author__ = 'Joynice' 3 | from flask import jsonify 4 | 5 | 6 | class HttpCode(object): 7 | ok = 200 8 | unautherror = 401 9 | paramserror = 400 10 | methoderror = 405 11 | servererror = 500 12 | 13 | 14 | def restful_result(code, message, data, count): 15 | return jsonify({"code": code, "message": message, "count": count, "data": data or {}}) 16 | 17 | 18 | def success(message="", data=None, count=None): 19 | return restful_result(code=HttpCode.ok, message=message, data=data, count=count) 20 | 21 | 22 | def layui_success(message="", data=None, count=None): 23 | return restful_result(code=0, message=message, data=data, count=count) 24 | 25 | 26 | def unauth_error(message="认证失败", count=None): 27 | return restful_result(code=HttpCode.unautherror, message=message, data=None, count=count) 28 | 29 | 30 | def params_error(message="", count=None): 31 | return restful_result(code=HttpCode.paramserror, message=message, data=None, count=count) 32 | 33 | 34 | def server_error(message="", count=None): 35 | return restful_result(code=HttpCode.servererror, message=message or '服务器内部错误', data=None, count=count) 36 | 37 | 38 | def method_error(message='', count=None): 39 | return restful_result(code=HttpCode.methoderror, message=message, data=None, count=count) 40 | --------------------------------------------------------------------------------