Giter VIP home page Giter VIP logo

qexo's Introduction

Qexo

Qexo 是一个快速、强大、美观的在线 静态博客编辑器。使用 GPL3.0 开源协议。支持包括且不限于在 Vercel 等平台部署, 为您的静态博客添加动态的元素

Qexo is a fast, powerful and beautiful online static blog editor. Uses the GPL3.0 Open Source license. Support includes and is not limited to deployment on platforms such as Vercel, adding dynamic elements to your static blogs

请阅读文档

Plese read Wiki first

Features 特性

  • Article Management ~ New Interface

    Version 3.0 of Qexo redesigned the post editing page, you can edit posts more elegantly.

    Support multiple image uploading, uploading is just a click away!

  • Cache function ~ speed is the most important thing

    Supports caching articles, pages and configuration indexes to database, ensuring your high-speed access.

    Webhook fully automatic cache clearing, always keep your data up-to-date.

  • Smaller than a sparrow ~ complete in every way

    • Modularized Architecture
    • Supports multiple Hexo, Hugo, Valaxy hosts Github, Gitlab, Local
    • Multiple graph bed protocols support Github, S3, FTP, remote APIs
    • Markdown syntax + multiple editing interfaces, what you see is what you get.
    • New interface: Night/Day with one click
    • Multi-format push Bark, Telegram, Pushdeer, Wechat...
    • reCaptcha Spam Prevention
    • Links Front-end application, one-click access
    • Automatic update Easy and convenient, keep the latest
    • Customized Fields / Site Statistics / Page Management / Configuration Editing
    • Comment Notification / Image Upload / Logo Generation / API Expansion

Acknowledgements 鸣谢

Sponsor 赞助

作为一个开源项目,本项目并未给我带来直接利益。若您觉得本项目对您有帮助,您的支持将是我最大的动力。

您可以在备注中附上您的姓名和网站博客。赞助1元及以上者,将在文档页面永久展示。

As an open-source project, this project does not provide me with any direct benefits. If you find this project helpful, your support is my greatest motivation.

You can include your name and website blog in the remarks. Sponsorship of 1 RMB or more will be permanently displayed on the documentation page.

Alipay/WeChat

qexo's People

Contributors

admsec avatar am-abudu avatar dingjunyao avatar fgaoxing avatar fstyou avatar kylinholmes avatar mis1042 avatar moyueheng avatar musnows avatar sysfox avatar yzl3014 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

qexo's Issues

增加颜色自定义

1.增加颜色自定义2.深色模式3.菜单增加自定义按钮(有直接跳转,和嵌在另一侧)

图床功能希望添加GitHub+jsDelivr图床

个人认为github+jsd图床方案自主管控比别家API图床更自由更安全,能否加入图片上传到账号指定Github仓库并生成cdn.jsdelivr.net/gh/username/repo@branch/filename.png这样链接的功能?可以参考这个图床系统。有webp转换,哈希文件名,压缩功能就更好了,谢谢!

右键

加入右键菜单,并且禁止F12

自动更新

A pull request already exists for am-abudu:master.

提议

希望支持把图片上传到source/img/
图片存放在网上的图床(free)容易挂,都用hexo了,还能用得起付费服务嘛(好吧,主要我7bu账号不知道为什么被冻结了,好像好久没登录,现在账号还要买了居然)

