├── src ├── djangolvs │ ├── __init__.py │ ├── settings │ │ ├── __init__.py │ │ ├── dev.py │ │ └── base.py │ ├── db.sqlite3 │ ├── static │ │ ├── images │ │ │ ├── bg │ │ │ │ ├── 1.jpg │ │ │ │ ├── 2.jpg │ │ │ │ ├── 3.jpg │ │ │ │ ├── bg.png │ │ │ │ └── login-background.png │ │ │ ├── blogs │ │ │ │ ├── 1.jpg │ │ │ │ ├── 10.jpg │ │ │ │ ├── 11.jpg │ │ │ │ ├── 12.jpg │ │ │ │ ├── 2.jpg │ │ │ │ ├── 3.jpg │ │ │ │ ├── 4.jpg │ │ │ │ ├── 5.jpg │ │ │ │ ├── 6.jpg │ │ │ │ ├── 7.jpg │ │ │ │ ├── 8.jpg │ │ │ │ ├── 9.jpg │ │ │ │ └── blog_item1.jpg │ │ │ ├── avatar │ │ │ │ ├── 128.jpg │ │ │ │ ├── 48.jpg │ │ │ │ └── profile-pic.png │ │ │ ├── gallery │ │ │ │ ├── 1.jpg │ │ │ │ ├── 10.jpg │ │ │ │ ├── 11.jpg │ │ │ │ ├── 12.jpg │ │ │ │ ├── 2.jpg │ │ │ │ ├── 3.jpg │ │ │ │ ├── 4.jpg │ │ │ │ ├── 5.jpg │ │ │ │ ├── 6.jpg │ │ │ │ ├── 7.jpg │ │ │ │ ├── 8.jpg │ │ │ │ ├── 9.jpg │ │ │ │ └── blog_item1.jpg │ │ │ ├── icons │ │ │ │ └── loading.gif │ │ │ └── thumbs │ │ │ │ ├── arch-1.jpg │ │ │ │ ├── arch-2.jpg │ │ │ │ ├── book-1.jpg │ │ │ │ ├── car-1.jpg │ │ │ │ ├── city-1.jpg │ │ │ │ ├── city-2.jpg │ │ │ │ ├── coins.jpg │ │ │ │ ├── leaves.jpg │ │ │ │ ├── tree.jpg │ │ │ │ ├── autumn-1.jpg │ │ │ │ ├── boats-1.jpg │ │ │ │ ├── crayons.jpg │ │ │ │ ├── cupcakes.jpg │ │ │ │ ├── flower-1.jpg │ │ │ │ ├── flower-2.jpg │ │ │ │ ├── flower-3.jpg │ │ │ │ ├── fountain.jpg │ │ │ │ ├── pinecone.jpg │ │ │ │ ├── river-1.jpg │ │ │ │ ├── river-2.jpg │ │ │ │ ├── sunset-1.jpg │ │ │ │ ├── winter-1.jpg │ │ │ │ ├── winter-2.jpg │ │ │ │ ├── business-1.jpg │ │ │ │ ├── calendar-1.jpg │ │ │ │ ├── christmas-1.jpg │ │ │ │ ├── christmas-2.jpg │ │ │ │ ├── christmas-3.jpg │ │ │ │ ├── eggs-nest.jpg │ │ │ │ ├── lichterman.jpg │ │ │ │ ├── winter-sun.jpg │ │ │ │ ├── woodstump.jpg │ │ │ │ └── coffee-grass.jpg │ │ ├── styles │ │ │ ├── flat │ │ │ │ ├── red.png │ │ │ │ ├── aero.png │ │ │ │ ├── blue.png │ │ │ │ ├── flat.png │ │ │ │ ├── green.png │ │ │ │ ├── grey.png │ │ │ │ ├── pink.png │ │ │ │ ├── aero@2x.png │ │ │ │ ├── blue@2x.png │ │ │ │ ├── flat@2x.png │ │ │ │ ├── green@2x.png │ │ │ │ ├── grey@2x.png │ │ │ │ ├── orange.png │ │ │ │ ├── pink@2x.png │ │ │ │ ├── purple.png │ │ │ │ ├── red@2x.png │ │ │ │ ├── yellow.png │ │ │ │ ├── orange@2x.png │ │ │ │ ├── purple@2x.png │ │ │ │ ├── yellow@2x.png │ │ │ │ ├── flat.css │ │ │ │ ├── red.css │ │ │ │ ├── aero.css │ │ │ │ ├── blue.css │ │ │ │ ├── grey.css │ │ │ │ ├── pink.css │ │ │ │ ├── green.css │ │ │ │ ├── orange.css │ │ │ │ ├── purple.css │ │ │ │ └── yellow.css │ │ │ ├── line │ │ │ │ ├── line.png │ │ │ │ ├── line@2x.png │ │ │ │ ├── line.css │ │ │ │ ├── red.css │ │ │ │ ├── aero.css │ │ │ │ ├── blue.css │ │ │ │ ├── grey.css │ │ │ │ ├── pink.css │ │ │ │ ├── green.css │ │ │ │ ├── orange.css │ │ │ │ ├── purple.css │ │ │ │ └── yellow.css │ │ │ ├── square │ │ │ │ ├── red.png │ │ │ │ ├── aero.png │ │ │ │ ├── blue.png │ │ │ │ ├── green.png │ │ │ │ ├── grey.png │ │ │ │ ├── orange.png │ │ │ │ ├── pink.png │ │ │ │ ├── purple.png │ │ │ │ ├── red@2x.png │ │ │ │ ├── square.png │ │ │ │ ├── yellow.png │ │ │ │ ├── aero@2x.png │ │ │ │ ├── blue@2x.png │ │ │ │ ├── green@2x.png │ │ │ │ ├── grey@2x.png │ │ │ │ ├── pink@2x.png │ │ │ │ ├── orange@2x.png │ │ │ │ ├── purple@2x.png │ │ │ │ ├── square@2x.png │ │ │ │ ├── yellow@2x.png │ │ │ │ ├── square.css │ │ │ │ ├── red.css │ │ │ │ ├── aero.css │ │ │ │ ├── blue.css │ │ │ │ ├── grey.css │ │ │ │ ├── pink.css │ │ │ │ ├── green.css │ │ │ │ ├── orange.css │ │ │ │ ├── purple.css │ │ │ │ └── yellow.css │ │ │ ├── minimal │ │ │ │ ├── aero.png │ │ │ │ ├── blue.png │ │ │ │ ├── green.png │ │ │ │ ├── grey.png │ │ │ │ ├── pink.png │ │ │ │ ├── red.png │ │ │ │ ├── aero@2x.png │ │ │ │ ├── blue@2x.png │ │ │ │ ├── grey@2x.png │ │ │ │ ├── minimal.png │ │ │ │ ├── orange.png │ │ │ │ ├── pink@2x.png │ │ │ │ ├── purple.png │ │ │ │ ├── red@2x.png │ │ │ │ ├── yellow.png │ │ │ │ ├── green@2x.png │ │ │ │ ├── minimal@2x.png │ │ │ │ ├── orange@2x.png │ │ │ │ ├── purple@2x.png │ │ │ │ ├── yellow@2x.png │ │ │ │ ├── minimal.css │ │ │ │ ├── red.css │ │ │ │ ├── aero.css │ │ │ │ ├── blue.css │ │ │ │ ├── grey.css │ │ │ │ ├── pink.css │ │ │ │ ├── green.css │ │ │ │ ├── orange.css │ │ │ │ ├── purple.css │ │ │ │ └── yellow.css │ │ │ ├── polaris │ │ │ │ ├── polaris.png │ │ │ │ ├── polaris@2x.png │ │ │ │ └── polaris.css │ │ │ ├── futurico │ │ │ │ ├── futurico.png │ │ │ │ ├── futurico@2x.png │ │ │ │ └── futurico.css │ │ │ ├── pace.css │ │ │ ├── all.css │ │ │ ├── zabuto_calendar.min.css │ │ │ ├── jquery.news-ticker.css │ │ │ └── nestable.css │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.ttf │ │ │ └── fontawesome-webfont.woff │ │ ├── script │ │ │ ├── animation.js │ │ │ ├── index.js │ │ │ ├── ui-nestable-list.js │ │ │ ├── angular │ │ │ │ └── angular-messages.min.js │ │ │ ├── jquery.metisMenu.js │ │ │ ├── funnel.js │ │ │ ├── custom.min.js │ │ │ ├── jquery.menu.js │ │ │ ├── html5shiv.js │ │ │ ├── jquery.flot.resize.js │ │ │ ├── bootstrap-hover-dropdown.js │ │ │ ├── jquery.cookie.js │ │ │ ├── respond.min.js │ │ │ ├── data.js │ │ │ ├── icheck.min.js │ │ │ └── charts-chartjs.js │ │ └── ipvsstat │ │ │ └── script │ │ │ └── angular-app.js │ ├── urls.py │ ├── wsgi.py │ └── menu.py ├── ipvsadmin │ ├── __init__.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── admin.py │ ├── tests.py │ ├── menu.py │ ├── templates │ │ └── ipvsadmin │ │ │ ├── error-div.html │ │ │ ├── panel-deletevs.html │ │ │ ├── ipvsadminboad.html │ │ │ └── panel-addvs.html │ ├── urls.py │ ├── views.py │ ├── controler.py │ └── ipvsadm.py ├── ipvsstat │ ├── __init__.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ ├── admin.py │ ├── menu.py │ ├── lvs │ │ ├── mem.py │ │ ├── __init__.py │ │ └── ipvs.py │ ├── urls.py │ └── views.py └── manage.py ├── requirements.txt ├── screenshot ├── screenshot.png ├── screenshot-small.png ├── screenshot-ipvsadmin-addrs.png └── screenshot-ipvsadmin-addvs.png ├── unittest ├── python │ └── ipvsadmin.py └── resource │ ├── ip_vs_stats │ ├── ip_vs │ └── ip_vs_2 ├── README.md ├── .project ├── .pydevproject └── .gitignore /src/djangolvs/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ipvsadmin/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ipvsstat/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/djangolvs/settings/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ipvsadmin/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ipvsstat/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | 2 | django=1.7.1 3 | psutil=2.3.1 4 | -------------------------------------------------------------------------------- /src/ipvsadmin/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /src/ipvsstat/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /src/ipvsstat/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /src/ipvsadmin/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /src/ipvsadmin/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /src/ipvsstat/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /screenshot/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/screenshot/screenshot.png -------------------------------------------------------------------------------- /src/djangolvs/db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/db.sqlite3 -------------------------------------------------------------------------------- /screenshot/screenshot-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/screenshot/screenshot-small.png -------------------------------------------------------------------------------- /src/djangolvs/static/images/bg/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/bg/1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/bg/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/bg/2.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/bg/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/bg/3.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/bg/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/bg/bg.png -------------------------------------------------------------------------------- /src/ipvsadmin/menu.py: -------------------------------------------------------------------------------- 1 | 2 | from djangolvs.menu import menuItem 3 | 4 | menu_items = (menuItem(title='IpvsAdmin',url='/ipvsadmin'),) -------------------------------------------------------------------------------- /src/ipvsstat/menu.py: -------------------------------------------------------------------------------- 1 | 2 | from djangolvs.menu import menuItem 3 | 4 | menu_items = (menuItem(title='LVS-Board',url='/ipvsstat'),) -------------------------------------------------------------------------------- /src/djangolvs/static/images/blogs/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/blogs/1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/blogs/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/blogs/10.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/blogs/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/blogs/11.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/blogs/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/blogs/12.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/blogs/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/blogs/2.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/blogs/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/blogs/3.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/blogs/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/blogs/4.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/blogs/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/blogs/5.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/blogs/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/blogs/6.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/blogs/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/blogs/7.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/blogs/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/blogs/8.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/blogs/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/blogs/9.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/red.png -------------------------------------------------------------------------------- /screenshot/screenshot-ipvsadmin-addrs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/screenshot/screenshot-ipvsadmin-addrs.png -------------------------------------------------------------------------------- /screenshot/screenshot-ipvsadmin-addvs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/screenshot/screenshot-ipvsadmin-addvs.png -------------------------------------------------------------------------------- /src/djangolvs/static/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/djangolvs/static/images/avatar/128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/avatar/128.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/avatar/48.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/avatar/48.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/gallery/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/gallery/1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/gallery/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/gallery/10.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/gallery/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/gallery/11.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/gallery/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/gallery/12.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/gallery/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/gallery/2.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/gallery/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/gallery/3.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/gallery/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/gallery/4.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/gallery/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/gallery/5.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/gallery/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/gallery/6.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/gallery/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/gallery/7.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/gallery/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/gallery/8.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/gallery/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/gallery/9.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/aero.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/blue.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/flat.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/green.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/grey.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/pink.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/line/line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/line/line.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/red.png -------------------------------------------------------------------------------- /src/djangolvs/static/images/icons/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/icons/loading.gif -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/arch-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/arch-1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/arch-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/arch-2.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/book-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/book-1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/car-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/car-1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/city-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/city-1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/city-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/city-2.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/coins.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/coins.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/leaves.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/leaves.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/tree.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/tree.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/aero@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/blue@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/flat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/flat@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/green@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/grey@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/orange.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/pink@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/purple.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/red@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/yellow.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/line/line@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/line/line@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/aero.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/blue.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/green.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/grey.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/pink.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/red.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/aero.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/blue.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/green.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/grey.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/orange.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/pink.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/purple.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/red@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/square.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/yellow.png -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/autumn-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/autumn-1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/boats-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/boats-1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/crayons.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/crayons.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/cupcakes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/cupcakes.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/flower-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/flower-1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/flower-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/flower-2.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/flower-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/flower-3.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/fountain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/fountain.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/pinecone.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/pinecone.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/river-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/river-1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/river-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/river-2.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/sunset-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/sunset-1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/winter-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/winter-1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/winter-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/winter-2.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/orange@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/purple@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/flat/yellow@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/aero@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/blue@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/grey@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/minimal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/minimal.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/orange.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/pink@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/purple.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/red@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/yellow.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/polaris/polaris.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/polaris/polaris.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/aero@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/blue@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/green@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/grey@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/pink@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/djangolvs/static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/djangolvs/static/images/avatar/profile-pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/avatar/profile-pic.png -------------------------------------------------------------------------------- /src/djangolvs/static/images/blogs/blog_item1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/blogs/blog_item1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/gallery/blog_item1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/gallery/blog_item1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/business-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/business-1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/calendar-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/calendar-1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/christmas-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/christmas-1.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/christmas-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/christmas-2.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/christmas-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/christmas-3.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/eggs-nest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/eggs-nest.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/lichterman.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/lichterman.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/winter-sun.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/winter-sun.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/woodstump.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/woodstump.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/styles/futurico/futurico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/futurico/futurico.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/green@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/minimal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/minimal@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/orange@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/purple@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/minimal/yellow@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/polaris/polaris@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/polaris/polaris@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/orange@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/purple@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/square@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/square@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/square/yellow@2x.png -------------------------------------------------------------------------------- /src/djangolvs/static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/djangolvs/static/images/bg/login-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/bg/login-background.png -------------------------------------------------------------------------------- /src/djangolvs/static/images/thumbs/coffee-grass.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/images/thumbs/coffee-grass.jpg -------------------------------------------------------------------------------- /src/djangolvs/static/styles/futurico/futurico@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cybermaniax/django-lvs/HEAD/src/djangolvs/static/styles/futurico/futurico@2x.png -------------------------------------------------------------------------------- /src/ipvsadmin/templates/ipvsadmin/error-div.html: -------------------------------------------------------------------------------- 1 | {% if field.errors %} 2 | {% for error in field.errors %} 3 |
{{ error|escape }}
4 | {% endfor %} 5 | {% endif %} -------------------------------------------------------------------------------- /unittest/python/ipvsadmin.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Created on 18 gru 2014 4 | 5 | @author: ghalajko 6 | ''' 7 | import sys 8 | 9 | 10 | 11 | if __name__ == '__main__': 12 | print "ipvadminmock %s" % sys.argv[1:] 13 | sys.exit(0) -------------------------------------------------------------------------------- /src/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangolvs.settings.dev") 7 | 8 | from django.core.management import execute_from_command_line 9 | 10 | execute_from_command_line(sys.argv) 11 | -------------------------------------------------------------------------------- /src/ipvsstat/lvs/mem.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Created on 18 gru 2014 3 | 4 | @author: ghalajko 5 | ''' 6 | import psutil 7 | 8 | 9 | def memory_info(): 10 | mem = psutil.virtual_memory() 11 | used = mem.total - mem.available 12 | return [mem.percent,int(used / 1024 / 1024),int(mem.total / 1024 / 1024)] 13 | 14 | -------------------------------------------------------------------------------- /unittest/resource/ip_vs_stats: -------------------------------------------------------------------------------- 1 | Total Incoming Outgoing Incoming Outgoing 2 | Conns Packets Packets Bytes Bytes 3 | 0 0 0 0 0 4 | 5 | Conns/s Pkts/s Pkts/s Bytes/s Bytes/s 6 | 0 0 0 0 0 7 | -------------------------------------------------------------------------------- /src/djangolvs/static/script/animation.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function(){ 2 | $.cookie('animations','bounce'); 3 | $('#change-transitions button').click(function() { 4 | $("body").removeClass($.cookie('animations')); 5 | var ani = $(this).attr('data-value'); 6 | $("body").addClass("animated " + ani); 7 | $.cookie('animations', ani); 8 | }); 9 | }); -------------------------------------------------------------------------------- /src/djangolvs/static/styles/pace.css: -------------------------------------------------------------------------------- 1 | .pace .pace-progress { 2 | background: #29d; 3 | position: fixed; 4 | z-index: 2000; 5 | top: 0; 6 | left: 0; 7 | height: 2px; 8 | 9 | -webkit-transition: width 1s; 10 | -moz-transition: width 1s; 11 | -o-transition: width 1s; 12 | transition: width 1s; 13 | } 14 | 15 | .pace-inactive { 16 | display: none; 17 | } 18 | -------------------------------------------------------------------------------- /src/djangolvs/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import patterns, include, url 2 | from django.contrib import admin 3 | from django.views.generic import RedirectView 4 | 5 | urlpatterns = patterns('', 6 | url(r'^$', RedirectView.as_view(url='/ipvsstat/')), 7 | url(r'^ipvsstat/', include('ipvsstat.urls',namespace="ipvsstate")), 8 | url(r'^ipvsadmin/', include('ipvsadmin.urls',namespace="ipvsadmin")), 9 | url(r'^admin/', include(admin.site.urls)), 10 | ) 11 | -------------------------------------------------------------------------------- /src/djangolvs/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for djangolvs project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangolvs.settings") 12 | 13 | from django.core.wsgi import get_wsgi_application 14 | application = get_wsgi_application() 15 | -------------------------------------------------------------------------------- /unittest/resource/ip_vs: -------------------------------------------------------------------------------- 1 | IP Virtual Server version 1.2.1 (size=4096) 2 | Prot LocalAddress:Port Scheduler Flags 3 | -> RemoteAddress:Port Forward Weight ActiveConn InActConn 4 | FWM 00000050 lc persistent 150000 FFFFFFFF 5 | -> C0A87BBA:0100 Route 50 0 0 6 | -> C0A87BBB:0011 Route 50 1 3 7 | FWM 00000052 lc persistent 150000 FFFFFFFF 8 | -> C0A87BBC:1234 Route 50 0 0 9 | -> C0A87BBD:0000 Route 50 1 6 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | django-lvs 2 | ========== 3 | 4 | Web interface for Linux Vistual Server and keepalived 5 | 6 | 7 | ![Dashboard view](https://raw.githubusercontent.com/cybermaniax/django-lvs/master/screenshot/screenshot.png) 8 | 9 | ![Dashboard view](https://raw.githubusercontent.com/cybermaniax/django-lvs/master/screenshot/screenshot-ipvsadmin-addvs.png) 10 | 11 | ![Dashboard view](https://raw.githubusercontent.com/cybermaniax/django-lvs/master/screenshot/screenshot-ipvsadmin-addrs.png) 12 | 13 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | dj-lvs 4 | 5 | 6 | 7 | 8 | 9 | org.python.pydev.PyDevBuilder 10 | 11 | 12 | 13 | 14 | 15 | org.python.pydev.pythonNature 16 | org.python.pydev.django.djangoNature 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/ipvsstat/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import patterns, url 2 | 3 | from ipvsstat import views 4 | 5 | urlpatterns = patterns('', 6 | url(r'^$', views.index, name='index'), 7 | url(r'^ajax/dashboard$', views.ajax_dashboard, name='ajax.dashboard'), 8 | url(r'^ajax/nicdashboard$', views.ajax_nic_dashboard, name='ajax.nic_dashboard'), 9 | url(r'^ajax/ipvsadm$', views.ajax_ipvsadm, name='ajax.ipvsadm'), 10 | url(r'^content/ipvadmin/table/dashboard$', views.ipvsadmin_table_content, name='content.ipvsadm.table'), 11 | ) -------------------------------------------------------------------------------- /unittest/resource/ip_vs_2: -------------------------------------------------------------------------------- 1 | IP Virtual Server version 1.2.1 (size=4096) 2 | Prot LocalAddress:Port Scheduler Flags 3 | -> RemoteAddress:Port Forward Weight ActiveConn InActConn 4 | TCP C0A87B7B:1234 lblc 5 | -> C0A87BBD:1234 Masq 54 0 0 6 | FWM 00000050 lc persistent 150000 FFFFFFFF 7 | -> C0A87BBD:0001 Route 51 1 3 8 | -> C0A87B0D:0002 Route 52 2 2 9 | -> C8C8C8C8:6666 Route 53 3 1 10 | -> C0A87B0D:6666 Route 53 3 1 11 | -------------------------------------------------------------------------------- /.pydevproject: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | DJANGO_MANAGE_LOCATION 5 | src/manage.py 6 | 7 | 8 | /${PROJECT_DIR_NAME}/src 9 | 10 | python 2.7 11 | Default 12 | 13 | -------------------------------------------------------------------------------- /src/djangolvs/menu.py: -------------------------------------------------------------------------------- 1 | 2 | from django.conf import settings 3 | import importlib 4 | 5 | def menuItem(title,url): 6 | return MenuItem(title,url) 7 | 8 | def menu_context_processor(request): 9 | return {'MENU_ITEMS':__menu_items()} 10 | 11 | def __menu_items(): 12 | menu = () 13 | for app_name in settings.INSTALLED_APPS: 14 | try: 15 | mod = importlib.import_module(app_name+'.menu') 16 | menu = menu + mod.menu_items 17 | except ImportError: 18 | pass 19 | return menu 20 | 21 | class MenuItem: 22 | 23 | def __init__(self, title,url): 24 | self.title = title 25 | self.url = url -------------------------------------------------------------------------------- /src/djangolvs/settings/dev.py: -------------------------------------------------------------------------------- 1 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 2 | from base import * 3 | 4 | BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 5 | 6 | 7 | # SECURITY WARNING: don't run with debug turned on in production! 8 | DEBUG = True 9 | 10 | TEMPLATE_DEBUG = True 11 | 12 | ALLOWED_HOSTS = [] 13 | 14 | 15 | # Application definition 16 | PROJECT_APPS = ('ipvsstat','ipvsadmin',); 17 | 18 | 19 | INSTALLED_APPS = PREREQ_APPS + PROJECT_APPS 20 | 21 | 22 | 23 | DATABASES = { 24 | 'default': { 25 | 'ENGINE': 'django.db.backends.sqlite3', 26 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 27 | } 28 | } 29 | 30 | #IP_VS_FILE = '../unittest/resource/ip_vs_2' 31 | #IP_VS_STAT_FILE = '../unittest/resource/ip_vs_stats' 32 | #IPVSADMIN = '../unittest/python/ipvsadmin.py' 33 | 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | lib/ 17 | lib64/ 18 | parts/ 19 | sdist/ 20 | var/ 21 | *.egg-info/ 22 | .installed.cfg 23 | *.egg 24 | 25 | # PyInstaller 26 | # Usually these files are written by a python script from a template 27 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 28 | *.manifest 29 | *.spec 30 | 31 | # Installer logs 32 | pip-log.txt 33 | pip-delete-this-directory.txt 34 | 35 | # Unit test / coverage reports 36 | htmlcov/ 37 | .tox/ 38 | .coverage 39 | .cache 40 | nosetests.xml 41 | coverage.xml 42 | 43 | # Translations 44 | *.mo 45 | *.pot 46 | 47 | # Django stuff: 48 | *.log 49 | 50 | # Sphinx documentation 51 | docs/_build/ 52 | 53 | # PyBuilder 54 | target/ 55 | -------------------------------------------------------------------------------- /src/ipvsadmin/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import patterns, url 2 | 3 | from ipvsadmin import views 4 | 5 | urlpatterns = patterns('', 6 | url(r'^$', views.index, name='index'), 7 | url(r'^content/ipvadmin/table/dashboard$', views.ipvsadmin_table_content, name='content.ipvsadm.table'), 8 | url(r'^ajax/deletevs/(?P\w{3})/(?P\d{1,21}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,4})$', views.ajax_delete_virtual_server, name='ajax_delete_virtual_server'), 9 | url(r'^ajax/deleterealserv/(?P\w{3})/(?P\d{1,21}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,4})/(?P\d{1,21}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,4})$', views.ajax_delete_real_server, name='ajax_delete_real_server'), 10 | url(r'^ajax/weight/(?P\w{3})/(?P\d{1,21}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,4})/(?P\d{1,21}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,4})/(?P\d{1,4})/(?P\w{4,6})$', views.ajax_weight, name='ajax_weight'), 11 | ) -------------------------------------------------------------------------------- /src/ipvsadmin/templates/ipvsadmin/panel-deletevs.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/djangolvs/static/script/index.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | function message_warn(msg){ 5 | var element = ""; 6 | element += "
"; 7 | element += "" 8 | element += "Warning! "+msg 9 | element += "
" 10 | $('#messages').prepend(element) 11 | } 12 | 13 | function message_info(msg){ 14 | var element = ""; 15 | element += "
"; 16 | element += "" 17 | element += "Well done! "+msg 18 | element += "
" 19 | $('#messages').prepend(element) 20 | } 21 | 22 | function message_error(msg){ 23 | var element = ""; 24 | element += "
"; 25 | element += "" 26 | element += "Oh snap! "+msg 27 | element += "
" 28 | $('#messages').prepend(element) 29 | } 30 | 31 | -------------------------------------------------------------------------------- /src/djangolvs/static/script/ui-nestable-list.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | var updateOutput = function(e) 3 | { 4 | var list = e.length ? e : $(e.target), 5 | output = list.data('output'); 6 | if (window.JSON) { 7 | output.val(window.JSON.stringify(list.nestable('serialize')));//, null, 2)); 8 | } else { 9 | output.val('JSON browser support required for this demo.'); 10 | } 11 | }; 12 | 13 | // activate Nestable for list 1 14 | $('#nestable').nestable({ 15 | group: 1 16 | }).on('change', updateOutput); 17 | 18 | // activate Nestable for list 2 19 | $('#nestable2').nestable({ 20 | group: 1 21 | }).on('change', updateOutput); 22 | 23 | // output initial serialised data 24 | updateOutput($('#nestable').data('output', $('#nestable-output'))); 25 | updateOutput($('#nestable2').data('output', $('#nestable2-output'))); 26 | 27 | $('#nestable-menu').on('click', function(e) 28 | { 29 | var target = $(e.target), 30 | action = target.data('action'); 31 | if (action === 'expand-all') { 32 | $('.dd').nestable('expandAll'); 33 | } 34 | if (action === 'collapse-all') { 35 | $('.dd').nestable('collapseAll'); 36 | } 37 | }); 38 | 39 | $('#nestable3').nestable(); 40 | }); -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/flat.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin flat skin, black 2 | ----------------------------------- */ 3 | .icheckbox_flat, 4 | .iradio_flat { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(flat.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* HiDPI support */ 46 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 47 | .icheckbox_flat, 48 | .iradio_flat { 49 | background-image: url(flat@2x.png); 50 | -webkit-background-size: 176px 22px; 51 | background-size: 176px 22px; 52 | } 53 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/red.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, red 2 | ----------------------------------- */ 3 | .icheckbox_flat-red, 4 | .iradio_flat-red { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(red.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-red { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-red.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-red.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-red.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-red { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-red.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-red.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-red.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* HiDPI support */ 46 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 47 | .icheckbox_flat-red, 48 | .iradio_flat-red { 49 | background-image: url(red@2x.png); 50 | -webkit-background-size: 176px 22px; 51 | background-size: 176px 22px; 52 | } 53 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/aero.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, aero 2 | ----------------------------------- */ 3 | .icheckbox_flat-aero, 4 | .iradio_flat-aero { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(aero.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-aero { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-aero.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-aero.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-aero.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-aero { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-aero.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-aero.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-aero.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* HiDPI support */ 46 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 47 | .icheckbox_flat-aero, 48 | .iradio_flat-aero { 49 | background-image: url(aero@2x.png); 50 | -webkit-background-size: 176px 22px; 51 | background-size: 176px 22px; 52 | } 53 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/blue.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, blue 2 | ----------------------------------- */ 3 | .icheckbox_flat-blue, 4 | .iradio_flat-blue { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(blue.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-blue { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-blue.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-blue.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-blue.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-blue { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-blue.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-blue.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-blue.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* HiDPI support */ 46 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 47 | .icheckbox_flat-blue, 48 | .iradio_flat-blue { 49 | background-image: url(blue@2x.png); 50 | -webkit-background-size: 176px 22px; 51 | background-size: 176px 22px; 52 | } 53 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/grey.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, grey 2 | ----------------------------------- */ 3 | .icheckbox_flat-grey, 4 | .iradio_flat-grey { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(grey.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-grey { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-grey.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-grey.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-grey.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-grey { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-grey.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-grey.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-grey.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* HiDPI support */ 46 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 47 | .icheckbox_flat-grey, 48 | .iradio_flat-grey { 49 | background-image: url(grey@2x.png); 50 | -webkit-background-size: 176px 22px; 51 | background-size: 176px 22px; 52 | } 53 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/pink.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, pink 2 | ----------------------------------- */ 3 | .icheckbox_flat-pink, 4 | .iradio_flat-pink { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(pink.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-pink { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-pink.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-pink.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-pink.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-pink { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-pink.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-pink.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-pink.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* HiDPI support */ 46 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 47 | .icheckbox_flat-pink, 48 | .iradio_flat-pink { 49 | background-image: url(pink@2x.png); 50 | -webkit-background-size: 176px 22px; 51 | background-size: 176px 22px; 52 | } 53 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/futurico/futurico.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Futurico skin 2 | ----------------------------------- */ 3 | .icheckbox_futurico, 4 | .iradio_futurico { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 16px; 11 | height: 17px; 12 | background: url(futurico.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_futurico { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_futurico.checked { 21 | background-position: -18px 0; 22 | } 23 | .icheckbox_futurico.disabled { 24 | background-position: -36px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_futurico.checked.disabled { 28 | background-position: -54px 0; 29 | } 30 | 31 | .iradio_futurico { 32 | background-position: -72px 0; 33 | } 34 | .iradio_futurico.checked { 35 | background-position: -90px 0; 36 | } 37 | .iradio_futurico.disabled { 38 | background-position: -108px 0; 39 | cursor: default; 40 | } 41 | .iradio_futurico.checked.disabled { 42 | background-position: -126px 0; 43 | } 44 | 45 | /* HiDPI support */ 46 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 47 | .icheckbox_futurico, 48 | .iradio_futurico { 49 | background-image: url(futurico@2x.png); 50 | -webkit-background-size: 144px 19px; 51 | background-size: 144px 19px; 52 | } 53 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/green.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, green 2 | ----------------------------------- */ 3 | .icheckbox_flat-green, 4 | .iradio_flat-green { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(green.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-green { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-green.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-green.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-green.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-green { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-green.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-green.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-green.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* HiDPI support */ 46 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 47 | .icheckbox_flat-green, 48 | .iradio_flat-green { 49 | background-image: url(green@2x.png); 50 | -webkit-background-size: 176px 22px; 51 | background-size: 176px 22px; 52 | } 53 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/orange.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, orange 2 | ----------------------------------- */ 3 | .icheckbox_flat-orange, 4 | .iradio_flat-orange { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(orange.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-orange { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-orange.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-orange.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-orange.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-orange { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-orange.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-orange.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-orange.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* HiDPI support */ 46 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 47 | .icheckbox_flat-orange, 48 | .iradio_flat-orange { 49 | background-image: url(orange@2x.png); 50 | -webkit-background-size: 176px 22px; 51 | background-size: 176px 22px; 52 | } 53 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/purple.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, purple 2 | ----------------------------------- */ 3 | .icheckbox_flat-purple, 4 | .iradio_flat-purple { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(purple.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-purple { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-purple.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-purple.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-purple.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-purple { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-purple.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-purple.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-purple.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* HiDPI support */ 46 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 47 | .icheckbox_flat-purple, 48 | .iradio_flat-purple { 49 | background-image: url(purple@2x.png); 50 | -webkit-background-size: 176px 22px; 51 | background-size: 176px 22px; 52 | } 53 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/flat/yellow.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, yellow 2 | ----------------------------------- */ 3 | .icheckbox_flat-yellow, 4 | .iradio_flat-yellow { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(yellow.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-yellow { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-yellow.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-yellow.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-yellow.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-yellow { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-yellow.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-yellow.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-yellow.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* HiDPI support */ 46 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 47 | .icheckbox_flat-yellow, 48 | .iradio_flat-yellow { 49 | background-image: url(yellow@2x.png); 50 | -webkit-background-size: 176px 22px; 51 | background-size: 176px 22px; 52 | } 53 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/square.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, black 2 | ----------------------------------- */ 3 | .icheckbox_square, 4 | .iradio_square { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(square.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_square, 54 | .iradio_square { 55 | background-image: url(square@2x.png); 56 | -webkit-background-size: 240px 24px; 57 | background-size: 240px 24px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/polaris/polaris.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Polaris skin 2 | ----------------------------------- */ 3 | .icheckbox_polaris, 4 | .iradio_polaris { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 29px; 11 | height: 29px; 12 | background: url(polaris.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_polaris { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_polaris.hover { 21 | background-position: -31px 0; 22 | } 23 | .icheckbox_polaris.checked { 24 | background-position: -62px 0; 25 | } 26 | .icheckbox_polaris.disabled { 27 | background-position: -93px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_polaris.checked.disabled { 31 | background-position: -124px 0; 32 | } 33 | 34 | .iradio_polaris { 35 | background-position: -155px 0; 36 | } 37 | .iradio_polaris.hover { 38 | background-position: -186px 0; 39 | } 40 | .iradio_polaris.checked { 41 | background-position: -217px 0; 42 | } 43 | .iradio_polaris.disabled { 44 | background-position: -248px 0; 45 | cursor: default; 46 | } 47 | .iradio_polaris.checked.disabled { 48 | background-position: -279px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_polaris, 54 | .iradio_polaris { 55 | background-image: url(polaris@2x.png); 56 | -webkit-background-size: 310px 31px; 57 | background-size: 310px 31px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/minimal.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, black 2 | ----------------------------------- */ 3 | .icheckbox_minimal, 4 | .iradio_minimal { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(minimal.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_minimal, 54 | .iradio_minimal { 55 | background-image: url(minimal@2x.png); 56 | -webkit-background-size: 200px 20px; 57 | background-size: 200px 20px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/red.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, red 2 | ----------------------------------- */ 3 | .icheckbox_square-red, 4 | .iradio_square-red { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(red.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-red { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-red.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-red.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-red.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-red.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-red { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-red.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-red.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-red.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-red.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_square-red, 54 | .iradio_square-red { 55 | background-image: url(red@2x.png); 56 | -webkit-background-size: 240px 24px; 57 | background-size: 240px 24px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/red.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, red 2 | ----------------------------------- */ 3 | .icheckbox_minimal-red, 4 | .iradio_minimal-red { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(red.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-red { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-red.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-red.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-red.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-red.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-red { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-red.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-red.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-red.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-red.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_minimal-red, 54 | .iradio_minimal-red { 55 | background-image: url(red@2x.png); 56 | -webkit-background-size: 200px 20px; 57 | background-size: 200px 20px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/aero.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, aero 2 | ----------------------------------- */ 3 | .icheckbox_square-aero, 4 | .iradio_square-aero { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(aero.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-aero { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-aero.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-aero.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-aero.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-aero.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-aero { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-aero.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-aero.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-aero.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-aero.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_square-aero, 54 | .iradio_square-aero { 55 | background-image: url(aero@2x.png); 56 | -webkit-background-size: 240px 24px; 57 | background-size: 240px 24px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/blue.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, blue 2 | ----------------------------------- */ 3 | .icheckbox_square-blue, 4 | .iradio_square-blue { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(blue.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-blue { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-blue.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-blue.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-blue.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-blue.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-blue { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-blue.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-blue.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-blue.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-blue.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_square-blue, 54 | .iradio_square-blue { 55 | background-image: url(blue@2x.png); 56 | -webkit-background-size: 240px 24px; 57 | background-size: 240px 24px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/grey.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, grey 2 | ----------------------------------- */ 3 | .icheckbox_square-grey, 4 | .iradio_square-grey { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(grey.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-grey { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-grey.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-grey.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-grey.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-grey.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-grey { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-grey.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-grey.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-grey.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-grey.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_square-grey, 54 | .iradio_square-grey { 55 | background-image: url(grey@2x.png); 56 | -webkit-background-size: 240px 24px; 57 | background-size: 240px 24px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/pink.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, pink 2 | ----------------------------------- */ 3 | .icheckbox_square-pink, 4 | .iradio_square-pink { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(pink.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-pink { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-pink.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-pink.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-pink.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-pink.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-pink { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-pink.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-pink.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-pink.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-pink.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_square-pink, 54 | .iradio_square-pink { 55 | background-image: url(pink@2x.png); 56 | -webkit-background-size: 240px 24px; 57 | background-size: 240px 24px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/aero.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, aero 2 | ----------------------------------- */ 3 | .icheckbox_minimal-aero, 4 | .iradio_minimal-aero { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(aero.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-aero { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-aero.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-aero.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-aero.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-aero.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-aero { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-aero.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-aero.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-aero.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-aero.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_minimal-aero, 54 | .iradio_minimal-aero { 55 | background-image: url(aero@2x.png); 56 | -webkit-background-size: 200px 20px; 57 | background-size: 200px 20px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/blue.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, blue 2 | ----------------------------------- */ 3 | .icheckbox_minimal-blue, 4 | .iradio_minimal-blue { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(blue.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-blue { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-blue.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-blue.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-blue.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-blue.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-blue { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-blue.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-blue.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-blue.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-blue.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_minimal-blue, 54 | .iradio_minimal-blue { 55 | background-image: url(blue@2x.png); 56 | -webkit-background-size: 200px 20px; 57 | background-size: 200px 20px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/grey.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, grey 2 | ----------------------------------- */ 3 | .icheckbox_minimal-grey, 4 | .iradio_minimal-grey { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(grey.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-grey { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-grey.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-grey.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-grey.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-grey.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-grey { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-grey.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-grey.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-grey.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-grey.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_minimal-grey, 54 | .iradio_minimal-grey { 55 | background-image: url(grey@2x.png); 56 | -webkit-background-size: 200px 20px; 57 | background-size: 200px 20px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/pink.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, pink 2 | ----------------------------------- */ 3 | .icheckbox_minimal-pink, 4 | .iradio_minimal-pink { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(pink.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-pink { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-pink.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-pink.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-pink.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-pink.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-pink { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-pink.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-pink.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-pink.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-pink.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_minimal-pink, 54 | .iradio_minimal-pink { 55 | background-image: url(pink@2x.png); 56 | -webkit-background-size: 200px 20px; 57 | background-size: 200px 20px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/square/green.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, green 2 | ----------------------------------- */ 3 | .icheckbox_square-green, 4 | .iradio_square-green { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(green.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-green { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-green.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-green.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-green.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-green.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-green { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-green.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-green.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-green.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-green.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_square-green, 54 | .iradio_square-green { 55 | background-image: url(green@2x.png); 56 | -webkit-background-size: 240px 24px; 57 | background-size: 240px 24px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/minimal/green.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, green 2 | ----------------------------------- */ 3 | .icheckbox_minimal-green, 4 | .iradio_minimal-green { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(green.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-green { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-green.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-green.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-green.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-green.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-green { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-green.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-green.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-green.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-green.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_minimal-green, 54 | .iradio_minimal-green { 55 | background-image: url(green@2x.png); 56 | -webkit-background-size: 200px 20px; 57 | background-size: 200px 20px; 58 | } 59 | } -------------------------------------------------------------------------------- /src/djangolvs/static/script/angular/angular-messages.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.3.11 3 | (c) 2010-2014 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(r,f,s){'use strict';f.module("ngMessages",[]).directive("ngMessages",["$compile","$animate","$templateRequest",function(q,k,l){return{restrict:"AE",controller:function(){this.$renderNgMessageClasses=f.noop;var b=[];this.registerMessage=function(d,a){for(var c=0;c").html(a);f.forEach(a.children(), 8 | function(a){a=f.element(a);h?h.after(a):d.prepend(a);h=a;q(a)(b)});c.renderMessages(e,g)})}}}]).directive("ngMessage",["$animate",function(f){return{require:"^ngMessages",transclude:"element",terminal:!0,restrict:"AE",link:function(k,l,b,d,a){for(var c,g,e=l[0],n=e.parentNode,h=0,p=0;hj-s||j===s?r:r+(p-r)*((j-s-k)/(j-s))};this.getX=function(k,a){return b+(a?-1:1)*(q(k)/2+c.dataLabels.distance)};this.center=[b,d,j];this.centerX=b;A(a,function(a){g+=a.y});A(a,function(a){o=null;x=g?a.y/g:0;m=d-j/2+h*j;l=m+x*j;i=q(m);y=b-i/2;B=y+ 11 | i;i=q(l);n=b-i/2;t=n+i;m>v?(y=n=b-r/2,B=t=b+r/2):l>v&&(o=l,i=q(v),n=b-i/2,t=n+i,l=v);w=["M",y,m,"L",B,m,t,l];o&&w.push(t,o,n,o);w.push(n,l,"Z");a.shapeType="path";a.shapeArgs={d:w};a.percentage=x*100;a.plotX=b;a.plotY=(m+(o||l))/2;a.tooltipPos=[b,a.plotY];a.slice=z;a.half=u;h+=x});this.setTooltipPoints()},drawPoints:function(){var a=this,g=a.options,e=a.chart.renderer;A(a.data,function(f){var h=f.graphic,c=f.shapeArgs;h?h.animate(c):f.graphic=e.path(c).attr({fill:f.color,stroke:g.borderColor,"stroke-width":g.borderWidth}).add(a.group)})}, 12 | sortByAngle:z,drawDataLabels:function(){var a=this.data,g=this.options.dataLabels.distance,e,f,h,c=a.length,d,b;for(this.center[2]-=2*g;c--;)h=a[c],f=(e=h.half)?1:-1,b=h.plotY,d=this.getX(b,e),h.labelPos=[0,b,d+(g-5)*f,b,d+g*f,b,e?"right":"left",0];p.pie.prototype.drawDataLabels.call(this)}})})(Highcharts); 13 | -------------------------------------------------------------------------------- /src/ipvsadmin/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.views.decorators.http import require_http_methods 3 | from django.http import JsonResponse,HttpResponseServerError 4 | 5 | from ipvsstat.lvs import ipvs 6 | from ipvsadmin import ipvsadm 7 | from ipvsadmin.forms import VirtualServerForm,RealServerForm 8 | from ipvsadmin import controler 9 | 10 | @require_http_methods(["GET", "POST"]) 11 | def index(request): 12 | vsform = controler.virtualServerForm(request) 13 | rsform = controler.realServerForm(request) 14 | return render(request, 'ipvsadmin/index.html',{'ipvs':ipvs.ipvs(),'vsform':vsform,'rsform':rsform}) 15 | 16 | @require_http_methods(["GET"]) 17 | def ajax_delete_virtual_server(request,mode,port): 18 | if not ipvsadm.ipvadmin_exists(): 19 | return HttpResponseServerError('

Command ipvsadm not found

') 20 | if 0 != ipvsadm.delete_virtual_server(mode, port): 21 | return HttpResponseServerError('

Error with ipvsadm execution

') 22 | return JsonResponse({'return':'OK'}) 23 | 24 | @require_http_methods(["GET"]) 25 | def ajax_delete_real_server(request,mode,port,realserver): 26 | if not ipvsadm.ipvadmin_exists(): 27 | return HttpResponseServerError('

Command ipvsadm not found

') 28 | if 0 != ipvsadm.delete_real_server(mode, port,realserver): 29 | return HttpResponseServerError('

Error with ipvsadm execution

') 30 | return JsonResponse({'return':'OK'}) 31 | 32 | @require_http_methods(["GET"]) 33 | def ajax_weight(request,mode,port,realserver,weight,realsmode): 34 | if not ipvsadm.ipvadmin_exists(): 35 | return HttpResponseServerError('

Command ipvsadm not found

') 36 | if 0 != ipvsadm.weight_real_server(mode, port,realserver,weight,realsmode.upper()): 37 | return HttpResponseServerError('

Error with ipvsadm execution

') 38 | return JsonResponse({'return':'OK'}) 39 | 40 | 41 | @require_http_methods(["GET"]) 42 | def ipvsadmin_table_content(request): 43 | return render(request, 'ipvsadmin/ipvsadminboad.html',{'ipvs':ipvs.ipvs()}) 44 | 45 | -------------------------------------------------------------------------------- /src/djangolvs/static/script/custom.min.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function(){var h=window.location.hash.replace("#","");if(h&&$("."+h).length){var k=$("."+h).offset().top-40;window.Zepto?window.scrollTo(0,k):$(window).scrollTop($("."+h).offset().top-40)}$(".skin dt").click(function(){$(this).siblings().removeClass("selected").end().prev("dd").andSelf().addClass("selected")});$(".arrows .top, .arrows .bottom, .features .self, .skins-info .self, .usage .self").click(function(b){var a=$(this).data("to"),d=$("."+a).offset().top;b.preventDefault(); 2 | window.location.hash=a;window.Zepto?window.scrollTo(0,d-40):$("html, body").stop().animate({scrollTop:d-40},600)});$(".colors li").click(function(){var b=$(this);if(!b.hasClass("active")){b.siblings().removeClass("active");var a=b.closest(".skin"),d=b.attr("class")?"-"+b.attr("class"):"",c=a.data("icheckbox"),g=a.data("iradio"),e="icheckbox_minimal",f="iradio_minimal";a.hasClass("skin-square")&&(e="icheckbox_square",f="iradio_square",void 0==c&&(c="icheckbox_square-green",g="iradio_square-green")); 3 | a.hasClass("skin-flat")&&(e="icheckbox_flat",f="iradio_flat",void 0==c&&(c="icheckbox_flat-red",g="iradio_flat-red"));a.hasClass("skin-line")&&(e="icheckbox_line",f="iradio_line",void 0==c&&(c="icheckbox_line-blue",g="iradio_line-blue"));void 0==c&&(c=e,g=f);a.find("input, .skin-states .state").each(function(){var a=$(this).hasClass("state")?$(this):$(this).parent(),b=a.attr("class").replace(c,e+d).replace(g,f+d);a.attr("class",b)});a.data("icheckbox",e+d);a.data("iradio",f+d);b.addClass("active")}}); 4 | $(".demo-methods dt .self").click(function(){var b=$(this);switch(b.attr("class").replace("self ","")){case "do-check":$("#input-1, #input-3").iCheck("check");break;case "do-uncheck":$("#input-1, #input-3").iCheck("uncheck");break;case "do-disable":$("#input-2, #input-4").iCheck("disable");break;case "do-enable":$("#input-2, #input-4").iCheck("enable");break;case "do-destroy":$(".demo-list input").iCheck("destroy");break;default:var a=b.hasClass("active")?"show code":"hide code";b.toggleClass("active").text(a); 5 | window.Zepto?$(this).closest("dt").next().toggle():$(this).closest("dt").next().slideToggle(200)}})}); -------------------------------------------------------------------------------- /src/djangolvs/static/styles/line/line.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Line skin, black 2 | ----------------------------------- */ 3 | .icheckbox_line, 4 | .iradio_line { 5 | position: relative; 6 | display: block; 7 | margin: 0; 8 | padding: 5px 15px 5px 38px; 9 | font-size: 13px; 10 | line-height: 17px; 11 | color: #fff; 12 | background: #000; 13 | border: none; 14 | -webkit-border-radius: 3px; 15 | -moz-border-radius: 3px; 16 | border-radius: 3px; 17 | cursor: pointer; 18 | } 19 | .icheckbox_line .icheck_line-icon, 20 | .iradio_line .icheck_line-icon { 21 | position: absolute; 22 | top: 50%; 23 | left: 13px; 24 | width: 13px; 25 | height: 11px; 26 | margin: -5px 0 0 0; 27 | padding: 0; 28 | overflow: hidden; 29 | background: url(line.png) no-repeat; 30 | border: none; 31 | } 32 | .icheckbox_line.hover, 33 | .icheckbox_line.checked.hover, 34 | .iradio_line.hover { 35 | background: #444; 36 | } 37 | .icheckbox_line.checked, 38 | .iradio_line.checked { 39 | background: #000; 40 | } 41 | .icheckbox_line.checked .icheck_line-icon, 42 | .iradio_line.checked .icheck_line-icon { 43 | background-position: -15px 0; 44 | } 45 | .icheckbox_line.disabled, 46 | .iradio_line.disabled { 47 | background: #ccc; 48 | cursor: default; 49 | } 50 | .icheckbox_line.disabled .icheck_line-icon, 51 | .iradio_line.disabled .icheck_line-icon { 52 | background-position: -30px 0; 53 | } 54 | .icheckbox_line.checked.disabled, 55 | .iradio_line.checked.disabled { 56 | background: #ccc; 57 | } 58 | .icheckbox_line.checked.disabled .icheck_line-icon, 59 | .iradio_line.checked.disabled .icheck_line-icon { 60 | background-position: -45px 0; 61 | } 62 | 63 | /* HiDPI support */ 64 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 65 | .icheckbox_line .icheck_line-icon, 66 | .iradio_line .icheck_line-icon { 67 | background-image: url(line@2x.png); 68 | -webkit-background-size: 60px 13px; 69 | background-size: 60px 13px; 70 | } 71 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/line/red.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Line skin, red 2 | ----------------------------------- */ 3 | .icheckbox_line-red, 4 | .iradio_line-red { 5 | position: relative; 6 | display: block; 7 | margin: 0; 8 | padding: 5px 15px 5px 38px; 9 | font-size: 13px; 10 | line-height: 17px; 11 | color: #fff; 12 | background: #e56c69; 13 | border: none; 14 | -webkit-border-radius: 3px; 15 | -moz-border-radius: 3px; 16 | border-radius: 3px; 17 | cursor: pointer; 18 | } 19 | .icheckbox_line-red .icheck_line-icon, 20 | .iradio_line-red .icheck_line-icon { 21 | position: absolute; 22 | top: 50%; 23 | left: 13px; 24 | width: 13px; 25 | height: 11px; 26 | margin: -5px 0 0 0; 27 | padding: 0; 28 | overflow: hidden; 29 | background: url(line.png) no-repeat; 30 | border: none; 31 | } 32 | .icheckbox_line-red.hover, 33 | .icheckbox_line-red.checked.hover, 34 | .iradio_line-red.hover { 35 | background: #E98582; 36 | } 37 | .icheckbox_line-red.checked, 38 | .iradio_line-red.checked { 39 | background: #e56c69; 40 | } 41 | .icheckbox_line-red.checked .icheck_line-icon, 42 | .iradio_line-red.checked .icheck_line-icon { 43 | background-position: -15px 0; 44 | } 45 | .icheckbox_line-red.disabled, 46 | .iradio_line-red.disabled { 47 | background: #F7D3D2; 48 | cursor: default; 49 | } 50 | .icheckbox_line-red.disabled .icheck_line-icon, 51 | .iradio_line-red.disabled .icheck_line-icon { 52 | background-position: -30px 0; 53 | } 54 | .icheckbox_line-red.checked.disabled, 55 | .iradio_line-red.checked.disabled { 56 | background: #F7D3D2; 57 | } 58 | .icheckbox_line-red.checked.disabled .icheck_line-icon, 59 | .iradio_line-red.checked.disabled .icheck_line-icon { 60 | background-position: -45px 0; 61 | } 62 | 63 | /* HiDPI support */ 64 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 65 | .icheckbox_line-red .icheck_line-icon, 66 | .iradio_line-red .icheck_line-icon { 67 | background-image: url(line@2x.png); 68 | -webkit-background-size: 60px 13px; 69 | background-size: 60px 13px; 70 | } 71 | } -------------------------------------------------------------------------------- /src/djangolvs/static/script/jquery.menu.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | var flag; 3 | if($('body').hasClass('sidebar-colors')){ 4 | flag = true; 5 | } else{ 6 | flag = false; 7 | } 8 | $('#menu-toggle').toggle( 9 | function() { 10 | if($('#wrapper').hasClass('right-sidebar')) { 11 | $('body').addClass('right-side-collapsed') 12 | $('#sidebar .slimScrollDiv').css('overflow', 'initial'); 13 | $('#sidebar .menu-scroll').css('overflow', 'initial'); 14 | } else{ 15 | $('body').addClass('left-side-collapsed').removeClass('sidebar-colors'); 16 | $('#sidebar .slimScrollDiv').css('overflow', 'initial'); 17 | $('#sidebar .menu-scroll').css('overflow', 'initial'); 18 | } 19 | }, function() { 20 | if($('#wrapper').hasClass('right-sidebar')) { 21 | $('body').removeClass('right-side-collapsed'); 22 | $('#sidebar .slimScrollDiv').css('overflow', 'hidden'); 23 | $('#sidebar .menu-scroll').css('overflow', 'hidden'); 24 | } else{ 25 | $('body').removeClass('left-side-collapsed') 26 | if(flag == true){ 27 | $('body').addClass('sidebar-colors'); 28 | } 29 | $('#sidebar .slimScrollDiv').css('overflow', 'hidden'); 30 | $('#sidebar .menu-scroll').css('overflow', 'hidden'); 31 | } 32 | } 33 | ); 34 | 35 | if($('#wrapper').hasClass('right-sidebar')) { 36 | $('ul#side-menu li').hover(function () { 37 | if ($('body').hasClass('right-side-collapsed')) { 38 | $(this).addClass('nav-hover'); 39 | } 40 | }, function () { 41 | if ($('body').hasClass('right-side-collapsed')) { 42 | $(this).removeClass('nav-hover'); 43 | } 44 | }); 45 | } else{ 46 | $('ul#side-menu li').hover(function () { 47 | if ($('body').hasClass('left-side-collapsed')) { 48 | $(this).addClass('nav-hover'); 49 | } 50 | }, function () { 51 | if ($('body').hasClass('left-side-collapsed')) { 52 | $(this).removeClass('nav-hover'); 53 | } 54 | }); 55 | } 56 | 57 | }); -------------------------------------------------------------------------------- /src/djangolvs/static/styles/line/aero.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Line skin, aero 2 | ----------------------------------- */ 3 | .icheckbox_line-aero, 4 | .iradio_line-aero { 5 | position: relative; 6 | display: block; 7 | margin: 0; 8 | padding: 5px 15px 5px 38px; 9 | font-size: 13px; 10 | line-height: 17px; 11 | color: #fff; 12 | background: #9cc2cb; 13 | border: none; 14 | -webkit-border-radius: 3px; 15 | -moz-border-radius: 3px; 16 | border-radius: 3px; 17 | cursor: pointer; 18 | } 19 | .icheckbox_line-aero .icheck_line-icon, 20 | .iradio_line-aero .icheck_line-icon { 21 | position: absolute; 22 | top: 50%; 23 | left: 13px; 24 | width: 13px; 25 | height: 11px; 26 | margin: -5px 0 0 0; 27 | padding: 0; 28 | overflow: hidden; 29 | background: url(line.png) no-repeat; 30 | border: none; 31 | } 32 | .icheckbox_line-aero.hover, 33 | .icheckbox_line-aero.checked.hover, 34 | .iradio_line-aero.hover { 35 | background: #B5D1D8; 36 | } 37 | .icheckbox_line-aero.checked, 38 | .iradio_line-aero.checked { 39 | background: #9cc2cb; 40 | } 41 | .icheckbox_line-aero.checked .icheck_line-icon, 42 | .iradio_line-aero.checked .icheck_line-icon { 43 | background-position: -15px 0; 44 | } 45 | .icheckbox_line-aero.disabled, 46 | .iradio_line-aero.disabled { 47 | background: #D2E4E8; 48 | cursor: default; 49 | } 50 | .icheckbox_line-aero.disabled .icheck_line-icon, 51 | .iradio_line-aero.disabled .icheck_line-icon { 52 | background-position: -30px 0; 53 | } 54 | .icheckbox_line-aero.checked.disabled, 55 | .iradio_line-aero.checked.disabled { 56 | background: #D2E4E8; 57 | } 58 | .icheckbox_line-aero.checked.disabled .icheck_line-icon, 59 | .iradio_line-aero.checked.disabled .icheck_line-icon { 60 | background-position: -45px 0; 61 | } 62 | 63 | /* HiDPI support */ 64 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 65 | .icheckbox_line-aero .icheck_line-icon, 66 | .iradio_line-aero .icheck_line-icon { 67 | background-image: url(line@2x.png); 68 | -webkit-background-size: 60px 13px; 69 | background-size: 60px 13px; 70 | } 71 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/line/blue.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Line skin, blue 2 | ----------------------------------- */ 3 | .icheckbox_line-blue, 4 | .iradio_line-blue { 5 | position: relative; 6 | display: block; 7 | margin: 0; 8 | padding: 5px 15px 5px 38px; 9 | font-size: 13px; 10 | line-height: 17px; 11 | color: #fff; 12 | background: #2489c5; 13 | border: none; 14 | -webkit-border-radius: 3px; 15 | -moz-border-radius: 3px; 16 | border-radius: 3px; 17 | cursor: pointer; 18 | } 19 | .icheckbox_line-blue .icheck_line-icon, 20 | .iradio_line-blue .icheck_line-icon { 21 | position: absolute; 22 | top: 50%; 23 | left: 13px; 24 | width: 13px; 25 | height: 11px; 26 | margin: -5px 0 0 0; 27 | padding: 0; 28 | overflow: hidden; 29 | background: url(line.png) no-repeat; 30 | border: none; 31 | } 32 | .icheckbox_line-blue.hover, 33 | .icheckbox_line-blue.checked.hover, 34 | .iradio_line-blue.hover { 35 | background: #3DA0DB; 36 | } 37 | .icheckbox_line-blue.checked, 38 | .iradio_line-blue.checked { 39 | background: #2489c5; 40 | } 41 | .icheckbox_line-blue.checked .icheck_line-icon, 42 | .iradio_line-blue.checked .icheck_line-icon { 43 | background-position: -15px 0; 44 | } 45 | .icheckbox_line-blue.disabled, 46 | .iradio_line-blue.disabled { 47 | background: #ADD7F0; 48 | cursor: default; 49 | } 50 | .icheckbox_line-blue.disabled .icheck_line-icon, 51 | .iradio_line-blue.disabled .icheck_line-icon { 52 | background-position: -30px 0; 53 | } 54 | .icheckbox_line-blue.checked.disabled, 55 | .iradio_line-blue.checked.disabled { 56 | background: #ADD7F0; 57 | } 58 | .icheckbox_line-blue.checked.disabled .icheck_line-icon, 59 | .iradio_line-blue.checked.disabled .icheck_line-icon { 60 | background-position: -45px 0; 61 | } 62 | 63 | /* HiDPI support */ 64 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 65 | .icheckbox_line-blue .icheck_line-icon, 66 | .iradio_line-blue .icheck_line-icon { 67 | background-image: url(line@2x.png); 68 | -webkit-background-size: 60px 13px; 69 | background-size: 60px 13px; 70 | } 71 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/line/grey.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Line skin, grey 2 | ----------------------------------- */ 3 | .icheckbox_line-grey, 4 | .iradio_line-grey { 5 | position: relative; 6 | display: block; 7 | margin: 0; 8 | padding: 5px 15px 5px 38px; 9 | font-size: 13px; 10 | line-height: 17px; 11 | color: #fff; 12 | background: #73716e; 13 | border: none; 14 | -webkit-border-radius: 3px; 15 | -moz-border-radius: 3px; 16 | border-radius: 3px; 17 | cursor: pointer; 18 | } 19 | .icheckbox_line-grey .icheck_line-icon, 20 | .iradio_line-grey .icheck_line-icon { 21 | position: absolute; 22 | top: 50%; 23 | left: 13px; 24 | width: 13px; 25 | height: 11px; 26 | margin: -5px 0 0 0; 27 | padding: 0; 28 | overflow: hidden; 29 | background: url(line.png) no-repeat; 30 | border: none; 31 | } 32 | .icheckbox_line-grey.hover, 33 | .icheckbox_line-grey.checked.hover, 34 | .iradio_line-grey.hover { 35 | background: #8B8986; 36 | } 37 | .icheckbox_line-grey.checked, 38 | .iradio_line-grey.checked { 39 | background: #73716e; 40 | } 41 | .icheckbox_line-grey.checked .icheck_line-icon, 42 | .iradio_line-grey.checked .icheck_line-icon { 43 | background-position: -15px 0; 44 | } 45 | .icheckbox_line-grey.disabled, 46 | .iradio_line-grey.disabled { 47 | background: #D5D4D3; 48 | cursor: default; 49 | } 50 | .icheckbox_line-grey.disabled .icheck_line-icon, 51 | .iradio_line-grey.disabled .icheck_line-icon { 52 | background-position: -30px 0; 53 | } 54 | .icheckbox_line-grey.checked.disabled, 55 | .iradio_line-grey.checked.disabled { 56 | background: #D5D4D3; 57 | } 58 | .icheckbox_line-grey.checked.disabled .icheck_line-icon, 59 | .iradio_line-grey.checked.disabled .icheck_line-icon { 60 | background-position: -45px 0; 61 | } 62 | 63 | /* HiDPI support */ 64 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 65 | .icheckbox_line-grey .icheck_line-icon, 66 | .iradio_line-grey .icheck_line-icon { 67 | background-image: url(line@2x.png); 68 | -webkit-background-size: 60px 13px; 69 | background-size: 60px 13px; 70 | } 71 | } -------------------------------------------------------------------------------- /src/djangolvs/static/styles/line/pink.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Line skin, pink 2 | ----------------------------------- */ 3 | .icheckbox_line-pink, 4 | .iradio_line-pink { 5 | position: relative; 6 | display: block; 7 | margin: 0; 8 | padding: 5px 15px 5px 38px; 9 | font-size: 13px; 10 | line-height: 17px; 11 | color: #fff; 12 | background: #a77a94; 13 | border: none; 14 | -webkit-border-radius: 3px; 15 | -moz-border-radius: 3px; 16 | border-radius: 3px; 17 | cursor: pointer; 18 | } 19 | .icheckbox_line-pink .icheck_line-icon, 20 | .iradio_line-pink .icheck_line-icon { 21 | position: absolute; 22 | top: 50%; 23 | left: 13px; 24 | width: 13px; 25 | height: 11px; 26 | margin: -5px 0 0 0; 27 | padding: 0; 28 | overflow: hidden; 29 | background: url(line.png) no-repeat; 30 | border: none; 31 | } 32 | .icheckbox_line-pink.hover, 33 | .icheckbox_line-pink.checked.hover, 34 | .iradio_line-pink.hover { 35 | background: #B995A9; 36 | } 37 | .icheckbox_line-pink.checked, 38 | .iradio_line-pink.checked { 39 | background: #a77a94; 40 | } 41 | .icheckbox_line-pink.checked .icheck_line-icon, 42 | .iradio_line-pink.checked .icheck_line-icon { 43 | background-position: -15px 0; 44 | } 45 | .icheckbox_line-pink.disabled, 46 | .iradio_line-pink.disabled { 47 | background: #E0D0DA; 48 | cursor: default; 49 | } 50 | .icheckbox_line-pink.disabled .icheck_line-icon, 51 | .iradio_line-pink.disabled .icheck_line-icon { 52 | background-position: -30px 0; 53 | } 54 | .icheckbox_line-pink.checked.disabled, 55 | .iradio_line-pink.checked.disabled { 56 | background: #E0D0DA; 57 | } 58 | .icheckbox_line-pink.checked.disabled .icheck_line-icon, 59 | .iradio_line-pink.checked.disabled .icheck_line-icon { 60 | background-position: -45px 0; 61 | } 62 | 63 | /* HiDPI support */ 64 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 65 | .icheckbox_line-pink .icheck_line-icon, 66 | .iradio_line-pink .icheck_line-icon { 67 | background-image: url(line@2x.png); 68 | -webkit-background-size: 60px 13px; 69 | background-size: 60px 13px; 70 | } 71 | } -------------------------------------------------------------------------------- /src/djangolvs/static/script/html5shiv.js: -------------------------------------------------------------------------------- 1 | /* 2 | HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | (function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); 5 | a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; 6 | c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| 7 | "undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f); 8 | if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d 3 | 4 | {{val.port}} {{val.mode}} {{val.scheduler}} {{val.persistent}} {{val.persistent_timeout}} {{val.flags}} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | {% for rse in val.realserv|dictsort:"ip"%} 16 | 17 | 18 | {{rse.ip}}:{{rse.port}} 19 | {{rse.forward_mode}} 20 | {{rse.weight}} 21 | 22 | 23 | 24 | 27 | 28 | 29 | {% if rse.weight != 0 %} 30 | 31 | 34 | 35 | {% endif %} 36 | 37 | 40 | 41 | 42 | 43 | {% empty %} 44 | 45 | 46 | No servers 47 | 48 | 49 | {% endfor %} 50 | {% empty %} 51 | 52 | 53 | No servers 54 | 55 | 56 | {% endfor %} 57 | 58 | 59 | -------------------------------------------------------------------------------- /src/djangolvs/static/styles/zabuto_calendar.min.css: -------------------------------------------------------------------------------- 1 | div.zabuto_calendar{margin:0;padding:0}div.zabuto_calendar .table{width:100%;margin:0;padding:0}div.zabuto_calendar .table th,div.zabuto_calendar .table td{padding:4px 2px;text-align:center}div.zabuto_calendar .table tr th,div.zabuto_calendar .table tr td{background-color:#fff}div.zabuto_calendar .table tr.calendar-month-header th{background-color:#fafafa}div.zabuto_calendar .table tr.calendar-month-header th span{cursor:pointer;display:inline-block;padding-bottom:10px}div.zabuto_calendar .table tr.calendar-dow-header th{background-color:#f0f0f0}div.zabuto_calendar .table tr:last-child{border-bottom:1px solid #ddd}div.zabuto_calendar .table tr.calendar-month-header th{padding-top:12px;padding-bottom:4px}div.zabuto_calendar .table-bordered tr.calendar-month-header th{border-left:0;border-right:0}div.zabuto_calendar .table-bordered tr.calendar-month-header th:first-child{border-left:1px solid #ddd}div.zabuto_calendar div.calendar-month-navigation{cursor:pointer;margin:0;padding:0;padding-top:5px}div.zabuto_calendar tr.calendar-dow-header th,div.zabuto_calendar tr.calendar-dow td{width:14%}div.zabuto_calendar .table tr td div.day{margin:0;padding-top:7px;padding-bottom:7px}div.zabuto_calendar .table tr td.event div.day,div.zabuto_calendar ul.legend li.event{background-color:#fff0c3}div.zabuto_calendar .table tr td.dow-clickable,div.zabuto_calendar .table tr td.event-clickable{cursor:pointer}div.zabuto_calendar .badge-today,div.zabuto_calendar div.legend span.badge-today{background-color:#357ebd;color:#fff;text-shadow:none}div.zabuto_calendar .badge-event,div.zabuto_calendar div.legend span.badge-event{background-color:#ff9b08;color:#fff;text-shadow:none}div.zabuto_calendar .badge-event{font-size:.95em;padding-left:8px;padding-right:8px;padding-bottom:4px}div.zabuto_calendar div.legend{margin-top:5px;text-align:right}div.zabuto_calendar div.legend span{color:#999;font-size:10px;font-weight:normal}div.zabuto_calendar div.legend span.legend-text:after,div.zabuto_calendar div.legend span.legend-block:after,div.zabuto_calendar div.legend span.legend-list:after,div.zabuto_calendar div.legend span.legend-spacer:after{content:' '}div.zabuto_calendar div.legend span.legend-spacer{padding-left:25px}div.zabuto_calendar ul.legend>span{padding-left:2px}div.zabuto_calendar ul.legend{display:inline-block;list-style:none outside none;margin:0;padding:0}div.zabuto_calendar ul.legend li{display:inline-block;height:11px;width:11px;margin-left:5px}div.zabuto_calendar ul.legend div.zabuto_calendar ul.legend li:first-child{margin-left:7px}div.zabuto_calendar ul.legend li:last-child{margin-right:5px}div.zabuto_calendar div.legend span.badge{font-size:.9em;border-radius:5px 5px 5px 5px;padding-left:5px;padding-right:5px;padding-top:2px;padding-bottom:3px}@media(max-width:979px){div.zabuto_calendar .table th,div.zabuto_calendar .table td{padding:2px 1px}} -------------------------------------------------------------------------------- /src/ipvsadmin/ipvsadm.py: -------------------------------------------------------------------------------- 1 | from django.conf import settings 2 | import os 3 | from subprocess import call 4 | import subprocess 5 | 6 | __LVS_MODE = {'TCP':'-t', 'UDP':'-u', 'FWM':'-f'} 7 | __RS_MODE = {'MASQ':'-m', 'ROUTE':'-g',"TUNNEL":'-i'} 8 | 9 | def ipvadmin_exists(): 10 | return os.path.exists(settings.IPVSADMIN) 11 | 12 | def delete_virtual_server(mode, port): 13 | command = [settings.IPVSADMIN, ] 14 | command.append('-D') 15 | command.append(__LVS_MODE[mode]) 16 | command.append(port) 17 | return call(command, stderr=subprocess.STDOUT) 18 | 19 | 20 | def delete_real_server(mode, port, realserver): 21 | command = [settings.IPVSADMIN, ] 22 | command.append('-d') 23 | command.append(__LVS_MODE[mode]) 24 | command.append(port) 25 | command.append('-r') 26 | command.append(realserver) 27 | return call(command, stderr=subprocess.STDOUT) 28 | 29 | def weight_real_server(mode, port, realserver, weight, realsmode): 30 | command = [settings.IPVSADMIN, ] 31 | command.append('-e') 32 | command.append(__LVS_MODE[mode]) 33 | command.append(port) 34 | command.append('-r') 35 | command.append(realserver) 36 | command.append('-w') 37 | command.append(weight) 38 | command.append(__RS_MODE[realsmode]) 39 | return call(command, stderr=subprocess.STDOUT) 40 | 41 | def add_virtual_server(ip, port, fwmark, mode, peristtimeout, scheduler): 42 | command = [settings.IPVSADMIN, ] 43 | command.append('-A') 44 | command.append(__LVS_MODE[mode]) 45 | if 'TCP' == mode or 'UDP' == mode: 46 | command.append("%s:%s" % (ip, port)) 47 | elif 'FWM' == mode: 48 | command.append(fwmark) 49 | else: 50 | raise ValueError('No support %s' % fwmark) 51 | 52 | if peristtimeout: 53 | command.append('-p') 54 | command.append(peristtimeout) 55 | 56 | command.append('-s') 57 | command.append(scheduler) 58 | 59 | return call(command, stderr=subprocess.STDOUT) 60 | 61 | def add_real_server(ip, port, fwmark, mode, route_type, real_server, weight, uthreshold, lthreshold): 62 | command = [settings.IPVSADMIN, ] 63 | command.append('-a') 64 | command.append(__LVS_MODE[mode]) 65 | if 'TCP' == mode or 'UDP' == mode: 66 | command.append("%s:%s" % (ip, port)) 67 | elif 'FWM' == mode: 68 | command.append(fwmark) 69 | else: 70 | raise ValueError('No support %s' % fwmark) 71 | 72 | command.append('-r') 73 | command.append(real_server) 74 | command.append(__RS_MODE[route_type]) 75 | 76 | if weight: 77 | command.append('-w') 78 | command.append(weight) 79 | 80 | if uthreshold: 81 | command.append('-x') 82 | command.append(weight) 83 | 84 | if lthreshold: 85 | command.append('-y') 86 | command.append(weight) 87 | return call(command, stderr=subprocess.STDOUT) 88 | -------------------------------------------------------------------------------- /src/djangolvs/static/ipvsstat/script/angular-app.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | var ipvsstate_app = angular.module('ipvsstate', [,'ng.django.forms']).config([ 4 | '$httpProvider', 5 | '$interpolateProvider', 6 | function($httpProvider, $interpolateProvider) { 7 | $interpolateProvider.startSymbol('{$'); 8 | $interpolateProvider.endSymbol('$}'); 9 | $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 10 | } 11 | ]); 12 | 13 | 14 | ipvsstate_app.filter('bytes', [function () { 15 | return function(bytes, precision) { 16 | if (typeof bytes !== 'number') { 17 | bytes = parseFloat(bytes); 18 | } 19 | if (bytes === 0) { 20 | return '0 B'; 21 | } else if (isNaN(bytes) || !isFinite(bytes)) { 22 | return '-'; 23 | } 24 | var isNegative = bytes < 0; 25 | if (isNegative) { 26 | bytes = -bytes; 27 | } 28 | if (typeof precision !== 'number') { 29 | precision = parseFloat(precision); 30 | } 31 | if (isNaN(precision) || !isFinite(precision)) { 32 | precision = 1; 33 | } 34 | var units = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; 35 | var exponent = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1); 36 | var number = (bytes / Math.pow(1024, Math.floor(exponent))).toFixed(precision); 37 | return (isNegative ? '-' : '') + number + ' ' + units[exponent]; 38 | }; 39 | }]); 40 | 41 | ipvsstate_app.factory('dataFactory',['$http',function($http){ 42 | var dataFactory = {}; 43 | 44 | dataFactory.getNics = function () { 45 | return $http.get('/ipvsstat/ajax/nicdashboard'); 46 | }; 47 | 48 | dataFactory.getSystem = function () { 49 | return $http.get('/ipvsstat/ajax/dashboard'); 50 | }; 51 | 52 | dataFactory.getIpvsadm = function () { 53 | return $http.get('/ipvsstat/ajax/ipvsadm'); 54 | }; 55 | 56 | return dataFactory; 57 | }]); 58 | 59 | ipvsstate_app.controller('nicTableCtrl',['$scope','$timeout','dataFactory',function($scope,$timeout,dataFactory) { 60 | $scope.nics; 61 | 62 | function getNics(){ 63 | dataFactory.getNics().success(function(data){ 64 | $scope.nics = data; 65 | }).error(function (error) { 66 | ; 67 | }); 68 | $timeout(getNics, 5000); 69 | } 70 | getNics(); 71 | }]); 72 | 73 | ipvsstate_app.controller('sysinfoCtrl',['$scope','$timeout','dataFactory',function($scope,$timeout,dataFactory) { 74 | $scope.sysinfo = []; 75 | 76 | var success = function(data){ 77 | $scope.sysinfo = data; 78 | }; 79 | 80 | function getSysinfo(){ 81 | dataFactory.getSystem().success(success); 82 | $timeout( getSysinfo, 5000); 83 | } 84 | 85 | getSysinfo(); 86 | }]); 87 | 88 | ipvsstate_app.controller('ipvsadminCtrl',['$scope','$timeout','dataFactory',function($scope,$timeout,dataFactory) { 89 | $scope.ipvsadmin = []; 90 | 91 | var success = function(data){ 92 | $scope.ipvsadmin = data; 93 | }; 94 | 95 | function getSysinfo(){ 96 | dataFactory.getIpvsadm().success(success); 97 | $timeout( getSysinfo, 5000); 98 | } 99 | 100 | getSysinfo(); 101 | }]); 102 | 103 | -------------------------------------------------------------------------------- /src/djangolvs/static/script/jquery.flot.resize.js: -------------------------------------------------------------------------------- 1 | /* Flot plugin for automatically redrawing plots as the placeholder resizes. 2 | 3 | Copyright (c) 2007-2013 IOLA and Ole Laursen. 4 | Licensed under the MIT license. 5 | 6 | It works by listening for changes on the placeholder div (through the jQuery 7 | resize event plugin) - if the size changes, it will redraw the plot. 8 | 9 | There are no options. If you need to disable the plugin for some plots, you 10 | can just fix the size of their placeholders. 11 | 12 | Modified by Avi Kohn 13 | 14 | */ 15 | 16 | /* Inline dependency: 17 | * jQuery resize event - v1.1 - 3/14/2010 18 | * http://benalman.com/projects/jquery-resize-plugin/ 19 | * 20 | * Copyright (c) 2010 "Cowboy" Ben Alman 21 | * Dual licensed under the MIT and GPL licenses. 22 | * http://benalman.com/about/license/ 23 | */ 24 | 25 | (function($,t,n){function p(){for(var n=r.length-1;n>=0;n--){var o=$(r[n]);if(o[0]==t||o.is(":visible")){var h=o.width(),d=o.height(),v=o.data(a);!v||h===v.w&&d===v.h?i[f]=i[l]:(i[f]=i[c],o.trigger(u,[v.w=h,v.h=d]))}else v=o.data(a),v.w=0,v.h=0}s!==null&&(s=t.requestAnimationFrame(p))}var r=[],i=$.resize=$.extend($.resize,{}),s,o="setTimeout",u="resize",a=u+"-special-event",f="delay",l="pendingDelay",c="activeDelay",h="throttleWindow";i[l]=250,i[c]=20,i[f]=i[l],i[h]=!0,$.event.special[u]={setup:function(){if(!i[h]&&this[o])return!1;var t=$(this);r.push(this),t.data(a,{w:t.width(),h:t.height()}),r.length===1&&(s=n,p())},teardown:function(){if(!i[h]&&this[o])return!1;var t=$(this);for(var n=r.length-1;n>=0;n--)if(r[n]==this){r.splice(n,1);break}t.removeData(a),r.length||(cancelAnimationFrame(s),s=null)},add:function(t){function s(t,i,s){var o=$(this),u=o.data(a);u.w=i!==n?i:o.width(),u.h=s!==n?s:o.height(),r.apply(this,arguments)}if(!i[h]&&this[o])return!1;var r;if($.isFunction(t))return r=t,s;r=t.handler,t.handler=s}},t.requestAnimationFrame||(t.requestAnimationFrame=function(){return t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||t.msRequestAnimationFrame||function(e,n){return t.setTimeout(e,i[f])}}()),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(){return t.webkitCancelRequestAnimationFrame||t.mozCancelRequestAnimationFrame||t.oCancelRequestAnimationFrame||t.msCancelRequestAnimationFrame||clearTimeout}())})(jQuery,this); 26 | 27 | (function ($) { 28 | var options = { }; // no options 29 | 30 | function init(plot) { 31 | function onResize() { 32 | var placeholder = plot.getPlaceholder(); 33 | 34 | if (placeholder.width() == 0 || placeholder.height() == 0) 35 | return; 36 | 37 | placeholder.trigger("resizestart"); 38 | 39 | plot.resize(); 40 | plot.setupGrid(); 41 | plot.draw(); 42 | 43 | placeholder.trigger("resizeend"); 44 | } 45 | 46 | function bindEvents(plot, eventHolder) { 47 | plot.getPlaceholder().resize(onResize); 48 | } 49 | 50 | function shutdown(plot, eventHolder) { 51 | plot.getPlaceholder().unbind("resize", onResize); 52 | } 53 | 54 | plot.hooks.bindEvents.push(bindEvents); 55 | plot.hooks.shutdown.push(shutdown); 56 | } 57 | 58 | $.plot.plugins.push({ 59 | init: init, 60 | options: options, 61 | name: 'resize', 62 | version: '1.0' 63 | }); 64 | })(jQuery); 65 | -------------------------------------------------------------------------------- /src/djangolvs/static/script/bootstrap-hover-dropdown.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Project: Twitter Bootstrap Hover Dropdown 3 | * Author: Cameron Spear 4 | * Contributors: Mattia Larentis 5 | * 6 | * Dependencies: Bootstrap's Dropdown plugin, jQuery 7 | * 8 | * A simple plugin to enable Bootstrap dropdowns to active on hover and provide a nice user experience. 9 | * 10 | * License: MIT 11 | * 12 | * http://cameronspear.com/blog/twitter-bootstrap-dropdown-on-hover-plugin/ 13 | */ 14 | ;(function($, window, undefined) { 15 | // outside the scope of the jQuery plugin to 16 | // keep track of all dropdowns 17 | var $allDropdowns = $(); 18 | 19 | // if instantlyCloseOthers is true, then it will instantly 20 | // shut other nav items when a new one is hovered over 21 | $.fn.dropdownHover = function(options) { 22 | 23 | // the element we really care about 24 | // is the dropdown-toggle's parent 25 | $allDropdowns = $allDropdowns.add(this.parent()); 26 | 27 | return this.each(function() { 28 | var $this = $(this), 29 | $parent = $this.parent(), 30 | defaults = { 31 | delay: 500, 32 | instantlyCloseOthers: true 33 | }, 34 | data = { 35 | delay: $(this).data('delay'), 36 | instantlyCloseOthers: $(this).data('close-others') 37 | }, 38 | settings = $.extend(true, {}, defaults, options, data), 39 | timeout; 40 | 41 | $parent.hover(function(event) { 42 | // so a neighbor can't open the dropdown 43 | if(!$parent.hasClass('open') && !$this.is(event.target)) { 44 | return true; 45 | } 46 | 47 | if(settings.instantlyCloseOthers === true) 48 | $allDropdowns.removeClass('open'); 49 | 50 | window.clearTimeout(timeout); 51 | $parent.addClass('open'); 52 | }, function() { 53 | timeout = window.setTimeout(function() { 54 | $parent.removeClass('open'); 55 | }, settings.delay); 56 | }); 57 | 58 | // this helps with button groups! 59 | $this.hover(function() { 60 | if(settings.instantlyCloseOthers === true) 61 | $allDropdowns.removeClass('open'); 62 | 63 | window.clearTimeout(timeout); 64 | $parent.addClass('open'); 65 | }); 66 | 67 | // handle submenus 68 | $parent.find('.dropdown-submenu').each(function(){ 69 | var $this = $(this); 70 | var subTimeout; 71 | $this.hover(function() { 72 | window.clearTimeout(subTimeout); 73 | $this.children('.dropdown-menu').show(); 74 | // always close submenu siblings instantly 75 | $this.siblings().children('.dropdown-menu').hide(); 76 | }, function() { 77 | var $submenu = $this.children('.dropdown-menu'); 78 | subTimeout = window.setTimeout(function() { 79 | $submenu.hide(); 80 | }, settings.delay); 81 | }); 82 | }); 83 | }); 84 | }; 85 | 86 | $(document).ready(function() { 87 | // apply dropdownHover to all elements with the data-hover="dropdown" attribute 88 | $('[data-hover="dropdown"]').dropdownHover(); 89 | }); 90 | })(jQuery, this); 91 | -------------------------------------------------------------------------------- /src/djangolvs/static/script/jquery.cookie.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery Cookie Plugin v1.4.0 3 | * https://github.com/carhartl/jquery-cookie 4 | * 5 | * Copyright 2013 Klaus Hartl 6 | * Released under the MIT license 7 | */ 8 | (function (factory) { 9 | if (typeof define === 'function' && define.amd) { 10 | // AMD. Register as anonymous module. 11 | define(['jquery'], factory); 12 | } else { 13 | // Browser globals. 14 | factory(jQuery); 15 | } 16 | }(function ($) { 17 | 18 | var pluses = /\+/g; 19 | 20 | function encode(s) { 21 | return config.raw ? s : encodeURIComponent(s); 22 | } 23 | 24 | function decode(s) { 25 | return config.raw ? s : decodeURIComponent(s); 26 | } 27 | 28 | function stringifyCookieValue(value) { 29 | return encode(config.json ? JSON.stringify(value) : String(value)); 30 | } 31 | 32 | function parseCookieValue(s) { 33 | if (s.indexOf('"') === 0) { 34 | // This is a quoted cookie as according to RFC2068, unescape... 35 | s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); 36 | } 37 | 38 | try { 39 | // Replace server-side written pluses with spaces. 40 | // If we can't decode the cookie, ignore it, it's unusable. 41 | // If we can't parse the cookie, ignore it, it's unusable. 42 | s = decodeURIComponent(s.replace(pluses, ' ')); 43 | return config.json ? JSON.parse(s) : s; 44 | } catch(e) {} 45 | } 46 | 47 | function read(s, converter) { 48 | var value = config.raw ? s : parseCookieValue(s); 49 | return $.isFunction(converter) ? converter(value) : value; 50 | } 51 | 52 | var config = $.cookie = function (key, value, options) { 53 | 54 | // Write 55 | 56 | if (value !== undefined && !$.isFunction(value)) { 57 | options = $.extend({}, config.defaults, options); 58 | 59 | if (typeof options.expires === 'number') { 60 | var days = options.expires, t = options.expires = new Date(); 61 | t.setTime(+t + days * 864e+5); 62 | } 63 | 64 | return (document.cookie = [ 65 | encode(key), '=', stringifyCookieValue(value), 66 | options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE 67 | options.path ? '; path=' + options.path : '', 68 | options.domain ? '; domain=' + options.domain : '', 69 | options.secure ? '; secure' : '' 70 | ].join('')); 71 | } 72 | 73 | // Read 74 | 75 | var result = key ? undefined : {}; 76 | 77 | // To prevent the for loop in the first place assign an empty array 78 | // in case there are no cookies at all. Also prevents odd result when 79 | // calling $.cookie(). 80 | var cookies = document.cookie ? document.cookie.split('; ') : []; 81 | 82 | for (var i = 0, l = cookies.length; i < l; i++) { 83 | var parts = cookies[i].split('='); 84 | var name = decode(parts.shift()); 85 | var cookie = parts.join('='); 86 | 87 | if (key && key === name) { 88 | // If second argument (value) is a function it's a converter... 89 | result = read(cookie, value); 90 | break; 91 | } 92 | 93 | // Prevent storing a cookie that we couldn't decode. 94 | if (!key && (cookie = read(cookie)) !== undefined) { 95 | result[name] = cookie; 96 | } 97 | } 98 | 99 | return result; 100 | }; 101 | 102 | config.defaults = {}; 103 | 104 | $.removeCookie = function (key, options) { 105 | if ($.cookie(key) === undefined) { 106 | return false; 107 | } 108 | 109 | // Must not alter options, thus extending a fresh object... 110 | $.cookie(key, '', $.extend({}, options, { expires: -1 })); 111 | return !$.cookie(key); 112 | }; 113 | 114 | })); 115 | -------------------------------------------------------------------------------- /src/djangolvs/static/script/respond.min.js: -------------------------------------------------------------------------------- 1 | /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ 2 | /*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */ 3 | window.matchMedia=window.matchMedia||function(a){"use strict";var c,d=a.documentElement,e=d.firstElementChild||d.firstChild,f=a.createElement("body"),g=a.createElement("div");return g.id="mq-test-1",g.style.cssText="position:absolute;top:-100em",f.style.background="none",f.appendChild(g),function(a){return g.innerHTML='­',d.insertBefore(f,e),c=42===g.offsetWidth,d.removeChild(f),{matches:c,media:a}}}(document); 4 | 5 | /*! Respond.js v1.3.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ 6 | (function(a){"use strict";function x(){u(!0)}var b={};if(a.respond=b,b.update=function(){},b.mediaQueriesSupported=a.matchMedia&&a.matchMedia("only all").matches,!b.mediaQueriesSupported){var q,r,t,c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=c.getElementsByTagName("base")[0],l=j.getElementsByTagName("link"),m=[],n=function(){for(var b=0;l.length>b;b++){var c=l[b],d=c.href,e=c.media,f=c.rel&&"stylesheet"===c.rel.toLowerCase();d&&f&&!h[d]&&(c.styleSheet&&c.styleSheet.rawCssText?(p(c.styleSheet.rawCssText,d,e),h[d]=!0):(!/^([a-zA-Z:]*\/\/)/.test(d)&&!k||d.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&m.push({href:d,media:e}))}o()},o=function(){if(m.length){var b=m.shift();v(b.href,function(c){p(c,b.href,b.media),h[b.href]=!0,a.setTimeout(function(){o()},0)})}},p=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),g=d&&d.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c;b.length&&(b+="/"),i&&(g=1);for(var j=0;g>j;j++){var k,l,m,n;i?(k=c,f.push(h(a))):(k=d[j].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),m=k.split(","),n=m.length;for(var o=0;n>o;o++)l=m[o],e.push({media:l.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:f.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},s=function(){var a,b=c.createElement("div"),e=c.body,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",e||(e=f=c.createElement("body"),e.style.background="none"),e.appendChild(b),d.insertBefore(e,d.firstChild),a=b.offsetWidth,f?d.removeChild(e):e.removeChild(b),a=t=parseFloat(a)},u=function(b){var h="clientWidth",k=d[h],m="CSS1Compat"===c.compatMode&&k||c.body[h]||k,n={},o=l[l.length-1],p=(new Date).getTime();if(b&&q&&i>p-q)return a.clearTimeout(r),r=a.setTimeout(u,i),void 0;q=p;for(var v in e)if(e.hasOwnProperty(v)){var w=e[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?t||s():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?t||s():1)),w.hasquery&&(z&&A||!(z||m>=x)||!(A||y>=m))||(n[w.media]||(n[w.media]=[]),n[w.media].push(f[w.rules]))}for(var C in g)g.hasOwnProperty(C)&&g[C]&&g[C].parentNode===j&&j.removeChild(g[C]);for(var D in n)if(n.hasOwnProperty(D)){var E=c.createElement("style"),F=n[D].join("\n");E.type="text/css",E.media=D,j.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(c.createTextNode(F)),g.push(E)}},v=function(a,b){var c=w();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},w=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}();n(),b.update=n,a.addEventListener?a.addEventListener("resize",x,!1):a.attachEvent&&a.attachEvent("onresize",x)}})(this); 7 | -------------------------------------------------------------------------------- /src/djangolvs/static/styles/jquery.news-ticker.css: -------------------------------------------------------------------------------- 1 | /* Ticker Styling */ 2 | .ticker-wrapper.has-js { 3 | margin: 0; 4 | padding: 0px 20px; 5 | width: 480px; 6 | height: 32px; 7 | display: block; 8 | -webkit-border-radius: 15px; 9 | -moz-border-radius: 15px; 10 | border-radius: 15px; 11 | background-color: #3a6f9f; 12 | font-size: 0.75em; 13 | } 14 | .ticker { 15 | width: 410px; 16 | height: 23px; 17 | display: block; 18 | position: relative; 19 | overflow: hidden; 20 | 21 | } 22 | .ticker-title { 23 | padding-top: 9px; 24 | color: #990000; 25 | font-weight: bold; 26 | background-color: #f8f0db; 27 | text-transform: uppercase; 28 | position: relative; 29 | z-index: 10; 30 | } 31 | .ticker-content { 32 | margin: 0px; 33 | padding-top: 9px; 34 | position: absolute; 35 | color: #FFFFFF; 36 | font-size:12px; 37 | font-family:'Open Sans'; 38 | background-color: #3a6f9f; 39 | overflow: hidden; 40 | white-space: nowrap; 41 | line-height: 1.2em; 42 | } 43 | .ticker-content:focus {; 44 | } 45 | .ticker-content a { 46 | text-decoration: none; 47 | color: #1F527B; 48 | } 49 | .ticker-content a:hover { 50 | text-decoration: underline; 51 | color: #0D3059; 52 | } 53 | .ticker-swipe { 54 | padding-top: 9px; 55 | position: absolute; 56 | top: 0px; 57 | display: block; 58 | width: 500px; 59 | height: 23px; 60 | } 61 | .ticker-swipe span { 62 | margin-left: 1px; 63 | 64 | border-bottom: 1px solid #3a6f9f; 65 | height: 12px; 66 | width: 7px; 67 | display: block; 68 | } 69 | .ticker-controls { 70 | padding: 8px 0px 0px 0px; 71 | list-style-type: none; 72 | float: left; 73 | } 74 | .ticker-controls li { 75 | padding: 0px; 76 | margin-left: 5px; 77 | float: left; 78 | cursor: pointer; 79 | height: 16px; 80 | width: 16px; 81 | display: block; 82 | } 83 | .ticker-controls li.jnt-play-pause { 84 | background-image: url('https://raw.github.com/IsraelWebDev/jQuery-News-Ticker/master/images/controls.png'); 85 | background-position: 32px 16px; 86 | } 87 | .ticker-controls li.jnt-play-pause.over { 88 | background-position: 32px 32px; 89 | } 90 | .ticker-controls li.jnt-play-pause.down { 91 | background-position: 32px 0px; 92 | } 93 | .ticker-controls li.jnt-play-pause.paused { 94 | background-image: url('https://raw.github.com/IsraelWebDev/jQuery-News-Ticker/master/images/controls.png'); 95 | background-position: 48px 16px; 96 | } 97 | .ticker-controls li.jnt-play-pause.paused.over { 98 | background-position: 48px 32px; 99 | } 100 | .ticker-controls li.jnt-play-pause.paused.down { 101 | background-position: 48px 0px; 102 | } 103 | .ticker-controls li.jnt-prev { 104 | background-image: url('https://raw.github.com/IsraelWebDev/jQuery-News-Ticker/master/images/controls.png'); 105 | background-position: 0px 16px; 106 | } 107 | .ticker-controls li.jnt-prev.over { 108 | background-position: 0px 32px; 109 | } 110 | .ticker-controls li.jnt-prev.down { 111 | background-position: 0px 0px; 112 | } 113 | .ticker-controls li.jnt-next { 114 | background-image: url('https://raw.github.com/IsraelWebDev/jQuery-News-Ticker/master/images/controls.png'); 115 | background-position: 16px 16px; 116 | } 117 | .ticker-controls li.jnt-next.over { 118 | background-position: 16px 32px; 119 | } 120 | .ticker-controls li.jnt-next.down { 121 | background-position: 16px 0px; 122 | } 123 | .js-hidden { 124 | display: none; 125 | } 126 | .no-js-news { 127 | padding: 10px 0px 0px 45px; 128 | color: #F8F0DB; 129 | } 130 | .left .ticker-swipe { 131 | /*left: 80px;*/ 132 | } 133 | .left .ticker-controls, .left .ticker-content, .left .ticker-title, .left .ticker { 134 | float: left; 135 | } 136 | .left .ticker-controls { 137 | padding-left: 6px; 138 | } 139 | .right .ticker-swipe { 140 | /*right: 80px;*/ 141 | } 142 | .right .ticker-controls, .right .ticker-content, .right .ticker-title, .right .ticker { 143 | float: right; 144 | } 145 | .right .ticker-controls { 146 | padding-right: 6px; 147 | } -------------------------------------------------------------------------------- /src/djangolvs/static/script/data.js: -------------------------------------------------------------------------------- 1 | /* 2 | Data plugin for Highcharts 3 | 4 | (c) 2012-2014 Torstein Honsi 5 | 6 | License: www.highcharts.com/license 7 | */ 8 | (function(j){var m=j.each,o=function(b,a){this.init(b,a)};j.extend(o.prototype,{init:function(b,a){this.options=b;this.chartOptions=a;this.columns=b.columns||this.rowsToColumns(b.rows)||[];this.columns.length?this.dataFound():(this.parseCSV(),this.parseTable(),this.parseGoogleSpreadsheet())},getColumnDistribution:function(){var b=this.chartOptions,a=b&&b.chart&&b.chart.type,c=[];m(b&&b.series||[],function(b){c.push((j.seriesTypes[b.type||a||"line"].prototype.pointArrayMap||[0]).length)});this.valueCount= 9 | {global:(j.seriesTypes[a||"line"].prototype.pointArrayMap||[0]).length,individual:c}},dataFound:function(){this.parseTypes();this.findHeaderRow();this.parsed();this.complete()},parseCSV:function(){var b=this,a=this.options,c=a.csv,d=this.columns,f=a.startRow||0,h=a.endRow||Number.MAX_VALUE,i=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g,k,j=0;c&&(k=c.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split(a.lineDelimiter||"\n"),g=a.itemDelimiter||(c.indexOf("\t")!==-1?"\t":","),m(k,function(a,c){var k= 10 | b.trim(a),n=k.indexOf("#")===0;c>=f&&c<=h&&!n&&k!==""&&(k=a.split(g),m(k,function(b,a){a>=i&&a<=e&&(d[a-i]||(d[a-i]=[]),d[a-i][j]=b)}),j+=1)}),this.dataFound())},parseTable:function(){var b=this.options,a=b.table,c=this.columns,d=b.startRow||0,f=b.endRow||Number.MAX_VALUE,h=b.startColumn||0,i=b.endColumn||Number.MAX_VALUE,e;a&&(typeof a==="string"&&(a=document.getElementById(a)),m(a.getElementsByTagName("tr"),function(a,b){e=0;b>=d&&b<=f&&m(a.childNodes,function(a){if((a.tagName==="TD"||a.tagName=== 11 | "TH")&&e>=h&&e<=i)c[e]||(c[e]=[]),c[e][b-d]=a.innerHTML,e+=1})}),this.dataFound())},parseGoogleSpreadsheet:function(){var b=this,a=this.options,c=a.googleSpreadsheetKey,d=this.columns,f=a.startRow||0,h=a.endRow||Number.MAX_VALUE,i=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g,k;c&&jQuery.getJSON("https://spreadsheets.google.com/feeds/cells/"+c+"/"+(a.googleSpreadsheetWorksheet||"od6")+"/public/values?alt=json-in-script&callback=?",function(a){var a=a.feed.entry,c,j=a.length,m=0,n=0,l;for(l=0;l< 12 | j;l++)c=a[l],m=Math.max(m,c.gs$cell.col),n=Math.max(n,c.gs$cell.row);for(l=0;l=i&&l<=e)d[l-i]=[],d[l-i].length=Math.min(n,h-f);for(l=0;l=i&&k<=e&&g>=f&&g<=h)d[k-i][g-f]=c.content.$t;b.dataFound()})},findHeaderRow:function(){m(this.columns,function(){});this.headerRow=0},trim:function(b){return typeof b==="string"?b.replace(/^\s+|\s+$/g,""):b},parseTypes:function(){for(var b=this.columns,a=b.length,c,d,f,h;a--;)for(c=b[a].length;c--;)d= 13 | b[a][c],f=parseFloat(d),h=this.trim(d),h==f?(b[a][c]=f,f>31536E6?b[a].isDatetime=!0:b[a].isNumeric=!0):(d=this.parseDate(d),a===0&&typeof d==="number"&&!isNaN(d)?(b[a][c]=d,b[a].isDatetime=!0):b[a][c]=h===""?null:h)},dateFormats:{"YYYY-mm-dd":{regex:"^([0-9]{4})-([0-9]{2})-([0-9]{2})$",parser:function(b){return Date.UTC(+b[1],b[2]-1,+b[3])}}},parseDate:function(b){var a=this.options.parseDate,c,d,f;a&&(c=a(b));if(typeof b==="string")for(d in this.dateFormats)a=this.dateFormats[d],(f=b.match(a.regex))&& 14 | (c=a.parser(f));return c},rowsToColumns:function(b){var a,c,d,f,h;if(b){h=[];c=b.length;for(a=0;a1&&(a=b.shift(),this.headerRow===0&&a.shift(),a.isDatetime?c="datetime":a.isNumeric||(c="category"));for(e=0;e1&&i[g].push(b[e+1][g]!==void 0?b[e+1][g]:null),f>2&&i[g].push(b[e+2][g]!==void 0?b[e+2][g]:null),f>3&&i[g].push(b[e+3][g]!==void 0?b[e+3][g]:null),f>4&&i[g].push(b[e+4][g]!==void 0?b[e+4][g]:null);h[k]={name:b[e].name,data:i};e+=f}d.complete({xAxis:{type:c},series:h})}}});j.Data=o;j.data=function(b,a){return new o(b, 16 | a)};j.wrap(j.Chart.prototype,"init",function(b,a,c){var d=this;a&&a.data?j.data(j.extend(a.data,{complete:function(f){a.series&&m(a.series,function(b,c){a.series[c]=j.merge(b,f.series[c])});a=j.merge(f,a);b.call(d,a,c)}}),a):b.call(d,a,c)})})(Highcharts); 17 | -------------------------------------------------------------------------------- /src/ipvsstat/lvs/ipvs.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Created on 18 gru 2014 3 | 4 | @author: ghalajko 5 | ''' 6 | from django.conf import settings 7 | 8 | __lvs_version = None 9 | 10 | import string 11 | import os.path 12 | 13 | 14 | if not os.path.isfile(settings.IP_VS_FILE): 15 | raise RuntimeError("LVS is disabled. File \'"+os.path.abspath(settings.IP_VS_FILE)+"\' not found.") 16 | 17 | def isExist_virtual_server(port): 18 | for vsr in ip_vs_parse(): 19 | if port in vsr.port: 20 | return True 21 | return False 22 | 23 | def ip_vs_stat(): 24 | ipvs = [] 25 | with open(settings.IP_VS_STAT_FILE, 'rb') as f: 26 | for line in f: 27 | ipvs += [' '+line] 28 | return ipvs 29 | 30 | def ipvs(): 31 | retval = [] 32 | for vep in ip_vs_parse(): 33 | drels = [] 34 | for rels in vep.real_servers: 35 | drels.append({'ip':rels._ip, 36 | 'port':rels._port, 37 | 'forward_mode':rels._forward_mode, 38 | 'weight':rels._weight, 39 | 'active_conn':rels._active_conn, 40 | 'inact_conn':rels._inact_conn 41 | }) 42 | 43 | retval.append({'mode':vep.mode, 44 | 'port':vep.port, 45 | 'scheduler':vep.scheduler, 46 | 'persistent':vep.persistent, 47 | 'persistent_timeout':vep.persistent_timeout, 48 | 'flags':vep.flags, 49 | 'realserv':drels, 50 | }) 51 | return retval 52 | 53 | def ip_vs_parse(): 54 | global __lvs_version 55 | v_endpoints = [] 56 | with open(settings.IP_VS_FILE, 'rb') as f: 57 | if __lvs_version is None: 58 | __lvs_version = f.readline() 59 | else: 60 | next(f) 61 | 62 | # Skip 2 line heder 63 | next(f) 64 | next(f) 65 | 66 | current_v_edpoint = None 67 | 68 | for line in f: 69 | splited_line = line.split() 70 | if splited_line[0] == "->" and current_v_edpoint is not None: 71 | rs = RealServer(splited_line) 72 | current_v_edpoint.add_real_server(rs) 73 | else: 74 | current_v_edpoint = VirtualEndPoint(splited_line) 75 | v_endpoints.append(current_v_edpoint) 76 | 77 | return v_endpoints 78 | 79 | def _hexToInt(hexstr): 80 | return int(hexstr,16) 81 | 82 | def _parce_to_ip(hexip): 83 | ip_l = [] 84 | for x in range(0, 4): 85 | pozs = x*2 86 | poze = pozs+2 87 | ip_l += [str(_hexToInt(hexip[pozs:poze]))] 88 | return string.join(ip_l,'.') 89 | 90 | def _parce_to_port(hexip): 91 | splited_hexip = hexip.split(':') 92 | v = splited_hexip[1].lstrip('0') 93 | v = [v,'0'][len(v) <= 0] 94 | return str(_hexToInt(v)) 95 | 96 | class VirtualEndPoint(object): 97 | 98 | def __init__(self, args): 99 | self.mode = args[0] 100 | self.port = args[1] 101 | self.scheduler = args[2] 102 | if 3 < len(args): 103 | self.persistent = args[3] 104 | self.persistent_timeout = int(args[4])/1000 # msec to sec 105 | self.flags = args[5] 106 | else: 107 | self.persistent,self.persistent_timeout,self.flags = '','','' 108 | self.__real_servers = [] 109 | if 'TCP' == self.mode or 'UDP' == self.mode: 110 | self.port = _parce_to_ip(self.port)+':'+_parce_to_port(self.port) 111 | elif 'FWM' == self.mode: 112 | self.port = str(_hexToInt(self.port)) 113 | 114 | @property 115 | def real_servers(self): 116 | return self.__real_servers 117 | 118 | def sort_real_servers(self): 119 | self.__real_servers = sorted(self.__real_servers) 120 | 121 | def add_real_server(self, real_server): 122 | self.__real_servers.append(real_server) 123 | 124 | def __repr__(self): 125 | return "(%s %s %s)" % (self.mode, self.port, ''.join(str(v) for v in self.__real_servers)) 126 | 127 | class RealServer(object): 128 | 129 | def __init__(self, args): 130 | self._ip = _parce_to_ip(args[1]) 131 | self._port = _parce_to_port(args[1]) 132 | self._forward_mode = args[2] 133 | self._weight = int(args[3]) 134 | self._active_conn = args[4] 135 | self._inact_conn = args[5] 136 | 137 | def __repr__(self): 138 | return "(%s a=%s ina=%s)" % (self._ip,self._active_conn,self._inact_conn) 139 | 140 | def __cmp__(self, other): 141 | if hasattr(other, '_ip'): 142 | return cmp(self._ip,other._ip) 143 | -------------------------------------------------------------------------------- /src/ipvsadmin/templates/ipvsadmin/panel-addvs.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
Add virtual server
5 |
6 |
7 | {% csrf_token %} 8 | 9 |
10 |
11 |
12 | {% for radio in vsform.type%} 13 | {{ radio.tag }} 14 | 17 | {% endfor %} 18 |
19 | {% include "ipvsadmin/error-div.html" with field=vsform.type only %} 20 |
21 |
22 |
23 | 39 | 48 |
49 |
50 |
51 | 52 | {{vsform.scheduler}} 53 | {% include "ipvsadmin/error-div.html" with field=vsform.scheduler only %} 54 |
55 |
56 |
57 |
58 |
59 |
60 | 61 | {{vsform.peristtimeout}} 62 | {% include "ipvsadmin/error-div.html" with field=vsform.peristtimeout only %} 63 |
64 |
65 |
66 |
67 |
68 | 69 |
70 | 72 |
73 |
74 |
75 |
76 |
77 |
-------------------------------------------------------------------------------- /src/djangolvs/static/script/icheck.min.js: -------------------------------------------------------------------------------- 1 | /*! iCheck v1.0.2 by Damir Sultanov, http://git.io/arlzeA, MIT Licensed */ 2 | (function(f){function A(a,b,d){var c=a[0],g=/er/.test(d)?_indeterminate:/bl/.test(d)?n:k,e=d==_update?{checked:c[k],disabled:c[n],indeterminate:"true"==a.attr(_indeterminate)||"false"==a.attr(_determinate)}:c[g];if(/^(ch|di|in)/.test(d)&&!e)x(a,g);else if(/^(un|en|de)/.test(d)&&e)q(a,g);else if(d==_update)for(var f in e)e[f]?x(a,f,!0):q(a,f,!0);else if(!b||"toggle"==d){if(!b)a[_callback]("ifClicked");e?c[_type]!==r&&q(a,g):x(a,g)}}function x(a,b,d){var c=a[0],g=a.parent(),e=b==k,u=b==_indeterminate, 3 | v=b==n,s=u?_determinate:e?y:"enabled",F=l(a,s+t(c[_type])),B=l(a,b+t(c[_type]));if(!0!==c[b]){if(!d&&b==k&&c[_type]==r&&c.name){var w=a.closest("form"),p='input[name="'+c.name+'"]',p=w.length?w.find(p):f(p);p.each(function(){this!==c&&f(this).data(m)&&q(f(this),b)})}u?(c[b]=!0,c[k]&&q(a,k,"force")):(d||(c[b]=!0),e&&c[_indeterminate]&&q(a,_indeterminate,!1));D(a,e,b,d)}c[n]&&l(a,_cursor,!0)&&g.find("."+C).css(_cursor,"default");g[_add](B||l(a,b)||"");g.attr("role")&&!u&&g.attr("aria-"+(v?n:k),"true"); 4 | g[_remove](F||l(a,s)||"")}function q(a,b,d){var c=a[0],g=a.parent(),e=b==k,f=b==_indeterminate,m=b==n,s=f?_determinate:e?y:"enabled",q=l(a,s+t(c[_type])),r=l(a,b+t(c[_type]));if(!1!==c[b]){if(f||!d||"force"==d)c[b]=!1;D(a,e,s,d)}!c[n]&&l(a,_cursor,!0)&&g.find("."+C).css(_cursor,"pointer");g[_remove](r||l(a,b)||"");g.attr("role")&&!f&&g.attr("aria-"+(m?n:k),"false");g[_add](q||l(a,s)||"")}function E(a,b){if(a.data(m)){a.parent().html(a.attr("style",a.data(m).s||""));if(b)a[_callback](b);a.off(".i").unwrap(); 5 | f(_label+'[for="'+a[0].id+'"]').add(a.closest(_label)).off(".i")}}function l(a,b,f){if(a.data(m))return a.data(m).o[b+(f?"":"Class")]}function t(a){return a.charAt(0).toUpperCase()+a.slice(1)}function D(a,b,f,c){if(!c){if(b)a[_callback]("ifToggled");a[_callback]("ifChanged")[_callback]("if"+t(f))}}var m="iCheck",C=m+"-helper",r="radio",k="checked",y="un"+k,n="disabled";_determinate="determinate";_indeterminate="in"+_determinate;_update="update";_type="type";_click="click";_touch="touchbegin.i touchend.i"; 6 | _add="addClass";_remove="removeClass";_callback="trigger";_label="label";_cursor="cursor";_mobile=/ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i.test(navigator.userAgent);f.fn[m]=function(a,b){var d='input[type="checkbox"], input[type="'+r+'"]',c=f(),g=function(a){a.each(function(){var a=f(this);c=a.is(d)?c.add(a):c.add(a.find(d))})};if(/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(a))return a=a.toLowerCase(),g(this),c.each(function(){var c= 7 | f(this);"destroy"==a?E(c,"ifDestroyed"):A(c,!0,a);f.isFunction(b)&&b()});if("object"!=typeof a&&a)return this;var e=f.extend({checkedClass:k,disabledClass:n,indeterminateClass:_indeterminate,labelHover:!0},a),l=e.handle,v=e.hoverClass||"hover",s=e.focusClass||"focus",t=e.activeClass||"active",B=!!e.labelHover,w=e.labelHoverClass||"hover",p=(""+e.increaseArea).replace("%","")|0;if("checkbox"==l||l==r)d='input[type="'+l+'"]';-50>p&&(p=-50);g(this);return c.each(function(){var a=f(this);E(a);var c=this, 8 | b=c.id,g=-p+"%",d=100+2*p+"%",d={position:"absolute",top:g,left:g,display:"block",width:d,height:d,margin:0,padding:0,background:"#fff",border:0,opacity:0},g=_mobile?{position:"absolute",visibility:"hidden"}:p?d:{position:"absolute",opacity:0},l="checkbox"==c[_type]?e.checkboxClass||"icheckbox":e.radioClass||"i"+r,z=f(_label+'[for="'+b+'"]').add(a.closest(_label)),u=!!e.aria,y=m+"-"+Math.random().toString(36).substr(2,6),h='
")[_callback]("ifCreated").parent().append(e.insert);d=f('').css(d).appendTo(h);a.data(m,{o:e,s:a.attr("style")}).css(g);e.inheritClass&&h[_add](c.className||"");e.inheritID&&b&&h.attr("id",m+"-"+b);"static"==h.css("position")&&h.css("position","relative");A(a,!0,_update);if(z.length)z.on(_click+".i mouseover.i mouseout.i "+_touch,function(b){var d=b[_type],e=f(this);if(!c[n]){if(d==_click){if(f(b.target).is("a"))return; 10 | A(a,!1,!0)}else B&&(/ut|nd/.test(d)?(h[_remove](v),e[_remove](w)):(h[_add](v),e[_add](w)));if(_mobile)b.stopPropagation();else return!1}});a.on(_click+".i focus.i blur.i keyup.i keydown.i keypress.i",function(b){var d=b[_type];b=b.keyCode;if(d==_click)return!1;if("keydown"==d&&32==b)return c[_type]==r&&c[k]||(c[k]?q(a,k):x(a,k)),!1;if("keyup"==d&&c[_type]==r)!c[k]&&x(a,k);else if(/us|ur/.test(d))h["blur"==d?_remove:_add](s)});d.on(_click+" mousedown mouseup mouseover mouseout "+_touch,function(b){var d= 11 | b[_type],e=/wn|up/.test(d)?t:v;if(!c[n]){if(d==_click)A(a,!1,!0);else{if(/wn|er|in/.test(d))h[_add](e);else h[_remove](e+" "+t);if(z.length&&B&&e==v)z[/ut|nd/.test(d)?_remove:_add](w)}if(_mobile)b.stopPropagation();else return!1}})})}})(window.jQuery||window.Zepto); 12 | -------------------------------------------------------------------------------- /src/djangolvs/static/script/charts-chartjs.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | 3 | //BEGIN LINE CHART 4 | var lineChartData = { 5 | labels : ["January","February","March","April","May","June","July"], 6 | datasets : [ 7 | { 8 | fillColor : "rgba(220,220,220,0.5)", 9 | strokeColor : "rgba(220,220,220,1)", 10 | pointColor : "rgba(220,220,220,1)", 11 | pointStrokeColor : "#fff", 12 | data : [65,59,90,81,56,55,40] 13 | }, 14 | { 15 | fillColor : "rgba(151,187,205,0.5)", 16 | strokeColor : "rgba(151,187,205,1)", 17 | pointColor : "rgba(151,187,205,1)", 18 | pointStrokeColor : "#fff", 19 | data : [28,48,40,19,96,27,100] 20 | } 21 | ] 22 | 23 | } 24 | 25 | var myLine = new Chart(document.getElementById("line-chart").getContext("2d")).Line(lineChartData); 26 | //END LINE CHART 27 | 28 | //BEGIN BAR CHART 29 | var barChartData = { 30 | labels : ["January","February","March","April","May","June","July"], 31 | datasets : [ 32 | { 33 | fillColor : "rgba(220,220,220,0.5)", 34 | strokeColor : "rgba(220,220,220,1)", 35 | data : [65,59,90,81,56,55,40] 36 | }, 37 | { 38 | fillColor : "rgba(151,187,205,0.5)", 39 | strokeColor : "rgba(151,187,205,1)", 40 | data : [28,48,40,19,96,27,100] 41 | } 42 | ] 43 | 44 | } 45 | 46 | var myLine = new Chart(document.getElementById("bar-chart").getContext("2d")).Bar(barChartData); 47 | //END BAR CHART 48 | 49 | //BEGIN RADAR CHART 50 | var radarChartData = { 51 | labels : ["Eating","Drinking","Sleeping","Designing","Coding","Partying","Running"], 52 | datasets : [ 53 | { 54 | fillColor : "rgba(220,220,220,0.5)", 55 | strokeColor : "rgba(220,220,220,1)", 56 | pointColor : "rgba(220,220,220,1)", 57 | pointStrokeColor : "#fff", 58 | data : [65,59,90,81,56,55,40] 59 | }, 60 | { 61 | fillColor : "rgba(151,187,205,0.5)", 62 | strokeColor : "rgba(151,187,205,1)", 63 | pointColor : "rgba(151,187,205,1)", 64 | pointStrokeColor : "#fff", 65 | data : [28,48,40,19,96,27,100] 66 | } 67 | ] 68 | 69 | } 70 | 71 | var myRadar = new Chart(document.getElementById("radar-chart").getContext("2d")).Radar(radarChartData,{scaleShowLabels : false, pointLabelFontSize : 10}); 72 | //END RADAR CHART 73 | 74 | //BEGIN POLAR AREA CHART 75 | var chartData = [ 76 | { 77 | value : Math.random(), 78 | color: "#D97041" 79 | }, 80 | { 81 | value : Math.random(), 82 | color: "#C7604C" 83 | }, 84 | { 85 | value : Math.random(), 86 | color: "#21323D" 87 | }, 88 | { 89 | value : Math.random(), 90 | color: "#9D9B7F" 91 | }, 92 | { 93 | value : Math.random(), 94 | color: "#7D4F6D" 95 | }, 96 | { 97 | value : Math.random(), 98 | color: "#584A5E" 99 | } 100 | ]; 101 | var myPolarArea = new Chart(document.getElementById("polar-area-chart").getContext("2d")).PolarArea(chartData); 102 | //END POLAR AREA CHART 103 | 104 | //BEGIN PIE CHART 105 | var pieData = [ 106 | { 107 | value: 30, 108 | color:"#F38630" 109 | }, 110 | { 111 | value : 50, 112 | color : "#E0E4CC" 113 | }, 114 | { 115 | value : 100, 116 | color : "#69D2E7" 117 | } 118 | 119 | ]; 120 | 121 | var myPie = new Chart(document.getElementById("pie-chart").getContext("2d")).Pie(pieData); 122 | //END PIE CHART 123 | 124 | //BEGIN DOUGHNUT CHART 125 | var doughnutData = [ 126 | { 127 | value: 30, 128 | color:"#F7464A" 129 | }, 130 | { 131 | value : 50, 132 | color : "#46BFBD" 133 | }, 134 | { 135 | value : 100, 136 | color : "#FDB45C" 137 | }, 138 | { 139 | value : 40, 140 | color : "#949FB1" 141 | }, 142 | { 143 | value : 120, 144 | color : "#4D5360" 145 | } 146 | 147 | ]; 148 | 149 | var myDoughnut = new Chart(document.getElementById("doughnut-chart").getContext("2d")).Doughnut(doughnutData); 150 | //END DOUGHNUT CHART 151 | 152 | }); 153 | 154 | -------------------------------------------------------------------------------- /src/djangolvs/static/styles/nestable.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Nestable 3 | */ 4 | 5 | .dd { 6 | position: relative; 7 | display: block; 8 | margin: 0; 9 | padding: 0; 10 | max-width: 600px; 11 | list-style: none; 12 | font-size: 13px; 13 | line-height: 20px; 14 | } 15 | 16 | .dd-list { 17 | display: block; 18 | position: relative; 19 | margin: 0; 20 | padding: 0; 21 | list-style: none; 22 | } 23 | 24 | .dd-list .dd-list { 25 | padding-left: 30px; 26 | } 27 | 28 | .dd-collapsed .dd-list { 29 | display: none; 30 | } 31 | 32 | .dd-item, 33 | .dd-empty, 34 | .dd-placeholder { 35 | display: block; 36 | position: relative; 37 | margin: 0; 38 | padding: 0; 39 | min-height: 20px; 40 | font-size: 13px; 41 | line-height: 20px; 42 | } 43 | 44 | .dd-handle { 45 | display: block; 46 | height: 30px; 47 | margin: 5px 0; 48 | padding: 5px 10px; 49 | text-decoration: none; 50 | border: 1px solid #ccc; 51 | background: #fafafa; 52 | box-sizing: border-box; 53 | -moz-box-sizing: border-box; 54 | } 55 | 56 | .dd-handle:hover { 57 | color: #2ea8e5; 58 | background: #fff; 59 | } 60 | 61 | .dd-item > button { 62 | display: block; 63 | position: relative; 64 | cursor: pointer; 65 | float: left; 66 | width: 25px; 67 | height: 20px; 68 | margin: 5px 0; 69 | padding: 0; 70 | text-indent: 100%; 71 | white-space: nowrap; 72 | overflow: hidden; 73 | border: 0; 74 | background: transparent; 75 | line-height: 1; 76 | text-align: center; 77 | color: #555555; 78 | } 79 | 80 | .dd-item > button:before { 81 | font-family: 'fontawesome'; 82 | content: '\f067'; 83 | display: block; 84 | position: absolute; 85 | width: 100%; 86 | text-align: center; 87 | text-indent: 0; 88 | } 89 | 90 | .dd-item > button[data-action="collapse"]:before { 91 | content: '\f068'; 92 | } 93 | 94 | .dd-placeholder, 95 | .dd-empty { 96 | margin: 5px 0; 97 | padding: 0; 98 | min-height: 30px; 99 | background: #f2fbff; 100 | border: 1px dashed #b6bcbf; 101 | box-sizing: border-box; 102 | -moz-box-sizing: border-box; 103 | } 104 | 105 | .dd-empty { 106 | border: 1px dashed #bbb; 107 | min-height: 100px; 108 | background-color: #e5e5e5; 109 | background-size: 60px 60px; 110 | background-position: 0 0, 30px 30px; 111 | } 112 | 113 | .dd-dragel { 114 | position: absolute; 115 | pointer-events: none; 116 | z-index: 9999; 117 | } 118 | 119 | .dd-dragel > .dd-item .dd-handle { 120 | margin-top: 0; 121 | } 122 | 123 | .dd-dragel .dd-handle { 124 | } 125 | 126 | /** 127 | * Nestable Extras 128 | */ 129 | 130 | .nestable-lists { 131 | display: block; 132 | clear: both; 133 | padding: 30px 0; 134 | width: 100%; 135 | border: 0; 136 | border-top: 2px solid #ddd; 137 | border-bottom: 2px solid #ddd; 138 | } 139 | 140 | #nestable-menu { 141 | padding: 0; 142 | margin: 20px 0; 143 | } 144 | 145 | #nestable-output, 146 | #nestable2-output { 147 | width: 100%; 148 | height: 7em; 149 | padding: 5px; 150 | box-sizing: border-box; 151 | -moz-box-sizing: border-box; 152 | margin-bottom: 20px; 153 | color: #555555; 154 | } 155 | 156 | #nestable2 .dd-handle { 157 | color: #fff; 158 | border: 1px solid #999; 159 | background: #bbb; 160 | } 161 | 162 | #nestable2 .dd-handle:hover { 163 | background: #bbb; 164 | } 165 | 166 | #nestable2 .dd-item > button:before { 167 | color: #fff; 168 | } 169 | 170 | @media only screen and (min-width: 700px) { 171 | 172 | .dd { 173 | float: left; 174 | width: 100%; 175 | } 176 | 177 | .dd + .dd { 178 | margin-left: 2%; 179 | } 180 | 181 | } 182 | 183 | .dd-hover > .dd-handle { 184 | background: #2ea8e5 !important; 185 | } 186 | 187 | /** 188 | * Nestable Draggable Handles 189 | */ 190 | 191 | .dd3-content { 192 | display: block; 193 | height: 30px; 194 | margin: 5px 0; 195 | padding: 5px 10px 5px 40px; 196 | color: #555555; 197 | text-decoration: none; 198 | border: 1px solid #ccc; 199 | background: #fafafa; 200 | box-sizing: border-box; 201 | -moz-box-sizing: border-box; 202 | } 203 | 204 | .dd3-content:hover { 205 | color: #2ea8e5; 206 | background: #fff; 207 | } 208 | 209 | .dd-dragel > .dd3-item > .dd3-content { 210 | margin: 0; 211 | } 212 | 213 | .dd3-item > button { 214 | margin-left: 30px; 215 | } 216 | 217 | .dd3-handle { 218 | position: absolute; 219 | margin: 0; 220 | left: 0; 221 | top: 0; 222 | cursor: pointer; 223 | width: 30px; 224 | text-indent: 100%; 225 | white-space: nowrap; 226 | overflow: hidden; 227 | border: 1px solid #aaa; 228 | background: #ddd; 229 | } 230 | 231 | .dd3-handle:before { 232 | font-family: 'fontawesome'; 233 | content: '\f0c9'; 234 | display: block; 235 | position: absolute; 236 | left: 0; 237 | top: 3px; 238 | width: 100%; 239 | text-align: center; 240 | text-indent: 0; 241 | color: #fff; 242 | } 243 | 244 | .dd3-handle:hover { 245 | background: #ddd; 246 | } 247 | --------------------------------------------------------------------------------