Sabtu 23 November 2019

This commit is contained in:
Damillora 2019-11-23 15:58:59 +07:00
parent fb35b2f5fb
commit a28b0eea95
12 changed files with 1981 additions and 11 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
node_modules

View File

@ -0,0 +1,221 @@
@tailwind base;
html {
@apply min-h-screen;
}
body {
@apply min-h-screen;
}
.input-group {
@apply py-2;
}
.input-group label {
@apply text-lg;
}
input[type=text], input[type=password] {
@apply border-gray-500 border px-2 py-2 rounded w-full bg-white;
}
select {
@apply border-gray-500 border px-2 py-2 rounded bg-white text-yuika-blue-500 appearance-none;
}
textarea {
@apply border-gray-500 border px-2 py-2 rounded w-full bg-white;
}
button {
@apply rounded px-2 py-2 text-white bg-yuika-blue-500;
}
h1 {
@apply text-4xl;
}
h2 {
@apply text-3xl;
}
h3 {
@apply text-2xl;
}
h4 {
@apply text-xl;
}
h5 {
@apply text-lg;
}
h6 {
@apply text-base;
}
hr {
@apply my-4;
}
code {
@apply bg-gray-200 border border-gray-500 py-1 px-2 text-yuika-blue-700;
}
dt {
@apply float-left mr-4 text-lg text-yuika-blue-700;
}
dd {
@apply text-base text-gray-700;
}
ol {
@apply list-decimal;
}
ul {
@apply list-disc;
}
td, th {
@apply border border-gray-500 py-2 px-2;
}
th {
@apply bg-gray-200 text-yuika-blue-700;
}
pre {
@apply bg-gray-200 py-2 px-2 border-gray-500;
}
pre code {
@apply border-none;
}
blockquote {
@apply block pl-8 border-l-4 border-yuika-blue-500 my-2;
}
a {
@apply text-yuika-blue-500;
}
header {
@apply h-16 w-full z-10 flex flex-row justify-start items-center px-4 text-white text-lg bg-yuika-blue-500;
min-height: 3rem;
}
.header-link {
@apply px-2 text-white;
}
footer {
@apply h-16 w-full z-10 flex flex-row justify-start items-center px-4 text-white text-lg bg-yuika-blue-500;
min-height: 3rem;
}
main {
@apply mx-auto w-full py-4 px-4;
min-height: calc(100vh - 8rem);
}
.header-middle {
@apply flex-grow;
}
.form-title {
@apply text-4xl text-center mb-4;
}
#forumbrowser {
@apply flex flex-row justify-start items-start;
}
.forumbrowser-left {
@apply flex flex-col mx-1;
}
.forumbrowser-item {
@apply px-2 border-r-2 border-white text-yuika-blue-500 cursor-pointer flex flex-col justify-center items-end h-8 transition-colors;
}
.forumbrowser-item.selected {
@apply border-yuika-blue-500 bg-yuika-blue-100 transition-colors;
}
.forumbrowser-item:hover {
@apply bg-yuika-blue-100 transition-colors;
}
.forumbrowser-right-table {
@apply flex flex-col flex-grow;
}
.forumbrowser-right {
@apply text-left py-2 px-1 flex flex-row h-8 border-white border-l-2 text-yuika-blue-500 cursor-pointer transition-colors;
}
.forumbrowser-right.selected {
@apply border-yuika-blue-500 bg-yuika-blue-100 transition-colors;
}
.forumbrowser-right:hover {
@apply bg-yuika-blue-100 transition-colors;
}
.forumbrowser-right-col {
@apply px-2 flex flex-col justify-center items-start;
}
.forum-post {
@apply border my-4 border-yuika-blue-500;
}
.forum-post-title {
@apply h-12 w-full text-white py-2 px-2 flex flex-row justify-start items-center flex flex-row bg-yuika-blue-500;
}
.forum-post-content {
@apply flex flex-row py-2 px-2;
min-height: 200px;
}
.forum-post-user {
@apply w-1/6 py-2 px-4 flex flex-col;
}
.forum-post-user-detail {
@apply flex flex-col justify-center;
}
.forum-post-user-detail img{
@apply rounded-full w-full;
}
.forum-post-text {
@apply w-5/6 py-2 px-2;
}
.forum-post-profile {
@apply w-5/6 py-2 px-2 flex flex-col;
}
.forum-post-profile-detail {
@apply flex flex-row;
}
.forum-post-profile-about {
min-height: 100px;
}
.forum-post-footer {
@apply h-12 w-full py-2 flex flex-row justify-start items-center;
}
.forum-post-footer-left {
@apply px-2;
}
.forum-post-footer-mid {
@apply flex-grow px-2;
}
.forum-post-footer-right {
@apply px-2;
}
.forum-post-footer-action {
@apply px-4 cursor-pointer border-b-2 border-white py-2;
}
.forum-post-footer-action:hover {
@apply bg-gray-200 border-yuika-blue-500 transition-colors;
}
.forum-post-footer-action.danger:hover{
@apply bg-red-200 border-red-500 text-red-700 transition-colors;
}
.lock-message {
@apply bg-red-200 py-4 px-4 border-red-500 border my-2 mx-2;
}
#forumbrowser {
@apply flex flex-row my-4;
}
#editor-poster {
@apply h-full;
}
@tailwind components;
@tailwind utilities;