图片上传通过md5生成新的文件名(避免中文名称太过难看
仅使用Vditor上传时会自动生成
图片页面添加上传图片功能

自定义指令

为了达到wordpress的效果,请允许自定义python指令,并提供Qexo-py库

开放API接口

基于API密钥开放API接口,不再仅限于Webhook事件

小問題

image
這個位置我應該填hexo blog的project ID / Qexo的project ID?

在线安装

修改package.json,来在线安装插件,须先检测是否存在该插件,然后在部署,并可选自动升级

汉化

把所有英文选项和错误码,汉化,错误可以提供错误码

友链API

加入友联申请API,和加友联及删友联

邮箱推送

将通知同时推送到邮箱,发布或更新文章时推送到读者,代替谷歌,请制作页面供读者输入邮箱。你也遇到了这个问题吧,谷歌不能用!

openAPI

加入api支持,使用qexo网站/api,基本的增删改查以及小工具,参数如下(我想的)

全新部署到 Vercel 时:Error: Command "./now_build_staticfiles.sh" exited with 1

完全按照 Wki 中 “Vercel 部署”进行操作。

1.3 和 1.3.1 都会报相同错误并构建失败。

完整部署日志:

Building

23:52:07.556 | Cloning github.com/JonnyJong/Qexo (Branch: master, Commit: 10f6dab)
23:52:08.911 | Cloning completed: 1.356s
23:52:09.318 | Analyzing source code...
23:52:09.351 | Warning: Due to builds existing in your configuration file, the Build and Development Settings defined in your Project Settings will not apply. Learn More: https://vercel.link/unused-build-settings
23:52:12.128 | Installing build runtime...
23:52:14.477 | Build runtime installed: 2.349s
23:52:17.155 | Installing build runtime...
23:52:19.843 | Build runtime installed: 2.688s
23:52:27.946 | No Build Cache available
23:52:31.461 | Collecting Django==3.2.9
23:52:31.483 | Downloading Django-3.2.9-py3-none-any.whl (7.9 MB)
23:52:31.747 | Collecting PyGithub==1.55
23:52:31.753 | Downloading PyGithub-1.55-py3-none-any.whl (291 kB)
23:52:31.814 | Collecting PyJWT==2.3.0
23:52:31.831 | Downloading PyJWT-2.3.0-py3-none-any.whl (16 kB)
23:52:31.904 | Collecting PyNaCl==1.4.0
23:52:31.918 | Downloading PyNaCl-1.4.0-cp35-abi3-manylinux1_x86_64.whl (961 kB)
23:52:32.014 | Downloading asgiref-3.4.1-py3-none-any.whl (25 kB)
23:52:32.060 | Collecting certifi==2021.10.8
23:52:32.066 | Downloading certifi-2021.10.8-py2.py3-none-any.whl (149 kB)
23:52:32.482 | Collecting cffi==1.15.0
23:52:32.490 | Downloading cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (405 kB)
23:52:32.543 | Collecting charset-normalizer==2.0.7
23:52:32.549 | Downloading charset_normalizer-2.0.7-py3-none-any.whl (38 kB)
23:52:32.596 | Downloading djongo-1.3.6.tar.gz (331 kB)
23:52:32.639 | Preparing metadata (setup.py): started
23:52:32.882 | Preparing metadata (setup.py): finished with status 'done'
23:52:32.911 | Collecting dnspython==2.1.0
23:52:32.918 | Downloading dnspython-2.1.0-py3-none-any.whl (241 kB)
23:52:32.961 | Collecting idna==3.3
23:52:32.967 | Downloading idna-3.3-py3-none-any.whl (61 kB)
23:52:32.975 | Requirement already satisfied: pip==21.3.1 in /usr/local/lib/python3.6/site-packages (from -r requirements.txt (line 12)) (21.3.1)
23:52:33.002 | Collecting pycparser==2.21
23:52:33.007 | Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
23:52:33.786 | Collecting pymongo==3.12.1
23:52:33.794 | Downloading pymongo-3.12.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (506 kB)
23:52:33.977 | Collecting pytz==2021.3
23:52:33.985 | Downloading pytz-2021.3-py2.py3-none-any.whl (503 kB)
23:52:34.092 | Collecting requests==2.26.0
23:52:34.097 | Downloading requests-2.26.0-py2.py3-none-any.whl (62 kB)
23:52:34.567 | Collecting setuptools==59.2.0
23:52:34.576 | Downloading setuptools-59.2.0-py3-none-any.whl (952 kB)
23:52:34.635 | Collecting six==1.16.0
23:52:34.638 | Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
23:52:34.673 | Collecting sqlparse==0.2.4
23:52:34.679 | Downloading sqlparse-0.2.4-py2.py3-none-any.whl (38 kB)
23:52:34.760 | Collecting urllib3==1.26.7
23:52:34.767 | Downloading urllib3-1.26.7-py2.py3-none-any.whl (138 kB)
23:52:34.842 | Collecting wheel==0.37.0
23:52:34.847 | Downloading wheel-0.37.0-py2.py3-none-any.whl (35 kB)
23:52:35.081 | Collecting wrapt==1.13.3
23:52:35.087 | Downloading wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (78 kB)
23:52:35.170 | Downloading Deprecated-1.2.13-py2.py3-none-any.whl (9.6 kB)
23:52:35.264 | Collecting typing-extensions
23:52:35.270 | Downloading typing_extensions-4.0.0-py3-none-any.whl (22 kB)
23:52:35.350 | Collecting dataclasses
23:52:35.356 | Downloading dataclasses-0.8-py3-none-any.whl (19 kB)
23:52:35.601 | Using legacy 'setup.py install' for djongo, since package 'wheel' is not installed.
23:52:35.816 | Installing collected packages: typing-extensions, pycparser, wrapt, urllib3, sqlparse, six, pytz, idna, charset-normalizer, cffi, certifi, asgiref, requests, PyNaCl, pymongo, PyJWT, Django, deprecated, dataclasses, wheel, setuptools, PyGithub, dnspython, djongo
23:52:39.042 | Attempting uninstall: setuptools
23:52:39.042 | Found existing installation: setuptools 40.6.2
23:52:39.073 | Uninstalling setuptools-40.6.2:
23:52:39.240 | Successfully uninstalled setuptools-40.6.2
23:52:40.383 | Running setup.py install for djongo: finished with status 'done'
23:52:40.398 | Successfully installed Django-3.2.9 PyGithub-1.55 PyJWT-2.3.0 PyNaCl-1.4.0 asgiref-3.4.1 certifi-2021.10.8 cffi-1.15.0 charset-normalizer-2.0.7 dataclasses-0.8 deprecated-1.2.13 djongo-1.3.6 dnspython-2.1.0 idna-3.3 pycparser-2.21 pymongo-3.12.1 pytz-2021.3 requests-2.26.0 setuptools-59.2.0 six-1.16.0 sqlparse-0.2.4 typing-extensions-4.0.0 urllib3-1.26.7 wheel-0.37.0 wrapt-1.13.3
23:52:40.398 | WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
23:52:40.776 | Traceback (most recent call last):
23:52:40.777 | File "manage.py", line 22, in
23:52:40.777 | File "manage.py", line 18, in main
23:52:40.777 | execute_from_command_line(sys.argv)
23:52:40.777 | File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 419, in execute_from_command_line
23:52:40.778 | utility.execute()
23:52:40.778 | File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 363, in execute
23:52:40.778 | settings.INSTALLED_APPS
23:52:40.778 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 82, in getattr
23:52:40.778 | self._setup(name)
23:52:40.778 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 69, in _setup
23:52:40.778 | self._wrapped = Settings(settings_module)
23:52:40.778 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 170, in init
23:52:40.779 | mod = importlib.import_module(self.SETTINGS_MODULE)
23:52:40.779 | File "/usr/local/lib/python3.6/importlib/init.py", line 126, in import_module
23:52:40.779 | return _bootstrap._gcd_import(name[level:], package, level)
23:52:40.779 | File "", line 994, in _gcd_import
23:52:40.779 | File "", line 971, in _find_and_load
23:52:40.779 | File "", line 955, in _find_and_load_unlocked
23:52:40.779 | File "", line 665, in _load_unlocked
23:52:40.779 | File "", line 678, in exec_module
23:52:40.779 | File "", line 219, in _call_with_frames_removed
23:52:40.780 | File "/vercel/path1/core/settings.py", line 22, in
23:52:40.780 | ALLOWED_HOSTS = json.loads(os.environ["DOMAINS"])
23:52:40.780 | return _default_decoder.decode(s)
23:52:40.780 | File "/usr/local/lib/python3.6/json/decoder.py", line 339, in decode
23:52:40.780 | obj, end = self.raw_decode(s, idx=_w(s, 0).end())
23:52:40.780 | File "/usr/local/lib/python3.6/json/decoder.py", line 357, in raw_decode
23:52:40.780 | raise JSONDecodeError("Expecting value", s, err.value) from None
23:52:40.780 | json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
23:52:40.925 | Traceback (most recent call last):
23:52:40.925 | File "manage.py", line 22, in
23:52:40.925 | main()
23:52:40.925 | File "manage.py", line 18, in main
23:52:40.925 | execute_from_command_line(sys.argv)
23:52:40.926 | utility.execute()
23:52:40.926 | File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 363, in execute
23:52:40.926 | settings.INSTALLED_APPS
23:52:40.926 | self._setup(name)
23:52:40.926 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 69, in _setup
23:52:40.926 | self._wrapped = Settings(settings_module)
23:52:40.926 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 170, in init
23:52:40.926 | mod = importlib.import_module(self.SETTINGS_MODULE)
23:52:40.926 | File "/usr/local/lib/python3.6/importlib/init.py", line 126, in import_module
23:52:40.926 | return _bootstrap._gcd_import(name[level:], package, level)
23:52:40.926 | File "", line 994, in _gcd_import
23:52:40.926 | File "", line 971, in _find_and_load
23:52:40.926 | File "", line 955, in _find_and_load_unlocked
23:52:40.927 | File "", line 678, in exec_module
23:52:40.927 | File "", line 219, in _call_with_frames_removed
23:52:40.927 | File "/vercel/path1/core/settings.py", line 22, in
23:52:40.927 | ALLOWED_HOSTS = json.loads(os.environ["DOMAINS"])
23:52:40.927 | File "/usr/local/lib/python3.6/json/init.py", line 354, in loads
23:52:40.927 | return _default_decoder.decode(s)
23:52:40.927 | File "/usr/local/lib/python3.6/json/decoder.py", line 339, in decode
23:52:40.927 | obj, end = self.raw_decode(s, idx=_w(s, 0).end())
23:52:40.927 | File "/usr/local/lib/python3.6/json/decoder.py", line 357, in raw_decode
23:52:40.927 | raise JSONDecodeError("Expecting value", s, err.value) from None
23:52:40.927 | json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
23:52:41.071 | Traceback (most recent call last):
23:52:41.071 | File "manage.py", line 22, in
23:52:41.072 | main()
23:52:41.072 | File "manage.py", line 18, in main
23:52:41.072 | File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 419, in execute_from_command_line
23:52:41.072 | utility.execute()
23:52:41.072 | File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 363, in execute
23:52:41.072 | settings.INSTALLED_APPS
23:52:41.072 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 82, in getattr
23:52:41.072 | self._setup(name)
23:52:41.072 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 69, in _setup
23:52:41.072 | self._wrapped = Settings(settings_module)
23:52:41.072 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 170, in init
23:52:41.072 | mod = importlib.import_module(self.SETTINGS_MODULE)
23:52:41.072 | return _bootstrap._gcd_import(name[level:], package, level)
23:52:41.073 | File "", line 994, in _gcd_import
23:52:41.073 | File "", line 971, in _find_and_load
23:52:41.073 | File "", line 955, in _find_and_load_unlocked
23:52:41.073 | File "", line 665, in _load_unlocked
23:52:41.073 | File "", line 678, in exec_module
23:52:41.073 | File "", line 219, in _call_with_frames_removed
23:52:41.073 | File "/vercel/path1/core/settings.py", line 22, in
23:52:41.073 | ALLOWED_HOSTS = json.loads(os.environ["DOMAINS"])
23:52:41.073 | File "/usr/local/lib/python3.6/json/init.py", line 354, in loads
23:52:41.073 | return _default_decoder.decode(s)
23:52:41.073 | File "/usr/local/lib/python3.6/json/decoder.py", line 339, in decode
23:52:41.073 | obj, end = self.raw_decode(s, idx=_w(s, 0).end())
23:52:41.073 | File "/usr/local/lib/python3.6/json/decoder.py", line 357, in raw_decode
23:52:41.073 | raise JSONDecodeError("Expecting value", s, err.value) from None
23:52:41.073 | json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
23:52:41.097 | Error: Command "./now_build_staticfiles.sh" exited with 1

建议 or 问题

  1. 更新以前文章没有给加上更新时间
  2. 生成文章的时候可不可以自动生成abbrlink之类的东西(当然,也就使用这个插件的用户需要,如果有什么更好的生成永久链接的方法请告诉我
  3. 能不能支持cdn引入表情,微软的那个属实有点少、
  4. 引用的vditor可以添加 切换编辑模式功能 嘛,我挺喜欢即时渲染的,虽然Ctrl+Alt+8可以切换。还有就是要是添加了这个按钮,希望可以设置默认编辑模式/狗头护体
  5. 暂时想到这些,想到其他再提。

文件管理

加个文件管理器呗,github老不好用。带上传和下载

文章加密

大概是这样

<script>
    (function(){
        if('{{ page.password }}'){
            if (prompt('请输入文章密码') !== '{{ page.password }}'){
                alert('密码错误!');
                history.back();
            }
        }
    })();
</script>

搜索

加入配置和页面和友链的搜索

圖床設置

我嘗試在使用imgur來當圖床 但好像不太行 (圖1)
我按下一步也不能skip這個部分 無論按下一步/完成都陣出 (圖2)
請問有其他可行方案嗎?
image
image

我加了volantis友联适配

请写在wiki中谢谢!

侧边栏:

<ul class="list entry navigation" id="list entry navigation"></ul>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/hexo/friends/friends.css"/>
<script src="https://cdn.jsdelivr.net/gh/Fgaoxing/blog-cdn@main/source/js/side-friends.js"></script>
<script>loadQexoFriends("list entry navigation", ""网址")</script>

DZ O%1@J%FIQ@ZF` GAZCA2

页面:

<div class="friends-group"><div id="friend-content" class="friend-content"></div></div>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/hexo/friends/friends.css"/>
<script src="https://cdn.jsdelivr.net/gh/Fgaoxing/blog-cdn@main/source/js/friends.js"></script>
<script>loadQexoFriends("friend-content", "网址")</script>

F(X EF3JI$BXV~G{IPG1%MS

初始化github配置

在初始化github配置时一直提示校验失败,问下这个Github密钥是github的token吗

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.