228 Commits
Author SHA1 Message Date
pi-ux-ce 29ea329ed5 remove python cache
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-06-12 10:03:02 +01:00
pi-ux-ce d719af498c reset testing branch 2026-06-12 10:02:37 +01:00
pi-ux-ce b118391dc6 reset testing branch 2026-06-12 09:59:20 +01:00
pi-ux-ce 17d2f3544c wrong cache image
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m37s
2026-06-12 09:54:05 +01:00
pi-ux-ce 25ba693bbd use sqllite as default db for building purpose
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m53s
2026-06-12 09:49:18 +01:00
pi-ux-ce e5406b6549 Merge pull request 'testing' (#9) from testing into main
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 6m52s
Reviewed-on: #9
2026-06-12 08:29:43 +00:00
pi-ux-ce 5fa8ad286f application not renamed
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-06-12 08:29:30 +01:00
pierre geeraert d3061eddaf work on databse model
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-06-11 22:12:00 +01:00
pierre geeraert 883e028cae refactoring
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2s
2026-06-11 20:18:59 +01:00
pierre geeraert 2f4b93d11c removing print function 2026-06-11 20:17:51 +01:00
pierre geeraert 57d7e8feee removing print function
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-06-11 20:16:07 +01:00
pierre geeraert dd3b0b7731 removing cloudmanager_old
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-06-11 19:52:20 +01:00
pierre geeraert c86301c9b2 refactoring
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-06-11 19:51:19 +01:00
pierre geeraert 3079df9072 refactoring
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-06-11 19:19:15 +01:00
pi-ux-ce 1c04605dc7 prototype fo namespace import
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
2026-06-11 11:51:12 +01:00
pierre geeraert 2b8a4ed46f try again something new
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-06-09 22:55:46 +01:00
pierre geeraert 622f2c8758 try again something new
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-06-09 22:52:24 +01:00
pierre geeraert 4e6637aba9 Revert "try new method"
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2s
This reverts commit c6784759cd.
2026-06-09 22:47:54 +01:00
pierre geeraert c6784759cd try new method
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-06-09 22:45:07 +01:00
pierre geeraert 55f27433f9 try new method
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2s
2026-06-09 22:41:51 +01:00
pierre geeraert 2dd02f0632 try new method
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2s
2026-06-09 22:40:03 +01:00
pierre geeraert 5d4bc9e93b try new method
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-06-09 22:37:54 +01:00
pierre geeraert ccb69a43d2 try new method
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2s
2026-06-09 22:36:20 +01:00
pierre geeraert 36755ccfb0 add the missing return
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5s
2026-06-09 21:46:58 +01:00
pierre geeraert 27dff192f2 now the template adapt depending of the data and tries ajax button without success
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-31 00:25:56 +01:00
pierre geeraert e9dad6bfe5 adding alot of template files
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
2026-03-30 23:40:49 +01:00
pierre geeraert 69d161c19b finding how to target the good one
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-27 00:18:58 +00:00
pierre geeraert 103dcc919e fix scale down and add the down query
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-27 00:08:49 +00:00
pierre geeraert 3eea2ea4a2 need to add the request
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-27 00:05:43 +00:00
pierre geeraert d0a948e93f I was meant to fix it from the start
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
2026-03-27 00:02:02 +00:00
pierre geeraert 2a3c71f939 adding weekday input
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
2026-03-26 23:58:29 +00:00
pierre geeraert 8caa778ee0 add servers down as well
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-26 23:56:39 +00:00
pierre geeraert 5521b70e46 adding custom DB name for the terraform secret that point to the django db not the cmm one
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-26 23:44:59 +00:00
pierre geeraert c8d784ae2b using env variable for DB creds
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
2026-03-26 23:21:52 +00:00
pierre geeraert 910170b594 found the bit of code that deals with days
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-25 23:14:20 +00:00
pierre geeraert 4dee3442b0 actually easy fix
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-25 22:54:55 +00:00
pierre geeraert b38f2a8b2f adding all the files , still work in progress but getting there , needs to move scale_up function to somrthing not managed by REQUEST 2026-03-25 22:53:36 +00:00
pierre geeraert 1e8afcbc44 adding the sql code for the template
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
2026-03-25 22:00:44 +00:00
pierre geeraert 9e2b51de60 adding some mysql function to convert to postgresal
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
2026-03-17 23:26:08 +00:00
pierre geeraert eb0f467aad Merge branch 'testing' of https://gitea.tryton.geeraert.eu/pi-ux-ce/Django_kube into testing 2026-03-17 22:57:20 +00:00
pi-ux-ce da4b86f4d3 no need this anymore
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s
2026-03-17 10:31:21 +00:00
pi-ux-ce b5ef38bc0d try gemini ai idea
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m48s
2026-03-17 10:26:34 +00:00
pi-ux-ce c5b7e9dcde moving the env variables
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m55s
2026-03-17 10:13:24 +00:00
pi-ux-ce b611d41e8a moving the env variables
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 3m41s
2026-03-17 09:51:14 +00:00
pi-ux-ce c3ba43b0fa moving the env variables 2026-03-17 09:47:51 +00:00
pierre geeraert dc0e006e0f change link
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m32s
2026-03-16 23:26:42 +00:00
pierre geeraert 0b66858969 also try for the icon url
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m44s
2026-03-16 23:11:48 +00:00
pierre geeraert 16c8fba623 trying to variablise the title of the blank page
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2026-03-16 23:08:44 +00:00
pierre geeraert 852fccd95c remove extra slash
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m36s
2026-03-16 23:04:11 +00:00
pierre geeraert 316d07db61 default page is set and button to got to favorite ones
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m52s
2026-03-16 22:55:19 +00:00
pierre geeraert bf99f618f6 fetch only latest commit from main branch
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m43s
2026-03-16 22:09:19 +00:00
pierre geeraert 534f0cb7cb move the vars
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m37s
2026-03-16 21:59:35 +00:00
pierre geeraert 974f6820d4 move the vars 2026-03-16 21:53:47 +00:00
pierre geeraert 6ccf910e29 add env variable
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 3m5s
2026-03-16 21:47:03 +00:00
pierre geeraert aaf1ced21c emulate some variables 2026-03-16 21:45:47 +00:00
pi-ux-ce d05a3e2dc6 Merge pull request 'testing' (#8) from testing into main
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 4m7s
Reviewed-on: #8
2026-03-16 21:06:42 +00:00
pierre geeraert 8be8b44584 also variablize DEBUG
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-16 21:03:28 +00:00
pierre geeraert 4a028c04c9 fix the extra s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-16 20:59:41 +00:00
pierre geeraert 1f1d7ab75d convert it to list
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-16 20:59:11 +00:00
pierre geeraert e0e5d9e290 trying to variablise allowed_hosts
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-16 20:33:46 +00:00
pierre geeraert 181eb67501 remove useless imports
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-16 20:21:28 +00:00
pierre geeraert 8af976c528 change path as well
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-16 20:16:01 +00:00
pierre geeraert beba1f16b4 changing path
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2s
2026-03-16 20:14:47 +00:00
pierre geeraert 76d0cbdb8d default url
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-16 20:03:53 +00:00
pierre geeraert 6ff0bb31d3 fix name of the module
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-16 20:03:20 +00:00
pierre geeraert e78825b99f importnt first argument
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-16 19:57:06 +00:00
pi-ux-ce 33a9d6fec7 d
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5s
2026-03-16 18:36:55 +00:00
pi-ux-ce b01145e6bd adding nano
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m40s
2026-03-16 18:33:22 +00:00
pi-ux-ce 06024c82c1 trying like that
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-16 18:30:37 +00:00
pi-ux-ce ce4a4838f1 adding required value
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2s
2026-03-16 18:26:03 +00:00
pi-ux-ce f80cfbeba7 adding required value
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-16 18:24:15 +00:00
pi-ux-ce 61e5966083 missed requirements
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
2026-03-16 18:18:46 +00:00
pi-ux-ce f49a606693 trying this url conf
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-16 18:13:52 +00:00
pi-ux-ce 2b866b32bb enable redirect..tryton.geeraert.eu
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2s
2026-03-16 17:50:55 +00:00
pi-ux-ce 97896b5170 changing the authorised URL
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2026-03-16 14:50:49 +00:00
pi-ux-ce 3647ff15e1 trying to trigger a new image
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s
2026-03-16 14:42:55 +00:00
pi-ux-ce 267f753452 using the testing branch
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2026-03-16 14:36:44 +00:00
pi-ux-ce c33e463e09 addign a restart after restarT
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2026-03-16 14:32:41 +00:00
pi-ux-ce 40cfc3c9f5 prevent main runner to run if there was a testing change 2026-03-16 14:21:39 +00:00
pi-ux-ce 632ba5257e fixing image name
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m39s
2026-03-16 10:42:57 +00:00
pi-ux-ce 7127effdaf trying to setup the django testing image 2026-03-16 10:39:26 +00:00
pi-ux-ce ca3f7e964e change title page
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4m2s
2026-03-03 23:12:26 +00:00
pi-ux-ce 904e779b59 changing the extra >
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m23s
2026-03-03 22:55:55 +00:00
pi-ux-ce 63054b4a3a adding some print
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m56s
2026-02-05 20:11:01 +00:00
pi-ux-ce 871f3c5ba8 put lower var
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 7m54s
2026-02-03 14:51:21 +00:00
pi-ux-ce 9c706bb9b1 Update .gitea/workflows/dockerfile_runner.yaml
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m14s
2026-01-20 00:02:19 +00:00
pi-ux-ce 06c57ca837 try v6
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 2s
2026-01-19 23:55:53 +00:00
pi-ux-ce 39a3ec055b try again
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2026-01-19 23:54:36 +00:00
pi-ux-ce 401cf8e1a7 Update .gitea/workflows/dockerfile_runner.yaml
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 10s
2026-01-19 23:46:19 +00:00
pi-ux-ce f50d624d22 set git location
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 10s
2026-01-19 23:45:27 +00:00
pi-ux-ce 4aeee1acb5 manually git pull
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 7s
2026-01-19 23:43:31 +00:00
pi-ux-ce b6a9cfed19 do not clean before checkout
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2026-01-19 23:36:15 +00:00
pi-ux-ce a67dcf763b trigger new build
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2026-01-19 23:31:52 +00:00
pi-ux-ce 0f58c2dcae only if present
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4m12s
2026-01-19 20:53:13 +00:00
pi-ux-ce 9cb1418b0d avoid crashing if no source file
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 10s
2026-01-19 20:48:49 +00:00
pi-ux-ce f62e6ca651 trying to cache git folder
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 8s
2026-01-19 20:47:06 +00:00
pi-ux-ce 0c6ddd4904 trying host_runner
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4m38s
2026-01-19 19:46:48 +00:00
Pierre Geeraert 14d4dbfe97 update runner to add curl
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2026-01-19 17:53:28 +00:00
Pierre Geeraert 50d0c2cd4d debug
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 5m57s
2026-01-19 17:43:25 +00:00
Pierre Geeraert 4fe45169c3 try with the exact version of the runner
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1m36s
2026-01-19 17:40:43 +00:00
Pierre Geeraert 78d93a16eb remove kubeconfig
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 23s
2026-01-19 17:25:50 +00:00
Pierre Geeraert b94bf528be display kubeconfig
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2026-01-19 17:23:49 +00:00
Pierre Geeraert 11ad57bce4 no need to download docker.io as the base image is doing it now 2026-01-19 17:16:07 +00:00
Pierre Geeraert 495a55f8c1 try to install docker
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 7m17s
2026-01-19 16:54:55 +00:00
Pierre Geeraert c611360c04 try debug
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 29s
2026-01-19 16:52:17 +00:00
Pierre Geeraert ada418374b trying gitea.tryton.geeraert.eu/pi-ux-ce/custom-runner-debian-slim:latest
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 35s
2026-01-19 15:57:09 +00:00
Pierre Geeraert 3bf7f2a195 trying to use debian
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 5m41s
2026-01-19 13:46:25 +00:00
pi-ux-ce 2d22cab6e7 changing to debian image
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2026-01-19 11:54:38 +00:00
pi-ux-ce 96dcbe1798 Update django_code/django_code/urls.py
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m14s
2026-01-08 23:58:04 +00:00
pi-ux-ce ac6dc5b426 revert e2d3868a9e
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1m58s
revert add prowlarr script in tash until I create a prowlarr project with celery
2026-01-08 23:53:12 +00:00
pi-ux-ce b4f22ffeea update due to some errors
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 2m14s
2026-01-08 23:42:30 +00:00
pi-ux-ce ca3ed630ed adding the URL
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m42s
2026-01-08 23:34:27 +00:00
pi-ux-ce e2d3868a9e add prowlarr script in tash until I create a prowlarr project with celery
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2026-01-08 23:31:22 +00:00
Pierre Geeraert 47314620be can only concatenate str (not bytes) to str
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m35s
2026-01-07 17:57:22 +00:00
Pierre Geeraert f26f3f2665 try a new function with clearing the key
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m45s
2026-01-07 13:42:47 +00:00
Pierre Geeraert 938b37e920 add some comments
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m52s
2026-01-07 13:31:57 +00:00
Pierre Geeraert 2c5a989306 fix syntax error
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m1s
2026-01-07 13:19:24 +00:00
Pierre Geeraert 88a6dd9316 adding the default page in case there is no redis entry
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 2m12s
2026-01-07 12:08:03 +00:00
Pierre Geeraert 77742c1d6f ubuntu-slim wasn't working
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m33s
2025-12-09 10:20:21 +00:00
Pierre Geeraert ba16c6475a Merge branch 'main' of https://gitea.tryton.geeraert.eu/pi-ux-ce/Django_kube
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run
2025-12-09 09:50:42 +00:00
Pierre Geeraert 1735098b3a trying ubuntu-slim 2025-12-09 09:49:49 +00:00
pierre geeraert 2fdaaa47ab f you are just trying to redirect to an absolute URL stored in Redis, your code should work provided the string is clean.
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m58s
A robust way to ensure it's treated as a simple URL might involve using Django's HttpResponseRedirect directly instead of the redirect shortcut:
2025-12-08 23:44:06 +00:00
pierre geeraert bd4e4aed27 try to debug it
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m1s
2025-12-08 23:34:41 +00:00
pierre geeraert 94a8240ad4 In Django, the <str:key> part of your URL pattern is designed to capture a value from the URL (e.g., if someone visits /redirect/go/xyz123) and pass it to the view function as a keyword argument named key.
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m51s
2025-12-08 23:22:27 +00:00
pierre geeraert be03af61ea prepare new function
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m44s
2025-12-08 23:14:34 +00:00
pierre geeraert 4da34c98f3 forgot dependencies
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m15s
2025-12-08 23:05:49 +00:00
pierre geeraert 12253f0621 try to work on the redirection
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m8s
2025-12-08 23:00:46 +00:00
Pierre Geeraert 369954f5d2 changing form submit path
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m3s
2025-12-08 09:16:20 +00:00
pierre geeraert 4eee702dce add the comment for later review
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m0s
2025-12-07 23:46:59 +00:00
pierre geeraert e90daa2e61 forgot the url
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m19s
2025-12-07 23:39:45 +00:00
pierre geeraert cc8570d02f adding reddit downloader
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m48s
2025-12-07 23:22:46 +00:00
Pierre Geeraert 98e5ea965c forgot one variable
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m59s
2025-12-05 11:16:44 +00:00
Pierre Geeraert 7a98ab1c6d cache seems good , doing a test
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 2m49s
2025-12-05 11:12:30 +00:00
Pierre Geeraert 70973a63fb frogot the step to move the cache
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m36s
2025-12-05 10:30:33 +00:00
Pierre Geeraert ad82f73c1d promising solution using volume mount
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-05 10:24:44 +00:00
Pierre Geeraert e08016c103 promising solution using volume mount
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-05 10:08:57 +00:00
Pierre Geeraert a65e99b199 another test
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-05 10:04:07 +00:00
Pierre Geeraert 4853150f07 another test
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run
2025-12-05 10:02:22 +00:00
Pierre Geeraert a341e66c13 another test
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-05 09:53:55 +00:00
pierre geeraert 874779d230 now reverting
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m15s
2025-12-04 23:52:19 +00:00
pierre geeraert 779e8a8b0f to revert, just a try
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-04 23:46:47 +00:00
pierre geeraert 8f35e88ce4 to revert, just a try
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-04 23:42:58 +00:00
pierre geeraert 71e874cfb4 to revert, just a try
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-04 23:40:27 +00:00
pierre geeraert 622b8942b5 to revert, just a try
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-04 23:40:16 +00:00
pierre geeraert 7aeb7d094c to revert, just a try
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 27s
2025-12-04 23:39:10 +00:00
pierre geeraert 4ee80f8b7e to revert, just a try
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-04 23:37:57 +00:00
pierre geeraert 4859fa6877 No matching distribution found for json
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m2s
2025-12-04 23:17:56 +00:00
pierre geeraert a1d831cdf2 another cache try
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-04 23:17:08 +00:00
pierre geeraert a3ee639d77 put the steps for a reddit downloader
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 5m1s
2025-12-04 22:59:15 +00:00
pierre geeraert cd274aea81 change path
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m49s
2025-12-04 19:59:53 +00:00
Pierre Geeraert aaa548eb21 1.651 IndentationError: unindent does not match any outer indentation level
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m22s
2025-12-04 18:08:51 +00:00
Pierre Geeraert 99f05a055d add the retry function
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 5m46s
2025-12-04 17:00:48 +00:00
Pierre Geeraert e614d50f9c also clean .gitea/python_build
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m55s
2025-12-04 16:54:01 +00:00
Pierre Geeraert 20526c829c revert everything
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-04 16:53:18 +00:00
pi-ux-ce c9ed33f108 Merge pull request 'addign this for the syntax but this solution is too slow' (#6) from revert-caching into main
Gitea Actions Demo / changes (push) Successful in 24s
Gitea Actions Demo / Build-dockerfile (push) Has been cancelled
Gitea Actions Demo / Explore-Gitea-Actions (push) Has started running
Reviewed-on: #6
2025-12-04 16:50:07 +00:00
Pierre Geeraert 4d728c8e68 addign this for the syntax but this solution is too slow
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
Gitea Actions Demo / changes (push) Has been cancelled
Gitea Actions Demo / Build-dockerfile (push) Has been cancelled
2025-12-04 16:44:46 +00:00
Pierre Geeraert ef3aed4ba2 Good now , but still long, let's try again
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m52s
2025-12-04 16:24:33 +00:00
Pierre Geeraert 8f30fdb88c should be good now
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m53s
2025-12-04 16:16:31 +00:00
Pierre Geeraert d4b67906cd try again the path
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 9m29s
2025-12-04 16:03:56 +00:00
Pierre Geeraert 075fa32ea2 shunt as I need this to run to debug first
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1m20s
2025-12-04 16:00:50 +00:00
Pierre Geeraert f71f678662 fix path
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-04 16:00:02 +00:00
Pierre Geeraert 457857df32 changing gitignore
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1m7s
2025-12-04 15:57:03 +00:00
Pierre Geeraert 49adc84f5c cache issue 2025-12-04 15:56:33 +00:00
Pierre Geeraert a2a9a8c3a0 renaming dockerfile
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1m16s
2025-12-04 15:53:11 +00:00
Pierre Geeraert a62db898aa fixing path
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1m14s
2025-12-04 15:50:08 +00:00
Pierre Geeraert a2a6e5c5fe avoid runnign if requirements is modified
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1m20s
2025-12-04 15:15:28 +00:00
Pierre Geeraert b9307efba2 work on a different workflow just for requirements 2025-12-04 15:06:03 +00:00
Pierre Geeraert 52ccff4086 try different caching method
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4m40s
2025-12-04 14:24:29 +00:00
Pierre Geeraert 7f59856da3 adding share_task
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-04 14:21:26 +00:00
Pierre Geeraert 10dc913080 adding the check_and_create_destination_folder function but not applied yet to incremental
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-04 14:17:09 +00:00
Pierre Geeraert 1d2f190459 rename url var
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m17s
2025-12-04 11:42:14 +00:00
Pierre Geeraert 859ab9cfaf add proxy on the othe rrequest as well
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m9s
2025-12-04 11:34:32 +00:00
Pierre Geeraert 924d3dabb9 add proxy on requests module
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4m15s
2025-12-03 12:41:50 +00:00
Pierre Geeraert b227337ced 1.526 SyntaxError: expected ':'
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m2s
2025-12-03 12:27:18 +00:00
Pierre Geeraert 717ffb4b8a urlparse was its own built-in (i.e., NOT pip-installable) module in Python 2, and was moved to urllib.parse
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 4m45s
2025-12-03 12:17:13 +00:00
Pierre Geeraert 08121fc701 remove Webcal-python/
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 3m55s
2025-12-03 12:10:01 +00:00
Pierre Geeraert 460f18d85a add proxy for the first part and try to develop the second part 2025-12-03 12:08:56 +00:00
pierre geeraert 6c34d510e5 forgot requirements
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 9m2s
2025-12-02 23:04:55 +00:00
pierre geeraert 789fc8bcbc we are now able locally to get all albums and go through all of them and get the images links
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 6m19s
2025-12-02 22:41:52 +00:00
pierre geeraert 31e72f28b0 change URL for incremental and add the beginning of the new album downloader
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 6m9s
2025-12-02 22:23:40 +00:00
pierre geeraert 3d0b87998d add new stuff
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m27s
2025-12-02 21:33:15 +00:00
pierre geeraert 6c7b9a4ad8 add stash listing
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m32s
2025-12-02 21:24:05 +00:00
Pierre Geeraert f4379b07ca TypeError: can only concatenate str (not int) to str
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 5m59s
2025-12-02 18:01:43 +00:00
Pierre Geeraert 55364da10b add some print
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m7s
2025-12-02 17:39:15 +00:00
Pierre Geeraert e28b34b49b 10.42 ERROR: No matching distribution found for os
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m13s
2025-12-02 17:21:37 +00:00
Pierre Geeraert 7ce3167d57 import os
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 5m54s
2025-12-02 17:13:57 +00:00
Pierre Geeraert b0b9ae068a use path join and create the destination folder 2025-12-02 17:13:25 +00:00
Pierre Geeraert 54349b4e8a cleanup 2025-12-02 17:03:30 +00:00
Pierre Geeraert 2483e71d98 try https
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m31s
2025-12-02 16:45:04 +00:00
Pierre Geeraert 6b46873009 swithc from socks to http
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m14s
2025-12-02 16:35:16 +00:00
Pierre Geeraert 685a76bdd1 fixing imports with urlrequest
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m19s
2025-12-02 15:57:48 +00:00
Pierre Geeraert 933a8bf3c8 changing proxy setup
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m13s
2025-12-02 15:40:02 +00:00
Pierre Geeraert e228d20d0b convert str to INT for the loop
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m43s
2025-12-02 15:06:58 +00:00
Pierre Geeraert 19ec49778e fix mistake
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m51s
2025-12-02 11:34:39 +00:00
Pierre Geeraert 17dbe04c4b restart celery as well
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 3m42s
2025-12-02 11:29:12 +00:00
Pierre Geeraert e5404fa1b9 add ceery_imports 2025-12-02 11:27:29 +00:00
pi-ux-ce f6506aeeca Update dockerfile
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4m53s
2025-12-02 11:13:21 +00:00
pi-ux-ce 795720dcd2 changing redis hostname
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m48s
2025-12-02 11:06:00 +00:00
pi-ux-ce 85962b11a6 adding some cache for PIP
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m45s
2025-12-02 10:47:20 +00:00
pi-ux-ce c1229b348e Update django_code/stash_management/apps.py
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 8m49s
2025-12-02 10:33:13 +00:00
pi-ux-ce 06358c4c07 Update django_code/django_code/wsgi.py
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-02 10:29:12 +00:00
pi-ux-ce fffde38fed Update .gitea/workflows/dockerfile_runner.yaml
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m39s
2025-12-02 10:01:47 +00:00
pi-ux-ce 13bfc40c6a Update .gitea/workflows/dockerfile_runner.yaml
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 46s
2025-12-02 09:57:19 +00:00
pi-ux-ce 9024a1eab6 Update .gitea/workflows/dockerfile_runner.yaml
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 46s
2025-12-02 09:55:09 +00:00
pierre geeraert aa851a7779 fix mistake
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 8m18s
2025-12-02 00:54:20 +00:00
pierre geeraert ac3d20d072 work on the versionning
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 56s
2025-12-02 00:52:08 +00:00
pierre geeraert 02f16516f1 work on the versionning
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 59s
2025-12-02 00:47:42 +00:00
pierre geeraert c8301113e5 work on the versionning
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-02 00:47:13 +00:00
pierre geeraert 73fd35ad40 caching python3 image
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 11m24s
2025-12-02 00:31:05 +00:00
pi-ux-ce 996ed3d776 Update dockerfile
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-02 00:27:30 +00:00
pierre geeraert 05feced28f make things faster
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4m37s
2025-12-02 00:20:37 +00:00
pi-ux-ce fe844437fb Update dockerfile
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 2m32s
2025-12-02 00:13:53 +00:00
pi-ux-ce 3de05c08bc Update dockerfile
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 2m6s
2025-12-02 00:07:44 +00:00
pi-ux-ce e6509e0932 try new git action
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 2m9s
2025-12-02 00:02:28 +00:00
pi-ux-ce ce95ed4854 try new dockerfile
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-02 00:00:40 +00:00
pierre geeraert 3bf2d553c8 fix improt
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 7m51s
2025-12-01 23:49:03 +00:00
pierre geeraert b3fb490c16 rename celery file
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 8m37s
2025-12-01 23:38:31 +00:00
pierre geeraert 5e8c2c73fd try new proxy
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 7m40s
2025-12-01 23:26:11 +00:00
pierre geeraert a75aabbec6 enable celery
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-01 23:16:55 +00:00
pierre geeraert 583522a422 breakthrough with the increment
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 17m20s
2025-11-27 23:25:42 +00:00
pierre geeraert a9b4a95e0c try
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 9m59s
2025-07-31 22:23:32 +01:00
pierre geeraert 8b68d52be0 try
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 9m24s
2025-07-31 22:00:56 +01:00
pierre geeraert 8f52aca2b4 try the unbuffered 2025-07-31 21:47:13 +01:00
pierre geeraert 744f920854 wrong copy/paste
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 7m49s
2025-07-31 21:09:41 +01:00
pierre geeraert fe43d274cb change process
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 6m56s
2025-07-31 20:56:46 +01:00
pierre geeraert 53f4c17a08 fix ident
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 8m14s
2025-07-31 20:13:22 +01:00
pierre geeraert f728cdafb4 try to integrate extra URLs
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 6m21s
2025-07-31 20:02:46 +01:00
pi-ux-ce 21b4b9b7fb Merge pull request 'use_external_url' (#5) from use_external_url into main
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m46s
Reviewed-on: #5
2025-07-31 18:27:38 +00:00
214 changed files with 53285 additions and 241 deletions
+78 -13
View File
@@ -2,33 +2,72 @@ name: Gitea Actions Demo
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀 run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
on: on:
push: push:
branches:
- main
paths-ignore:
- 'django_testing/dockerfile'
issue_comment: issue_comment:
types: [created] types: [created]
jobs: jobs:
Explore-Gitea-Actions: Explore-Gitea-Actions:
runs-on: ubuntu-latest env:
RUNNER_TOOL_CACHE: /toolcache
DEBUG: True
ALLOWED_HOSTS: "django.tryton.geeraert.eu"
container:
image: gitea.tryton.geeraert.eu/pi-ux-ce/custom-runner-debian-slim:1.0.6
volumes:
- act-toolcache:/opt/hostedtoolcache # this is where Runner store their cache default
runs-on: host-runner
steps: steps:
- run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}." - run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
- name: restore git folder if exist
run: if [ -d "/opt/hostedtoolcache/${{ github.event.repository.name }}/" ]; then cp -r /opt/hostedtoolcache/${{ github.event.repository.name }}/ ${{ gitea.workspace }}; fi
- name: Check Docker Version
run: whereis docker
- name: Check out repository code - name: Check out repository code
uses: actions/checkout@v4 uses: actions/checkout@v4
clean: false
fetch-depth: 1
ref: 'main'
# - name: Manually check out repository code
# run: cd ${{ gitea.workspace }} ; git pull origin main
- run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner." - run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
- name: List files in the repository - name: List files in the repository
run: | run: |
ls ${{ gitea.workspace }} ls ${{ gitea.workspace }}
- name: Cache pip - name: Compute next version
uses: actions/cache@v3 id: versioning
run: |
latest="${{ vars.VERSION }}"
next_version=$(echo "$latest" | awk -F. -v OFS=. '{$NF += 1 ; print}')
echo "next_version=$next_version" >> $GITHUB_ENV
echo "Variables used :"
echo "------------------------------------------------"
echo "Next version: $next_version"
- name: Cache Docker layers
uses: actions/cache@v4
with: with:
path: /root/.cache/pip path: /opt/hostedtoolcache/.buildx-cache
key: pip key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: pip restore-keys: |
${{ runner.os }}-buildx-
- name: inject cache into docker - name: inject cache into docker
uses: reproducible-containers/buildkit-cache-dance@v3.1.0 uses: reproducible-containers/buildkit-cache-dance@v3.1.0
with: with:
cache-source: /root/.cache/pip cache-source: /opt/hostedtoolcache/pip
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v3
@@ -44,15 +83,41 @@ jobs:
uses: docker/build-push-action@v6 uses: docker/build-push-action@v6
with: with:
push: true push: true
#build-contexts: pip_cache=${{steps.vars.outputs.pip-dir}} build-args: |
tags: gitea.tryton.geeraert.eu/pi-ux-ce/django-python:latest ALLOWED_HOSTS='django.tryton.geeraert.eu'
cache-from: type=registry,ref=gitea.tryton.geeraert.eu/pi-ux-ce/django-python:buildcache DEBUG='True'
cache-to: type=registry,ref=gitea.tryton.geeraert.eu/pi-ux-ce/django-python:buildcache,mode=max tags: |
gitea.tryton.geeraert.eu/pi-ux-ce/django-python:latest
gitea.tryton.geeraert.eu/pi-ux-ce/django-python:${{ env.next_version }}
cache-from: type=local,src=/opt/hostedtoolcache/.buildx-cache
cache-to: type=local,dest=/opt/hostedtoolcache/.buildx-cache-new,mode=max
- name: drop the pod to force pulling the new image - name: Move cache
run: |
rm -rf /opt/hostedtoolcache/.buildx-cache
mv /opt/hostedtoolcache/.buildx-cache-new /opt/hostedtoolcache/.buildx-cache
- name: Rollout Django to force pulling the new image
uses: actions-hub/kubectl@master uses: actions-hub/kubectl@master
env: env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }} KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
with: with:
args: rollout restart deployment django -n django args: rollout restart deployment django -n django
- name: Rollout Celery worker to force pulling the new image
uses: actions-hub/kubectl@master
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
with:
args: rollout restart deployment celery-worker -n django
- run: echo "🍏 This job's status is ${{ job.status }}." - run: echo "🍏 This job's status is ${{ job.status }}."
- name: update version in the variable
run: |
curl -X PUT -H "Content-Type: application/json" \
--user ${{ secrets.USERNAME_GITEA }}:${{ secrets.PASSWORD_GITEA }} \
https://gitea.tryton.geeraert.eu/api/v1/repos/pi-ux-ce/${{ github.event.repository.name }}/actions/variables/VERSION \
-d "{\"Value\":\"$next_version\"}"
- name: backup git for future use
run: cp -r ${{ gitea.workspace }} /opt/hostedtoolcache/${{ github.event.repository.name }}/
@@ -0,0 +1,69 @@
name: Gitea Actions Demo
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
on:
push:
branches:
- "testing"
paths:
- 'django_testing/dockerfile'
tags-ignore:
- '*'
jobs:
Explore-Gitea-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
- name: List files in the repository
run: |
ls ${{ gitea.workspace }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Compute next version
id: versioning
run: |
latest="${{ vars.VERSION_TESTING }}"
next_version=$(echo "$latest" | awk -F. -v OFS=. '{$NF += 1 ; print}')
echo "next_version=$next_version" >> $GITHUB_ENV
echo "Variables used :"
echo "------------------------------------------------"
echo "Next version: $next_version"
- name: Login to gitea
uses: docker/login-action@v3
with:
registry: gitea.tryton.geeraert.eu
username: ${{ secrets.USERNAME_GITEA }}
password: ${{ secrets.PASSWORD_GITEA }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: django_testing/
push: true
tags: |
gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:latest
gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:${{ env.next_version }}
cache-from: type=registry,ref=gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:buildcache
cache-to: type=registry,ref=gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:buildcache,mode=max
- name: update version in the variable
run: |
curl -X PUT -H "Content-Type: application/json" \
--user ${{ secrets.USERNAME_GITEA }}:${{ secrets.PASSWORD_GITEA }} \
https://gitea.tryton.geeraert.eu/api/v1/repos/pi-ux-ce/${{ github.event.repository.name }}/actions/variables/VERSION_TESTING \
-d "{\"Value\":\"$next_version\"}"
- name: Rollout Django to force pulling the new image
uses: actions-hub/kubectl@master
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
with:
args: rollout restart deployment django-testing -n django-testing
- run: echo "🍏 This job's status is ${{ job.status }}."
@@ -0,0 +1,23 @@
name: Gitea Actions Demo
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
on:
push:
branches:
- "testing"
tags-ignore:
- '*'
jobs:
Explore-Gitea-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
- name: Rollout Django to force pulling the new image
uses: actions-hub/kubectl@master
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
with:
args: rollout restart deployment django-testing -n django-testing
- run: echo "🍏 This job's status is ${{ job.status }}."
+226 -3
View File
@@ -1,4 +1,227 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[codz]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py.cover
*.lcov
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
# Pipfile.lock
# UV
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# uv.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
# poetry.lock
# poetry.toml
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
# pdm.lock
# pdm.toml
.pdm-python
.pdm-build/
# pixi
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
# pixi.lock
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
# in the .venv directory. It is recommended not to include this directory in version control.
.pixi/*
!.pixi/config.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule*
celerybeat.pid
# Redis
*.rdb
*.aof
*.pid
# RabbitMQ
mnesia/
rabbitmq/
rabbitmq-data/
# ActiveMQ
activemq-data/
# SageMath parsed files
*.sage.py
# Environments
.env
.envrc
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
# .idea/
# Abstra
# Abstra is an AI-powered process automation framework.
# Ignore directories containing user credentials, local state, and settings.
# Learn more at https://abstra.io/docs
.abstra/
# Visual Studio Code
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
# and can be added to the global gitignore or merged into this file. However, if you prefer,
# you could uncomment the following to ignore the entire vscode folder
# .vscode/
# Temporary file for partial code execution
tempCodeRunnerFile.py
# Ruff stuff:
.ruff_cache/
# PyPI configuration file
.pypirc
# Marimo
marimo/_static/
marimo/_lsp/
__marimo__/
# Streamlit
.streamlit/secrets.toml
*/__pycache__/* */__pycache__/*
*/.idea */.idea/*
venv/* */venv/*
*__pycache__* */.env/*
Webcal-python/*
-67
View File
@@ -1,67 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: django-python
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: django-webserver
namespace: django-python
spec:
replicas: 1
selector:
matchLabels:
app: django-python
template:
metadata:
labels:
app: django-python
spec:
containers:
- name: django-python
image: gitea.tryton.geeraert.eu/pi-ux-ce/django-python:latest
imagePullPolicy: Always
ports:
- containerPort: 8000
name: webserver-port
volumeMounts:
## - name: django-python-code
# mountPath: /code
- name: servarr-data
mountPath: /data
readOnly: true
- name: secret-kubeconfig
mountPath: /kubeconfig
resources:
limits:
cpu: 100m
memory: 200Mi
volumes:
- name: django-python-code
persistentVolumeClaim:
claimName: django-python-code
- name: servarr-data
hostPath:
path: /data
- name: secret-kubeconfig
secret:
defaultMode: 420
secretName: kubeconfig
---
apiVersion: v1
kind: Service
metadata:
name: webserver
namespace: django-python
spec:
ports:
- name: http
port: 8000
protocol: TCP
selector:
app: django-python
+37
View File
@@ -0,0 +1,37 @@
from django.apps import AppConfig
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.shortcuts import render
import os
import psycopg2
from apps.cloudmanager.db_interaction import DB_generation,Check_server_supposed_XXX,Give_current_weekday,Give_current_hour
class CloudmanagerConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.cloudmanager'
label = 'cloudmanager'
def coucou(request):
return HttpResponse('<h1>Hello cmm!</h1>')
def hello(request):
list_schedule = ['schedule1','schedule2']
list_servers_up = [['wiki', 'wikijs', 2], ['book', 'bookstack-db', 1]]
return render(request, 'cloudmanager/index.html', {'list_schedule':list_schedule,'list_servers_up':list_servers_up})
def redirect(request):
db_host = os.environ.get('DB_HOST')
db_port = os.environ.get('DB_PORT')
db_user = os.environ.get('DB_USERNAME')
db_password = os.environ.get('DB_PASSWORD')
db_name = os.environ.get('CUSTOM_DB_DATABASE',os.environ.get('DB_DATABASE'))
generated_db = DB_generation(db_host, db_port, db_user, db_password,db_name)
##operation:
## Server(s) supposed to be UP
list_servers_up = Check_server_supposed_XXX(generated_db, "up", Give_current_hour(),Give_current_weekday())
print(list_servers_up)
return render(request, 'cloudmanager/cmm_blank_page.html', {'list_servers_up':list_servers_up})
@@ -0,0 +1,7 @@
class sql:
url = 'localhost'
port = 5432
user = 'postgres'
password = 'example'
database = 'cloudmanager'
@@ -0,0 +1,167 @@
import psycopg2
from django.http import HttpResponse
from django.views.decorators.http import require_POST
from apps.kubernetes_connection import apps as kubernetes_connection
import datetime
from apps.cloudmanager import credentials
import os
def hello(request):
kubernetes_connection.echoHello();
return HttpResponse('<h1>Hello cmm !</h1>')
def DB_generation(host_in,port_in,user_in,password_in,db_in):
db = psycopg2.connect(host=host_in, port=port_in, user=user_in, password=password_in,database=db_in)
return db
@require_POST
def change_schedule(request):
# HTMX sends these via standard POST data
schedule_id = request.POST.get('schedule_id')
server_name = request.POST.get('server_name')
if not schedule_id or not server_name:
return HttpResponse("<span style='color: red;'>Missing parameters.</span>", status=400)
try:
# --- Your Core Logic Here ---
# e.g., Server.objects.filter(name=server_name).update(schedule_id=schedule_id)
print(f"Updating {server_name} to schedule profile {schedule_id}")
# Return a success message that will instantly inject into the server's status div
return HttpResponse("<span style='color: green;'>✓ Updated successfully!</span>")
except Exception as e:
return HttpResponse(f"<span style='color: red;'>Error: {str(e)}</span>", status=500)
def Launch_sql_query(sql,db):
# prepare a cursor object using cursor() method
cursor = db.cursor()
try:
# Execute the SQL command
cursor.execute(sql)
# Fetch all the rows in a list of lists.
results = cursor.fetchall()
result_machine = []
#result_machine_type = []
for row in results:
result_machine_type = []
namespace = row[0]
name = row[1]
replicas = row[2]
result_machine_type.append(namespace)
result_machine_type.append(name)
result_machine_type.append(replicas)
result_machine.append(result_machine_type)
return result_machine
except:
print ("Error: unable to fetch data")
#Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
def Give_current_weekday():
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday','Saturday', 'Sunday']
weekday = days[datetime.datetime.today().weekday()]
return weekday
def Give_current_hour():
now = datetime.datetime.now()
return now.hour
def Check_server_supposed_XXX(generated_db_in,wanted_status,Wanted_hour,Wanted_day):
sql_in=""
if wanted_status == "up":
sql_in = "select machine.namespace, machine.name, machine.replicas from scenario_hour,machine ,scenario_day_of_week where state_at_" + str(Wanted_hour) + "='1' and state_" + str(Wanted_day) + "='1' and machine.hour_behaviour_id=scenario_hour.id_scenario and machine.day_behaviour_id=scenario_day_of_week.id_scenario;"
elif wanted_status == "down":
sql_in = "select machine.namespace, machine.name, machine.replicas from scenario_hour,machine ,scenario_day_of_week where not(state_at_" + str(Wanted_hour) + "='1' and state_" + str(Wanted_day) + "='1') and machine.hour_behaviour_id=scenario_hour.id_scenario and machine.day_behaviour_id=scenario_day_of_week.id_scenario;"
else:
print("error value")
print(sql_in)
return_value = Launch_sql_query(sql_in, generated_db_in)
return return_value
def Is_the_server_already_wanted_state(id_machine, wanted_state,instance_type):
#stopped/running
bool_result = ""
proxmox = function.proxmox_connection(credentials.proxmox.zeus.url_proxmox,credentials.proxmox.zeus.user,credentials.proxmox.zeus.password)
if str(function.check_state_mix(id_machine,wanted_state,proxmox,instance_type)) == str(wanted_state):
bool_result = True
else:
bool_result = False
return bool_result
def all_operations(request,wanted_state,list_machine):
for machine_target in list_machine:
print(machine_target[1])
info_to_display = ""
if wanted_state == "up":
kubernetes_connection.scale_up(request,namespace_name=machine_target[0],deploy_name=machine_target[1],replicas=machine_target[2]);
elif wanted_state == "down":
kubernetes_connection.scale_down(request,namespace_name=machine_target[0],deploy_name=machine_target[1]);
else:
print("Incorrect wanted state")
# if not(Is_the_server_already_wanted_state(machine_target[0], wanted_state,machine_target[1])):
# function.action(False,machine_target[0],operation_to_perform,machine_target[1])
# print(str(machine_target[0])+" is now "+str(wanted_state))
# elif Is_the_server_already_wanted_state(machine_target[0], wanted_state,machine_target[1]):
# info_to_display = "operation already performed for "+machine_target[2]
# print(info_to_display)
#return info_to_display
return ""
def main(request):
#get credentials from the env
db_host = os.environ.get('DB_HOST')
db_port = os.environ.get('DB_PORT')
db_user = os.environ.get('DB_USERNAME')
db_password = os.environ.get('DB_PASSWORD')
db_name = os.environ.get('CUSTOM_DB_DATABASE',os.environ.get('DB_DATABASE'))
generated_db = DB_generation(db_host, db_port, db_user, db_password,db_name)
##operation:
## Server(s) supposed to be UP
list_servers_up = Check_server_supposed_XXX(generated_db, "up", Give_current_hour(),Give_current_weekday())
print("------------------------------------------")
print("-----------------UP-----------------------")
print("------------------------------------------")
print(list_servers_up)
print(all_operations(request,"up", list_servers_up))
## Server(s) supposed to be DOWN
list_servers_down = Check_server_supposed_XXX(generated_db, "down", Give_current_hour(),Give_current_weekday())
print("------------------------------------------")
print("----------------DOWN----------------------")
print("------------------------------------------")
print(list_servers_down)
print(all_operations(request,"down",list_servers_down))
# disconnect from server
generated_db.close()
#print(Is_the_server_already_wanted_state(112, "stopped"))
return HttpResponse('<h1>CMM executed!</h1>')
if __name__ == "__main__":
main()
"""
TO DO:
EXTRACT TYPE OF MACHINE
CREATE FUNCTION TO CHECK IF A MACHINE IS ALREADY DOWN OR NOT
ADD FIELD IN SQL WITH PROJECT AND PUT DESCRIPTION -> ATTACH MACHINE TO PROJECT
"""
@@ -0,0 +1,28 @@
# Generated by Django 4.2.29 on 2026-06-11 19:35
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='CmmData',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('namespace', models.CharField(max_length=100)),
('schedule_day', models.CharField(max_length=100)),
('schedule_hour', models.CharField(max_length=100)),
('replicas', models.IntegerField()),
],
options={
'db_table': 'cloudmanager',
},
),
]
+12
View File
@@ -0,0 +1,12 @@
from django.db import models
class CmmData(models.Model):
name = models.CharField(max_length=100)
namespace = models.CharField(max_length=100)
schedule_day = models.CharField(max_length=100)
schedule_hour = models.CharField(max_length=100)
replicas = models.IntegerField()
class Meta:
db_table = 'cloudmanager'
+24
View File
@@ -0,0 +1,24 @@
from django.http import HttpResponse
# IMPORT AT THE TOP HERE: This is completely safe!
from apps.cloudmanager.models import CmmData
def coucou(request):
# 1. Prepare the data inside the function
data = CmmData(
name="test",
namespace="testspace",
schedule_hour="1",
schedule_day="deux",
replicas=3
)
# 2. This line actually pushes the data into your cloudmanager_db!
data.save()
return HttpResponse('<h1>Hello cmm! Data saved successfully!</h1>')
def display(request):
data = CmmData.objects.all()
print(data[0].namespace)
return HttpResponse(data)
+28
View File
@@ -0,0 +1,28 @@
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.shortcuts import render
import os
import psycopg2
from apps.cloudmanager.db_interaction import DB_generation,Check_server_supposed_XXX,Give_current_weekday,Give_current_hour
def hello(request):
list_schedule = ['schedule1','schedule2']
list_servers_up = [['wiki', 'wikijs', 2], ['book', 'bookstack-db', 1]]
return render(request, 'cloudmanager/index.html', {'list_schedule':list_schedule,'list_servers_up':list_servers_up})
def redirect(request):
db_host = os.environ.get('DB_HOST')
db_port = os.environ.get('DB_PORT')
db_user = os.environ.get('DB_USERNAME')
db_password = os.environ.get('DB_PASSWORD')
db_name = os.environ.get('CUSTOM_DB_DATABASE',os.environ.get('DB_DATABASE'))
generated_db = DB_generation(db_host, db_port, db_user, db_password,db_name)
##operation:
## Server(s) supposed to be UP
list_servers_up = Check_server_supposed_XXX(generated_db, "up", Give_current_hour(),Give_current_weekday())
print(list_servers_up)
return render(request, 'cloudmanager/cmm_blank_page.html', {'list_servers_up':list_servers_up})
@@ -0,0 +1,13 @@
drop table IF EXISTS machine;
CREATE TABLE IF NOT EXISTS machine (
id integer NOT NULL PRIMARY KEY,
namespace varchar(100) NOT null,
name varchar(100) NOT null,
hour_behaviour_id integer NOT null,
day_behaviour_id integer NOT null,
replicas integer NOT null
);
INSERT into machine (id, namespace, name, hour_behaviour_id, day_behaviour_id,replicas) VALUES (1, 'echo', 'echo-server', 0, 1,1);
INSERT into machine (id, namespace, name, hour_behaviour_id, day_behaviour_id,replicas) VALUES (2, 'wiki', 'wikijs', 1, 1,2);
INSERT into machine (id, namespace, name, hour_behaviour_id, day_behaviour_id,replicas) VALUES (3, 'book', 'bookstack-db', 2, 1,1);
@@ -0,0 +1,16 @@
create table scenario_day_of_week
(
id_scenario integer NOT NULL PRIMARY KEY,
name_scenario varchar(255) null,
state_Monday BOOLEAN null,
state_Tuesday BOOLEAN null,
state_Wednesday BOOLEAN null,
state_Thursday BOOLEAN null,
state_Friday BOOLEAN null,
state_Saturday BOOLEAN null,
state_Sunday BOOLEAN null
);
INSERT INTO scenario_day_of_week (id_scenario, name_scenario, state_Monday, state_Tuesday, state_Wednesday, state_Thursday, state_Friday, state_Saturday, state_Sunday) VALUES (0, 'always off', FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
INSERT INTO scenario_day_of_week (id_scenario, name_scenario, state_Monday, state_Tuesday, state_Wednesday, state_Thursday, state_Friday, state_Saturday, state_Sunday) VALUES (1, 'always on', TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);
@@ -0,0 +1,33 @@
create table scenario_hour
(
id_scenario integer NOT NULL PRIMARY KEY,
name_scenario varchar(255) null,
state_at_0 BOOLEAN null,
state_at_1 BOOLEAN null,
state_at_2 BOOLEAN null,
state_at_3 BOOLEAN null,
state_at_4 BOOLEAN null,
state_at_5 BOOLEAN null,
state_at_6 BOOLEAN null,
state_at_7 BOOLEAN null,
state_at_8 BOOLEAN null,
state_at_9 BOOLEAN null,
state_at_10 BOOLEAN null,
state_at_11 BOOLEAN null,
state_at_12 BOOLEAN null,
state_at_13 BOOLEAN null,
state_at_14 BOOLEAN null,
state_at_15 BOOLEAN null,
state_at_16 BOOLEAN null,
state_at_17 BOOLEAN null,
state_at_18 BOOLEAN null,
state_at_19 BOOLEAN null,
state_at_20 BOOLEAN null,
state_at_21 BOOLEAN null,
state_at_22 BOOLEAN null,
state_at_23 BOOLEAN null
);
INSERT INTO scenario_hour (id_scenario, name_scenario, state_at_0, state_at_1, state_at_2, state_at_3, state_at_4, state_at_5, state_at_6, state_at_7, state_at_8, state_at_9, state_at_10, state_at_11, state_at_12, state_at_13, state_at_14, state_at_15, state_at_16, state_at_17, state_at_18, state_at_19, state_at_20, state_at_21, state_at_22, state_at_23) VALUES (0, 'always off uk', FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
INSERT INTO scenario_hour (id_scenario, name_scenario, state_at_0, state_at_1, state_at_2, state_at_3, state_at_4, state_at_5, state_at_6, state_at_7, state_at_8, state_at_9, state_at_10, state_at_11, state_at_12, state_at_13, state_at_14, state_at_15, state_at_16, state_at_17, state_at_18, state_at_19, state_at_20, state_at_21, state_at_22, state_at_23) VALUES (1, 'always on uk', TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);
INSERT INTO scenario_hour (id_scenario, name_scenario, state_at_0, state_at_1, state_at_2, state_at_3, state_at_4, state_at_5, state_at_6, state_at_7, state_at_8, state_at_9, state_at_10, state_at_11, state_at_12, state_at_13, state_at_14, state_at_15, state_at_16, state_at_17, state_at_18, state_at_19, state_at_20, state_at_21, state_at_22, state_at_23) VALUES (2, 'awake hours uk', FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);
@@ -0,0 +1,33 @@
from django.http import HttpResponse
from django.views.decorators.http import require_POST
#from django.contrib.auth.decorators import login_required # optional but recommended
def trigger_my_action(request):
# 1. Run your Django module/function
result = "1"
print('here')
# 2. Return ONLY the HTML fragment you want to show on the page
# This will replace the content inside the "hx-target" div
return HttpResponse("Done!")
#@login_required
@require_POST
def change_schedule(request):
# HTMX sends these via standard POST data
schedule_id = request.POST.get('schedule_id')
server_name = request.POST.get('server_name')
if not schedule_id or not server_name:
return HttpResponse("<span style='color: red;'>Missing parameters.</span>", status=400)
try:
# --- Your Core Logic Here ---
# e.g., Server.objects.filter(name=server_name).update(schedule_id=schedule_id)
print(f"Updating {server_name} to schedule profile {schedule_id}")
# Return a success message that will instantly inject into the server's status div
return HttpResponse("<span style='color: green;'>✓ Updated successfully!</span>")
except Exception as e:
return HttpResponse(f"<span style='color: red;'>Error: {str(e)}</span>", status=500)
+21
View File
@@ -0,0 +1,21 @@
from django.shortcuts import render
def home(request):
thislist = ["apple", "banana", "cherry"]
return render(request, 'dashboard/home.html',{'thislist': thislist})
def about(request):
thislist = ["apple", "banana", "cherry"]
return render(request, 'dashboard/about.html',{'thislist': thislist})
def success(request):
return render(request, 'dashboard/start.html',{'deployment': 'django','url':'https://google.com'})
def scale_up(request,namespace_name,deploy_name):
baseurl = "{0}://{1}{2}".format(request.scheme, request.get_host(), request.path)
return render(request, 'dashboard/start.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com','baseurl': baseurl})
def scale_down(request,namespace_name,deploy_name):
baseurl = "{0}://{1}{2}".format(request.scheme, request.get_host(), request.path)
return render(request, 'dashboard/shutdown.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com','baseurl': baseurl})
@@ -17,15 +17,19 @@ import urllib.request
def hello(request): def hello(request):
return HttpResponse('<h1>Hello k8s!</h1>') return HttpResponse('<h1>Hello k8s!</h1>')
def scale_up(request,namespace_name,deploy_name): def echoHello():
print("hello from k8s")
return "returned from k8s"
def scale_up(request,namespace_name,deploy_name,replicas=1):
config.load_kube_config(config_file='/kubeconfig/config') config.load_kube_config(config_file='/kubeconfig/config')
api = client.AppsV1Api() api = client.AppsV1Api()
deployment = api.read_namespaced_deployment(name=deploy_name, namespace=namespace_name) deployment = api.read_namespaced_deployment(name=deploy_name, namespace=namespace_name)
deployment.spec.replicas = 1 deployment.spec.replicas = replicas
resp = api.patch_namespaced_deployment( resp = api.patch_namespaced_deployment(
name=deploy_name, namespace=namespace_name, body=deployment); name=deploy_name, namespace=namespace_name, body=deployment);
#return HttpResponse('<h1>Scaled up !</h1>') #return HttpResponse('<h1>Scaled up !</h1>')
return render(request, 'start.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com'}) return render(request, 'dashboard/start.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com'})
def scale_down(request,namespace_name,deploy_name): def scale_down(request,namespace_name,deploy_name):
@@ -36,9 +40,18 @@ def scale_down(request,namespace_name,deploy_name):
resp = api.patch_namespaced_deployment( resp = api.patch_namespaced_deployment(
name=deploy_name, namespace=namespace_name, body=deployment); name=deploy_name, namespace=namespace_name, body=deployment);
#return HttpResponse('<h1>Scaled down !</h1>') #return HttpResponse('<h1>Scaled down !</h1>')
return render(request, 'shutdown.html', return render(request, 'dashboard/shutdown.html',
{'namespace': namespace_name, 'deployment': deploy_name, 'url': 'https://namespace.com'}) {'namespace': namespace_name, 'deployment': deploy_name, 'url': 'https://namespace.com'})
def Import_Deployments():
config.load_kube_config(config_file='/kubeconfig/config')
deployment = api.list_namespaced_deployment('servarr')
len(deployment.items) #list all deployment inside the namespace
test.items[0].spec.template.spec.containers[0].name # name the first deploy within the namespace
test.items[2].spec.template.spec.containers[0].name # name the third deploy within the namespace
return 0
def nodes(request): def nodes(request):
config.load_kube_config(config_file='/code/kubeconfig') config.load_kube_config(config_file='/code/kubeconfig')
v1 = client.CoreV1Api() v1 = client.CoreV1Api()
@@ -11,6 +11,11 @@ import psycopg2
import random import random
import mimetypes import mimetypes
class RandomSimpsonsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.random_simpsons'
label = 'simpsons'
def DB_generation(host_in,port_in,user_in,password_in,db_in): def DB_generation(host_in,port_in,user_in,password_in,db_in):
#db = pymysql.connect(host=host_in, port=port_in, user=user_in, passwd=password_in,db=db_in) #db = pymysql.connect(host=host_in, port=port_in, user=user_in, passwd=password_in,db=db_in)
db = psycopg2.connect(host=host_in, port=port_in, user=user_in, password=password_in,database=db_in) db = psycopg2.connect(host=host_in, port=port_in, user=user_in, password=password_in,database=db_in)
@@ -63,7 +68,7 @@ def download_mo(request,file):
return response return response
#def template(request): #def template(request):
# rendered = render_to_string("my_template.html", {"foo": "bar"}) # rendered = render_to_string("random_simpsons/my_template.html", {"foo": "bar"})
#return HttpResponse('<h1>Hello !</h1>') #return HttpResponse('<h1>Hello !</h1>')
def simpsons(request): def simpsons(request):
@@ -0,0 +1,27 @@
# Generated by Django 4.2.29 on 2026-06-11 19:50
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='SimpsonsData',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('season', models.IntegerField()),
('episode', models.IntegerField()),
('url', models.CharField(max_length=100)),
('seen', models.CharField(max_length=100)),
],
options={
'db_table': 'simpsons',
},
),
]
@@ -0,0 +1,18 @@
# Generated by Django 4.2.29 on 2026-06-11 20:31
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('simpsons', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='simpsonsdata',
name='seen',
field=models.BooleanField(),
),
]
@@ -0,0 +1,10 @@
from django.db import models
class SimpsonsData(models.Model):
season = models.IntegerField()
episode = models.IntegerField()
url = models.CharField(max_length=100)
seen = models.BooleanField()
class Meta:
db_table = 'simpsons'
@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.
+276
View File
@@ -0,0 +1,276 @@
from django.apps import AppConfig
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect
from django.core.files import File
from kubernetes import client, config
from celery import shared_task
from lxml import html
import requests
import os
import json
import time
import random
import mimetypes
import ruamel.yaml
import yaml
from urllib import request as urlrequest
from urllib import parse as urlparse
proxy_url = 'http://gluetun-svc.gluetun.svc:8888'
proxy = urlrequest.ProxyHandler({
'http': proxy_url,
'https': proxy_url # Add the handler for HTTPS
})
proxies = {
"http" : proxy_url,
"https" : proxy_url
}
destination_folder = "/stash/"
def hello(request):
return HttpResponse('<h1>Hello stash!</h1>')
def form(request):
return render(request, 'stash/stash_form.html',{})
def album(request):
return render(request, 'stash/album_form.html',{})
def simple(request):
return render(request, 'stash/simple_form.html',{})
def check_and_create_destination_folder(name):
#check if the output directory exist and create if not
if not os.path.isdir(destination_folder):
os.makedirs(destination_folder)
#check if the named directory exist and create if not
destination_named_folder = os.path.join(destination_folder,name)
if not os.path.isdir(destination_named_folder):
os.makedirs(destination_named_folder)
return destination_named_folder
def album_form(request):
name = request.GET.get('name')
url = request.GET.get('url')
external_galleries = request.GET.get('external_galleries')
album_downloader.delay(name=name,url=url,external_galleries=external_galleries)
text_generated = "successfully sent to the album downloader"
return HttpResponse(text_generated, content_type="text/plain")
@shared_task()
def album_downloader(name,url,external_galleries):
print(name+" "+url+" "+external_galleries)
opener = urlrequest.build_opener(proxy)
urlrequest.install_opener(opener)
req = urlrequest.Request(url)
urlcurl = urlrequest.urlopen(req).read()
page = requests.get(url,proxies=proxies)
webpage = html.fromstring(page.content)
#create the prerequisites folder
destination_named_folder = check_and_create_destination_folder(name=name)
#get all URLs from the code source (searching for href tag on the code)
#https://stackoverflow.com/questions/21455349/xpath-query-get-attribute-href-from-a-tag
webpage_all_url = webpage.xpath('//a/@href')
#search for the href that contains the galleries
webpage_all_album_url = webpage.xpath("//a[contains(@href,'pornpics.com/galleries/')]/@href")
#print(webpage_all_album_url[3])
#print(webpage_all_album_url)
for album in webpage_all_album_url:
print("Album "+album)
print("")
page = requests.get(album,proxies=proxies)
webpage = html.fromstring(page.content)
images_list = webpage.xpath("//a[contains(@href,'cdni.pornpics.com/1280/')]/@href")
images_downloader.delay(name=name,images_url_list=images_list,destination_named_folder=destination_named_folder)
print(images_list)
return 0
@shared_task()
def images_downloader(name,images_url_list,destination_named_folder):
for image_url in images_url_list:
split = urlparse.urlsplit(image_url)
#filename = destination_folder + split.path.split("/")[-1]
filename = os.path.join(destination_named_folder,split.path.split("/")[-1])
print("downloading: "+filename+" -- "+image_url)
opener = urlrequest.build_opener(proxy)
urlrequest.install_opener(opener)
try:
urlrequest.urlretrieve(image_url, filename )
except:
print("Can't download "+filename+" -- "+image_url)
individual_image_downloader.delay(image_url=image_url, filename=filename)
return 0
@shared_task()
def individual_image_downloader(image_url, filename ):
print("Downloading again: "+filename+" -- "+image_url)
opener = urlrequest.build_opener(proxy)
urlrequest.install_opener(opener)
try:
urlrequest.urlretrieve(image_url, filename )
except:
print("Still Can't download "+filename+" -- "+image_url+" == Cancelling")
return 0
def simple_form(request):
name = request.GET.get('name')
reddit_downloader(username=name)
text_generated = "successfully sent to the reddit downloader"
return HttpResponse(text_generated, content_type="text/plain")
def reddit_downloader(username):
#create the prerequisites folder
destination_named_folder = check_and_create_destination_folder(name=username)
url = "https://www.reddit.com/user/"+username+"/submitted/.json?limit=1000"
opener = urlrequest.build_opener(proxy)
urlrequest.install_opener(opener)
req = urlrequest.Request(url)
urlcurl = urlrequest.urlopen(req).read()
data = json.loads(urlcurl)
picture_list=[]
for children in data['data']['children']:
print("adding to the list : "+children['data']['url'])
picture_list.append(children['data']['url'])
images_downloader.delay(name=username,images_url_list=picture_list,destination_named_folder=destination_named_folder)
return 0
def redgif_donloader(username):
#on te front page of the user , https://www.redgifs.com/users/princesspizookie
# F12 and search network , find something that start as api.redgifs.com
# and the file is search?order=new&count=40&type=g
# copy as curl and you got the bearer
#curl curl 'https://api.redgifs.com/v2/users/princesspizookie/search?order=new&count=40&type=g'
#and you get the URLS , needs to be parsedw
return 0
def incremental(request):
return render(request, 'stash/incremental_form.html',{})
def incremental_form(request):
name = request.GET.get('name')
url = request.GET.get('url')
url_suffix = request.GET.get('url_suffix')
maximum_increment = int(request.GET.get('maximum_increment'))
minimum_increment = request.GET.get('minimum_increment')
increment_and_download.delay(minimum_increment=minimum_increment,maximum_increment=maximum_increment,url=url,url_suffix=url_suffix,name=name)
text_generated = "successfully sent to celery"
return HttpResponse(text_generated, content_type="text/plain")
@shared_task()
def increment_and_download(minimum_increment,maximum_increment,url,url_suffix,name):
if minimum_increment == None:
minimum_increment = 1
text_generated = ""
minimum_increment = int(minimum_increment)
maximum_increment = int(maximum_increment)
#check if the output directory exist and create if not
if not os.path.isdir(destination_folder):
os.makedirs(destination_folder)
#check if the named directory exist and create if not
destination_named_folder = os.path.join(destination_folder,name)
if not os.path.isdir(destination_named_folder):
os.makedirs(destination_named_folder)
print("\n downloading for "+name+" "+url+"XXX"+url_suffix)
for increment in range(minimum_increment,maximum_increment):
print("increment : "+str(increment)+"/"+str(maximum_increment))
if len(str(increment)) == 3:
increment_generated ='0' + str(increment)
elif len(str(increment)) == 2:
increment_generated ='00' + str(increment)
elif len(str(increment)) == 1:
increment_generated ='000' + str(increment)
url_generated = url+increment_generated+url_suffix
print(url_generated)
destination_filename = increment_generated+url_suffix
destination_file = os.path.join(destination_named_folder,destination_filename)
print(destination_file)
opener = urlrequest.build_opener(proxy)
urlrequest.install_opener(opener)
urlrequest.urlretrieve(url_generated, destination_file )
text_generated = "\n downloading for "+name+" "+url+increment_generated+url_suffix
print("download completed for "+name+" of "+str(maximum_increment)+" images")
return text_generated
def handle_survey_form(request):
config.load_kube_config(config_file='/kubeconfig/config')
v1 = client.BatchV1Api()
name = request.GET.get('name')
url = request.GET.get('url')
external_galleries = str(request.GET.get('external_galleries'))
stash_folder = "/stash"
if external_galleries:
print("external_galleries is not null")
performer_external_galleries = stash_folder+"/"+name+"_external_galleries.txt"
with open(performer_external_galleries, "a") as f:
f.write(external_galleries)
skip_searching_gallery = True
else:
print("external_galleries is null")
skip_searching_gallery = False
with open('django_code/stash_management/templates/template.stash-pornpics-dowloader.job.yml', 'r') as file:
#get the manifest in a variable template_manifest from the manifest file
template_manifest = yaml.safe_load(file)
#edit the container name
template_manifest['metadata']['name'] ="stash-pornpics-dowloader-"+name
template_manifest['spec']['template']['spec']['containers'][0]['name'] ="stash-pornpics-dowloader-"+name
#edit the command based on the input
command=['bash', '/config/download.sh', '--http_proxy', 'http://gluetun-svc.gluetun.svc:8888', '--BASE_URL', url, '--pornstars', name]
template_manifest['spec']['template']['spec']['containers'][0]['command']=command
#execute based on the value
api_response = v1.create_namespaced_job(body=template_manifest,namespace='stash')
return HttpResponse(api_response)
@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.
@@ -0,0 +1,12 @@
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
from django.shortcuts import render
def hello(request):
return HttpResponse('<h1>Hello stash!</h1>')
def home(request):
return render(request, 'stash/listing.html')
@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.
@@ -0,0 +1,53 @@
import redis
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.shortcuts import render
r = redis.Redis(
host='django-redis-svc',
port=6379,
db=0 # The default Redis database index
)
def hello(request):
return HttpResponse('<h1>Hello redirect!</h1>')
def redirect(request):
return render(request, 'website_redirection/redirect_form.html',{})
def clearkey_process(request):
key = request.GET.get('key')
r.delete(key)
return 0
def redirect_process(request):
key = request.GET.get('key')
value = request.GET.get('value')
key = key.lower()
r.set(key, value)
text_generated = "successfully set "+value+" to "+key
return HttpResponse(text_generated, content_type="text/plain")
def display_key(request,key):
value = r.get(key)
value_extracted = str(value.decode())
text_generated = key+" is set to "+value_extracted
return HttpResponse(text_generated, content_type="text/plain")
def redirect_to_key(request,key):
value = r.get(key)
if value == None:
icon_url = r.get('icon')
if icon_url == None:
icon_url = "https://cdn-icons-png.flaticon.com/512/6402/6402576.png"
print(key+" is not setup, displaying default page")
return render(request, 'website_redirection/blank_page.html', {'title': key,'icon_url':icon_url})
else:
value_extracted = str(value.decode('utf-8'))
print(key+" is setup to : "+value_extracted)
print(value_extracted)
return HttpResponseRedirect(value_extracted)
@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.
@@ -0,0 +1,35 @@
"""
URL configuration for django_code project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/4.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from website_redirection import apps as website_redirectionapp
urlpatterns = [
# path('admin/', admin.site.urls),
################### Redirect ###################
path('', website_redirectionapp.redirect),
path('hello/', website_redirectionapp.hello),
path('set/', website_redirectionapp.redirect),
path('get/<str:key>', website_redirectionapp.display_key),
path('go/<str:key>', website_redirectionapp.redirect_to_key),
path('redirect-form/', website_redirectionapp.redirect_process, name='submit_form'),
path('clearkey/', website_redirectionapp.clearkey_process, name='submit_form'),
]
-21
View File
@@ -1,21 +0,0 @@
from django.shortcuts import render
def home(request):
thislist = ["apple", "banana", "cherry"]
return render(request, 'home.html',{'thislist': thislist})
def about(request):
thislist = ["apple", "banana", "cherry"]
return render(request, 'about.html',{'thislist': thislist})
def success(request):
return render(request, 'start.html',{'deployment': 'django','url':'https://google.com'})
def scale_up(request,namespace_name,deploy_name):
baseurl = "{0}://{1}{2}".format(request.scheme, request.get_host(), request.path)
return render(request, 'start.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com','baseurl': baseurl})
def scale_down(request,namespace_name,deploy_name):
baseurl = "{0}://{1}{2}".format(request.scheme, request.get_host(), request.path)
return render(request, 'shutdown.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com','baseurl': baseurl})
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
from .celery_settings import app as celery_app
__all__ = ("celery_app",)
@@ -0,0 +1,8 @@
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_code.settings')
app = Celery("django_code")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()
+7
View File
@@ -0,0 +1,7 @@
from django.conf import settings
from django_hosts import patterns, host
host_patterns = patterns('',
host(r"django-testing", settings.ROOT_URLCONF, name="django-testing"),
host(r"redirect", 'apps.website_redirection.urls', name="redirect"),
)
+46
View File
@@ -0,0 +1,46 @@
# routers.py
class ProjectDatabaseRouter:
"""
A router to control all database operations on models in the
simpsons and cloudmanager applications.
"""
def db_for_read(self, model, **hints):
"""Attempts to read simpsons and cloudmanager models go to their specific dbs."""
if model._meta.app_label == 'simpsons':
return 'simpsons_db'
if model._meta.app_label == 'cloudmanager':
return 'cloudmanager_db'
return 'default'
def db_for_write(self, model, **hints):
"""Attempts to write simpsons and cloudmanager models go to their specific dbs."""
if model._meta.app_label == 'simpsons':
return 'simpsons_db'
if model._meta.app_label == 'cloudmanager':
return 'cloudmanager_db'
return 'default'
def allow_relation(self, obj1, obj2, **hints):
"""Allow relations if both models are in the same database."""
# Prevents accidental foreign key relationships across different physical DBs
if (
obj1._meta.app_label in ['simpsons', 'cloudmanager'] or
obj2._meta.app_label in ['simpsons', 'cloudmanager']
):
return obj1._meta.app_label == obj2._meta.app_label
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""Ensure the app's models only show up in the designated database."""
if app_label == 'simpsons':
return db == 'simpsons_db'
if app_label == 'cloudmanager':
return db == 'cloudmanager_db'
# Ensure default Django apps (auth, sessions, etc.) don't migrate into simpsons/cloudmanager
if db in ['simpsons_db', 'cloudmanager_db']:
return False
return None
+49 -7
View File
@@ -9,7 +9,7 @@ https://docs.djangoproject.com/en/4.2/topics/settings/
For the full list of settings and their values, see For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.2/ref/settings/ https://docs.djangoproject.com/en/4.2/ref/settings/
""" """
import os
from pathlib import Path from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'. # Build paths inside the project like this: BASE_DIR / 'subdir'.
@@ -23,10 +23,11 @@ BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = 'django-insecure-71%)_#e#o9-dl2o^6mfud-*rw+4+8vy-nd*bzeier&(34ap-p9' SECRET_KEY = 'django-insecure-71%)_#e#o9-dl2o^6mfud-*rw+4+8vy-nd*bzeier&(34ap-p9'
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True #DEBUG = os.getenv("DEBUG")
DEBUG = os.getenv("DEBUG", "False").lower() in ("true", "1", "t")
ALLOWED_HOSTS = ['reverse.tryton.geeraert.eu','192.168.4.100','django.tryton.geeraert.eu','localhost']
ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS").split(",")
# Application definition # Application definition
@@ -38,9 +39,13 @@ INSTALLED_APPS = [
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'bootstrap5', 'bootstrap5',
'django_hosts',
'apps.cloudmanager.apps.CloudmanagerConfig',
'apps.random_simpsons.apps.RandomSimpsonsConfig',
] ]
MIDDLEWARE = [ MIDDLEWARE = [
'django_hosts.middleware.HostsRequestMiddleware',
'django.middleware.security.SecurityMiddleware', 'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
@@ -48,15 +53,21 @@ MIDDLEWARE = [
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django_hosts.middleware.HostsResponseMiddleware',
] ]
ROOT_URLCONF = 'django_code.urls' ROOT_URLCONF = 'django_code.urls'
ROOT_HOSTCONF = 'django_code.hosts'
DEFAULT_HOST = 'django-testing'
TEMPLATES = [ TEMPLATES = [
{ {
'BACKEND': 'django.template.backends.django.DjangoTemplates', 'BACKEND': 'django.template.backends.django.DjangoTemplates',
#'DIRS': ["/code/django_code/templates","/code/django_code/dashboard/templates/"], #'DIRS': ["/code/django_code/templates","/code/django_code/dashboard/templates/"],
'DIRS': [BASE_DIR / "templates","django_code/dashboard/templates/"], 'DIRS': [
BASE_DIR / "templates"
],
'APP_DIRS': True, 'APP_DIRS': True,
'OPTIONS': { 'OPTIONS': {
'context_processors': [ 'context_processors': [
@@ -79,9 +90,25 @@ DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.sqlite3', 'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3',
} },
'cloudmanager_db': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'cloudmanager',
'USER': os.environ.get('DB_USERNAME'),
'PASSWORD': os.environ.get('DB_PASSWORD'),
'HOST': os.environ.get('DB_HOST'),
'PORT': os.environ.get('DB_PORT'),
},
'simpsons_db': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'simpsons',
'USER': os.environ.get('DB_USERNAME'),
'PASSWORD': os.environ.get('DB_PASSWORD'),
'HOST': os.environ.get('DB_HOST'),
'PORT': os.environ.get('DB_PORT'),
},
} }
DATABASE_ROUTERS = ['django_code.routers.ProjectDatabaseRouter']
# Password validation # Password validation
# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators # https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators
@@ -117,10 +144,25 @@ USE_TZ = True
# Static files (CSS, JavaScript, Images) # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.2/howto/static-files/ # https://docs.djangoproject.com/en/4.2/howto/static-files/
STATIC_URL = 'static/' STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / "templates/cloudmanager/css",
BASE_DIR / "templates/cloudmanager/fonts",
BASE_DIR / "templates/cloudmanager/images",
BASE_DIR / "templates/cloudmanager/js"
]
# Default primary key field type # Default primary key field type
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
# #
# Celery settings
CELERY_BROKER_URL = "redis://django-redis-svc:6379"
CELERY_RESULT_BACKEND = "redis://django-redis-svc:6379"
CELERY_IMPORTS = [
'apps.stash_management.apps', # This line imports the tasks.py file
# Add other app tasks here if needed
]
+34 -16
View File
@@ -16,14 +16,17 @@ Including another URLconf
""" """
from django.contrib import admin from django.contrib import admin
from django.urls import path from django.urls import path
#from docker_connection import views, apps #from apps.cloudmanager import (credentials,db_interaction)
from random_simpsons import apps as random_simpsons from apps.cloudmanager import apps as cloudmanager_apps
from paperless_django import apps as paperless_django from apps.cloudmanager import views as cloudmanager_views
from onenote import apps as onenote from apps.random_simpsons import apps as random_simpsons
from dashboard import apps as dashboardapp from apps.dashboard import apps as dashboardapp
from dashboard import views as dashboardview from apps.dashboard import views as dashboardview
from kubernetes_connection import apps as kubernetes_connection from apps.kubernetes_connection import apps as kubernetes_connection
from stash_management import apps as stashapp from apps.stash_management import apps as stashapp
from apps.stash_management import views as stashview
from apps.website_redirection import apps as website_redirectionapp
urlpatterns = [ urlpatterns = [
# path('admin/', admin.site.urls), # path('admin/', admin.site.urls),
@@ -33,12 +36,13 @@ urlpatterns = [
path('simpsons/', random_simpsons.simpsons), path('simpsons/', random_simpsons.simpsons),
path('download_file/', random_simpsons.download_file), path('download_file/', random_simpsons.download_file),
################### paperless ################### ################### Redirect ###################
path('paperless/hello/', paperless_django.hello), path('redirect/hello/', website_redirectionapp.hello),
# path('simpsons/', random_simpsons.simpsons), path('redirect/set/', website_redirectionapp.redirect),
path('redirect/get/<str:key>', website_redirectionapp.display_key),
################### onenote ################### path('redirect/go/<str:key>', website_redirectionapp.redirect_to_key),
path('onenote/hello/', onenote.hello), path('redirect/redirect-form/', website_redirectionapp.redirect_process, name='submit_form'),
path('redirect/clearkey/', website_redirectionapp.clearkey_process, name='submit_form'),
################### onenote ################### ################### onenote ###################
path('dashboard/hello/', dashboardapp.hello), path('dashboard/hello/', dashboardapp.hello),
@@ -58,11 +62,17 @@ urlpatterns = [
path('kubernetes_connection/scale_up/<str:namespace_name>/<str:deploy_name>', kubernetes_connection.scale_up), path('kubernetes_connection/scale_up/<str:namespace_name>/<str:deploy_name>', kubernetes_connection.scale_up),
path('kubernetes_connection/scale_down/<str:namespace_name>/<str:deploy_name>', kubernetes_connection.scale_down), path('kubernetes_connection/scale_down/<str:namespace_name>/<str:deploy_name>', kubernetes_connection.scale_down),
################## kubernetes_connection##### ################## stash#####
path('stash/', stashview.home),
path('stash/hello/', stashapp.hello), path('stash/hello/', stashapp.hello),
path('stash/form/', stashapp.form), path('stash/form/', stashapp.form),
path('stash/incremental/', stashapp.incremental),
path('stash/album/', stashapp.album),
path('stash/album-form/', stashapp.album_form, name='submit_form'),
path('stash/simple/', stashapp.simple),
path('stash/simple-form/', stashapp.simple_form, name='submit_form'),
path('stash/submit-form/', stashapp.handle_survey_form, name='submit_form'), path('stash/submit-form/', stashapp.handle_survey_form, name='submit_form'),
path('stash/incremental-form/', stashapp.incremental_form, name='submit_form'),
# path('bookstack/', docker_connection.apps.hello), # path('bookstack/', docker_connection.apps.hello),
# path('test/', docker_connection.apps.http_call_test), # path('test/', docker_connection.apps.http_call_test),
@@ -70,5 +80,13 @@ urlpatterns = [
# path('simpsons/', random_simpsons.hello), # path('simpsons/', random_simpsons.hello),
# path('docker/<str:action>/<str:id_docker>', docker_connection.apps.docker_call), # path('docker/<str:action>/<str:id_docker>', docker_connection.apps.docker_call),
################### cloudmanager ###################
path('cmm/', cloudmanager_apps.redirect),
path('cmm/hello', cloudmanager_apps.hello, name='hello'),
path('cmm/coucou', cloudmanager_views.coucou, name='coucou'),
path('cmm/display', cloudmanager_views.display, name='display'),
#path('cmm/run-action/', cloudmanager_views.trigger_my_action, name='run_my_action_url'),
#path('change-schedule/', cloudmanager_views.change_schedule, name='change_schedule'),
#path('cmm/main/', db_interaction.main),
] ]
+7
View File
@@ -14,3 +14,10 @@ from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_code.settings') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_code.settings')
application = get_wsgi_application() application = get_wsgi_application()
https_proxy = "gluetun-svc.gluetun.svc:8888"
proxyDict = {
"https" : https_proxy,
}
#os.environ["PROXIES"] = proxyDict
-27
View File
@@ -1,27 +0,0 @@
from django.apps import AppConfig
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect
#from django.template.loader import render_to_string
from django.template import loader
#import time
#import random
def hello(request):
# htmlContent = '
#<!DOCTYPE html>
#<html lang="en">
#<body>
#<strong>Hello World from const</strong>
#</body>
#</html>
#'
# response = "coucou"
# context = {'response': HttpResponse(response)}
# return HttpResponse(htmlContent)
# return HttpResponse('<h1>Hello onenote! <h1>')
# return render(request, 'hello.html', context)
template = loader.get_template('onenote/hello.html')
# template = loader.get_template('onenote/Roser.mht')
return HttpResponse(template.render())
-6
View File
@@ -1,6 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<body>
<strong>Hello World</strong>
</body>
</html>
-16
View File
@@ -1,16 +0,0 @@
from django.apps import AppConfig
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect
import time
import random
def hello(request):
return HttpResponse('<h1>Hello paperless! <h1>')
def redirect_authenticated(request):
final_url = "https://paperless.tryton.geeraert.eu/"
print(final_url)
return redirect(str(final_url))
-49
View File
@@ -1,49 +0,0 @@
from django.apps import AppConfig
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect
from jinja2 import Environment, FileSystemLoader
from django.core.files import File
from kubernetes import client, config
import time
import random
import mimetypes
import ruamel.yaml
import yaml
import urllib.request
def hello(request):
return HttpResponse('<h1>Hello stash!</h1>')
def form(request):
return render(request, 'stash_form.html',{})
def handle_survey_form(request):
config.load_kube_config(config_file='/kubeconfig/config')
v1 = client.BatchV1Api()
name = request.GET.get('name')
url = request.GET.get('url')
external_galleries = request.GET.get('external_galleries')
with open('django_code/stash_management/templates/template.stash-pornpics-dowloader.job.yml', 'r') as file:
#get the manifest in a variable template_manifest from the manifest file
template_manifest = yaml.safe_load(file)
#edit the container name
template_manifest['metadata']['name'] ="stash-pornpics-dowloader"+name
template_manifest['spec']['template']['spec']['containers'][0]['name'] ="stash-pornpics-dowloader-"+name
#edit the command based on the input
command=['bash', '/config/download.sh', '--http_proxy', 'http://gluetun-svc.gluetun.svc:8888', '--BASE_URL', url, '--pornstars', name,'--external_gallery', external_galleries]
template_manifest['spec']['template']['spec']['containers'][0]['command']=command
#execute based on the value
api_response = v1.create_namespaced_job(body=template_manifest,namespace='stash')
return HttpResponse(api_response)
@@ -1 +0,0 @@
<h1>Hello template!</h1>
@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="icon" type="image/x-icon" href="https://cdn-icons-png.flaticon.com/512/6402/6402576.png">
<title> title </title>
<table>
<tr>
<th>namespace</th>
<th>name</th>
<th>replicas</th>
</tr>
{% block content %}
{% for machine_target in list_servers_up %}
<tr>
<td>{{ machine_target.0 }}</td>
<td>{{ machine_target.1 }}</td>
<td>{{ machine_target.2 }}</td>
</tr>
{% endfor %}
{% endblock %}
</table>
</head>
</html>
@@ -0,0 +1,294 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Redirect form</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
@charset "UTF-8";
.m-b-xs {
margin-bottom: 2%;
}
.m-b-md {
margin-bottom: 10%;
}
.m-t-xs {
margin-top: 2%;
}
.m-t-sm {
margin-top: 5%;
}
* {
outline: 0 !important;
}
body {
padding: 2% 0;
background-color: #37404a;
}
h1 {
font-family: "Roboto", sans-serif;
font-size: 2.2em;
font-weight: 300;
color: #85ffc7;
text-transform: uppercase;
}
p {
font-family: "Roboto", sans-serif;
font-size: 1.1em;
font-weight: 300;
color: #fff;
}
a {
color: #fff;
}
a:hover {
text-decoration: none;
color: #fff;
}
#survey-form label,
#survey-form .labels {
display: block;
margin-bottom: 2%;
font-family: "Roboto", sans-serif;
font-size: 1.1em;
font-weight: 300;
color: #fff;
letter-spacing: 0.5px;
}
#survey-form input::-webkit-input-placeholder {
color: transparent !important;
}
#survey-form input::-moz-placeholder {
color: transparent !important;
}
#survey-form input:-ms-input-placeholder {
color: transparent !important;
}
#survey-form input:-moz-placeholder {
color: transparent !important;
}
#survey-form input,
#survey-form select {
display: block;
width: 100%;
overflow: hidden;
outline: none;
border: 2px solid #333;
}
#survey-form input {
margin-top: 1.5%;
padding: 0 0 5px 0;
background: transparent;
border: none;
outline: none;
border-bottom: 2px solid #fff;
font-size: 1.1em;
font-weight: 300;
color: #85ffc7;
}
#survey-form input:focus {
border-color: #85ffc7;
}
#survey-form [type=checkbox],
#survey-form [type=radio] {
display: inline-block;
width: auto;
margin: 0px 10px 0 0;
}
#survey-form [type=checkbox],
#survey-form [type=radio] {
display: inline-block;
margin: 0 10px 0 0 !important;
position: relative;
top: 5px;
right: 0;
bottom: 0;
left: 0;
-webkit-appearance: none;
-moz-appearance: none;
-o-appearance: none;
appearance: none;
height: 23px;
width: 23px;
transition: all 0.15s ease-out 0s;
background: #37404a;
color: #fff;
cursor: pointer;
outline: none;
z-index: 1000;
border: 1px solid #fff;
}
#survey-form [type=checkbox]:hover,
#survey-form [type=radio]:hover {
border-color: #85ffc7;
}
#survey-form [type=checkbox]:checked:before,
#survey-form [type=radio]:checked:before {
display: inline-block;
height: 21px;
width: 21px;
position: relative;
left: 0;
bottom: 0;
content: "";
text-align: center;
font-family: "Glyphicons Halflings";
line-height: 20px;
font-size: 15px;
color: #85ffc7;
}
#survey-form [type=checkbox]:focus,
#survey-form [type=radio]:focus {
outline: none;
border-color: #fff;
}
#survey-form [type=radio] {
border-radius: 50%;
}
#survey-form [type=radio]:after {
border-radius: 50%;
}
#survey-form [type=number] {
width: 45px;
}
#survey-form [type=number]::-webkit-inner-spin-button, #survey-form [type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
margin: 0;
}
#survey-form select {
height: 40px;
padding-left: 5px;
background-color: #37404a;
border: 2px solid #fff;
color: #85ffc7;
}
#survey-form select option {
padding: 5px 10px;
font-weight: 300;
cursor: pointer;
}
#survey-form select option:hover {
background-color: #85ffc7;
}
#survey-form textarea {
resize: none;
margin-top: 2%;
padding: 10px 10px 0px 20px;
width: 100%;
height: 90px;
color: #85ffc7;
background-color: #37404a;
border: 2px solid #fff;
}
#survey-form .btn {
display: inline-block;
position: relative;
width: 100%;
margin: 3% 0 0 0;
height: 45px;
text-transform: uppercase;
text-decoration: none;
cursor: pointer;
border: 3px solid #85ffc7;
border-radius: 0;
font-weight: 500;
font-size: 1.2em;
color: #85ffc7;
text-align: center;
background: none;
transition: color 0.25s ease;
}
#survey-form .btn:after {
position: absolute;
content: "";
top: 0;
left: 0;
width: 0;
height: 100%;
background-color: #85ffc7;
transform-origin: left;
transition: width 0.5s ease;
z-index: -1;
}
#survey-form .btn:hover {
color: #37404a;
}
#survey-form .btn:hover:after {
width: 100%;
}
#survey-form fieldset {
margin: 5% 0 0 0;
}
.copyright {
text-align: center;
font-size: 10px;
color: #fff;
}
.copyright i {
color: #ef5350;
}
@media only screen and (max-width: 600px) {
body {
padding: 8% 0;
}
}
</style>
</head>
<main id="main" class="container">
<div class="row">
<div class="col-xs-12 col-lg-offset-3 col-lg-6">
<div class="m-b-md text-center">
<h1 id="title">Redirect Form</h1>
<p id="description" class="description" class="text-center">Download form</p>
</div>
<form method="GET" action="/redirect-form/" id="survey-form" name="survey-form">
<fieldset>
<label for="key" id="key-label">
Key *
<input class="" type="text" id="key" name="key" placeholder="Enter your key (required)" required />
</label>
</fieldset>
<fieldset>
<label for="value" id="value-label">
Value *
<input class="" type="value" id="value" name="value" placeholder="Enter the value (required)" />
</label>
</fieldset>
<button id="submit" type="submit" class="btn">Submit the form</button>
<button id="clearkey" type="submit" formaction="/clearkey/" class="btn">Clear the key</button>
<div class="container">
<div class="row">
<div class="col">
<button type="button" onclick="location.href='/go/streaming'" class="btn">Streaming</button>
</div>
<div class="col">
<button type="button" onclick="location.href='/go/streaming-sam'" class="btn">Streaming Sam</button>
</div>
</div>
</div>
</form>
</div>
</div>
</main>
</html>
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,407 @@
/* Blue Version CSS */
a:link, a:visited, a:hover, a:focus{text-decoration: none; color: #00cfef;}
/* Home Slider */
#home-slider .caption h1 strong{
color:#00cfef;
}
.left-control:hover,
.right-control:hover {
background-color: #00cfef;
}
.learn-more {
border: 2px solid #00cfef;
}
.learn-more:hover {
background: #00cfef;
}
.left-control, .right-control {
border:1px solid #00cfef;
}
/* End Home Slider */
/* Navbar */
/* Link Color */
.navbar-inverse { border-color: #00cfef}
.navbar-inverse .navbar-nav>li>a:hover, .navbar-inverse .navbar-nav>li>a:focus { color: #00cfef}
.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:hover, .navbar-inverse .navbar-nav>.open>a:focus { color: #00cfef}
.navbar-inverse .navbar-nav>.active>a:hover, .navbar-inverse .navbar-nav>.active>a:focus { color: #00cfef}
.dropdown-menu>li>a { color: #00cfef}
.navbar-inverse .navbar-nav>.dropdown>a:hover .caret { border-top-color: #00cfef}
.navbar-toggle {
border: transparent;
background-color: #00cfef;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
background-color: #00cfef;
}
/* End Navbar */
/* Loader */
.spinner > div
{
background: #00cfef;
}
/* End Loader*/
/* Titles & Color */
.section-title h1 span{
background-color: #00cfef;
}
.btn {
background-image: none;
background-color: #00cfef;
color: #fff;
}
a.btn {
color: #fff;
}
.btn a {
color: #fff;
}
.btn-inverse:hover{
color: #fff;
background-color: #00cfef;
}
.btn-inverse:hover a{
color: #fff;
}
a.btn-inverse:hover {
color: #fff;
}
.btn:hover {
background-color: transparent;
}
.btn:hover a{
color: #00cfef;
}
.btn-inverse {
color: #00cfef;
border: 1px solid #00cfef;
}
a.btn-inverse{
color: #00cfef;
}
.btn-inverse a{
color: #00cfef;
}
a.btn:hover {
color: #00cfef;
}
.btn a:hover {
color: #00cfef;
}
.btn-one{
background: none repeat scroll 0 0 #00cfef;
border: 1px solid #00cfef;
color: #fff !important;
}
.btn-one:hover {
border: 1px solid #00cfef;
color: #00cfef;
background: transparent;
}
.btn:hover {
border: 1px solid #00cfef;
color: #00cfef;
}
.hovicon.effect-1 {
background: #00cfef;
}
.hovicon.effect-1:after {
box-shadow: 0 0 0 4px #00cfef;
}
.text-color {
background: none repeat scroll 0 0 #00cfef;
}
.dporcaps-negative {
background: none repeat scroll 0 0 #00cfef;
}
.dporcaps {
color: #00cfef;
}
.blockqoute-style-2 {
border-left: 5px solid #00cfef;
}
cite {
color: #00cfef;
}
/* Effect 1a */
.hovicon.effect-1.sub-a:hover {
background: #00cfef;
}
.main-color
{
color: #00cfef;
}
.white-color
{
color: #fff;
}
/* End Titles & Color */
/* Facts */
.number p:first-letter {
color: #00cfef;
}
/* End Facts */
/* Team Member */
.team-member-holder:hover {
border-color: #00cfef;
}
.img-overlay {
background: #00cfef;
}
.view-profile {
color:#00cfef;
}
.team-member-social-list-item {
color: #00cfef;
}
.team-details h3{
color: #00cdef;
}
/* End Team Member */
/* Skills */
.skills h4:first-letter {
color: #00cfef;
}
/* End Skills */
/* Works */
#filters li span.active,#filters li span:hover {
background: #00cfef;
}
#filters li span {
border: 1px solid #00cfef;
color: #00cfef;
}
.project-details h3 {
color: #00cfef;
}
.project-description h3 {
color: #00cfef;
}
/* End Works */
/* Partners */
.partners-img:hover img{
border-color: #00cfef;
}
/* End Partners */
/* Pricing */
.single-table h4:first-letter {
color: #00cfef;
}
.price-icon {
background-color: #00cfef;
}
span.price {
color: #00cfef;
}
.single-table .btn-price, .sign_form input[type="submit"] {
background: none repeat scroll 0 0 #00cfef;
border: 1px solid #00cfef;
}
.single-table .btn-price:hover {
border: 1px solid #00cfef;
color: #00cfef;
}
.single-table.featured .price-icon, .single-table.featured .btn-price {
color: #00cfef;
}
.single-table.featured{
background-color: #00cfef;
}
.single-table.featured .price {
background-color: #00cfef;
}
/* End Pricing */
/* Clients */
.clients h5 {
color: #00cfef;
}
.carousel-indicators .active {
background-color: #00cfef;
border-color: #00cfef;
}
.carousel-indicators li {
border-color: #00cfef;
}
/* End Clients */
/* News */
.post-date {
background-color: #00cfef;
}
.entry-title a:hover {
color: #00cfef;
}
/* End News */
/* Blog */
.widget.tags-cloud a {
border: 1px solid #00cfef;
}
.widget.tags-cloud a:hover {
border: 1px solid #00cfef;
background-color: #00cfef;
}
.tags a {
border: 1px solid #00cfef;
}
.tags a:hover {
border: 1px solid #00cfef;
background-color: #00cfef;
}
.pager li > a, .pager li > span {
border: 1px solid #00cfef;
}
.pager li > a:hover, .pager li > a:focus {
border: 1px solid #00cfef;
background-color: #00cfef;
}
/* End Blog */
/* Tweet */
#twitter-carousel .item a {
color: #00cfef;
}
.twitter-icon .fa-twitter:after {
border-color: #00cfef transparent transparent;
}
.twitter-icon .fa-twitter, .twitter-left-control:hover, .twitter-right-control:hover {
background-color: #00cfef;
}
/* End Tweet */
/* Footer */
.bottom-footer {
border-top: 7px solid #00cfef;
}
.bottom-footer-left p a {
color: #00cfef;
}
.bottom-social-icons li a i{
background-color: #00cfef;
border: 1px solid #00cfef;
}
.bottom-social-icons li a i:hover{
color: #00cfef;
}
/* End Footer */
/* Contacts */
.contact_form i{
color: #00cfef;
}
.contact_form input[type="submit"] {
background: #00cfef;
border: 1px solid #00cfef;
}
.contact_form input[type="submit"]:hover {
color: #00cfef;
}
.sign_form input[type="submit"]:hover {
color: #00cfef;
}
/* End Contacts */
/* To Top */
a.scroll-up {
background: none repeat scroll 0 0 #00cfef;
}
a.scroll-up i {
color: #fff;
}
a.scroll-up:hover i {
color: #00cfef;
}
a.scroll-up:hover {
color: #00cfef;
border-color: #00cfef;
}
/* End To Top */
@@ -0,0 +1,470 @@
/*!
* Bootstrap v3.3.1 (http://getbootstrap.com)
* Copyright 2011-2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
}
.btn-default:active,
.btn-primary:active,
.btn-success:active,
.btn-info:active,
.btn-warning:active,
.btn-danger:active,
.btn-default.active,
.btn-primary.active,
.btn-success.active,
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn-default .badge,
.btn-primary .badge,
.btn-success .badge,
.btn-info .badge,
.btn-warning .badge,
.btn-danger .badge {
text-shadow: none;
}
.btn:active,
.btn.active {
background-image: none;
}
.btn-default {
text-shadow: 0 1px 0 #fff;
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #dbdbdb;
border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus {
background-color: #e0e0e0;
background-position: 0 -15px;
}
.btn-default:active,
.btn-default.active {
background-color: #e0e0e0;
border-color: #dbdbdb;
}
.btn-default:disabled,
.btn-default[disabled] {
background-color: #e0e0e0;
background-image: none;
}
.btn-primary {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #245580;
}
.btn-primary:hover,
.btn-primary:focus {
background-color: #265a88;
background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
background-color: #265a88;
border-color: #245580;
}
.btn-primary:disabled,
.btn-primary[disabled] {
background-color: #265a88;
background-image: none;
}
.btn-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #3e8f3e;
}
.btn-success:hover,
.btn-success:focus {
background-color: #419641;
background-position: 0 -15px;
}
.btn-success:active,
.btn-success.active {
background-color: #419641;
border-color: #3e8f3e;
}
.btn-success:disabled,
.btn-success[disabled] {
background-color: #419641;
background-image: none;
}
.btn-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #28a4c9;
}
.btn-info:hover,
.btn-info:focus {
background-color: #2aabd2;
background-position: 0 -15px;
}
.btn-info:active,
.btn-info.active {
background-color: #2aabd2;
border-color: #28a4c9;
}
.btn-info:disabled,
.btn-info[disabled] {
background-color: #2aabd2;
background-image: none;
}
.btn-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #e38d13;
}
.btn-warning:hover,
.btn-warning:focus {
background-color: #eb9316;
background-position: 0 -15px;
}
.btn-warning:active,
.btn-warning.active {
background-color: #eb9316;
border-color: #e38d13;
}
.btn-warning:disabled,
.btn-warning[disabled] {
background-color: #eb9316;
background-image: none;
}
.btn-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #b92c28;
}
.btn-danger:hover,
.btn-danger:focus {
background-color: #c12e2a;
background-position: 0 -15px;
}
.btn-danger:active,
.btn-danger.active {
background-color: #c12e2a;
border-color: #b92c28;
}
.btn-danger:disabled,
.btn-danger[disabled] {
background-color: #c12e2a;
background-image: none;
}
.thumbnail,
.img-thumbnail {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
background-color: #e8e8e8;
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
background-color: #2e6da4;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.navbar-default {
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
}
.navbar-inverse {
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
}
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
@media (max-width: 767px) {
.navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
}
.alert {
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
}
.alert-success {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
background-repeat: repeat-x;
border-color: #b2dba1;
}
.alert-info {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
background-repeat: repeat-x;
border-color: #9acfea;
}
.alert-warning {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
background-repeat: repeat-x;
border-color: #f5e79e;
}
.alert-danger {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
background-repeat: repeat-x;
border-color: #dca7a7;
}
.progress {
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-striped {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.list-group {
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
text-shadow: 0 -1px 0 #286090;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
background-repeat: repeat-x;
border-color: #2b669a;
}
.list-group-item.active .badge,
.list-group-item.active:hover .badge,
.list-group-item.active:focus .badge {
text-shadow: none;
}
.panel {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.panel-default > .panel-heading {
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.panel-success > .panel-heading {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
background-repeat: repeat-x;
}
.panel-info > .panel-heading {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
background-repeat: repeat-x;
}
.well {
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
border-color: #dcdcdc;
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
}
/*# sourceMappingURL=bootstrap-theme.css.map */
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,410 @@
/* Golden Version CSS */
a:link, a:visited, a:hover, a:focus{text-decoration: none; color: #C0A777;}
.navbar-brand {
background: url("../../images/logo-white8.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0);
}
/* Home Slider */
#home-slider .caption h1 strong{
color:#C0A777;
}
.left-control:hover,
.right-control:hover {
background-color: #C0A777;
}
.learn-more {
border: 2px solid #C0A777;
}
.learn-more:hover {
background: #C0A777;
}
.left-control, .right-control {
border:1px solid #C0A777;
}
/* End Home Slider */
/* Navbar */
/* Link Color */
.navbar-inverse { border-color: #C0A777}
.navbar-inverse .navbar-nav>li>a:hover, .navbar-inverse .navbar-nav>li>a:focus { color: #C0A777}
.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:hover, .navbar-inverse .navbar-nav>.open>a:focus { color: #C0A777}
.navbar-inverse .navbar-nav>.active>a:hover, .navbar-inverse .navbar-nav>.active>a:focus { color: #C0A777}
.dropdown-menu>li>a { color: #C0A777}
.navbar-inverse .navbar-nav>.dropdown>a:hover .caret { border-top-color: #C0A777}
.navbar-toggle {
border: transparent;
background-color: #C0A777;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
background-color: #C0A777;
}
/* End Navbar */
/* Loader */
.spinner > div
{
background: #C0A777;
}
/* End Loader */
/* Titles & Color */
.section-title h1 span{
background-color: #C0A777;
}
.btn {
background-image: none;
background-color: #C0A777;
color: #fff;
}
a.btn {
color: #fff;
}
.btn a {
color: #fff;
}
.btn-inverse:hover{
color: #fff;
background-color: #C0A777;
}
.btn-inverse:hover a{
color: #fff;
}
a.btn-inverse:hover {
color: #fff;
}
.btn:hover {
background-color: transparent;
}
.btn:hover a{
color: #C0A777;
}
.btn-inverse {
color: #C0A777;
border: 1px solid #C0A777;
}
a.btn-inverse{
color: #C0A777;
}
.btn-inverse a{
color: #C0A777;
}
a.btn:hover {
color: #C0A777;
}
.btn a:hover {
color: #C0A777;
}
.btn-one{
background: none repeat scroll 0 0 #C0A777;
border: 1px solid #C0A777;
color: #fff !important;
}
.btn-one:hover {
border: 1px solid #C0A777;
color: #C0A777;
background: transparent;
}
.btn:hover {
border: 1px solid #C0A777;
color: #C0A777;
}
.hovicon.effect-1 {
background: #C0A777;
}
.hovicon.effect-1:after {
box-shadow: 0 0 0 4px #C0A777;
}
.text-color {
background: none repeat scroll 0 0 #C0A777;
}
.dporcaps-negative {
background: none repeat scroll 0 0 #C0A777;
}
.dporcaps {
color: #C0A777;
}
.blockqoute-style-2 {
border-left: 5px solid #C0A777;
}
cite {
color: #C0A777;
}
/* Effect 1a */
.hovicon.effect-1.sub-a:hover {
background: #C0A777;
}
.main-color
{
color: #C0A777;
}
.white-color
{
color: #fff;
}
/* End Titles & Color */
/* Facts */
.number p:first-letter {
color: #C0A777;
}
/* End Facts */
/* Team Member */
.team-member-holder:hover {
border-color: #C0A777;
}
.img-overlay {
background: #C0A777;
}
.view-profile {
color:#C0A777;
}
.team-member-social-list-item {
color: #C0A777;
}
.team-details h3{
color: #C0A777;
}
/* End Team Member */
/* Skills */
.skills h4:first-letter {
color: #C0A777;
}
/* End Skills */
/* Works */
#filters li span.active,#filters li span:hover {
background: #C0A777;
}
#filters li span {
border: 1px solid #C0A777;
color: #C0A777;
}
.project-details h3 {
color: #C0A777;
}
.project-description h3 {
color: #C0A777;
}
/* End Works */
/* Partners */
.partners-img:hover img{
border-color: #C0A777;
}
/* End Partners */
/* Pricing */
.single-table h4:first-letter {
color: #C0A777;
}
.price-icon {
background-color: #C0A777;
}
span.price {
color: #C0A777;
}
.single-table .btn-price, .sign_form input[type="submit"] {
background: none repeat scroll 0 0 #C0A777;
border: 1px solid #C0A777;
}
.single-table .btn-price:hover {
border: 1px solid #C0A777;
color: #C0A777;
}
.single-table.featured .price-icon, .single-table.featured .btn-price {
color: #C0A777;
}
.single-table.featured{
background-color: #C0A777;
}
.single-table.featured .price {
background-color: #C0A777;
}
/* End Pricing */
/* Clients */
.clients h5 {
color: #C0A777;
}
.carousel-indicators .active {
background-color: #C0A777;
border-color: #C0A777;
}
.carousel-indicators li {
border-color: #C0A777;
}
/* End Clients */
/* News */
.post-date {
background-color: #C0A777;
}
.entry-title a:hover {
color: #C0A777;
}
/* End News */
/* Blog */
.widget.tags-cloud a {
border: 1px solid #C0A777;
}
.widget.tags-cloud a:hover {
border: 1px solid #C0A777;
background-color: #C0A777;
}
.tags a {
border: 1px solid #C0A777;
}
.tags a:hover {
border: 1px solid #C0A777;
background-color: #C0A777;
}
.pager li > a, .pager li > span {
border: 1px solid #C0A777;
}
.pager li > a:hover, .pager li > a:focus {
border: 1px solid #C0A777;
background-color: #C0A777;
}
/* End Blog */
/* Tweet */
#twitter-carousel .item a {
color: #C0A777;
}
.twitter-icon .fa-twitter:after {
border-color: #C0A777 transparent transparent;
}
.twitter-icon .fa-twitter, .twitter-left-control:hover, .twitter-right-control:hover {
background-color: #C0A777;
}
/* End Tweet */
/* Footer */
.bottom-footer {
border-top: 7px solid #C0A777;
}
.bottom-footer-left p a {
color: #C0A777;
}
.bottom-social-icons li a i{
background-color: #C0A777;
border: 1px solid #C0A777;
}
.bottom-social-icons li a i:hover{
color: #C0A777;
}
/* End Footer */
/* Contacts */
.contact_form i{
color: #C0A777;
}
.contact_form input[type="submit"] {
background: #C0A777;
border: 1px solid #C0A777;
}
.contact_form input[type="submit"]:hover {
color: #C0A777;
}
.sign_form input[type="submit"]:hover {
color: #C0A777;
}
/* End Contacts */
/* To Top */
a.scroll-up {
background: none repeat scroll 0 0 #C0A777;
}
a.scroll-up i {
color: #fff;
}
a.scroll-up:hover i {
color: #C0A777;
}
a.scroll-up:hover {
color: #C0A777;
border-color: #C0A777;
}
/* End To Top */
@@ -0,0 +1,410 @@
/* Green Version CSS */
a:link, a:visited, a:hover, a:focus{text-decoration: none; color: #2BBF6A;}
.navbar-brand {
background: url("../../images/logo-white3.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0);
}
/* Home Slider */
#home-slider .caption h1 strong{
color:#2BBF6A;
}
.left-control:hover,
.right-control:hover {
background-color: #2BBF6A;
}
.learn-more {
border: 2px solid #2BBF6A;
}
.learn-more:hover {
background: #2BBF6A;
}
.left-control, .right-control {
border:1px solid #2BBF6A;
}
/* End Home Slider */
/* Navbar */
/* Link Color */
.navbar-inverse { border-color: #2BBF6A}
.navbar-inverse .navbar-nav>li>a:hover, .navbar-inverse .navbar-nav>li>a:focus { color: #2BBF6A}
.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:hover, .navbar-inverse .navbar-nav>.open>a:focus { color: #2BBF6A}
.navbar-inverse .navbar-nav>.active>a:hover, .navbar-inverse .navbar-nav>.active>a:focus { color: #2BBF6A}
.dropdown-menu>li>a { color: #2BBF6A}
.navbar-inverse .navbar-nav>.dropdown>a:hover .caret { border-top-color: #2BBF6A}
.navbar-toggle {
border: transparent;
background-color: #2BBF6A;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
background-color: #2BBF6A;
}
/* End Navbar */
/* Loader */
.spinner > div
{
background: #2BBF6A;
}
/* End Loader*/
/* Titles & Color */
.section-title h1 span{
background-color: #2BBF6A;
}
.btn {
background-image: none;
background-color: #2BBF6A;
color: #fff;
}
a.btn {
color: #fff;
}
.btn a {
color: #fff;
}
.btn-inverse:hover{
color: #fff;
background-color: #2BBF6A;
}
.btn-inverse:hover a{
color: #fff;
}
a.btn-inverse:hover {
color: #fff;
}
.btn:hover {
background-color: transparent;
}
.btn:hover a{
color: #2BBF6A;
}
.btn-inverse {
color: #2BBF6A;
border: 1px solid #2BBF6A;
}
a.btn-inverse{
color: #2BBF6A;
}
.btn-inverse a{
color: #2BBF6A;
}
a.btn:hover {
color: #2BBF6A;
}
.btn a:hover {
color: #2BBF6A;
}
.btn-one{
background: none repeat scroll 0 0 #2BBF6A;
border: 1px solid #2BBF6A;
color: #fff !important;
}
.btn-one:hover {
border: 1px solid #2BBF6A;
color: #2BBF6A;
background: transparent;
}
.btn:hover {
border: 1px solid #2BBF6A;
color: #2BBF6A;
}
.hovicon.effect-1 {
background: #2BBF6A;
}
.hovicon.effect-1:after {
box-shadow: 0 0 0 4px #2BBF6A;
}
.text-color {
background: none repeat scroll 0 0 #2BBF6A;
}
.dporcaps-negative {
background: none repeat scroll 0 0 #2BBF6A;
}
.dporcaps {
color: #2BBF6A;
}
.blockqoute-style-2 {
border-left: 5px solid #2BBF6A;
}
cite {
color: #2BBF6A;
}
/* Effect 1a */
.hovicon.effect-1.sub-a:hover {
background: #2BBF6A;
}
.main-color
{
color: #2BBF6A;
}
.white-color
{
color: #fff;
}
/* End Titles & Color */
/* Facts */
.number p:first-letter {
color: #2BBF6A;
}
/* End Facts */
/* Team Member */
.team-member-holder:hover {
border-color: #2BBF6A;
}
.img-overlay {
background: #2BBF6A;
}
.view-profile {
color:#2BBF6A;
}
.team-member-social-list-item {
color: #2BBF6A;
}
.team-details h3{
color: #2BBF6A;
}
/* End Team Member */
/* Skills */
.skills h4:first-letter {
color: #2BBF6A;
}
/* End Skills */
/* Works */
#filters li span.active,#filters li span:hover {
background: #2BBF6A;
}
#filters li span {
border: 1px solid #2BBF6A;
color: #2BBF6A;
}
.project-details h3 {
color: #2BBF6A;
}
.project-description h3 {
color: #2BBF6A;
}
/* End Works */
/* Partners */
.partners-img:hover img{
border-color: #2BBF6A;
}
/* End Partners */
/* Pricing */
.single-table h4:first-letter {
color: #2BBF6A;
}
.price-icon {
background-color: #2BBF6A;
}
span.price {
color: #2BBF6A;
}
.single-table .btn-price, .sign_form input[type="submit"] {
background: none repeat scroll 0 0 #2BBF6A;
border: 1px solid #2BBF6A;
}
.single-table .btn-price:hover {
border: 1px solid #2BBF6A;
color: #2BBF6A;
}
.single-table.featured .price-icon, .single-table.featured .btn-price {
color: #2BBF6A;
}
.single-table.featured{
background-color: #2BBF6A;
}
.single-table.featured .price {
background-color: #2BBF6A;
}
/* End Pricing */
/* Clients */
.clients h5 {
color: #2BBF6A;
}
.carousel-indicators .active {
background-color: #2BBF6A;
border-color: #2BBF6A;
}
.carousel-indicators li {
border-color: #2BBF6A;
}
/* End Clients */
/* News */
.post-date {
background-color: #2BBF6A;
}
.entry-title a:hover {
color: #2BBF6A;
}
/* End News */
/* Blog */
.widget.tags-cloud a {
border: 1px solid #2BBF6A;
}
.widget.tags-cloud a:hover {
border: 1px solid #2BBF6A;
background-color: #2BBF6A;
}
.tags a {
border: 1px solid #2BBF6A;
}
.tags a:hover {
border: 1px solid #2BBF6A;
background-color: #2BBF6A;
}
.pager li > a, .pager li > span {
border: 1px solid #2BBF6A;
}
.pager li > a:hover, .pager li > a:focus {
border: 1px solid #2BBF6A;
background-color: #2BBF6A;
}
/* End Blog */
/* Tweet */
#twitter-carousel .item a {
color: #2BBF6A;
}
.twitter-icon .fa-twitter:after {
border-color: #2BBF6A transparent transparent;
}
.twitter-icon .fa-twitter, .twitter-left-control:hover, .twitter-right-control:hover {
background-color: #2BBF6A;
}
/* End Tweet */
/* Footer */
.bottom-footer {
border-top: 7px solid #2BBF6A;
}
.bottom-footer-left p a {
color: #2BBF6A;
}
.bottom-social-icons li a i{
background-color: #2BBF6A;
border: 1px solid #2BBF6A;
}
.bottom-social-icons li a i:hover{
color: #2BBF6A;
}
/* End Footer */
/* Contacts */
.contact_form i{
color: #2BBF6A;
}
.contact_form input[type="submit"] {
background: #2BBF6A;
border: 1px solid #2BBF6A;
}
.contact_form input[type="submit"]:hover {
color: #2BBF6A;
}
.sign_form input[type="submit"]:hover {
color: #2BBF6A;
}
/* End Contacts */
/* To Top */
a.scroll-up {
background: none repeat scroll 0 0 #2BBF6A;
}
a.scroll-up i {
color: #fff;
}
a.scroll-up:hover i {
color: #2BBF6A;
}
a.scroll-up:hover {
color: #2BBF6A;
border-color: #2BBF6A;
}
/* End To Top */
@@ -0,0 +1,410 @@
/* Magenta Version CSS */
a:link, a:visited, a:hover, a:focus{text-decoration: none; color: #ec008c;}
.navbar-brand {
background: url("../../images/logo-white6.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0);
}
/* Home Slider */
#home-slider .caption h1 strong{
color:#ec008c;
}
.left-control:hover,
.right-control:hover {
background-color: #ec008c;
}
.learn-more {
border: 2px solid #ec008c;
}
.learn-more:hover {
background: #ec008c;
}
.left-control, .right-control {
border:1px solid #ec008c;
}
/* End Home Slider */
/* Navbar */
/* Link Color */
.navbar-inverse { border-color: #ec008c}
.navbar-inverse .navbar-nav>li>a:hover, .navbar-inverse .navbar-nav>li>a:focus { color: #ec008c}
.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:hover, .navbar-inverse .navbar-nav>.open>a:focus { color: #ec008c}
.navbar-inverse .navbar-nav>.active>a:hover, .navbar-inverse .navbar-nav>.active>a:focus { color: #ec008c}
.dropdown-menu>li>a { color: #ec008c}
.navbar-inverse .navbar-nav>.dropdown>a:hover .caret { border-top-color: #ec008c}
.navbar-toggle {
border: transparent;
background-color: #ec008c;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
background-color: #ec008c;
}
/* End Navbar */
/* Loader */
.spinner > div
{
background: #ec008c;
}
/* End Loader*/
/* Titles & Color */
.section-title h1 span{
background-color: #ec008c;
}
.btn {
background-image: none;
background-color: #ec008c;
color: #fff;
}
a.btn {
color: #fff;
}
.btn a {
color: #fff;
}
.btn-inverse:hover{
color: #fff;
background-color: #ec008c;
}
.btn-inverse:hover a{
color: #fff;
}
a.btn-inverse:hover {
color: #fff;
}
.btn:hover {
background-color: transparent;
}
.btn:hover a{
color: #ec008c;
}
.btn-inverse {
color: #ec008c;
border: 1px solid #ec008c;
}
a.btn-inverse{
color: #ec008c;
}
.btn-inverse a{
color: #ec008c;
}
a.btn:hover {
color: #ec008c;
}
.btn a:hover {
color: #ec008c;
}
.btn-one{
background: none repeat scroll 0 0 #ec008c;
border: 1px solid #ec008c;
color: #fff !important;
}
.btn-one:hover {
border: 1px solid #ec008c;
color: #ec008c;
background: transparent;
}
.btn:hover {
border: 1px solid #ec008c;
color: #ec008c;
}
.hovicon.effect-1 {
background: #ec008c;
}
.hovicon.effect-1:after {
box-shadow: 0 0 0 4px #ec008c;
}
.text-color {
background: none repeat scroll 0 0 #ec008c;
}
.dporcaps-negative {
background: none repeat scroll 0 0 #ec008c;
}
.dporcaps {
color: #ec008c;
}
.blockqoute-style-2 {
border-left: 5px solid #ec008c;
}
cite {
color: #ec008c;
}
/* Effect 1a */
.hovicon.effect-1.sub-a:hover {
background: #ec008c;
}
.main-color
{
color: #ec008c;
}
.white-color
{
color: #fff;
}
/* End Titles & Color */
/* Facts */
.number p:first-letter {
color: #ec008c;
}
/* End Facts */
/* Team Member */
.team-member-holder:hover {
border-color: #ec008c;
}
.img-overlay {
background: #ec008c;
}
.view-profile {
color:#ec008c;
}
.team-member-social-list-item {
color: #ec008c;
}
.team-details h3{
color: #ec008c;
}
/* End Team Member */
/* Skills */
.skills h4:first-letter {
color: #ec008c;
}
/* End Skills */
/* Works */
#filters li span.active,#filters li span:hover {
background: #ec008c;
}
#filters li span {
border: 1px solid #ec008c;
color: #ec008c;
}
.project-details h3 {
color: #ec008c;
}
.project-description h3 {
color: #ec008c;
}
/* End Works */
/* Partners */
.partners-img:hover img{
border-color: #ec008c;
}
/* End Partners */
/* Pricing */
.single-table h4:first-letter {
color: #ec008c;
}
.price-icon {
background-color: #ec008c;
}
span.price {
color: #ec008c;
}
.single-table .btn-price, .sign_form input[type="submit"] {
background: none repeat scroll 0 0 #ec008c;
border: 1px solid #ec008c;
}
.single-table .btn-price:hover {
border: 1px solid #ec008c;
color: #ec008c;
}
.single-table.featured .price-icon, .single-table.featured .btn-price {
color: #ec008c;
}
.single-table.featured{
background-color: #ec008c;
}
.single-table.featured .price {
background-color: #ec008c;
}
/* End Pricing */
/* Clients */
.clients h5 {
color: #ec008c;
}
.carousel-indicators .active {
background-color: #ec008c;
border-color: #ec008c;
}
.carousel-indicators li {
border-color: #ec008c;
}
/* End Clients */
/* News */
.post-date {
background-color: #ec008c;
}
.entry-title a:hover {
color: #ec008c;
}
/* End News */
/* Blog */
.widget.tags-cloud a {
border: 1px solid #ec008c;
}
.widget.tags-cloud a:hover {
border: 1px solid #ec008c;
background-color: #ec008c;
}
.tags a {
border: 1px solid #ec008c;
}
.tags a:hover {
border: 1px solid #ec008c;
background-color: #ec008c;
}
.pager li > a, .pager li > span {
border: 1px solid #ec008c;
}
.pager li > a:hover, .pager li > a:focus {
border: 1px solid #ec008c;
background-color: #ec008c;
}
/* End Blog */
/* Tweet */
#twitter-carousel .item a {
color: #ec008c;
}
.twitter-icon .fa-twitter:after {
border-color: #ec008c transparent transparent;
}
.twitter-icon .fa-twitter, .twitter-left-control:hover, .twitter-right-control:hover {
background-color: #ec008c;
}
/* End Tweet */
/* Footer */
.bottom-footer {
border-top: 7px solid #ec008c;
}
.bottom-footer-left p a {
color: #ec008c;
}
.bottom-social-icons li a i{
background-color: #ec008c;
border: 1px solid #ec008c;
}
.bottom-social-icons li a i:hover{
color: #ec008c;
}
/* End Footer */
/* Contacts */
.contact_form i{
color: #ec008c;
}
.contact_form input[type="submit"] {
background: #ec008c;
border: 1px solid #ec008c;
}
.contact_form input[type="submit"]:hover {
color: #ec008c;
}
.sign_form input[type="submit"]:hover {
color: #ec008c;
}
/* End Contacts */
/* To Top */
a.scroll-up {
background: none repeat scroll 0 0 #ec008c;
}
a.scroll-up i {
color: #fff;
}
a.scroll-up:hover i {
color: #ec008c;
}
a.scroll-up:hover {
color: #ec008c;
border-color: #ec008c;
}
/* End To Top */
@@ -0,0 +1,410 @@
/* Orange Version CSS */
a:link, a:visited, a:hover, a:focus{text-decoration: none; color: #ff6600;}
.navbar-brand {
background: url("../../images/logo-white4.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0);
}
/* Home Slider */
#home-slider .caption h1 strong{
color:#ff6600;
}
.left-control:hover,
.right-control:hover {
background-color: #ff6600;
}
.learn-more {
border: 2px solid #ff6600;
}
.learn-more:hover {
background: #ff6600;
}
.left-control, .right-control {
border:1px solid #ff6600;
}
/* End Home Slider */
/* Navbar */
/* Link Color */
.navbar-inverse { border-color: #ff6600}
.navbar-inverse .navbar-nav>li>a:hover, .navbar-inverse .navbar-nav>li>a:focus { color: #ff6600}
.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:hover, .navbar-inverse .navbar-nav>.open>a:focus { color: #ff6600}
.navbar-inverse .navbar-nav>.active>a:hover, .navbar-inverse .navbar-nav>.active>a:focus { color: #ff6600}
.dropdown-menu>li>a { color: #ff6600}
.navbar-inverse .navbar-nav>.dropdown>a:hover .caret { border-top-color: #ff6600}
.navbar-toggle {
border: transparent;
background-color: #ff6600;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
background-color: #ff6600;
}
/* End Navbar */
/* Loader */
.spinner > div
{
background: #ff6600;
}
/* End Loader */
/* Titles & Color */
.section-title h1 span{
background-color: #ff6600;
}
.btn {
background-image: none;
background-color: #ff6600;
color: #fff;
}
a.btn {
color: #fff;
}
.btn a {
color: #fff;
}
.btn-inverse:hover{
color: #fff;
background-color: #ff6600;
}
.btn-inverse:hover a{
color: #fff;
}
a.btn-inverse:hover {
color: #fff;
}
.btn:hover {
background-color: transparent;
}
.btn:hover a{
color: #ff6600;
}
.btn-inverse {
color: #ff6600;
border: 1px solid #ff6600;
}
a.btn-inverse{
color: #ff6600;
}
.btn-inverse a{
color: #ff6600;
}
a.btn:hover {
color: #ff6600;
}
.btn a:hover {
color: #ff6600;
}
.btn-one{
background: none repeat scroll 0 0 #ff6600;
border: 1px solid #ff6600;
color: #fff !important;
}
.btn-one:hover {
border: 1px solid #ff6600;
color: #ff6600;
background: transparent;
}
.btn:hover {
border: 1px solid #ff6600;
color: #ff6600;
}
.hovicon.effect-1 {
background: #ff6600;
}
.hovicon.effect-1:after {
box-shadow: 0 0 0 4px #ff6600;
}
.text-color {
background: none repeat scroll 0 0 #ff6600;
}
.dporcaps-negative {
background: none repeat scroll 0 0 #ff6600;
}
.dporcaps {
color: #ff6600;
}
.blockqoute-style-2 {
border-left: 5px solid #ff6600;
}
cite {
color: #ff6600;
}
/* Effect 1a */
.hovicon.effect-1.sub-a:hover {
background: #ff6600;
}
.main-color
{
color: #ff6600;
}
.white-color
{
color: #fff;
}
/* End Titles & Color */
/* Facts */
.number p:first-letter {
color: #ff6600;
}
/* End Facts */
/* Team Member */
.team-member-holder:hover {
border-color: #ff6600;
}
.img-overlay {
background: #ff6600;
}
.view-profile {
color:#ff6600;
}
.team-member-social-list-item {
color: #ff6600;
}
.team-details h3{
color: #ff6600;
}
/* End Team Member */
/* Skills */
.skills h4:first-letter {
color: #ff6600;
}
/* End Skills */
/* Works */
#filters li span.active,#filters li span:hover {
background: #ff6600;
}
#filters li span {
border: 1px solid #ff6600;
color: #ff6600;
}
.project-details h3 {
color: #ff6600;
}
.project-description h3 {
color: #ff6600;
}
/* End Works */
/* Partners */
.partners-img:hover img{
border-color: #ff6600;
}
/* End Partners */
/* Pricing */
.single-table h4:first-letter {
color: #ff6600;
}
.price-icon {
background-color: #ff6600;
}
span.price {
color: #ff6600;
}
.single-table .btn-price, .sign_form input[type="submit"] {
background: none repeat scroll 0 0 #ff6600;
border: 1px solid #ff6600;
}
.single-table .btn-price:hover {
border: 1px solid #ff6600;
color: #ff6600;
}
.single-table.featured .price-icon, .single-table.featured .btn-price {
color: #ff6600;
}
.single-table.featured{
background-color: #ff6600;
}
.single-table.featured .price {
background-color: #ff6600;
}
/* End Pricing */
/* Clients */
.clients h5 {
color: #ff6600;
}
.carousel-indicators .active {
background-color: #ff6600;
border-color: #ff6600;
}
.carousel-indicators li {
border-color: #ff6600;
}
/* End Clients */
/* News */
.post-date {
background-color: #ff6600;
}
.entry-title a:hover {
color: #ff6600;
}
/* End News */
/* Blog */
.widget.tags-cloud a {
border: 1px solid #ff6600;
}
.widget.tags-cloud a:hover {
border: 1px solid #ff6600;
background-color: #ff6600;
}
.tags a {
border: 1px solid #ff6600;
}
.tags a:hover {
border: 1px solid #ff6600;
background-color: #ff6600;
}
.pager li > a, .pager li > span {
border: 1px solid #ff6600;
}
.pager li > a:hover, .pager li > a:focus {
border: 1px solid #ff6600;
background-color: #ff6600;
}
/* End Blog */
/* Tweet */
#twitter-carousel .item a {
color: #ff6600;
}
.twitter-icon .fa-twitter:after {
border-color: #ff6600 transparent transparent;
}
.twitter-icon .fa-twitter, .twitter-left-control:hover, .twitter-right-control:hover {
background-color: #ff6600;
}
/* End Tweet */
/* Footer */
.bottom-footer {
border-top: 7px solid #ff6600;
}
.bottom-footer-left p a {
color: #ff6600;
}
.bottom-social-icons li a i{
background-color: #ff6600;
border: 1px solid #ff6600;
}
.bottom-social-icons li a i:hover{
color: #ff6600;
}
/* End Footer */
/* Contacts */
.contact_form i{
color: #ff6600;
}
.contact_form input[type="submit"] {
background: #ff6600;
border: 1px solid #ff6600;
}
.contact_form input[type="submit"]:hover {
color: #ff6600;
}
.sign_form input[type="submit"]:hover {
color: #ff6600;
}
/* End Contacts */
/* To Top */
a.scroll-up {
background: none repeat scroll 0 0 #ff6600;
}
a.scroll-up i {
color: #fff;
}
a.scroll-up:hover i {
color: #ff6600;
}
a.scroll-up:hover {
color: #ff6600;
border-color: #ff6600;
}
/* End To Top */
@@ -0,0 +1,170 @@
div.pp_default .pp_top,div.pp_default .pp_top .pp_middle,div.pp_default .pp_top .pp_left,div.pp_default .pp_top .pp_right,div.pp_default .pp_bottom,div.pp_default .pp_bottom .pp_left,div.pp_default .pp_bottom .pp_middle,div.pp_default .pp_bottom .pp_right{height:13px}
div.pp_default .pp_top .pp_left{background:url(../images/prettyPhoto/default/sprite.png) -78px -93px no-repeat}
div.pp_default .pp_top .pp_middle{background:url(../images/prettyPhoto/default/sprite_x.png) top left repeat-x}
div.pp_default .pp_top .pp_right{background:url(../images/prettyPhoto/default/sprite.png) -112px -93px no-repeat}
div.pp_default .pp_content .ppt{color:#f8f8f8}
div.pp_default .pp_content_container .pp_left{background:url(../images/prettyPhoto/default/sprite_y.png) -7px 0 repeat-y;padding-left:13px}
div.pp_default .pp_content_container .pp_right{background:url(../images/prettyPhoto/default/sprite_y.png) top right repeat-y;padding-right:13px}
div.pp_default .pp_next:hover{background:url(../images/prettyPhoto/default/sprite_next.png) center right no-repeat;cursor:pointer}
div.pp_default .pp_previous:hover{background:url(../images/prettyPhoto/default/sprite_prev.png) center left no-repeat;cursor:pointer}
div.pp_default .pp_expand{background:url(../images/prettyPhoto/default/sprite.png) 0 -29px no-repeat;cursor:pointer;width:28px;height:28px}
div.pp_default .pp_expand:hover{background:url(../images/prettyPhoto/default/sprite.png) 0 -56px no-repeat;cursor:pointer}
div.pp_default .pp_contract{background:url(../images/prettyPhoto/default/sprite.png) 0 -84px no-repeat;cursor:pointer;width:28px;height:28px}
div.pp_default .pp_contract:hover{background:url(../images/prettyPhoto/default/sprite.png) 0 -113px no-repeat;cursor:pointer}
div.pp_default .pp_close{width:30px;height:30px;background:url(../images/prettyPhoto/default/sprite.png) 2px 1px no-repeat;cursor:pointer}
div.pp_default .pp_gallery ul li a{background:url(../images/prettyPhoto/default/default_thumb.png) center center #f8f8f8;border:1px solid #aaa}
div.pp_default .pp_social{margin-top:7px}
div.pp_default .pp_gallery a.pp_arrow_previous,div.pp_default .pp_gallery a.pp_arrow_next{position:static;left:auto}
div.pp_default .pp_nav .pp_play,div.pp_default .pp_nav .pp_pause{background:url(../images/prettyPhoto/default/sprite.png) -51px 1px no-repeat;height:30px;width:30px}
div.pp_default .pp_nav .pp_pause{background-position:-51px -29px}
div.pp_default a.pp_arrow_previous,div.pp_default a.pp_arrow_next{background:url(../images/prettyPhoto/default/sprite.png) -31px -3px no-repeat;height:20px;width:20px;margin:4px 0 0}
div.pp_default a.pp_arrow_next{left:52px;background-position:-82px -3px}
div.pp_default .pp_content_container .pp_details{margin-top:5px}
div.pp_default .pp_nav{clear:none;height:30px;width:110px;position:relative}
div.pp_default .pp_nav .currentTextHolder{font-family:Georgia;font-style:italic;color:#999;font-size:11px;left:75px;line-height:25px;position:absolute;top:2px;margin:0;padding:0 0 0 10px}
div.pp_default .pp_close:hover,div.pp_default .pp_nav .pp_play:hover,div.pp_default .pp_nav .pp_pause:hover,div.pp_default .pp_arrow_next:hover,div.pp_default .pp_arrow_previous:hover{opacity:0.7}
div.pp_default .pp_description{font-size:11px;font-weight:700;line-height:14px;margin:5px 50px 5px 0}
div.pp_default .pp_bottom .pp_left{background:url(../images/prettyPhoto/default/sprite.png) -78px -127px no-repeat}
div.pp_default .pp_bottom .pp_middle{background:url(../images/prettyPhoto/default/sprite_x.png) bottom left repeat-x}
div.pp_default .pp_bottom .pp_right{background:url(../images/prettyPhoto/default/sprite.png) -112px -127px no-repeat}
div.pp_default .pp_loaderIcon{background:url(../images/prettyPhoto/default/loader.gif) center center no-repeat}
div.light_rounded .pp_top .pp_left{background:url(../images/prettyPhoto/light_rounded/sprite.png) -88px -53px no-repeat}
div.light_rounded .pp_top .pp_right{background:url(../images/prettyPhoto/light_rounded/sprite.png) -110px -53px no-repeat}
div.light_rounded .pp_next:hover{background:url(../images/prettyPhoto/light_rounded/btnNext.png) center right no-repeat;cursor:pointer}
div.light_rounded .pp_previous:hover{background:url(../images/prettyPhoto/light_rounded/btnPrevious.png) center left no-repeat;cursor:pointer}
div.light_rounded .pp_expand{background:url(../images/prettyPhoto/light_rounded/sprite.png) -31px -26px no-repeat;cursor:pointer}
div.light_rounded .pp_expand:hover{background:url(../images/prettyPhoto/light_rounded/sprite.png) -31px -47px no-repeat;cursor:pointer}
div.light_rounded .pp_contract{background:url(../images/prettyPhoto/light_rounded/sprite.png) 0 -26px no-repeat;cursor:pointer}
div.light_rounded .pp_contract:hover{background:url(../images/prettyPhoto/light_rounded/sprite.png) 0 -47px no-repeat;cursor:pointer}
div.light_rounded .pp_close{width:75px;height:22px;background:url(../images/prettyPhoto/light_rounded/sprite.png) -1px -1px no-repeat;cursor:pointer}
div.light_rounded .pp_nav .pp_play{background:url(../images/prettyPhoto/light_rounded/sprite.png) -1px -100px no-repeat;height:15px;width:14px}
div.light_rounded .pp_nav .pp_pause{background:url(../images/prettyPhoto/light_rounded/sprite.png) -24px -100px no-repeat;height:15px;width:14px}
div.light_rounded .pp_arrow_previous{background:url(../images/prettyPhoto/light_rounded/sprite.png) 0 -71px no-repeat}
div.light_rounded .pp_arrow_next{background:url(../images/prettyPhoto/light_rounded/sprite.png) -22px -71px no-repeat}
div.light_rounded .pp_bottom .pp_left{background:url(../images/prettyPhoto/light_rounded/sprite.png) -88px -80px no-repeat}
div.light_rounded .pp_bottom .pp_right{background:url(../images/prettyPhoto/light_rounded/sprite.png) -110px -80px no-repeat}
div.dark_rounded .pp_top .pp_left{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -88px -53px no-repeat}
div.dark_rounded .pp_top .pp_right{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -110px -53px no-repeat}
div.dark_rounded .pp_content_container .pp_left{background:url(../images/prettyPhoto/dark_rounded/contentPattern.png) top left repeat-y}
div.dark_rounded .pp_content_container .pp_right{background:url(../images/prettyPhoto/dark_rounded/contentPattern.png) top right repeat-y}
div.dark_rounded .pp_next:hover{background:url(../images/prettyPhoto/dark_rounded/btnNext.png) center right no-repeat;cursor:pointer}
div.dark_rounded .pp_previous:hover{background:url(../images/prettyPhoto/dark_rounded/btnPrevious.png) center left no-repeat;cursor:pointer}
div.dark_rounded .pp_expand{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -31px -26px no-repeat;cursor:pointer}
div.dark_rounded .pp_expand:hover{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -31px -47px no-repeat;cursor:pointer}
div.dark_rounded .pp_contract{background:url(../images/prettyPhoto/dark_rounded/sprite.png) 0 -26px no-repeat;cursor:pointer}
div.dark_rounded .pp_contract:hover{background:url(../images/prettyPhoto/dark_rounded/sprite.png) 0 -47px no-repeat;cursor:pointer}
div.dark_rounded .pp_close{width:75px;height:22px;background:url(../images/prettyPhoto/dark_rounded/sprite.png) -1px -1px no-repeat;cursor:pointer}
div.dark_rounded .pp_description{margin-right:85px;color:#fff}
div.dark_rounded .pp_nav .pp_play{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -1px -100px no-repeat;height:15px;width:14px}
div.dark_rounded .pp_nav .pp_pause{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -24px -100px no-repeat;height:15px;width:14px}
div.dark_rounded .pp_arrow_previous{background:url(../images/prettyPhoto/dark_rounded/sprite.png) 0 -71px no-repeat}
div.dark_rounded .pp_arrow_next{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -22px -71px no-repeat}
div.dark_rounded .pp_bottom .pp_left{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -88px -80px no-repeat}
div.dark_rounded .pp_bottom .pp_right{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -110px -80px no-repeat}
div.dark_rounded .pp_loaderIcon{background:url(../images/prettyPhoto/dark_rounded/loader.gif) center center no-repeat}
div.dark_square .pp_left,div.dark_square .pp_middle,div.dark_square .pp_right,div.dark_square .pp_content{background:#000}
div.dark_square .pp_description{color:#fff;margin:0 85px 0 0}
div.dark_square .pp_loaderIcon{background:url(../images/prettyPhoto/dark_square/loader.gif) center center no-repeat}
div.dark_square .pp_expand{background:url(../images/prettyPhoto/dark_square/sprite.png) -31px -26px no-repeat;cursor:pointer}
div.dark_square .pp_expand:hover{background:url(../images/prettyPhoto/dark_square/sprite.png) -31px -47px no-repeat;cursor:pointer}
div.dark_square .pp_contract{background:url(../images/prettyPhoto/dark_square/sprite.png) 0 -26px no-repeat;cursor:pointer}
div.dark_square .pp_contract:hover{background:url(../images/prettyPhoto/dark_square/sprite.png) 0 -47px no-repeat;cursor:pointer}
div.dark_square .pp_close{width:75px;height:22px;background:url(../images/prettyPhoto/dark_square/sprite.png) -1px -1px no-repeat;cursor:pointer}
div.dark_square .pp_nav{clear:none}
div.dark_square .pp_nav .pp_play{background:url(../images/prettyPhoto/dark_square/sprite.png) -1px -100px no-repeat;height:15px;width:14px}
div.dark_square .pp_nav .pp_pause{background:url(../images/prettyPhoto/dark_square/sprite.png) -24px -100px no-repeat;height:15px;width:14px}
div.dark_square .pp_arrow_previous{background:url(../images/prettyPhoto/dark_square/sprite.png) 0 -71px no-repeat}
div.dark_square .pp_arrow_next{background:url(../images/prettyPhoto/dark_square/sprite.png) -22px -71px no-repeat}
div.dark_square .pp_next:hover{background:url(../images/prettyPhoto/dark_square/btnNext.png) center right no-repeat;cursor:pointer}
div.dark_square .pp_previous:hover{background:url(../images/prettyPhoto/dark_square/btnPrevious.png) center left no-repeat;cursor:pointer}
div.light_square .pp_expand{background:url(../images/prettyPhoto/light_square/sprite.png) -31px -26px no-repeat;cursor:pointer}
div.light_square .pp_expand:hover{background:url(../images/prettyPhoto/light_square/sprite.png) -31px -47px no-repeat;cursor:pointer}
div.light_square .pp_contract{background:url(../images/prettyPhoto/light_square/sprite.png) 0 -26px no-repeat;cursor:pointer}
div.light_square .pp_contract:hover{background:url(../images/prettyPhoto/light_square/sprite.png) 0 -47px no-repeat;cursor:pointer}
div.light_square .pp_close{width:75px;height:22px;background:url(../images/prettyPhoto/light_square/sprite.png) -1px -1px no-repeat;cursor:pointer}
div.light_square .pp_nav .pp_play{background:url(../images/prettyPhoto/light_square/sprite.png) -1px -100px no-repeat;height:15px;width:14px}
div.light_square .pp_nav .pp_pause{background:url(../images/prettyPhoto/light_square/sprite.png) -24px -100px no-repeat;height:15px;width:14px}
div.light_square .pp_arrow_previous{background:url(../images/prettyPhoto/light_square/sprite.png) 0 -71px no-repeat}
div.light_square .pp_arrow_next{background:url(../images/prettyPhoto/light_square/sprite.png) -22px -71px no-repeat}
div.light_square .pp_next:hover{background:url(../images/prettyPhoto/light_square/btnNext.png) center right no-repeat;cursor:pointer}
div.light_square .pp_previous:hover{background:url(../images/prettyPhoto/light_square/btnPrevious.png) center left no-repeat;cursor:pointer}
div.facebook .pp_top .pp_left{background:url(../images/prettyPhoto/facebook/sprite.png) -88px -53px no-repeat}
div.facebook .pp_top .pp_middle{background:url(../images/prettyPhoto/facebook/contentPatternTop.png) top left repeat-x}
div.facebook .pp_top .pp_right{background:url(../images/prettyPhoto/facebook/sprite.png) -110px -53px no-repeat}
div.facebook .pp_content_container .pp_left{background:url(../images/prettyPhoto/facebook/contentPatternLeft.png) top left repeat-y}
div.facebook .pp_content_container .pp_right{background:url(../images/prettyPhoto/facebook/contentPatternRight.png) top right repeat-y}
div.facebook .pp_expand{background:url(../images/prettyPhoto/facebook/sprite.png) -31px -26px no-repeat;cursor:pointer}
div.facebook .pp_expand:hover{background:url(../images/prettyPhoto/facebook/sprite.png) -31px -47px no-repeat;cursor:pointer}
div.facebook .pp_contract{background:url(../images/prettyPhoto/facebook/sprite.png) 0 -26px no-repeat;cursor:pointer}
div.facebook .pp_contract:hover{background:url(../images/prettyPhoto/facebook/sprite.png) 0 -47px no-repeat;cursor:pointer}
div.facebook .pp_close{width:22px;height:22px;background:url(../images/prettyPhoto/facebook/sprite.png) -1px -1px no-repeat;cursor:pointer}
div.facebook .pp_description{margin:0 37px 0 0}
div.facebook .pp_loaderIcon{background:url(../images/prettyPhoto/facebook/loader.gif) center center no-repeat}
div.facebook .pp_arrow_previous{background:url(../images/prettyPhoto/facebook/sprite.png) 0 -71px no-repeat;height:22px;margin-top:0;width:22px}
div.facebook .pp_arrow_previous.disabled{background-position:0 -96px;cursor:default}
div.facebook .pp_arrow_next{background:url(../images/prettyPhoto/facebook/sprite.png) -32px -71px no-repeat;height:22px;margin-top:0;width:22px}
div.facebook .pp_arrow_next.disabled{background-position:-32px -96px;cursor:default}
div.facebook .pp_nav{margin-top:0}
div.facebook .pp_nav p{font-size:15px;padding:0 3px 0 4px}
div.facebook .pp_nav .pp_play{background:url(../images/prettyPhoto/facebook/sprite.png) -1px -123px no-repeat;height:22px;width:22px}
div.facebook .pp_nav .pp_pause{background:url(../images/prettyPhoto/facebook/sprite.png) -32px -123px no-repeat;height:22px;width:22px}
div.facebook .pp_next:hover{background:url(../images/prettyPhoto/facebook/btnNext.png) center right no-repeat;cursor:pointer}
div.facebook .pp_previous:hover{background:url(../images/prettyPhoto/facebook/btnPrevious.png) center left no-repeat;cursor:pointer}
div.facebook .pp_bottom .pp_left{background:url(../images/prettyPhoto/facebook/sprite.png) -88px -80px no-repeat}
div.facebook .pp_bottom .pp_middle{background:url(../images/prettyPhoto/facebook/contentPatternBottom.png) top left repeat-x}
div.facebook .pp_bottom .pp_right{background:url(../images/prettyPhoto/facebook/sprite.png) -110px -80px no-repeat}
div.pp_pic_holder a:focus{outline:none}
div.pp_overlay{background:#000;display:none;left:0;position:absolute;top:0;width:100%;z-index:9500}
div.pp_pic_holder{display:none;position:absolute;width:100px;z-index:10000}
.pp_content{height:40px;min-width:40px}
* html .pp_content{width:40px}
.pp_content_container{position:relative;text-align:left;width:100%}
.pp_content_container .pp_left{padding-left:20px}
.pp_content_container .pp_right{padding-right:20px}
.pp_content_container .pp_details{float:left;margin:10px 0 2px}
.pp_description{display:none;margin:0}
.pp_social{float:left;margin:0}
.pp_social .facebook{float:left;margin-left:5px;width:55px;overflow:hidden}
.pp_social .twitter{float:left}
.pp_nav{clear:right;float:left;margin:3px 10px 0 0}
.pp_nav p{float:left;white-space:nowrap;margin:2px 4px}
.pp_nav .pp_play,.pp_nav .pp_pause{float:left;margin-right:4px;text-indent:-10000px}
a.pp_arrow_previous,a.pp_arrow_next{display:block;float:left;height:15px;margin-top:3px;overflow:hidden;text-indent:-10000px;width:14px}
.pp_hoverContainer{position:absolute;top:0;width:100%;z-index:2000}
.pp_gallery{display:none;left:50%;margin-top:-50px;position:absolute;z-index:10000}
.pp_gallery div{float:left;overflow:hidden;position:relative}
.pp_gallery ul{float:left;height:35px;position:relative;white-space:nowrap;margin:0 0 0 5px;padding:0}
.pp_gallery ul a{border:1px rgba(0,0,0,0.5) solid;display:block;float:left;height:33px;overflow:hidden}
.pp_gallery ul a img{border:0}
.pp_gallery li{display:block;float:left;margin:0 5px 0 0;padding:0}
.pp_gallery li.default a{background:url(../images/prettyPhoto/facebook/default_thumbnail.gif) 0 0 no-repeat;display:block;height:33px;width:50px}
.pp_gallery .pp_arrow_previous,.pp_gallery .pp_arrow_next{margin-top:7px!important}
a.pp_next{background:url(../images/prettyPhoto/light_rounded/btnNext.png) 10000px 10000px no-repeat;display:block;float:right;height:100%;text-indent:-10000px;width:49%}
a.pp_previous{background:url(../images/prettyPhoto/light_rounded/btnNext.png) 10000px 10000px no-repeat;display:block;float:left;height:100%;text-indent:-10000px;width:49%}
a.pp_expand,a.pp_contract{cursor:pointer;display:none;height:20px;position:absolute;right:30px;text-indent:-10000px;top:10px;width:20px;z-index:20000}
a.pp_close{position:absolute;right:0;top:0;display:block;line-height:22px;text-indent:-10000px}
.pp_loaderIcon{display:block;height:24px;left:50%;position:absolute;top:50%;width:24px;margin:-12px 0 0 -12px}
#pp_full_res{line-height:1!important}
#pp_full_res .pp_inline{text-align:left}
#pp_full_res .pp_inline p{margin:0 0 15px}
div.ppt{color:#fff;display:none;font-size:17px;z-index:9999;margin:0 0 5px 15px}
div.pp_default .pp_content,div.light_rounded .pp_content{background-color:#fff}
div.pp_default #pp_full_res .pp_inline,div.light_rounded .pp_content .ppt,div.light_rounded #pp_full_res .pp_inline,div.light_square .pp_content .ppt,div.light_square #pp_full_res .pp_inline,div.facebook .pp_content .ppt,div.facebook #pp_full_res .pp_inline{color:#000}
div.pp_default .pp_gallery ul li a:hover,div.pp_default .pp_gallery ul li.selected a,.pp_gallery ul a:hover,.pp_gallery li.selected a{border-color:#fff}
div.pp_default .pp_details,div.light_rounded .pp_details,div.dark_rounded .pp_details,div.dark_square .pp_details,div.light_square .pp_details,div.facebook .pp_details{position:relative}
div.light_rounded .pp_top .pp_middle,div.light_rounded .pp_content_container .pp_left,div.light_rounded .pp_content_container .pp_right,div.light_rounded .pp_bottom .pp_middle,div.light_square .pp_left,div.light_square .pp_middle,div.light_square .pp_right,div.light_square .pp_content,div.facebook .pp_content{background:#fff}
div.light_rounded .pp_description,div.light_square .pp_description{margin-right:85px}
div.light_rounded .pp_gallery a.pp_arrow_previous,div.light_rounded .pp_gallery a.pp_arrow_next,div.dark_rounded .pp_gallery a.pp_arrow_previous,div.dark_rounded .pp_gallery a.pp_arrow_next,div.dark_square .pp_gallery a.pp_arrow_previous,div.dark_square .pp_gallery a.pp_arrow_next,div.light_square .pp_gallery a.pp_arrow_previous,div.light_square .pp_gallery a.pp_arrow_next{margin-top:12px!important}
div.light_rounded .pp_arrow_previous.disabled,div.dark_rounded .pp_arrow_previous.disabled,div.dark_square .pp_arrow_previous.disabled,div.light_square .pp_arrow_previous.disabled{background-position:0 -87px;cursor:default}
div.light_rounded .pp_arrow_next.disabled,div.dark_rounded .pp_arrow_next.disabled,div.dark_square .pp_arrow_next.disabled,div.light_square .pp_arrow_next.disabled{background-position:-22px -87px;cursor:default}
div.light_rounded .pp_loaderIcon,div.light_square .pp_loaderIcon{background:url(../images/prettyPhoto/light_rounded/loader.gif) center center no-repeat}
div.dark_rounded .pp_top .pp_middle,div.dark_rounded .pp_content,div.dark_rounded .pp_bottom .pp_middle{background:url(../images/prettyPhoto/dark_rounded/contentPattern.png) top left repeat}
div.dark_rounded .currentTextHolder,div.dark_square .currentTextHolder{color:#c4c4c4}
div.dark_rounded #pp_full_res .pp_inline,div.dark_square #pp_full_res .pp_inline{color:#fff}
.pp_top,.pp_bottom{height:20px;position:relative}
* html .pp_top,* html .pp_bottom{padding:0 20px}
.pp_top .pp_left,.pp_bottom .pp_left{height:20px;left:0;position:absolute;width:20px}
.pp_top .pp_middle,.pp_bottom .pp_middle{height:20px;left:20px;position:absolute;right:20px}
* html .pp_top .pp_middle,* html .pp_bottom .pp_middle{left:0;position:static}
.pp_top .pp_right,.pp_bottom .pp_right{height:20px;left:auto;position:absolute;right:0;top:0;width:20px}
.pp_fade,.pp_gallery li.default a img{display:none}
@@ -0,0 +1,410 @@
/* Purple Version CSS */
a:link, a:visited, a:hover, a:focus{text-decoration: none; color: #9b59b6;}
.navbar-brand {
background: url("../../images/logo-white5.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0);
}
/* Home Slider */
#home-slider .caption h1 strong{
color:#9b59b6;
}
.left-control:hover,
.right-control:hover {
background-color: #9b59b6;
}
.learn-more {
border: 2px solid #9b59b6;
}
.learn-more:hover {
background: #9b59b6;
}
.left-control, .right-control {
border:1px solid #9b59b6;
}
/* End Home Slider */
/* Navbar */
/* Link Color */
.navbar-inverse { border-color: #9b59b6}
.navbar-inverse .navbar-nav>li>a:hover, .navbar-inverse .navbar-nav>li>a:focus { color: #9b59b6}
.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:hover, .navbar-inverse .navbar-nav>.open>a:focus { color: #9b59b6}
.navbar-inverse .navbar-nav>.active>a:hover, .navbar-inverse .navbar-nav>.active>a:focus { color: #9b59b6}
.dropdown-menu>li>a { color: #9b59b6}
.navbar-inverse .navbar-nav>.dropdown>a:hover .caret { border-top-color: #9b59b6}
.navbar-toggle {
border: transparent;
background-color: #9b59b6;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
background-color: #9b59b6;
}
/* End Navbar */
/* Loader */
.spinner > div
{
background: #9b59b6;
}
/* End Loader*/
/* Titles & Color */
.section-title h1 span{
background-color: #9b59b6;
}
.btn {
background-image: none;
background-color: #9b59b6;
color: #fff;
}
a.btn {
color: #fff;
}
.btn a {
color: #fff;
}
.btn-inverse:hover{
color: #fff;
background-color: #9b59b6;
}
.btn-inverse:hover a{
color: #fff;
}
a.btn-inverse:hover {
color: #fff;
}
.btn:hover {
background-color: transparent;
}
.btn:hover a{
color: #9b59b6;
}
.btn-inverse {
color: #9b59b6;
border: 1px solid #9b59b6;
}
a.btn-inverse{
color: #9b59b6;
}
.btn-inverse a{
color: #9b59b6;
}
a.btn:hover {
color: #9b59b6;
}
.btn a:hover {
color: #9b59b6;
}
.btn-one{
background: none repeat scroll 0 0 #9b59b6;
border: 1px solid #9b59b6;
color: #fff !important;
}
.btn-one:hover {
border: 1px solid #9b59b6;
color: #9b59b6;
background: transparent;
}
.btn:hover {
border: 1px solid #9b59b6;
color: #9b59b6;
}
.hovicon.effect-1 {
background: #9b59b6;
}
.hovicon.effect-1:after {
box-shadow: 0 0 0 4px #9b59b6;
}
.text-color {
background: none repeat scroll 0 0 #9b59b6;
}
.dporcaps-negative {
background: none repeat scroll 0 0 #9b59b6;
}
.dporcaps {
color: #9b59b6;
}
.blockqoute-style-2 {
border-left: 5px solid #9b59b6;
}
cite {
color: #9b59b6;
}
/* Effect 1a */
.hovicon.effect-1.sub-a:hover {
background: #9b59b6;
}
.main-color
{
color: #9b59b6;
}
.white-color
{
color: #fff;
}
/* End Titles & Color */
/* Facts */
.number p:first-letter {
color: #9b59b6;
}
/* End Facts */
/* Team Member */
.team-member-holder:hover {
border-color: #9b59b6;
}
.img-overlay {
background: #9b59b6;
}
.view-profile {
color:#9b59b6;
}
.team-member-social-list-item {
color: #9b59b6;
}
.team-details h3{
color: #9b59b6;
}
/* End Team Member */
/* Skills */
.skills h4:first-letter {
color: #9b59b6;
}
/* End Skills */
/* Works */
#filters li span.active,#filters li span:hover {
background: #9b59b6;
}
#filters li span {
border: 1px solid #9b59b6;
color: #9b59b6;
}
.project-details h3 {
color: #9b59b6;
}
.project-description h3 {
color: #9b59b6;
}
/* End Works */
/* Partners */
.partners-img:hover img{
border-color: #9b59b6;
}
/* End Partners */
/* Pricing */
.single-table h4:first-letter {
color: #9b59b6;
}
.price-icon {
background-color: #9b59b6;
}
span.price {
color: #9b59b6;
}
.single-table .btn-price, .sign_form input[type="submit"] {
background: none repeat scroll 0 0 #9b59b6;
border: 1px solid #9b59b6;
}
.single-table .btn-price:hover {
border: 1px solid #9b59b6;
color: #9b59b6;
}
.single-table.featured .price-icon, .single-table.featured .btn-price {
color: #9b59b6;
}
.single-table.featured{
background-color: #9b59b6;
}
.single-table.featured .price {
background-color: #9b59b6;
}
/* End Pricing */
/* Clients */
.clients h5 {
color: #9b59b6;
}
.carousel-indicators .active {
background-color: #9b59b6;
border-color: #9b59b6;
}
.carousel-indicators li {
border-color: #9b59b6;
}
/* End Clients */
/* News */
.post-date {
background-color: #9b59b6;
}
.entry-title a:hover {
color: #9b59b6;
}
/* End News */
/* Blog */
.widget.tags-cloud a {
border: 1px solid #9b59b6;
}
.widget.tags-cloud a:hover {
border: 1px solid #9b59b6;
background-color: #9b59b6;
}
.tags a {
border: 1px solid #9b59b6;
}
.tags a:hover {
border: 1px solid #9b59b6;
background-color: #9b59b6;
}
.pager li > a, .pager li > span {
border: 1px solid #9b59b6;
}
.pager li > a:hover, .pager li > a:focus {
border: 1px solid #9b59b6;
background-color: #9b59b6;
}
/* End Blog */
/* Tweet */
#twitter-carousel .item a {
color: #9b59b6;
}
.twitter-icon .fa-twitter:after {
border-color: #9b59b6 transparent transparent;
}
.twitter-icon .fa-twitter, .twitter-left-control:hover, .twitter-right-control:hover {
background-color: #9b59b6;
}
/* End Tweet */
/* Footer */
.bottom-footer {
border-top: 7px solid #9b59b6;
}
.bottom-footer-left p a {
color: #9b59b6;
}
.bottom-social-icons li a i{
background-color: #9b59b6;
border: 1px solid #9b59b6;
}
.bottom-social-icons li a i:hover{
color: #9b59b6;
}
/* End Footer */
/* Contacts */
.contact_form i{
color: #9b59b6;
}
.contact_form input[type="submit"] {
background: #9b59b6;
border: 1px solid #9b59b6;
}
.contact_form input[type="submit"]:hover {
color: #9b59b6;
}
.sign_form input[type="submit"]:hover {
color: #9b59b6;
}
/* End Contacts */
/* To Top */
a.scroll-up {
background: none repeat scroll 0 0 #9b59b6;
}
a.scroll-up i {
color: #fff;
}
a.scroll-up:hover i {
color: #9b59b6;
}
a.scroll-up:hover {
color: #9b59b6;
border-color: #9b59b6;
}
/* End To Top */
@@ -0,0 +1,410 @@
/* Red Version CSS */
a:link, a:visited, a:hover, a:focus{text-decoration: none; color: #e21e25;}
.navbar-brand {
background: url("../../images/logo-white2.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0);
}
/* Home Slider */
#home-slider .caption h1 strong{
color:#e21e25;
}
.left-control:hover,
.right-control:hover {
background-color: #e21e25;
}
.learn-more {
border: 2px solid #e21e25;
}
.learn-more:hover {
background: #e21e25;
}
.left-control, .right-control {
border:1px solid #e21e25;
}
/* End Home Slider */
/* Navbar */
/* Link Color */
.navbar-inverse { border-color: #e21e25}
.navbar-inverse .navbar-nav>li>a:hover, .navbar-inverse .navbar-nav>li>a:focus { color: #e21e25}
.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:hover, .navbar-inverse .navbar-nav>.open>a:focus { color: #e21e25}
.navbar-inverse .navbar-nav>.active>a:hover, .navbar-inverse .navbar-nav>.active>a:focus { color: #e21e25}
.dropdown-menu>li>a { color: #e21e25}
.navbar-inverse .navbar-nav>.dropdown>a:hover .caret { border-top-color: #e21e25}
.navbar-toggle {
border: transparent;
background-color: #e21e25;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
background-color: #e21e25;
}
/* End Navbar */
/* Loader */
.spinner > div
{
background: #e21e25;
}
/* End Loader */
/* Titles & Color */
.section-title h1 span{
background-color: #e21e25;
}
.btn {
background-image: none;
background-color: #e21e25;
color: #fff;
}
a.btn {
color: #fff;
}
.btn a {
color: #fff;
}
.btn-inverse:hover{
color: #fff;
background-color: #e21e25;
}
.btn-inverse:hover a{
color: #fff;
}
a.btn-inverse:hover {
color: #fff;
}
.btn:hover {
background-color: transparent;
}
.btn:hover a{
color: #e21e25;
}
.btn-inverse {
color: #e21e25;
border: 1px solid #e21e25;
}
a.btn-inverse{
color: #e21e25;
}
.btn-inverse a{
color: #e21e25;
}
a.btn:hover {
color: #e21e25;
}
.btn a:hover {
color: #e21e25;
}
.btn-one{
background: none repeat scroll 0 0 #e21e25;
border: 1px solid #e21e25;
color: #fff !important;
}
.btn-one:hover {
border: 1px solid #e21e25;
color: #e21e25;
background: transparent;
}
.btn:hover {
border: 1px solid #e21e25;
color: #e21e25;
}
.hovicon.effect-1 {
background: #e21e25;
}
.hovicon.effect-1:after {
box-shadow: 0 0 0 4px #e21e25;
}
.text-color {
background: none repeat scroll 0 0 #e21e25;
}
.dporcaps-negative {
background: none repeat scroll 0 0 #e21e25;
}
.dporcaps {
color: #e21e25;
}
.blockqoute-style-2 {
border-left: 5px solid #e21e25;
}
cite {
color: #e21e25;
}
/* Effect 1a */
.hovicon.effect-1.sub-a:hover {
background: #e21e25;
}
.main-color
{
color: #e21e25;
}
.white-color
{
color: #fff;
}
/* End Titles & Color */
/* Facts */
.number p:first-letter {
color: #e21e25;
}
/* End Facts */
/* Team Member */
.team-member-holder:hover {
border-color: #e21e25;
}
.img-overlay {
background: #e21e25;
}
.view-profile {
color:#e21e25;
}
.team-member-social-list-item {
color: #e21e25;
}
.team-details h3{
color: #e21e25;
}
/* End Team Member */
/* Skills */
.skills h4:first-letter {
color: #e21e25;
}
/* End Skills */
/* Works */
#filters li span.active,#filters li span:hover {
background: #e21e25;
}
#filters li span {
border: 1px solid #e21e25;
color: #e21e25;
}
.project-details h3 {
color: #e21e25;
}
.project-description h3 {
color: #e21e25;
}
/* End Works */
/* Partners */
.partners-img:hover img{
border-color: #e21e25;
}
/* End Partners */
/* Pricing */
.single-table h4:first-letter {
color: #e21e25;
}
.price-icon {
background-color: #e21e25;
}
span.price {
color: #e21e25;
}
.single-table .btn-price, .sign_form input[type="submit"] {
background: none repeat scroll 0 0 #e21e25;
border: 1px solid #e21e25;
}
.single-table .btn-price:hover {
border: 1px solid #e21e25;
color: #e21e25;
}
.single-table.featured .price-icon, .single-table.featured .btn-price {
color: #e21e25;
}
.single-table.featured{
background-color: #e21e25;
}
.single-table.featured .price {
background-color: #e21e25;
}
/* End Pricing */
/* Clients */
.clients h5 {
color: #e21e25;
}
.carousel-indicators .active {
background-color: #e21e25;
border-color: #e21e25;
}
.carousel-indicators li {
border-color: #e21e25;
}
/* End Clients */
/* News */
.post-date {
background-color: #e21e25;
}
.entry-title a:hover {
color: #e21e25;
}
/* End News */
/* Blog */
.widget.tags-cloud a {
border: 1px solid #e21e25;
}
.widget.tags-cloud a:hover {
border: 1px solid #e21e25;
background-color: #e21e25;
}
.tags a {
border: 1px solid #e21e25;
}
.tags a:hover {
border: 1px solid #e21e25;
background-color: #e21e25;
}
.pager li > a, .pager li > span {
border: 1px solid #e21e25;
}
.pager li > a:hover, .pager li > a:focus {
border: 1px solid #e21e25;
background-color: #e21e25;
}
/* End Blog */
/* Tweet */
#twitter-carousel .item a {
color: #e21e25;
}
.twitter-icon .fa-twitter:after {
border-color: #e21e25 transparent transparent;
}
.twitter-icon .fa-twitter, .twitter-left-control:hover, .twitter-right-control:hover {
background-color: #e21e25;
}
/* End Tweet */
/* Footer */
.bottom-footer {
border-top: 7px solid #e21e25;
}
.bottom-footer-left p a {
color: #e21e25;
}
.bottom-social-icons li a i{
background-color: #e21e25;
border: 1px solid #e21e25;
}
.bottom-social-icons li a i:hover{
color: #e21e25;
}
/* End Footer */
/* Contacts */
.contact_form i{
color: #e21e25;
}
.contact_form input[type="submit"] {
background: #e21e25;
border: 1px solid #e21e25;
}
.contact_form input[type="submit"]:hover {
color: #e21e25;
}
.sign_form input[type="submit"]:hover {
color: #e21e25;
}
/* End Contacts */
/* To Top */
a.scroll-up {
background: none repeat scroll 0 0 #e21e25;
}
a.scroll-up i {
color: #fff;
}
a.scroll-up:hover i {
color: #e21e25;
}
a.scroll-up:hover {
color: #e21e25;
border-color: #e21e25;
}
/* End To Top */
@@ -0,0 +1,280 @@
/* Small desktop */
@media (min-width: 980px) and (max-width: 1199px) {
/* Works */
.myport .portfolio ,
.myport .portfolio-5-col,
.myport .portfolio-4-col,
.myport .portfolio-3-col
{
width: 25%;
}
.img-holder:hover .overlay-content{
top: 20%;
}
}
/* Portrait tablet to landscape and desktop */
@media (min-width: 768px) and (max-width: 979px) {
/* Home Slider */
#home-slider .caption h1 {
font-size: 60px;
}
#home-slider .caption p {
font-size: 35px;
}
/* Navagation*/
.navbar-header {
float: none;
}
.navbar-left,.navbar-right {
float: none !important;
}
.navbar-toggle {
display: block;
}
.navbar-collapse {
border-top: 1px solid transparent;
box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
}
.navbar-fixed-top {
top: 0;
border-width: 0 0 1px;
}
.navbar-collapse.collapse {
display: none!important;
}
.navbar-nav {
float: none!important;
margin-top: 7.5px;
}
.navbar-nav>li {
float: none;
}
.navbar-nav>li>a {
padding-top: 10px;
padding-bottom: 10px;
}
.collapse.in{
display:block !important;
}
.navbar-collapse.in {
overflow-y: auto !important;
}
.navbar-nav .open .dropdown-menu {
position: static;
float: none;
width: auto;
margin-top: 0;
background-color: transparent;
border: 0;
box-shadow: none;
}
.navbar-nav .open .dropdown-menu>li>a, .navbar-nav .open .dropdown-menu .dropdown-header {
padding: 5px 15px 5px 25px;
}
.navbar-inverse .navbar-nav .open .dropdown-menu>li>a {
color: #999;
}
.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,
.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus {
color: #fff;
background-color: transparent;
background-image:none;
}
/* Block Best Fitting */
.wrapper-team .col-md-3,
.wrapper-number .col-md-3,
.wrapper-count .col-md-3,
.wrapper-partners .col-md-3
{
float: left;
margin: 0 auto;
width: 50%;
}
/* Price */
.wrapper-pricing .col-md-3{
margin: 0 auto 20px;
width: 50%;
float: left;
}
/* Works */
.myport .portfolio ,
.myport .portfolio-5-col,
.myport .portfolio-4-col,
.myport .portfolio-3-col
{
width: 33.33%;
}
.img-holder:hover .overlay-content{
top: 20%;
}
/* News */
.post-date{
padding: 5px 15px;
}
.post-date h2 {
font-size: 16px;
margin-top: 5px;
}
.post-date h2 span {
font-size: 18px;
}
/* Contact Form */
.contact_form {
width: 90%;
}
}
/* Landscape phone to portrait tablet */
@media (max-width: 767px) {
#home-slider .caption h1 {
font-size: 40px;
}
#home-slider .caption p {
font-size: 15px;
}
/* Block Best Fitting */
.wrapper-number .col-md-3,
.wrapper-team .col-md-3,
.wrapper-count .col-md-3,
.wrapper-partners .col-md-3{
float: left;
margin: 0 auto;
width: 50%;
}
/* Price */
.wrapper-pricing .col-md-3{
margin: 0 auto 20px;
width: 70%;
}
/* Works */
.myport .portfolio ,
.myport .portfolio-5-col,
.myport .portfolio-4-col,
.myport .portfolio-3-col
{
width: 50%;
}
.img-holder:hover .overlay-content{
top: 20%;
}
/* News */
.post-date{
padding: 5px 15px;
}
.post-date h2 {
font-size: 16px;
margin-top: 5px;
}
.post-date h2 span {
font-size: 18px;
}
/* Contact Form */
.contact_form {
width: 90%;
}
}
/* Landscape phones and down */
@media (max-width: 480px) {
/* Home Slider */
#home-slider .caption h1 {
font-size: 40px;
}
#home-slider .caption {
font-size: 15px;
padding: 0 30px;
}
.left-control, .right-control {
font-size: 20px;
height: 30px;
line-height: 25px;
width: 30px;
}
#home-slider:hover .right-control {
right: 15px;
}
#home-slider:hover .left-control {
left: 15px;
}
/* Block Best Fitting */
.wrapper-team .col-md-3,
.wrapper-number .col-md-3,
.wrapper-count .col-md-3,
.wrapper-partners .col-md-3
{
margin: 0 auto;
width: 100%;
}
/* Price */
.wrapper-pricing .col-md-3{
margin: 0 auto 20px;
width: 100%;
}
/* Facts */
.wrapper-contacts-icons .col-xs-4{
width: 100%;
}
/* Works */
.myport .portfolio ,
.myport .portfolio-5-col,
.myport .portfolio-4-col,
.myport .portfolio-3-col
{
width: 100%;
}
/* Titles */
.section-title h1 span{
padding: 0 4px;
font-size: 30px;
}
.element-title h1 {
font-size: 20px;
}
.element-title h3 {
font-size: 16px;
}
/* Contact Form */
.contact_form {
width: 90%;
}
}
@media all and (-webkit-min-device-pixel-ratio: 1.5)
{
/*.navbar-brand { background: url("../images/logo-white@2x.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0);background-size: 151px 47px; }*/
}

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