3 Star 41 Fork 10

微芒不朽 / kestrel-bookmark

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

Part1用Vue3.0 开发一款导入浏览器书签的在线书签

🤵介绍(取名)

👉👉👉【红隼书签】是一款简洁的在线书签导航网站。 名字的由来其实是,本着保护动物,爱护动物的初心,想到起一个鸟类的名称,其实最开始想了很多名字,小詹书签,麻雀书签等。

红隼-kestrel

但是听起来都不够响亮。后来想了一个食肉的,有点凶猛的又有点呆萌的鸟类的名字,红隼【英文翻译:kestrel】,点个赞。于是就有了这个名字啦,但是听起来也是不错的。于是开发计划开始啦。

😀数据来源(印象中文

他的默认数据为我选的是印象中文的web导航数据;其实我自己哪里收藏了更多的导航数据,但是很多设计到公司的一些访问网站。想想还是算了,于是就用了印象中文的数据。它可以修改数据;全局搜索筛选功能;单页面完成逻辑非常简单,新手小白也能完成二次修改开发;采用granim插件完成背景动画;可选择更多动画效果;炫酷光晕背景动画效果。

💹 功能/特色

(炫酷光晕背景动画效果,可导入浏览器数据存入LeanCloud)

  •   ✅ 1.同步印象中文的web导航数据;书签支持新增、修改和删除

  •   ✅ 2.全局搜索筛选功能;本地离线数据持久化,书签增删改查

  •   ✅ 3.可登录获取保存在leancloud里面的书签数据,再不用担心书签数据丢失了

  •   ✅ 4.采用granim插件完成背景动画;可选择更多动画效果;

  •   ✅ 5.支持导入浏览器书签数据(Google,火狐),并存入LeanCloud;

  •   ✅ 6.可注册leanCloud并修改appId和appKey;自己部署该书签;

  •   ✅ 7.采用Vue3.0 Composition API;也是一个学习Vue3.0 的学习项目;希望帮助更多正在学习VUe 3.0的朋友;

  •   ✅ 8.自定义上传背景图片

  •   ✅ 9.自定义背景动画效果

  •   ✅ 10.导入解析浏览器书签,支持修改、删除并存入LeanCloud

 

📝 正在开发的功能

  •   👉自定义工具栏

  •   👉书签支持多种布局样式(卡片,列表,树形书签结构等)

  •   👉支持修改整个书签的图标;目前使用的是红点图标,也挺好看的;

  •   👉自定义配色方案

  •   👉增加中国风和热门游戏配色效果

  •   👉其他功能

😀自定义导入数据

可以将浏览器的书签导出,然后导入到书签系统中。也可以将书签系统的数据导入到浏览器中。

😀leancloud存储

数据到云端。只需注册登录即可,后续无需担心数据丢失问题。

⚡主题

目前提供 清晰/暗黑两种主题。后续还会增加更多的主题效果。

👉暗黑

2.png

3.png

👉清新明亮

1.png

4.png

5.png

💌 网址书签

========⚡⚡⚡ 红隼书签 注意:👉本项目会持续新增功能,但持续维护。如使用中发现问题,请留言或者提交 issue 。谢谢!!!

📚安装步骤

🚀 效果

😄 源码地址

完全开源,大家可以随意研究,二次开发。当然还是十分欢迎大家点个Star⭐⭐⭐\

👉👉源码链接(gitee)       👉👉源码链接(github)

项目结构


├── src

     ├── Api      // 存放接口

     │    └──common.js  // leancloud-storage公共接口函数封装

     │    └──user.js   // leancloud-storage 登录、登出接口

     ├── assets      // 存放静态资源

     │    └──Json    // 静态数据源json数据

     │    └──svg    // 工具栏图标

     ├── components  //存放组件

     │    └──Dialog.vue  // 新增、修改书签

     │    └──Login.vue    // 登录弹窗

     ├── APP.vue

     └── main.js

💡 项目图标(后续支持修改图标)

红隼书签使用了的是iconfont图标,设计的小姐姐是是半夏鸭,设计的图标太棒了,在此表示感谢。ღ( ´・ᴗ・` )

很喜欢这个图标的;

👨‍小姐姐的图标作品集地址图标作品集地址

😀主要功能函数--1、解析浏览器书签为JSON数据


export function walkBookmarksTree(root) {

  const result = []

  // 深度优先遍历

  const walk = (node, list) => {

    const els = node.children

    if (els && els.length > 0) {

      for (let i = 0; i < els.length; i++) {

        const item = els[i]

        // p标签或h3标签直接跳过

        if (item.tagName === 'P' || item.tagName === 'H3') {

          continue

        }

        // 文件夹不用创建元素

        if (item.tagName === 'DL') {

          walk(els[i], list)

        } else { // DT节点

          let child = null

          // 判断是否是文件夹

          const children = item.children

          let isDir = false

          for (let j = 0; j < children.length; j++) {

            if (children[j].tagName === 'H3' || children[j].tagName === 'DL') {

              isDir = true

            }

          }

          // 文件夹

          if (isDir) {

            child = {

              type: item.tagName === 'DT' ? item.querySelector('h3') ? item.querySelector('h3').innerText : '' : '',

              folder: true,

              children: []

            }

            walk(els[i], child.children)

          } else { // 书签

            const _item = item.querySelector('a')

            if (_item) {

              child = {

                title: _item?.innerText,

                url: _item?.href

              }

            }

          }

          child && list.push(child)

        }

      }

    }

  }

  walk(root, result)

  //过滤不为 folder的书签,保证书签能够识别

  const myBookmark = result.filter(v => v.folder)

  return flagBrowerList(myBookmark)

}

😀2、原生Input文件上传-隐藏input标签,实现点击上传


 <i class="el-icon-upload2" title="导入浏览器书签" @click="importBookmark">

    <input type="file" ref="filElem" id="file">

</i>

// 导入书签

const importBookmark = () => {

  const file = document.getElementById('file')

  file.dispatchEvent(new MouseEvent('click'))

  const mybookmark = document.getElementById('mybookmark')

  document.getElementById('file').addEventListener('change', function () {

     var file = document.getElementById('file').files[0]

     var reader = new FileReader()

     reader.readAsText(file, 'utf-8')

     reader.onload = function () {

       mybookmark.innerHTML = reader.result

       const formDatas = JSON.stringify(walkBookmarksTree(mybookmark))

          //此处已经获取了我们上传的bookmark.html文件的内容了,并且已经格式化

      })

  } else {

    ElMessage.warning('请先登录')

  }

}

😄3、接入leanCloud 实现serveless数据存储

其实这部分我已经进行了简单的函数封装,用起来是很方便的,还有很多用法可以参考leancloud文档,具体用法是非常详细的。

其实使用下面几个封装的函数,基本就可以实现一个系统的增删改查了,还是非常快速方便的。数据以JSON数据格式进行存储。

😄4.1 对象存储公共函数(传入表名和存储的数据)


import AV from 'leancloud-storage'

// 对象存储公共函数

export const saveObject = (className, params) => {

  return new Promise((resolve, reject) => {

    const Todo = AV.Object.extend(className)

    const user = AV.User.current()

    var todo = new Todo()

    todo.set('formDatas', params.formDatas)

    todo.set('user', user)

    todo.save().then((res) => {

      resolve(res)

    }, (error) => {

      reject(error)

    })

  })

}

😄4.2 获取对象存储的列表数据(传入表名和条件)


// 获取对象列表

export const getObject = (className, params) => {

  return new Promise((resolve, reject) => {

    const query = new AV.Query(className)

    // 查询多个条件

    const user = AV.User.current()

    for (const v in params) {

      if (params[v]) {

        query.equalTo(v, params[v])

      }

    }

    query.equalTo('user', user)

    query.find().then((res) => {

      resolve(res)

    }, (error) => {

      reject(error)

    })

  })

}

😄4.3 删除对象数据(传入表名和数据ID)


// 删除对象

export const deleteObject = (className, id) => {

  return new Promise((resolve, reject) => {

    const todo = AV.Object.createWithoutData(className, id)

    todo.destroy().then((res) => {

      resolve(res)

    }, (error) => {

      reject(error)

    })

  })

}

😄4.4 更新对象数据(传入表名和存的数据+ID)


// 更新对象

export const updateObject = (className, params) => {

  return new Promise((resolve, reject) => {

    const todo = AV.Object.createWithoutData(className, params.id)

    for (var i in params) {

      todo.set(i, params[i])

    }

    todo.save().then((res) => {

      resolve(res)

    }, (error) => {

      reject(error)

    })

  })

}

😀 issue

需要什么新的需求或者设计,可以给我提issue,感谢,喜欢的也可以点个赞。

💯 致谢

感谢 【空白i】 的打赏 【66.6】继续加油,希望可以做出更多更精致开源的作品处理。继续加油。😀 😀 😀

捐赠

请作者喝杯咖啡😀😀😀😀😀😀😀😀😀😀😀😀😀

😀 其他链接

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

【红隼书签】一款简洁的在线书签导航网站。 使用 Vue3.0+ Leancloud数据存储。 展开 收起
CSS 等 3 种语言
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/zhanhongzhu/kestrel-bookmark.git
git@gitee.com:zhanhongzhu/kestrel-bookmark.git
zhanhongzhu
kestrel-bookmark
kestrel-bookmark
master

搜索帮助