Celestino Rey 1 year ago
parent
commit
4ab4bfe91c
9465 changed files with 1743999 additions and 504 deletions
  1. +0
    -3
      .gitignore
  2. +1
    -0
      AppsPy/RepostajesPy/K8S/entra.sh
  3. +14
    -0
      AppsPy/RepostajesPy/K8S/pv-local-repostajespy.yaml
  4. +56
    -0
      AppsPy/RepostajesPy/K8S/repostajespy-deployment.yaml
  5. +14
    -0
      AppsPy/RepostajesPy/K8S/reypostajespy-prod-persistentvolumeclaim.yaml
  6. +1
    -0
      AppsPy/RepostajesPy/K8S/verImg.sh
  7. +20
    -0
      AppsPy/RepostajesPy/servicios/Dockerfile
  8. +3
    -0
      AppsPy/RepostajesPy/servicios/creaImagen.sh
  9. +3
    -0
      AppsPy/RepostajesPy/servicios/entrypoint.sh
  10. +197
    -0
      AppsPy/RepostajesPy/servicios/instance/automoviles.sql
  11. BIN
      AppsPy/RepostajesPy/servicios/instance/repostajes.db
  12. BIN
      AppsPy/RepostajesPy/servicios/instance/uploads/bmw.jpg
  13. BIN
      AppsPy/RepostajesPy/servicios/instance/uploads/born.jpeg
  14. BIN
      AppsPy/RepostajesPy/servicios/instance/uploads/bornintheusa.jpg
  15. BIN
      AppsPy/RepostajesPy/servicios/instance/uploads/therising.jpeg
  16. +2
    -0
      AppsPy/RepostajesPy/servicios/lanza.sh
  17. +55
    -0
      AppsPy/RepostajesPy/servicios/repostajes/__init__.py
  18. +84
    -0
      AppsPy/RepostajesPy/servicios/repostajes/auth.py
  19. +35
    -0
      AppsPy/RepostajesPy/servicios/repostajes/models.py
  20. +175
    -0
      AppsPy/RepostajesPy/servicios/repostajes/paginas.py
  21. +12
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/css/portal.css
  22. +21
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/images/app-logo.svg
  23. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/background/background-1.jpg
  24. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/background/background-2.jpg
  25. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/background/background-3.jpg
  26. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/background/background-palmeras.jpg
  27. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/doc-thumb-1.jpg
  28. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/doc-thumb-2.jpg
  29. +21
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/images/portal-logo.svg
  30. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/profiles/profile-1.png
  31. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/profiles/profile-2.png
  32. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/profiles/profile-3.png
  33. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/profiles/profile-4.png
  34. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/profiles/profile-5.png
  35. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/profiles/profile-6.png
  36. +18
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/images/reymota-logo.svg
  37. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/user.png
  38. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-1.jpg
  39. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-2.jpg
  40. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-3.jpg
  41. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-4.jpg
  42. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-5.jpg
  43. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-6.jpg
  44. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-7.jpg
  45. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-8.jpg
  46. BIN
      AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-9.jpg
  47. +96
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/js/app.js
  48. +366
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/js/charts-demo.js
  49. +224
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/js/index-charts.js
  50. +4085
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.css
  51. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.css.map
  52. +6
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.min.css
  53. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.min.css.map
  54. +4084
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.css
  55. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.css.map
  56. +6
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.min.css
  57. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.min.css.map
  58. +593
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.css
  59. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.css.map
  60. +6
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.min.css
  61. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.min.css.map
  62. +590
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.css
  63. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.css.map
  64. +6
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.min.css
  65. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.min.css.map
  66. +5399
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.css
  67. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.css.map
  68. +6
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.min.css
  69. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.min.css.map
  70. +5390
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.css
  71. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.css.map
  72. +6
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.min.css
  73. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.min.css.map
  74. +12071
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.css
  75. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.css.map
  76. +6
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.min.css
  77. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.min.css.map
  78. +12035
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.css
  79. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.css.map
  80. +6
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.min.css
  81. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.min.css.map
  82. +6306
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.js
  83. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.js.map
  84. +7
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.min.js
  85. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.min.js.map
  86. +4439
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.esm.js
  87. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.esm.js.map
  88. +7
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.esm.min.js
  89. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.esm.min.js.map
  90. +4486
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.js
  91. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.js.map
  92. +7
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.min.js
  93. +1
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.min.js.map
  94. +7
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/chart.js/chart.min.js
  95. +165
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/fontawesome/LICENSE.txt
  96. +7955
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/fontawesome/css/all.css
  97. +9
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/fontawesome/css/all.min.css
  98. +1522
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/fontawesome/css/brands.css
  99. +6
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/fontawesome/css/brands.min.css
  100. +6372
    -0
      AppsPy/RepostajesPy/servicios/repostajes/static/plugins/fontawesome/css/fontawesome.css

+ 0
- 3
.gitignore View File

