Compare commits
26 Commits
df88bf1197
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8013cc831 | ||
|
|
2ff71ac8da | ||
|
|
b22a732d0e | ||
|
|
f3bf64050d | ||
|
|
757d02f090 | ||
|
|
fb592f7af0 | ||
|
|
e00e32dd81 | ||
|
|
6ffb5d6df4 | ||
|
|
5ef903010c | ||
|
|
1759b09aec | ||
|
|
2defe8a4bd | ||
|
|
4d60016ef4 | ||
|
|
bf51819cbc | ||
| 31b09b1ca3 | |||
|
|
a69ed2677a | ||
|
|
21ee170302 | ||
|
|
76fee9b57a | ||
|
|
c4af1d1808 | ||
|
|
bd28751013 | ||
|
|
9f6727d264 | ||
|
|
1206528e42 | ||
|
|
19dc4b5b64 | ||
|
|
95d5aa6992 | ||
|
|
468fb338f1 | ||
|
|
0ac29fd7d5 | ||
|
|
327600dacd |
4
.gitignore
vendored
@@ -1,4 +1,6 @@
|
||||
.vscode/
|
||||
__pycache__/
|
||||
db.sqlite3
|
||||
videos/
|
||||
channel_archiver/yt-dlp-archive.txt
|
||||
channel_archiver/UnusualVideos*
|
||||
channel_archiver/UnusualVideos*
|
||||
24
api/README.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# SearchAPI
|
||||
|
||||
## Search
|
||||
`GET /api/search/?param=value`
|
||||
|
||||
### Parameters
|
||||
| Param | Value |
|
||||
|-|-|
|
||||
| `q` | The search query string. |
|
||||
| `limit` | A limit on the number of objects to be returned. Default is 6. |
|
||||
|
||||
### Response
|
||||
```
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Video 1"
|
||||
},
|
||||
{...}
|
||||
]
|
||||
```
|
||||
|
||||
### Examples
|
||||
> `GET /api/search/?q=foo&limit=3` will return the first 3 videos with "foo" in their name.
|
||||
7
api/urls.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from django.urls import path, include
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path('', include('sage_stream.api.urls')),
|
||||
path('search/', views.searchAPI),
|
||||
]
|
||||
17
api/views.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from django.db.models import Q
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.decorators import api_view
|
||||
from core.models import Video
|
||||
from core.serializers import VideoSerializer
|
||||
|
||||
@api_view(['GET'])
|
||||
def searchAPI(request):
|
||||
q = request.GET.get('q', '')
|
||||
l = request.GET.get('limit', '6')
|
||||
try:
|
||||
l = int(l)
|
||||
videos = Video.objects.filter(Q(id__contains=q) | Q(name__contains=q))[:l]
|
||||
except:
|
||||
videos = Video.objects.filter(Q(id__contains=q) | Q(name__contains=q))
|
||||
serializer = VideoSerializer(videos, many=True)
|
||||
return Response(serializer.data)
|
||||
@@ -1,2 +1,4 @@
|
||||
# UnusualVideos
|
||||
https://www.youtube.com/channel/UCpnkp_D4FLPCiXOmDhoAeYA
|
||||
# UUM Archive
|
||||
https://www.youtube.com/@unusualvideos_archive
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
# Archive Settings
|
||||
--download-archive yt-dlp-archive.txt
|
||||
-a yt-dlp-channels.txt
|
||||
-f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'
|
||||
--write-description
|
||||
#-f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'
|
||||
--write-thumbnail
|
||||
--restrict-filenames
|
||||
|
||||
# Debug
|
||||
-v
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
from django.contrib import admin
|
||||
|
||||
|
||||
from .models import Video
|
||||
|
||||
@admin.register(Video)
|
||||
|
||||
7
core/serializers.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from rest_framework import serializers
|
||||
from .models import Video
|
||||
|
||||
class VideoSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Video
|
||||
fields = ['id', 'name']
|
||||
@@ -1,31 +1,20 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
{% block header %}About{% endblock %}
|
||||
{% block content %}
|
||||
{% block content %}
|
||||
<div class="row mb-3">
|
||||
|
||||
|
||||
<div class="col-12">
|
||||
<div class="card card-primary">
|
||||
<div class="card-body">
|
||||
<p>
|
||||
The Siebenhirten stands as a testament to the critical importance of preserving the knowledge and cultural artifacts of our society. In an age where digital information can be lost in the blink of an eye, the work of the Siebenhirten is nothing short of vital.
|
||||
|
||||
The Group's mission to archive the videos of UnusualVideos is not just a noble pursuit, but a necessary one. In the face of the ever-present threat of censorship, copyright claims, and technological obsolescence, it falls upon groups like Siebenhirten to safeguard the information that would otherwise be lost forever.
|
||||
|
||||
Their journey has been long and arduous, fraught with challenges and obstacles at every turn. But their unwavering dedication and tireless efforts have paid off in ways that cannot be overstated. Through their actions, they have ensured that future generations will have access to the knowledge and cultural artifacts that define our society today.
|
||||
|
||||
The Siebenhirten is not just a group of archivists, but guardians of our collective history. They have taken on the mantle of responsibility, understanding that the preservation of knowledge and cultural artifacts is essential to the survival of our species.
|
||||
|
||||
As we move forward into an uncertain future, it is essential that we continue to support the work of groups like the Siebenhirten. Their dedication to preserving the knowledge and culture of our society is not just admirable, but necessary. It is only through their efforts that we can hope to ensure that future generations have access to the information that defines us as a species.
|
||||
</p>
|
||||
<div class="col-12">
|
||||
<div class="card card-primary">
|
||||
<div class="card-body">
|
||||
<p>
|
||||
The Siebenhirten stands as a testament to the critical importance of preserving the knowledge and cultural artifacts of our society. In an age where digital information can be lost in the blink of an eye, the work of the Siebenhirten is nothing short of vital.
|
||||
The Group's mission to archive the videos of UnusualVideos is not just a noble pursuit, but a necessary one. In the face of the ever-present threat of censorship, copyright claims, and technological obsolescence, it falls upon groups like Siebenhirten to safeguard the information that would otherwise be lost forever.
|
||||
Their journey has been long and arduous, fraught with challenges and obstacles at every turn. But their unwavering dedication and tireless efforts have paid off in ways that cannot be overstated. Through their actions, they have ensured that future generations will have access to the knowledge and cultural artifacts that define our society today.
|
||||
The Siebenhirten is not just a group of archivists, but guardians of our collective history. They have taken on the mantle of responsibility, understanding that the preservation of knowledge and cultural artifacts is essential to the survival of our species.
|
||||
As we move forward into an uncertain future, it is essential that we continue to support the work of groups like the Siebenhirten. Their dedication to preserving the knowledge and culture of our society is not just admirable, but necessary. It is only through their efforts that we can hope to ensure that future generations have access to the information that defines us as a species.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,136 +1,140 @@
|
||||
{% load static %}
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>UnusualArchive</title>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>UnusualArchive</title>
|
||||
<link rel="stylesheet"
|
||||
href="{% static 'plugins/fontawesome-free/css/all.min.css' %}">
|
||||
<link rel="stylesheet"
|
||||
href="{% static 'plugins/icheck-bootstrap/icheck-bootstrap.min.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/adminlte.css' %}">
|
||||
<link rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
|
||||
<style>
|
||||
.card-img {
|
||||
aspect-ratio: 16 / 9;
|
||||
object-fit: cover;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="layout-top-nav" style="height: auto;">
|
||||
<div class="wrapper">
|
||||
<nav class="main-header navbar navbar-expand-md navbar-light navbar-white">
|
||||
<div class="container">
|
||||
<a href="/" class="navbar-brand">
|
||||
<img src="{% static 'img/ragnarok.jpg' %}"
|
||||
alt="Ragnarok"
|
||||
class="brand-image img-circle elevation-3"
|
||||
style="opacity: .8">
|
||||
<span class="brand-text font-weight-light">UnusualArchive</span>
|
||||
</a>
|
||||
<button class="navbar-toggler order-1"
|
||||
type="button"
|
||||
data-toggle="collapse"
|
||||
data-target="#navbarCollapse"
|
||||
aria-controls="navbarCollapse"
|
||||
aria-expanded="false"
|
||||
aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse order-3" id="navbarCollapse">
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item">
|
||||
<a href="/" class="nav-link">Explore</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/random" class="nav-link">Random</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/status" class="nav-link">Status</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/about" class="nav-link">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="float-right" style="width:100%">
|
||||
|
||||
<link rel="stylesheet" href="{% static 'plugins/fontawesome-free/css/all.min.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'plugins/icheck-bootstrap/icheck-bootstrap.min.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'dist/css/adminlte.css' %}">
|
||||
<form class="form-inline ml-0 ml-md-3 float-right" action="/search">
|
||||
<div class="input-group input-group-sm">
|
||||
<input class="form-control form-control-navbar" data-toggle="dropdown"
|
||||
type="search"
|
||||
placeholder="Search"
|
||||
aria-label="Search"
|
||||
autocomplete="off"
|
||||
id="search"
|
||||
name="q">
|
||||
<ul class="dropdown-menu" id="searchdropdown">
|
||||
<li><span class="dropdown-item-text">Nothing</span></li>
|
||||
</ul>
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-navbar" type="submit">
|
||||
<i class="fas fa-search"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
|
||||
|
||||
<link rel="stylesheet" href="{% static 'plugins/fontawesome-free/css/all.min.css' %}">
|
||||
</head>
|
||||
<body class="layout-top-nav" style="height: auto;">
|
||||
<div class="wrapper">
|
||||
|
||||
<nav class="main-header navbar navbar-expand-md navbar-light navbar-white">
|
||||
<div class="container">
|
||||
<a href="/" class="navbar-brand">
|
||||
<img src="{% static 'dist/img/ragnarok.jpg' %}" alt="Ragnarok" class="brand-image img-circle elevation-3" style="opacity: .8">
|
||||
<span class="brand-text font-weight-light">UnusualArchive</span>
|
||||
</a>
|
||||
<button class="navbar-toggler order-1" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse order-3" id="navbarCollapse">
|
||||
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item">
|
||||
<a href="/" class="nav-link">Explore</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/random" class="nav-link">Random</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/status" class="nav-link">Status</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/about" class="nav-link">About</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
<div class="float-right" style="width:100%">
|
||||
<form class="form-inline ml-0 ml-md-3 float-right">
|
||||
<div class="input-group input-group-sm">
|
||||
<input class="form-control form-control-navbar" type="search" placeholder="Search" aria-label="Search">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-navbar" type="submit">
|
||||
<i class="fas fa-search"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="content-wrapper" style="min-height: 1128px;">
|
||||
|
||||
<div class="content-header">
|
||||
<div class="container">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1 class="m-0">{% block header %}Explore{% endblock %}</h1>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="content">
|
||||
<div class="container">
|
||||
{% block content %}
|
||||
<div class="row mb-3">
|
||||
|
||||
{% for v in videos %}
|
||||
<div class="col-xs-6 col-md-4">
|
||||
<a href="/view/{{ v.id }}">
|
||||
|
||||
<div class="card mb-2 bg-gradient-dark">
|
||||
{% if v.thumbnail %}
|
||||
<img class="card-img-top" src="/media/{{v.thumbnail}}" alt="Dist Photo 1"style="max-width: 1280px; max-height: 720px;">
|
||||
{% else %}
|
||||
<img class="card-img-top" src="{% static 'dist/img/default.png' %}" alt="Dist Photo 1">
|
||||
{% endif %}
|
||||
<div class="card-img-overlay d-flex flex-column justify-content-end" style="background-color: rgba(0, 0, 0, 0.5);">
|
||||
<h5 class="card-title"><b>V{{ v.id }}</b></h5>
|
||||
<span>{{v.created_at}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<footer class="main-footer">
|
||||
|
||||
<div class="float-right d-none d-sm-inline">
|
||||
Für die Nachwelt.
|
||||
</div>
|
||||
|
||||
<strong>Copyright © 2023 Siebenhirten
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<script src="{% static 'plugins/jquery/jquery.min.js' %}"></script>
|
||||
<script src="{% static 'plugins/bootstrap/js/bootstrap.bundle.min.js' %}"></script>
|
||||
<script src="{% static 'dist/js/adminlte.min.js' %}"></script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="content-wrapper" style="min-height: 1128px;">
|
||||
<div class="content-header">
|
||||
<div class="container">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1 class="m-0">
|
||||
{% block header %}Explore{% endblock %}
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="container">
|
||||
{% block content %}
|
||||
<div class="row mb-3">
|
||||
{% for v in videos %}
|
||||
<div class="col-xs-6 col-md-4">
|
||||
<a href="/view/{{ v.id }}">
|
||||
<div class="card mb-2 bg-gradient-dark">
|
||||
{% if v.thumbnail %}
|
||||
<img class="card-img"
|
||||
src="/media/{{ v.thumbnail }}"
|
||||
alt="Dist Photo 1"
|
||||
style="max-width: 1280px;
|
||||
max-height: 720px">
|
||||
{% else %}
|
||||
<img class="card-img"
|
||||
src="{% static 'img/default.png' %}"
|
||||
alt="Dist Photo 1">
|
||||
{% endif %}
|
||||
<div class="card-img-overlay d-flex flex-column justify-content-end"
|
||||
style="background-color: rgba(0, 0, 0, 0.5)">
|
||||
<h5 class="card-title">
|
||||
<b>V{{ v.id }}</b>
|
||||
</h5>
|
||||
<span>{{ v.created_at }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="main-footer">
|
||||
<div class="float-right d-none d-sm-inline">Für die Nachwelt.</div>
|
||||
<strong>Copyright © 2023 Siebenhirten
|
||||
</footer>
|
||||
</div>
|
||||
<script src="{% static 'plugins/jquery/jquery.min.js' %}"></script>
|
||||
<script src="{% static 'plugins/bootstrap/js/bootstrap.bundle.min.js' %}"></script>
|
||||
<script src="{% static 'js/adminlte.min.js' %}"></script>
|
||||
<script src="{% static 'js/searchsuggestions.js' %}"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,48 +1,41 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block header %}Status{% endblock %}
|
||||
{% block content %}
|
||||
{% block content %}
|
||||
<div class="row mb-3">
|
||||
|
||||
|
||||
<div class="col-12">
|
||||
<div class="card card-primary">
|
||||
<div class="card-body">
|
||||
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<a href="/media/{{ v.file }}">
|
||||
<tr class="clickable-row" data-href="/media/{{ v.file }}">
|
||||
<th style="width: 10px">#</th>
|
||||
<th style="text-align:right">Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for v in video_list %}
|
||||
<tr>
|
||||
<td><b>V{{v.id}}</b></td>
|
||||
{% if v.file %}
|
||||
<td style="text-align:right"><i class="far fa-check-circle" style="color:green"></i></td>
|
||||
{% else %}
|
||||
<td style="text-align:right"><i class="far fa-times-circle" style="color:red"></i></td>
|
||||
{% endif %}
|
||||
|
||||
</tr>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
<div class="col-12">
|
||||
<div class="card card-primary">
|
||||
<div class="card-body">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<a href="/media/{{ v.file }}">
|
||||
<tr class="clickable-row" data-href="/media/{{ v.file }}">
|
||||
<th style="width: 10px">#</th>
|
||||
<th style="text-align:right">Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for v in video_list %}
|
||||
<tr>
|
||||
<td>
|
||||
<b>V{{ v.id }}</b>
|
||||
</td>
|
||||
{% if v.file %}
|
||||
<td style="text-align:right">
|
||||
<i class="far fa-check-circle" style="color:green"></i>
|
||||
</td>
|
||||
{% else %}
|
||||
<td style="text-align:right">
|
||||
<i class="far fa-times-circle" style="color:red"></i>
|
||||
</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,19 +1,13 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
{% block header %}UNUSUAL MEMES V{{video.id}}{% endblock %}
|
||||
{% block content %}
|
||||
{% block header %}UNUSUAL MEMES V{{ video.id }}{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row mb-3">
|
||||
|
||||
<div class="col-12 justify-content-center">
|
||||
<video width="100%" height="100%" controls autoplay>
|
||||
<source src="/api/stream/?path=/media//{{ video.file }}" type="video/mp4">
|
||||
<p>Your browser does not support the video tag.</p>
|
||||
</video>
|
||||
|
||||
|
||||
<div class="col-12 justify-content-center">
|
||||
<video width="100%" height="100%" controls autoplay>
|
||||
<source src="/api/stream/?path=/media//{{ video.file }}" type="video/mp4">
|
||||
<p>Your browser does not support the video tag.</p>
|
||||
</video>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
from django.urls import path
|
||||
from . import views
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
path('', views.core, name='core'),
|
||||
path('status/', views.status, name='status'),
|
||||
path('about/', views.about, name='about'),
|
||||
path('random/', views.random, name='random'),
|
||||
path('search/', views.search, name='search'),
|
||||
path('status/', views.status, name='status'),
|
||||
path('view/<int:id>', views.view, name='view'),
|
||||
]
|
||||
]
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
from django.db.models import Q
|
||||
from django.shortcuts import render
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import redirect
|
||||
from core.models import Video
|
||||
import random
|
||||
|
||||
# Create your views here.
|
||||
|
||||
@@ -11,17 +9,24 @@ def core(request):
|
||||
videos = Video.objects.all()
|
||||
return render(request, 'base.html', {'videos': videos[::-1]})
|
||||
|
||||
def about(request):
|
||||
return render(request, 'about.html')
|
||||
|
||||
def random(request):
|
||||
videos = Video.objects.all().order_by("?")
|
||||
ran = videos.first();
|
||||
ran = videos.first()
|
||||
return redirect('/view/'+str(ran.id))
|
||||
|
||||
def search(request):
|
||||
q = request.GET.get('q', '')
|
||||
videos = Video.objects.filter(Q(id__contains=q) | Q(name__contains=q))
|
||||
return render(request, 'base.html', {'videos': videos})
|
||||
|
||||
def status(request):
|
||||
highest_id = Video.objects.order_by('-id').first().id
|
||||
video_list = []
|
||||
|
||||
for i in range(highest_id + 1):
|
||||
for i in range(1, highest_id + 1):
|
||||
try:
|
||||
video = Video.objects.get(id=i)
|
||||
video_list.append(video)
|
||||
@@ -34,6 +39,3 @@ def view(request, id):
|
||||
vid = Video.objects.get(id = id)
|
||||
if vid:
|
||||
return render(request, "view.html", {'video': vid})
|
||||
|
||||
def about(request):
|
||||
return render(request, 'about.html')
|
||||
|
||||
BIN
db.sqlite3
18
import.py
@@ -4,6 +4,7 @@ import sys
|
||||
import fnmatch
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
sys.path.append('./')
|
||||
os.environ['DJANGO_SETTINGS_MODULE'] = 'ragnarok.settings'
|
||||
import django
|
||||
@@ -35,9 +36,9 @@ def find_image_file(name_pattern, folder):
|
||||
return os.path.join(root, filename)
|
||||
return None
|
||||
|
||||
|
||||
for filename in os.listdir(folder_path):
|
||||
if filename.endswith('.mp4'):
|
||||
files = os.listdir(folder_path)
|
||||
for filename in files:
|
||||
if filename.endswith('.mp4'):
|
||||
# Create a new Video object
|
||||
video = Video()
|
||||
id = extract_version(filename)
|
||||
@@ -53,11 +54,12 @@ for filename in os.listdir(folder_path):
|
||||
# Open the file and save it to the Video object
|
||||
with open(os.path.join(folder_path, filename), 'rb') as f:
|
||||
video.file.save(filename, f)
|
||||
|
||||
#filepath = find_image_file("V"+str(id), folder_path)
|
||||
with open(filepath, 'rb') as f:
|
||||
video.thumbnail.save(filename, f)
|
||||
|
||||
index = [idx for idx, s in enumerate(files) if bool(re.search('V'+str(video.id)+'( |_)', s)) and '.webp' in s]
|
||||
if not index:
|
||||
continue
|
||||
index = index[0]
|
||||
with open(os.path.join(folder_path, files[index]), 'rb') as f:
|
||||
video.thumbnail.save(files[index], f)
|
||||
# Save the Video object to the database
|
||||
video.save()
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
from django.core.management.base import BaseCommand
|
||||
from ragnarok.models import Video
|
||||
|
||||
class Command(BaseCommand):
|
||||
args = '<foo bar ...>'
|
||||
help = 'our help string comes here'
|
||||
@@ -22,9 +22,7 @@ urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
path('auth/', include('django.contrib.auth.urls')),
|
||||
path('', include('core.urls')),
|
||||
path('/', include('core.urls')),
|
||||
path('status/', include('core.urls')),
|
||||
path('api/', include('sage_stream.api.urls')),
|
||||
path('api/', include('api.urls')),
|
||||
]
|
||||
|
||||
if settings.DEBUG:
|
||||
|
||||
|
Before Width: | Height: | Size: 7.0 MiB |
|
Before Width: | Height: | Size: 170 KiB |
12194
static/dist/css/alt/adminlte.components.css
vendored
29991
static/dist/css/alt/adminlte.core.css
vendored
1
static/dist/css/alt/adminlte.core.css.map
vendored
13
static/dist/css/alt/adminlte.core.min.css
vendored
1756
static/dist/css/alt/adminlte.extra-components.css
vendored
36864
static/dist/css/alt/adminlte.light.css
vendored
1
static/dist/css/alt/adminlte.light.css.map
vendored
18
static/dist/css/alt/adminlte.light.min.css
vendored
960
static/dist/css/alt/adminlte.pages.css
vendored
@@ -1,960 +0,0 @@
|
||||
/*!
|
||||
* AdminLTE v3.2.0
|
||||
* Only Pages
|
||||
* Author: Colorlib
|
||||
* Website: AdminLTE.io <https://adminlte.io>
|
||||
* License: Open source - MIT <https://opensource.org/licenses/MIT>
|
||||
*/
|
||||
.close, .mailbox-attachment-close {
|
||||
float: right;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
line-height: 1;
|
||||
color: #000;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
.close:hover, .mailbox-attachment-close:hover {
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.close:not(:disabled):not(.disabled):hover, .mailbox-attachment-close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus, .mailbox-attachment-close:not(:disabled):not(.disabled):focus {
|
||||
opacity: .75;
|
||||
}
|
||||
|
||||
button.close, button.mailbox-attachment-close {
|
||||
padding: 0;
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
a.close.disabled, a.disabled.mailbox-attachment-close {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@-webkit-keyframes flipInX {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transition-timing-function: ease-in;
|
||||
opacity: 0;
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transition-timing-function: ease-in;
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
opacity: 1;
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px);
|
||||
transform: perspective(400px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes flipInX {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transition-timing-function: ease-in;
|
||||
opacity: 0;
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transition-timing-function: ease-in;
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
opacity: 1;
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px);
|
||||
transform: perspective(400px);
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes fadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes fadeOut {
|
||||
from {
|
||||
opacity: 1;
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes fadeOut {
|
||||
from {
|
||||
opacity: 1;
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes shake {
|
||||
0% {
|
||||
-webkit-transform: translate(2px, 1px) rotate(0deg);
|
||||
transform: translate(2px, 1px) rotate(0deg);
|
||||
}
|
||||
10% {
|
||||
-webkit-transform: translate(-1px, -2px) rotate(-2deg);
|
||||
transform: translate(-1px, -2px) rotate(-2deg);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: translate(-3px, 0) rotate(3deg);
|
||||
transform: translate(-3px, 0) rotate(3deg);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: translate(0, 2px) rotate(0deg);
|
||||
transform: translate(0, 2px) rotate(0deg);
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: translate(1px, -1px) rotate(1deg);
|
||||
transform: translate(1px, -1px) rotate(1deg);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(-1px, 2px) rotate(-1deg);
|
||||
transform: translate(-1px, 2px) rotate(-1deg);
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: translate(-3px, 1px) rotate(0deg);
|
||||
transform: translate(-3px, 1px) rotate(0deg);
|
||||
}
|
||||
70% {
|
||||
-webkit-transform: translate(2px, 1px) rotate(-2deg);
|
||||
transform: translate(2px, 1px) rotate(-2deg);
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: translate(-1px, -1px) rotate(4deg);
|
||||
transform: translate(-1px, -1px) rotate(4deg);
|
||||
}
|
||||
90% {
|
||||
-webkit-transform: translate(2px, 2px) rotate(0deg);
|
||||
transform: translate(2px, 2px) rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: translate(1px, -2px) rotate(-1deg);
|
||||
transform: translate(1px, -2px) rotate(-1deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes shake {
|
||||
0% {
|
||||
-webkit-transform: translate(2px, 1px) rotate(0deg);
|
||||
transform: translate(2px, 1px) rotate(0deg);
|
||||
}
|
||||
10% {
|
||||
-webkit-transform: translate(-1px, -2px) rotate(-2deg);
|
||||
transform: translate(-1px, -2px) rotate(-2deg);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: translate(-3px, 0) rotate(3deg);
|
||||
transform: translate(-3px, 0) rotate(3deg);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: translate(0, 2px) rotate(0deg);
|
||||
transform: translate(0, 2px) rotate(0deg);
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: translate(1px, -1px) rotate(1deg);
|
||||
transform: translate(1px, -1px) rotate(1deg);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(-1px, 2px) rotate(-1deg);
|
||||
transform: translate(-1px, 2px) rotate(-1deg);
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: translate(-3px, 1px) rotate(0deg);
|
||||
transform: translate(-3px, 1px) rotate(0deg);
|
||||
}
|
||||
70% {
|
||||
-webkit-transform: translate(2px, 1px) rotate(-2deg);
|
||||
transform: translate(2px, 1px) rotate(-2deg);
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: translate(-1px, -1px) rotate(4deg);
|
||||
transform: translate(-1px, -1px) rotate(4deg);
|
||||
}
|
||||
90% {
|
||||
-webkit-transform: translate(2px, 2px) rotate(0deg);
|
||||
transform: translate(2px, 2px) rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: translate(1px, -2px) rotate(-1deg);
|
||||
transform: translate(1px, -2px) rotate(-1deg);
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes wobble {
|
||||
0% {
|
||||
-webkit-transform: none;
|
||||
transform: none;
|
||||
}
|
||||
15% {
|
||||
-webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
|
||||
transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
|
||||
transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
|
||||
}
|
||||
45% {
|
||||
-webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
|
||||
transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
|
||||
transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
|
||||
transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: none;
|
||||
transform: none;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes wobble {
|
||||
0% {
|
||||
-webkit-transform: none;
|
||||
transform: none;
|
||||
}
|
||||
15% {
|
||||
-webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
|
||||
transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
|
||||
transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
|
||||
}
|
||||
45% {
|
||||
-webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
|
||||
transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
|
||||
transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
|
||||
transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: none;
|
||||
transform: none;
|
||||
}
|
||||
}
|
||||
|
||||
.mailbox-messages > .table {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.mailbox-controls {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.mailbox-controls.with-border {
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
|
||||
}
|
||||
|
||||
.mailbox-read-info {
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.mailbox-read-info h3 {
|
||||
font-size: 20px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.mailbox-read-info h5 {
|
||||
margin: 0;
|
||||
padding: 5px 0 0;
|
||||
}
|
||||
|
||||
.mailbox-read-time {
|
||||
color: #999;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.mailbox-read-message {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.mailbox-attachments {
|
||||
padding-left: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.mailbox-attachments li {
|
||||
border: 1px solid #eee;
|
||||
float: left;
|
||||
margin-bottom: 10px;
|
||||
margin-right: 10px;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.mailbox-attachment-name {
|
||||
color: #666;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.mailbox-attachment-icon,
|
||||
.mailbox-attachment-info,
|
||||
.mailbox-attachment-size {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.mailbox-attachment-info {
|
||||
background-color: #f8f9fa;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.mailbox-attachment-size {
|
||||
color: #999;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.mailbox-attachment-size > span {
|
||||
display: inline-block;
|
||||
padding-top: .75rem;
|
||||
}
|
||||
|
||||
.mailbox-attachment-icon {
|
||||
color: #666;
|
||||
font-size: 65px;
|
||||
max-height: 132.5px;
|
||||
padding: 20px 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.mailbox-attachment-icon.has-img {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.mailbox-attachment-icon.has-img > img {
|
||||
height: auto;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.lockscreen {
|
||||
background-color: #e9ecef;
|
||||
}
|
||||
|
||||
.lockscreen .lockscreen-name {
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.lockscreen-logo {
|
||||
font-size: 35px;
|
||||
font-weight: 300;
|
||||
margin-bottom: 25px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.lockscreen-logo a {
|
||||
color: #495057;
|
||||
}
|
||||
|
||||
.lockscreen-wrapper {
|
||||
margin: 0 auto;
|
||||
margin-top: 10%;
|
||||
max-width: 400px;
|
||||
}
|
||||
|
||||
.lockscreen-item {
|
||||
border-radius: 4px;
|
||||
background-color: #fff;
|
||||
margin: 10px auto 30px;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
width: 290px;
|
||||
}
|
||||
|
||||
.lockscreen-image {
|
||||
border-radius: 50%;
|
||||
background-color: #fff;
|
||||
left: -10px;
|
||||
padding: 5px;
|
||||
position: absolute;
|
||||
top: -25px;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.lockscreen-image > img {
|
||||
border-radius: 50%;
|
||||
height: 70px;
|
||||
width: 70px;
|
||||
}
|
||||
|
||||
.lockscreen-credentials {
|
||||
margin-left: 70px;
|
||||
}
|
||||
|
||||
.lockscreen-credentials .form-control {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.lockscreen-credentials .btn {
|
||||
background-color: #fff;
|
||||
border: 0;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
.lockscreen-footer {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.dark-mode .lockscreen-item {
|
||||
background-color: #343a40;
|
||||
}
|
||||
|
||||
.dark-mode .lockscreen-logo a {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.dark-mode .lockscreen-credentials .btn {
|
||||
background-color: #343a40;
|
||||
}
|
||||
|
||||
.dark-mode .lockscreen-image {
|
||||
background-color: #6c757d;
|
||||
}
|
||||
|
||||
.login-logo,
|
||||
.register-logo {
|
||||
font-size: 2.1rem;
|
||||
font-weight: 300;
|
||||
margin-bottom: .9rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.login-logo a,
|
||||
.register-logo a {
|
||||
color: #495057;
|
||||
}
|
||||
|
||||
.login-page,
|
||||
.register-page {
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
background-color: #e9ecef;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.login-box,
|
||||
.register-box {
|
||||
width: 360px;
|
||||
}
|
||||
|
||||
@media (max-width: 576px) {
|
||||
.login-box,
|
||||
.register-box {
|
||||
margin-top: .5rem;
|
||||
width: 90%;
|
||||
}
|
||||
}
|
||||
|
||||
.login-box .card,
|
||||
.register-box .card {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.login-card-body,
|
||||
.register-card-body {
|
||||
background-color: #fff;
|
||||
border-top: 0;
|
||||
color: #666;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.login-card-body .input-group .form-control,
|
||||
.register-card-body .input-group .form-control {
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
.login-card-body .input-group .form-control:focus,
|
||||
.register-card-body .input-group .form-control:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.login-card-body .input-group .form-control:focus ~ .input-group-prepend .input-group-text,
|
||||
.login-card-body .input-group .form-control:focus ~ .input-group-append .input-group-text,
|
||||
.register-card-body .input-group .form-control:focus ~ .input-group-prepend .input-group-text,
|
||||
.register-card-body .input-group .form-control:focus ~ .input-group-append .input-group-text {
|
||||
border-color: #80bdff;
|
||||
}
|
||||
|
||||
.login-card-body .input-group .form-control.is-valid:focus,
|
||||
.register-card-body .input-group .form-control.is-valid:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.login-card-body .input-group .form-control.is-valid ~ .input-group-prepend .input-group-text,
|
||||
.login-card-body .input-group .form-control.is-valid ~ .input-group-append .input-group-text,
|
||||
.register-card-body .input-group .form-control.is-valid ~ .input-group-prepend .input-group-text,
|
||||
.register-card-body .input-group .form-control.is-valid ~ .input-group-append .input-group-text {
|
||||
border-color: #28a745;
|
||||
}
|
||||
|
||||
.login-card-body .input-group .form-control.is-invalid:focus,
|
||||
.register-card-body .input-group .form-control.is-invalid:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.login-card-body .input-group .form-control.is-invalid ~ .input-group-append .input-group-text,
|
||||
.register-card-body .input-group .form-control.is-invalid ~ .input-group-append .input-group-text {
|
||||
border-color: #dc3545;
|
||||
}
|
||||
|
||||
.login-card-body .input-group .input-group-text,
|
||||
.register-card-body .input-group .input-group-text {
|
||||
background-color: transparent;
|
||||
border-bottom-right-radius: 0.25rem;
|
||||
border-left: 0;
|
||||
border-top-right-radius: 0.25rem;
|
||||
color: #777;
|
||||
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
.login-box-msg,
|
||||
.register-box-msg {
|
||||
margin: 0;
|
||||
padding: 0 20px 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.social-auth-links {
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.dark-mode .login-card-body,
|
||||
.dark-mode .register-card-body {
|
||||
background-color: #343a40;
|
||||
border-color: #6c757d;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.dark-mode .login-logo a,
|
||||
.dark-mode .register-logo a {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.error-page {
|
||||
margin: 20px auto 0;
|
||||
width: 600px;
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.error-page {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.error-page > .headline {
|
||||
float: left;
|
||||
font-size: 100px;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.error-page > .headline {
|
||||
float: none;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.error-page > .error-content {
|
||||
display: block;
|
||||
margin-left: 190px;
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.error-page > .error-content {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.error-page > .error-content > h3 {
|
||||
font-size: 25px;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.error-page > .error-content > h3 {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.invoice {
|
||||
background-color: #fff;
|
||||
border: 1px solid rgba(0, 0, 0, 0.125);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.invoice-title {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.dark-mode .invoice {
|
||||
background-color: #343a40;
|
||||
}
|
||||
|
||||
.profile-user-img {
|
||||
border: 3px solid #adb5bd;
|
||||
margin: 0 auto;
|
||||
padding: 3px;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.profile-username {
|
||||
font-size: 21px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.post {
|
||||
border-bottom: 1px solid #adb5bd;
|
||||
color: #666;
|
||||
margin-bottom: 15px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.post:last-of-type {
|
||||
border-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.post .user-block {
|
||||
margin-bottom: 15px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.post .row {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.dark-mode .post {
|
||||
color: #fff;
|
||||
border-color: #6c757d;
|
||||
}
|
||||
|
||||
.product-image {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.product-image-thumbs {
|
||||
-ms-flex-align: stretch;
|
||||
align-items: stretch;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.product-image-thumb {
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
|
||||
border-radius: 0.25rem;
|
||||
background-color: #fff;
|
||||
border: 1px solid #dee2e6;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
margin-right: 1rem;
|
||||
max-width: 7rem;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
.product-image-thumb img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
-ms-flex-item-align: center;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.product-image-thumb:hover {
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
.product-share a {
|
||||
margin-right: .5rem;
|
||||
}
|
||||
|
||||
.projects td {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.projects .list-inline {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.projects img.table-avatar,
|
||||
.projects .table-avatar img {
|
||||
border-radius: 50%;
|
||||
display: inline;
|
||||
width: 2.5rem;
|
||||
}
|
||||
|
||||
.projects .project-state {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
body.iframe-mode .main-sidebar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
body.iframe-mode .content-wrapper {
|
||||
margin-left: 0 !important;
|
||||
margin-top: 0 !important;
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
|
||||
body.iframe-mode .main-header,
|
||||
body.iframe-mode .main-footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
body.iframe-mode-fullscreen {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
body.iframe-mode-fullscreen.layout-navbar-fixed .wrapper .content-wrapper {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
.content-wrapper {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.content-wrapper.iframe-mode .btn-iframe-close {
|
||||
color: #dc3545;
|
||||
position: absolute;
|
||||
line-height: 1;
|
||||
right: .125rem;
|
||||
top: .125rem;
|
||||
z-index: 10;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.content-wrapper.iframe-mode .btn-iframe-close:hover, .content-wrapper.iframe-mode .btn-iframe-close:focus {
|
||||
-webkit-animation-name: fadeIn;
|
||||
animation-name: fadeIn;
|
||||
-webkit-animation-duration: 0.3s;
|
||||
animation-duration: 0.3s;
|
||||
-webkit-animation-fill-mode: both;
|
||||
animation-fill-mode: both;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
@media (hover: none) and (pointer: coarse) {
|
||||
.content-wrapper.iframe-mode .btn-iframe-close {
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
|
||||
.content-wrapper.iframe-mode .navbar-nav {
|
||||
overflow-y: auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.content-wrapper.iframe-mode .navbar-nav .nav-link {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.content-wrapper.iframe-mode .navbar-nav .nav-item {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.content-wrapper.iframe-mode .navbar-nav .nav-item:hover .btn-iframe-close, .content-wrapper.iframe-mode .navbar-nav .nav-item:focus .btn-iframe-close {
|
||||
-webkit-animation-name: fadeIn;
|
||||
animation-name: fadeIn;
|
||||
-webkit-animation-duration: 0.3s;
|
||||
animation-duration: 0.3s;
|
||||
-webkit-animation-fill-mode: both;
|
||||
animation-fill-mode: both;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
@media (hover: none) and (pointer: coarse) {
|
||||
.content-wrapper.iframe-mode .navbar-nav .nav-item:hover .btn-iframe-close, .content-wrapper.iframe-mode .navbar-nav .nav-item:focus .btn-iframe-close {
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
|
||||
.content-wrapper.iframe-mode .tab-content {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.content-wrapper.iframe-mode .tab-pane + .tab-empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.content-wrapper.iframe-mode .tab-empty {
|
||||
width: 100%;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.content-wrapper.iframe-mode .tab-loading {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
display: none;
|
||||
background-color: #f4f6f9;
|
||||
}
|
||||
|
||||
.content-wrapper.iframe-mode .tab-loading > div {
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.content-wrapper.iframe-mode iframe {
|
||||
border: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin-bottom: -8px;
|
||||
}
|
||||
|
||||
.content-wrapper.iframe-mode iframe .content-wrapper {
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
|
||||
body.iframe-mode-fullscreen .content-wrapper.iframe-mode {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
margin-left: 0 !important;
|
||||
height: 100%;
|
||||
min-height: 100%;
|
||||
z-index: 1048;
|
||||
}
|
||||
|
||||
.permanent-btn-iframe-close .btn-iframe-close {
|
||||
-webkit-animation: none !important;
|
||||
animation: none !important;
|
||||
visibility: visible !important;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.dark-mode .content-wrapper.iframe-mode .tab-loading {
|
||||
background-color: #343a40;
|
||||
}
|
||||
|
||||
.content-wrapper.kanban {
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
.content-wrapper.kanban .content {
|
||||
height: 100%;
|
||||
overflow-x: auto;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
.content-wrapper.kanban .content .container,
|
||||
.content-wrapper.kanban .content .container-fluid {
|
||||
width: -webkit-max-content;
|
||||
width: -moz-max-content;
|
||||
width: max-content;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-align: stretch;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.content-wrapper.kanban .content-header + .content {
|
||||
height: calc(100% - ((2 * 15px) + (1.8rem * 1.2)));
|
||||
}
|
||||
|
||||
.content-wrapper.kanban .card .card-body {
|
||||
padding: .5rem;
|
||||
}
|
||||
|
||||
.content-wrapper.kanban .card.card-row {
|
||||
width: 340px;
|
||||
display: inline-block;
|
||||
margin: 0 .5rem;
|
||||
}
|
||||
|
||||
.content-wrapper.kanban .card.card-row:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.content-wrapper.kanban .card.card-row .card-body {
|
||||
height: calc(100% - (12px + (1.8rem * 1.2) + .5rem));
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.content-wrapper.kanban .card.card-row .card:last-child {
|
||||
margin-bottom: 0;
|
||||
border-bottom-width: 1px;
|
||||
}
|
||||
|
||||
.content-wrapper.kanban .card.card-row .card .card-header {
|
||||
padding: .5rem .75rem;
|
||||
}
|
||||
|
||||
.content-wrapper.kanban .card.card-row .card .card-body {
|
||||
padding: .75rem;
|
||||
}
|
||||
|
||||
.content-wrapper.kanban .btn-tool.btn-link {
|
||||
text-decoration: underline;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
/*# sourceMappingURL=adminlte.pages.css.map */
|
||||
1
static/dist/css/alt/adminlte.pages.css.map
vendored
8
static/dist/css/alt/adminlte.pages.min.css
vendored
9146
static/dist/css/alt/adminlte.plugins.css
vendored
1
static/dist/css/alt/adminlte.plugins.css.map
vendored
8
static/dist/css/alt/adminlte.plugins.min.css
vendored
BIN
static/dist/img/AdminLTELogo.png
vendored
|
Before Width: | Height: | Size: 2.6 KiB |
BIN
static/dist/img/avatar.png
vendored
|
Before Width: | Height: | Size: 7.9 KiB |
BIN
static/dist/img/avatar2.png
vendored
|
Before Width: | Height: | Size: 8.1 KiB |
BIN
static/dist/img/avatar3.png
vendored
|
Before Width: | Height: | Size: 9.0 KiB |
BIN
static/dist/img/avatar4.png
vendored
|
Before Width: | Height: | Size: 13 KiB |
BIN
static/dist/img/avatar5.png
vendored
|
Before Width: | Height: | Size: 7.4 KiB |
BIN
static/dist/img/boxed-bg.jpg
vendored
|
Before Width: | Height: | Size: 121 KiB |
BIN
static/dist/img/boxed-bg.png
vendored
|
Before Width: | Height: | Size: 43 KiB |
BIN
static/dist/img/credit/american-express.png
vendored
|
Before Width: | Height: | Size: 2.1 KiB |
BIN
static/dist/img/credit/cirrus.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
static/dist/img/credit/mastercard.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
static/dist/img/credit/paypal.png
vendored
|
Before Width: | Height: | Size: 1.9 KiB |
BIN
static/dist/img/credit/paypal2.png
vendored
|
Before Width: | Height: | Size: 1.2 KiB |
BIN
static/dist/img/credit/visa.png
vendored
|
Before Width: | Height: | Size: 1.0 KiB |
BIN
static/dist/img/default-150x150.png
vendored
|
Before Width: | Height: | Size: 339 B |
BIN
static/dist/img/icons.png
vendored
|
Before Width: | Height: | Size: 1.1 KiB |
BIN
static/dist/img/photo1.png
vendored
|
Before Width: | Height: | Size: 647 KiB |
BIN
static/dist/img/photo2.png
vendored
|
Before Width: | Height: | Size: 413 KiB |
BIN
static/dist/img/photo3.jpg
vendored
|
Before Width: | Height: | Size: 362 KiB |
BIN
static/dist/img/photo4.jpg
vendored
|
Before Width: | Height: | Size: 1.1 MiB |
BIN
static/dist/img/prod-1.jpg
vendored
|
Before Width: | Height: | Size: 44 KiB |
BIN
static/dist/img/prod-2.jpg
vendored
|
Before Width: | Height: | Size: 32 KiB |
BIN
static/dist/img/prod-3.jpg
vendored
|
Before Width: | Height: | Size: 20 KiB |
BIN
static/dist/img/prod-4.jpg
vendored
|
Before Width: | Height: | Size: 26 KiB |
BIN
static/dist/img/prod-5.jpg
vendored
|
Before Width: | Height: | Size: 31 KiB |
BIN
static/dist/img/user1-128x128.jpg
vendored
|
Before Width: | Height: | Size: 2.7 KiB |
BIN
static/dist/img/user2-160x160.jpg
vendored
|
Before Width: | Height: | Size: 6.7 KiB |
BIN
static/dist/img/user3-128x128.jpg
vendored
|
Before Width: | Height: | Size: 3.3 KiB |
BIN
static/dist/img/user4-128x128.jpg
vendored
|
Before Width: | Height: | Size: 3.4 KiB |
BIN
static/dist/img/user5-128x128.jpg
vendored
|
Before Width: | Height: | Size: 6.3 KiB |
BIN
static/dist/img/user6-128x128.jpg
vendored
|
Before Width: | Height: | Size: 4.2 KiB |
BIN
static/dist/img/user7-128x128.jpg
vendored
|
Before Width: | Height: | Size: 6.2 KiB |
BIN
static/dist/img/user8-128x128.jpg
vendored
|
Before Width: | Height: | Size: 4.9 KiB |
57
static/dist/js/.eslintrc.json
vendored
@@ -1,57 +0,0 @@
|
||||
{
|
||||
"root": true,
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 5,
|
||||
"sourceType": "script"
|
||||
},
|
||||
"env": {
|
||||
"jquery": true
|
||||
},
|
||||
"extends": [
|
||||
"plugin:unicorn/recommended",
|
||||
"xo",
|
||||
"xo/browser"
|
||||
],
|
||||
"rules": {
|
||||
"capitalized-comments": "off",
|
||||
"comma-dangle": [
|
||||
"error",
|
||||
"never"
|
||||
],
|
||||
"indent": [
|
||||
"error",
|
||||
2,
|
||||
{
|
||||
"MemberExpression": "off",
|
||||
"SwitchCase": 1
|
||||
}
|
||||
],
|
||||
"multiline-ternary": [
|
||||
"error",
|
||||
"always-multiline"
|
||||
],
|
||||
"no-var": "off",
|
||||
"object-curly-spacing": [
|
||||
"error",
|
||||
"always"
|
||||
],
|
||||
"object-shorthand": "off",
|
||||
"prefer-arrow-callback": "off",
|
||||
"semi": [
|
||||
"error",
|
||||
"never"
|
||||
],
|
||||
"strict": "error",
|
||||
"unicorn/no-array-for-each": "off",
|
||||
"unicorn/no-for-loop": "off",
|
||||
"unicorn/no-null": "off",
|
||||
"unicorn/numeric-separators-style": "off",
|
||||
"unicorn/prefer-dataset": "off",
|
||||
"unicorn/prefer-includes": "off",
|
||||
"unicorn/prefer-module": "off",
|
||||
"unicorn/prefer-node-append": "off",
|
||||
"unicorn/prefer-query-selector": "off",
|
||||
"unicorn/prefer-spread": "off",
|
||||
"unicorn/prevent-abbreviations": "off"
|
||||
}
|
||||
}
|
||||
689
static/dist/js/demo.js
vendored
@@ -1,689 +0,0 @@
|
||||
/**
|
||||
* AdminLTE Demo Menu
|
||||
* ------------------
|
||||
* You should not use this file in production.
|
||||
* This file is for demo purposes only.
|
||||
*/
|
||||
|
||||
/* eslint-disable camelcase */
|
||||
|
||||
(function ($) {
|
||||
'use strict'
|
||||
|
||||
setTimeout(function () {
|
||||
if (window.___browserSync___ === undefined && Number(localStorage.getItem('AdminLTE:Demo:MessageShowed')) < Date.now()) {
|
||||
localStorage.setItem('AdminLTE:Demo:MessageShowed', (Date.now()) + (15 * 60 * 1000))
|
||||
// eslint-disable-next-line no-alert
|
||||
alert('You load AdminLTE\'s "demo.js", \nthis file is only created for testing purposes!')
|
||||
}
|
||||
}, 1000)
|
||||
|
||||
function capitalizeFirstLetter(string) {
|
||||
return string.charAt(0).toUpperCase() + string.slice(1)
|
||||
}
|
||||
|
||||
function createSkinBlock(colors, callback, noneSelected) {
|
||||
var $block = $('<select />', {
|
||||
class: noneSelected ? 'custom-select mb-3 border-0' : 'custom-select mb-3 text-light border-0 ' + colors[0].replace(/accent-|navbar-/, 'bg-')
|
||||
})
|
||||
|
||||
if (noneSelected) {
|
||||
var $default = $('<option />', {
|
||||
text: 'None Selected'
|
||||
})
|
||||
|
||||
$block.append($default)
|
||||
}
|
||||
|
||||
colors.forEach(function (color) {
|
||||
var $color = $('<option />', {
|
||||
class: (typeof color === 'object' ? color.join(' ') : color).replace('navbar-', 'bg-').replace('accent-', 'bg-'),
|
||||
text: capitalizeFirstLetter((typeof color === 'object' ? color.join(' ') : color).replace(/navbar-|accent-|bg-/, '').replace('-', ' '))
|
||||
})
|
||||
|
||||
$block.append($color)
|
||||
})
|
||||
if (callback) {
|
||||
$block.on('change', callback)
|
||||
}
|
||||
|
||||
return $block
|
||||
}
|
||||
|
||||
var $sidebar = $('.control-sidebar')
|
||||
var $container = $('<div />', {
|
||||
class: 'p-3 control-sidebar-content'
|
||||
})
|
||||
|
||||
$sidebar.append($container)
|
||||
|
||||
// Checkboxes
|
||||
|
||||
$container.append(
|
||||
'<h5>Customize AdminLTE</h5><hr class="mb-2"/>'
|
||||
)
|
||||
|
||||
var $dark_mode_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('body').hasClass('dark-mode'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('body').addClass('dark-mode')
|
||||
} else {
|
||||
$('body').removeClass('dark-mode')
|
||||
}
|
||||
})
|
||||
var $dark_mode_container = $('<div />', { class: 'mb-4' }).append($dark_mode_checkbox).append('<span>Dark Mode</span>')
|
||||
$container.append($dark_mode_container)
|
||||
|
||||
$container.append('<h6>Header Options</h6>')
|
||||
var $header_fixed_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('body').hasClass('layout-navbar-fixed'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('body').addClass('layout-navbar-fixed')
|
||||
} else {
|
||||
$('body').removeClass('layout-navbar-fixed')
|
||||
}
|
||||
})
|
||||
var $header_fixed_container = $('<div />', { class: 'mb-1' }).append($header_fixed_checkbox).append('<span>Fixed</span>')
|
||||
$container.append($header_fixed_container)
|
||||
|
||||
var $dropdown_legacy_offset_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('.main-header').hasClass('dropdown-legacy'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.main-header').addClass('dropdown-legacy')
|
||||
} else {
|
||||
$('.main-header').removeClass('dropdown-legacy')
|
||||
}
|
||||
})
|
||||
var $dropdown_legacy_offset_container = $('<div />', { class: 'mb-1' }).append($dropdown_legacy_offset_checkbox).append('<span>Dropdown Legacy Offset</span>')
|
||||
$container.append($dropdown_legacy_offset_container)
|
||||
|
||||
var $no_border_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('.main-header').hasClass('border-bottom-0'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.main-header').addClass('border-bottom-0')
|
||||
} else {
|
||||
$('.main-header').removeClass('border-bottom-0')
|
||||
}
|
||||
})
|
||||
var $no_border_container = $('<div />', { class: 'mb-4' }).append($no_border_checkbox).append('<span>No border</span>')
|
||||
$container.append($no_border_container)
|
||||
|
||||
$container.append('<h6>Sidebar Options</h6>')
|
||||
|
||||
var $sidebar_collapsed_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('body').hasClass('sidebar-collapse'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('body').addClass('sidebar-collapse')
|
||||
$(window).trigger('resize')
|
||||
} else {
|
||||
$('body').removeClass('sidebar-collapse')
|
||||
$(window).trigger('resize')
|
||||
}
|
||||
})
|
||||
var $sidebar_collapsed_container = $('<div />', { class: 'mb-1' }).append($sidebar_collapsed_checkbox).append('<span>Collapsed</span>')
|
||||
$container.append($sidebar_collapsed_container)
|
||||
|
||||
$(document).on('collapsed.lte.pushmenu', '[data-widget="pushmenu"]', function () {
|
||||
$sidebar_collapsed_checkbox.prop('checked', true)
|
||||
})
|
||||
$(document).on('shown.lte.pushmenu', '[data-widget="pushmenu"]', function () {
|
||||
$sidebar_collapsed_checkbox.prop('checked', false)
|
||||
})
|
||||
|
||||
var $sidebar_fixed_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('body').hasClass('layout-fixed'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('body').addClass('layout-fixed')
|
||||
$(window).trigger('resize')
|
||||
} else {
|
||||
$('body').removeClass('layout-fixed')
|
||||
$(window).trigger('resize')
|
||||
}
|
||||
})
|
||||
var $sidebar_fixed_container = $('<div />', { class: 'mb-1' }).append($sidebar_fixed_checkbox).append('<span>Fixed</span>')
|
||||
$container.append($sidebar_fixed_container)
|
||||
|
||||
var $sidebar_mini_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('body').hasClass('sidebar-mini'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('body').addClass('sidebar-mini')
|
||||
} else {
|
||||
$('body').removeClass('sidebar-mini')
|
||||
}
|
||||
})
|
||||
var $sidebar_mini_container = $('<div />', { class: 'mb-1' }).append($sidebar_mini_checkbox).append('<span>Sidebar Mini</span>')
|
||||
$container.append($sidebar_mini_container)
|
||||
|
||||
var $sidebar_mini_md_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('body').hasClass('sidebar-mini-md'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('body').addClass('sidebar-mini-md')
|
||||
} else {
|
||||
$('body').removeClass('sidebar-mini-md')
|
||||
}
|
||||
})
|
||||
var $sidebar_mini_md_container = $('<div />', { class: 'mb-1' }).append($sidebar_mini_md_checkbox).append('<span>Sidebar Mini MD</span>')
|
||||
$container.append($sidebar_mini_md_container)
|
||||
|
||||
var $sidebar_mini_xs_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('body').hasClass('sidebar-mini-xs'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('body').addClass('sidebar-mini-xs')
|
||||
} else {
|
||||
$('body').removeClass('sidebar-mini-xs')
|
||||
}
|
||||
})
|
||||
var $sidebar_mini_xs_container = $('<div />', { class: 'mb-1' }).append($sidebar_mini_xs_checkbox).append('<span>Sidebar Mini XS</span>')
|
||||
$container.append($sidebar_mini_xs_container)
|
||||
|
||||
var $flat_sidebar_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('.nav-sidebar').hasClass('nav-flat'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.nav-sidebar').addClass('nav-flat')
|
||||
} else {
|
||||
$('.nav-sidebar').removeClass('nav-flat')
|
||||
}
|
||||
})
|
||||
var $flat_sidebar_container = $('<div />', { class: 'mb-1' }).append($flat_sidebar_checkbox).append('<span>Nav Flat Style</span>')
|
||||
$container.append($flat_sidebar_container)
|
||||
|
||||
var $legacy_sidebar_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('.nav-sidebar').hasClass('nav-legacy'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.nav-sidebar').addClass('nav-legacy')
|
||||
} else {
|
||||
$('.nav-sidebar').removeClass('nav-legacy')
|
||||
}
|
||||
})
|
||||
var $legacy_sidebar_container = $('<div />', { class: 'mb-1' }).append($legacy_sidebar_checkbox).append('<span>Nav Legacy Style</span>')
|
||||
$container.append($legacy_sidebar_container)
|
||||
|
||||
var $compact_sidebar_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('.nav-sidebar').hasClass('nav-compact'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.nav-sidebar').addClass('nav-compact')
|
||||
} else {
|
||||
$('.nav-sidebar').removeClass('nav-compact')
|
||||
}
|
||||
})
|
||||
var $compact_sidebar_container = $('<div />', { class: 'mb-1' }).append($compact_sidebar_checkbox).append('<span>Nav Compact</span>')
|
||||
$container.append($compact_sidebar_container)
|
||||
|
||||
var $child_indent_sidebar_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('.nav-sidebar').hasClass('nav-child-indent'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.nav-sidebar').addClass('nav-child-indent')
|
||||
} else {
|
||||
$('.nav-sidebar').removeClass('nav-child-indent')
|
||||
}
|
||||
})
|
||||
var $child_indent_sidebar_container = $('<div />', { class: 'mb-1' }).append($child_indent_sidebar_checkbox).append('<span>Nav Child Indent</span>')
|
||||
$container.append($child_indent_sidebar_container)
|
||||
|
||||
var $child_hide_sidebar_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('.nav-sidebar').hasClass('nav-collapse-hide-child'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.nav-sidebar').addClass('nav-collapse-hide-child')
|
||||
} else {
|
||||
$('.nav-sidebar').removeClass('nav-collapse-hide-child')
|
||||
}
|
||||
})
|
||||
var $child_hide_sidebar_container = $('<div />', { class: 'mb-1' }).append($child_hide_sidebar_checkbox).append('<span>Nav Child Hide on Collapse</span>')
|
||||
$container.append($child_hide_sidebar_container)
|
||||
|
||||
var $no_expand_sidebar_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('.main-sidebar').hasClass('sidebar-no-expand'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.main-sidebar').addClass('sidebar-no-expand')
|
||||
} else {
|
||||
$('.main-sidebar').removeClass('sidebar-no-expand')
|
||||
}
|
||||
})
|
||||
var $no_expand_sidebar_container = $('<div />', { class: 'mb-4' }).append($no_expand_sidebar_checkbox).append('<span>Disable Hover/Focus Auto-Expand</span>')
|
||||
$container.append($no_expand_sidebar_container)
|
||||
|
||||
$container.append('<h6>Footer Options</h6>')
|
||||
var $footer_fixed_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('body').hasClass('layout-footer-fixed'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('body').addClass('layout-footer-fixed')
|
||||
} else {
|
||||
$('body').removeClass('layout-footer-fixed')
|
||||
}
|
||||
})
|
||||
var $footer_fixed_container = $('<div />', { class: 'mb-4' }).append($footer_fixed_checkbox).append('<span>Fixed</span>')
|
||||
$container.append($footer_fixed_container)
|
||||
|
||||
$container.append('<h6>Small Text Options</h6>')
|
||||
|
||||
var $text_sm_body_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('body').hasClass('text-sm'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('body').addClass('text-sm')
|
||||
} else {
|
||||
$('body').removeClass('text-sm')
|
||||
}
|
||||
})
|
||||
var $text_sm_body_container = $('<div />', { class: 'mb-1' }).append($text_sm_body_checkbox).append('<span>Body</span>')
|
||||
$container.append($text_sm_body_container)
|
||||
|
||||
var $text_sm_header_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('.main-header').hasClass('text-sm'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.main-header').addClass('text-sm')
|
||||
} else {
|
||||
$('.main-header').removeClass('text-sm')
|
||||
}
|
||||
})
|
||||
var $text_sm_header_container = $('<div />', { class: 'mb-1' }).append($text_sm_header_checkbox).append('<span>Navbar</span>')
|
||||
$container.append($text_sm_header_container)
|
||||
|
||||
var $text_sm_brand_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('.brand-link').hasClass('text-sm'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.brand-link').addClass('text-sm')
|
||||
} else {
|
||||
$('.brand-link').removeClass('text-sm')
|
||||
}
|
||||
})
|
||||
var $text_sm_brand_container = $('<div />', { class: 'mb-1' }).append($text_sm_brand_checkbox).append('<span>Brand</span>')
|
||||
$container.append($text_sm_brand_container)
|
||||
|
||||
var $text_sm_sidebar_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('.nav-sidebar').hasClass('text-sm'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.nav-sidebar').addClass('text-sm')
|
||||
} else {
|
||||
$('.nav-sidebar').removeClass('text-sm')
|
||||
}
|
||||
})
|
||||
var $text_sm_sidebar_container = $('<div />', { class: 'mb-1' }).append($text_sm_sidebar_checkbox).append('<span>Sidebar Nav</span>')
|
||||
$container.append($text_sm_sidebar_container)
|
||||
|
||||
var $text_sm_footer_checkbox = $('<input />', {
|
||||
type: 'checkbox',
|
||||
value: 1,
|
||||
checked: $('.main-footer').hasClass('text-sm'),
|
||||
class: 'mr-1'
|
||||
}).on('click', function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.main-footer').addClass('text-sm')
|
||||
} else {
|
||||
$('.main-footer').removeClass('text-sm')
|
||||
}
|
||||
})
|
||||
var $text_sm_footer_container = $('<div />', { class: 'mb-4' }).append($text_sm_footer_checkbox).append('<span>Footer</span>')
|
||||
$container.append($text_sm_footer_container)
|
||||
|
||||
// Color Arrays
|
||||
|
||||
var navbar_dark_skins = [
|
||||
'navbar-primary',
|
||||
'navbar-secondary',
|
||||
'navbar-info',
|
||||
'navbar-success',
|
||||
'navbar-danger',
|
||||
'navbar-indigo',
|
||||
'navbar-purple',
|
||||
'navbar-pink',
|
||||
'navbar-navy',
|
||||
'navbar-lightblue',
|
||||
'navbar-teal',
|
||||
'navbar-cyan',
|
||||
'navbar-dark',
|
||||
'navbar-gray-dark',
|
||||
'navbar-gray'
|
||||
]
|
||||
|
||||
var navbar_light_skins = [
|
||||
'navbar-light',
|
||||
'navbar-warning',
|
||||
'navbar-white',
|
||||
'navbar-orange'
|
||||
]
|
||||
|
||||
var sidebar_colors = [
|
||||
'bg-primary',
|
||||
'bg-warning',
|
||||
'bg-info',
|
||||
'bg-danger',
|
||||
'bg-success',
|
||||
'bg-indigo',
|
||||
'bg-lightblue',
|
||||
'bg-navy',
|
||||
'bg-purple',
|
||||
'bg-fuchsia',
|
||||
'bg-pink',
|
||||
'bg-maroon',
|
||||
'bg-orange',
|
||||
'bg-lime',
|
||||
'bg-teal',
|
||||
'bg-olive'
|
||||
]
|
||||
|
||||
var accent_colors = [
|
||||
'accent-primary',
|
||||
'accent-warning',
|
||||
'accent-info',
|
||||
'accent-danger',
|
||||
'accent-success',
|
||||
'accent-indigo',
|
||||
'accent-lightblue',
|
||||
'accent-navy',
|
||||
'accent-purple',
|
||||
'accent-fuchsia',
|
||||
'accent-pink',
|
||||
'accent-maroon',
|
||||
'accent-orange',
|
||||
'accent-lime',
|
||||
'accent-teal',
|
||||
'accent-olive'
|
||||
]
|
||||
|
||||
var sidebar_skins = [
|
||||
'sidebar-dark-primary',
|
||||
'sidebar-dark-warning',
|
||||
'sidebar-dark-info',
|
||||
'sidebar-dark-danger',
|
||||
'sidebar-dark-success',
|
||||
'sidebar-dark-indigo',
|
||||
'sidebar-dark-lightblue',
|
||||
'sidebar-dark-navy',
|
||||
'sidebar-dark-purple',
|
||||
'sidebar-dark-fuchsia',
|
||||
'sidebar-dark-pink',
|
||||
'sidebar-dark-maroon',
|
||||
'sidebar-dark-orange',
|
||||
'sidebar-dark-lime',
|
||||
'sidebar-dark-teal',
|
||||
'sidebar-dark-olive',
|
||||
'sidebar-light-primary',
|
||||
'sidebar-light-warning',
|
||||
'sidebar-light-info',
|
||||
'sidebar-light-danger',
|
||||
'sidebar-light-success',
|
||||
'sidebar-light-indigo',
|
||||
'sidebar-light-lightblue',
|
||||
'sidebar-light-navy',
|
||||
'sidebar-light-purple',
|
||||
'sidebar-light-fuchsia',
|
||||
'sidebar-light-pink',
|
||||
'sidebar-light-maroon',
|
||||
'sidebar-light-orange',
|
||||
'sidebar-light-lime',
|
||||
'sidebar-light-teal',
|
||||
'sidebar-light-olive'
|
||||
]
|
||||
|
||||
// Navbar Variants
|
||||
|
||||
$container.append('<h6>Navbar Variants</h6>')
|
||||
|
||||
var $navbar_variants = $('<div />', {
|
||||
class: 'd-flex'
|
||||
})
|
||||
var navbar_all_colors = navbar_dark_skins.concat(navbar_light_skins)
|
||||
var $navbar_variants_colors = createSkinBlock(navbar_all_colors, function () {
|
||||
var color = $(this).find('option:selected').attr('class')
|
||||
var $main_header = $('.main-header')
|
||||
$main_header.removeClass('navbar-dark').removeClass('navbar-light')
|
||||
navbar_all_colors.forEach(function (color) {
|
||||
$main_header.removeClass(color)
|
||||
})
|
||||
|
||||
$(this).removeClass().addClass('custom-select mb-3 text-light border-0 ')
|
||||
|
||||
if (navbar_dark_skins.indexOf(color) > -1) {
|
||||
$main_header.addClass('navbar-dark')
|
||||
$(this).addClass(color).addClass('text-light')
|
||||
} else {
|
||||
$main_header.addClass('navbar-light')
|
||||
$(this).addClass(color)
|
||||
}
|
||||
|
||||
$main_header.addClass(color)
|
||||
})
|
||||
|
||||
var active_navbar_color = null
|
||||
$('.main-header')[0].classList.forEach(function (className) {
|
||||
if (navbar_all_colors.indexOf(className) > -1 && active_navbar_color === null) {
|
||||
active_navbar_color = className.replace('navbar-', 'bg-')
|
||||
}
|
||||
})
|
||||
|
||||
$navbar_variants_colors.find('option.' + active_navbar_color).prop('selected', true)
|
||||
$navbar_variants_colors.removeClass().addClass('custom-select mb-3 text-light border-0 ').addClass(active_navbar_color)
|
||||
|
||||
$navbar_variants.append($navbar_variants_colors)
|
||||
|
||||
$container.append($navbar_variants)
|
||||
|
||||
// Sidebar Colors
|
||||
|
||||
$container.append('<h6>Accent Color Variants</h6>')
|
||||
var $accent_variants = $('<div />', {
|
||||
class: 'd-flex'
|
||||
})
|
||||
$container.append($accent_variants)
|
||||
$container.append(createSkinBlock(accent_colors, function () {
|
||||
var color = $(this).find('option:selected').attr('class')
|
||||
var $body = $('body')
|
||||
accent_colors.forEach(function (skin) {
|
||||
$body.removeClass(skin)
|
||||
})
|
||||
|
||||
var accent_color_class = color.replace('bg-', 'accent-')
|
||||
|
||||
$body.addClass(accent_color_class)
|
||||
}, true))
|
||||
|
||||
var active_accent_color = null
|
||||
$('body')[0].classList.forEach(function (className) {
|
||||
if (accent_colors.indexOf(className) > -1 && active_accent_color === null) {
|
||||
active_accent_color = className.replace('navbar-', 'bg-')
|
||||
}
|
||||
})
|
||||
|
||||
// $accent_variants.find('option.' + active_accent_color).prop('selected', true)
|
||||
// $accent_variants.removeClass().addClass('custom-select mb-3 text-light border-0 ').addClass(active_accent_color)
|
||||
|
||||
$container.append('<h6>Dark Sidebar Variants</h6>')
|
||||
var $sidebar_variants_dark = $('<div />', {
|
||||
class: 'd-flex'
|
||||
})
|
||||
$container.append($sidebar_variants_dark)
|
||||
var $sidebar_dark_variants = createSkinBlock(sidebar_colors, function () {
|
||||
var color = $(this).find('option:selected').attr('class')
|
||||
var sidebar_class = 'sidebar-dark-' + color.replace('bg-', '')
|
||||
var $sidebar = $('.main-sidebar')
|
||||
sidebar_skins.forEach(function (skin) {
|
||||
$sidebar.removeClass(skin)
|
||||
$sidebar_light_variants.removeClass(skin.replace('sidebar-dark-', 'bg-')).removeClass('text-light')
|
||||
})
|
||||
|
||||
$(this).removeClass().addClass('custom-select mb-3 text-light border-0').addClass(color)
|
||||
|
||||
$sidebar_light_variants.find('option').prop('selected', false)
|
||||
$sidebar.addClass(sidebar_class)
|
||||
$('.sidebar').removeClass('os-theme-dark').addClass('os-theme-light')
|
||||
}, true)
|
||||
$container.append($sidebar_dark_variants)
|
||||
|
||||
var active_sidebar_dark_color = null
|
||||
$('.main-sidebar')[0].classList.forEach(function (className) {
|
||||
var color = className.replace('sidebar-dark-', 'bg-')
|
||||
if (sidebar_colors.indexOf(color) > -1 && active_sidebar_dark_color === null) {
|
||||
active_sidebar_dark_color = color
|
||||
}
|
||||
})
|
||||
|
||||
$sidebar_dark_variants.find('option.' + active_sidebar_dark_color).prop('selected', true)
|
||||
$sidebar_dark_variants.removeClass().addClass('custom-select mb-3 text-light border-0 ').addClass(active_sidebar_dark_color)
|
||||
|
||||
$container.append('<h6>Light Sidebar Variants</h6>')
|
||||
var $sidebar_variants_light = $('<div />', {
|
||||
class: 'd-flex'
|
||||
})
|
||||
$container.append($sidebar_variants_light)
|
||||
var $sidebar_light_variants = createSkinBlock(sidebar_colors, function () {
|
||||
var color = $(this).find('option:selected').attr('class')
|
||||
var sidebar_class = 'sidebar-light-' + color.replace('bg-', '')
|
||||
var $sidebar = $('.main-sidebar')
|
||||
sidebar_skins.forEach(function (skin) {
|
||||
$sidebar.removeClass(skin)
|
||||
$sidebar_dark_variants.removeClass(skin.replace('sidebar-light-', 'bg-')).removeClass('text-light')
|
||||
})
|
||||
|
||||
$(this).removeClass().addClass('custom-select mb-3 text-light border-0').addClass(color)
|
||||
|
||||
$sidebar_dark_variants.find('option').prop('selected', false)
|
||||
$sidebar.addClass(sidebar_class)
|
||||
$('.sidebar').removeClass('os-theme-light').addClass('os-theme-dark')
|
||||
}, true)
|
||||
$container.append($sidebar_light_variants)
|
||||
|
||||
var active_sidebar_light_color = null
|
||||
$('.main-sidebar')[0].classList.forEach(function (className) {
|
||||
var color = className.replace('sidebar-light-', 'bg-')
|
||||
if (sidebar_colors.indexOf(color) > -1 && active_sidebar_light_color === null) {
|
||||
active_sidebar_light_color = color
|
||||
}
|
||||
})
|
||||
|
||||
if (active_sidebar_light_color !== null) {
|
||||
$sidebar_light_variants.find('option.' + active_sidebar_light_color).prop('selected', true)
|
||||
$sidebar_light_variants.removeClass().addClass('custom-select mb-3 text-light border-0 ').addClass(active_sidebar_light_color)
|
||||
}
|
||||
|
||||
var logo_skins = navbar_all_colors
|
||||
$container.append('<h6>Brand Logo Variants</h6>')
|
||||
var $logo_variants = $('<div />', {
|
||||
class: 'd-flex'
|
||||
})
|
||||
$container.append($logo_variants)
|
||||
var $clear_btn = $('<a />', {
|
||||
href: '#'
|
||||
}).text('clear').on('click', function (e) {
|
||||
e.preventDefault()
|
||||
var $logo = $('.brand-link')
|
||||
logo_skins.forEach(function (skin) {
|
||||
$logo.removeClass(skin)
|
||||
})
|
||||
})
|
||||
|
||||
var $brand_variants = createSkinBlock(logo_skins, function () {
|
||||
var color = $(this).find('option:selected').attr('class')
|
||||
var $logo = $('.brand-link')
|
||||
|
||||
if (color === 'navbar-light' || color === 'navbar-white') {
|
||||
$logo.addClass('text-black')
|
||||
} else {
|
||||
$logo.removeClass('text-black')
|
||||
}
|
||||
|
||||
logo_skins.forEach(function (skin) {
|
||||
$logo.removeClass(skin)
|
||||
})
|
||||
|
||||
if (color) {
|
||||
$(this).removeClass().addClass('custom-select mb-3 border-0').addClass(color).addClass(color !== 'navbar-light' && color !== 'navbar-white' ? 'text-light' : '')
|
||||
} else {
|
||||
$(this).removeClass().addClass('custom-select mb-3 border-0')
|
||||
}
|
||||
|
||||
$logo.addClass(color)
|
||||
}, true).append($clear_btn)
|
||||
$container.append($brand_variants)
|
||||
|
||||
var active_brand_color = null
|
||||
$('.brand-link')[0].classList.forEach(function (className) {
|
||||
if (logo_skins.indexOf(className) > -1 && active_brand_color === null) {
|
||||
active_brand_color = className.replace('navbar-', 'bg-')
|
||||
}
|
||||
})
|
||||
|
||||
if (active_brand_color) {
|
||||
$brand_variants.find('option.' + active_brand_color).prop('selected', true)
|
||||
$brand_variants.removeClass().addClass('custom-select mb-3 text-light border-0 ').addClass(active_brand_color)
|
||||
}
|
||||
})(jQuery)
|
||||
267
static/dist/js/pages/dashboard.js
vendored
@@ -1,267 +0,0 @@
|
||||
/*
|
||||
* Author: Abdullah A Almsaeed
|
||||
* Date: 4 Jan 2014
|
||||
* Description:
|
||||
* This is a demo file used only for the main dashboard (index.html)
|
||||
**/
|
||||
|
||||
/* global moment:false, Chart:false, Sparkline:false */
|
||||
|
||||
$(function () {
|
||||
'use strict'
|
||||
|
||||
// Make the dashboard widgets sortable Using jquery UI
|
||||
$('.connectedSortable').sortable({
|
||||
placeholder: 'sort-highlight',
|
||||
connectWith: '.connectedSortable',
|
||||
handle: '.card-header, .nav-tabs',
|
||||
forcePlaceholderSize: true,
|
||||
zIndex: 999999
|
||||
})
|
||||
$('.connectedSortable .card-header').css('cursor', 'move')
|
||||
|
||||
// jQuery UI sortable for the todo list
|
||||
$('.todo-list').sortable({
|
||||
placeholder: 'sort-highlight',
|
||||
handle: '.handle',
|
||||
forcePlaceholderSize: true,
|
||||
zIndex: 999999
|
||||
})
|
||||
|
||||
// bootstrap WYSIHTML5 - text editor
|
||||
$('.textarea').summernote()
|
||||
|
||||
$('.daterange').daterangepicker({
|
||||
ranges: {
|
||||
Today: [moment(), moment()],
|
||||
Yesterday: [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
|
||||
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
|
||||
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
|
||||
'This Month': [moment().startOf('month'), moment().endOf('month')],
|
||||
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
|
||||
},
|
||||
startDate: moment().subtract(29, 'days'),
|
||||
endDate: moment()
|
||||
}, function (start, end) {
|
||||
// eslint-disable-next-line no-alert
|
||||
alert('You chose: ' + start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'))
|
||||
})
|
||||
|
||||
/* jQueryKnob */
|
||||
$('.knob').knob()
|
||||
|
||||
// jvectormap data
|
||||
var visitorsData = {
|
||||
US: 398, // USA
|
||||
SA: 400, // Saudi Arabia
|
||||
CA: 1000, // Canada
|
||||
DE: 500, // Germany
|
||||
FR: 760, // France
|
||||
CN: 300, // China
|
||||
AU: 700, // Australia
|
||||
BR: 600, // Brazil
|
||||
IN: 800, // India
|
||||
GB: 320, // Great Britain
|
||||
RU: 3000 // Russia
|
||||
}
|
||||
// World map by jvectormap
|
||||
$('#world-map').vectorMap({
|
||||
map: 'usa_en',
|
||||
backgroundColor: 'transparent',
|
||||
regionStyle: {
|
||||
initial: {
|
||||
fill: 'rgba(255, 255, 255, 0.7)',
|
||||
'fill-opacity': 1,
|
||||
stroke: 'rgba(0,0,0,.2)',
|
||||
'stroke-width': 1,
|
||||
'stroke-opacity': 1
|
||||
}
|
||||
},
|
||||
series: {
|
||||
regions: [{
|
||||
values: visitorsData,
|
||||
scale: ['#ffffff', '#0154ad'],
|
||||
normalizeFunction: 'polynomial'
|
||||
}]
|
||||
},
|
||||
onRegionLabelShow: function (e, el, code) {
|
||||
if (typeof visitorsData[code] !== 'undefined') {
|
||||
el.html(el.html() + ': ' + visitorsData[code] + ' new visitors')
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// Sparkline charts
|
||||
var sparkline1 = new Sparkline($('#sparkline-1')[0], { width: 80, height: 50, lineColor: '#92c1dc', endColor: '#ebf4f9' })
|
||||
var sparkline2 = new Sparkline($('#sparkline-2')[0], { width: 80, height: 50, lineColor: '#92c1dc', endColor: '#ebf4f9' })
|
||||
var sparkline3 = new Sparkline($('#sparkline-3')[0], { width: 80, height: 50, lineColor: '#92c1dc', endColor: '#ebf4f9' })
|
||||
|
||||
sparkline1.draw([1000, 1200, 920, 927, 931, 1027, 819, 930, 1021])
|
||||
sparkline2.draw([515, 519, 520, 522, 652, 810, 370, 627, 319, 630, 921])
|
||||
sparkline3.draw([15, 19, 20, 22, 33, 27, 31, 27, 19, 30, 21])
|
||||
|
||||
// The Calender
|
||||
$('#calendar').datetimepicker({
|
||||
format: 'L',
|
||||
inline: true
|
||||
})
|
||||
|
||||
// SLIMSCROLL FOR CHAT WIDGET
|
||||
$('#chat-box').overlayScrollbars({
|
||||
height: '250px'
|
||||
})
|
||||
|
||||
/* Chart.js Charts */
|
||||
// Sales chart
|
||||
var salesChartCanvas = document.getElementById('revenue-chart-canvas').getContext('2d')
|
||||
// $('#revenue-chart').get(0).getContext('2d');
|
||||
|
||||
var salesChartData = {
|
||||
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
|
||||
datasets: [
|
||||
{
|
||||
label: 'Digital Goods',
|
||||
backgroundColor: 'rgba(60,141,188,0.9)',
|
||||
borderColor: 'rgba(60,141,188,0.8)',
|
||||
pointRadius: false,
|
||||
pointColor: '#3b8bba',
|
||||
pointStrokeColor: 'rgba(60,141,188,1)',
|
||||
pointHighlightFill: '#fff',
|
||||
pointHighlightStroke: 'rgba(60,141,188,1)',
|
||||
data: [28, 48, 40, 19, 86, 27, 90]
|
||||
},
|
||||
{
|
||||
label: 'Electronics',
|
||||
backgroundColor: 'rgba(210, 214, 222, 1)',
|
||||
borderColor: 'rgba(210, 214, 222, 1)',
|
||||
pointRadius: false,
|
||||
pointColor: 'rgba(210, 214, 222, 1)',
|
||||
pointStrokeColor: '#c1c7d1',
|
||||
pointHighlightFill: '#fff',
|
||||
pointHighlightStroke: 'rgba(220,220,220,1)',
|
||||
data: [65, 59, 80, 81, 56, 55, 40]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
var salesChartOptions = {
|
||||
maintainAspectRatio: false,
|
||||
responsive: true,
|
||||
legend: {
|
||||
display: false
|
||||
},
|
||||
scales: {
|
||||
xAxes: [{
|
||||
gridLines: {
|
||||
display: false
|
||||
}
|
||||
}],
|
||||
yAxes: [{
|
||||
gridLines: {
|
||||
display: false
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
||||
// This will get the first returned node in the jQuery collection.
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
var salesChart = new Chart(salesChartCanvas, { // lgtm[js/unused-local-variable]
|
||||
type: 'line',
|
||||
data: salesChartData,
|
||||
options: salesChartOptions
|
||||
})
|
||||
|
||||
// Donut Chart
|
||||
var pieChartCanvas = $('#sales-chart-canvas').get(0).getContext('2d')
|
||||
var pieData = {
|
||||
labels: [
|
||||
'Instore Sales',
|
||||
'Download Sales',
|
||||
'Mail-Order Sales'
|
||||
],
|
||||
datasets: [
|
||||
{
|
||||
data: [30, 12, 20],
|
||||
backgroundColor: ['#f56954', '#00a65a', '#f39c12']
|
||||
}
|
||||
]
|
||||
}
|
||||
var pieOptions = {
|
||||
legend: {
|
||||
display: false
|
||||
},
|
||||
maintainAspectRatio: false,
|
||||
responsive: true
|
||||
}
|
||||
// Create pie or douhnut chart
|
||||
// You can switch between pie and douhnut using the method below.
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
var pieChart = new Chart(pieChartCanvas, { // lgtm[js/unused-local-variable]
|
||||
type: 'doughnut',
|
||||
data: pieData,
|
||||
options: pieOptions
|
||||
})
|
||||
|
||||
// Sales graph chart
|
||||
var salesGraphChartCanvas = $('#line-chart').get(0).getContext('2d')
|
||||
// $('#revenue-chart').get(0).getContext('2d');
|
||||
|
||||
var salesGraphChartData = {
|
||||
labels: ['2011 Q1', '2011 Q2', '2011 Q3', '2011 Q4', '2012 Q1', '2012 Q2', '2012 Q3', '2012 Q4', '2013 Q1', '2013 Q2'],
|
||||
datasets: [
|
||||
{
|
||||
label: 'Digital Goods',
|
||||
fill: false,
|
||||
borderWidth: 2,
|
||||
lineTension: 0,
|
||||
spanGaps: true,
|
||||
borderColor: '#efefef',
|
||||
pointRadius: 3,
|
||||
pointHoverRadius: 7,
|
||||
pointColor: '#efefef',
|
||||
pointBackgroundColor: '#efefef',
|
||||
data: [2666, 2778, 4912, 3767, 6810, 5670, 4820, 15073, 10687, 8432]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
var salesGraphChartOptions = {
|
||||
maintainAspectRatio: false,
|
||||
responsive: true,
|
||||
legend: {
|
||||
display: false
|
||||
},
|
||||
scales: {
|
||||
xAxes: [{
|
||||
ticks: {
|
||||
fontColor: '#efefef'
|
||||
},
|
||||
gridLines: {
|
||||
display: false,
|
||||
color: '#efefef',
|
||||
drawBorder: false
|
||||
}
|
||||
}],
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
stepSize: 5000,
|
||||
fontColor: '#efefef'
|
||||
},
|
||||
gridLines: {
|
||||
display: true,
|
||||
color: '#efefef',
|
||||
drawBorder: false
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
||||
// This will get the first returned node in the jQuery collection.
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
var salesGraphChart = new Chart(salesGraphChartCanvas, { // lgtm[js/unused-local-variable]
|
||||
type: 'line',
|
||||
data: salesGraphChartData,
|
||||
options: salesGraphChartOptions
|
||||
})
|
||||
})
|
||||
270
static/dist/js/pages/dashboard2.js
vendored
@@ -1,270 +0,0 @@
|
||||
/* global Chart:false */
|
||||
|
||||
$(function () {
|
||||
'use strict'
|
||||
|
||||
/* ChartJS
|
||||
* -------
|
||||
* Here we will create a few charts using ChartJS
|
||||
*/
|
||||
|
||||
//-----------------------
|
||||
// - MONTHLY SALES CHART -
|
||||
//-----------------------
|
||||
|
||||
// Get context with jQuery - using jQuery's .get() method.
|
||||
var salesChartCanvas = $('#salesChart').get(0).getContext('2d')
|
||||
|
||||
var salesChartData = {
|
||||
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
|
||||
datasets: [
|
||||
{
|
||||
label: 'Digital Goods',
|
||||
backgroundColor: 'rgba(60,141,188,0.9)',
|
||||
borderColor: 'rgba(60,141,188,0.8)',
|
||||
pointRadius: false,
|
||||
pointColor: '#3b8bba',
|
||||
pointStrokeColor: 'rgba(60,141,188,1)',
|
||||
pointHighlightFill: '#fff',
|
||||
pointHighlightStroke: 'rgba(60,141,188,1)',
|
||||
data: [28, 48, 40, 19, 86, 27, 90]
|
||||
},
|
||||
{
|
||||
label: 'Electronics',
|
||||
backgroundColor: 'rgba(210, 214, 222, 1)',
|
||||
borderColor: 'rgba(210, 214, 222, 1)',
|
||||
pointRadius: false,
|
||||
pointColor: 'rgba(210, 214, 222, 1)',
|
||||
pointStrokeColor: '#c1c7d1',
|
||||
pointHighlightFill: '#fff',
|
||||
pointHighlightStroke: 'rgba(220,220,220,1)',
|
||||
data: [65, 59, 80, 81, 56, 55, 40]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
var salesChartOptions = {
|
||||
maintainAspectRatio: false,
|
||||
responsive: true,
|
||||
legend: {
|
||||
display: false
|
||||
},
|
||||
scales: {
|
||||
xAxes: [{
|
||||
gridLines: {
|
||||
display: false
|
||||
}
|
||||
}],
|
||||
yAxes: [{
|
||||
gridLines: {
|
||||
display: false
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
||||
// This will get the first returned node in the jQuery collection.
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
var salesChart = new Chart(salesChartCanvas, {
|
||||
type: 'line',
|
||||
data: salesChartData,
|
||||
options: salesChartOptions
|
||||
}
|
||||
)
|
||||
|
||||
//---------------------------
|
||||
// - END MONTHLY SALES CHART -
|
||||
//---------------------------
|
||||
|
||||
//-------------
|
||||
// - PIE CHART -
|
||||
//-------------
|
||||
// Get context with jQuery - using jQuery's .get() method.
|
||||
var pieChartCanvas = $('#pieChart').get(0).getContext('2d')
|
||||
var pieData = {
|
||||
labels: [
|
||||
'Chrome',
|
||||
'IE',
|
||||
'FireFox',
|
||||
'Safari',
|
||||
'Opera',
|
||||
'Navigator'
|
||||
],
|
||||
datasets: [
|
||||
{
|
||||
data: [700, 500, 400, 600, 300, 100],
|
||||
backgroundColor: ['#f56954', '#00a65a', '#f39c12', '#00c0ef', '#3c8dbc', '#d2d6de']
|
||||
}
|
||||
]
|
||||
}
|
||||
var pieOptions = {
|
||||
legend: {
|
||||
display: false
|
||||
}
|
||||
}
|
||||
// Create pie or douhnut chart
|
||||
// You can switch between pie and douhnut using the method below.
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
var pieChart = new Chart(pieChartCanvas, {
|
||||
type: 'doughnut',
|
||||
data: pieData,
|
||||
options: pieOptions
|
||||
})
|
||||
|
||||
//-----------------
|
||||
// - END PIE CHART -
|
||||
//-----------------
|
||||
|
||||
/* jVector Maps
|
||||
* ------------
|
||||
* Create a world map with markers
|
||||
*/
|
||||
$('#world-map-markers').mapael({
|
||||
map: {
|
||||
name: 'usa_states',
|
||||
zoom: {
|
||||
enabled: true,
|
||||
maxLevel: 10
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// $('#world-map-markers').vectorMap({
|
||||
// map : 'world_en',
|
||||
// normalizeFunction: 'polynomial',
|
||||
// hoverOpacity : 0.7,
|
||||
// hoverColor : false,
|
||||
// backgroundColor : 'transparent',
|
||||
// regionStyle : {
|
||||
// initial : {
|
||||
// fill : 'rgba(210, 214, 222, 1)',
|
||||
// 'fill-opacity' : 1,
|
||||
// stroke : 'none',
|
||||
// 'stroke-width' : 0,
|
||||
// 'stroke-opacity': 1
|
||||
// },
|
||||
// hover : {
|
||||
// 'fill-opacity': 0.7,
|
||||
// cursor : 'pointer'
|
||||
// },
|
||||
// selected : {
|
||||
// fill: 'yellow'
|
||||
// },
|
||||
// selectedHover: {}
|
||||
// },
|
||||
// markerStyle : {
|
||||
// initial: {
|
||||
// fill : '#00a65a',
|
||||
// stroke: '#111'
|
||||
// }
|
||||
// },
|
||||
// markers : [
|
||||
// {
|
||||
// latLng: [41.90, 12.45],
|
||||
// name : 'Vatican City'
|
||||
// },
|
||||
// {
|
||||
// latLng: [43.73, 7.41],
|
||||
// name : 'Monaco'
|
||||
// },
|
||||
// {
|
||||
// latLng: [-0.52, 166.93],
|
||||
// name : 'Nauru'
|
||||
// },
|
||||
// {
|
||||
// latLng: [-8.51, 179.21],
|
||||
// name : 'Tuvalu'
|
||||
// },
|
||||
// {
|
||||
// latLng: [43.93, 12.46],
|
||||
// name : 'San Marino'
|
||||
// },
|
||||
// {
|
||||
// latLng: [47.14, 9.52],
|
||||
// name : 'Liechtenstein'
|
||||
// },
|
||||
// {
|
||||
// latLng: [7.11, 171.06],
|
||||
// name : 'Marshall Islands'
|
||||
// },
|
||||
// {
|
||||
// latLng: [17.3, -62.73],
|
||||
// name : 'Saint Kitts and Nevis'
|
||||
// },
|
||||
// {
|
||||
// latLng: [3.2, 73.22],
|
||||
// name : 'Maldives'
|
||||
// },
|
||||
// {
|
||||
// latLng: [35.88, 14.5],
|
||||
// name : 'Malta'
|
||||
// },
|
||||
// {
|
||||
// latLng: [12.05, -61.75],
|
||||
// name : 'Grenada'
|
||||
// },
|
||||
// {
|
||||
// latLng: [13.16, -61.23],
|
||||
// name : 'Saint Vincent and the Grenadines'
|
||||
// },
|
||||
// {
|
||||
// latLng: [13.16, -59.55],
|
||||
// name : 'Barbados'
|
||||
// },
|
||||
// {
|
||||
// latLng: [17.11, -61.85],
|
||||
// name : 'Antigua and Barbuda'
|
||||
// },
|
||||
// {
|
||||
// latLng: [-4.61, 55.45],
|
||||
// name : 'Seychelles'
|
||||
// },
|
||||
// {
|
||||
// latLng: [7.35, 134.46],
|
||||
// name : 'Palau'
|
||||
// },
|
||||
// {
|
||||
// latLng: [42.5, 1.51],
|
||||
// name : 'Andorra'
|
||||
// },
|
||||
// {
|
||||
// latLng: [14.01, -60.98],
|
||||
// name : 'Saint Lucia'
|
||||
// },
|
||||
// {
|
||||
// latLng: [6.91, 158.18],
|
||||
// name : 'Federated States of Micronesia'
|
||||
// },
|
||||
// {
|
||||
// latLng: [1.3, 103.8],
|
||||
// name : 'Singapore'
|
||||
// },
|
||||
// {
|
||||
// latLng: [1.46, 173.03],
|
||||
// name : 'Kiribati'
|
||||
// },
|
||||
// {
|
||||
// latLng: [-21.13, -175.2],
|
||||
// name : 'Tonga'
|
||||
// },
|
||||
// {
|
||||
// latLng: [15.3, -61.38],
|
||||
// name : 'Dominica'
|
||||
// },
|
||||
// {
|
||||
// latLng: [-20.2, 57.5],
|
||||
// name : 'Mauritius'
|
||||
// },
|
||||
// {
|
||||
// latLng: [26.02, 50.55],
|
||||
// name : 'Bahrain'
|
||||
// },
|
||||
// {
|
||||
// latLng: [0.33, 6.73],
|
||||
// name : 'São Tomé and Príncipe'
|
||||
// }
|
||||
// ]
|
||||
// })
|
||||
})
|
||||
|
||||
// lgtm [js/unused-local-variable]
|
||||