├── market ├── __init__.py ├── migrations │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-35.pyc │ │ ├── 0001_initial.cpython-35.pyc │ │ ├── 0010_comment.cpython-35.pyc │ │ ├── 0015_goods_picture.cpython-35.pyc │ │ ├── 0004_goods_description.cpython-35.pyc │ │ ├── 0016_instationmessage.cpython-35.pyc │ │ ├── 0018_goods_date_time.cpython-35.pyc │ │ ├── 0002_auto_20161115_2128.cpython-35.pyc │ │ ├── 0003_auto_20161116_1100.cpython-35.pyc │ │ ├── 0005_auto_20161206_1204.cpython-35.pyc │ │ ├── 0006_auto_20161206_1738.cpython-35.pyc │ │ ├── 0006_auto_20161206_2033.cpython-35.pyc │ │ ├── 0007_auto_20161206_1953.cpython-35.pyc │ │ ├── 0007_goods_publish_time.cpython-35.pyc │ │ ├── 0008_auto_20161206_2042.cpython-35.pyc │ │ ├── 0008_goods_publish_time.cpython-35.pyc │ │ ├── 0009_auto_20161206_2007.cpython-35.pyc │ │ ├── 0009_auto_20161206_2050.cpython-35.pyc │ │ ├── 0010_auto_20161206_2008.cpython-35.pyc │ │ ├── 0011_auto_20161206_2012.cpython-35.pyc │ │ ├── 0011_auto_20161207_1407.cpython-35.pyc │ │ ├── 0012_auto_20161206_2013.cpython-35.pyc │ │ ├── 0012_auto_20161208_1054.cpython-35.pyc │ │ ├── 0013_auto_20161206_2015.cpython-35.pyc │ │ ├── 0013_auto_20161208_1632.cpython-35.pyc │ │ ├── 0014_auto_20161208_1944.cpython-35.pyc │ │ ├── 0015_goods_publish_time.cpython-35.pyc │ │ ├── 0016_auto_20161206_2020.cpython-35.pyc │ │ ├── 0019_remove_goods_date_time.cpython-35.pyc │ │ ├── 0009_remove_goods_publish_time.cpython-35.pyc │ │ ├── 0014_remove_goods_publish_time.cpython-35.pyc │ │ └── 0017_remove_goods_publish_time.cpython-35.pyc │ ├── 0002_auto_20161115_2128.py │ ├── 0007_goods_publish_time.py │ ├── 0004_goods_description.py │ ├── 0009_auto_20161206_2050.py │ ├── 0015_goods_picture.py │ ├── 0005_auto_20161206_1204.py │ ├── 0012_auto_20161208_1054.py │ ├── 0008_auto_20161206_2042.py │ ├── 0011_auto_20161207_1407.py │ ├── 0010_comment.py │ ├── 0013_auto_20161208_1632.py │ ├── 0014_auto_20161208_1944.py │ ├── 0016_instationmessage.py │ ├── 0006_auto_20161206_2033.py │ ├── 0003_auto_20161116_1100.py │ └── 0001_initial.py ├── templatetags │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-35.pyc │ │ └── rango_extras.cpython-35.pyc │ └── rango_extras.py ├── tests.py ├── media │ ├── goods │ │ ├── book.jpg │ │ ├── boy.jpg │ │ ├── run.jpg │ │ ├── stu.jpg │ │ ├── aleng.jpg │ │ ├── rango.jpg │ │ ├── 83259_large.png │ │ ├── 20131003073735125.jpg │ │ ├── u18655861044059738674fm23gp0.jpg │ │ └── iOS_default_1481751843_87038_0.jpg │ └── profile │ │ ├── 1.jpg │ │ ├── 头像.jpg │ │ ├── 穹4.jpg │ │ ├── book.jpg │ │ ├── cat.bmp │ │ ├── 淡淡的蓝.jpg │ │ ├── aleng.jpg │ │ ├── saber.png │ │ ├── 1_LPQUqQI.jpg │ │ ├── minecraft.jpg │ │ ├── old_lady.jpg │ │ ├── 83259_large.png │ │ ├── aleng_5b2hFjN.jpg │ │ ├── saber_2OquUiE.png │ │ ├── 140-150F1141912.jpg │ │ ├── 20131003073735125.jpg │ │ ├── 140-150F1141919-50.jpg │ │ ├── 83259_large_ls0K7nX.png │ │ ├── 140-150F1141919-50_HzzOiE2.jpg │ │ ├── 20131003073735125_JdJkPgm.jpg │ │ ├── 77094b36acaf2edd9d014bd58f1001e93901931d.jpg │ │ └── d4bdd53f8794a4c2bd65dd860ef41bd5ac6e3989.jpg ├── static │ ├── images │ │ ├── search.png │ │ ├── black-wave.png │ │ ├── release-icon.png │ │ └── release-title.png │ ├── bootstrap │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── js │ │ │ └── npm.js │ │ └── css │ │ │ ├── bootstrap-theme.min.css │ │ │ └── bootstrap-theme.min.css.map │ ├── js │ │ └── comment.js │ └── css │ │ ├── search.css │ │ ├── category.css │ │ ├── bootstrap-reboot.min.css │ │ ├── goods.css │ │ ├── add_goods.css │ │ └── profile.css ├── apps.py ├── __pycache__ │ ├── admin.cpython-35.pyc │ ├── forms.cpython-35.pyc │ ├── urls.cpython-35.pyc │ ├── views.cpython-35.pyc │ ├── __init__.cpython-35.pyc │ └── models.cpython-35.pyc ├── admin.py ├── templates │ └── market │ │ ├── cats.html │ │ ├── login.html │ │ ├── register.html │ │ ├── index.html │ │ ├── profile.html │ │ ├── message.html │ │ ├── base.html │ │ ├── category.html │ │ ├── goods.html │ │ └── add_goods.html ├── urls.py ├── forms.py ├── models.py └── views.py ├── flea_market ├── __init__.py ├── __pycache__ │ ├── urls.cpython-35.pyc │ ├── wsgi.cpython-35.pyc │ ├── __init__.cpython-35.pyc │ └── settings.cpython-35.pyc ├── wsgi.py ├── urls.py └── settings.py ├── db.sqlite3 ├── screenshot ├── comment.png ├── goods.png ├── index.png ├── publish_goods.png └── personal_information.png ├── .idea ├── dictionaries │ └── LENOVO.xml ├── modules.xml ├── codeStyleSettings.xml ├── flea_market.iml └── misc.xml ├── README.md ├── manage.py └── LICENSE /market/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /flea_market/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /market/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /market/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/db.sqlite3 -------------------------------------------------------------------------------- /market/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /screenshot/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/screenshot/comment.png -------------------------------------------------------------------------------- /screenshot/goods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/screenshot/goods.png -------------------------------------------------------------------------------- /screenshot/index.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/screenshot/index.png -------------------------------------------------------------------------------- /market/media/goods/book.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/goods/book.jpg -------------------------------------------------------------------------------- /market/media/goods/boy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/goods/boy.jpg -------------------------------------------------------------------------------- /market/media/goods/run.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/goods/run.jpg -------------------------------------------------------------------------------- /market/media/goods/stu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/goods/stu.jpg -------------------------------------------------------------------------------- /market/media/profile/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/1.jpg -------------------------------------------------------------------------------- /market/media/profile/头像.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/头像.jpg -------------------------------------------------------------------------------- /market/media/profile/穹4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/穹4.jpg -------------------------------------------------------------------------------- /market/media/goods/aleng.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/goods/aleng.jpg -------------------------------------------------------------------------------- /market/media/goods/rango.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/goods/rango.jpg -------------------------------------------------------------------------------- /market/media/profile/book.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/book.jpg -------------------------------------------------------------------------------- /market/media/profile/cat.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/cat.bmp -------------------------------------------------------------------------------- /market/media/profile/淡淡的蓝.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/淡淡的蓝.jpg -------------------------------------------------------------------------------- /screenshot/publish_goods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/screenshot/publish_goods.png -------------------------------------------------------------------------------- /market/media/profile/aleng.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/aleng.jpg -------------------------------------------------------------------------------- /market/media/profile/saber.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/saber.png -------------------------------------------------------------------------------- /market/static/images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/static/images/search.png -------------------------------------------------------------------------------- /.idea/dictionaries/LENOVO.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /market/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class MarketConfig(AppConfig): 5 | name = 'market' 6 | -------------------------------------------------------------------------------- /market/media/goods/83259_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/goods/83259_large.png -------------------------------------------------------------------------------- /market/media/profile/1_LPQUqQI.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/1_LPQUqQI.jpg -------------------------------------------------------------------------------- /market/media/profile/minecraft.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/minecraft.jpg -------------------------------------------------------------------------------- /market/media/profile/old_lady.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/old_lady.jpg -------------------------------------------------------------------------------- /market/media/profile/83259_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/83259_large.png -------------------------------------------------------------------------------- /market/static/images/black-wave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/static/images/black-wave.png -------------------------------------------------------------------------------- /market/static/images/release-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/static/images/release-icon.png -------------------------------------------------------------------------------- /screenshot/personal_information.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/screenshot/personal_information.png -------------------------------------------------------------------------------- /market/__pycache__/admin.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/__pycache__/admin.cpython-35.pyc -------------------------------------------------------------------------------- /market/__pycache__/forms.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/__pycache__/forms.cpython-35.pyc -------------------------------------------------------------------------------- /market/__pycache__/urls.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/__pycache__/urls.cpython-35.pyc -------------------------------------------------------------------------------- /market/__pycache__/views.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/__pycache__/views.cpython-35.pyc -------------------------------------------------------------------------------- /market/media/profile/aleng_5b2hFjN.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/aleng_5b2hFjN.jpg -------------------------------------------------------------------------------- /market/media/profile/saber_2OquUiE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/saber_2OquUiE.png -------------------------------------------------------------------------------- /market/static/images/release-title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/static/images/release-title.png -------------------------------------------------------------------------------- /market/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /market/__pycache__/models.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/__pycache__/models.cpython-35.pyc -------------------------------------------------------------------------------- /market/media/goods/20131003073735125.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/goods/20131003073735125.jpg -------------------------------------------------------------------------------- /market/media/profile/140-150F1141912.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/140-150F1141912.jpg -------------------------------------------------------------------------------- /market/media/profile/20131003073735125.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/20131003073735125.jpg -------------------------------------------------------------------------------- /flea_market/__pycache__/urls.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/flea_market/__pycache__/urls.cpython-35.pyc -------------------------------------------------------------------------------- /flea_market/__pycache__/wsgi.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/flea_market/__pycache__/wsgi.cpython-35.pyc -------------------------------------------------------------------------------- /market/media/profile/140-150F1141919-50.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/140-150F1141919-50.jpg -------------------------------------------------------------------------------- /market/media/profile/83259_large_ls0K7nX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/83259_large_ls0K7nX.png -------------------------------------------------------------------------------- /flea_market/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/flea_market/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /flea_market/__pycache__/settings.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/flea_market/__pycache__/settings.cpython-35.pyc -------------------------------------------------------------------------------- /market/media/goods/u18655861044059738674fm23gp0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/goods/u18655861044059738674fm23gp0.jpg -------------------------------------------------------------------------------- /market/media/profile/140-150F1141919-50_HzzOiE2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/140-150F1141919-50_HzzOiE2.jpg -------------------------------------------------------------------------------- /market/media/profile/20131003073735125_JdJkPgm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/20131003073735125_JdJkPgm.jpg -------------------------------------------------------------------------------- /market/media/goods/iOS_default_1481751843_87038_0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/goods/iOS_default_1481751843_87038_0.jpg -------------------------------------------------------------------------------- /market/migrations/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0001_initial.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0001_initial.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0010_comment.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0010_comment.cpython-35.pyc -------------------------------------------------------------------------------- /market/templatetags/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/templatetags/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /market/templatetags/__pycache__/rango_extras.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/templatetags/__pycache__/rango_extras.cpython-35.pyc -------------------------------------------------------------------------------- /market/static/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/static/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /market/static/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/static/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /market/migrations/__pycache__/0015_goods_picture.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0015_goods_picture.cpython-35.pyc -------------------------------------------------------------------------------- /market/static/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/static/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /market/static/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/static/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /market/media/profile/77094b36acaf2edd9d014bd58f1001e93901931d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/77094b36acaf2edd9d014bd58f1001e93901931d.jpg -------------------------------------------------------------------------------- /market/media/profile/d4bdd53f8794a4c2bd65dd860ef41bd5ac6e3989.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/media/profile/d4bdd53f8794a4c2bd65dd860ef41bd5ac6e3989.jpg -------------------------------------------------------------------------------- /market/migrations/__pycache__/0004_goods_description.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0004_goods_description.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0016_instationmessage.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0016_instationmessage.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0018_goods_date_time.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0018_goods_date_time.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0002_auto_20161115_2128.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0002_auto_20161115_2128.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0003_auto_20161116_1100.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0003_auto_20161116_1100.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0005_auto_20161206_1204.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0005_auto_20161206_1204.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0006_auto_20161206_1738.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0006_auto_20161206_1738.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0006_auto_20161206_2033.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0006_auto_20161206_2033.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0007_auto_20161206_1953.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0007_auto_20161206_1953.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0007_goods_publish_time.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0007_goods_publish_time.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0008_auto_20161206_2042.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0008_auto_20161206_2042.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0008_goods_publish_time.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0008_goods_publish_time.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0009_auto_20161206_2007.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0009_auto_20161206_2007.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0009_auto_20161206_2050.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0009_auto_20161206_2050.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0010_auto_20161206_2008.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0010_auto_20161206_2008.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0011_auto_20161206_2012.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0011_auto_20161206_2012.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0011_auto_20161207_1407.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0011_auto_20161207_1407.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0012_auto_20161206_2013.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0012_auto_20161206_2013.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0012_auto_20161208_1054.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0012_auto_20161208_1054.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0013_auto_20161206_2015.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0013_auto_20161206_2015.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0013_auto_20161208_1632.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0013_auto_20161208_1632.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0014_auto_20161208_1944.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0014_auto_20161208_1944.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0015_goods_publish_time.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0015_goods_publish_time.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0016_auto_20161206_2020.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0016_auto_20161206_2020.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0019_remove_goods_date_time.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0019_remove_goods_date_time.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0009_remove_goods_publish_time.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0009_remove_goods_publish_time.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0014_remove_goods_publish_time.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0014_remove_goods_publish_time.cpython-35.pyc -------------------------------------------------------------------------------- /market/migrations/__pycache__/0017_remove_goods_publish_time.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starbt/flea_market/HEAD/market/migrations/__pycache__/0017_remove_goods_publish_time.cpython-35.pyc -------------------------------------------------------------------------------- /market/templatetags/rango_extras.py: -------------------------------------------------------------------------------- 1 | from django import template 2 | from market.models import Category 3 | 4 | register = template.Library() 5 | @register.inclusion_tag('market/cats.html') 6 | def get_category_list(cat=None): 7 | return {'cats':Category.objects.all(),'act_cat':cat} -------------------------------------------------------------------------------- /market/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from market.models import Category,Goods,UserProfile,Comment 3 | # Register your models here. 4 | 5 | admin.site.register(Category) 6 | admin.site.register(Goods) 7 | admin.site.register(UserProfile) 8 | admin.site.register(Comment) -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/codeStyleSettings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 9 | -------------------------------------------------------------------------------- /market/templates/market/cats.html: -------------------------------------------------------------------------------- 1 | {% if cats %} 2 | 12 | {% endif %} -------------------------------------------------------------------------------- /.idea/flea_market.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | -------------------------------------------------------------------------------- /flea_market/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for flea_market 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.10/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "flea_market.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /market/migrations/0002_auto_20161115_2128.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-11-15 13:28 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('market', '0001_initial'), 12 | ] 13 | 14 | operations = [ 15 | migrations.RenameModel( 16 | old_name='Users', 17 | new_name='User', 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /market/static/bootstrap/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /market/migrations/0007_goods_publish_time.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-12-06 12:36 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('market', '0006_auto_20161206_2033'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AddField( 16 | model_name='goods', 17 | name='publish_time', 18 | field=models.DateField(blank=True, null=True), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /market/migrations/0004_goods_description.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-12-05 13:01 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('market', '0003_auto_20161116_1100'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AddField( 16 | model_name='goods', 17 | name='description', 18 | field=models.CharField(blank=True, max_length=512), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /market/migrations/0009_auto_20161206_2050.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-12-06 12:50 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('market', '0008_auto_20161206_2042'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='goods', 17 | name='publish_time', 18 | field=models.DateField(auto_now_add=True, null=True), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /market/migrations/0015_goods_picture.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-12-20 17:26 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('market', '0014_auto_20161208_1944'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AddField( 16 | model_name='goods', 17 | name='picture', 18 | field=models.ImageField(blank=True, null=True, upload_to='goods'), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /market/migrations/0005_auto_20161206_1204.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-12-06 04:04 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | import django.db.models.deletion 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | dependencies = [ 12 | ('market', '0004_goods_description'), 13 | ] 14 | 15 | operations = [ 16 | migrations.AlterField( 17 | model_name='goods', 18 | name='seller', 19 | field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='market.UserProfile'), 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /market/migrations/0012_auto_20161208_1054.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-12-08 02:54 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('market', '0011_auto_20161207_1407'), 12 | ] 13 | 14 | operations = [ 15 | migrations.RemoveField( 16 | model_name='userprofile', 17 | name='picture_url', 18 | ), 19 | migrations.AddField( 20 | model_name='userprofile', 21 | name='avatar', 22 | field=models.ImageField(blank=True, upload_to='profile'), 23 | ), 24 | ] 25 | -------------------------------------------------------------------------------- /market/static/js/comment.js: -------------------------------------------------------------------------------- 1 | 2 | function reply(name) { 3 | inputPrefix = "对@ " + name + " 说:"; 4 | var input = document.getElementById("comment_input"); 5 | input.innerHTML= inputPrefix; 6 | moveEnd(input) 7 | } 8 | 9 | function report(){ 10 | alert("您已经成功举报该商品!"); 11 | } 12 | 13 | function moveEnd(obj){ 14 | obj.focus(); 15 | var len = obj.value.length; 16 | if (document.selection) { 17 | var sel = obj.createTextRange(); 18 | sel.moveStart('character',len); 19 | sel.collapse(); 20 | sel.select(); 21 | } else if (typeof obj.selectionStart == 'number' && typeof obj.selectionEnd == 'number') { 22 | obj.selectionStart = obj.selectionEnd = len; 23 | } 24 | } -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /market/migrations/0008_auto_20161206_2042.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-12-06 12:42 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('market', '0007_goods_publish_time'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='goods', 17 | name='goods_phone', 18 | field=models.IntegerField(blank=True, null=True), 19 | ), 20 | migrations.AlterField( 21 | model_name='goods', 22 | name='goods_qq', 23 | field=models.IntegerField(blank=True, null=True), 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### 项目简介 2 | 3 | 本项目是用Python3+Django搭建的一个校园二手市场信息发布平台。前端使用Bootstrap. 4 | 5 | ### 项目安装 6 | 7 | 先安装Django框架,具体百度一下. 8 | 9 | ### 运行 10 | ``` 11 | python manage.py runserver 12 | ``` 13 | 浏览器输入:http://127.0.0.1:8000/ 14 | 15 | ## 运行截图 16 | 17 | ### 首页 18 | 19 | ![](https://github.com/starbt/flea_market/raw/master/screenshot/index.png) 20 | 21 | ### 商品详情 22 | 23 | ![](https://github.com/starbt/flea_market/raw/master/screenshot/goods.png) 24 | 25 | ### 评论页面 26 | 27 | ![](https://github.com/starbt/flea_market/raw/master/screenshot/comment.png) 28 | 29 | ### 发布商品 30 | 31 | ![](https://github.com/starbt/flea_market/raw/master/screenshot/publish_goods.png) 32 | 33 | ### 个人信息 34 | 35 | ![](https://github.com/starbt/flea_market/raw/master/screenshot/personal_information.png) 36 | -------------------------------------------------------------------------------- /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", "flea_market.settings") 7 | try: 8 | from django.core.management import execute_from_command_line 9 | except ImportError: 10 | # The above import may fail for some other reason. Ensure that the 11 | # issue is really that Django is missing to avoid masking other 12 | # exceptions on Python 2. 13 | try: 14 | import django 15 | except ImportError: 16 | raise ImportError( 17 | "Couldn't import Django. Are you sure it's installed and " 18 | "available on your PYTHONPATH environment variable? Did you " 19 | "forget to activate a virtual environment?" 20 | ) 21 | raise 22 | execute_from_command_line(sys.argv) 23 | -------------------------------------------------------------------------------- /market/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import url 2 | from . import views 3 | from django.conf.urls.static import static 4 | from django.conf import settings 5 | from django.conf.urls.static import static 6 | urlpatterns = [ 7 | url(r'^$',views.index,name='index' ), 8 | url(r'^category/(?P[\w\-]+)', views.category,name='category'), 9 | url(r'^register/$', views.register, name='register'), 10 | url(r'^login/$', views.user_login, name='login'), 11 | url(r'^about/', views.about,name='about'), 12 | url(r'^logout/$', views.user_logout,name='logout'), 13 | url(r'^goods/(?P[\w\-]+)', views.goods_page,name='goods'), 14 | url(r'^add_goods', views.add_goods,name='add_goods'), 15 | url(r'^add_comment/(?P[\w\-]+)', views.add_comment,name='add_comment'), 16 | url(r'^profile/(?P[\w\-]+)', views.profile,name='profile'), 17 | url(r'^search',views.search,name='search'), 18 | url(r'^message/', views.display_message, name='message'), 19 | ] 20 | 21 | -------------------------------------------------------------------------------- /market/migrations/0011_auto_20161207_1407.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-12-07 06:07 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | import django.db.models.deletion 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | dependencies = [ 12 | ('market', '0010_comment'), 13 | ] 14 | 15 | operations = [ 16 | migrations.RemoveField( 17 | model_name='comment', 18 | name='from_user', 19 | ), 20 | migrations.AddField( 21 | model_name='comment', 22 | name='user', 23 | field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='market.UserProfile'), 24 | ), 25 | migrations.AlterField( 26 | model_name='comment', 27 | name='goods', 28 | field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='market.Goods'), 29 | ), 30 | ] 31 | -------------------------------------------------------------------------------- /market/migrations/0010_comment.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-12-07 02:37 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | import django.db.models.deletion 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | dependencies = [ 12 | ('market', '0009_auto_20161206_2050'), 13 | ] 14 | 15 | operations = [ 16 | migrations.CreateModel( 17 | name='Comment', 18 | fields=[ 19 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 20 | ('content', models.CharField(max_length=256)), 21 | ('comment_time', models.DateField(auto_now_add=True)), 22 | ('from_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='market.UserProfile')), 23 | ('goods', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='market.Goods')), 24 | ], 25 | ), 26 | ] 27 | -------------------------------------------------------------------------------- /market/templates/market/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FleaMarket 6 | 7 | 8 | 9 | 10 | 11 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /market/migrations/0013_auto_20161208_1632.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-12-08 08:32 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('market', '0012_auto_20161208_1054'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AddField( 16 | model_name='userprofile', 17 | name='height', 18 | field=models.PositiveIntegerField(blank=True, default='100', editable=False, null=True), 19 | ), 20 | migrations.AddField( 21 | model_name='userprofile', 22 | name='width', 23 | field=models.PositiveIntegerField(blank=True, default='100', editable=False, null=True), 24 | ), 25 | migrations.AlterField( 26 | model_name='userprofile', 27 | name='avatar', 28 | field=models.ImageField(blank=True, height_field='height', upload_to='profile', width_field='width'), 29 | ), 30 | ] 31 | -------------------------------------------------------------------------------- /market/migrations/0014_auto_20161208_1944.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-12-08 11:44 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('market', '0013_auto_20161208_1632'), 12 | ] 13 | 14 | operations = [ 15 | migrations.RemoveField( 16 | model_name='userprofile', 17 | name='nick_name', 18 | ), 19 | migrations.RemoveField( 20 | model_name='userprofile', 21 | name='phone', 22 | ), 23 | migrations.AlterField( 24 | model_name='userprofile', 25 | name='height', 26 | field=models.PositiveIntegerField(blank=True, default='30', editable=False, null=True), 27 | ), 28 | migrations.AlterField( 29 | model_name='userprofile', 30 | name='width', 31 | field=models.PositiveIntegerField(blank=True, default='30', editable=False, null=True), 32 | ), 33 | ] 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /flea_market/urls.py: -------------------------------------------------------------------------------- 1 | """flea_market URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/1.10/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.conf.urls import url, include 14 | 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 15 | """ 16 | from django.conf.urls import url 17 | from django.contrib import admin 18 | from django.conf.urls import include 19 | from django.conf import settings 20 | from django.conf.urls.static import static 21 | urlpatterns = [ 22 | url(r'^admin/', admin.site.urls), 23 | url(r'^$', include('market.urls')), 24 | url(r'^market/', include('market.urls')), 25 | ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 26 | -------------------------------------------------------------------------------- /market/migrations/0016_instationmessage.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-12-21 15:14 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | import django.db.models.deletion 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | dependencies = [ 12 | ('market', '0015_goods_picture'), 13 | ] 14 | 15 | operations = [ 16 | migrations.CreateModel( 17 | name='InstationMessage', 18 | fields=[ 19 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 20 | ('content', models.CharField(max_length=140)), 21 | ('send_time', models.DateField(auto_now_add=True)), 22 | ('active', models.BooleanField(default=True)), 23 | ('receiver', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='receiver_id', to='market.UserProfile')), 24 | ('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sender_id', to='market.UserProfile')), 25 | ], 26 | ), 27 | ] 28 | -------------------------------------------------------------------------------- /market/static/css/search.css: -------------------------------------------------------------------------------- 1 | /*search module begin*/ 2 | .search-box-wr { 3 | width: 500px; 4 | 5 | } 6 | 7 | .search-box { 8 | width: 100%; 9 | height: 50px; 10 | border: 1px solid #44C1A5; 11 | -webkit-border-radius: 25px; 12 | -moz-border-radius: 25px; 13 | -ms-border-radius: 25px; 14 | border-radius: 25px; 15 | font-size: 1.33em; 16 | background:#fff; 17 | overflow: hidden; 18 | } 19 | 20 | .search-submit { 21 | float: right; 22 | width: 24.13%; 23 | height: 100%; 24 | background-color: #64CBB3; 25 | font-size: 16px; 26 | color: #FFF; 27 | cursor: pointer; 28 | } 29 | 30 | .search-submit:hover { 31 | background: #3EB196; 32 | } 33 | 34 | .input-wr { 35 | margin-right: 22.5%; 36 | } 37 | 38 | .search-icon { 39 | height: 24px; 40 | margin: 13px 0 0 18px; 41 | float: left; 42 | } 43 | 44 | .search-input { 45 | 46 | margin-left: 40px; 47 | padding-left:10px; 48 | padding-right:10px; 49 | padding-top:5px; 50 | 51 | } 52 | 53 | .search-input input { 54 | width: 100%; 55 | height: 100%; 56 | font-size: 16px; 57 | color: #4BBFA5; 58 | line-height: 2em; 59 | vertical-align: middle; 60 | outline: none; 61 | 62 | *line-height: 28px; 63 | } 64 | /*search module end*/ -------------------------------------------------------------------------------- /market/templates/market/register.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FleaMarket 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |
14 | 15 |
16 | 17 |
18 | {% if registered %} 19 | thank you for registering! 20 | Return to the homepage.
21 | {% else %} 22 |
24 | 25 | {% csrf_token %} 26 | {{ user_form.as_p }} 27 | {{ profile_form.as_p }} 28 | 29 | 30 | 31 |
32 | 33 | {% endif %} 34 |
35 | 36 | 37 |
38 |
39 |
40 |
41 | 42 |
43 |
44 | 45 | 46 | -------------------------------------------------------------------------------- /market/migrations/0006_auto_20161206_2033.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-12-06 12:33 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('market', '0005_auto_20161206_1204'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AddField( 16 | model_name='goods', 17 | name='discount', 18 | field=models.IntegerField(blank=True, default=0), 19 | ), 20 | migrations.AddField( 21 | model_name='goods', 22 | name='goods_phone', 23 | field=models.IntegerField(blank=True, default=0), 24 | ), 25 | migrations.AddField( 26 | model_name='goods', 27 | name='goods_qq', 28 | field=models.IntegerField(blank=True, default=0), 29 | ), 30 | migrations.AlterField( 31 | model_name='goods', 32 | name='picture_url', 33 | field=models.CharField(blank=True, max_length=128), 34 | ), 35 | migrations.AlterField( 36 | model_name='userprofile', 37 | name='picture_url', 38 | field=models.CharField(blank=True, default='http://ershou.u.qiniudn.com/Android_1480732854630_186265.jpg?imageView2/5/w/800/h/800', max_length=128), 39 | ), 40 | ] 41 | -------------------------------------------------------------------------------- /market/templates/market/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'market/base.html' %} 2 | 3 | {% block title %}{{ category_name }}{% endblock %} 4 | 5 | {% block body_block %} 6 | 7 | {% if user.is_authenticated %} 8 |