@ -14,6 +14,3 @@ Thumbs.db
*.log
*.sqlite
uploads/*
*.db

+ 1
- 0
AppsPy/RepostajesPy/K8S/entra.sh View File

@ -0,0 +1 @@
kubectl exec -ti deployment.apps/lyrics -- /bin/bash

+ 14
- 0
AppsPy/RepostajesPy/K8S/pv-local-repostajespy.yaml View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: reymotapy-app-folder
labels:
app: reymotapy
spec:
capacity:
storage: 100Mi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/Externo/reymotapy"

+ 56
- 0
AppsPy/RepostajesPy/K8S/repostajespy-deployment.yaml View File

@ -0,0 +1,56 @@
apiVersion: v1
kind: Service
metadata:
name: reymotapy
spec:
type: NodePort
ports:
- name: http
port: 5000
nodePort: 30339
targetPort: reymotapy
selector:
app: reymotapy
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: reymotapy
labels:
app: reymotapy
spec:
replicas: 1
selector:
matchLabels:
app: reymotapy
strategy:
type: Recreate
template:
metadata:
labels:
app: reymotapy
spec:
containers:
- args:
- gunicorn
- --bind
- 0.0.0.0:5000
- reymotapy:create_app()
image: creylopez/reymotapy:2.0
name: reymotapy
env:
- name: SALUDO_DEMO
value: "Hola, mundo"
ports:
- containerPort: 5000
name: reymotapy
resources: {}
volumeMounts:
- mountPath: /reymotapy/instance
name: reymotapy-prod
restartPolicy: Always
volumes:
- name: reymotapy-prod
persistentVolumeClaim:
claimName: reymotapy-prod
status: {}

+ 14
- 0
AppsPy/RepostajesPy/K8S/reypostajespy-prod-persistentvolumeclaim.yaml View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: reymotapy-prod
name: reymotapy-prod
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
status: {}

+ 1
- 0
AppsPy/RepostajesPy/K8S/verImg.sh View File

@ -0,0 +1 @@
docker run -it creylopez/repostajes:5.3 bash

+ 20
- 0
AppsPy/RepostajesPy/servicios/Dockerfile View File

@ -0,0 +1,20 @@
# syntax=docker/dockerfile:1
FROM python:3.8-slim-buster
WORKDIR /repostajespy
# set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
# install system dependencies
RUN apt-get update && apt-get install -y sqlite3
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
# run entrypoint.sh
ENTRYPOINT ["/repostajespy/entrypoint.sh"]

+ 3
- 0
AppsPy/RepostajesPy/servicios/creaImagen.sh View File

@ -0,0 +1,3 @@
docker build --no-cache -t creylopez/reymotapy:2.0 .
docker push creylopez/reymotapy:2.0

+ 3
- 0
AppsPy/RepostajesPy/servicios/entrypoint.sh View File

@ -0,0 +1,3 @@
#!/bin/bash
exec "$@"

+ 197
- 0
AppsPy/RepostajesPy/servicios/instance/automoviles.sql View File

@ -0,0 +1,197 @@
-- phpMyAdmin SQL Dump
-- version 5.2.1
-- https://www.phpmyadmin.net/
--
-- Servidor: repostajes-mysql:3306
-- Tiempo de generación: 26-07-2024 a las 08:22:01
-- Versión del servidor: 11.4.2-MariaDB-ubu2404
-- Versión de PHP: 8.2.19
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Base de datos: `automoviles`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `carburante`
--
CREATE TABLE `carburante` (
`identificador` int(11) NOT NULL,
`fecha` date DEFAULT NULL,
`vehiculo` text DEFAULT NULL,
`kms` int(11) DEFAULT NULL,
`litros` decimal(10,3) DEFAULT NULL,
`descuento` decimal(10,2) DEFAULT NULL,
`precioxlitro` decimal(10,3) DEFAULT NULL,
`importe` decimal(10,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_spanish_ci;
--
-- Volcado de datos para la tabla `carburante`
--
INSERT INTO `carburante` (`identificador`, `fecha`, `vehiculo`, `kms`, `litros`, `descuento`, `precioxlitro`, `importe`) VALUES
(1, '2021-12-14', '1018KPD', 52731, 0.000, 0.00, 0.000, 0.00),
(2, '2021-12-23', '1018KPD', 53162, 52.800, 0.00, 1.280, 67.32),
(3, '2021-12-31', '1018KPD', 54122, 49.990, 0.00, 1.280, 63.74),
(4, '2022-01-22', '1018KPD', 54946, 49.140, 0.00, 1.270, 62.65),
(5, '2022-02-09', '1018KPD', 55908, 49.240, 0.00, 1.320, 65.24),
(6, '2022-03-03', '1018KPD', 56909, 48.610, 0.00, 1.380, 67.03),
(7, '2022-03-18', '1018KPD', 57542, 30.060, 0.00, 1.750, 52.54),
(8, '2022-04-10', '1018KPD', 58497, 46.630, 0.00, 1.500, 69.98),
(9, '2022-05-12', '1018KPD', 59447, 47.140, 0.00, 1.530, 72.11),
(10, '2022-05-19', '1018KPD', 60414, 48.570, 0.00, 1.640, 79.81),
(11, '2022-06-09', '1018KPD', 61147, 36.200, 0.00, 1.720, 62.12),
(12, '2022-06-25', '1018KPD', 62116, 49.170, 0.00, 1.840, 90.29),
(16, '2022-09-14', '1018KPD', 66359, 53.240, 0.00, 1.590, 84.83),
(17, '2022-09-23', '1018KPD', 67107, 37.260, 0.00, 1.490, 55.48),
(19, '2023-01-24', '1018KPD', 71790, 43.040, 2.12, 1.590, 70.54),
(21, '2022-12-03', '1018KPD', 70061, 46.380, 2.04, 1.420, 68.13),
(22, '2022-12-26', '1018KPD', 70919, 44.580, 1.85, 1.340, 61.68),
(23, '2023-03-05', '1018KPD', 73711, 47.850, 0.00, 1.490, 71.20),
(24, '2023-03-25', '1018KPD', 74749, 49.840, 0.00, 1.450, 72.17),
(25, '2023-02-19', '1018KPD', 72763, 49.380, 2.34, 1.530, 77.97),
(27, '2023-05-06', '1018KPD', 76434, 32.280, 0.00, 1.370, 44.09),
(28, '2023-05-22', '1018KPD', 77366, 45.040, 0.00, 1.300, 58.46),
(45, '2022-07-09', '1018KPD', 63129, 47.030, 0.00, 1.690, 79.38),
(46, '2022-08-12', '1018KPD', 64088, 43.730, 0.00, 1.500, 65.55),
(47, '2022-08-22', '1018KPD', 65185, 52.780, 0.00, 1.490, 78.80),
(50, '2022-10-12', '1018KPD', 68204, 52.040, 2.51, 1.560, 83.73),
(51, '2022-11-11', '1018KPD', 69158, 45.280, 2.37, 1.690, 78.91),
(61, '2023-06-10', '1018KPD', 78170, 41.090, 0.00, 1.320, 54.16),
(62, '2023-06-19', '1018KPD', 79038, 40.780, 1.95, 1.430, 60.11),
(151, '2022-06-28', '7630LYR', 219, 9.880, 0.00, 1.920, 18.96),
(152, '2022-06-28', '7630LYR', 236, 27.360, 0.00, 1.880, 51.33),
(153, '2022-07-14', '7630LYR', 904, 32.240, 0.00, 1.720, 55.58),
(154, '2022-07-26', '7630LYR', 1433, 30.490, 0.00, 1.590, 48.43),
(155, '2022-08-21', '7630LYR', 2030, 32.920, 0.00, 1.420, 46.72),
(156, '2022-09-26', '7630LYR', 2627, 23.920, 0.00, 1.390, 33.16),
(157, '2022-10-18', '7630LYR', 3169, 22.970, 0.00, 1.430, 32.74),
(158, '2022-11-09', '7630LYR', 3791, 29.600, 0.00, 1.410, 41.88),
(159, '2022-11-27', '7630LYR', 4363, 28.800, 1.20, 1.350, 38.80),
(160, '2022-12-22', '7630LYR', 4851, 26.740, 1.06, 1.280, 34.18),
(161, '2023-01-12', '7630LYR', 5291, 23.520, 1.09, 1.500, 35.34),
(162, '2023-02-01', '7630LYR', 5702, 27.360, 1.28, 1.520, 41.52),
(163, '2023-02-20', '7630LYR', 6141, 24.090, 1.13, 1.520, 36.67),
(164, '2023-03-15', '7630LYR', 6631, 25.520, 1.21, 1.530, 38.96),
(165, '2023-04-17', '7630LYR', 7325, 29.400, 1.47, 1.620, 47.62),
(166, '2023-05-28', '7630LYR', 8413, 24.160, 1.17, 1.560, 37.70),
(167, '2023-06-25', '7630LYR', 8956, 26.380, 1.30, 1.590, 41.94),
(168, '2023-07-10', '7630LYR', 9471, 29.040, 1.35, 1.497, 43.49),
(176, '2023-07-14', '1018KPD', 79875, 40.560, 1.74, 1.407, 56.26),
(177, '2023-07-22', '1018KPD', 80806, 46.290, 1.95, 1.371, 63.05),
(178, '2023-07-25', '7630LYR', 10043, 24.850, 1.40, 1.622, 40.32),
(182, '2023-08-07', '1018KPD', 81695, 44.390, 0.00, 1.439, 63.88),
(201, '2023-08-09', '7630LYR', 10582, 26.490, 1.39, 1.696, 44.94),
(202, '2023-08-23', '7630LYR', 11050, 24.050, 1.22, 1.638, 39.40),
(203, '2023-08-27', '1018KPD', 82715, 50.400, 0.00, 1.529, 77.06),
(204, '2023-09-14', '7630LYR', 11508, 21.440, 1.14, 1.726, 37.00),
(205, '2023-09-19', '1018KPD', 83709, 48.350, 0.00, 1.598, 77.26),
(206, '2023-09-27', '1018KPD', 84171, 23.010, 0.00, 1.558, 35.85),
(207, '2023-10-10', '1018KPD', 85104, 48.000, 0.00, 1.509, 72.43),
(212, '2023-10-15', '7630LYR', 12006, 25.090, 1.25, 1.609, 40.37),
(213, '2023-10-27', '1018KPD', 86021, 46.770, 0.00, 1.499, 70.11),
(214, '2023-11-04', '7630LYR', 12427, 25.640, 1.17, 1.474, 37.78),
(215, '2023-11-11', '1018KPD', 86757, 39.580, 1.71, 1.398, 55.33),
(216, '2023-11-20', '7630LYR', 12933, 26.160, 0.00, 1.529, 40.00),
(217, '2023-11-23', '1018KPD', 87503, 42.410, 1.75, 1.331, 56.45),
(218, '2023-12-04', '1018KPD', 88256, 41.190, 0.00, 1.399, 57.62),
(219, '2023-12-17', '1018KPD', 88964, 41.200, 1.66, 1.305, 53.78),
(220, '2024-01-06', '7630LYR', 13414, 30.720, 1.34, 1.411, 43.36),
(222, '2024-01-07', '1018KPD', 89802, 47.770, 1.91, 1.293, 61.75),
(223, '2024-01-22', '7630LYR', 13903, 25.080, 0.00, 1.479, 37.09),
(224, '2024-01-27', '1018KPD', 90723, 45.250, 0.00, 1.334, 60.37),
(226, '2024-02-11', '7630LYR', 14365, 28.450, 0.00, 1.454, 41.37),
(233, '2024-02-12', '1018KPD', 91672, 48.310, 0.00, 1.449, 70.00),
(235, '2024-02-27', '1018KPD', 92489, 41.990, 0.00, 1.379, 57.91),
(236, '2024-02-29', '7630LYR', 14857, 23.960, 1.12, 1.517, 36.35),
(237, '2024-03-18', '7630LYR', 15287, 13.000, 0.00, 1.538, 20.00),
(239, '2024-03-19', '1018KPD', 93327, 43.850, 0.00, 1.374, 60.25),
(240, '2024-03-25', '7630LYR', 15537, 19.240, 0.00, 1.559, 30.00),
(241, '2024-04-06', '7630LYR', 15935, 29.390, 0.00, 1.479, 43.47),
(242, '2024-04-08', '1018KPD', 94167, 41.110, 0.00, 1.374, 56.49),
(243, '2024-04-22', '7630LYR', 16465, 25.920, 0.00, 1.569, 40.66),
(244, '2024-04-29', '1018KPD', 95042, 43.630, 0.00, 1.445, 63.03),
(247, '2024-05-13', '7630LYR', 16963, 26.800, 0.00, 1.549, 41.51),
(248, '2024-05-21', '1018KPD', 96585, 28.330, 0.00, 1.399, 39.63),
(249, '2024-05-27', '1018KPD', 97597, 49.480, 0.00, 1.373, 67.96),
(250, '2024-05-06', '1018KPD', 96013, 50.590, 0.00, 1.449, 73.32),
(251, '2024-06-03', '1018KPD', 98067, 23.970, 0.00, 1.364, 32.69),
(252, '2024-06-08', '1018KPD', 98609, 28.280, 1.25, 1.430, 40.44),
(253, '2024-06-10', '7630LYR', 17494, 26.720, 0.00, 1.494, 39.92),
(254, '2024-06-17', '1018KPD', 99166, 26.910, 0.00, 1.354, 36.43),
(255, '2024-06-26', '7630LYR', 17879, 18.910, 0.00, 1.504, 28.44),
(257, '2024-06-30', '1018KPD', 100048, 44.390, 0.00, 1.387, 61.57),
(258, '2024-07-10', '7630LYR', 18397, 25.420, 0.00, 1.514, 38.49),
(259, '2024-07-21', '7630LYR', 18944, 27.710, 0.00, 1.454, 40.29),
(260, '2024-07-23', '1018KPD', 101010, 45.250, 0.00, 1.337, 60.52);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `vehiculos`
--
CREATE TABLE `vehiculos` (
`identificador` int(11) NOT NULL,
`marca` text NOT NULL,
`modelo` text NOT NULL,
`matricula` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
--
-- Volcado de datos para la tabla `vehiculos`
--
INSERT INTO `vehiculos` (`identificador`, `marca`, `modelo`, `matricula`) VALUES
(2, 'Toyota', 'Corolla', '7630LYR'),
(3, 'BMW', '318d', '1018KPD');
--
-- Índices para tablas volcadas
--
--
-- Indices de la tabla `carburante`
--
ALTER TABLE `carburante`
ADD PRIMARY KEY (`identificador`);
--
-- Indices de la tabla `vehiculos`
--
ALTER TABLE `vehiculos`
ADD PRIMARY KEY (`identificador`);
--
-- AUTO_INCREMENT de las tablas volcadas
--
--
-- AUTO_INCREMENT de la tabla `carburante`
--
ALTER TABLE `carburante`
MODIFY `identificador` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=261;
--
-- AUTO_INCREMENT de la tabla `vehiculos`
--
ALTER TABLE `vehiculos`
MODIFY `identificador` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

BIN
AppsPy/RepostajesPy/servicios/instance/repostajes.db View File


BIN
AppsPy/RepostajesPy/servicios/instance/uploads/bmw.jpg View File

Before After
Width: 500  |  Height: 500  |  Size: 18 KiB

BIN
AppsPy/RepostajesPy/servicios/instance/uploads/born.jpeg View File

Before After
Width: 274  |  Height: 184  |  Size: 6.7 KiB

BIN
AppsPy/RepostajesPy/servicios/instance/uploads/bornintheusa.jpg View File

Before After
Width: 320  |  Height: 320  |  Size: 34 KiB

BIN
AppsPy/RepostajesPy/servicios/instance/uploads/therising.jpeg View File

Before After
Width: 225  |  Height: 225  |  Size: 7.3 KiB

+ 2
- 0
AppsPy/RepostajesPy/servicios/lanza.sh View File

@ -0,0 +1,2 @@
export FLASK_DEBUG=1
python3 -m flask --app repostajes run

+ 55
- 0
AppsPy/RepostajesPy/servicios/repostajes/__init__.py View File

@ -0,0 +1,55 @@
import os
from flask import Flask, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
# init SQLAlchemy so we can use it later in our models
db = SQLAlchemy()
from repostajes import paginas, auth
def create_app():
app = Flask(__name__)
app.config.from_prefixed_env()
app.config['SECRET_KEY'] = 'secret-key-goes-here'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///repostajes.db'
app.config['UPLOAD_FOLDER'] = os.path.join(app.instance_path, 'uploads')
app.config['TEMPLATES_AUTO_RELOAD'] = True
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 16 MB máximo
from .models import db
db.init_app(app)
login_manager = LoginManager()
login_manager.login_view = 'auth.login'
login_manager.init_app(app)
from .models import User
@login_manager.user_loader
def load_user(user_id):
# since the user_id is just the primary key of our user table, use it in the query for the user
return User.query.get(int(user_id))
from . import models
with app.app_context():
db.create_all()
# basededatos.init_app(app)
app.register_blueprint(paginas.bp)
app.register_blueprint(auth.bp)
print(f"Current Environment: {os.getenv('ENVIRONMENT')}")
print(f"Using Database: {app.config.get('SQLALCHEMY_DATABASE_URI')}")
print(f"Directorio de uploads: {app.config.get('UPLOAD_FOLDER')}")
print(f"instance: {app.instance_path}")
return app

+ 84
- 0
AppsPy/RepostajesPy/servicios/repostajes/auth.py View File

@ -0,0 +1,84 @@
from flask import Blueprint, render_template, redirect, url_for, request, flash, current_app
from werkzeug.security import generate_password_hash, check_password_hash
from werkzeug.utils import secure_filename
from flask_login import login_user, logout_user, login_required
from .models import User
import os
from . import db
bp = Blueprint('auth', __name__)
@bp.route('/login')
def login():
return render_template('login.html')
@bp.route('/login', methods=['POST'])
def login_post():
username = request.form.get('username')
password = request.form.get('password')
remember = True if request.form.get('remember') else False
user = User.query.filter_by(username=username).first()
# check if the user actually exists
# take the user-supplied password, hash it, and compare it to the hashed password in the database
if not user or not check_password_hash(user.password, password):
flash('Por favor, comprueba los datos de registro y vuelve a intentarlo.')
return redirect(url_for('auth.login')) # if the user doesn't exist or password is wrong, reload the page
# if the above check passes, then we know the user has the right credentials
login_user(user, remember=remember)
return redirect(url_for('paginas.index'))
@bp.route('/signup')
def signup():
return render_template('signup.html')
@bp.route('/signup', methods=['POST'])
def signup_post():
if 'photo' not in request.files:
flash('No file part')
return redirect(request.url)
username = request.form.get('username')
# email = request.form.get('email')
password = request.form.get('password')
confirm_password = request.form.get('confirm_password')
photo = request.files['photo']
if password != confirm_password:
flash('Passwords do not match.')
return redirect(url_for('auth.signup'))
user = User.query.filter_by(username=username).first() # if this returns a user, then the user already exists in database
if user: # if a user is found, we want to redirect back to signup page so user can try again
flash('Ese usuario ya existe')
return redirect(url_for('auth.signup'))
if photo:
photo_filename = secure_filename(photo.filename)
print("Foto: ", photo_filename)
photo.save(os.path.join(current_app.config['UPLOAD_FOLDER'], photo_filename))
else:
print("No hay foto")
photo_filename = ""
# create a new user with the form data. Hash the password so the plaintext version isn't saved.
new_user = User(username=username, password=generate_password_hash(password, method='pbkdf2:sha256'), photo=photo_filename)
# add the new user to the database
db.session.add(new_user)
db.session.commit()
return redirect(url_for('auth.login'))
@bp.route('/logout')
@login_required
def logout():
logout_user()
return redirect(url_for('paginas.index'))

+ 35
- 0
AppsPy/RepostajesPy/servicios/repostajes/models.py View File

@ -0,0 +1,35 @@
from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin
from . import db
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(150), unique=True, nullable=False)
password = db.Column(db.String(150), nullable=False)
photo = db.Column(db.String(150), nullable=False)
class Vehiculos(db.Model):
id = db.Column(db.Integer, primary_key=True)
marca = db.Column(db.String(100), nullable=False)
modelo = db.Column(db.String(100), nullable=False)
matricula = db.Column(db.Text, nullable=False)
repostajes = db.relationship('Repostajes', backref='vehiculos', lazy=True)
foto = db.Column(db.String(100), nullable=True)
def __repr__(self):
return f'<Vehiculos {self.matricula}>'
class Repostajes(db.Model):
id = db.Column(db.Integer, primary_key=True)
fecha = db.Column(db.Date, nullable=False)
kms = db.Column(db.Integer, nullable=False)
litros = db.Column(db.Integer, nullable=False)
descuento = db.Column(db.Integer, nullable=False)
precioxlitro = db.Column(db.Integer, nullable=False)
importe = db.Column(db.Integer, nullable=False)
vehiculo_id = db.Column(db.Integer, db.ForeignKey('vehiculos.id'), nullable=False)
def __repr__(self):
return f'<Repostajes {self.fecha}>'

+ 175
- 0
AppsPy/RepostajesPy/servicios/repostajes/paginas.py View File

@ -0,0 +1,175 @@
from flask import Blueprint, render_template, request, redirect, url_for, current_app, send_from_directory
from werkzeug.utils import secure_filename
from flask_login import login_user, logout_user, login_required
from sqlalchemy import desc
import datetime
import os
from .models import db, Repostajes, Vehiculos
bp = Blueprint("paginas", __name__)
@bp.route('/')
def index():
vehiculos = Vehiculos.query.all()
repostajes = Repostajes.query.all()
return render_template('index.html', vehiculos=vehiculos, repostajes=repostajes)
@bp.route('/repostajes')
def repostajes():
repostajes = Repostajes.query.all()
return render_template('repostajes.html', repostajes=repostajes)
@bp.route('/vehiculos')
def vehiculos():
vehiculos = Vehiculos.query.all()
#return render_template('vehiculos.html', vehiculos=vehiculos)
return render_template('vehiculoscard.html', vehiculos=vehiculos)
@bp.route('/404')
def cuatrocerocuatro():
return render_template('404.html')
@bp.route('/help')
def help():
return render_template('help.html')
@bp.route('/account')
@login_required
def account():
return render_template('account.html')
"""
@bp.route('/repostaje/<int:repostaje_id>')
def repostaje(repostaje_id):
repostaje = Repostajes.query.get_or_404(repostaje_id)
vehiculo = Vehiculos.query.get_or_404(repostaje.vehiculo_id)
return render_template('repostaje.html', repostaje=repostaje, vehiculo=vehiculo)
"""
@bp.route('/add_repostaje', methods=['GET', 'POST'])
@login_required
def add_repostaje():
if request.method == 'POST':
fecha = datetime.date.fromisoformat(request.form['fecha'])
vehiculo_id = request.form['vehiculo_id']
kms = request.form['kms']
litros = request.form['litros']
importe = request.form['importe']
dtoing = request.form.get('dtoing')
if dtoing:
descuento = int(importe) * 0.03 # Aplico el descuento de ING
else :
descuento = 0 # no se marcó la casilla de descuento ING
totalcondto = int(importe) - descuento
precioxlitro = totalcondto / int(litros)
new_repostaje = Repostajes(fecha=fecha, vehiculo_id=vehiculo_id, kms=kms, litros=litros, importe=totalcondto, descuento=descuento, precioxlitro=precioxlitro)
db.session.add(new_repostaje)
db.session.commit()
return redirect(url_for('paginas.vehiculo', vehiculo_id=vehiculo_id))
vehiculos = Vehiculos.query.all()
return render_template('add_repostaje.html', vehiculos=vehiculos)
@bp.route('/edit_repostaje/<int:repostaje_id>', methods=['GET', 'POST'])
@login_required
def edit_repostaje(repostaje_id):
repostaje = Repostajes.query.get_or_404(repostaje_id)
vehiculos = Vehiculos.query.all()
if request.method == 'POST':
repostaje.fecha = request.form['fecha']
repostaje.vehiculo_id = request.form['vehiculo_id']
repostaje.kms = request.form['kms']
repostaje.litros = request.form['litros']
repostaje.importe = request.form['importe']
db.session.commit()
return redirect(url_for('paginas.repostaje', repostaje_id=repostaje.id))
vehiculos = Vehiculos.query.all()
return render_template('edit_repostaje.html', repostaje=repostaje, vehiculos=vehiculos)
@bp.route('/add_vehiculo', methods=['GET', 'POST'])
@login_required
def add_vehiculo():
if request.method == 'POST':
marca = request.form['marca']
modelo = request.form['modelo']
matricula = request.form['matricula']
# Verificar que el campo 'cover_image' está en request.files
if 'foto' not in request.files:
return "No file part in the request", 400
foto = request.files['foto']
# Verificar que se ha seleccionado un archivo
if foto.filename == '':
return "No selected file", 400
if foto:
image_filename = secure_filename(foto.filename)
foto.save(os.path.join(current_app.config['UPLOAD_FOLDER'], image_filename))
else:
image_filename = None
new_vehiculo = Vehiculos(marca=marca, modelo=modelo, matricula=matricula, foto=image_filename)
db.session.add(new_vehiculo)
db.session.commit()
return redirect(url_for('paginas.index'))
return render_template('add_vehiculo.html')
@bp.route('/edit_vehiculo/<int:vehiculo_id>', methods=['GET', 'POST'])
@login_required
def edit_vehiculo(vehiculo_id):
vehiculo = Vehiculos.query.get_or_404(vehiculo_id)
if request.method == 'POST':
vehiculo.marca = request.form['marca']
vehiculo.modelo = request.form['modelo']
vehiculo.matricula = request.form['matricula']
if 'foto' in request.files:
foto = request.files['foto']
if foto.filename != '':
image_filename = secure_filename(foto.filename)
foto.save(os.path.join(current_app.config['UPLOAD_FOLDER'], image_filename))
vehiculo.foto = image_filename
db.session.commit()
return redirect(url_for('paginas.vehiculo', vehiculo_id=vehiculo.id))
return render_template('edit_vehiculo.html', vehiculo=vehiculo)
@bp.route('/vehiculo/<int:vehiculo_id>')
def vehiculo(vehiculo_id):
vehiculo = Vehiculos.query.get_or_404(vehiculo_id)
repostajes = Repostajes.query.filter_by(vehiculo_id=vehiculo_id).all()
return render_template('vehiculo.html', vehiculo=vehiculo, repostajes=repostajes)
@bp.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(current_app.config['UPLOAD_FOLDER'], filename)
@bp.route('/searchvehiculo')
def searchvehiculo():
query = request.args.get('query', '')
if query:
vehiculos = Vehiculos.query.filter(vehiculo.name.contains(query)).all()
else:
vehiculos = []
return render_template('searchvehiculo.html', query=query, vehiculos=vehiculos)

+ 12
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/css/portal.css
File diff suppressed because it is too large
View File


+ 21
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/images/app-logo.svg View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="215px" height="215px" viewBox="0 0 215 215" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 52.6 (67491) - http://www.bohemiancoding.com/sketch -->
<title>portal-logo</title>
<desc>Created with Sketch.</desc>
<defs>
<path d="M51.165,8.742 C54.505,12.619 56.876,17.365 57.892,22.588 C60.148,17.225 65.452,13.46 71.636,13.46 C79.867,13.46 86.541,20.134 86.541,28.365 C86.541,36.597 79.867,43.269 71.636,43.269 C63.404,43.269 56.728,36.597 56.728,28.365 C56.728,12.7 44.03,0 28.365,0 C12.7,0 0,12.7 0,28.365 C0,44.031 12.7,56.731 28.365,56.731 C36.419,56.731 43.695,53.393 48.858,48.003 C45.501,44.117 43.128,39.383 42.108,34.14 C39.852,39.504 34.548,43.269 28.365,43.269 C20.133,43.269 13.46,36.597 13.46,28.365 C13.46,20.134 20.133,13.46 28.365,13.46 C36.966,13.46 43.27,20.577 43.27,28.365 C43.27,44.031 55.97,56.731 71.636,56.731 C87.3,56.731 100,44.031 100,28.365 C100,12.7 87.3,0 71.636,0 C63.589,0 56.327,3.358 51.165,8.742 Z" id="path-1"></path>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="portal-logo">
<circle id="Oval" fill="#51B37F" fill-rule="nonzero" cx="107.5" cy="107.5" r="107.5"></circle>
<g id="logo" transform="translate(58.000000, 79.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Clip-2"></g>
<polygon id="Fill-1" fill="#FFFFFE" mask="url(#mask-2)" points="-5 61.73 105 61.73 105 -5 -5 -5"></polygon>
</g>
</g>
</g>
</svg>

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/background/background-1.jpg View File

Before After
Width: 1000  |  Height: 1139  |  Size: 150 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/background/background-2.jpg View File

Before After
Width: 1200  |  Height: 781  |  Size: 232 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/background/background-3.jpg View File

Before After
Width: 1200  |  Height: 789  |  Size: 256 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/background/background-palmeras.jpg View File

Before After
Width: 1000  |  Height: 1139  |  Size: 360 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/doc-thumb-1.jpg View File

Before After
Width: 600  |  Height: 432  |  Size: 75 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/doc-thumb-2.jpg View File

Before After
Width: 600  |  Height: 472  |  Size: 75 KiB

+ 21
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/images/portal-logo.svg View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="215px" height="215px" viewBox="0 0 215 215" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 52.6 (67491) - http://www.bohemiancoding.com/sketch -->
<title>portal-logo</title>
<desc>Created with Sketch.</desc>
<defs>
<path d="M51.165,8.742 C54.505,12.619 56.876,17.365 57.892,22.588 C60.148,17.225 65.452,13.46 71.636,13.46 C79.867,13.46 86.541,20.134 86.541,28.365 C86.541,36.597 79.867,43.269 71.636,43.269 C63.404,43.269 56.728,36.597 56.728,28.365 C56.728,12.7 44.03,0 28.365,0 C12.7,0 0,12.7 0,28.365 C0,44.031 12.7,56.731 28.365,56.731 C36.419,56.731 43.695,53.393 48.858,48.003 C45.501,44.117 43.128,39.383 42.108,34.14 C39.852,39.504 34.548,43.269 28.365,43.269 C20.133,43.269 13.46,36.597 13.46,28.365 C13.46,20.134 20.133,13.46 28.365,13.46 C36.966,13.46 43.27,20.577 43.27,28.365 C43.27,44.031 55.97,56.731 71.636,56.731 C87.3,56.731 100,44.031 100,28.365 C100,12.7 87.3,0 71.636,0 C63.589,0 56.327,3.358 51.165,8.742 Z" id="path-1"></path>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="portal-logo">
<circle id="Oval" fill="#09B6CA" fill-rule="nonzero" cx="107.5" cy="107.5" r="107.5"></circle>
<g id="logo" transform="translate(58.000000, 79.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Clip-2"></g>
<polygon id="Fill-1" fill="#FFFFFE" mask="url(#mask-2)" points="-5 61.73 105 61.73 105 -5 -5 -5"></polygon>
</g>
</g>
</g>
</svg>

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/profiles/profile-1.png View File

Before After
Width: 120  |  Height: 120  |  Size: 34 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/profiles/profile-2.png View File

Before After
Width: 120  |  Height: 120  |  Size: 35 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/profiles/profile-3.png View File

Before After
Width: 120  |  Height: 120  |  Size: 37 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/profiles/profile-4.png View File

Before After
Width: 120  |  Height: 120  |  Size: 22 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/profiles/profile-5.png View File

Before After
Width: 120  |  Height: 120  |  Size: 36 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/profiles/profile-6.png View File

Before After
Width: 120  |  Height: 120  |  Size: 29 KiB

+ 18
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/images/reymota-logo.svg View File

@ -0,0 +1,18 @@
<svg width="400" height="400" xmlns="http://www.w3.org/2000/svg">
<!-- Fondo -->
<rect width="400" height="400" fill="#ffffff" />
<!-- Corona -->
<g transform="translate(100, 100) scale(2)">
<polygon points="50,150 75,50 100,150" fill="#FFD700" />
<polygon points="0,150 50,0 100,150" fill="#FFD700" />
<polygon points="100,150 125,50 150,150" fill="#FFD700" />
</g>
<!-- Letra R -->
<!--
<text x="100" y="360" font-family="Arial, sans-serif" font-size="400" fill="#000000" font-weight="bold">R</text>
-->
<text x="100" y="360" font-family="Open Sans" font-size="400" fill="#000000" font-weight="bold">R</text>
</svg>

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/user.png View File

Before After
Width: 120  |  Height: 120  |  Size: 38 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-1.jpg View File

Before After
Width: 200  |  Height: 200  |  Size: 48 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-2.jpg View File

Before After
Width: 350  |  Height: 350  |  Size: 28 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-3.jpg View File

Before After
Width: 200  |  Height: 200  |  Size: 40 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-4.jpg View File

Before After
Width: 240  |  Height: 240  |  Size: 7.2 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-5.jpg View File

Before After
Width: 240  |  Height: 240  |  Size: 22 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-6.jpg View File

Before After
Width: 240  |  Height: 240  |  Size: 9.1 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-7.jpg View File

Before After
Width: 240  |  Height: 240  |  Size: 22 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-8.jpg View File

Before After
Width: 240  |  Height: 240  |  Size: 12 KiB

BIN
AppsPy/RepostajesPy/servicios/repostajes/static/images/users/user-9.jpg View File

Before After
Width: 240  |  Height: 240  |  Size: 32 KiB

+ 96
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/js/app.js View File

@ -0,0 +1,96 @@
'use strict';
/* ===== Enable Bootstrap Popover (on element ====== */
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
/* ==== Enable Bootstrap Alert ====== */
//var alertList = document.querySelectorAll('.alert')
//alertList.forEach(function (alert) {
// new bootstrap.Alert(alert)
//});
const alertList = document.querySelectorAll('.alert')
const alerts = [...alertList].map(element => new bootstrap.Alert(element))
/* ===== Responsive Sidepanel ====== */
const sidePanelToggler = document.getElementById('sidepanel-toggler');
const sidePanel = document.getElementById('app-sidepanel');
const sidePanelDrop = document.getElementById('sidepanel-drop');
const sidePanelClose = document.getElementById('sidepanel-close');
window.addEventListener('load', function(){
responsiveSidePanel();
});
window.addEventListener('resize', function(){
responsiveSidePanel();
});
function responsiveSidePanel() {
let w = window.innerWidth;
if(w >= 1200) {
// if larger
//console.log('larger');
sidePanel.classList.remove('sidepanel-hidden');
sidePanel.classList.add('sidepanel-visible');
} else {
// if smaller
//console.log('smaller');
sidePanel.classList.remove('sidepanel-visible');
sidePanel.classList.add('sidepanel-hidden');
}
};
sidePanelToggler.addEventListener('click', () => {
if (sidePanel.classList.contains('sidepanel-visible')) {
console.log('visible');
sidePanel.classList.remove('sidepanel-visible');
sidePanel.classList.add('sidepanel-hidden');
} else {
console.log('hidden');
sidePanel.classList.remove('sidepanel-hidden');
sidePanel.classList.add('sidepanel-visible');
}
});
sidePanelClose.addEventListener('click', (e) => {
e.preventDefault();
sidePanelToggler.click();
});
sidePanelDrop.addEventListener('click', (e) => {
sidePanelToggler.click();
});
/* ====== Mobile search ======= */
const searchMobileTrigger = document.querySelector('.search-mobile-trigger');
const searchBox = document.querySelector('.app-search-box');
searchMobileTrigger.addEventListener('click', () => {
searchBox.classList.toggle('is-visible');
let searchMobileTriggerIcon = document.querySelector('.search-mobile-trigger-icon');
if(searchMobileTriggerIcon.classList.contains('fa-magnifying-glass')) {
searchMobileTriggerIcon.classList.remove('fa-magnifying-glass');
searchMobileTriggerIcon.classList.add('fa-xmark');
} else {
searchMobileTriggerIcon.classList.remove('fa-xmark');
searchMobileTriggerIcon.classList.add('fa-magnifying-glass');
}
});

