«Это первый день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г.".
исходный код:GitHub.com/maqi1520/cl…
задний план
Для программистов, помимо ежедневного написания кода, они могут столкнуться с различными диаграммами, такими как блок-схемы, диаграммы прототипов, диаграммы топологии, диаграммы UML и интеллект-карты и т. д. Мы больше знакомы с ProcessOn. бесплатная версия ProcessOn, всего картинок 10. После того, как нарисуете эту картинку, скачайте ее, удалите и нарисуйте другую картинку. Несколько дней назад увидел в группе небольшой партнер приглашающий новых пользователей зарегистрироваться, и можно получить 3 файла. Однако зарегистрировались все, а не зарегистрировались единицы.Как front-end программисту интересно, смогу ли я снести его js и использовать как локальный сервер?
Получите внешние статические ресурсы
Просто продолжайте и используйте хром, чтобы щелкнуть правой кнопкой мыши, чтобы сохранить как, вы можете напрямую сохранить статические файлы, используемые этим веб-сайтом, но сохраненные каталоги статических ресурсов автоматически заменяются локальными, но я хочу, чтобы это была та же структура каталогов, что и онлайн .
Это право на JS сохранить это?
Нет, вы можете использовать плагин для ChromeSave All Resources отключить статические ресурсы всего веб-сайта,
После установки появится лишний столбец в chrome devTools
нажмитеsave All ResourcesВот и все.
После распаковки давайте посмотрим на каталог
Не только статические ресурсы в этом домене, статические ресурсы в других доменах тоже вниз вниз, по сути, это уже наполовину сделано.
Скопируйте все ресурсы, затем переименуйте файл HTML наindex.htmlиспользоватьhttp-serverЗапустите службу в текущем каталоге, чтобы к ней можно было успешно получить доступ. Умеет рисовать блок-схему, но данные не сохраняются.
Так как сохранить данные это?
Разработать плагин для хрома
Сначала моей идеей было разработать плагин для хрома, что-то вродеПлагин Nuggets для ChromeТо же самое, нажмите, чтобы открыть, а затем перепишите jquery's$.ajaxметод, используяlocalStroageДля хранения данных нам может быть удобнее использовать.Это не должно быть сложно реализовать.
Затем узнайте, как разработать расширение для Chrome. я нашел на гитхабеchrome-extensions-samplesЗатем я попробовал демо внутри.
Но результат был неудовлетворительным, потому что ProcessOn использовал многоevalметод. chrome-extensions считает этот метод небезопасным.
Тогда по официальному сайту Using eval in Chrome extensions, согласно введению, поместите html вiframe, так что ладно. Чтобы немного развлечься, давайте взглянем на наши приветственные расширения Word Chrome.
Далее подготовьтесь к сохранению данных.
Если вы хотите общаться с родительским контейнером внутри iframe, вы можете использовать parent, и вы столкнулись с проблемой.
Поскольку расширение chrome iframe открывается напрямую, а не через службу http, я попробовал еще разpostMessageДо сих пор не могу общаться.
Поскольку это не может быть чисто офлайн, мы можем разработать только онлайн-версию 👌
Nodejs разработка
стек технологий
- задняя часть: express.js
- База данных:postgres
- ORM: prisma
- Authentication: github OAuth
- внешний интерфейс: Jquery
Я выбрал меня непосредственно для стека технологий здесь.блогТот же стек технологий, ведь эти коды можно использовать непосредственно для регистрации и входа.
Заинтересованные студенты могут прочитать мою предыдущую статьюРефакторинг моего блога с помощью NextJS и TailwindCSS
Структура таблицы
Следующим шагом будет построение таблицы по интерфейсу
Согласно получению запроса первой нагрузки, чтобы просмотреть детали, вы можете увидеть данные запроса. Он возвращает JSON в виде строки. Я думаю, он использует базу данных MongoDB, а идентификатор - это той же длина, что и идентификатор MongoDB.
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id String @id @default(uuid())
name String?
password String
email String @unique
avatar_url String?
emailCheckCode String? //邮箱验证唯一code
checked Boolean @default(true) //邮箱是否验证
posts Post[]
historys History[]
charts Chart[]
}
model Comment {
id String @id @default(uuid())
shapeId String?
name String?
replyId String?
time Int
content String
userId String
chartId String
chart Chart @relation(fields: [chartId], references: [id])
}
model Chart {
id String @id @default(uuid())
title String
deleted Boolean @default(false)
elements Json
page Json
theme Json?
ownerId String
owner User @relation(fields: [ownerId], references: [id])
historys History[]
comments Comment[]
createTime DateTime @default(now()) @db.Timestamp
lastModify DateTime @default(now()) @db.Timestamp
}
model History {
id String @id @default(uuid())
title String
remark String
elements Json
page Json
theme Json?
userId String
user User @relation(fields: [userId], references: [id])
chartId String
chart Chart @relation(fields: [chartId], references: [id])
createTime DateTime @default(now()) @db.Timestamp
}
Затем есть таблица истории, история «один ко многим», «одна картинка ко многим», после каждой операции обновляются текущие данные, а затем вставляется таблица истории.
В целом реализовать не сложно.
развертывать
Учащиеся, которые хотят развернуться, могут переехатьgithub, в котором есть этапы развертывания записи.
TODO
Конечно, есть еще некоторые более сложные, которые не были реализованы, такие как:
- Одновременное редактирование нескольких человек через Websocket
- Файл загружен
- создать миниатюру
- Отправить страницу
Суммировать
- ProcessOn не выполняет обфускацию кода.Для внешнего интерфейса вы можете форматировать код и изменять его напрямую.
- Внешний интерфейс Js очень важен, ProcessOn не использует другие фреймворки, при использовании
jqueryа такжеdivБлок-схема реализована и не застревает.Я использовал реакцию, чтобы написать аналогичную диаграмму топологии раньше, но она гораздо менее гладкая и менее понятная для пользователя. - Студенты, которые не плохие деньги, я все еще надеюсь, что все поддержат подлинную версию.
наконец
В этой статье записаны основные этапы реализации, но для некоторых подробностей есть и некоторые специальные операции кода, которые не были записаны.Надеюсь, что студенты, которым это нравится, поставят лайк и поставят маленькую звездочку✨, а статей может быть больше опубликовано в будущем
Я надеюсь, что эта статья будет вам полезна. Вы также можете обратиться к моим предыдущим статьям или поделиться своими мыслями и опытом в области комментариев. Добро пожаловать, чтобы вместе изучить внешний интерфейс.