{{ user.username }}!Welcome to STU FleaMarket!

9 | {% else %} 10 |

Welcome to STU FleaMarket!

11 | {% endif %} 12 |
13 | {% if goodses %} 14 |
15 |
    16 | {% for goods in goodses %} 17 |
  • 18 | {% if goods.picture %} 19 |
    20 | {% else %} 21 |
    22 | {% endif %} 23 | 24 |
    25 | 26 |
    {{ goods.price }}
    27 |
    {{ goods.trade_location }}
    28 |
    29 |
  • 30 | {% endfor %} 31 |
32 |
33 | {% else %} 34 | No pages currently in category. 35 | {% endif %} 36 | 37 | {% endblock %} 38 | -------------------------------------------------------------------------------- /market/migrations/0003_auto_20161116_1100.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-11-16 03:00 3 | from __future__ import unicode_literals 4 | 5 | from django.conf import settings 6 | from django.db import migrations, models 7 | import django.db.models.deletion 8 | 9 | 10 | class Migration(migrations.Migration): 11 | 12 | dependencies = [ 13 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 14 | ('market', '0002_auto_20161115_2128'), 15 | ] 16 | 17 | operations = [ 18 | migrations.CreateModel( 19 | name='UserProfile', 20 | fields=[ 21 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 22 | ('nick_name', models.CharField(max_length=32, unique=True)), 23 | ('picture_url', models.CharField(max_length=128)), 24 | ('phone', models.IntegerField()), 25 | ], 26 | ), 27 | migrations.AlterField( 28 | model_name='goods', 29 | name='seller', 30 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='market.UserProfile'), 31 | ), 32 | migrations.DeleteModel( 33 | name='User', 34 | ), 35 | migrations.AddField( 36 | model_name='userprofile', 37 | name='user', 38 | field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), 39 | ), 40 | ] 41 | -------------------------------------------------------------------------------- /market/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | from django.contrib.auth.models import User 3 | from market.models import Category,Goods,UserProfile,Comment 4 | 5 | 6 | class UserForm(forms.ModelForm): 7 | password = forms.CharField(widget=forms.PasswordInput()) 8 | class Meta: 9 | model = User 10 | fields = ('username','email','password') 11 | 12 | 13 | class UserProfieldForm(forms.ModelForm): 14 | class Meta: 15 | model = UserProfile 16 | fields = ('avatar',) 17 | 18 | 19 | class GoodsForm(forms.ModelForm): 20 | name = forms.CharField(max_length=32,help_text="商品名称",widget=forms.TextInput(attrs={'class':'name','placeholder':'最多二十五个字'})) 21 | description = forms.CharField(max_length=512,help_text="商品详情",widget=forms.Textarea(attrs={'id':'desc','placeholder':'建议填写物品用途、新旧程度、原价等信息,至少15个字'})) 22 | trade_location = forms.CharField(max_length=32,help_text="交易地点",widget=forms.TextInput(attrs={'id':'trade_place','placeholder':'宿舍、金三角、食堂等'})) 23 | price = forms.IntegerField(help_text="价格",widget=forms.TextInput(attrs={'id':'price'})) 24 | discount = forms.ChoiceField(choices=[('0','不可刀'),('1','可小刀')]) 25 | goods_phone = forms.IntegerField(widget=forms.TextInput(attrs={'id':'tel'})) 26 | goods_qq = forms.IntegerField(widget=forms.TextInput(attrs={'id':'qq'})) 27 | 28 | class Meta: 29 | model = Goods 30 | exclude = ('seller','picture_url') 31 | 32 | 33 | class CommentForm(forms.ModelForm): 34 | content = forms.CharField(max_length=128,widget=forms.Textarea(attrs={'id':'comment_input','class':'comment-input',})) 35 | 36 | class Meta: 37 | model = Comment 38 | fields = ('content',) 39 | 40 | 41 | -------------------------------------------------------------------------------- /market/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.2 on 2016-11-15 13:17 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | import django.db.models.deletion 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | initial = True 12 | 13 | dependencies = [ 14 | ] 15 | 16 | operations = [ 17 | migrations.CreateModel( 18 | name='Category', 19 | fields=[ 20 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 21 | ('name', models.CharField(max_length=32, unique=True)), 22 | ], 23 | ), 24 | migrations.CreateModel( 25 | name='Goods', 26 | fields=[ 27 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 28 | ('name', models.CharField(max_length=128)), 29 | ('price', models.IntegerField(default=0)), 30 | ('picture_url', models.CharField(max_length=128)), 31 | ('trade_location', models.CharField(max_length=32)), 32 | ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='market.Category')), 33 | ], 34 | ), 35 | migrations.CreateModel( 36 | name='Users', 37 | fields=[ 38 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 39 | ('nick_name', models.CharField(max_length=32, unique=True)), 40 | ('picture_url', models.CharField(max_length=128)), 41 | ('phone', models.IntegerField()), 42 | ], 43 | ), 44 | migrations.AddField( 45 | model_name='goods', 46 | name='seller', 47 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='market.Users'), 48 | ), 49 | ] 50 | -------------------------------------------------------------------------------- /market/models.py: -------------------------------------------------------------------------------- 1 | from django.utils import timezone 2 | from django.db import models 3 | from django.contrib.auth.models import User 4 | 5 | 6 | class Category(models.Model): 7 | name = models.CharField(max_length=32,unique=True) 8 | 9 | def __str__(self): 10 | return self.name 11 | 12 | class UserProfile(models.Model): 13 | user = models.OneToOneField(User) 14 | height = models.PositiveIntegerField(default="30",blank=True,null=True,editable=False) 15 | width = models.PositiveIntegerField(default="30",blank=True,null=True,editable=False) 16 | # picture_url = models.CharField(default="http://ershou.u.qiniudn.com/Android_1480732854630_186265.jpg?imageView2/5/w/800/h/800",max_length=128,blank=True) 17 | avatar = models.ImageField(upload_to='profile',height_field='height',width_field='width',blank=True) 18 | 19 | def __str__(self): 20 | return self.user.username 21 | 22 | 23 | class Goods(models.Model): 24 | name = models.CharField(max_length=128) 25 | description = models.CharField(max_length=512,blank=True) 26 | trade_location = models.CharField(max_length=32) 27 | price = models.IntegerField(default=0) 28 | category = models.ForeignKey(Category) 29 | picture_url = models.CharField(max_length=128,blank=True) 30 | picture = models.ImageField(upload_to='goods',blank=True,null=True) 31 | seller = models.ForeignKey(UserProfile,blank=True,null=True) 32 | discount = models.IntegerField(default=0,blank=True) 33 | goods_phone = models.IntegerField(null=True,blank=True) 34 | goods_qq = models.IntegerField(null=True,blank=True) 35 | publish_time = models.DateField(auto_now_add=True,null=True,blank=True) 36 | 37 | def __str__(self): 38 | return self.name 39 | 40 | 41 | class Comment(models.Model): 42 | goods = models.ForeignKey(Goods,blank=True,null=True) 43 | user = models.ForeignKey(UserProfile,blank=True,null=True) 44 | content = models.CharField(max_length=256) 45 | comment_time = models.DateField(auto_now_add=True) 46 | 47 | def __str__(self): 48 | return self.content 49 | 50 | 51 | class InstationMessage(models.Model): 52 | receiver = models.ForeignKey(UserProfile, related_name='receiver_id') 53 | sender = models.ForeignKey(UserProfile, related_name='sender_id') 54 | content = models.CharField(max_length=140) 55 | send_time = models.DateField(auto_now_add=True) 56 | active = models.BooleanField(default=True) 57 | 58 | def __str__(self): 59 | return self.content 60 | -------------------------------------------------------------------------------- /market/templates/market/profile.html: -------------------------------------------------------------------------------- 1 | {% extends 'market/base.html' %} 2 | 3 | {% block title %}{{ profile.user.username }}{% endblock %} 4 | 5 | {% block body_block %} 6 |
7 |
8 |
9 |
10 |
{{ profile.user.username }}等级
11 |