+ 366
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/js/charts-demo.js View File

@ -0,0 +1,366 @@
'use strict';
/* Chart.js docs: https://www.chartjs.org/ */
window.chartColors = {
green: '#75c181', // rgba(117,193,129, 1)
blue: '#5b99ea', // rgba(91,153,234, 1)
gray: '#a9b5c9',
text: '#252930',
border: '#e7e9ed'
};
/* Random number generator for demo purpose */
var randomDataPoint = function(){ return Math.round(Math.random()*100)};
//Area line Chart Demo
var lineChartConfig = {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
datasets: [{
label: 'Dataset',
backgroundColor: "rgba(117,193,129,0.2)",
borderColor: "rgba(117,193,129, 0.8)",
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint()
],
}]
},
options: {
responsive: true,
legend: {
display: true,
position: 'bottom',
align: 'end',
},
tooltips: {
mode: 'index',
intersect: false,
titleMarginBottom: 10,
bodySpacing: 10,
xPadding: 16,
yPadding: 16,
borderColor: window.chartColors.border,
borderWidth: 1,
backgroundColor: '#fff',
bodyFontColor: window.chartColors.text,
titleFontColor: window.chartColors.text,
callbacks: {
label: function(tooltipItem, data) {
return tooltipItem.value + '%';
}
},
},
hover: {
mode: 'nearest',
intersect: true
},
scales: {
xAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.border,
},
scaleLabel: {
display: false,
}
}],
yAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.border,
},
scaleLabel: {
display: false,
},
ticks: {
beginAtZero: true,
userCallback: function(value, index, values) {
return value.toLocaleString() + '%';
}
},
}]
}
}
};
//Bar Chart Demo
var barChartConfig = {
type: 'bar',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
datasets: [{
label: 'Dataset 1',
backgroundColor: "rgba(117,193,129,0.8)",
hoverBackgroundColor: "rgba(117,193,129,1)",
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint()
]
},
{
label: 'Dataset 2',
backgroundColor: "rgba(91,153,234,0.8)",
hoverBackgroundColor: "rgba(91,153,234,1)",
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint()
]
}
]
},
options: {
responsive: true,
legend: {
position: 'bottom',
align: 'end',
},
tooltips: {
mode: 'index',
intersect: false,
titleMarginBottom: 10,
bodySpacing: 10,
xPadding: 16,
yPadding: 16,
borderColor: window.chartColors.border,
borderWidth: 1,
backgroundColor: '#fff',
bodyFontColor: window.chartColors.text,
titleFontColor: window.chartColors.text,
callbacks: {
label: function(tooltipItem, data) {
return tooltipItem.value + '%';
}
},
},
scales: {
xAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.border,
},
}],
yAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.borders,
},
ticks: {
beginAtZero: true,
userCallback: function(value, index, values) {
return value + '%';
}
},
}]
}
}
}
// Pie Chart Demo
var pieChartConfig = {
type: 'pie',
data: {
datasets: [{
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
],
backgroundColor: [
window.chartColors.green,
window.chartColors.blue,
window.chartColors.gray,
],
label: 'Dataset 1'
}],
labels: [
'Green',
'Blue',
'Gray',
]
},
options: {
responsive: true,
legend: {
display: true,
position: 'bottom',
align: 'center',
},
tooltips: {
titleMarginBottom: 10,
bodySpacing: 10,
xPadding: 16,
yPadding: 16,
borderColor: window.chartColors.border,
borderWidth: 1,
backgroundColor: '#fff',
bodyFontColor: window.chartColors.text,
titleFontColor: window.chartColors.text,
/* Display % in tooltip - https://stackoverflow.com/questions/37257034/chart-js-2-0-doughnut-tooltip-percentages */
callbacks: {
label: function(tooltipItem, data) {
//get the concerned dataset
var dataset = data.datasets[tooltipItem.datasetIndex];
//calculate the total of this data set
var total = dataset.data.reduce(function(previousValue, currentValue, currentIndex, array) {
return previousValue + currentValue;
});
//get the current items value
var currentValue = dataset.data[tooltipItem.index];
//calculate the precentage based on the total and current item, also this does a rough rounding to give a whole number
var percentage = Math.floor(((currentValue/total) * 100)+0.5);
return percentage + "%";
},
},
},
}
};
// Doughnut Chart Demo
var doughnutChartConfig = {
type: 'doughnut',
data: {
datasets: [{
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
],
backgroundColor: [
window.chartColors.green,
window.chartColors.blue,
window.chartColors.gray,
],
label: 'Dataset 1'
}],
labels: [
'Green',
'Blue',
'Gray',
]
},
options: {
responsive: true,
legend: {
display: true,
position: 'bottom',
align: 'center',
},
tooltips: {
titleMarginBottom: 10,
bodySpacing: 10,
xPadding: 16,
yPadding: 16,
borderColor: window.chartColors.border,
borderWidth: 1,
backgroundColor: '#fff',
bodyFontColor: window.chartColors.text,
titleFontColor: window.chartColors.text,
animation: {
animateScale: true,
animateRotate: true
},
/* Display % in tooltip - https://stackoverflow.com/questions/37257034/chart-js-2-0-doughnut-tooltip-percentages */
callbacks: {
label: function(tooltipItem, data) {
//get the concerned dataset
var dataset = data.datasets[tooltipItem.datasetIndex];
//calculate the total of this data set
var total = dataset.data.reduce(function(previousValue, currentValue, currentIndex, array) {
return previousValue + currentValue;
});
//get the current items value
var currentValue = dataset.data[tooltipItem.index];
//calculate the precentage based on the total and current item, also this does a rough rounding to give a whole number
var percentage = Math.floor(((currentValue/total) * 100)+0.5);
return percentage + "%";
},
},
},
}
};
// Generate charts on load
window.addEventListener('load', function(){
var lineChart = document.getElementById('chart-line').getContext('2d');
window.myLine = new Chart(lineChart, lineChartConfig);
var barChart = document.getElementById('chart-bar').getContext('2d');
window.myBar = new Chart(barChart, barChartConfig);
var pieChart = document.getElementById('chart-pie').getContext('2d');
window.myPie = new Chart(pieChart, pieChartConfig);
var doughnutChart = document.getElementById('chart-doughnut').getContext('2d');
window.myDoughnut = new Chart(doughnutChart, doughnutChartConfig);
});