View File

@ -28,4 +28,10 @@ class Post extends DBModel {
$id = Thread::find($this->thread_id)->main_post->id;
return ($id == $this->id);
}
public function is_favorited() {
$query = new QueryBuilder();
$query = $query->where('user_id',ServiceContainer::Authentication()->user()->id)->where('post_id',$this->id);
$is_fav = UserFavorite::selectOne($query);
return isset($is_fav);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -28,7 +28,12 @@
</div>
<div class="forum-post-footer-mid">
<select name="duration">
<option value="+ 1 hour">1 hours</option>
<option value="+ 6 hour">6 hours</option>
<option value="+ 24 hour">24 hours</option>
<option value="+ 72 hour">3 days</option>
<option value="+ 7 day">1 week</option>
<option value="+ 30 day">1 month</option>
<option value="2099-12-31 23:59">indefinitely</option>
</select>
<select name="action">

View File

@ -63,16 +63,16 @@ This thread has been locked for <?php echo $thread->lock()->duration ?>. See the
<?php if($post->user_id == $auth->user()->id) { ?>
<a class="forum-post-footer-action" @click="reply(<?php echo $post->id ?>)">Reply</a>
<a class="forum-post-footer-action" @click="edit(<?php echo $post->id ?>)">Edit</a>
<a class="forum-post-footer-action" @click="delete_post(<?php echo $post->id ?>)">Delete</a>
<a class="forum-post-footer-action danger" @click="delete_post(<?php echo $post->id ?>)">Delete</a>
<?php } else { ?>
<a class="forum-post-footer-action" @click="favorite(<?php echo $post->id ?>)">Favorite</a>
<a class="forum-post-footer-action" @click="favorite(<?php echo $post->id ?>)"><?php echo $post->is_favorited() ? 'Unfavorite' : 'Favorite' ?></a>
<a class="forum-post-footer-action" @click="reply(<?php echo $post->id ?>)">Reply</a>
<?php if(!$auth->user()->didIModerateThis($thread->category()->id) && $auth->user()->is_confirmed ) { ?>
<a class="forum-post-footer-action" @click="report(<?php echo $post->id ?>)">Report Abuse</a>
<a class="forum-post-footer-action danger" @click="report(<?php echo $post->id ?>)">Report Abuse</a>
<?php } ?>
<?php } ?>
<?php if($auth->user()->didIModerateThis($thread->category()->id) || $auth->user()->is_admin ) { ?>
<a class="forum-post-footer-action" @click="moderate(<?php echo $post->id ?>)">Moderate</a>
<a class="forum-post-footer-action danger" @click="moderate(<?php echo $post->id ?>)">Moderate</a>
<?php } ?>
<?php } ?>
</div>

View File