已卖出5件商品

12 |
    13 |
  • 汕头大学 计算机科学系 2013级
  • 14 |
15 |
16 |
17 | {% if profile.avatar %} 18 | 19 | {% else %} 20 | 21 | {% endif %} 22 |
23 |
24 | 27 |
28 |
29 | {% for goods in goodses %} 30 |
31 |
32 |

{{ goods.name }}

33 |
{{ goods.description }}
34 |
35 | ¥{{ goods.price }} 36 | {{ goods.trade_location }} 37 |
38 |
39 | 40 | {% if goods.picture_url %} 41 | 42 | 43 | 44 | {% else %} 45 | 46 | 47 | 48 | {% endif %} 49 | 50 | 55 | 56 | 57 |
58 | {% endfor %} 59 |
60 |
61 |
62 |
63 | {% endblock %} 64 | 65 | -------------------------------------------------------------------------------- /market/static/css/category.css: -------------------------------------------------------------------------------- 1 | /*list style begin*/ 2 | 3 | .item-list { 4 | width: 100%; 5 | margin-bottom: 60px; 6 | } 7 | 8 | .items { 9 | font-size: 0; 10 | list-style: none; 11 | text-align: justify; 12 | text-justify: distribute-all-lines; 13 | text-align-last: justify; 14 | } 15 | 16 | .items:after { 17 | content: ""; 18 | display: inline-block; 19 | width: 100%; 20 | } 21 | 22 | .item { 23 | display: inline-block; 24 | *display: inline; 25 | *zoom: 1; 26 | position: relative; 27 | width: 200px; 28 | height: 265px; 29 | margin-bottom: 20px; 30 | font-size: 12px; 31 | text-align: left; 32 | } 33 | 34 | .item.fixed { 35 | height: 0; 36 | margin: 0; 37 | padding: 0; 38 | font-size: 0; 39 | line-height: 0; 40 | } 41 | 42 | .item.last { 43 | margin-right: 0; 44 | } 45 | 46 | .item .img { 47 | display: block; 48 | width: 300px; 49 | height: 200px; 50 | } 51 | 52 | .img img { 53 | width: 200px; 54 | height: 200px; 55 | } 56 | 57 | .item .info { 58 | padding: 10px; 59 | background-color: #FFF; 60 | overflow: hidden; 61 | text-overflow: ellipsis; 62 | } 63 | 64 | .info>div{ 65 | overflow: hidden; 66 | text-overflow: ellipsis; 67 | white-space: nowrap; 68 | word-wrap: break-word; 69 | word-break: break-all; 70 | } 71 | 72 | .info .price { 73 | padding-right: 3px; 74 | width: 57px; 75 | height: 30px; 76 | background-color: #EB5055; 77 | position: absolute; 78 | top: 5px; 79 | right: -5px; 80 | font-size: 16px; 81 | color: #FFF; 82 | line-height: 30px; 83 | vertical-align: middle; 84 | text-align: center; 85 | overflow: visible; 86 | } 87 | 88 | .info .price:before { 89 | content: "¥"; 90 | } 91 | 92 | .info .name { 93 | margin-bottom: 6px; 94 | width: 100%; 95 | height: 1.6em; 96 | line-height: 1.6em; 97 | font-size: 15px; 98 | } 99 | 100 | .name a { 101 | color: #1B816C; 102 | text-decoration: none; 103 | } 104 | 105 | .name a:hover { 106 | color: #ED4E51; 107 | } 108 | 109 | .info .department, .info .place { 110 | width: 50%; 111 | float: left; 112 | font-size: 1em; 113 | color: #858D8E; 114 | } 115 | 116 | .info .place { 117 | text-align: right; 118 | } 119 | 120 | .info .school{ 121 | position: absolute; 122 | max-width: 100%; 123 | top: 168px; 124 | left: 0; 125 | background-color: #44c1a5; 126 | background-color: rgba(68,193,165,0.9); 127 | color: #fff; 128 | padding:0 10px; 129 | height: 32px; 130 | line-height: 32px; 131 | font-size: 16px; 132 | } 133 | 134 | .info .school span{ 135 | } 136 | 137 | .pages { 138 | text-align: center; 139 | } 140 | 141 | .rightbar{ 142 | background-color: #f23123; 143 | } 144 | /*list style end */ 145 | .rank-by { 146 | position: relative; 147 | width: 500px; 148 | height:40px; 149 | margin: 20px auto 0; 150 | } 151 | 152 | .rank-title-wr { 153 | position:relative; 154 | height: 60px; 155 | 156 | } 157 | 158 | .rank-title { 159 | float:left; 160 | width: 60px; 161 | height: 50px; 162 | margin-right:100px; 163 | 164 | } 165 | 166 | .rank-title.default { 167 | background-position: -10px -97px; 168 | } 169 | 170 | .rank-title.pri { 171 | background-position: -10px -39px; 172 | } 173 | 174 | .rank-title.hot { 175 | background-position: -10px -10px; 176 | } 177 | 178 | 179 | -------------------------------------------------------------------------------- /flea_market/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for flea_market project. 3 | 4 | Generated by 'django-admin startproject' using Django 1.10.2. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.10/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/1.10/ref/settings/ 11 | """ 12 | 13 | import os 14 | 15 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = '0ruaj07m!8fqnc!)pl#3w46qczd$mi%!9z_!#7v)%=50unfirq' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = [] 29 | 30 | 31 | # Application definition 32 | 33 | INSTALLED_APPS = [ 34 | 'django.contrib.admin', 35 | 'django.contrib.auth', 36 | 'django.contrib.contenttypes', 37 | 'django.contrib.sessions', 38 | 'django.contrib.messages', 39 | 'django.contrib.staticfiles', 40 | 'market', 41 | ] 42 | 43 | MIDDLEWARE = [ 44 | 'django.middleware.security.SecurityMiddleware', 45 | 'django.contrib.sessions.middleware.SessionMiddleware', 46 | 'django.middleware.common.CommonMiddleware', 47 | 'django.middleware.csrf.CsrfViewMiddleware', 48 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 49 | 'django.contrib.messages.middleware.MessageMiddleware', 50 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 51 | ] 52 | 53 | ROOT_URLCONF = 'flea_market.urls' 54 | 55 | TEMPLATES = [ 56 | { 57 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 58 | 'DIRS': [], 59 | 'APP_DIRS': True, 60 | 'OPTIONS': { 61 | 'context_processors': [ 62 | 'django.template.context_processors.debug', 63 | 'django.template.context_processors.request', 64 | 'django.contrib.auth.context_processors.auth', 65 | 'django.contrib.messages.context_processors.messages', 66 | ], 67 | }, 68 | }, 69 | ] 70 | 71 | WSGI_APPLICATION = 'flea_market.wsgi.application' 72 | 73 | 74 | # Database 75 | # https://docs.djangoproject.com/en/1.10/ref/settings/#databases 76 | 77 | DATABASES = { 78 | 'default': { 79 | 'ENGINE': 'django.db.backends.sqlite3', 80 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 81 | } 82 | } 83 | 84 | 85 | # Password validation 86 | # https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators 87 | 88 | AUTH_PASSWORD_VALIDATORS = [ 89 | { 90 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 91 | }, 92 | { 93 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 94 | }, 95 | { 96 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 97 | }, 98 | { 99 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 100 | }, 101 | ] 102 | 103 | 104 | # Internationalization 105 | # https://docs.djangoproject.com/en/1.10/topics/i18n/ 106 | 107 | LANGUAGE_CODE = 'en-us' 108 | 109 | TIME_ZONE = 'UTC' 110 | 111 | USE_I18N = True 112 | 113 | USE_L10N = True 114 | 115 | USE_TZ = True 116 | 117 | 118 | # Static files (CSS, JavaScript, Images) 119 | # https://docs.djangoproject.com/en/1.10/howto/static-files/ 120 | 121 | STATIC_URL = '/static/' 122 | LOGIN_URL = '/market/login/' 123 | MEDIA_URL = '/market/media/' 124 | MEDIA_ROOT = os.path.join(BASE_DIR,'market/media/') -------------------------------------------------------------------------------- /market/templates/market/message.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {% block title %}Welcome to STU fleamarket!{% endblock %} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 20 | 24 | 25 | 26 | 27 | 28 | 56 | 57 |
58 |
59 | 60 |
61 |
62 | 63 | 64 |
65 | {% for message in messages %} 66 |

发送者:{{ message.sender }}

67 |

发送内容:{{ message.content }}

68 |

发送时间:{{ message.send_time }}

69 |
70 |
71 | {% endfor %} 72 | 73 |
74 | 75 | 76 |
77 | 78 |
79 | 80 |
81 |
82 | 83 | 84 | 85 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /market/static/css/bootstrap-reboot.min.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v4.2.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}[hidden],template{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}html{-webkit-box-sizing:border-box;box-sizing:border-box}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}@-ms-viewport{width:device-width}html{font-size:16px;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:1rem;line-height:1.5;color:#373a3c;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #818a91}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}a{color:#0275d8;text-decoration:none}a:focus,a:hover{color:#014c8c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle}[role=button]{cursor:pointer}[role=button],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse;background-color:transparent}caption{padding-top:.75rem;padding-bottom:.75rem;color:#818a91;text-align:left;caption-side:bottom}th{text-align:left}label{display:inline-block;margin-bottom:.5rem}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,select,textarea{line-height:inherit}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit}input[type=search]{-webkit-appearance:none}output{display:inline-block}[hidden]{display:none!important} 2 | /*# sourceMappingURL=bootstrap-reboot.min.css.map */ -------------------------------------------------------------------------------- /market/templates/market/base.html: -------------------------------------------------------------------------------- 1 | 2 | {% load staticfiles %} 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | {% block title %}Welcome to STU fleamarket!{% endblock %} 13 | 14 | 15 | 16 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 82 | 83 |
84 |
85 | 91 |
92 |
93 | {% block body_block %}{% endblock %} 94 |
95 |
96 | 97 | 98 | 103 | 104 | 105 |
106 |
107 | 108 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /market/static/css/goods.css: -------------------------------------------------------------------------------- 1 | .ershou-details { 2 | width: 100%; 3 | } 4 | 5 | 6 | /*.ershou-info { 7 | background-color: #FFF; 8 | overflow: hidden; 9 | } 10 | */ 11 | 12 | .ershou-title { 13 | color: #1C826C; 14 | font-size: 18px; 15 | font-weight: 400; 16 | margin-bottom: 15px; 17 | word-break: break-all; 18 | padding-right: 33px; 19 | } 20 | 21 | .ershou-price { 22 | color: #EB5055; 23 | font-size: 2.33em; 24 | line-height: 1em; 25 | } 26 | 27 | .ershou-price:before { 28 | content: "¥"; 29 | font-size: 1em; 30 | color: inherit; 31 | vertical-align: middle; 32 | } 33 | 34 | .ershou-price .is-discount { 35 | display: inline; 36 | font-size: 12px; 37 | color: #666; 38 | vertical-align: middle; 39 | margin-left: 15px; 40 | } 41 | 42 | .ershou-detail { 43 | padding: 14px 25px 20px; 44 | font-size: 1.16em; 45 | list-style: none; 46 | } 47 | 48 | .ershou-detail li { 49 | /*height: 30px;*/ 50 | margin-top: 16px; 51 | } 52 | 53 | .ershou-detail li .name { 54 | float: left; 55 | width: 80px; 56 | height: 30px; 57 | text-align: right; 58 | } 59 | 60 | .name span { 61 | display: inline-block; 62 | min-width: 30px; 63 | padding: 7px 12px; 64 | background-color: #4BC0A5; 65 | color: #FFFFFF; 66 | text-align: center; 67 | white-space: nowrap; 68 | } 69 | 70 | .ershou-detail li .value { 71 | line-height: 30px; 72 | margin-left: 100px; 73 | /*padding: 7px 0;*/ 74 | color: #666666; 75 | } 76 | .ershou-detail .value-name{ 77 | color: #4BC0A5; 78 | font-size: 14px; 79 | padding-right: 22px; 80 | background-image: url(/resource/image/ico_seller.png); 81 | background-repeat: no-repeat; 82 | background-position: right 0; 83 | } 84 | .ershou-detail .value-name:hover{ 85 | color: #ffb300; 86 | background-position: right -29px; 87 | } 88 | 89 | 90 | .ershou-desc { 91 | margin-top: 20px; 92 | padding: 30px 90px; 93 | background-color: #FFF; 94 | background-image: url("/resource/image/info.png"); 95 | background-position: 12px 12px; 96 | background-repeat: no-repeat; 97 | text-align: left; 98 | } 99 | 100 | .desc { 101 | min-height: 50px; 102 | color: #666666; 103 | font-size: 1.17em; 104 | line-height: 23px; 105 | } 106 | 107 | #user_ph{ 108 | float: left; 109 | margin-right: 20px; 110 | width: 52px; 111 | height: 52px; 112 | vertical-align: middle; 113 | -webkit-border-radius: 100%; 114 | -moz-border-radius: 100%; 115 | border-radius: 100%; 116 | } 117 | 118 | #user_cmt{ 119 | float: right; 120 | width: 667px; 121 | } 122 | 123 | 124 | .comments { 125 | /* position: relative;*/ 126 | /* width: 525px;*/ 127 | width: 100%; 128 | float: left; 129 | padding: 10px; 130 | margin-top: 20px; 131 | background-color: #FFF; 132 | } 133 | 134 | .comments-title { 135 | 136 | width: 100px; 137 | height: 40px; 138 | /*padding: 9px 27px;*/ 139 | /* background-color: #4BC0A5;*/*/ 140 | 141 | /* background: url("/resource/image/comment.png") no-repeat;*/ 142 | /*color: #FFF;*/ 143 | 144 | } 145 | 146 | .comments-wr { 147 | margin-top: 10px; 148 | } 149 | 150 | div.comment { 151 | position: relative; 152 | padding-right: 45px; 153 | margin-bottom: 20px; 154 | } 155 | 156 | div.comment:after { 157 | content: ""; 158 | width: 0; 159 | height: 0; 160 | display: block; 161 | visibility: hidden; 162 | clear: both; 163 | } 164 | 165 | div.comment .avatar, .post-comment .avatar { 166 | margin-top:15px; 167 | margin:-left:10px; 168 | position: relative; 169 | width: 40px; 170 | height: 40px; 171 | border: 1px solid #4BC0A5; 172 | background-color: #FFF; 173 | } 174 | .post-comment{position: relative;} 175 | .comment-cover{position: absolute;z-index: 445;top:2px;right:46px;background-color: #4BC0A5;width: 56px;height: 60px;display: none;} 176 | .comment-cover .loader {display: inline-block;position: relative;width: 30px;height: 30px;vertical-align: middle;left: 50%;top: 50%;-webkit-transform:translate(-50%,-50%);} 177 | .comment-cover .loader-quart {border-radius: 50%; border: 4px solid rgba(255, 255, 255, 0.4);} 178 | .loader-quart:after {content: '';position: absolute;top: -4px;right: -4px;bottom: -4px;left: -4px;border-radius: 50%;border: 4px solid #f5f5f5; border-top-color: #CCCCCC;-webkit-animation: spin 1s linear infinite;animation: spin 1s linear infinite;} 179 | .right-comment-cover{right: 31%;} 180 | div.comment .avatar:before, .post-comment .avatar:before { 181 | content: ""; 182 | display: block; 183 | position: absolute; 184 | left: 0; 185 | top: 0; 186 | width: 44px; 187 | height: 44px; 188 | -webkit-border-radius: 100px; 189 | -moz-border-radius: 100px; 190 | border-radius: 100px; 191 | border: 2px solid #FFF; 192 | } 193 | 194 | .commentator { 195 | /*padding-top: 1px; 196 | margin-left: 62px; 197 | color: #666666; 198 | font-size: 1em; 199 | font-weight: bold;*/ 200 | display: inline-block; 201 | margin: 0 8px; 202 | } 203 | 204 | .rpy-to:before { 205 | content: "回复"; 206 | display: inline-block; 207 | margin: 0 8px; 208 | color: #999999; 209 | font-size: 1em; 210 | } 211 | 212 | p.comment { 213 | margin-left: 50px; 214 | /* color: #666666;*/ 215 | font-size: 1em; 216 | word-break:break-all; 217 | } 218 | 219 | .man { 220 | position: absolute; 221 | right: 0; 222 | top: 0; 223 | width: 30px; 224 | -webkit-transition: opacity .2s ease; 225 | -moz-transition: opacity .2s ease; 226 | -ms-transition: opacity .2s ease; 227 | -o-transition: opacity .2s ease; 228 | transition: opacity .2s ease; 229 | filter: alpha(opacity=0); 230 | } 231 | 232 | .man a { 233 | display: block; 234 | color: #00AC90; 235 | font-size: 1em; 236 | text-decoration: none; 237 | } 238 | 239 | div.comment:hover { 240 | border-right: 2px solid #4BC0A5; 241 | } 242 | 243 | /* 244 | div.comment:hover .man { 245 | display: block; 246 | opacity: 1; 247 | } 248 | */ 249 | 250 | .man a:hover { 251 | color: #FFB200; 252 | } 253 | 254 | .commenting, .commenting-unlogin { 255 | position: relative; 256 | border: 1px solid #4BC0A5; 257 | margin-right: 45px; 258 | margin-left: 60px; 259 | } 260 | 261 | .commenting:before, .commenting-unlogin:before { 262 | content: ""; 263 | display: block; 264 | position: absolute; 265 | left: -9px; 266 | top: -1px; 267 | width: 9px; 268 | height: 12px; 269 | background-image: url("/resource/image/commenting-tri.png"); 270 | background-repeat: no-repeat; 271 | background-color: #fefefe; 272 | } 273 | 274 | .commenting-unlogin:before { 275 | background-image: url("/resource/image/commenting-unlogin-tri.png"); 276 | } 277 | 278 | .commenting-unlogin, .tips { 279 | display: block; 280 | height: 60px; 281 | line-height: 60px; 282 | font-size: 1em; 283 | text-align: center; 284 | color: #00AC90; 285 | background-color: #F6F9F9; 286 | } 287 | 288 | .comment-input-wr-wr { 289 | margin-right: 80px; 290 | } 291 | 292 | .comment-input-wr { 293 | width: 100%; 294 | height: 60px; 295 | float: left; 296 | } 297 | 298 | .comment-input { 299 | width: 100%; 300 | height: 44px; 301 | padding: 8px; 302 | border: none; 303 | font-size: 1em; 304 | color: #00AC90; 305 | resize: none; 306 | outline: none; 307 | } 308 | 309 | .sub-comment, .comment-login { 310 | width: 56px; 311 | height: 60px; 312 | font-size: 1.33em; 313 | float: right; 314 | } 315 | 316 | .comment-login { 317 | background: url("/resource/image/comment-login.png") no-repeat; 318 | } 319 | .complain{ 320 | margin-left:20px; 321 | } -------------------------------------------------------------------------------- /market/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from market.models import Category,Goods,UserProfile,Comment,InstationMessage,User 3 | from market.forms import UserForm,UserProfieldForm,GoodsForm,CommentForm 4 | from django.contrib.auth import authenticate,login,logout 5 | from django.http import HttpResponseRedirect,HttpResponse 6 | from django.contrib.auth.decorators import login_required 7 | 8 | from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger 9 | from PIL import Image 10 | 11 | # Create your views here. 12 | 13 | 14 | def index(request): 15 | if request.user.is_authenticated: 16 | user = request.user 17 | user_profile = UserProfile.objects.get(user = user) 18 | message_unread = InstationMessage.objects.filter(receiver=user_profile, active=True).count() 19 | else: 20 | user_profile = [] 21 | message_unread = 0 22 | category_list = Category.objects.all() 23 | goods_list = Goods.objects.all().order_by('-publish_time') 24 | context_dic = {'categories':category_list,'user_profile':user_profile,'goodses':goods_list,'message_unread':message_unread} 25 | return render(request, 'market/index.html',context_dic) 26 | 27 | 28 | def category(request,category_id): 29 | if request.user.is_authenticated: 30 | user = request.user 31 | user_profile = UserProfile.objects.get(user = user) 32 | else: 33 | user_profile = [] 34 | page_list = [] 35 | try: 36 | category = Category.objects.get(pk=category_id) 37 | name = category.name 38 | if request.GET.get('rank'): 39 | rank = request.GET.get('rank') 40 | goodses_list = Goods.objects.filter(category=category).order_by('-'+rank) 41 | else: 42 | goodses_list = Goods.objects.filter(category=category) 43 | # 实现分页功能 44 | paginator = Paginator(goodses_list, 12) 45 | page = request.GET.get('page') 46 | goodses = paginator.page(page) 47 | except Category.DoesNotExist: 48 | pass 49 | except PageNotAnInteger: 50 | goodses = paginator.page(1) 51 | except EmptyPage: 52 | goodses = paginator.page(paginator.num_pages) 53 | 54 | for i in range(1,6): 55 | order = (int)((goodses.number-1) / 5) 56 | page_list.append(order*5+i) 57 | 58 | context_dic={'category':category,'category_name':name,'goodses':goodses,'page_list':page_list,'user_profile':user_profile} 59 | 60 | return render(request, 'market/category.html',context_dic) 61 | 62 | 63 | def goods_page(request,goods_id): 64 | if request.user.is_authenticated: 65 | user = request.user 66 | user_profile = UserProfile.objects.get(user = user) 67 | else: 68 | user_profile = [] 69 | comment_form = CommentForm() 70 | goods = Goods.objects.get(pk=goods_id) 71 | comment_list = Comment.objects.filter(goods=goods) 72 | context_dic = {'goods':goods,'comments':comment_list,'form':comment_form,'user_profile':user_profile} 73 | return render(request, 'market/goods.html',context_dic) 74 | 75 | 76 | @login_required 77 | def add_comment(request,goods_id): 78 | if request.method == 'POST': 79 | comment_form = CommentForm(request.POST) 80 | if comment_form.is_valid(): 81 | comment = comment_form.save(commit=True) 82 | goods = Goods.objects.get(pk=goods_id) 83 | user = request.user 84 | user_profile = UserProfile.objects.get(user=user) 85 | comment.user = user_profile 86 | comment.goods = goods 87 | comment.save() 88 | message = InstationMessage() 89 | message.sender = user_profile 90 | message.receiver = goods.seller 91 | message.content = comment.content 92 | message.save() 93 | 94 | return goods_page(request,goods_id) 95 | else: 96 | print(comment_form.errors) 97 | else: 98 | comment_form =CommentForm() 99 | return render(request, 'market/add_comment.html') 100 | 101 | 102 | @login_required 103 | def add_goods(request): 104 | if request.method == 'POST': 105 | goods_form = GoodsForm(request.POST) 106 | if goods_form.is_valid(): 107 | goods = goods_form.save(commit=True) 108 | user = request.user 109 | user_profile = UserProfile.objects.get(user=user) 110 | goods.seller = user_profile 111 | if 'picture' in request.FILES: 112 | goods.picture = request.FILES['picture'] 113 | print(goods.picture) 114 | goods.save() 115 | return index(request) 116 | else: 117 | print(goods_form.errors) 118 | else: 119 | goods_form = GoodsForm() 120 | 121 | return render(request, 'market/add_goods.html',{'form':goods_form}) 122 | 123 | 124 | def register(request): 125 | registered = False 126 | if request.method == 'POST': 127 | user_form = UserForm(data=request.POST) 128 | profile_form = UserProfieldForm(data=request.POST) 129 | 130 | if user_form.is_valid() and profile_form.is_valid(): 131 | user = user_form.save() 132 | user.set_password(user.password) 133 | user.save() 134 | profile = profile_form.save(commit=False) 135 | profile.user = user 136 | if 'avatar' in request.FILES: 137 | profile.avatar = request.FILES['avatar'] 138 | profile.save() 139 | registered = True 140 | 141 | return user_login(request) 142 | else: 143 | print(user_form.errors,profile_form.errors) 144 | else: 145 | user_form = UserForm() 146 | profile_form = UserProfieldForm() 147 | return render(request, 'market/register.html',{'user_form':user_form,'profile_form':profile_form,'registered':registered}) 148 | 149 | 150 | def user_login(request): 151 | if request.method == 'POST': 152 | username = request.POST.get('username') 153 | password = request.POST.get('password') 154 | user = authenticate(username=username,password=password) 155 | 156 | if user: 157 | if user.is_active: 158 | login(request,user) 159 | return HttpResponseRedirect('/market/') 160 | else: 161 | return HttpResponse("Your account is disabled.") 162 | else: 163 | print("Invid login details:{0},{1}".format(username,password)) 164 | return HttpResponse("Invalid login details supplied.") 165 | 166 | else: 167 | return render(request, 'market/login.html',{}) 168 | 169 | 170 | @login_required 171 | def about(request): 172 | return HttpResponse("This is about page.") 173 | 174 | 175 | @login_required 176 | def user_logout(request): 177 | logout(request) 178 | return HttpResponseRedirect('/market/') 179 | 180 | 181 | def profile(request,user_id): 182 | if request.user.is_authenticated: 183 | user = request.user 184 | user_profile = UserProfile.objects.get(user = user) 185 | else: 186 | user_profile = [] 187 | user = User.objects.get(pk=user_id) 188 | user = UserProfile.objects.get(user=user) 189 | goodses = Goods.objects.filter(seller=user) 190 | context_dic = {'profile':user,'user_profile':user_profile,'goodses':goodses} 191 | return render(request, 'market/profile.html',context_dic) 192 | 193 | 194 | def search(request): 195 | if request.user.is_authenticated: 196 | user = request.user 197 | user_profile = UserProfile.objects.get(user = user) 198 | else: 199 | user_profile = [] 200 | key_word = request.GET.get('keyword') 201 | category_list = Category.objects.all() 202 | goods_list = Goods.objects.filter(name__icontains=key_word) 203 | context_dic = {'categories':category_list,'user_profile':user_profile,'goodses':goods_list} 204 | return render(request, 'market/index.html',context_dic) 205 | 206 | @login_required 207 | def display_message(request): 208 | user = request.user 209 | user_profile = UserProfile.objects.get(user=user) 210 | messages = InstationMessage.objects.filter(receiver=user_profile).order_by('-send_time') 211 | for mes in messages: 212 | mes.active = False 213 | mes.save() 214 | context_dic = { 'user_profile': user_profile, 'messages': messages} 215 | return render(request, 'market/message.html', context_dic) 216 | 217 | -------------------------------------------------------------------------------- /market/templates/market/category.html: -------------------------------------------------------------------------------- 1 | 2 | {% load staticfiles %} 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | {{ category_name }} 13 | 14 | 15 | 16 | 17 | 18 | 19 | 23 | 24 | 25 | 26 | 27 | 69 | 70 |
71 |
72 | 79 | 80 |
81 | 82 | 96 | 97 | 98 |
99 | {% block body_block %} 100 |

{{ category_name }}

101 | {% if category %} 102 | {% if goodses %} 103 |
104 |
    105 | {% for goods in goodses %} 106 |
  • 107 | {% if goods.picture %} 108 |
    109 | {% else %} 110 |
    111 | {% endif %} 112 | 113 |
    114 | 115 |
    {{ goods.price }}
    116 |
    {{ goods.trade_location }}
    117 |
    118 |
  • 119 | {% endfor %} 120 |
121 |
122 | {% else %} 123 | No pages currently in category. 124 | {% endif %} 125 | {% else %} 126 | The specified category {{ category_name }} does not exist! 127 | {% endif %} 128 | 129 | {% endblock %} 130 |
131 | 132 |
133 | 156 |
157 | 158 |
159 | 160 | 161 |
162 | 163 |
164 |
165 |
166 | 我要发布 167 |
168 | 169 |
170 |
171 | 172 | 173 | 178 |
179 |

推荐网站

180 |
    181 |
  1. 知乎
  2. 182 |
  3. 牛课网
  4. 183 |
  5. V2ex
  6. 184 |
  7. LeetCode
  8. 185 |
  9. 学堂在线
  10. 186 |
187 |
188 | 189 |
190 | 191 |
192 |
193 | 194 | 195 | 196 |
197 |
198 | ©2016-12 STU 版权所有 199 | STARBT 200 |
201 | 202 | 203 |
204 | 205 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | -------------------------------------------------------------------------------- /market/templates/market/goods.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {% block title %}Welcome to STU fleamarket!{% endblock %} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 20 | 24 | 25 | 26 | 27 | 28 | 56 | 57 |
58 |
59 |
60 |
61 | 62 | 63 |
64 |
65 |
66 |
67 |
68 |
69 | {% if goods.picture %} 70 |
71 | {% else %} 72 |
73 | {% endif %} 74 |
75 | 76 |
77 |
78 |
79 |

{{ goods.name }}

80 |
81 | {{ goods.price }} 82 | 83 | {%if goods.discount == 1 %} 84 | 可小刀 85 | {% else %} 86 | 不可刀 87 | {% endif %} 88 | 89 |
90 |

浏览了12

91 |
92 | 93 |
    94 |
  • 95 |
    交易地点
    96 |
    {{ goods.trade_location }}
    97 |
  • 98 |
  • 99 |
    卖家
    100 | 101 |
    102 | {{ goods.seller }} 103 | 104 |
    105 |
    106 |
  • 107 | 111 |
  • 112 |
    手机
    113 |
    114 | {{ goods.goods_phone }} 115 | 116 | 117 |
    118 |
  • 119 |
  • 120 |
    QQ
    121 |
    122 | {{goods.goods_qq}} 123 | 124 |
    125 |
  • 126 |
  • 127 |
    发布时间
    128 |
    {{ goods.publish_time }}
    129 |
  • 130 |
131 | 132 |
133 |
134 | 135 |
136 |
137 | 138 |
139 |
140 | 141 |
142 |
143 | 144 | 145 | 146 | {{ goods.description }} 147 |
148 |
149 | 150 | 151 | 152 | 153 |
154 | 155 |

评论

156 |
157 |
158 | {% if comments %} 159 | {% for comment in comments %} 160 |
161 | 头像 162 | 165 |

{{ comment.content }}

166 |
167 | 168 | 回复 169 |
170 |
171 | {% endfor %} 172 | {% endif %} 173 | 174 |
175 |
176 | 177 |
178 | 179 | 头像 180 | 181 |
182 |
183 |
184 |
185 | {% csrf_token %} 186 | {{ form.content }} 187 | 188 |
189 |
190 | 191 | 192 | 193 | 194 |
195 |
196 |
197 |
198 |
199 | 200 | 201 |
202 | 203 |
204 |
205 |
206 |
207 |
208 |
209 | 210 | 211 | 212 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | -------------------------------------------------------------------------------- /market/templates/market/add_goods.html: -------------------------------------------------------------------------------- 1 | 2 | {% load staticfiles %} 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | {% block title %}Welcome to STU fleamarket!{% endblock %} 13 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 | 25 | 26 | 52 | 53 |
54 |
55 | 62 | 63 | 64 |
65 |
66 | 67 | {% csrf_token %} 68 | 76 |
77 | 78 | 79 | 80 |
81 |
82 | 84 |
{{ form.picture }}
85 |
86 | 87 | 99 |
100 | 101 |
102 |
103 |
104 |
商品名称
105 |
106 |
107 | {{ form.name }} 108 | 109 |
110 |
111 |
112 |
113 |
商品详情
114 |
115 |
116 | {{ form.description }} 117 | 118 | 119 |
120 |
121 |
122 |
123 |
交易地点
124 |
125 |
126 | {{ form.trade_location }} 127 | 128 |
129 |
130 |
131 |
132 |
价格
133 |
134 |
135 | 136 | {{ form.price }} 137 |
138 |
139 |
140 |
141 |
分类
142 |
143 | 145 |
146 | {{ form.category }} 147 |
148 | 149 | 150 | 164 |
165 |
166 | 167 |
168 |
讲价
169 |
170 |
171 |
172 | {{ form.discount }} 173 |
174 | 177 |
178 |
179 |
180 | 181 |
182 |
联系方式
183 |
(至少选填一项)
184 |
185 |
186 |
187 | 188 |
189 | 190 |
191 |
QQ
192 |
193 |
194 | 195 | 196 | {{ form.goods_qq }} 197 |
198 |
199 |
200 | 201 |
202 |
手机
203 |
204 |
205 | 206 | {{ form.goods_phone }} 207 |
208 |
209 |
210 |
211 | 212 | 217 | 218 | 220 | 221 |
222 |
223 | 224 | 226 |
227 | 228 |
229 | 230 | 231 | 232 |
233 | 234 |
235 |
236 |
237 | 我要发布 238 |
239 | 240 |
241 |
242 | 243 | 244 | 248 |
249 |

推荐网站

250 |
    251 |
  1. 知乎
  2. 252 |
  3. 牛课网
  4. 253 |
  5. V2ex
  6. 254 |
  7. LeetCode
  8. 255 |
  9. 学堂在线
  10. 256 |
257 |
258 | 259 |
260 |
261 |
262 | 263 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | -------------------------------------------------------------------------------- /market/static/css/add_goods.css: -------------------------------------------------------------------------------- 1 | .release-icon-main { 2 | display: block; 3 | width: 60px; 4 | height: 60px; 5 | margin: 0 auto; 6 | } 7 | 8 | .wave-fluid { 9 | display: block; 10 | width: 177px; 11 | height: 6px; 12 | margin: 10px auto; 13 | } 14 | 15 | .release-title { 16 | display: block; 17 | width: 110px; 18 | height: 27px; 19 | margin: 10px auto ; 20 | text-indent: -9999em; 21 | } 22 | 23 | .edit-title { 24 | width: 110px; 25 | height: 27px; 26 | margin: 12px auto 0; 27 | background: url("/resource/image/edit-title.png") no-repeat; 28 | text-indent: -9999em; 29 | } 30 | 31 | .clone-target{ 32 | display: none; 33 | } 34 | .upload-area{ 35 | display: inline-block; 36 | } 37 | .upload-area>div{ 38 | width: 160px; 39 | height: 160px; 40 | } 41 | .init-up #upload{ 42 | margin: 0 auto; 43 | z-index: 50; 44 | position: relative; 45 | top: 2px; 46 | } 47 | div.init-up { 48 | width: 160px; 49 | height: 160px; 50 | margin: auto; 51 | position: relative; 52 | top: 32px; 53 | } 54 | div.init-up:hover .up-bg{ 55 | transition:all 0.3s; 56 | -webkit-transform: rotate(-180deg); 57 | -moz-transform: rotate(-180deg); 58 | -ms-transform: rotate(-180deg); 59 | -o-transform: rotate(-180deg); 60 | transform: rotate(-180deg); 61 | } 62 | .init-up .uploadify:hover 63 | #upload-0,#upload-1,#upload-2,#upload-3,#upload-4{ 64 | width: 100%; 65 | height: 100%; 66 | z-index: 100; 67 | } 68 | .photos-selected{ 69 | position: relative; 70 | height: 100%; 71 | width: 100%; 72 | /*display: none;*/ 73 | } 74 | .upload-wr{ 75 | width: 860px; 76 | height: 220px; 77 | background-color: rgb(246,249,249); 78 | margin: 0 auto; 79 | margin-top: 27px; 80 | } 81 | .camera-button-wr{ 82 | width: 160px; 83 | height: 160px; 84 | /* background-color: transparent;*/ 85 | margin:auto; 86 | border-top: 30px solid rgb(246,249,249); 87 | } 88 | .photo-area{ 89 | position: relative; 90 | } 91 | .up-bg{ 92 | display: none; 93 | } 94 | .photo-caution{ 95 | display: none; 96 | } 97 | .init-up .up-bg { 98 | display: block; 99 | width: 160px; 100 | height: 160px; 101 | position: absolute; 102 | left: 0; 103 | top: 0; 104 | -webkit-border-radius: 50%; 105 | -moz-border-radius: 50%; 106 | border-radius: 50%; 107 | background-image:-moz-linear-gradient(rgb(68,193,165) 0%,rgb(255,198,0) 100%); 108 | background-image:-webkit-gradient(linear,color-stop(0, rgb(68,193,165)),color-stop(1, rgb(255,198,0))); 109 | background-image:-webkit-linear-gradient(rgb(68,193,165) 0%,rgb(255,198,0) 100%); 110 | background-image:-o-linear-gradient(rgb(68,193,165) 0%,rgb(255,198,0) 100%); 111 | background-image:-ms-linear-gradient(rgb(68,193,165) 0%,rgb(255,198,0) 100%); 112 | background-image:linear-gradient(rgb(68,193,165) 0%,rgb(255,198,0) 100%); 113 | -ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#ff44c1a5,endColorstr=#ffffc600)"; 114 | filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#ff44c1a5,endColorstr=#ffffc600); 115 | cursor: pointer; 116 | } 117 | .over-up .photo-caution{ 118 | display: block; 119 | height: 35px; 120 | font-size: 12px; 121 | line-height: 35px; 122 | position: absolute; 123 | bottom: -5px; 124 | width: 860px; 125 | text-align: center; 126 | } 127 | .over-up { 128 | width: 100%; 129 | height: 100%; 130 | /*margin-left: 30px;*/ 131 | position: relative; 132 | } 133 | .init-up .uploadify-button { 134 | width: 156px !important; 135 | height: 156px !important; 136 | position: relative; 137 | left: 2px; 138 | } 139 | .over-up div.upload-area { 140 | position: relative; 141 | margin-left: 30px; 142 | top: 35px; 143 | } 144 | .camera-button-wr:hover .upload-bg { 145 | } 146 | #upload-0:hover .uploadify-button span{ 147 | background-position: -10px -10px; 148 | } 149 | #upload-4,#upload-3,#upload-2,#upload-1{ 150 | top: 0; 151 | } 152 | .photo{ 153 | position: relative; 154 | top: 24px; 155 | display:inline-block; 156 | background-color: white; 157 | width:160px; 158 | height:160px; 159 | margin-left: 30px; 160 | /* Firefox v3.5+ */ 161 | -moz-box-shadow:1px 1px 1px rgba(0,0,0,0.15); 162 | /* Safari v3.0+ and by Chrome v0.2+ */ 163 | -webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.15); 164 | /* Firefox v4.0+ , Safari v5.1+ , Chrome v10.0+, IE v10+ and by Opera v10.5+ */ 165 | box-shadow:1px 1px 1px rgba(0,0,0,0.15); 166 | -ms-filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=1,OffY=1,Color=#26000000,Positive=true)"; 167 | filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=1,OffY=1,Color=#26000000,Positive=true); 168 | } 169 | .has{ 170 | display: block; 171 | } 172 | .photo-caution{ 173 | width: 100%; 174 | position: absolute; 175 | bottom: 0; 176 | line-height: 35px; 177 | text-align: center; 178 | color: rgb(189,191,197); 179 | font-size: 14px; 180 | } 181 | .photo1{ 182 | left: 95px; 183 | } 184 | .photo2{ 185 | left: 285px; 186 | } 187 | .photo3{ 188 | left: 475px; 189 | } 190 | .photo4{ 191 | left: 665px; 192 | } 193 | .photo div{ 194 | width: 140px; 195 | height: 140px; 196 | position: relative; 197 | left: 10px; 198 | top: 10px; 199 | } 200 | .photo img { 201 | max-width: 140px; 202 | max-height: 140px; 203 | display: block; 204 | margin: auto; 205 | } 206 | 207 | .photo .close { 208 | /*display: none;*/ 209 | position: absolute; 210 | top: -5px; 211 | right: -5px; 212 | width: 20px; 213 | height: 20px; 214 | -webkit-border-radius: 100%; 215 | -moz-border-radius: 100%; 216 | border-radius: 100%; 217 | cursor: pointer; 218 | background: url("/resource/image/close.png") -10px -40px no-repeat; 219 | } 220 | 221 | .photo .close:hover { 222 | background-position: -10px -10px; 223 | } 224 | 225 | .photo .processbar { 226 | position: absolute; 227 | width: 0; 228 | height: 10px; 229 | top: 0; 230 | left: 0; 231 | z-index: 100; 232 | background-color: rgb(255, 178, 0); 233 | } 234 | 235 | .photo.uploadComplete .processbar { 236 | display: none; 237 | } 238 | 239 | .form-wr { 240 | width: 860px; 241 | margin: 0 auto; 242 | padding: 40px 0 30px; 243 | background: #FFF; 244 | } 245 | 246 | .form-item { 247 | width: 100%; 248 | height: 35px; 249 | margin-bottom: 20px; 250 | } 251 | 252 | .form-item:after { 253 | content: ""; 254 | width: 0; 255 | height: 0; 256 | display: block; 257 | visibility: hidden; 258 | clear: both; 259 | } 260 | 261 | .form-key, .form-contact { 262 | display: table; 263 | width: 25.5%; 264 | height: 100%; 265 | text-align: right; 266 | color: #444444; 267 | font-size: 1.17em; 268 | line-height: 1em; 269 | float: left; 270 | } 271 | 272 | .form-key span { 273 | display: table-cell; 274 | vertical-align: middle; 275 | } 276 | 277 | .form-value { 278 | height: 100%; 279 | margin-left: 2.8%; 280 | float: left; 281 | } 282 | 283 | .form-item.xl { 284 | height: 80px; 285 | margin-bottom: 30px; 286 | } 287 | 288 | .l .form-value, .xl .form-value { 289 | width: 52.2%; 290 | } 291 | 292 | .form-value-l{ 293 | position: relative; 294 | width: 26.1%; 295 | float: left; 296 | display: none; 297 | } 298 | .m .form-value { 299 | width: 26.1%; 300 | } 301 | 302 | .form-input-wr,.form-input-l-wr { 303 | border: 1px solid rgb(208,224,226); 304 | background-color: rgb(246,249,249); 305 | -webkit-border-radius: 7px; 306 | -moz-border-radius: 7px; 307 | border-radius: 7px; 308 | padding: 5px 7px; 309 | overflow: hidden; 310 | position: relative; 311 | } 312 | 313 | .form-value-l{ 314 | margin-left: 10px; 315 | } 316 | .form-input-wr.focus { 317 | border-color: #64CBB3; 318 | background-color: #FFFFFF; 319 | } 320 | 321 | 322 | .goods-cat .form-value,.goods-place .form-value{ 323 | position: relative; 324 | } 325 | 326 | .goods-cat .form-input-wr ,.goods-cat .form-input-l-wr,.goods-place .form-input-wr{ 327 | color: #858E8F; 328 | font-size: 1.17em; 329 | text-align: center; 330 | line-height: 30px; 331 | vertical-align: middle; 332 | cursor: pointer; 333 | } 334 | 335 | .goods-cat .form-input-wr span ,.form-input-l-wr span,.goods-place .form-input-wr span{ 336 | cursor: pointer; 337 | } 338 | 339 | .goods-cat .select,.goods-place .select { 340 | display: none; 341 | width: 100%; 342 | position: absolute; 343 | left: 0; 344 | top: 0; 345 | padding: 20px 0 0; 346 | border: 1px solid rgb(208,224,226); 347 | background-color: #FFF; 348 | -moz-border-radius:6px; 349 | -webkit-border-radius:6px; 350 | border-radius:6px; 351 | list-style: none; 352 | 353 | } 354 | .goods-cat .select{ 355 | z-index: 100; 356 | } 357 | 358 | .goods-place .select{ 359 | z-index: 10; 360 | } 361 | 362 | .goods-place .select{ 363 | position: absolute; 364 | } 365 | .select li { 366 | margin-bottom: 20px; 367 | color: #666666; 368 | font-size: 1.17em; 369 | text-align: center; 370 | cursor: pointer; 371 | } 372 | 373 | .select li span { 374 | position: relative; 375 | cursor: pointer; 376 | } 377 | 378 | .select li:hover span { 379 | color: #32C3A5; 380 | } 381 | 382 | .select li:hover span:before { 383 | content: ""; 384 | display: inline-block; 385 | width: 8px; 386 | height: 8px; 387 | position: absolute; 388 | left: -15px; 389 | top: 50%; 390 | margin-top: -4px; 391 | -webkit-border-radius: 100%; 392 | -moz-border-radius: 100%; 393 | border-radius: 100%; 394 | background-color: #32C3A5; 395 | } 396 | 397 | .form-input-wr input { 398 | width: 100%; 399 | height: 28px; 400 | color: #444; 401 | font-size: 1.17em; 402 | line-height: 28px; 403 | vertical-align: middle; 404 | background-color: transparent; 405 | } 406 | 407 | .form-input-wr textarea { 408 | color: #444; 409 | } 410 | .goods-price .form-input-wr:before { 411 | content: "¥"; 412 | text-align: center; 413 | display: block; 414 | width: 30px; 415 | height:40px; 416 | position: absolute; 417 | left: 0; 418 | float: left; 419 | color: #858E8F; 420 | font-size: 1.33em; 421 | line-height: 40px; 422 | vertical-align: middle; 423 | top: 0; 424 | } 425 | 426 | .goods-price .form-input-wr{ 427 | padding-left: 30px; 428 | position: relative; 429 | } 430 | 431 | .goods-discount .form-input-wr span { 432 | padding-left:30px; 433 | float: left; 434 | width: 49%; 435 | color: #858E8F; 436 | font-size: 1.17em; 437 | text-align: center; 438 | line-height: 28px; 439 | vertical-align: middle; 440 | cursor: pointer; 441 | } 442 | 443 | .goods-discount .form-input-wr span.sel { 444 | color: #00AC90; 445 | } 446 | 447 | #desc { 448 | width: 100%; 449 | height: 68px; 450 | font-size: 1.17em; 451 | resize: none; 452 | background-color: transparent; 453 | } 454 | 455 | span.yes { 456 | border-right: 1px solid #BAC8CA; 457 | } 458 | 459 | .form-contact { 460 | display: block; 461 | height: auto; 462 | } 463 | 464 | .form-least { 465 | float: left; 466 | color: #858D8E; 467 | font-size: 1.17em; 468 | line-height: 1em; 469 | margin-bottom: 10px; 470 | } 471 | 472 | .form-sep-form { 473 | width: 62%; 474 | margin: 0 auto; 475 | } 476 | 477 | .form-select { 478 | display: block; 479 | margin-top: 20px; 480 | } 481 | 482 | .form-tip { 483 | margin-top: 20px; 484 | margin-left: 28.3%; 485 | color: #858E8F; 486 | font-size: 1em; 487 | line-height: 1em; 488 | } 489 | 490 | .form-share-wr { 491 | margin-top: 20px; 492 | margin-left: 28.3%; 493 | } 494 | 495 | .form-share-wr label { 496 | display: table; 497 | } 498 | 499 | .form-share-wr label input { 500 | display: table-cell; 501 | vertical-align: middle; 502 | } 503 | 504 | .form-share-wr label span { 505 | display: table-cell; 506 | vertical-align: middle; 507 | text-indent: 5px; 508 | color: #666666; 509 | font-size: 1em; 510 | } 511 | 512 | .form-share-wr label span a{ 513 | color: rgb(60,194,165); 514 | } 515 | 516 | .form-submit { 517 | width: 24%; 518 | height: 45px; 519 | margin-left: 28.3%; 520 | margin-top: 30px; 521 | background: url("/resource/image/release-form-button.png") center center no-repeat; 522 | background-color: rgb(60,194,165); 523 | -moz-border-radius:23px; 524 | -webkit-border-radius:23px; 525 | border-radius:23px; 526 | transition:all .2s; 527 | text-indent: -9999em; 528 | cursor: pointer; 529 | } 530 | .form-submit:hover{ 531 | opacity: 0.9; 532 | } 533 | 534 | .form-submit2 { 535 | width: 24%; 536 | height: 45px; 537 | margin-left: 28.3%; 538 | margin-top: 30px; 539 | background: url("/resource/image/edit-form-button.png") center center no-repeat; 540 | background-color: rgb(60,194,165); 541 | -moz-border-radius:23px; 542 | -webkit-border-radius:23px; 543 | border-radius:23px; 544 | transition:all .2s; 545 | text-indent: -9999em; 546 | cursor: pointer; 547 | } 548 | .form-submit2:hover{ 549 | opacity: 0.9; 550 | } 551 | 552 | .form-alert:before{ 553 | content: '涓嶈兘涓虹┖'; 554 | color: rgb(235,80,83); 555 | position: absolute; 556 | line-height: 40px; 557 | top: 0; 558 | left: 10px; 559 | } 560 | 561 | 562 | 563 | 564 | -------------------------------------------------------------------------------- /market/static/css/profile.css: -------------------------------------------------------------------------------- 1 | .main{ 2 | 3 | } 4 | .top{ 5 | margin-left:50px; 6 | margin-top: 50px; 7 | height: 220px; 8 | } 9 | #user_photo{ 10 | background: #F6F9F9; 11 | position: relative; 12 | padding: 20px; 13 | width: 220px; 14 | height: 220px; 15 | } 16 | #user_photo img{ 17 | width: 180px; 18 | height: 180px; 19 | border-radius: 100%; 20 | -webkit-border-radius: 100%; 21 | -moz-border-radius: 100%; 22 | -ms-border-radius: 100%; 23 | cursor: pointer; 24 | } 25 | 26 | #change_ph{ 27 | position: absolute; 28 | top: 20px; 29 | left: 20px; 30 | display: none; 31 | } 32 | #user_msg{ 33 | margin-left:10px; 34 | background: #fff; 35 | float: right; 36 | width: 700px; 37 | height: 220px; 38 | } 39 | .name{ 40 | font: 26px "Microsoft YaHei"; 41 | margin: 20px 0px 0px 20px; 42 | } 43 | .has_sell{ 44 | font-size: 16px; 45 | color: #878787; 46 | line-height: 120%; 47 | margin-top: 10px; 48 | margin-left: 20px; 49 | } 50 | .seller_attr{ 51 | border-left: 4px solid #00ac90; 52 | margin-top: 22px; 53 | margin-left: 20px; 54 | padding-left: 20px; 55 | } 56 | .seller_attr>li{ 57 | color: #00ac90; 58 | font-size: 14px; 59 | line-height: 120%; 60 | padding:6px 0; 61 | list-style: none; 62 | } 63 | .seller_attr>li>span{ 64 | display: inline-block; 65 | width: 50px; 66 | } 67 | .seller_attr>li a{ 68 | font-size: 12px; 69 | color: #858D8E; 70 | } 71 | .grade_prof{ 72 | margin-left: 10px; 73 | height: 32px; 74 | vertical-align: bottom; 75 | } 76 | .about_level{ 77 | float: right; 78 | font: 12px "Microsoft YaHei"; 79 | color: #858E8F; 80 | text-decoration: none; 81 | margin: 30px 20px 0px 0px ; 82 | } 83 | .about_level:hover{ 84 | text-decoration: underline; 85 | } 86 | #need_value{ 87 | background: #00AC90; 88 | position: absolute; 89 | bottom: 0px; 90 | height: 20px; 91 | z-index: 50; 92 | width: 100%; 93 | } 94 | #got_value{ 95 | background: #FFB200; 96 | position: absolute; 97 | bottom: 0px; 98 | height: 20px; 99 | z-index: 60; 100 | width: 100px; 101 | } 102 | #grade_value_btn{ 103 | position: absolute; 104 | bottom: -5px; 105 | left: 90px; 106 | z-index: 70; 107 | } 108 | #value_box{ 109 | background: url("/resource/image/value_box.png") center bottom no-repeat; 110 | position: absolute; 111 | bottom: 30px; 112 | left: 35px; 113 | z-index: 70; 114 | width: 140px; 115 | height: 105px; 116 | } 117 | #value_box li{ 118 | color: #FFFFFF; 119 | list-style: none; 120 | font: 14px "Microsoft YaHei"; 121 | margin: 8px 0px 0px 25px; 122 | } 123 | #middle_nav{ 124 | background: #fff; 125 | border-top: 4px solid #00AC90; 126 | height: 55px; 127 | 128 | margin-top: 30px; 129 | } 130 | #middle_nav li{ 131 | margin-left:0px; 132 | float: left; 133 | list-style: none; 134 | height: 100%; 135 | width: 184px; 136 | } 137 | #middle_nav li a{ 138 | margin-left:5px; 139 | display: block; 140 | height: 55px; 141 | color: #444; 142 | font: 16px/54px "Microsoft YaHei"; 143 | text-decoration: none; 144 | text-align: center; 145 | } 146 | #middle_nav li:hover{ 147 | background: #00AC90; 148 | } 149 | #middle_nav li:hover a{ 150 | color: #fff; 151 | } 152 | #middle_nav li.on{ 153 | background: #00AC90; 154 | } 155 | #middle_nav li.on a{ 156 | color: #fff; 157 | } 158 | #my_info{ 159 | background: #fff; 160 | width: 800px; 161 | margin-top: 20px; 162 | padding-bottom: 20px; 163 | padding: 40px 60px; 164 | 165 | } 166 | #my_info li{ 167 | list-style: none; 168 | } 169 | #account_info h2,#base_info h2{ 170 | border-bottom: 1px solid #00AC90; 171 | font: 16px "Microsoft YaHei"; 172 | color: #00AC90; 173 | padding-bottom: 7px; 174 | width: 480px; 175 | margin: 20px; 176 | } 177 | .infos{ 178 | color: #444; 179 | font: 14px "Microsoft YaHei"; 180 | margin: 10px 0px 0px 20px; 181 | } 182 | #my_info .infos li{ 183 | display: inline-block; 184 | zoom: 1; 185 | *display: inline; 186 | width: 60px; 187 | text-align: left; 188 | line-height: 30px; 189 | vertical-align: middle; 190 | } 191 | #my_info .infos li.right_info{ 192 | display: inline; 193 | text-align: left; 194 | margin-left: 30px; 195 | } 196 | #my_info .right_info span{ 197 | display: inline; 198 | } 199 | #my_info .right_info input{ 200 | display: none; 201 | border: 1px solid #C4CBCE; 202 | -webkit-border-radius: 15px; 203 | -moz-border-radius: 15px; 204 | -ms-border-radius: 15px; 205 | width: 180px; 206 | height: 30px; 207 | text-indent: 16px; 208 | *line-height: 30px; 209 | } 210 | #my_info .right_info input:focus{ 211 | border: 1px solid #3CC2A5; 212 | } 213 | 214 | #base_info{ 215 | margin-top: 30px; 216 | } 217 | #base_info h2{ 218 | position: relative; 219 | } 220 | #edit_info,#save_info{ 221 | background: #fff; 222 | border: 1px solid #4BC0A5; 223 | text-align: center; 224 | line-height: 26px; 225 | width: 68px; 226 | position: absolute; 227 | right: 0px; 228 | bottom: -13px; 229 | display: block; 230 | border-radius: 13px; 231 | -webkit-border-radius: 13px; 232 | -moz-border-radius: 13px; 233 | -ms-border-radius: 13px; 234 | cursor: pointer; 235 | } 236 | #edit_info:hover{ 237 | background: #4BC0A5; 238 | color: #fff; 239 | } 240 | #save_info{ 241 | display: none; 242 | background: #4BC0A5; 243 | color: #fff; 244 | } 245 | #save_info:hover{ 246 | background: #fff; 247 | color: #4BC0A5; 248 | } 249 | 250 | #my_enshrine{ 251 | width: 920px; 252 | margin-top: 20px; 253 | padding-bottom: 20px; 254 | } 255 | .enshr_each{ 256 | background: #fff; 257 | height: 140px; 258 | margin-top: 10px; 259 | margin-right:20px; 260 | } 261 | .enshr_ph{ 262 | width: 140px; 263 | height: 140px; 264 | } 265 | 266 | .enshr_ph:hover{ 267 | opacity: .85; 268 | } 269 | .enshr_info{ 270 | 271 | position: relative; 272 | float: right; 273 | width: 740px; 274 | padding: 20px; 275 | } 276 | .enshr_info_price{ 277 | color: #ed4e51; 278 | font-size: 16px; 279 | float: right; 280 | margin-right: 48px; 281 | } 282 | .enshr_info_address{ 283 | color: #858E8F; 284 | font-size: 14px; 285 | padding-left: 22px; 286 | background-image: url(/resource/image/rank-icons.png); 287 | background-repeat: no-repeat; 288 | background-position: -10px -12px; 289 | display: inline-block; 290 | height: 20px; 291 | } 292 | .enshr_info h2 { 293 | margin-bottom: 10px; 294 | } 295 | .enshr_info h2 a{ 296 | color: #1b816c; 297 | font: 14px "Microsoft YaHei"; 298 | text-decoration: none; 299 | } 300 | .enshr_info h2 a:hover{ 301 | color: #EB5055; 302 | } 303 | .enshr_info p{ 304 | color: #666; 305 | font: 12px "Microsoft YaHei"; 306 | margin-bottom: 10px; 307 | height: 35px; 308 | overflow: auto; 309 | } 310 | .enshr_state{ 311 | position: absolute; 312 | bottom: -10px; 313 | width: 100%; 314 | } 315 | 316 | .onsaling,.auto_out{ 317 | color: #FFB200; 318 | font: 12px "Microsoft YaHei"; 319 | 320 | } 321 | .sold,.auto_delete{ 322 | color: #EB5054; 323 | font: 12px "Microsoft YaHei"; 324 | 325 | } 326 | .sold_out{ 327 | color: #999; 328 | font: 12px "Microsoft YaHei"; 329 | 330 | } 331 | .enshrine_it{ 332 | font: 12px "Microsoft YaHei"; 333 | float: right; 334 | margin-right: 50px; 335 | display: block; 336 | color: #4BC0A5; 337 | border: 1px solid #4BC0A5; 338 | padding: 3px 16px; 339 | -webkit-border-radius: 13px; 340 | -moz-border-radius: 13px; 341 | -ms-border-radius: 13px; 342 | cursor: pointer; 343 | } 344 | #my_messages h1 span.enshrine_it:hover{ 345 | color: #fff; 346 | background: #4BC0A5; 347 | } 348 | #my_enshrine .enshr_state span.enshrine_it:hover,#my_products .enshr_state span.enshrine_it:hover{ 349 | color: #FFC600; 350 | border: 1px solid #FFC600; 351 | } 352 | #my_products{ 353 | width: 920px; 354 | margin-top: 20px; 355 | padding-bottom: 20px; 356 | } 357 | #my_products h1{ 358 | width: 200px; 359 | height: 22px; 360 | overflow: hidden; 361 | text-indent: 200px; 362 | white-space: nowrap; 363 | } 364 | #onsale_pro h1{ 365 | background: url("/resource/image/onsailing.png") no-repeat; 366 | } 367 | #sold_out_pro h1{ 368 | margin-top: 20px; 369 | background: url("/resource/image/sold_out.png") no-repeat; 370 | } 371 | .make_edition{ 372 | margin-right: 10px; 373 | } 374 | #my_messages{ 375 | background: #fff; 376 | margin-top: 20px; 377 | padding-bottom: 20px; 378 | padding: 40px 60px 0px 22px ; 379 | overflow: hidden; 380 | } 381 | #my_messages h1{ 382 | position: relative; 383 | color: #00AC90; 384 | border-bottom: 1px solid #00AC90; 385 | font: 16px "Microsoft YaHei"; 386 | padding-bottom: 10px; 387 | margin-left: 22px; 388 | } 389 | #my_messages h1 span{ 390 | background: #fff; 391 | position: absolute; 392 | bottom: -10px; 393 | right: -50px; 394 | } 395 | .each_msg{ 396 | position: relative; 397 | background: #fff; 398 | height: 100px; 399 | margin-top: 17px; 400 | padding-left: 22px; 401 | } 402 | .each_msg.unread{ 403 | background: #fff; 404 | background: url("/resource/image/unread.png") center left no-repeat; 405 | } 406 | 407 | .msg_ph{ 408 | width: 80px; 409 | height: 80px; 410 | border-radius: 100%; 411 | -webkit-border-radius: 100%; 412 | -moz-border-radius: 100%; 413 | -ms-border-radius: 100%; 414 | cursor: pointer; 415 | } 416 | .ensh_tips{ 417 | position: relative; 418 | float: right; 419 | width: 705px; 420 | height: 80px; 421 | } 422 | .msg_border{ 423 | margin-top: 15px; 424 | background: #E3EEEC; 425 | height: 1px; 426 | width: 815px; 427 | } 428 | .enshrine_yous,.reply_yours,.cmd_yours,.sold_out_yours,.delete_yours{ 429 | color: #444; 430 | font: 12px "Microsoft YaHei"; 431 | } 432 | .which_pro{ 433 | position: absolute; 434 | bottom: 0px; 435 | font: 12px "Microsoft YaHei"; 436 | color: #7F7F7F; 437 | width: 700px; 438 | } 439 | .which_pro span a{ 440 | color: #197F6C; 441 | text-decoration: none; 442 | font: 12px "Microsoft YaHei"; 443 | } 444 | .which_pro span a:hover{ 445 | color: #EB5054; 446 | } 447 | .which_pro:hover .specific{ 448 | display: inline; 449 | } 450 | .specific{ 451 | display: none; 452 | color: #7F7F7F; 453 | float: right; 454 | text-decoration: none; 455 | font: 12px "Microsoft YaHei"; 456 | } 457 | .sold_out_yours p a{ 458 | color: #E25A44; 459 | text-decoration: none; 460 | font: 12px "Microsoft YaHei"; 461 | } 462 | .ensh_tips p{ 463 | line-height: 24px; 464 | } 465 | .reason{ 466 | color: #E25A44; 467 | } 468 | #more_msg{ 469 | border: 1px solid #44C1A5; 470 | margin: 35px auto; 471 | width: 360px; 472 | height: 38px; 473 | border-radius: 19px; 474 | -webkit-border-radius: 19px; 475 | -moz-border-radius: 19px; 476 | -ms-border-radius: 19px; 477 | cursor: pointer; 478 | line-height: 38px; 479 | } 480 | #more_msg:hover{ 481 | border: 1px solid #FFC500; 482 | } 483 | #more_msg:hover a{ 484 | background: url("/resource/image/more_msg_1.png") center left no-repeat; 485 | color: #FFC500; 486 | } 487 | #more_msg a{ 488 | background: url("/resource/image/more_msg.png") center left no-repeat; 489 | display: block; 490 | text-decoration: none; 491 | color: #00AD90; 492 | width: 50px; 493 | margin: 0px auto; 494 | padding-left: 28px; 495 | } 496 | #identify{ 497 | background: #fff; 498 | width: 800px; 499 | padding: 30px 60px; 500 | height: 380px; 501 | margin-top: 20px; 502 | padding-bottom: 20px; 503 | } 504 | .id_ways{ 505 | background: #F6F9F9; 506 | width: 740px; 507 | height: 120px; 508 | padding: 30px; 509 | } 510 | .id_left_part{ 511 | width: 410px; 512 | } 513 | .id_left_part img{ 514 | float: left; 515 | } 516 | .id_info{ 517 | float: left; 518 | font: 14px "Microsoft YaHei"; 519 | margin-top: 16px; 520 | margin-left: 30px; 521 | } 522 | .id_info h1{ 523 | font: 18px "Microsoft YaHei"; 524 | margin-bottom: 10px; 525 | } 526 | .id_info p{ 527 | line-height: 30px; 528 | color: #666666; 529 | } 530 | .id_it{ 531 | background: url("/resource/image/id_it.png") center left no-repeat; 532 | width: 140px; 533 | height: 40px; 534 | text-indent: 150px; 535 | overflow: hidden; 536 | white-space: nowrap; 537 | display: block; 538 | margin-top: 45px; 539 | } 540 | .id_it:hover{ 541 | background: url("/resource/image/id_it_1.png") center left no-repeat; 542 | } 543 | 544 | .id_it2{ 545 | background: url("/resource/image/checking.png") center left no-repeat; 546 | width: 140px; 547 | height: 40px; 548 | text-indent: 150px; 549 | overflow: hidden; 550 | white-space: nowrap; 551 | display: block; 552 | margin-top: 45px; 553 | } 554 | 555 | .id_right_part{ 556 | float: right; 557 | } 558 | .have_id{ 559 | text-align: center; 560 | } 561 | .have_id img{ 562 | margin-bottom: 5px; 563 | } 564 | .id_name{ 565 | font: bold 16px "Microsoft YaHei"; 566 | margin-bottom: 10px; 567 | } 568 | .id_experience{ 569 | color: #FFB200; 570 | font: 14px "Microsoft YaHei"; 571 | } 572 | #renren_id{ 573 | margin-bottom: 10px; 574 | } 575 | #renren_id h1{ 576 | color: #3178BC; 577 | } 578 | #student_id h1{ 579 | color: #D55C4B; 580 | } 581 | 582 | .back_layer{ 583 | display: none; 584 | background: #000; 585 | width: 100%; 586 | height: 100%; 587 | position: fixed; 588 | top: 0px; 589 | left: 0px; 590 | z-index: 500; 591 | opacity: 0.45; 592 | filter: alpha(opacity=45); 593 | } 594 | .std_id_box{ 595 | display: none; 596 | position: fixed; 597 | top: 50%; 598 | left: 50%; 599 | margin-left: -205px; 600 | margin-top: -190px; 601 | width: 410px; 602 | height: 380px; 603 | z-index: 600; 604 | } 605 | 606 | .std_input_info{ 607 | background: #F6F7E4; 608 | height: 300px; 609 | position: relative; 610 | top: -5px; 611 | padding: 15px 40px; 612 | } 613 | .std_input_info h1{ 614 | background: url("/resource/image/std_text.png") 115px 10px no-repeat; 615 | height: 35px; 616 | text-indent: 550px; 617 | overflow: hidden; 618 | white-space: nowrap; 619 | display: block; 620 | padding-bottom: 10px; 621 | border-bottom: 2px solid #E74C3C; 622 | } 623 | .std_input{ 624 | background: #fff; 625 | border: 1px solid #E74C3C; 626 | width: 320px; 627 | height: 40px; 628 | margin-top: 30px; 629 | border-radius: 19px; 630 | -webkit-border-radius: 19px; 631 | -moz-border-radius: 19px; 632 | -ms-border-radius: 19px; 633 | text-indent: 20px; 634 | color: #E64C3B; 635 | font: 14px "Microsoft YaHei"; 636 | line-height: 40px; 637 | } 638 | .std_input span{ 639 | padding-right: 10px; 640 | border-right: 1px solid #E64C3B; 641 | } 642 | .std_input input{ 643 | color: #858E8F; 644 | padding-left: 10px; 645 | font: 14px "Microsoft YaHei"; 646 | } 647 | #not_match{ 648 | color: #E64C3B; 649 | font: 12px "Microsoft YaHei"; 650 | margin: 10px; 651 | text-align: center; 652 | } 653 | #identify_btn{ 654 | border: 2px solid #E74C3C; 655 | background: #E74C3C; 656 | width: 320px; 657 | height: 50px; 658 | border-radius: 25px; 659 | -webkit-border-radius: 25px; 660 | -moz-border-radius: 25px; 661 | -ms-border-radius: 25px; 662 | text-align: center; 663 | line-height: 60px; 664 | margin: 0px auto; 665 | cursor: pointer; 666 | } 667 | #id_close{ 668 | margin-left: 185px; 669 | cursor: pointer; 670 | } 671 | #id_succeed{ 672 | display: none; 673 | position: fixed; 674 | top: 50%; 675 | left: 50%; 676 | margin-left: -170px; 677 | margin-top: -60px; 678 | z-index: 700; 679 | } 680 | 681 | #my_enshrine,#my_info,#my_messages,#my_products { 682 | min-height: 300px; 683 | } 684 | 685 | /* Desktops and laptops ----------- */ 686 | @media only screen 687 | and (max-width : 1224px) { 688 | aside { 689 | } 690 | .helped { 691 | width: 120px; 692 | height: 136px; 693 | margin: 30px 0 0 23px; 694 | background-image: url(/resource/image/helped-s.png); 695 | } 696 | .helpers { 697 | font-size: 30px; 698 | line-height: 132px 699 | } 700 | .qrcode-wr { 701 | width: 120px; 702 | margin: 28px 0 0 23px; 703 | } 704 | .qqgroup { 705 | font-size: 12px; 706 | text-align: right; 707 | } 708 | } 709 | 710 | /* delete resson mask */ 711 | 712 | .tran3{ 713 | transition:.3s all ease; 714 | -webkit-transition:.3s all ease; 715 | -moz-transition:.3s all ease; 716 | -ms-transition:.3s all ease; 717 | -o-transition:.3s all ease; 718 | } 719 | 720 | .f16{font-size: 16px;} 721 | 722 | .mask{ 723 | display: table; 724 | position: fixed; 725 | z-index: 100; 726 | top: 0; 727 | left: 0; 728 | width: 100%; 729 | height: 100%; 730 | background: rgba(0,0,0,0.5); 731 | } 732 | .hack{ 733 | display: table-cell; 734 | *position: absolute; 735 | *top: 50%; 736 | vertical-align: middle; 737 | } 738 | .content{ 739 | *position:relative; 740 | *top:-50%; 741 | text-align:center; 742 | font-size: 14px; 743 | position: relative; 744 | margin: 0 auto; 745 | padding:116px 74px 36px 74px; 746 | width: 252px; 747 | line-height: 22px; 748 | color: #f9e0dc; 749 | background: #e15944; 750 | text-align: center; 751 | } 752 | .content a{ 753 | color: #f9e0dc; 754 | text-decoration: none; 755 | } 756 | .content a:hover{ 757 | color: #FFD65B; 758 | } 759 | .img-ring{ 760 | position: absolute; 761 | top: -90px; 762 | left: 50%; 763 | margin-left: -90px; 764 | width: 180px; 765 | height: 180px; 766 | } 767 | .img-close{ 768 | display: block; 769 | position: absolute; 770 | top: -20px; 771 | right: -20px; 772 | width: 40px; 773 | height: 40px; 774 | } 775 | .img-close:hover{ 776 | opacity: 0.8; 777 | filter:alpha(opacity=80); 778 | } 779 | .delete-item{ 780 | padding: 14px 0px 29px 0px; 781 | } 782 | .delete-line{ 783 | display: inline-block; 784 | *display: inline; 785 | zoom:1; 786 | position: relative; 787 | top: -5px; 788 | width: 80px; 789 | height: 0; 790 | border-top: 1px solid #FFFFFF; 791 | } 792 | .delete-reason-title{ 793 | padding: 0 6px; 794 | } 795 | .delete-reason{ 796 | padding: 18px 0px 38px 0px; 797 | } 798 | .contact-mail{ 799 | border:1px solid #FFFEFE; 800 | padding: 11px 0px; 801 | font-family: verdana; 802 | border-radius: 22px; 803 | -webkit-border-radius: 22px; 804 | -moz-border-radius: 22px; 805 | } 806 | .triangle-up{ 807 | display: inline-block; 808 | *display: inline; 809 | zoom: 1; 810 | padding: 10px 0px 4px 0px; 811 | width: 0; 812 | height: 0; 813 | border-left: 5px solid transparent; 814 | border-right: 5px solid transparent; 815 | border-bottom: 8px solid #f9e0dc; 816 | } 817 | .jcrop-keymgr{display:none!important;} 818 | .w100{width:100%!important;} 819 | .h100{height: 100%!important;} 820 | /*@ bugfixing or workaround*/ 821 | /*pop-tip*/ 822 | .pop-tip{ 823 | position: fixed; 824 | z-index:999; 825 | width: 100%; 826 | height: 100%; 827 | background-color: rgba(0,0,0,.65); 828 | top:0; 829 | left: 0; 830 | } 831 | .pop-tip .pop-tip-area{ 832 | position: absolute; 833 | width: 340px; 834 | height: 120px; 835 | top: 50%; 836 | left: 50%; 837 | margin-left: -170px; 838 | margin-top: -60px; 839 | background-color: #fff; 840 | text-align: center; 841 | } 842 | .pop-tip .pop-tip-txt{ 843 | display: inline-block; 844 | margin-top: 45px; 845 | height: 30px; 846 | line-height: 30px; 847 | padding-left: 42px; 848 | background: url(/resource/image/identify_suc.png) no-repeat left center; 849 | font-size: 20px; 850 | color: #1abc9c; 851 | } 852 | 853 | 854 | 855 | -------------------------------------------------------------------------------- /market/static/bootstrap/css/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.7 (http://getbootstrap.com) 3 | * Copyright 2011-2016 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} 6 | /*# sourceMappingURL=bootstrap-theme.min.css.map */ -------------------------------------------------------------------------------- /market/static/bootstrap/css/bootstrap-theme.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":";;;;AAmBA,YAAA,aAAA,UAAA,aAAA,aAAA,aAME,YAAA,EAAA,KAAA,EAAA,eC2CA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBDvCR,mBAAA,mBAAA,oBAAA,oBAAA,iBAAA,iBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBCsCA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBDlCR,qBAAA,sBAAA,sBAAA,uBAAA,mBAAA,oBAAA,sBAAA,uBAAA,sBAAA,uBAAA,sBAAA,uBAAA,+BAAA,gCAAA,6BAAA,gCAAA,gCAAA,gCCiCA,mBAAA,KACQ,WAAA,KDlDV,mBAAA,oBAAA,iBAAA,oBAAA,oBAAA,oBAuBI,YAAA,KAyCF,YAAA,YAEE,iBAAA,KAKJ,aErEI,YAAA,EAAA,IAAA,EAAA,KACA,iBAAA,iDACA,iBAAA,4CAAA,iBAAA,qEAEA,iBAAA,+CCnBF,OAAA,+GH4CA,OAAA,0DACA,kBAAA,SAuC2C,aAAA,QAA2B,aAAA,KArCtE,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAgBN,aEtEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAiBN,aEvEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAkBN,UExEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,gBAAA,gBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,iBAAA,iBAEE,iBAAA,QACA,aAAA,QAMA,mBAAA,0BAAA,yBAAA,0BAAA,yBAAA,yBAAA,oBAAA,2BAAA,0BAAA,2BAAA,0BAAA,0BAAA,6BAAA,oCAAA,mCAAA,oCAAA,mCAAA,mCAME,iBAAA,QACA,iBAAA,KAmBN,aEzEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAoBN,YE1EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,kBAAA,kBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,mBAAA,mBAEE,iBAAA,QACA,aAAA,QAMA,qBAAA,4BAAA,2BAAA,4BAAA,2BAAA,2BAAA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,+BAAA,sCAAA,qCAAA,sCAAA,qCAAA,qCAME,iBAAA,QACA,iBAAA,KA2BN,eAAA,WClCE,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBD2CV,0BAAA,0BE3FI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GF0FF,kBAAA,SAEF,yBAAA,+BAAA,+BEhGI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GFgGF,kBAAA,SASF,gBE7GI,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SH+HA,cAAA,ICjEA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBD6DV,sCAAA,oCE7GI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBD0EV,cAAA,iBAEE,YAAA,EAAA,IAAA,EAAA,sBAIF,gBEhII,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SHkJA,cAAA,IAHF,sCAAA,oCEhII,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBDgFV,8BAAA,iCAYI,YAAA,EAAA,KAAA,EAAA,gBAKJ,qBAAA,kBAAA,mBAGE,cAAA,EAqBF,yBAfI,mDAAA,yDAAA,yDAGE,MAAA,KE7JF,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,UFqKJ,OACE,YAAA,EAAA,IAAA,EAAA,qBC3HA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBDsIV,eEtLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAKF,YEvLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAMF,eExLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAOF,cEzLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAeF,UEjMI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFuMJ,cE3MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFwMJ,sBE5MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyMJ,mBE7MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0MJ,sBE9MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2MJ,qBE/MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF+MJ,sBElLI,iBAAA,yKACA,iBAAA,oKACA,iBAAA,iKFyLJ,YACE,cAAA,IC9KA,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBDgLV,wBAAA,8BAAA,8BAGE,YAAA,EAAA,KAAA,EAAA,QEnOE,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFiOF,aAAA,QALF,+BAAA,qCAAA,qCAQI,YAAA,KAUJ,OCnME,mBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,EAAA,IAAA,IAAA,gBD4MV,8BE5PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyPJ,8BE7PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0PJ,8BE9PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2PJ,2BE/PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF4PJ,8BEhQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF6PJ,6BEjQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoQJ,MExQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFsQF,aAAA,QC3NA,mBAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA,qBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} --------------------------------------------------------------------------------