+ 224
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/js/index-charts.js View File

@ -0,0 +1,224 @@
'use strict';
/* Chart.js docs: https://www.chartjs.org/ */
window.chartColors = {
green: '#75c181',
gray: '#a9b5c9',
text: '#252930',
border: '#e7e9ed'
};
/* Random number generator for demo purpose */
var randomDataPoint = function(){ return Math.round(Math.random()*10000)};
//Chart.js Line Chart Example
var lineChartConfig = {
type: 'line',
data: {
labels: ['Day 1', 'Day 2', 'Day 3', 'Day 4', 'Day 5', 'Day 6', 'Day 7'],
datasets: [{
label: 'Current week',
fill: false,
backgroundColor: window.chartColors.green,
borderColor: window.chartColors.green,
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint()
],
}, {
label: 'Previous week',
borderDash: [3, 5],
backgroundColor: window.chartColors.gray,
borderColor: window.chartColors.gray,
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint()
],
fill: false,
}]
},
options: {
responsive: true,
aspectRatio: 1.5,
legend: {
display: true,
position: 'bottom',
align: 'end',
},
title: {
display: true,
text: 'Chart.js Line Chart Example',
},
tooltips: {
mode: 'index',
intersect: false,
titleMarginBottom: 10,
bodySpacing: 10,
xPadding: 16,
yPadding: 16,
borderColor: window.chartColors.border,
borderWidth: 1,
backgroundColor: '#fff',
bodyFontColor: window.chartColors.text,
titleFontColor: window.chartColors.text,
callbacks: {
//Ref: https://stackoverflow.com/questions/38800226/chart-js-add-commas-to-tooltip-and-y-axis
label: function(tooltipItem, data) {
if (parseInt(tooltipItem.value) >= 1000) {
return "$" + tooltipItem.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
} else {
return '$' + tooltipItem.value;
}
}
},
},
hover: {
mode: 'nearest',
intersect: true
},
scales: {
xAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.border,
},
scaleLabel: {
display: false,
}
}],
yAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.border,
},
scaleLabel: {
display: false,
},
ticks: {
beginAtZero: true,
userCallback: function(value, index, values) {
return '$' + value.toLocaleString(); //Ref: https://stackoverflow.com/questions/38800226/chart-js-add-commas-to-tooltip-and-y-axis
}
},
}]
}
}
};
// Chart.js Bar Chart Example
var barChartConfig = {
type: 'bar',
data: {
labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
datasets: [{
label: 'Orders',
backgroundColor: window.chartColors.green,
borderColor: window.chartColors.green,
borderWidth: 1,
maxBarThickness: 16,
data: [
23,
45,
76,
75,
62,
37,
83
]
}]
},
options: {
responsive: true,
aspectRatio: 1.5,
legend: {
position: 'bottom',
align: 'end',
},
title: {
display: true,
text: 'Chart.js Bar Chart Example'
},
tooltips: {
mode: 'index',
intersect: false,
titleMarginBottom: 10,
bodySpacing: 10,
xPadding: 16,
yPadding: 16,
borderColor: window.chartColors.border,
borderWidth: 1,
backgroundColor: '#fff',
bodyFontColor: window.chartColors.text,
titleFontColor: window.chartColors.text,
},
scales: {
xAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.border,
},
}],
yAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.borders,
},
}]
}
}
}
// Generate charts on load
window.addEventListener('load', function(){
var lineChart = document.getElementById('canvas-linechart').getContext('2d');
window.myLine = new Chart(lineChart, lineChartConfig);
var barChart = document.getElementById('canvas-barchart').getContext('2d');
window.myBar = new Chart(barChart, barChartConfig);
});