@ -1,13 +1,13 @@
# Metaforums
An online web-based discussion forum application
## How to set up
1. Make sure mod_rewrite is enabled on Apache.
2. Create a MySQL / MariaDB database, and import Metaforums' schema (`schema.sql`) into the database.
3. Modify backend/config.php and adjust the configuration as needed.
4. Point the browser to `localhost`
3. Modify config.php and adjust the configuration as needed.
4. Put all project files in the DocumentRoot (this application cannot be in a subfolder)
5. Point the browser to `localhost` or wherever the application is located.
## Sample database data
@ -40,11 +40,20 @@ An online web-based discussion forum application
### Post sources
"A Full Style Test" is courtesy of [Ghost's demo blog](https://demo.ghost.io/style-test/), used to test styling.
## Project Structure
- index.php
The main handler of backend functions. Handles routing, loading of Application services, and response handling.
- autoload.php
Autoload is a PHP OOP feature that allows automatic loading of classes using the use keyword. This file provides
a simple autoloading function.
- routes.php
This files lists all routes used by the application
- config.php
This file contains application configuration.
- Application/
Application contains classes that are the core of the application itself
- Assets/
@ -53,14 +62,24 @@ An online web-based discussion forum application
Controllers contain controllers that return HTTP responses
- Foundations/
Foundations are helper classes for various functions, such as an SQL query builder, and base model implementation;
- DateHelper
Contains date facilities.
- MailBuilder
Contains a mail composing class.
- Model
The base model implementation. Contains common code for all models.
- SQLHelper
Contains SQL escaping facilities.
- QueryBuilder
The SQL query builder.
- Model
The base model implementation. Contains common code for all models.
- HTTP
HTTP contains a number of abstractions for HTTP, such as Request class.
- Request
Abstracts away PHP request parameters.
- Response
Abstracts away responses, including status code, views, and JSON data.
- File
Handles uploaded files
- Models/
Models contain database models.
- Services/
@ -81,6 +100,8 @@ An online web-based discussion forum application
Provides view rendering facilities
- Static/
Static contains static files served directly by the application. For example, this contains built CSS.
- Storage/
This is where application storage are saved.
- Views/
Views contains all views used by the application
@ -102,6 +123,18 @@ Here, jQuery is mainly used for its AJAX functionality.
[Project Website](https://jquery.com)
### TinyMCE
TinyMCE is a JavaScrip text editor.
[Project Website](https://www.tiny.cloud)
### tailwindcss-transitions
Tailwind CSS plugin to generate transition utilities
[Project Website](https://github.com/benface/tailwindcss-transitions)
## CSS Frameworks and Styles used
### Tailwind

2
build_css.sh Executable file
View File

@ -0,0 +1,2 @@
#!/bin/bash
npx tailwind build Application/Assets/metaforums.css -o Application/Static/css/metaforums.css

6
package.json Normal file
View File

@ -0,0 +1,6 @@
{
"dependencies": {
"tailwindcss": "^1.1.3",
"tailwindcss-transitions": "^2.1.0"
}
}

157
schema.sql Normal file
View File

@ -0,0 +1,157 @@
-- Adminer 4.7.5 MySQL dump
SET NAMES utf8;
SET time_zone = '+00:00';
SET NAMES utf8mb4;
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_id` int(11) NOT NULL,
`category_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `group_id` (`group_id`),
CONSTRAINT `category_ibfk_1` FOREIGN KEY (`group_id`) REFERENCES `group` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `moderatorcategory` (
`user_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
PRIMARY KEY (`user_id`,`category_id`),
KEY `category_id` (`category_id`),
CONSTRAINT `moderatorcategory_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
CONSTRAINT `moderatorcategory_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`thread_id` int(11) DEFAULT NULL,
`user_id` int(11) NOT NULL,
`title` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`post` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
`updated_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
PRIMARY KEY (`id`),
KEY `thread_id` (`thread_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `post_ibfk_1` FOREIGN KEY (`thread_id`) REFERENCES `thread` (`id`),
CONSTRAINT `post_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `thread` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`category_id` int(11) NOT NULL,
`title` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`author` int(11) NOT NULL,
`view_count` int(11) NOT NULL DEFAULT 0,
`lock_moderator` int(11) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `author` (`author`),
KEY `category_id` (`category_id`),
KEY `lock_moderator` (`lock_moderator`),
CONSTRAINT `thread_ibfk_1` FOREIGN KEY (`author`) REFERENCES `user` (`id`),
CONSTRAINT `thread_ibfk_2` FOREIGN KEY (`lock_moderator`) REFERENCES `user` (`id`),
CONSTRAINT `thread_ibfk_3` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`),
CONSTRAINT `thread_ibfk_4` FOREIGN KEY (`lock_moderator`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`about` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`email_visible` tinyint(1) NOT NULL,
`avatar_path` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`role` int(11) NOT NULL,
`is_confirmed` tinyint(1) NOT NULL,
`is_deactivated` tinyint(1) NOT NULL DEFAULT 0,
`last_login` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
`logged_in` tinyint(1) NOT NULL DEFAULT 0,
`created_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
`updated_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `useraction` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`category_id` int(11) DEFAULT NULL,
`thread_id` int(11) DEFAULT NULL,
`action_type` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`reason` varchar(300) COLLATE utf8mb4_unicode_ci NOT NULL,
`action_at` datetime NOT NULL,
`expired_at` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `category_id` (`category_id`),
KEY `thread_id` (`thread_id`),
CONSTRAINT `useraction_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
CONSTRAINT `useraction_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`),
CONSTRAINT `useraction_ibfk_3` FOREIGN KEY (`thread_id`) REFERENCES `thread` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `userchange` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`action_type` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`confirm_key` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`data` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`best_before` datetime NOT NULL,
`is_confirmed` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `confirm_key` (`confirm_key`),
CONSTRAINT `userchange_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `userconfirmation` (
`confirm_key` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`user_id` int(11) NOT NULL,
`best_before` datetime NOT NULL,
PRIMARY KEY (`confirm_key`),
KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `userfavorite` (
`post_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
KEY `post_id` (`post_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `userfavorite_ibfk_1` FOREIGN KEY (`post_id`) REFERENCES `post` (`id`),
CONSTRAINT `userfavorite_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `userreport` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`post_id` int(11) NOT NULL,
`reason` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`report_date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `post_id` (`post_id`),
CONSTRAINT `userreport_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
CONSTRAINT `userreport_ibfk_2` FOREIGN KEY (`post_id`) REFERENCES `post` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 2019-11-20 20:22:32

33
tailwind.config.js Normal file
View File

@ -0,0 +1,33 @@
module.exports = {
theme: {
transitionProperty: {
'none': 'none',
'all': 'all',
'color': 'color',
'bg': 'background-color',
'border': 'border-color',
'colors': ['color', 'background-color', 'border-color'],
'opacity': 'opacity',
'transform': 'transform',
},
extend: {
colors: {
'yuika-blue': {
'100': '#C6E7F8',
'200': '#9FD3F0',
'300': '#7BBEE5',
'400': '#5AA7D7',
'500': '#3B90C6',
'600': '#2E72AA',
'700': '#22558C',
'800': '#173B6C',
'900': '#0E254C',
}
},
}
},
variants: {},
plugins: [
require('tailwindcss-transitions')(),
],
}

372
yarn.lock Normal file
View File

@ -0,0 +1,372 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
dependencies:
color-convert "^1.9.0"
autoprefixer@^9.4.5:
version "9.7.2"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.2.tgz#26cf729fbb709323b40171a874304884dcceffed"
integrity sha512-LCAfcdej1182uVvPOZnytbq61AhnOZ/4JelDaJGDeNwewyU1AMaNthcHsyz1NRjTmd2FkurMckLWfkHg3Z//KA==
dependencies:
browserslist "^4.7.3"
caniuse-lite "^1.0.30001010"
chalk "^2.4.2"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
postcss "^7.0.23"
postcss-value-parser "^4.0.2"
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
browserslist@^4.7.3:
version "4.7.3"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.3.tgz#02341f162b6bcc1e1028e30624815d4924442dc3"
integrity sha512-jWvmhqYpx+9EZm/FxcZSbUZyDEvDTLDi3nSAKbzEkyWvtI0mNSmUosey+5awDW1RUlrgXbQb5A6qY1xQH9U6MQ==
dependencies:
caniuse-lite "^1.0.30001010"
electron-to-chromium "^1.3.306"
node-releases "^1.1.40"
bytes@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
camelcase-css@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
caniuse-lite@^1.0.30001010:
version "1.0.30001011"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001011.tgz#0d6c4549c78c4a800bb043a83ca0cbe0aee6c6e1"
integrity sha512-h+Eqyn/YA6o6ZTqpS86PyRmNWOs1r54EBDcd2NTwwfsXQ8re1B38SnB+p2RKF8OUsyEIjeDU8XGec1RGO/wYCg==
chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
dependencies:
color-name "1.1.3"
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
css-unit-converter@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996"
integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=
cssesc@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
electron-to-chromium@^1.3.306:
version "1.3.311"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.311.tgz#73baa361e2b1f44b7b4f1a443aaa1372f8074ebb"
integrity sha512-7GH6RKCzziLzJ9ejmbiBEdzHZsc6C3eRpav14dmRfTWMpNgMqpP1ukw/FU/Le2fR+ep642naq7a23xNdmh2s+A==
escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
fs-extra@^8.0.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^4.0.0"
universalify "^0.1.0"
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
glob@^7.1.2:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
version "4.2.3"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
indexes-of@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
dependencies:
once "^1.3.0"
wrappy "1"
inherits@2:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
jsonfile@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
optionalDependencies:
graceful-fs "^4.1.6"
lodash.toarray@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561"
integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE=
lodash@^4.17.11, lodash@^4.17.15:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
dependencies:
brace-expansion "^1.1.7"
node-emoji@^1.8.1:
version "1.10.0"
resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da"
integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==
dependencies:
lodash.toarray "^4.4.0"
node-releases@^1.1.40:
version "1.1.41"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.41.tgz#57674a82a37f812d18e3b26118aefaf53a00afed"
integrity sha512-+IctMa7wIs8Cfsa8iYzeaLTFwv5Y4r5jZud+4AnfymzeEXKBCavFX0KBgzVaPVqf0ywa6PrO8/b+bPqdwjGBSg==
dependencies:
semver "^6.3.0"
normalize-range@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
normalize.css@^8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3"
integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==
num2fraction@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
once@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
dependencies:
wrappy "1"
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
postcss-functions@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e"
integrity sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=
dependencies:
glob "^7.1.2"
object-assign "^4.1.1"
postcss "^6.0.9"
postcss-value-parser "^3.3.0"
postcss-js@^2.0.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-2.0.3.tgz#a96f0f23ff3d08cec7dc5b11bf11c5f8077cdab9"
integrity sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w==
dependencies:
camelcase-css "^2.0.1"
postcss "^7.0.18"
postcss-nested@^4.1.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-4.2.1.tgz#4bc2e5b35e3b1e481ff81e23b700da7f82a8b248"
integrity sha512-AMayXX8tS0HCp4O4lolp4ygj9wBn32DJWXvG6gCv+ZvJrEa00GUxJcJEEzMh87BIe6FrWdYkpR2cuyqHKrxmXw==
dependencies:
postcss "^7.0.21"
postcss-selector-parser "^6.0.2"
postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c"
integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==
dependencies:
cssesc "^3.0.0"
indexes-of "^1.0.1"
uniq "^1.0.1"
postcss-value-parser@^3.3.0:
version "3.3.1"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
postcss-value-parser@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9"
integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==
postcss@^6.0.9:
version "6.0.23"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
dependencies:
chalk "^2.4.1"
source-map "^0.6.1"
supports-color "^5.4.0"
postcss@^7.0.11, postcss@^7.0.18, postcss@^7.0.21, postcss@^7.0.23:
version "7.0.23"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.23.tgz#9f9759fad661b15964f3cfc3140f66f1e05eadc1"
integrity sha512-hOlMf3ouRIFXD+j2VJecwssTwbvsPGJVMzupptg+85WA+i7MwyrydmQAgY3R+m0Bc0exunhbJmijy8u8+vufuQ==
dependencies:
chalk "^2.4.2"
source-map "^0.6.1"
supports-color "^6.1.0"
pretty-hrtime@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=
reduce-css-calc@^2.1.6:
version "2.1.7"
resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.7.tgz#1ace2e02c286d78abcd01fd92bfe8097ab0602c2"
integrity sha512-fDnlZ+AybAS3C7Q9xDq5y8A2z+lT63zLbynew/lur/IR24OQF5x98tfNwf79mzEdfywZ0a2wpM860FhFfMxZlA==
dependencies:
css-unit-converter "^1.1.1"
postcss-value-parser "^3.3.0"
semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
source-map@^0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
supports-color@^5.3.0, supports-color@^5.4.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
dependencies:
has-flag "^3.0.0"
supports-color@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
dependencies:
has-flag "^3.0.0"
tailwindcss-transitions@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/tailwindcss-transitions/-/tailwindcss-transitions-2.1.0.tgz#54ca6c293a197300c5eb1ab3775dc29f083432f1"
integrity sha512-WafCC+ujZk2rUECdBoFeF8lKTmrrpNudrHxSHNikYfaYyVR7BRRqpB2n49/wxzg8/YWy8OK42MvQnFuJBb2yxw==
dependencies:
lodash "^4.17.15"
tailwindcss@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-1.1.3.tgz#ad154f78e1e44060e32e3ed44b27287c2be126a6"
integrity sha512-8sa/QO+blnu3WXUylsgvYZlUbBpVH36QeGuZxgSGqp1dF3g4AGe1azt8FsO8i8Hfe9Oyvwhx3iSjRDak3nngeQ==
dependencies:
autoprefixer "^9.4.5"
bytes "^3.0.0"
chalk "^2.4.1"
fs-extra "^8.0.0"
lodash "^4.17.11"
node-emoji "^1.8.1"
normalize.css "^8.0.1"
postcss "^7.0.11"
postcss-functions "^3.0.0"
postcss-js "^2.0.0"
postcss-nested "^4.1.1"
postcss-selector-parser "^6.0.0"
pretty-hrtime "^1.0.3"
reduce-css-calc "^2.1.6"
uniq@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=