+ 4085
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.min.css.map
File diff suppressed because it is too large
View File


+ 4084
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.min.css.map
File diff suppressed because it is too large
View File


+ 593
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.css View File

@ -0,0 +1,593 @@
/*!
* Bootstrap Reboot v5.3.0 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-black: #000;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-primary-text-emphasis: #052c65;
--bs-secondary-text-emphasis: #2b2f32;
--bs-success-text-emphasis: #0a3622;
--bs-info-text-emphasis: #055160;
--bs-warning-text-emphasis: #664d03;
--bs-danger-text-emphasis: #58151c;
--bs-light-text-emphasis: #495057;
--bs-dark-text-emphasis: #495057;
--bs-primary-bg-subtle: #cfe2ff;
--bs-secondary-bg-subtle: #e2e3e5;
--bs-success-bg-subtle: #d1e7dd;
--bs-info-bg-subtle: #cff4fc;
--bs-warning-bg-subtle: #fff3cd;
--bs-danger-bg-subtle: #f8d7da;
--bs-light-bg-subtle: #fcfcfd;
--bs-dark-bg-subtle: #ced4da;
--bs-primary-border-subtle: #9ec5fe;
--bs-secondary-border-subtle: #c4c8cb;
--bs-success-border-subtle: #a3cfbb;
--bs-info-border-subtle: #9eeaf9;
--bs-warning-border-subtle: #ffe69c;
--bs-danger-border-subtle: #f1aeb5;
--bs-light-border-subtle: #e9ecef;
--bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg: #fff;
--bs-body-bg-rgb: 255, 255, 255;
--bs-emphasis-color: #000;
--bs-emphasis-color-rgb: 0, 0, 0;
--bs-secondary-color: rgba(33, 37, 41, 0.75);
--bs-secondary-color-rgb: 33, 37, 41;
--bs-secondary-bg: #e9ecef;
--bs-secondary-bg-rgb: 233, 236, 239;
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
--bs-tertiary-color-rgb: 33, 37, 41;
--bs-tertiary-bg: #f8f9fa;
--bs-tertiary-bg-rgb: 248, 249, 250;
--bs-heading-color: inherit;
--bs-link-color: #0d6efd;
--bs-link-color-rgb: 13, 110, 253;
--bs-link-decoration: underline;
--bs-link-hover-color: #0a58ca;
--bs-link-hover-color-rgb: 10, 88, 202;
--bs-code-color: #d63384;
--bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
--bs-border-radius: 0.375rem;
--bs-border-radius-sm: 0.25rem;
--bs-border-radius-lg: 0.5rem;
--bs-border-radius-xl: 1rem;
--bs-border-radius-xxl: 2rem;
--bs-border-radius-2xl: var(--bs-border-radius-xxl);
--bs-border-radius-pill: 50rem;
--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);
--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);
--bs-focus-ring-width: 0.25rem;
--bs-focus-ring-opacity: 0.25;
--bs-focus-ring-color: rgba(13, 110, 253, 0.25);
--bs-form-valid-color: #198754;
--bs-form-valid-border-color: #198754;
--bs-form-invalid-color: #dc3545;
--bs-form-invalid-border-color: #dc3545;
}
[data-bs-theme=dark] {
color-scheme: dark;
--bs-body-color: #adb5bd;
--bs-body-color-rgb: 173, 181, 189;
--bs-body-bg: #212529;
--bs-body-bg-rgb: 33, 37, 41;
--bs-emphasis-color: #fff;
--bs-emphasis-color-rgb: 255, 255, 255;
--bs-secondary-color: rgba(173, 181, 189, 0.75);
--bs-secondary-color-rgb: 173, 181, 189;
--bs-secondary-bg: #343a40;
--bs-secondary-bg-rgb: 52, 58, 64;
--bs-tertiary-color: rgba(173, 181, 189, 0.5);
--bs-tertiary-color-rgb: 173, 181, 189;
--bs-tertiary-bg: #2b3035;
--bs-tertiary-bg-rgb: 43, 48, 53;
--bs-primary-text-emphasis: #6ea8fe;
--bs-secondary-text-emphasis: #a7acb1;
--bs-success-text-emphasis: #75b798;
--bs-info-text-emphasis: #6edff6;
--bs-warning-text-emphasis: #ffda6a;
--bs-danger-text-emphasis: #ea868f;
--bs-light-text-emphasis: #f8f9fa;
--bs-dark-text-emphasis: #dee2e6;
--bs-primary-bg-subtle: #031633;
--bs-secondary-bg-subtle: #161719;
--bs-success-bg-subtle: #051b11;
--bs-info-bg-subtle: #032830;
--bs-warning-bg-subtle: #332701;
--bs-danger-bg-subtle: #2c0b0e;
--bs-light-bg-subtle: #343a40;
--bs-dark-bg-subtle: #1a1d20;
--bs-primary-border-subtle: #084298;
--bs-secondary-border-subtle: #41464b;
--bs-success-border-subtle: #0f5132;
--bs-info-border-subtle: #087990;
--bs-warning-border-subtle: #997404;
--bs-danger-border-subtle: #842029;
--bs-light-border-subtle: #495057;
--bs-dark-border-subtle: #343a40;
--bs-heading-color: inherit;
--bs-link-color: #6ea8fe;
--bs-link-hover-color: #8bb9fe;
--bs-link-color-rgb: 110, 168, 254;
--bs-link-hover-color-rgb: 139, 185, 254;
--bs-code-color: #e685b5;
--bs-border-color: #495057;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
--bs-form-valid-color: #75b798;
--bs-form-valid-border-color: #75b798;
--bs-form-invalid-color: #ea868f;
--bs-form-invalid-border-color: #ea868f;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
border: 0;
border-top: var(--bs-border-width) solid;
opacity: 0.25;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
color: var(--bs-heading-color);
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-left: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.1875em;
background-color: var(--bs-highlight-bg);
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline;
}
a:hover {
--bs-link-color-rgb: var(--bs-link-hover-color-rgb);
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: var(--bs-font-monospace);
font-size: 1em;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: var(--bs-code-color);
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.1875rem 0.375rem;
font-size: 0.875em;
color: var(--bs-body-bg);
background-color: var(--bs-body-color);
border-radius: 0.25rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: var(--bs-secondary-color);
text-align: left;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
display: none !important;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: left;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: left;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
outline-offset: -2px;
-webkit-appearance: textfield;
}
/* rtl:raw:
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
::file-selector-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.css.map */

+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.min.css.map
File diff suppressed because it is too large
View File


+ 590
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.css View File

@ -0,0 +1,590 @@
/*!
* Bootstrap Reboot v5.3.0 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-black: #000;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-primary-text-emphasis: #052c65;
--bs-secondary-text-emphasis: #2b2f32;
--bs-success-text-emphasis: #0a3622;
--bs-info-text-emphasis: #055160;
--bs-warning-text-emphasis: #664d03;
--bs-danger-text-emphasis: #58151c;
--bs-light-text-emphasis: #495057;
--bs-dark-text-emphasis: #495057;
--bs-primary-bg-subtle: #cfe2ff;
--bs-secondary-bg-subtle: #e2e3e5;
--bs-success-bg-subtle: #d1e7dd;
--bs-info-bg-subtle: #cff4fc;
--bs-warning-bg-subtle: #fff3cd;
--bs-danger-bg-subtle: #f8d7da;
--bs-light-bg-subtle: #fcfcfd;
--bs-dark-bg-subtle: #ced4da;
--bs-primary-border-subtle: #9ec5fe;
--bs-secondary-border-subtle: #c4c8cb;
--bs-success-border-subtle: #a3cfbb;
--bs-info-border-subtle: #9eeaf9;
--bs-warning-border-subtle: #ffe69c;
--bs-danger-border-subtle: #f1aeb5;
--bs-light-border-subtle: #e9ecef;
--bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg: #fff;
--bs-body-bg-rgb: 255, 255, 255;
--bs-emphasis-color: #000;
--bs-emphasis-color-rgb: 0, 0, 0;
--bs-secondary-color: rgba(33, 37, 41, 0.75);
--bs-secondary-color-rgb: 33, 37, 41;
--bs-secondary-bg: #e9ecef;
--bs-secondary-bg-rgb: 233, 236, 239;
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
--bs-tertiary-color-rgb: 33, 37, 41;
--bs-tertiary-bg: #f8f9fa;
--bs-tertiary-bg-rgb: 248, 249, 250;
--bs-heading-color: inherit;
--bs-link-color: #0d6efd;
--bs-link-color-rgb: 13, 110, 253;
--bs-link-decoration: underline;
--bs-link-hover-color: #0a58ca;
--bs-link-hover-color-rgb: 10, 88, 202;
--bs-code-color: #d63384;
--bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
--bs-border-radius: 0.375rem;
--bs-border-radius-sm: 0.25rem;
--bs-border-radius-lg: 0.5rem;
--bs-border-radius-xl: 1rem;
--bs-border-radius-xxl: 2rem;
--bs-border-radius-2xl: var(--bs-border-radius-xxl);
--bs-border-radius-pill: 50rem;
--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);
--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);
--bs-focus-ring-width: 0.25rem;
--bs-focus-ring-opacity: 0.25;
--bs-focus-ring-color: rgba(13, 110, 253, 0.25);
--bs-form-valid-color: #198754;
--bs-form-valid-border-color: #198754;
--bs-form-invalid-color: #dc3545;
--bs-form-invalid-border-color: #dc3545;
}
[data-bs-theme=dark] {
color-scheme: dark;
--bs-body-color: #adb5bd;
--bs-body-color-rgb: 173, 181, 189;
--bs-body-bg: #212529;
--bs-body-bg-rgb: 33, 37, 41;
--bs-emphasis-color: #fff;
--bs-emphasis-color-rgb: 255, 255, 255;
--bs-secondary-color: rgba(173, 181, 189, 0.75);
--bs-secondary-color-rgb: 173, 181, 189;
--bs-secondary-bg: #343a40;
--bs-secondary-bg-rgb: 52, 58, 64;
--bs-tertiary-color: rgba(173, 181, 189, 0.5);
--bs-tertiary-color-rgb: 173, 181, 189;
--bs-tertiary-bg: #2b3035;
--bs-tertiary-bg-rgb: 43, 48, 53;
--bs-primary-text-emphasis: #6ea8fe;
--bs-secondary-text-emphasis: #a7acb1;
--bs-success-text-emphasis: #75b798;
--bs-info-text-emphasis: #6edff6;
--bs-warning-text-emphasis: #ffda6a;
--bs-danger-text-emphasis: #ea868f;
--bs-light-text-emphasis: #f8f9fa;
--bs-dark-text-emphasis: #dee2e6;
--bs-primary-bg-subtle: #031633;
--bs-secondary-bg-subtle: #161719;
--bs-success-bg-subtle: #051b11;
--bs-info-bg-subtle: #032830;
--bs-warning-bg-subtle: #332701;
--bs-danger-bg-subtle: #2c0b0e;
--bs-light-bg-subtle: #343a40;
--bs-dark-bg-subtle: #1a1d20;
--bs-primary-border-subtle: #084298;
--bs-secondary-border-subtle: #41464b;
--bs-success-border-subtle: #0f5132;
--bs-info-border-subtle: #087990;
--bs-warning-border-subtle: #997404;
--bs-danger-border-subtle: #842029;
--bs-light-border-subtle: #495057;
--bs-dark-border-subtle: #343a40;
--bs-heading-color: inherit;
--bs-link-color: #6ea8fe;
--bs-link-hover-color: #8bb9fe;
--bs-link-color-rgb: 110, 168, 254;
--bs-link-hover-color-rgb: 139, 185, 254;
--bs-code-color: #e685b5;
--bs-border-color: #495057;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
--bs-form-valid-color: #75b798;
--bs-form-valid-border-color: #75b798;
--bs-form-invalid-color: #ea868f;
--bs-form-invalid-border-color: #ea868f;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
border: 0;
border-top: var(--bs-border-width) solid;
opacity: 0.25;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
color: var(--bs-heading-color);
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-right: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-right: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.1875em;
background-color: var(--bs-highlight-bg);
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline;
}
a:hover {
--bs-link-color-rgb: var(--bs-link-hover-color-rgb);
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: var(--bs-font-monospace);
font-size: 1em;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: var(--bs-code-color);
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.1875rem 0.375rem;
font-size: 0.875em;
color: var(--bs-body-bg);
background-color: var(--bs-body-color);
border-radius: 0.25rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: var(--bs-secondary-color);
text-align: right;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
display: none !important;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: right;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: right;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
outline-offset: -2px;
-webkit-appearance: textfield;
}
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
::file-selector-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */

+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.min.css.map
File diff suppressed because it is too large
View File


+ 5399
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.min.css.map
File diff suppressed because it is too large
View File


+ 5390
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.min.css.map
File diff suppressed because it is too large
View File


+ 12071
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.min.css.map
File diff suppressed because it is too large
View File


+ 12035
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.min.css.map
File diff suppressed because it is too large
View File


+ 6306
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.js
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.js.map
File diff suppressed because it is too large
View File


+ 7
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.min.js.map
File diff suppressed because it is too large
View File


+ 4439
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.esm.js
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.esm.js.map
File diff suppressed because it is too large
View File


+ 7
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.esm.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.esm.min.js.map
File diff suppressed because it is too large
View File


+ 4486
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.js
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.js.map
File diff suppressed because it is too large
View File


+ 7
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/bootstrap/js/bootstrap.min.js.map
File diff suppressed because it is too large
View File


+ 7
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/chart.js/chart.min.js
File diff suppressed because it is too large
View File


+ 165
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/fontawesome/LICENSE.txt View File

@ -0,0 +1,165 @@
Fonticons, Inc. (https://fontawesome.com)
--------------------------------------------------------------------------------
Font Awesome Free License
Font Awesome Free is free, open source, and GPL friendly. You can use it for
commercial projects, open source projects, or really almost whatever you want.
Full Font Awesome Free license: https://fontawesome.com/license/free.
--------------------------------------------------------------------------------
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
The Font Awesome Free download is licensed under a Creative Commons
Attribution 4.0 International License and applies to all icons packaged
as SVG and JS file types.
--------------------------------------------------------------------------------
# Fonts: SIL OFL 1.1 License
In the Font Awesome Free download, the SIL OFL license applies to all icons
packaged as web and desktop font files.
Copyright (c) 2023 Fonticons, Inc. (https://fontawesome.com)
with Reserved Font Name: "Font Awesome".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE
Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting — in part or in whole — any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
--------------------------------------------------------------------------------
# Code: MIT License (https://opensource.org/licenses/MIT)
In the Font Awesome Free download, the MIT license applies to all non-font and
non-icon files.
Copyright 2023 Fonticons, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in the
Software without restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so, subject to the
following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
# Attribution
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
Awesome Free files already contain embedded comments with sufficient
attribution, so you shouldn't need to do anything additional when using these
files normally.
We've kept attribution comments terse, so we ask that you do not actively work
to remove them from files, especially code. They're a great way for folks to
learn about Font Awesome.
--------------------------------------------------------------------------------
# Brand Icons
All brand icons are trademarks of their respective owners. The use of these
trademarks does not indicate endorsement of the trademark holder by Font
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
to represent the company, product, or service to which they refer.**

+ 7955
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/fontawesome/css/all.css
File diff suppressed because it is too large
View File


+ 9
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/fontawesome/css/all.min.css
File diff suppressed because it is too large
View File


+ 1522
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/fontawesome/css/brands.css
File diff suppressed because it is too large
View File


+ 6
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/fontawesome/css/brands.min.css
File diff suppressed because it is too large
View File


+ 6372
- 0
AppsPy/RepostajesPy/servicios/repostajes/static/plugins/fontawesome/css/fontawesome.css
File diff suppressed because it is too large
View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save