├── .gitignore ├── README.rst ├── deploy ├── apache2 │ └── demo.conf ├── nginx │ └── demo.conf ├── solr │ ├── admin-extra.html │ ├── admin-extra.menu-bottom.html │ ├── admin-extra.menu-top.html │ ├── currency.xml │ ├── elevate.xml │ ├── lang │ │ ├── contractions_ca.txt │ │ ├── contractions_fr.txt │ │ ├── contractions_ga.txt │ │ ├── contractions_it.txt │ │ ├── hyphenations_ga.txt │ │ ├── stemdict_nl.txt │ │ ├── stoptags_ja.txt │ │ ├── stopwords_ar.txt │ │ ├── stopwords_bg.txt │ │ ├── stopwords_ca.txt │ │ ├── stopwords_cz.txt │ │ ├── stopwords_da.txt │ │ ├── stopwords_de.txt │ │ ├── stopwords_el.txt │ │ ├── stopwords_en.txt │ │ ├── stopwords_es.txt │ │ ├── stopwords_eu.txt │ │ ├── stopwords_fa.txt │ │ ├── stopwords_fi.txt │ │ ├── stopwords_fr.txt │ │ ├── stopwords_ga.txt │ │ ├── stopwords_gl.txt │ │ ├── stopwords_hi.txt │ │ ├── stopwords_hu.txt │ │ ├── stopwords_hy.txt │ │ ├── stopwords_id.txt │ │ ├── stopwords_it.txt │ │ ├── stopwords_ja.txt │ │ ├── stopwords_lv.txt │ │ ├── stopwords_nl.txt │ │ ├── stopwords_no.txt │ │ ├── stopwords_pt.txt │ │ ├── stopwords_ro.txt │ │ ├── stopwords_ru.txt │ │ ├── stopwords_sv.txt │ │ ├── stopwords_th.txt │ │ ├── stopwords_tr.txt │ │ └── userdict_ja.txt │ ├── mapping-FoldToASCII.txt │ ├── mapping-ISOLatin1Accent.txt │ ├── protwords.txt │ ├── schema.xml │ ├── scripts.conf │ ├── solrconfig.xml │ ├── spellings.txt │ ├── stopwords.txt │ ├── synonyms.txt │ ├── update-script.js │ ├── velocity │ │ ├── VM_global_library.vm │ │ ├── browse.vm │ │ ├── cluster.vm │ │ ├── clusterResults.vm │ │ ├── debug.vm │ │ ├── facet_fields.vm │ │ ├── facet_pivot.vm │ │ ├── facet_queries.vm │ │ ├── facet_ranges.vm │ │ ├── facets.vm │ │ ├── footer.vm │ │ ├── head.vm │ │ ├── header.vm │ │ ├── hit.vm │ │ ├── hitGrouped.vm │ │ ├── join-doc.vm │ │ ├── jquery.autocomplete.css │ │ ├── jquery.autocomplete.js │ │ ├── layout.vm │ │ ├── main.css │ │ ├── product-doc.vm │ │ ├── query.vm │ │ ├── queryGroup.vm │ │ ├── querySpatial.vm │ │ ├── richtext-doc.vm │ │ ├── suggest.vm │ │ └── tabs.vm │ └── xslt │ │ ├── example.xsl │ │ ├── example_atom.xsl │ │ ├── example_rss.xsl │ │ ├── luke.xsl │ │ └── updateXml.xsl ├── supervisord │ └── demo.conf └── wsgi │ └── demo.wsgi ├── fixtures ├── books.csv ├── clothing.csv ├── downloads.csv ├── images.tar.gz ├── offers.json ├── product-attributes.json ├── product-classes.json └── shipping-event-types.json ├── manage.py ├── requirements.txt ├── runtests.sh ├── setup.py ├── src └── oscar_demo │ ├── __init__.py │ ├── apps │ ├── __init__.py │ ├── app.py │ ├── checkout │ │ ├── __init__.py │ │ ├── app.py │ │ ├── forms.py │ │ └── views.py │ ├── offers.py │ ├── order │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── config.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ └── processing.py │ ├── shipping │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── config.py │ │ ├── methods.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ └── repository.py │ └── user │ │ ├── __init__.py │ │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ │ └── models.py │ ├── geoip │ └── .gitignore │ ├── settings.py │ ├── settings_docker.py │ ├── settings_local.sample.py │ ├── settings_test.py │ ├── static │ ├── demo │ │ ├── README.rst │ │ ├── css │ │ │ ├── README.rst │ │ │ ├── bootstrap.min.css │ │ │ ├── responsive.css │ │ │ ├── responsive.css.map │ │ │ ├── styles.css │ │ │ └── styles.css.map │ │ ├── favicon.ico │ │ ├── fonts │ │ │ ├── OpenSans-Bold.ttf │ │ │ ├── OpenSans-Regular.ttf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ ├── icomoon.dev.svg │ │ │ ├── icomoon.eot │ │ │ ├── icomoon.svg │ │ │ ├── icomoon.ttf │ │ │ ├── icomoon.woff │ │ │ └── lte-ie7.js │ │ ├── img │ │ │ ├── carousel │ │ │ │ ├── banner-01.jpg │ │ │ │ ├── banner-02.jpg │ │ │ │ ├── banner-03.jpg │ │ │ │ ├── homepage-banners-01.jpg │ │ │ │ └── homepage-banners-02.jpg │ │ │ ├── glyphicons-halflings-white.png │ │ │ ├── glyphicons-halflings.png │ │ │ ├── image_not_found.jpg │ │ │ ├── svg │ │ │ │ ├── logo.png │ │ │ │ └── logo.svg │ │ │ └── ui │ │ │ │ ├── ajax-loader.gif │ │ │ │ ├── bg-category-title.png │ │ │ │ ├── bg-stars-small.png │ │ │ │ ├── bg-stars.png │ │ │ │ ├── black.png │ │ │ │ ├── dashboard │ │ │ │ ├── bg_subtle_dots.png │ │ │ │ └── logo_oscar.png │ │ │ │ ├── icon_arrow_down.png │ │ │ │ ├── icon_arrow_left.png │ │ │ │ ├── icon_minus.png │ │ │ │ ├── icon_plus.png │ │ │ │ ├── icon_slider_left.png │ │ │ │ ├── icon_slider_right.png │ │ │ │ ├── nav_sprite.png │ │ │ │ ├── sprite.png │ │ │ │ ├── unavailable.png │ │ │ │ └── wavecut-blue.png │ │ ├── js │ │ │ ├── bootstrap-wysihtml5 │ │ │ │ ├── bootstrap-wysihtml5-0.0.2.css │ │ │ │ ├── bootstrap-wysihtml5-0.0.2.js │ │ │ │ ├── bootstrap-wysihtml5-0.0.2.min.js │ │ │ │ ├── wysihtml5-0.3.0.js │ │ │ │ └── wysihtml5-0.3.0.min.js │ │ │ ├── bootstrap │ │ │ │ ├── bootstrap.js │ │ │ │ └── bootstrap.min.js │ │ │ ├── flexslider │ │ │ │ ├── bg_direction_nav.png │ │ │ │ ├── flexslider.js │ │ │ │ ├── homepage-nav.png │ │ │ │ └── product-nav.png │ │ │ ├── jquery │ │ │ │ ├── bootstrap-datepicker.css │ │ │ │ ├── jquery-1.9.1.min.js │ │ │ │ └── jquery-ui-1.10.1.custom.min.js │ │ │ ├── modernizr │ │ │ │ └── modernizr.js │ │ │ ├── mousewheel │ │ │ │ └── jquery.mousewheel.min.js │ │ │ ├── select2 │ │ │ │ ├── select2-spinner.gif │ │ │ │ ├── select2.css │ │ │ │ ├── select2.js │ │ │ │ ├── select2.png │ │ │ │ └── select2x2.png │ │ │ ├── site.js │ │ │ ├── site │ │ │ │ ├── responsive.js │ │ │ │ └── ui.js │ │ │ └── timepicker │ │ │ │ └── jquery-ui-timepicker-addon.js │ │ └── less │ │ │ ├── README.rst │ │ │ ├── bootstrap │ │ │ ├── accordion.less │ │ │ ├── alerts.less │ │ │ ├── bootstrap.less │ │ │ ├── breadcrumbs.less │ │ │ ├── button-groups.less │ │ │ ├── buttons.less │ │ │ ├── carousel.less │ │ │ ├── close.less │ │ │ ├── code.less │ │ │ ├── component-animations.less │ │ │ ├── dropdowns.less │ │ │ ├── forms.less │ │ │ ├── grid.less │ │ │ ├── hero-unit.less │ │ │ ├── labels-badges.less │ │ │ ├── layouts.less │ │ │ ├── media.less │ │ │ ├── mixins.less │ │ │ ├── modals.less │ │ │ ├── navbar.less │ │ │ ├── navs.less │ │ │ ├── pager.less │ │ │ ├── pagination.less │ │ │ ├── popovers.less │ │ │ ├── progress-bars.less │ │ │ ├── reset.less │ │ │ ├── responsive-1200px-min.less │ │ │ ├── responsive-767px-max.less │ │ │ ├── responsive-768px-979px.less │ │ │ ├── responsive-navbar.less │ │ │ ├── responsive-utilities.less │ │ │ ├── scaffolding.less │ │ │ ├── sprites.less │ │ │ ├── tables.less │ │ │ ├── thumbnails.less │ │ │ ├── tooltip.less │ │ │ ├── type.less │ │ │ ├── utilities.less │ │ │ ├── variables.less │ │ │ └── wells.less │ │ │ ├── dashboard │ │ │ ├── mixins.less │ │ │ └── variables.less │ │ │ ├── font-awesome │ │ │ ├── font-awesome-ie7.less │ │ │ └── font-awesome.less │ │ │ ├── page │ │ │ ├── account.less │ │ │ ├── checkout.less │ │ │ ├── flexslider.less │ │ │ ├── head_foot.less │ │ │ ├── icomoon.less │ │ │ ├── plugins.less │ │ │ ├── product_lists.less │ │ │ ├── product_page.less │ │ │ ├── promotions.less │ │ │ └── theme.less │ │ │ ├── responsive.less │ │ │ └── styles.less │ └── robots.txt │ ├── templates │ ├── base.html │ ├── basket │ │ ├── basket.html │ │ └── partials │ │ │ ├── basket_content.html │ │ │ └── basket_totals.html │ ├── catalogue │ │ ├── browse.html │ │ ├── detail.html │ │ ├── partials │ │ │ ├── add_to_wishlist.html │ │ │ ├── alerts_form.html │ │ │ ├── child_stock_record.html │ │ │ ├── gallery.html │ │ │ ├── product.html │ │ │ ├── review.html │ │ │ ├── review_totals.html │ │ │ └── stock_record.html │ │ └── reviews │ │ │ ├── review_detail.html │ │ │ ├── review_form.html │ │ │ └── review_list.html │ ├── checkout │ │ ├── checkout.html │ │ ├── gateway.html │ │ ├── layout.html │ │ ├── nav.html │ │ ├── payment_details.html │ │ ├── preview.html │ │ ├── shipping_address.html │ │ ├── shipping_methods.html │ │ ├── user_address_delete.html │ │ └── user_address_form.html │ ├── customer │ │ ├── baseaccountpage.html │ │ ├── history │ │ │ └── recently_viewed_products.html │ │ ├── login_registration.html │ │ └── partials │ │ │ └── nav_account.html │ ├── dashboard │ │ └── orders │ │ │ └── order_detail.html │ ├── layout.html │ ├── offer │ │ ├── detail.html │ │ └── list.html │ ├── partials │ │ ├── brand.html │ │ ├── extrascripts.html │ │ ├── footer.html │ │ ├── mini_basket.html │ │ ├── nav_accounts.html │ │ └── nav_primary.html │ ├── promotions │ │ ├── automaticproductlist.html │ │ ├── baseproductlist.html │ │ ├── featureproductlist.html │ │ ├── handpickedproductlist.html │ │ ├── home.html │ │ ├── image.html │ │ ├── partials │ │ │ └── productsingle.html │ │ └── singleproduct.html │ └── shipping │ │ ├── express.html │ │ └── standard.html │ └── urls.py ├── tests ├── test_checkout_forms.py └── test_shipping_methods.py └── update_demo.sh /.gitignore: -------------------------------------------------------------------------------- 1 | # Packaging 2 | *.pyc 3 | *.egg-info 4 | /dist/ 5 | /build/ 6 | 7 | # Vagrant 8 | .vagrant 9 | 10 | # Temporary/OS files 11 | *.swp 12 | *.swo 13 | *.*~ 14 | .~lock.* 15 | *.DS_Store 16 | .python-version 17 | 18 | # IDE files 19 | .project 20 | .pydevproject 21 | .settings 22 | .idea 23 | 24 | # Docs 25 | /docs/build/* 26 | *.pdf 27 | TODO 28 | 29 | # Test files 30 | .coverage 31 | .noseids 32 | coverage.xml 33 | violations.txt 34 | nosetests.xml 35 | /.cache/ 36 | /htmlcov/* 37 | /.tox/* 38 | 39 | # Example sites 40 | settings_local.py 41 | /*.sqlite 42 | /assets/ 43 | /public/ 44 | /whoosh_index/ 45 | /logs/ 46 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | Django-Oscar Demo 2 | ------------------ 3 | 4 | **NOTE**: This is a copy of the old demo site from the Django Oscar repository. See https://github.com/django-oscar/django-oscar/pull/1911 or more information. 5 | 6 | 7 | This is intended to show off some of Oscar's features, such as: 8 | 9 | * Customising core models 10 | * Overriding templates and CSS: changing the site appearance 11 | * Integrating with some of Oscar's extensions 12 | 13 | Most of this is still a work-in-progress. 14 | -------------------------------------------------------------------------------- /deploy/apache2/demo.conf: -------------------------------------------------------------------------------- 1 | 2 | ServerName demo.oscarcommerce.com 3 | DocumentRoot /var/www/nginx-default 4 | CustomLog /var/log/apache2/access.demo.oscar.log combined 5 | ErrorLog /var/log/apache2/error.demo.oscar.log 6 | AllowEncodedSlashes On 7 | 8 | WSGIDaemonProcess oscar-demo processes=2 threads=5 display-name=oscar maximum-requests=10000 9 | WSGIProcessGroup oscar-demo 10 | WSGIApplicationGroup %{GLOBAL} 11 | WSGIScriptAlias / /var/www/oscar/builds/demo/sites/demo/deploy/wsgi/demo.wsgi 12 | WSGIPassAuthorization On 13 | 14 | 15 | Order deny,allow 16 | Allow from all 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /deploy/nginx/demo.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name demo.oscarcommerce.com; 4 | 5 | set_real_ip_from 192.168.125.252; 6 | real_ip_header X-Forwarded-For; 7 | 8 | # Ensure only one domain 9 | if ($host != 'demo.oscarcommerce.com') { 10 | rewrite / $scheme://demo.oscarcommerce.com$request_uri permanent; 11 | } 12 | 13 | access_log /var/www/oscar/logs/demo/nginx_access.log; 14 | error_log /var/www/oscar/logs/demo/nginx_error.log; 15 | 16 | gzip on; 17 | gzip_proxied any; 18 | gzip_static on; 19 | gzip_types text/plain application/xml application/x-javascript text/javascript text/css application/x-json application/json; 20 | 21 | client_max_body_size 3M; 22 | keepalive_timeout 5; 23 | 24 | location =/robots.txt { 25 | root /var/www/oscar/builds/demo/sites/demo/public/static/; 26 | expires max; 27 | } 28 | location =/favicon.ico { 29 | root /var/www/oscar/builds/demo/sites/demo/public/static/oscar/; 30 | expires max; 31 | } 32 | location /media/ { 33 | alias /var/www/oscar/media/demo/; 34 | expires max; 35 | } 36 | location /static/ { 37 | root /var/www/oscar/builds/demo/sites/demo/public; 38 | expires max; 39 | } 40 | location / { 41 | uwsgi_pass unix:/var/www/oscar/run/demo/uwsgi.sock; 42 | uwsgi_send_timeout 5; 43 | include uwsgi_params; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /deploy/solr/admin-extra.html: -------------------------------------------------------------------------------- 1 | 17 | 18 | 32 | -------------------------------------------------------------------------------- /deploy/solr/admin-extra.menu-bottom.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /deploy/solr/admin-extra.menu-top.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /deploy/solr/elevate.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /deploy/solr/lang/contractions_ca.txt: -------------------------------------------------------------------------------- 1 | # Set of Catalan contractions for ElisionFilter 2 | # TODO: load this as a resource from the analyzer and sync it in build.xml 3 | d 4 | l 5 | m 6 | n 7 | s 8 | t 9 | -------------------------------------------------------------------------------- /deploy/solr/lang/contractions_fr.txt: -------------------------------------------------------------------------------- 1 | # Set of French contractions for ElisionFilter 2 | # TODO: load this as a resource from the analyzer and sync it in build.xml 3 | l 4 | m 5 | t 6 | qu 7 | n 8 | s 9 | j 10 | d 11 | c 12 | jusqu 13 | quoiqu 14 | lorsqu 15 | puisqu 16 | -------------------------------------------------------------------------------- /deploy/solr/lang/contractions_ga.txt: -------------------------------------------------------------------------------- 1 | # Set of Irish contractions for ElisionFilter 2 | # TODO: load this as a resource from the analyzer and sync it in build.xml 3 | d 4 | m 5 | b 6 | -------------------------------------------------------------------------------- /deploy/solr/lang/contractions_it.txt: -------------------------------------------------------------------------------- 1 | # Set of Italian contractions for ElisionFilter 2 | # TODO: load this as a resource from the analyzer and sync it in build.xml 3 | c 4 | l 5 | all 6 | dall 7 | dell 8 | nell 9 | sull 10 | coll 11 | pell 12 | gl 13 | agl 14 | dagl 15 | degl 16 | negl 17 | sugl 18 | un 19 | m 20 | t 21 | s 22 | v 23 | d 24 | -------------------------------------------------------------------------------- /deploy/solr/lang/hyphenations_ga.txt: -------------------------------------------------------------------------------- 1 | # Set of Irish hyphenations for StopFilter 2 | # TODO: load this as a resource from the analyzer and sync it in build.xml 3 | h 4 | n 5 | t 6 | -------------------------------------------------------------------------------- /deploy/solr/lang/stemdict_nl.txt: -------------------------------------------------------------------------------- 1 | # Set of overrides for the dutch stemmer 2 | # TODO: load this as a resource from the analyzer and sync it in build.xml 3 | fiets fiets 4 | bromfiets bromfiets 5 | ei eier 6 | kind kinder 7 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_ar.txt: -------------------------------------------------------------------------------- 1 | # This file was created by Jacques Savoy and is distributed under the BSD license. 2 | # See http://members.unine.ch/jacques.savoy/clef/index.html. 3 | # Also see http://www.opensource.org/licenses/bsd-license.html 4 | # Cleaned on October 11, 2009 (not normalized, so use before normalization) 5 | # This means that when modifying this list, you might need to add some 6 | # redundant entries, for example containing forms with both أ and ا 7 | من 8 | ومن 9 | منها 10 | منه 11 | في 12 | وفي 13 | فيها 14 | فيه 15 | و 16 | ف 17 | ثم 18 | او 19 | أو 20 | ب 21 | بها 22 | به 23 | ا 24 | أ 25 | اى 26 | اي 27 | أي 28 | أى 29 | لا 30 | ولا 31 | الا 32 | ألا 33 | إلا 34 | لكن 35 | ما 36 | وما 37 | كما 38 | فما 39 | عن 40 | مع 41 | اذا 42 | إذا 43 | ان 44 | أن 45 | إن 46 | انها 47 | أنها 48 | إنها 49 | انه 50 | أنه 51 | إنه 52 | بان 53 | بأن 54 | فان 55 | فأن 56 | وان 57 | وأن 58 | وإن 59 | التى 60 | التي 61 | الذى 62 | الذي 63 | الذين 64 | الى 65 | الي 66 | إلى 67 | إلي 68 | على 69 | عليها 70 | عليه 71 | اما 72 | أما 73 | إما 74 | ايضا 75 | أيضا 76 | كل 77 | وكل 78 | لم 79 | ولم 80 | لن 81 | ولن 82 | هى 83 | هي 84 | هو 85 | وهى 86 | وهي 87 | وهو 88 | فهى 89 | فهي 90 | فهو 91 | انت 92 | أنت 93 | لك 94 | لها 95 | له 96 | هذه 97 | هذا 98 | تلك 99 | ذلك 100 | هناك 101 | كانت 102 | كان 103 | يكون 104 | تكون 105 | وكانت 106 | وكان 107 | غير 108 | بعض 109 | قد 110 | نحو 111 | بين 112 | بينما 113 | منذ 114 | ضمن 115 | حيث 116 | الان 117 | الآن 118 | خلال 119 | بعد 120 | قبل 121 | حتى 122 | عند 123 | عندما 124 | لدى 125 | جميع 126 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_bg.txt: -------------------------------------------------------------------------------- 1 | # This file was created by Jacques Savoy and is distributed under the BSD license. 2 | # See http://members.unine.ch/jacques.savoy/clef/index.html. 3 | # Also see http://www.opensource.org/licenses/bsd-license.html 4 | а 5 | аз 6 | ако 7 | ала 8 | бе 9 | без 10 | беше 11 | би 12 | бил 13 | била 14 | били 15 | било 16 | близо 17 | бъдат 18 | бъде 19 | бяха 20 | в 21 | вас 22 | ваш 23 | ваша 24 | вероятно 25 | вече 26 | взема 27 | ви 28 | вие 29 | винаги 30 | все 31 | всеки 32 | всички 33 | всичко 34 | всяка 35 | във 36 | въпреки 37 | върху 38 | г 39 | ги 40 | главно 41 | го 42 | д 43 | да 44 | дали 45 | до 46 | докато 47 | докога 48 | дори 49 | досега 50 | доста 51 | е 52 | едва 53 | един 54 | ето 55 | за 56 | зад 57 | заедно 58 | заради 59 | засега 60 | затова 61 | защо 62 | защото 63 | и 64 | из 65 | или 66 | им 67 | има 68 | имат 69 | иска 70 | й 71 | каза 72 | как 73 | каква 74 | какво 75 | както 76 | какъв 77 | като 78 | кога 79 | когато 80 | което 81 | които 82 | кой 83 | който 84 | колко 85 | която 86 | къде 87 | където 88 | към 89 | ли 90 | м 91 | ме 92 | между 93 | мен 94 | ми 95 | мнозина 96 | мога 97 | могат 98 | може 99 | моля 100 | момента 101 | му 102 | н 103 | на 104 | над 105 | назад 106 | най 107 | направи 108 | напред 109 | например 110 | нас 111 | не 112 | него 113 | нея 114 | ни 115 | ние 116 | никой 117 | нито 118 | но 119 | някои 120 | някой 121 | няма 122 | обаче 123 | около 124 | освен 125 | особено 126 | от 127 | отгоре 128 | отново 129 | още 130 | пак 131 | по 132 | повече 133 | повечето 134 | под 135 | поне 136 | поради 137 | после 138 | почти 139 | прави 140 | пред 141 | преди 142 | през 143 | при 144 | пък 145 | първо 146 | с 147 | са 148 | само 149 | се 150 | сега 151 | си 152 | скоро 153 | след 154 | сме 155 | според 156 | сред 157 | срещу 158 | сте 159 | съм 160 | със 161 | също 162 | т 163 | тази 164 | така 165 | такива 166 | такъв 167 | там 168 | твой 169 | те 170 | тези 171 | ти 172 | тн 173 | то 174 | това 175 | тогава 176 | този 177 | той 178 | толкова 179 | точно 180 | трябва 181 | тук 182 | тъй 183 | тя 184 | тях 185 | у 186 | харесва 187 | ч 188 | че 189 | често 190 | чрез 191 | ще 192 | щом 193 | я 194 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_ca.txt: -------------------------------------------------------------------------------- 1 | # Catalan stopwords from http://github.com/vcl/cue.language (Apache 2 Licensed) 2 | a 3 | abans 4 | ací 5 | ah 6 | així 7 | això 8 | al 9 | als 10 | aleshores 11 | algun 12 | alguna 13 | algunes 14 | alguns 15 | alhora 16 | allà 17 | allí 18 | allò 19 | altra 20 | altre 21 | altres 22 | amb 23 | ambdós 24 | ambdues 25 | apa 26 | aquell 27 | aquella 28 | aquelles 29 | aquells 30 | aquest 31 | aquesta 32 | aquestes 33 | aquests 34 | aquí 35 | baix 36 | cada 37 | cadascú 38 | cadascuna 39 | cadascunes 40 | cadascuns 41 | com 42 | contra 43 | d'un 44 | d'una 45 | d'unes 46 | d'uns 47 | dalt 48 | de 49 | del 50 | dels 51 | des 52 | després 53 | dins 54 | dintre 55 | donat 56 | doncs 57 | durant 58 | e 59 | eh 60 | el 61 | els 62 | em 63 | en 64 | encara 65 | ens 66 | entre 67 | érem 68 | eren 69 | éreu 70 | es 71 | és 72 | esta 73 | està 74 | estàvem 75 | estaven 76 | estàveu 77 | esteu 78 | et 79 | etc 80 | ets 81 | fins 82 | fora 83 | gairebé 84 | ha 85 | han 86 | has 87 | havia 88 | he 89 | hem 90 | heu 91 | hi 92 | ho 93 | i 94 | igual 95 | iguals 96 | ja 97 | l'hi 98 | la 99 | les 100 | li 101 | li'n 102 | llavors 103 | m'he 104 | ma 105 | mal 106 | malgrat 107 | mateix 108 | mateixa 109 | mateixes 110 | mateixos 111 | me 112 | mentre 113 | més 114 | meu 115 | meus 116 | meva 117 | meves 118 | molt 119 | molta 120 | moltes 121 | molts 122 | mon 123 | mons 124 | n'he 125 | n'hi 126 | ne 127 | ni 128 | no 129 | nogensmenys 130 | només 131 | nosaltres 132 | nostra 133 | nostre 134 | nostres 135 | o 136 | oh 137 | oi 138 | on 139 | pas 140 | pel 141 | pels 142 | per 143 | però 144 | perquè 145 | poc 146 | poca 147 | pocs 148 | poques 149 | potser 150 | propi 151 | qual 152 | quals 153 | quan 154 | quant 155 | que 156 | què 157 | quelcom 158 | qui 159 | quin 160 | quina 161 | quines 162 | quins 163 | s'ha 164 | s'han 165 | sa 166 | semblant 167 | semblants 168 | ses 169 | seu 170 | seus 171 | seva 172 | seva 173 | seves 174 | si 175 | sobre 176 | sobretot 177 | sóc 178 | solament 179 | sols 180 | son 181 | són 182 | sons 183 | sota 184 | sou 185 | t'ha 186 | t'han 187 | t'he 188 | ta 189 | tal 190 | també 191 | tampoc 192 | tan 193 | tant 194 | tanta 195 | tantes 196 | teu 197 | teus 198 | teva 199 | teves 200 | ton 201 | tons 202 | tot 203 | tota 204 | totes 205 | tots 206 | un 207 | una 208 | unes 209 | uns 210 | us 211 | va 212 | vaig 213 | vam 214 | van 215 | vas 216 | veu 217 | vosaltres 218 | vostra 219 | vostre 220 | vostres 221 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_cz.txt: -------------------------------------------------------------------------------- 1 | a 2 | s 3 | k 4 | o 5 | i 6 | u 7 | v 8 | z 9 | dnes 10 | cz 11 | tímto 12 | budeš 13 | budem 14 | byli 15 | jseš 16 | můj 17 | svým 18 | ta 19 | tomto 20 | tohle 21 | tuto 22 | tyto 23 | jej 24 | zda 25 | proč 26 | máte 27 | tato 28 | kam 29 | tohoto 30 | kdo 31 | kteří 32 | mi 33 | nám 34 | tom 35 | tomuto 36 | mít 37 | nic 38 | proto 39 | kterou 40 | byla 41 | toho 42 | protože 43 | asi 44 | ho 45 | naši 46 | napište 47 | re 48 | což 49 | tím 50 | takže 51 | svých 52 | její 53 | svými 54 | jste 55 | aj 56 | tu 57 | tedy 58 | teto 59 | bylo 60 | kde 61 | ke 62 | pravé 63 | ji 64 | nad 65 | nejsou 66 | či 67 | pod 68 | téma 69 | mezi 70 | přes 71 | ty 72 | pak 73 | vám 74 | ani 75 | když 76 | však 77 | neg 78 | jsem 79 | tento 80 | článku 81 | články 82 | aby 83 | jsme 84 | před 85 | pta 86 | jejich 87 | byl 88 | ještě 89 | až 90 | bez 91 | také 92 | pouze 93 | první 94 | vaše 95 | která 96 | nás 97 | nový 98 | tipy 99 | pokud 100 | může 101 | strana 102 | jeho 103 | své 104 | jiné 105 | zprávy 106 | nové 107 | není 108 | vás 109 | jen 110 | podle 111 | zde 112 | už 113 | být 114 | více 115 | bude 116 | již 117 | než 118 | který 119 | by 120 | které 121 | co 122 | nebo 123 | ten 124 | tak 125 | má 126 | při 127 | od 128 | po 129 | jsou 130 | jak 131 | další 132 | ale 133 | si 134 | se 135 | ve 136 | to 137 | jako 138 | za 139 | zpět 140 | ze 141 | do 142 | pro 143 | je 144 | na 145 | atd 146 | atp 147 | jakmile 148 | přičemž 149 | já 150 | on 151 | ona 152 | ono 153 | oni 154 | ony 155 | my 156 | vy 157 | jí 158 | ji 159 | mě 160 | mne 161 | jemu 162 | tomu 163 | těm 164 | těmu 165 | němu 166 | němuž 167 | jehož 168 | jíž 169 | jelikož 170 | jež 171 | jakož 172 | načež 173 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_el.txt: -------------------------------------------------------------------------------- 1 | # Lucene Greek Stopwords list 2 | # Note: by default this file is used after GreekLowerCaseFilter, 3 | # so when modifying this file use 'σ' instead of 'ς' 4 | ο 5 | η 6 | το 7 | οι 8 | τα 9 | του 10 | τησ 11 | των 12 | τον 13 | την 14 | και 15 | κι 16 | κ 17 | ειμαι 18 | εισαι 19 | ειναι 20 | ειμαστε 21 | ειστε 22 | στο 23 | στον 24 | στη 25 | στην 26 | μα 27 | αλλα 28 | απο 29 | για 30 | προσ 31 | με 32 | σε 33 | ωσ 34 | παρα 35 | αντι 36 | κατα 37 | μετα 38 | θα 39 | να 40 | δε 41 | δεν 42 | μη 43 | μην 44 | επι 45 | ενω 46 | εαν 47 | αν 48 | τοτε 49 | που 50 | πωσ 51 | ποιοσ 52 | ποια 53 | ποιο 54 | ποιοι 55 | ποιεσ 56 | ποιων 57 | ποιουσ 58 | αυτοσ 59 | αυτη 60 | αυτο 61 | αυτοι 62 | αυτων 63 | αυτουσ 64 | αυτεσ 65 | αυτα 66 | εκεινοσ 67 | εκεινη 68 | εκεινο 69 | εκεινοι 70 | εκεινεσ 71 | εκεινα 72 | εκεινων 73 | εκεινουσ 74 | οπωσ 75 | ομωσ 76 | ισωσ 77 | οσο 78 | οτι 79 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_en.txt: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one or more 2 | # contributor license agreements. See the NOTICE file distributed with 3 | # this work for additional information regarding copyright ownership. 4 | # The ASF licenses this file to You under the Apache License, Version 2.0 5 | # (the "License"); you may not use this file except in compliance with 6 | # the License. You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | # a couple of test stopwords to test that the words are really being 17 | # configured from this file: 18 | stopworda 19 | stopwordb 20 | 21 | # Standard english stop words taken from Lucene's StopAnalyzer 22 | a 23 | an 24 | and 25 | are 26 | as 27 | at 28 | be 29 | but 30 | by 31 | for 32 | if 33 | in 34 | into 35 | is 36 | it 37 | no 38 | not 39 | of 40 | on 41 | or 42 | such 43 | that 44 | the 45 | their 46 | then 47 | there 48 | these 49 | they 50 | this 51 | to 52 | was 53 | will 54 | with 55 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_eu.txt: -------------------------------------------------------------------------------- 1 | # example set of basque stopwords 2 | al 3 | anitz 4 | arabera 5 | asko 6 | baina 7 | bat 8 | batean 9 | batek 10 | bati 11 | batzuei 12 | batzuek 13 | batzuetan 14 | batzuk 15 | bera 16 | beraiek 17 | berau 18 | berauek 19 | bere 20 | berori 21 | beroriek 22 | beste 23 | bezala 24 | da 25 | dago 26 | dira 27 | ditu 28 | du 29 | dute 30 | edo 31 | egin 32 | ere 33 | eta 34 | eurak 35 | ez 36 | gainera 37 | gu 38 | gutxi 39 | guzti 40 | haiei 41 | haiek 42 | haietan 43 | hainbeste 44 | hala 45 | han 46 | handik 47 | hango 48 | hara 49 | hari 50 | hark 51 | hartan 52 | hau 53 | hauei 54 | hauek 55 | hauetan 56 | hemen 57 | hemendik 58 | hemengo 59 | hi 60 | hona 61 | honek 62 | honela 63 | honetan 64 | honi 65 | hor 66 | hori 67 | horiei 68 | horiek 69 | horietan 70 | horko 71 | horra 72 | horrek 73 | horrela 74 | horretan 75 | horri 76 | hortik 77 | hura 78 | izan 79 | ni 80 | noiz 81 | nola 82 | non 83 | nondik 84 | nongo 85 | nor 86 | nora 87 | ze 88 | zein 89 | zen 90 | zenbait 91 | zenbat 92 | zer 93 | zergatik 94 | ziren 95 | zituen 96 | zu 97 | zuek 98 | zuen 99 | zuten 100 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_ga.txt: -------------------------------------------------------------------------------- 1 | 2 | a 3 | ach 4 | ag 5 | agus 6 | an 7 | aon 8 | ar 9 | arna 10 | as 11 | b' 12 | ba 13 | beirt 14 | bhúr 15 | caoga 16 | ceathair 17 | ceathrar 18 | chomh 19 | chtó 20 | chuig 21 | chun 22 | cois 23 | céad 24 | cúig 25 | cúigear 26 | d' 27 | daichead 28 | dar 29 | de 30 | deich 31 | deichniúr 32 | den 33 | dhá 34 | do 35 | don 36 | dtí 37 | dá 38 | dár 39 | dó 40 | faoi 41 | faoin 42 | faoina 43 | faoinár 44 | fara 45 | fiche 46 | gach 47 | gan 48 | go 49 | gur 50 | haon 51 | hocht 52 | i 53 | iad 54 | idir 55 | in 56 | ina 57 | ins 58 | inár 59 | is 60 | le 61 | leis 62 | lena 63 | lenár 64 | m' 65 | mar 66 | mo 67 | mé 68 | na 69 | nach 70 | naoi 71 | naonúr 72 | ná 73 | ní 74 | níor 75 | nó 76 | nócha 77 | ocht 78 | ochtar 79 | os 80 | roimh 81 | sa 82 | seacht 83 | seachtar 84 | seachtó 85 | seasca 86 | seisear 87 | siad 88 | sibh 89 | sinn 90 | sna 91 | sé 92 | sí 93 | tar 94 | thar 95 | thú 96 | triúr 97 | trí 98 | trína 99 | trínár 100 | tríocha 101 | tú 102 | um 103 | ár 104 | é 105 | éis 106 | í 107 | ó 108 | ón 109 | óna 110 | ónár 111 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_gl.txt: -------------------------------------------------------------------------------- 1 | # galican stopwords 2 | a 3 | aínda 4 | alí 5 | aquel 6 | aquela 7 | aquelas 8 | aqueles 9 | aquilo 10 | aquí 11 | ao 12 | aos 13 | as 14 | así 15 | á 16 | ben 17 | cando 18 | che 19 | co 20 | coa 21 | comigo 22 | con 23 | connosco 24 | contigo 25 | convosco 26 | coas 27 | cos 28 | cun 29 | cuns 30 | cunha 31 | cunhas 32 | da 33 | dalgunha 34 | dalgunhas 35 | dalgún 36 | dalgúns 37 | das 38 | de 39 | del 40 | dela 41 | delas 42 | deles 43 | desde 44 | deste 45 | do 46 | dos 47 | dun 48 | duns 49 | dunha 50 | dunhas 51 | e 52 | el 53 | ela 54 | elas 55 | eles 56 | en 57 | era 58 | eran 59 | esa 60 | esas 61 | ese 62 | eses 63 | esta 64 | estar 65 | estaba 66 | está 67 | están 68 | este 69 | estes 70 | estiven 71 | estou 72 | eu 73 | é 74 | facer 75 | foi 76 | foron 77 | fun 78 | había 79 | hai 80 | iso 81 | isto 82 | la 83 | las 84 | lle 85 | lles 86 | lo 87 | los 88 | mais 89 | me 90 | meu 91 | meus 92 | min 93 | miña 94 | miñas 95 | moi 96 | na 97 | nas 98 | neste 99 | nin 100 | no 101 | non 102 | nos 103 | nosa 104 | nosas 105 | noso 106 | nosos 107 | nós 108 | nun 109 | nunha 110 | nuns 111 | nunhas 112 | o 113 | os 114 | ou 115 | ó 116 | ós 117 | para 118 | pero 119 | pode 120 | pois 121 | pola 122 | polas 123 | polo 124 | polos 125 | por 126 | que 127 | se 128 | senón 129 | ser 130 | seu 131 | seus 132 | sexa 133 | sido 134 | sobre 135 | súa 136 | súas 137 | tamén 138 | tan 139 | te 140 | ten 141 | teñen 142 | teño 143 | ter 144 | teu 145 | teus 146 | ti 147 | tido 148 | tiña 149 | tiven 150 | túa 151 | túas 152 | un 153 | unha 154 | unhas 155 | uns 156 | vos 157 | vosa 158 | vosas 159 | voso 160 | vosos 161 | vós 162 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_hi.txt: -------------------------------------------------------------------------------- 1 | # Also see http://www.opensource.org/licenses/bsd-license.html 2 | # See http://members.unine.ch/jacques.savoy/clef/index.html. 3 | # This file was created by Jacques Savoy and is distributed under the BSD license. 4 | # Note: by default this file also contains forms normalized by HindiNormalizer 5 | # for spelling variation (see section below), such that it can be used whether or 6 | # not you enable that feature. When adding additional entries to this list, 7 | # please add the normalized form as well. 8 | अंदर 9 | अत 10 | अपना 11 | अपनी 12 | अपने 13 | अभी 14 | आदि 15 | आप 16 | इत्यादि 17 | इन 18 | इनका 19 | इन्हीं 20 | इन्हें 21 | इन्हों 22 | इस 23 | इसका 24 | इसकी 25 | इसके 26 | इसमें 27 | इसी 28 | इसे 29 | उन 30 | उनका 31 | उनकी 32 | उनके 33 | उनको 34 | उन्हीं 35 | उन्हें 36 | उन्हों 37 | उस 38 | उसके 39 | उसी 40 | उसे 41 | एक 42 | एवं 43 | एस 44 | ऐसे 45 | और 46 | कई 47 | कर 48 | करता 49 | करते 50 | करना 51 | करने 52 | करें 53 | कहते 54 | कहा 55 | का 56 | काफ़ी 57 | कि 58 | कितना 59 | किन्हें 60 | किन्हों 61 | किया 62 | किर 63 | किस 64 | किसी 65 | किसे 66 | की 67 | कुछ 68 | कुल 69 | के 70 | को 71 | कोई 72 | कौन 73 | कौनसा 74 | गया 75 | घर 76 | जब 77 | जहाँ 78 | जा 79 | जितना 80 | जिन 81 | जिन्हें 82 | जिन्हों 83 | जिस 84 | जिसे 85 | जीधर 86 | जैसा 87 | जैसे 88 | जो 89 | तक 90 | तब 91 | तरह 92 | तिन 93 | तिन्हें 94 | तिन्हों 95 | तिस 96 | तिसे 97 | तो 98 | था 99 | थी 100 | थे 101 | दबारा 102 | दिया 103 | दुसरा 104 | दूसरे 105 | दो 106 | द्वारा 107 | न 108 | नहीं 109 | ना 110 | निहायत 111 | नीचे 112 | ने 113 | पर 114 | पर 115 | पहले 116 | पूरा 117 | पे 118 | फिर 119 | बनी 120 | बही 121 | बहुत 122 | बाद 123 | बाला 124 | बिलकुल 125 | भी 126 | भीतर 127 | मगर 128 | मानो 129 | मे 130 | में 131 | यदि 132 | यह 133 | यहाँ 134 | यही 135 | या 136 | यिह 137 | ये 138 | रखें 139 | रहा 140 | रहे 141 | ऱ्वासा 142 | लिए 143 | लिये 144 | लेकिन 145 | व 146 | वर्ग 147 | वह 148 | वह 149 | वहाँ 150 | वहीं 151 | वाले 152 | वुह 153 | वे 154 | वग़ैरह 155 | संग 156 | सकता 157 | सकते 158 | सबसे 159 | सभी 160 | साथ 161 | साबुत 162 | साभ 163 | सारा 164 | से 165 | सो 166 | ही 167 | हुआ 168 | हुई 169 | हुए 170 | है 171 | हैं 172 | हो 173 | होता 174 | होती 175 | होते 176 | होना 177 | होने 178 | # additional normalized forms of the above 179 | अपनि 180 | जेसे 181 | होति 182 | सभि 183 | तिंहों 184 | इंहों 185 | दवारा 186 | इसि 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 | यहां 213 | जिंहों 214 | तिंहें 215 | किसि 216 | कइ 217 | यहि 218 | इंहिं 219 | जिधर 220 | इंहें 221 | अदि 222 | इतयादि 223 | हुइ 224 | कोनसा 225 | इसकि 226 | दुसरे 227 | जहां 228 | अप 229 | किंहों 230 | उनकि 231 | भि 232 | वरग 233 | हुअ 234 | जेसा 235 | नहिं 236 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_hu.txt: -------------------------------------------------------------------------------- 1 | | From svn.tartarus.org/snowball/trunk/website/algorithms/hungarian/stop.txt 2 | | This file is distributed under the BSD License. 3 | | See http://snowball.tartarus.org/license.php 4 | | Also see http://www.opensource.org/licenses/bsd-license.html 5 | | - Encoding was converted to UTF-8. 6 | | - This notice was added. 7 | 8 | | Hungarian stop word list 9 | | prepared by Anna Tordai 10 | 11 | a 12 | ahogy 13 | ahol 14 | aki 15 | akik 16 | akkor 17 | alatt 18 | által 19 | általában 20 | amely 21 | amelyek 22 | amelyekben 23 | amelyeket 24 | amelyet 25 | amelynek 26 | ami 27 | amit 28 | amolyan 29 | amíg 30 | amikor 31 | át 32 | abban 33 | ahhoz 34 | annak 35 | arra 36 | arról 37 | az 38 | azok 39 | azon 40 | azt 41 | azzal 42 | azért 43 | aztán 44 | azután 45 | azonban 46 | bár 47 | be 48 | belül 49 | benne 50 | cikk 51 | cikkek 52 | cikkeket 53 | csak 54 | de 55 | e 56 | eddig 57 | egész 58 | egy 59 | egyes 60 | egyetlen 61 | egyéb 62 | egyik 63 | egyre 64 | ekkor 65 | el 66 | elég 67 | ellen 68 | elő 69 | először 70 | előtt 71 | első 72 | én 73 | éppen 74 | ebben 75 | ehhez 76 | emilyen 77 | ennek 78 | erre 79 | ez 80 | ezt 81 | ezek 82 | ezen 83 | ezzel 84 | ezért 85 | és 86 | fel 87 | felé 88 | hanem 89 | hiszen 90 | hogy 91 | hogyan 92 | igen 93 | így 94 | illetve 95 | ill. 96 | ill 97 | ilyen 98 | ilyenkor 99 | ison 100 | ismét 101 | itt 102 | jó 103 | jól 104 | jobban 105 | kell 106 | kellett 107 | keresztül 108 | keressünk 109 | ki 110 | kívül 111 | között 112 | közül 113 | legalább 114 | lehet 115 | lehetett 116 | legyen 117 | lenne 118 | lenni 119 | lesz 120 | lett 121 | maga 122 | magát 123 | majd 124 | majd 125 | már 126 | más 127 | másik 128 | meg 129 | még 130 | mellett 131 | mert 132 | mely 133 | melyek 134 | mi 135 | mit 136 | míg 137 | miért 138 | milyen 139 | mikor 140 | minden 141 | mindent 142 | mindenki 143 | mindig 144 | mint 145 | mintha 146 | mivel 147 | most 148 | nagy 149 | nagyobb 150 | nagyon 151 | ne 152 | néha 153 | nekem 154 | neki 155 | nem 156 | néhány 157 | nélkül 158 | nincs 159 | olyan 160 | ott 161 | össze 162 | ő 163 | ők 164 | őket 165 | pedig 166 | persze 167 | rá 168 | s 169 | saját 170 | sem 171 | semmi 172 | sok 173 | sokat 174 | sokkal 175 | számára 176 | szemben 177 | szerint 178 | szinte 179 | talán 180 | tehát 181 | teljes 182 | tovább 183 | továbbá 184 | több 185 | úgy 186 | ugyanis 187 | új 188 | újabb 189 | újra 190 | után 191 | utána 192 | utolsó 193 | vagy 194 | vagyis 195 | valaki 196 | valami 197 | valamint 198 | való 199 | vagyok 200 | van 201 | vannak 202 | volt 203 | voltam 204 | voltak 205 | voltunk 206 | vissza 207 | vele 208 | viszont 209 | volna 210 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_hy.txt: -------------------------------------------------------------------------------- 1 | # example set of Armenian stopwords. 2 | այդ 3 | այլ 4 | այն 5 | այս 6 | դու 7 | դուք 8 | եմ 9 | են 10 | ենք 11 | ես 12 | եք 13 | է 14 | էի 15 | էին 16 | էինք 17 | էիր 18 | էիք 19 | էր 20 | ըստ 21 | թ 22 | ի 23 | ին 24 | իսկ 25 | իր 26 | կամ 27 | համար 28 | հետ 29 | հետո 30 | մենք 31 | մեջ 32 | մի 33 | ն 34 | նա 35 | նաև 36 | նրա 37 | նրանք 38 | որ 39 | որը 40 | որոնք 41 | որպես 42 | ու 43 | ում 44 | պիտի 45 | վրա 46 | և 47 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_ja.txt: -------------------------------------------------------------------------------- 1 | # 2 | # This file defines a stopword set for Japanese. 3 | # 4 | # This set is made up of hand-picked frequent terms from segmented Japanese Wikipedia. 5 | # Punctuation characters and frequent kanji have mostly been left out. See LUCENE-3745 6 | # for frequency lists, etc. that can be useful for making your own set (if desired) 7 | # 8 | # Note that there is an overlap between these stopwords and the terms stopped when used 9 | # in combination with the JapanesePartOfSpeechStopFilter. When editing this file, note 10 | # that comments are not allowed on the same line as stopwords. 11 | # 12 | # Also note that stopping is done in a case-insensitive manner. Change your StopFilter 13 | # configuration if you need case-sensitive stopping. Lastly, note that stopping is done 14 | # using the same character width as the entries in this file. Since this StopFilter is 15 | # normally done after a CJKWidthFilter in your chain, you would usually want your romaji 16 | # entries to be in half-width and your kana entries to be in full-width. 17 | # 18 | の 19 | に 20 | は 21 | を 22 | た 23 | が 24 | で 25 | て 26 | と 27 | し 28 | れ 29 | さ 30 | ある 31 | いる 32 | も 33 | する 34 | から 35 | な 36 | こと 37 | として 38 | い 39 | や 40 | れる 41 | など 42 | なっ 43 | ない 44 | この 45 | ため 46 | その 47 | あっ 48 | よう 49 | また 50 | もの 51 | という 52 | あり 53 | まで 54 | られ 55 | なる 56 | へ 57 | か 58 | だ 59 | これ 60 | によって 61 | により 62 | おり 63 | より 64 | による 65 | ず 66 | なり 67 | られる 68 | において 69 | ば 70 | なかっ 71 | なく 72 | しかし 73 | について 74 | せ 75 | だっ 76 | その後 77 | できる 78 | それ 79 | う 80 | ので 81 | なお 82 | のみ 83 | でき 84 | き 85 | つ 86 | における 87 | および 88 | いう 89 | さらに 90 | でも 91 | ら 92 | たり 93 | その他 94 | に関する 95 | たち 96 | ます 97 | ん 98 | なら 99 | に対して 100 | 特に 101 | せる 102 | 及び 103 | これら 104 | とき 105 | では 106 | にて 107 | ほか 108 | ながら 109 | うち 110 | そして 111 | とともに 112 | ただし 113 | かつて 114 | それぞれ 115 | または 116 | お 117 | ほど 118 | ものの 119 | に対する 120 | ほとんど 121 | と共に 122 | といった 123 | です 124 | とも 125 | ところ 126 | ここ 127 | ##### End of file 128 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_lv.txt: -------------------------------------------------------------------------------- 1 | # Set of Latvian stopwords from A Stemming Algorithm for Latvian, Karlis Kreslins 2 | # the original list of over 800 forms was refined: 3 | # pronouns, adverbs, interjections were removed 4 | # 5 | # prepositions 6 | aiz 7 | ap 8 | ar 9 | apakš 10 | ārpus 11 | augšpus 12 | bez 13 | caur 14 | dēļ 15 | gar 16 | iekš 17 | iz 18 | kopš 19 | labad 20 | lejpus 21 | līdz 22 | no 23 | otrpus 24 | pa 25 | par 26 | pār 27 | pēc 28 | pie 29 | pirms 30 | pret 31 | priekš 32 | starp 33 | šaipus 34 | uz 35 | viņpus 36 | virs 37 | virspus 38 | zem 39 | apakšpus 40 | # Conjunctions 41 | un 42 | bet 43 | jo 44 | ja 45 | ka 46 | lai 47 | tomēr 48 | tikko 49 | turpretī 50 | arī 51 | kaut 52 | gan 53 | tādēļ 54 | tā 55 | ne 56 | tikvien 57 | vien 58 | kā 59 | ir 60 | te 61 | vai 62 | kamēr 63 | # Particles 64 | ar 65 | diezin 66 | droši 67 | diemžēl 68 | nebūt 69 | ik 70 | it 71 | taču 72 | nu 73 | pat 74 | tiklab 75 | iekšpus 76 | nedz 77 | tik 78 | nevis 79 | turpretim 80 | jeb 81 | iekam 82 | iekām 83 | iekāms 84 | kolīdz 85 | līdzko 86 | tiklīdz 87 | jebšu 88 | tālab 89 | tāpēc 90 | nekā 91 | itin 92 | jā 93 | jau 94 | jel 95 | nē 96 | nezin 97 | tad 98 | tikai 99 | vis 100 | tak 101 | iekams 102 | vien 103 | # modal verbs 104 | būt 105 | biju 106 | biji 107 | bija 108 | bijām 109 | bijāt 110 | esmu 111 | esi 112 | esam 113 | esat 114 | būšu 115 | būsi 116 | būs 117 | būsim 118 | būsiet 119 | tikt 120 | tiku 121 | tiki 122 | tika 123 | tikām 124 | tikāt 125 | tieku 126 | tiec 127 | tiek 128 | tiekam 129 | tiekat 130 | tikšu 131 | tiks 132 | tiksim 133 | tiksiet 134 | tapt 135 | tapi 136 | tapāt 137 | topat 138 | tapšu 139 | tapsi 140 | taps 141 | tapsim 142 | tapsiet 143 | kļūt 144 | kļuvu 145 | kļuvi 146 | kļuva 147 | kļuvām 148 | kļuvāt 149 | kļūstu 150 | kļūsti 151 | kļūst 152 | kļūstam 153 | kļūstat 154 | kļūšu 155 | kļūsi 156 | kļūs 157 | kļūsim 158 | kļūsiet 159 | # verbs 160 | varēt 161 | varēju 162 | varējām 163 | varēšu 164 | varēsim 165 | var 166 | varēji 167 | varējāt 168 | varēsi 169 | varēsiet 170 | varat 171 | varēja 172 | varēs 173 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_ro.txt: -------------------------------------------------------------------------------- 1 | # This file was created by Jacques Savoy and is distributed under the BSD license. 2 | # See http://members.unine.ch/jacques.savoy/clef/index.html. 3 | # Also see http://www.opensource.org/licenses/bsd-license.html 4 | acea 5 | aceasta 6 | această 7 | aceea 8 | acei 9 | aceia 10 | acel 11 | acela 12 | acele 13 | acelea 14 | acest 15 | acesta 16 | aceste 17 | acestea 18 | aceşti 19 | aceştia 20 | acolo 21 | acum 22 | ai 23 | aia 24 | aibă 25 | aici 26 | al 27 | ăla 28 | ale 29 | alea 30 | ălea 31 | altceva 32 | altcineva 33 | am 34 | ar 35 | are 36 | aş 37 | aşadar 38 | asemenea 39 | asta 40 | ăsta 41 | astăzi 42 | astea 43 | ăstea 44 | ăştia 45 | asupra 46 | aţi 47 | au 48 | avea 49 | avem 50 | aveţi 51 | azi 52 | bine 53 | bucur 54 | bună 55 | ca 56 | că 57 | căci 58 | când 59 | care 60 | cărei 61 | căror 62 | cărui 63 | cât 64 | câte 65 | câţi 66 | către 67 | câtva 68 | ce 69 | cel 70 | ceva 71 | chiar 72 | cînd 73 | cine 74 | cineva 75 | cît 76 | cîte 77 | cîţi 78 | cîtva 79 | contra 80 | cu 81 | cum 82 | cumva 83 | curând 84 | curînd 85 | da 86 | dă 87 | dacă 88 | dar 89 | datorită 90 | de 91 | deci 92 | deja 93 | deoarece 94 | departe 95 | deşi 96 | din 97 | dinaintea 98 | dintr 99 | dintre 100 | drept 101 | după 102 | ea 103 | ei 104 | el 105 | ele 106 | eram 107 | este 108 | eşti 109 | eu 110 | face 111 | fără 112 | fi 113 | fie 114 | fiecare 115 | fii 116 | fim 117 | fiţi 118 | iar 119 | ieri 120 | îi 121 | îl 122 | îmi 123 | împotriva 124 | în 125 | înainte 126 | înaintea 127 | încât 128 | încît 129 | încotro 130 | între 131 | întrucât 132 | întrucît 133 | îţi 134 | la 135 | lângă 136 | le 137 | li 138 | lîngă 139 | lor 140 | lui 141 | mă 142 | mâine 143 | mea 144 | mei 145 | mele 146 | mereu 147 | meu 148 | mi 149 | mine 150 | mult 151 | multă 152 | mulţi 153 | ne 154 | nicăieri 155 | nici 156 | nimeni 157 | nişte 158 | noastră 159 | noastre 160 | noi 161 | noştri 162 | nostru 163 | nu 164 | ori 165 | oricând 166 | oricare 167 | oricât 168 | orice 169 | oricînd 170 | oricine 171 | oricît 172 | oricum 173 | oriunde 174 | până 175 | pe 176 | pentru 177 | peste 178 | pînă 179 | poate 180 | pot 181 | prea 182 | prima 183 | primul 184 | prin 185 | printr 186 | sa 187 | să 188 | săi 189 | sale 190 | sau 191 | său 192 | se 193 | şi 194 | sînt 195 | sîntem 196 | sînteţi 197 | spre 198 | sub 199 | sunt 200 | suntem 201 | sunteţi 202 | ta 203 | tăi 204 | tale 205 | tău 206 | te 207 | ţi 208 | ţie 209 | tine 210 | toată 211 | toate 212 | tot 213 | toţi 214 | totuşi 215 | tu 216 | un 217 | una 218 | unde 219 | undeva 220 | unei 221 | unele 222 | uneori 223 | unor 224 | vă 225 | vi 226 | voastră 227 | voastre 228 | voi 229 | voştri 230 | vostru 231 | vouă 232 | vreo 233 | vreun 234 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_th.txt: -------------------------------------------------------------------------------- 1 | # Thai stopwords from: 2 | # "Opinion Detection in Thai Political News Columns 3 | # Based on Subjectivity Analysis" 4 | # Khampol Sukhum, Supot Nitsuwat, and Choochart Haruechaiyasak 5 | ไว้ 6 | ไม่ 7 | ไป 8 | ได้ 9 | ให้ 10 | ใน 11 | โดย 12 | แห่ง 13 | แล้ว 14 | และ 15 | แรก 16 | แบบ 17 | แต่ 18 | เอง 19 | เห็น 20 | เลย 21 | เริ่ม 22 | เรา 23 | เมื่อ 24 | เพื่อ 25 | เพราะ 26 | เป็นการ 27 | เป็น 28 | เปิดเผย 29 | เปิด 30 | เนื่องจาก 31 | เดียวกัน 32 | เดียว 33 | เช่น 34 | เฉพาะ 35 | เคย 36 | เข้า 37 | เขา 38 | อีก 39 | อาจ 40 | อะไร 41 | ออก 42 | อย่าง 43 | อยู่ 44 | อยาก 45 | หาก 46 | หลาย 47 | หลังจาก 48 | หลัง 49 | หรือ 50 | หนึ่ง 51 | ส่วน 52 | ส่ง 53 | สุด 54 | สําหรับ 55 | ว่า 56 | วัน 57 | ลง 58 | ร่วม 59 | ราย 60 | รับ 61 | ระหว่าง 62 | รวม 63 | ยัง 64 | มี 65 | มาก 66 | มา 67 | พร้อม 68 | พบ 69 | ผ่าน 70 | ผล 71 | บาง 72 | น่า 73 | นี้ 74 | นํา 75 | นั้น 76 | นัก 77 | นอกจาก 78 | ทุก 79 | ที่สุด 80 | ที่ 81 | ทําให้ 82 | ทํา 83 | ทาง 84 | ทั้งนี้ 85 | ทั้ง 86 | ถ้า 87 | ถูก 88 | ถึง 89 | ต้อง 90 | ต่างๆ 91 | ต่าง 92 | ต่อ 93 | ตาม 94 | ตั้งแต่ 95 | ตั้ง 96 | ด้าน 97 | ด้วย 98 | ดัง 99 | ซึ่ง 100 | ช่วง 101 | จึง 102 | จาก 103 | จัด 104 | จะ 105 | คือ 106 | ความ 107 | ครั้ง 108 | คง 109 | ขึ้น 110 | ของ 111 | ขอ 112 | ขณะ 113 | ก่อน 114 | ก็ 115 | การ 116 | กับ 117 | กัน 118 | กว่า 119 | กล่าว 120 | -------------------------------------------------------------------------------- /deploy/solr/lang/stopwords_tr.txt: -------------------------------------------------------------------------------- 1 | # Turkish stopwords from LUCENE-559 2 | # merged with the list from "Information Retrieval on Turkish Texts" 3 | # (http://www.users.muohio.edu/canf/papers/JASIST2008offPrint.pdf) 4 | acaba 5 | altmış 6 | altı 7 | ama 8 | ancak 9 | arada 10 | aslında 11 | ayrıca 12 | bana 13 | bazı 14 | belki 15 | ben 16 | benden 17 | beni 18 | benim 19 | beri 20 | beş 21 | bile 22 | bin 23 | bir 24 | birçok 25 | biri 26 | birkaç 27 | birkez 28 | birşey 29 | birşeyi 30 | biz 31 | bize 32 | bizden 33 | bizi 34 | bizim 35 | böyle 36 | böylece 37 | bu 38 | buna 39 | bunda 40 | bundan 41 | bunlar 42 | bunları 43 | bunların 44 | bunu 45 | bunun 46 | burada 47 | çok 48 | çünkü 49 | da 50 | daha 51 | dahi 52 | de 53 | defa 54 | değil 55 | diğer 56 | diye 57 | doksan 58 | dokuz 59 | dolayı 60 | dolayısıyla 61 | dört 62 | edecek 63 | eden 64 | ederek 65 | edilecek 66 | ediliyor 67 | edilmesi 68 | ediyor 69 | eğer 70 | elli 71 | en 72 | etmesi 73 | etti 74 | ettiği 75 | ettiğini 76 | gibi 77 | göre 78 | halen 79 | hangi 80 | hatta 81 | hem 82 | henüz 83 | hep 84 | hepsi 85 | her 86 | herhangi 87 | herkesin 88 | hiç 89 | hiçbir 90 | için 91 | iki 92 | ile 93 | ilgili 94 | ise 95 | işte 96 | itibaren 97 | itibariyle 98 | kadar 99 | karşın 100 | katrilyon 101 | kendi 102 | kendilerine 103 | kendini 104 | kendisi 105 | kendisine 106 | kendisini 107 | kez 108 | ki 109 | kim 110 | kimden 111 | kime 112 | kimi 113 | kimse 114 | kırk 115 | milyar 116 | milyon 117 | mu 118 | mü 119 | mı 120 | nasıl 121 | ne 122 | neden 123 | nedenle 124 | nerde 125 | nerede 126 | nereye 127 | niye 128 | niçin 129 | o 130 | olan 131 | olarak 132 | oldu 133 | olduğu 134 | olduğunu 135 | olduklarını 136 | olmadı 137 | olmadığı 138 | olmak 139 | olması 140 | olmayan 141 | olmaz 142 | olsa 143 | olsun 144 | olup 145 | olur 146 | olursa 147 | oluyor 148 | on 149 | ona 150 | ondan 151 | onlar 152 | onlardan 153 | onları 154 | onların 155 | onu 156 | onun 157 | otuz 158 | oysa 159 | öyle 160 | pek 161 | rağmen 162 | sadece 163 | sanki 164 | sekiz 165 | seksen 166 | sen 167 | senden 168 | seni 169 | senin 170 | siz 171 | sizden 172 | sizi 173 | sizin 174 | şey 175 | şeyden 176 | şeyi 177 | şeyler 178 | şöyle 179 | şu 180 | şuna 181 | şunda 182 | şundan 183 | şunları 184 | şunu 185 | tarafından 186 | trilyon 187 | tüm 188 | üç 189 | üzere 190 | var 191 | vardı 192 | ve 193 | veya 194 | ya 195 | yani 196 | yapacak 197 | yapılan 198 | yapılması 199 | yapıyor 200 | yapmak 201 | yaptı 202 | yaptığı 203 | yaptığını 204 | yaptıkları 205 | yedi 206 | yerine 207 | yetmiş 208 | yine 209 | yirmi 210 | yoksa 211 | yüz 212 | zaten 213 | -------------------------------------------------------------------------------- /deploy/solr/lang/userdict_ja.txt: -------------------------------------------------------------------------------- 1 | # 2 | # This is a sample user dictionary for Kuromoji (JapaneseTokenizer) 3 | # 4 | # Add entries to this file in order to override the statistical model in terms 5 | # of segmentation, readings and part-of-speech tags. Notice that entries do 6 | # not have weights since they are always used when found. This is by-design 7 | # in order to maximize ease-of-use. 8 | # 9 | # Entries are defined using the following CSV format: 10 | # , ... , ... , 11 | # 12 | # Notice that a single half-width space separates tokens and readings, and 13 | # that the number tokens and readings must match exactly. 14 | # 15 | # Also notice that multiple entries with the same is undefined. 16 | # 17 | # Whitespace only lines are ignored. Comments are not allowed on entry lines. 18 | # 19 | 20 | # Custom segmentation for kanji compounds 21 | 日本経済新聞,日本 経済 新聞,ニホン ケイザイ シンブン,カスタム名詞 22 | 関西国際空港,関西 国際 空港,カンサイ コクサイ クウコウ,カスタム名詞 23 | 24 | # Custom segmentation for compound katakana 25 | トートバッグ,トート バッグ,トート バッグ,かずカナ名詞 26 | ショルダーバッグ,ショルダー バッグ,ショルダー バッグ,かずカナ名詞 27 | 28 | # Custom reading for former sumo wrestler 29 | 朝青龍,朝青龍,アサショウリュウ,カスタム人名 30 | -------------------------------------------------------------------------------- /deploy/solr/protwords.txt: -------------------------------------------------------------------------------- 1 | # The ASF licenses this file to You under the Apache License, Version 2.0 2 | # (the "License"); you may not use this file except in compliance with 3 | # the License. You may obtain a copy of the License at 4 | # 5 | # http://www.apache.org/licenses/LICENSE-2.0 6 | # 7 | # Unless required by applicable law or agreed to in writing, software 8 | # distributed under the License is distributed on an "AS IS" BASIS, 9 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 | # See the License for the specific language governing permissions and 11 | # limitations under the License. 12 | 13 | #----------------------------------------------------------------------- 14 | # Use a protected word file to protect against the stemmer reducing two 15 | # unrelated words to the same base word. 16 | 17 | # Some non-words that normally won't be encountered, 18 | # just to test that they won't be stemmed. 19 | dontstems 20 | zwhacky 21 | -------------------------------------------------------------------------------- /deploy/solr/scripts.conf: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one or more 2 | # contributor license agreements. See the NOTICE file distributed with 3 | # this work for additional information regarding copyright ownership. 4 | # The ASF licenses this file to You under the Apache License, Version 2.0 5 | # (the "License"); you may not use this file except in compliance with 6 | # the License. You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | user= 17 | solr_hostname=localhost 18 | solr_port=8983 19 | rsyncd_port=18983 20 | data_dir= 21 | webapp_name=solr 22 | master_host= 23 | master_data_dir= 24 | master_status_dir= 25 | -------------------------------------------------------------------------------- /deploy/solr/spellings.txt: -------------------------------------------------------------------------------- 1 | pizza 2 | history -------------------------------------------------------------------------------- /deploy/solr/stopwords.txt: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one or more 2 | # contributor license agreements. See the NOTICE file distributed with 3 | # this work for additional information regarding copyright ownership. 4 | # The ASF licenses this file to You under the Apache License, Version 2.0 5 | # (the "License"); you may not use this file except in compliance with 6 | # the License. You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | -------------------------------------------------------------------------------- /deploy/solr/synonyms.txt: -------------------------------------------------------------------------------- 1 | # The ASF licenses this file to You under the Apache License, Version 2.0 2 | # (the "License"); you may not use this file except in compliance with 3 | # the License. You may obtain a copy of the License at 4 | # 5 | # http://www.apache.org/licenses/LICENSE-2.0 6 | # 7 | # Unless required by applicable law or agreed to in writing, software 8 | # distributed under the License is distributed on an "AS IS" BASIS, 9 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 | # See the License for the specific language governing permissions and 11 | # limitations under the License. 12 | 13 | #----------------------------------------------------------------------- 14 | #some test synonym mappings unlikely to appear in real input text 15 | aaafoo => aaabar 16 | bbbfoo => bbbfoo bbbbar 17 | cccfoo => cccbar cccbaz 18 | fooaaa,baraaa,bazaaa 19 | 20 | # Some synonym groups specific to this example 21 | GB,gib,gigabyte,gigabytes 22 | MB,mib,megabyte,megabytes 23 | Television, Televisions, TV, TVs 24 | #notice we use "gib" instead of "GiB" so any WordDelimiterFilter coming 25 | #after us won't split it into two words. 26 | 27 | # Synonym mappings can be used for spelling correction too 28 | pixima => pixma 29 | -------------------------------------------------------------------------------- /deploy/solr/update-script.js: -------------------------------------------------------------------------------- 1 | /* 2 | This is a basic skeleton JavaScript update processor. 3 | 4 | In order for this to be executed, it must be properly wired into solrconfig.xml; by default it is commented out in 5 | the example solrconfig.xml and must be uncommented to be enabled. 6 | 7 | See http://wiki.apache.org/solr/ScriptUpdateProcessor for more details. 8 | */ 9 | 10 | function processAdd(cmd) { 11 | 12 | doc = cmd.solrDoc; // org.apache.solr.common.SolrInputDocument 13 | id = doc.getFieldValue("id"); 14 | logger.info("update-script#processAdd: id=" + id); 15 | 16 | // Set a field value: 17 | // doc.setField("foo_s", "whatever"); 18 | 19 | // Get a configuration parameter: 20 | // config_param = params.get('config_param'); // "params" only exists if processor configured with 21 | 22 | // Get a request parameter: 23 | // some_param = req.getParams().get("some_param") 24 | 25 | // Add a field of field names that match a pattern: 26 | // - Potentially useful to determine the fields/attributes represented in a result set, via faceting on field_name_ss 27 | // field_names = doc.getFieldNames().toArray(); 28 | // for(i=0; i < field_names.length; i++) { 29 | // field_name = field_names[i]; 30 | // if (/attr_.*/.test(field_name)) { doc.addField("attribute_ss", field_names[i]); } 31 | // } 32 | 33 | } 34 | 35 | function processDelete(cmd) { 36 | // no-op 37 | } 38 | 39 | function processMergeIndexes(cmd) { 40 | // no-op 41 | } 42 | 43 | function processCommit(cmd) { 44 | // no-op 45 | } 46 | 47 | function processRollback(cmd) { 48 | // no-op 49 | } 50 | 51 | function finish() { 52 | // no-op 53 | } 54 | -------------------------------------------------------------------------------- /deploy/solr/velocity/browse.vm: -------------------------------------------------------------------------------- 1 | #set($searcher=$request.searcher) 2 | #set($params=$request.params) 3 | #set($clusters = $response.response.clusters) 4 | #set($mltResults = $response.response.get("moreLikeThis")) 5 | #set($annotate = $params.get("annotateBrowse")) 6 | #parse('query.vm') 7 | #if($response.response.spellcheck.suggestions and $response.response.spellcheck.suggestions.size() > 0) 8 | Did you mean $response.response.spellcheck.suggestions.collation? 9 | #end 10 | 11 | 14 | 15 | 22 | 23 |
24 | #if(${response.response.error.code}) 25 |

ERROR ${response.response.error.code}

26 | ${response.response.error.msg} 27 | #end 28 |
29 | 30 |
31 | #if($response.response.get('grouped')) 32 | #foreach($grouping in $response.response.get('grouped')) 33 | #parse("hitGrouped.vm") 34 | #end 35 | #else 36 | #foreach($doc in $response.results) 37 | #parse("hit.vm") 38 | #end 39 | #end 40 |
41 | 42 | 53 | -------------------------------------------------------------------------------- /deploy/solr/velocity/cluster.vm: -------------------------------------------------------------------------------- 1 |

Clusters

2 |
3 | Run Solr with java -Dsolr.clustering.enabled=true -jar start.jar to see results 4 |
5 | 10 | -------------------------------------------------------------------------------- /deploy/solr/velocity/clusterResults.vm: -------------------------------------------------------------------------------- 1 | #foreach ($clusters in $response.response.clusters) 2 | #set($labels = $clusters.get('labels')) 3 | #set($docs = $clusters.get('docs')) 4 |

#foreach ($label in $labels)$label#if( $foreach.hasNext ),#end#end

5 |
    6 | #foreach ($cluDoc in $docs) 7 |
  1. $cluDoc
  2. 8 | #end 9 |
10 | 11 | 12 | #end -------------------------------------------------------------------------------- /deploy/solr/velocity/debug.vm: -------------------------------------------------------------------------------- 1 | #if($params.getBool("debugQuery",false)) 2 | toggle explain 3 |
$response.getExplainMap().get($doc.getFirstValue('id'))
4 | toggle all fields 5 | 6 | #foreach($fieldname in $doc.fieldNames) 7 |
8 | $fieldname : 9 | 10 | #foreach($value in $doc.getFieldValues($fieldname)) 11 | $esc.html($value) 12 | #end 13 | 14 | #end 15 |
16 |
17 | #end -------------------------------------------------------------------------------- /deploy/solr/velocity/facet_fields.vm: -------------------------------------------------------------------------------- 1 | #if($response.facetFields) 2 |

Field Facets

3 | #foreach($field in $response.facetFields) 4 | ## Hide facets without value 5 | #if($field.values.size() > 0) 6 | $field.name 7 | 8 |
    9 | #foreach($facet in $field.values) 10 |
  • $facet.name ($facet.count)
  • 11 | #end 12 |
13 | #end 14 | #end 15 | #end -------------------------------------------------------------------------------- /deploy/solr/velocity/facet_pivot.vm: -------------------------------------------------------------------------------- 1 |

Pivot Facets

2 | #set($pivot = $response.response.facet_counts.facet_pivot) 3 | #display_facet_pivot($pivot, "") 4 | -------------------------------------------------------------------------------- /deploy/solr/velocity/facet_queries.vm: -------------------------------------------------------------------------------- 1 | #set($field = $response.response.facet_counts.facet_queries) 2 |

Query Facets

3 | #display_facet_query($field, "", "") -------------------------------------------------------------------------------- /deploy/solr/velocity/facet_ranges.vm: -------------------------------------------------------------------------------- 1 |

Range Facets

2 | #foreach ($field in $response.response.facet_counts.facet_ranges) 3 | ## Hide facets without value 4 | #if($field.value.counts.size() > 0) 5 | #set($name = $field.key) 6 | #set($display = $name) 7 | #set($f = $field.value.counts) 8 | #set($start = $field.value.start) 9 | #set($end = $field.value.end) 10 | #set($gap = $field.value.gap) 11 | #set($before = $field.value.before) 12 | #set($after = $field.value.after) 13 | #display_facet_range($f, $display, $name, $start, $end, $gap, $before, $after) 14 | #end 15 | #end -------------------------------------------------------------------------------- /deploy/solr/velocity/facets.vm: -------------------------------------------------------------------------------- 1 | #parse('facet_fields.vm') 2 | #parse('facet_queries.vm') 3 | #parse('facet_ranges.vm') 4 | #parse('facet_pivot.vm') 5 | #parse('cluster.vm') -------------------------------------------------------------------------------- /deploy/solr/velocity/footer.vm: -------------------------------------------------------------------------------- 1 |
2 |
3 | Options: 4 | #if($request.params.get('debugQuery')) 5 | disable debug 6 | #else 7 | enable debug 8 | #end 9 | #if($annotate) 10 | disable annotation 11 | #else 12 | enable annotation 13 | #end 14 | XML
15 | 16 |
Documentation: Solr Home Page, Solr Wiki
17 |
Disclaimer: The locations displayed in this demonstration are purely fictional. It is more than likely that no store with the items listed actually exists at that location!
-------------------------------------------------------------------------------- /deploy/solr/velocity/head.vm: -------------------------------------------------------------------------------- 1 | 2 | ## An example of using an arbitrary request parameter 3 | #param('title') 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /deploy/solr/velocity/header.vm: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /deploy/solr/velocity/hit.vm: -------------------------------------------------------------------------------- 1 | #set($docId = $doc.getFieldValue('id')) 2 | 3 |
4 | #if($doc.getFieldValue('name')) 5 | #parse("product-doc.vm") 6 | #elseif($doc.getFieldValue('compName_s')) 7 | #parse("join-doc.vm") 8 | #else 9 | #parse("richtext-doc.vm") 10 | #end 11 |
12 | -------------------------------------------------------------------------------- /deploy/solr/velocity/hitGrouped.vm: -------------------------------------------------------------------------------- 1 |
2 |
$grouping.key
3 |
Total Matches in Group: $grouping.value.matches
4 |
#foreach ($group in $grouping.value.groups) 5 |
$group.groupValue ($group.doclist.numFound)
6 |
7 | #foreach ($doc in $group.doclist) 8 | #set($docId = $doc.getFieldValue('id')) 9 | #if($doc.getFieldValue('name')) 10 | #parse("product-doc.vm") 11 | #elseif($doc.getFieldValue('compName_s')) 12 | #parse("join-doc.vm") 13 | #else 14 | #parse("richtext-doc.vm") 15 | #end 16 | #end 17 |
18 | #end
19 |
20 | #if($params.getBool("debugQuery",false)) 21 | toggle explain 22 |
$response.getExplainMap().get($doc.getFirstValue('id'))
23 | #end 24 | 25 | -------------------------------------------------------------------------------- /deploy/solr/velocity/join-doc.vm: -------------------------------------------------------------------------------- 1 |
#field('compName_s')
2 |
Id: #field('id') (company-details document for join)
3 |
Address: #field('address_s')
4 | #parse('debug.vm') -------------------------------------------------------------------------------- /deploy/solr/velocity/jquery.autocomplete.css: -------------------------------------------------------------------------------- 1 | .ac_results { 2 | padding: 0px; 3 | border: 1px solid black; 4 | background-color: white; 5 | overflow: hidden; 6 | z-index: 99999; 7 | } 8 | 9 | .ac_results ul { 10 | width: 100%; 11 | list-style-position: outside; 12 | list-style: none; 13 | padding: 0; 14 | margin: 0; 15 | } 16 | 17 | .ac_results li { 18 | margin: 0px; 19 | padding: 2px 5px; 20 | cursor: default; 21 | display: block; 22 | /* 23 | if width will be 100% horizontal scrollbar will apear 24 | when scroll mode will be used 25 | */ 26 | /*width: 100%;*/ 27 | font: menu; 28 | font-size: 12px; 29 | /* 30 | it is very important, if line-height not setted or setted 31 | in relative units scroll will be broken in firefox 32 | */ 33 | line-height: 16px; 34 | overflow: hidden; 35 | } 36 | 37 | .ac_loading { 38 | background: white url('indicator.gif') right center no-repeat; 39 | } 40 | 41 | .ac_odd { 42 | background-color: #eee; 43 | } 44 | 45 | .ac_over { 46 | background-color: #0A246A; 47 | color: white; 48 | } 49 | -------------------------------------------------------------------------------- /deploy/solr/velocity/layout.vm: -------------------------------------------------------------------------------- 1 | 2 | 3 | #parse("head.vm") 4 | 5 | 6 | 7 | 10 |
11 | #parse("tabs.vm") 12 |
13 |
14 | $content 15 |
16 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /deploy/solr/velocity/product-doc.vm: -------------------------------------------------------------------------------- 1 |
#field('name') #if($params.getBool('mlt', false) == false)More Like This#end
2 | ##do we have a physical store for this product 3 | #set($store = $doc.getFieldValue('store')) 4 | #if($store)#end 5 |
Id: #field('id')
6 |
Price: #field('price_c')
7 |
Features: #field('features')
8 |
In Stock: #field('inStock')
9 |
10 | #set($mlt = $mltResults.get($docId)) 11 | #set($mltOn = $params.getBool('mlt')) 12 | #if($mltOn == true)
Similar Items
#end 13 | #if ($mltOn && $mlt && $mlt.size() > 0) 14 |
    15 | #foreach($mltHit in $mlt) 16 | #set($mltId = $mltHit.getFieldValue('id')) 17 |
  • Name: $mltHit.getFieldValue('name')
    18 |
    Price: $!number.currency($mltHit.getFieldValue('price')) In Stock: $mltHit.getFieldValue('inStock')
    19 | 20 |
  • 21 | #end 22 |
23 | #elseif($mltOn && $mlt.size() == 0) 24 |
No Similar Items Found
25 | #end 26 |
27 | #parse('debug.vm') -------------------------------------------------------------------------------- /deploy/solr/velocity/query.vm: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | Find: 5 |
Boost by Price 6 | #parse("querySpatial.vm") 7 | #parse("queryGroup.vm") 8 |
9 |
10 | 11 | #if($request.params.get('debugQuery')) 12 | 13 | #end 14 | #if($annotate == true) 15 | 16 | #end 17 | #foreach($fq in $request.params.getParams('fq')) 18 | #if ($fq != "{!bbox}") 19 | 20 | #end 21 | #end 22 |
23 | #foreach($fq in $params.getParams('fq')) 24 | #set($previous_fq_count=$velocityCount - 1) 25 | #if($fq != '') 26 | > $fq 27 | #end 28 | #end 29 |
30 |
31 | #if($request.params.get('debugQuery')) 32 | toggle parsed query 33 | 34 | #end 35 | #set($queryOpts = $request.params.get("queryOpts")) 36 | #if($queryOpts && $queryOpts != "") 37 | 38 | #end 39 |
40 |
41 | 42 |
43 | -------------------------------------------------------------------------------- /deploy/solr/velocity/queryGroup.vm: -------------------------------------------------------------------------------- 1 | #set($queryOpts = $params.get("queryOpts")) 2 | #if($queryOpts == "group") 3 |
4 | #set($groupF = $request.params.get('group.field')) 5 | 16 | 17 |
18 | 19 | #end -------------------------------------------------------------------------------- /deploy/solr/velocity/querySpatial.vm: -------------------------------------------------------------------------------- 1 | #set($queryOpts = $params.get("queryOpts")) 2 | #if($queryOpts == "spatial") 3 |
4 | #set($loc = $request.params.get('pt')) 5 | #set($dist = $request.params.get('d', "10")) 6 | 20 | Distance (KM): 22 | 23 | 24 | 25 |
26 | 40 | #end -------------------------------------------------------------------------------- /deploy/solr/velocity/suggest.vm: -------------------------------------------------------------------------------- 1 | #foreach($t in $response.response.terms.name) 2 | $t.key 3 | #end -------------------------------------------------------------------------------- /deploy/solr/velocity/tabs.vm: -------------------------------------------------------------------------------- 1 | ##TODO: Make some nice tabs here 2 | #set($queryOpts = $params.get("queryOpts")) 3 | Examples: #if($queryOpts && $queryOpts != "")Simple#{else}Simple#end 4 | #if($queryOpts == "spatial")Spatial#elseSpatial#end 5 | #if($queryOpts == "group")Group By#elseGroup By#end 6 |
-------------------------------------------------------------------------------- /deploy/solr/xslt/example_atom.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 23 | 24 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | Example Solr Atom 1.0 Feed 37 | 38 | This has been formatted by the sample "example_atom.xsl" transform - 39 | use your own XSLT to get a nicer Atom feed. 40 | 41 | 42 | Apache Solr 43 | solr-user@lucene.apache.org 44 | 45 | 47 | 48 | 49 | 50 | tag:localhost,2007:example 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | <xsl:value-of select="str[@name='name']"/> 60 | 61 | tag:localhost,2007: 62 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /deploy/solr/xslt/example_rss.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 23 | 24 | 26 | 27 | 32 | 33 | 34 | 35 | Example Solr RSS 2.0 Feed 36 | http://localhost:8983/solr 37 | 38 | This has been formatted by the sample "example_rss.xsl" transform - 39 | use your own XSLT to get a nicer RSS feed. 40 | 41 | en-us 42 | http://localhost:8983/solr 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | <xsl:value-of select="str[@name='name']"/> 54 | 55 | http://localhost:8983/solr/select?q=id: 56 | 57 | 58 | 59 | 60 | 61 | 62 | http://localhost:8983/solr/select?q=id: 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /deploy/solr/xslt/updateXml.xsl: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /deploy/supervisord/demo.conf: -------------------------------------------------------------------------------- 1 | [program:oscar-demo] 2 | command=/var/www/oscar/virtualenvs/demo/bin/uwsgi 3 | --socket /var/www/oscar/run/demo/uwsgi.sock 4 | --wsgi-file /var/www/oscar/builds/demo/sites/demo/deploy/wsgi/demo.wsgi 5 | --touch-reload /var/www/oscar/builds/demo/sites/demo/deploy/wsgi/demo.wsgi 6 | --virtualenv /var/www/oscar/virtualenvs/demo 7 | --uid www-data 8 | --gid www-data 9 | --chmod-socket=666 10 | --processes 2 11 | --harakiri-verbose 12 | --master 13 | --max-requests 500 14 | directory=/var/www/oscar/builds/demo/sites/demo 15 | autostart=true 16 | autorestart=true 17 | stdout_logfile=/var/www/oscar/logs/demo/uwsgi.log 18 | stderr_logfile=/var/www/oscar/logs/demo/uwsgi_error.log 19 | redirect_stderr=true 20 | stopsignal=QUIT 21 | -------------------------------------------------------------------------------- /deploy/wsgi/demo.wsgi: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import site 4 | import urllib 5 | 6 | sys.stdout = sys.stderr 7 | 8 | # Project root 9 | root = '/var/www/oscar/builds/demo/sites/demo' 10 | sys.path.insert(0, root) 11 | 12 | # Packages from virtualenv 13 | activate_this = '/var/www/oscar/virtualenvs/demo/bin/activate_this.py' 14 | execfile(activate_this, dict(__file__=activate_this)) 15 | 16 | # Set environmental variable for Django and fire WSGI handler 17 | os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 18 | import django.core.handlers.wsgi 19 | _application = django.core.handlers.wsgi.WSGIHandler() 20 | 21 | def application(environ, start_response): 22 | environ['PATH_INFO'] = urllib.unquote(environ['REQUEST_URI'].split('?')[0]) 23 | return _application(environ, start_response) 24 | -------------------------------------------------------------------------------- /fixtures/clothing.csv: -------------------------------------------------------------------------------- 1 | Type,UPC,Title,Description,Category,Partner,SKU,Price,Stock,size 2 | Group,,Sailing Jacket,This is a lovely jacket,Clothing > Jackets,,,,, 3 | Variant,,,,,EddisonTogs,JACKET-1-XS,9.99,23,XS 4 | Variant,,,,,EddisonTogs,JACKET-1-S,9.99,2,S 5 | Variant,,,,,EddisonTogs,JACKET-1-M,11.99,0,M 6 | Variant,,,,,EddisonTogs,JACKET-1-L,11.99,4,L 7 | Variant,,,,,EddisonTogs,JACKET-1-XL,13.99,1,XL 8 | -------------------------------------------------------------------------------- /fixtures/downloads.csv: -------------------------------------------------------------------------------- 1 | Type,UPC,Title,Description,Category,Partner,SKU,Price,Stock,format 2 | ,,Sailing download,Sailnig descipriont,Downloads,DigiDocs,AA-1234-PDF,9.99,NULL,PDF 3 | -------------------------------------------------------------------------------- /fixtures/images.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/fixtures/images.tar.gz -------------------------------------------------------------------------------- /fixtures/product-classes.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "pk": 5, 4 | "model": "catalogue.productclass", 5 | "fields": { 6 | "track_stock": true, 7 | "options": [], 8 | "requires_shipping": true, 9 | "name": "Banners", 10 | "slug": "banners" 11 | } 12 | }, 13 | { 14 | "pk": 2, 15 | "model": "catalogue.productclass", 16 | "fields": { 17 | "track_stock": true, 18 | "options": [], 19 | "requires_shipping": true, 20 | "name": "Books", 21 | "slug": "books" 22 | } 23 | }, 24 | { 25 | "pk": 4, 26 | "model": "catalogue.productclass", 27 | "fields": { 28 | "track_stock": true, 29 | "options": [], 30 | "requires_shipping": true, 31 | "name": "Clothing", 32 | "slug": "clothing" 33 | } 34 | }, 35 | { 36 | "pk": 3, 37 | "model": "catalogue.productclass", 38 | "fields": { 39 | "track_stock": false, 40 | "options": [], 41 | "requires_shipping": false, 42 | "name": "Downloads", 43 | "slug": "downloads" 44 | } 45 | } 46 | ] 47 | -------------------------------------------------------------------------------- /fixtures/shipping-event-types.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "pk": 1, 4 | "model": "order.shippingeventtype", 5 | "fields": { 6 | "code": "shipped", 7 | "name": "Shipped" 8 | } 9 | }, 10 | { 11 | "pk": 2, 12 | "model": "order.shippingeventtype", 13 | "fields": { 14 | "code": "returned", 15 | "name": "Returned" 16 | } 17 | }, 18 | { 19 | "pk": 3, 20 | "model": "order.shippingeventtype", 21 | "fields": { 22 | "code": "cancelled", 23 | "name": "Cancelled" 24 | } 25 | } 26 | ] 27 | -------------------------------------------------------------------------------- /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", "oscar_demo.settings") 7 | 8 | from django.core.management import execute_from_command_line 9 | 10 | execute_from_command_line(sys.argv) 11 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | # Oscar extensions 2 | https://github.com/django-oscar/django-oscar-stores/archive/630aa146066cd327085fe9206dc50f6e520cc023.zip#egg=django-oscar-stores==1.0-dev 3 | django-oscar-paypal==0.9.1 4 | django-oscar-datacash==0.8.3 5 | 6 | # We need PostGIS as the stores extension uses GeoDjango. 7 | psycopg2==2.5.1 8 | 9 | 10 | # To use Solr, we need pysolr 11 | pysolr==3.2 12 | 13 | django-extensions==1.6.1 14 | raven==4.0.3 15 | -------------------------------------------------------------------------------- /runtests.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Run the project tests 4 | 5 | # Change to directory of this script 6 | cd "$( dirname "$0" )" 7 | 8 | TESTS=${1:-"tests"} 9 | shift 10 | python manage.py test $TESTS --settings=settings_test --noinput $@ 11 | 12 | # Print out a nice colored message 13 | if [ $? -eq 0 ]; then 14 | echo -e "\033[42;37m\nTests passed!\033[0m" 15 | else 16 | echo -e "\033[41;37m\nTests failed!\033[0m" 17 | exit 1 18 | fi 19 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | from setuptools import find_packages, setup 3 | 4 | setup( 5 | name='django-oscar-demo', 6 | version='0.1.0', 7 | url='https://github.com/django-oscar/django-oscar-demo', 8 | author="David Winterbottom", 9 | author_email="david.winterbottom@gmail.com", 10 | description="Demo site for Django Oscar", 11 | long_description=open('README.rst').read(), 12 | keywords="E-commerce, Django, domain-driven", 13 | license='BSD', 14 | platforms=['linux'], 15 | package_dir={'': 'src'}, 16 | packages=find_packages('src'), 17 | include_package_data=True, 18 | install_requires=[ 19 | 'django==1.8.8', 20 | 'django-oscar==1.1.1', 21 | 'django-oscar-paypal==0.9.1', 22 | 'django-oscar-datacash==0.8.3', 23 | 'django-oscar-stores', 24 | 25 | ], 26 | dependency_links=[], 27 | classifiers=[], 28 | ) 29 | -------------------------------------------------------------------------------- /src/oscar_demo/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/__init__.py -------------------------------------------------------------------------------- /src/oscar_demo/apps/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/apps/__init__.py -------------------------------------------------------------------------------- /src/oscar_demo/apps/app.py: -------------------------------------------------------------------------------- 1 | from oscar.app import Shop 2 | 3 | from oscar_demo.apps.checkout.app import application as checkout_app 4 | 5 | 6 | class Application(Shop): 7 | # Use local checkout app so we can mess with the view classes 8 | checkout_app = checkout_app 9 | 10 | 11 | application = Application() 12 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/checkout/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/apps/checkout/__init__.py -------------------------------------------------------------------------------- /src/oscar_demo/apps/checkout/app.py: -------------------------------------------------------------------------------- 1 | from oscar.apps.checkout import app 2 | 3 | from oscar_demo.apps.checkout import views 4 | 5 | 6 | class CheckoutApplication(app.CheckoutApplication): 7 | # Replace the payment details view with our own 8 | payment_details_view = views.PaymentDetailsView 9 | 10 | 11 | application = CheckoutApplication() 12 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/checkout/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | 3 | from oscar.apps.payment import forms as payment_forms 4 | from oscar.apps.order.models import BillingAddress 5 | 6 | 7 | class BillingAddressForm(payment_forms.BillingAddressForm): 8 | """ 9 | Extended version of the core billing address form that adds a field so 10 | customers can choose to re-use their shipping address. 11 | """ 12 | SAME_AS_SHIPPING, NEW_ADDRESS = 'same', 'new' 13 | CHOICES = ( 14 | (SAME_AS_SHIPPING, 'Use shipping address'), 15 | (NEW_ADDRESS, 'Enter a new address'), 16 | ) 17 | same_as_shipping = forms.ChoiceField( 18 | widget=forms.RadioSelect, choices=CHOICES, initial=SAME_AS_SHIPPING) 19 | 20 | class Meta(payment_forms.BillingAddressForm): 21 | model = BillingAddress 22 | exclude = ('search_text', 'first_name', 'last_name') 23 | 24 | def __init__(self, shipping_address, data=None, *args, **kwargs): 25 | # Store a reference to the shipping address 26 | self.shipping_address = shipping_address 27 | 28 | super(BillingAddressForm, self).__init__(data, *args, **kwargs) 29 | 30 | # If no shipping address (eg a download), then force the 31 | # 'same_as_shipping' field to have a certain value. 32 | if shipping_address is None: 33 | self.fields['same_as_shipping'].choices = ( 34 | (self.NEW_ADDRESS, 'Enter a new address'),) 35 | self.fields['same_as_shipping'].initial = self.NEW_ADDRESS 36 | 37 | # If using same address as shipping, we don't need require any of the 38 | # required billing address fields. 39 | if data and data.get('same_as_shipping', None) == self.SAME_AS_SHIPPING: 40 | for field in self.fields: 41 | if field != 'same_as_shipping': 42 | self.fields[field].required = False 43 | 44 | def _post_clean(self): 45 | # Don't run model validation if using shipping address 46 | if self.cleaned_data.get('same_as_shipping') == self.SAME_AS_SHIPPING: 47 | return 48 | super(BillingAddressForm, self)._post_clean() 49 | 50 | def save(self, commit=True): 51 | if self.cleaned_data.get('same_as_shipping') == self.SAME_AS_SHIPPING: 52 | # Convert shipping address into billing address 53 | billing_addr = BillingAddress() 54 | self.shipping_address.populate_alternative_model(billing_addr) 55 | if commit: 56 | billing_addr.save() 57 | return billing_addr 58 | return super(BillingAddressForm, self).save(commit) 59 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/offers.py: -------------------------------------------------------------------------------- 1 | from oscar.apps.offer import models 2 | 3 | 4 | class AlphabetRange(object): 5 | name = "Products that start with D" 6 | 7 | def contains_product(self, product): 8 | return product.title.startswith('D') 9 | 10 | def num_products(self): 11 | return None 12 | 13 | 14 | class BasketOwnerCalledBarry(models.Condition): 15 | name = "User must be called barry" 16 | 17 | class Meta: 18 | proxy = True 19 | 20 | def is_satisfied(self, basket): 21 | if not basket.owner: 22 | return False 23 | return basket.owner.first_name.lower() == 'barry' 24 | 25 | def can_apply_condition(self, product): 26 | return False 27 | 28 | def consume_items(self, basket, affected_lines): 29 | return 30 | 31 | 32 | class ChangesOwnerName(models.Benefit): 33 | 34 | class Meta: 35 | proxy = True 36 | 37 | def apply(self, basket, condition, offer=None): 38 | condition.consume_items(basket, ()) 39 | return models.PostOrderAction( 40 | "You will have your name changed to Barry!") 41 | 42 | def apply_deferred(self, basket, order, application): 43 | if basket.owner: 44 | basket.owner.first_name = "Barry" 45 | basket.owner.save() 46 | return "Name changed to Barry!" 47 | return "We tried to apply benefit but couldn't" 48 | 49 | @property 50 | def description(self): 51 | return "Changes owners name" 52 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/order/__init__.py: -------------------------------------------------------------------------------- 1 | default_app_config = 'oscar_demo.apps.order.config.OrderConfig' 2 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/order/admin.py: -------------------------------------------------------------------------------- 1 | from oscar.apps.order.admin import * 2 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/order/config.py: -------------------------------------------------------------------------------- 1 | from oscar.apps.order import config 2 | 3 | 4 | class OrderConfig(config.OrderConfig): 5 | name = 'oscar_demo.apps.order' 6 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/order/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/apps/order/migrations/__init__.py -------------------------------------------------------------------------------- /src/oscar_demo/apps/order/models.py: -------------------------------------------------------------------------------- 1 | from oscar.apps.order.models import * 2 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/shipping/__init__.py: -------------------------------------------------------------------------------- 1 | default_app_config = 'oscar_demo.apps.shipping.config.ShippingConfig' 2 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/shipping/admin.py: -------------------------------------------------------------------------------- 1 | from oscar.apps.shipping.admin import * 2 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/shipping/config.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ShippingConfig(AppConfig): 5 | name = 'oscar_demo.apps.shipping' 6 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/shipping/methods.py: -------------------------------------------------------------------------------- 1 | from decimal import Decimal as D 2 | from django.template.loader import render_to_string 3 | 4 | from oscar.apps.shipping import methods 5 | from oscar.core import prices 6 | 7 | 8 | class Standard(methods.Base): 9 | code = 'standard' 10 | name = 'Standard shipping' 11 | 12 | charge_per_item = D('0.99') 13 | threshold = D('12.00') 14 | 15 | description = render_to_string( 16 | 'shipping/standard.html', { 17 | 'charge_per_item': charge_per_item, 18 | 'threshold': threshold}) 19 | 20 | def calculate(self, basket): 21 | # Free for orders over some threshold 22 | if basket.total_incl_tax > self.threshold: 23 | return prices.Price( 24 | currency=basket.currency, 25 | excl_tax=D('0.00'), 26 | incl_tax=D('0.00')) 27 | 28 | # Simple method - charge 0.99 per item 29 | total = basket.num_items * self.charge_per_item 30 | return prices.Price( 31 | currency=basket.currency, 32 | excl_tax=total, 33 | incl_tax=total) 34 | 35 | 36 | class Express(methods.Base): 37 | code = 'express' 38 | name = 'Express shipping' 39 | 40 | charge_per_item = D('1.50') 41 | description = render_to_string( 42 | 'shipping/express.html', {'charge_per_item': charge_per_item}) 43 | 44 | def calculate(self, basket): 45 | total = basket.num_items * self.charge_per_item 46 | return prices.Price( 47 | currency=basket.currency, 48 | excl_tax=total, 49 | incl_tax=total) 50 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/shipping/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/apps/shipping/migrations/__init__.py -------------------------------------------------------------------------------- /src/oscar_demo/apps/shipping/models.py: -------------------------------------------------------------------------------- 1 | from oscar.apps.shipping.models import * -------------------------------------------------------------------------------- /src/oscar_demo/apps/shipping/repository.py: -------------------------------------------------------------------------------- 1 | from oscar.apps.shipping import repository 2 | 3 | from . import methods 4 | 5 | 6 | # Override shipping repository in order to provide our own two 7 | # custom methods 8 | class Repository(repository.Repository): 9 | methods = (methods.Standard(), methods.Express()) 10 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/user/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/apps/user/__init__.py -------------------------------------------------------------------------------- /src/oscar_demo/apps/user/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | from django.conf import settings 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='Profile', 17 | fields=[ 18 | ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 19 | ('gender', models.CharField(max_length=1, verbose_name=b'Gender', choices=[(b'M', b'Male'), (b'F', b'Female')])), 20 | ('age', models.PositiveIntegerField(verbose_name=b'Age')), 21 | ('user', models.OneToOneField(related_name='profile', to=settings.AUTH_USER_MODEL)), 22 | ], 23 | ), 24 | ] 25 | -------------------------------------------------------------------------------- /src/oscar_demo/apps/user/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/apps/user/migrations/__init__.py -------------------------------------------------------------------------------- /src/oscar_demo/apps/user/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from oscar.core import compat 3 | 4 | 5 | class Profile(models.Model): 6 | """ 7 | Dummy profile model used for testing 8 | """ 9 | user = models.OneToOneField(compat.AUTH_USER_MODEL, related_name="profile") 10 | MALE, FEMALE = 'M', 'F' 11 | choices = ( 12 | (MALE, 'Male'), 13 | (FEMALE, 'Female')) 14 | gender = models.CharField(max_length=1, choices=choices, 15 | verbose_name='Gender') 16 | age = models.PositiveIntegerField(verbose_name='Age') 17 | -------------------------------------------------------------------------------- /src/oscar_demo/geoip/.gitignore: -------------------------------------------------------------------------------- 1 | *.dat 2 | *.txt 3 | *.csv 4 | -------------------------------------------------------------------------------- /src/oscar_demo/settings_docker.py: -------------------------------------------------------------------------------- 1 | USE_LESS = False 2 | COMPRESS_ENABLED = False 3 | 4 | HAYSTACK_CONNECTIONS = { 5 | 'default': { 6 | 'ENGINE': 'haystack.backends.solr_backend.SolrEngine', 7 | 'URL': u'http://127.0.0.1:8983/solr', 8 | 'INCLUDE_SPELLING': True 9 | }, 10 | } 11 | 12 | CACHES = { 13 | 'default': { 14 | 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 15 | 'LOCATION': '127.0.0.1:11211', 16 | } 17 | } 18 | 19 | SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' 20 | 21 | TEMPLATE_LOADERS = ( 22 | ('django.template.loaders.cached.Loader', ( 23 | 'django.template.loaders.filesystem.Loader', 24 | 'django.template.loaders.app_directories.Loader', 25 | )), 26 | ) 27 | 28 | DATABASES = { 29 | 'default': { 30 | 'ENGINE': 'django.contrib.gis.db.backends.postgis', 31 | 'NAME': 'oscar_demo', 32 | 'USER': '', 33 | 'PASSWORD': '', 34 | 'HOST': '127.0.0.1', 35 | 'PORT': '', 36 | }, 37 | } 38 | -------------------------------------------------------------------------------- /src/oscar_demo/settings_local.sample.py: -------------------------------------------------------------------------------- 1 | DATABASES = { 2 | 'default': { 3 | 'ENGINE': 'django.contrib.gis.db.backends.postgis', 4 | 'NAME': 'oscar_demo', 5 | 'USER': '', 6 | 'PASSWORD': '', 7 | 'HOST': '127.0.0.1', 8 | 'PORT': '', 9 | }, 10 | } 11 | -------------------------------------------------------------------------------- /src/oscar_demo/settings_test.py: -------------------------------------------------------------------------------- 1 | from settings import * 2 | 3 | TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' 4 | 5 | DEBUG_PROPAGATE_EXCEPTIONS = True 6 | 7 | NOSE_ARGS = ['-s'] 8 | 9 | # Disable logging 10 | import logging 11 | logging.disable(logging.ERROR) 12 | 13 | # Use proper cache 14 | CACHES = { 15 | 'default': { 16 | 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/README.rst: -------------------------------------------------------------------------------- 1 | ======= 2 | Statics 3 | ======= 4 | 5 | Oscar ships with a set of static files (js/css/less/images). These are used on 6 | the sandbox and demo sites. 7 | 8 | When building your own project, it is not recommended to use these files 9 | straight from the package. Rather, you should take a static copy of the 10 | ``oscar/static/oscar`` folder and commit it into your project. 11 | 12 | This is because the link with upstream project is not really helpful for 13 | statics. When you upgrade Oscar, the updated CSS files may not work with your 14 | mark-up, causing unnecessary work on your behalf. It's better to have complete 15 | control of the statics within your project. -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/css/README.rst: -------------------------------------------------------------------------------- 1 | === 2 | CSS 3 | === 4 | 5 | The following files are generated by Less, do not edit them directly: 6 | 7 | * styles.css 8 | * responsive.css 9 | * dashboard.css -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/favicon.ico -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/fonts/OpenSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/fonts/OpenSans-Bold.ttf -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/fonts/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/fonts/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/fonts/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/fonts/icomoon.eot -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/fonts/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/fonts/icomoon.ttf -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/fonts/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/fonts/icomoon.woff -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/fonts/lte-ie7.js: -------------------------------------------------------------------------------- 1 | /* Load this script using conditional IE comments if you need to support IE 7 and IE 6. */ 2 | 3 | window.onload = function() { 4 | function addIcon(el, entity) { 5 | var html = el.innerHTML; 6 | el.innerHTML = '' + entity + '' + html; 7 | } 8 | var icons = { 9 | 'icon-cart' : '', 10 | 'icon-star' : '', 11 | 'icon-lock' : '', 12 | 'icon-mobile' : '', 13 | 'icon-earth' : '', 14 | 'icon-arrow-right' : '', 15 | 'icon-search' : '', 16 | 'icon-truck' : '', 17 | 'icon-twitter' : '', 18 | 'icon-facebook' : '', 19 | 'icon-pinterest' : '', 20 | 'icon-mail' : '', 21 | 'icon-plus' : '+', 22 | 'icon-noun_project_62' : '!', 23 | 'icon-arrow-down' : '"', 24 | 'icon-check-alt' : '#', 25 | 'icon-x-altx-alt' : '$', 26 | 'icon-checkout-half-wheel' : '%' 27 | }, 28 | els = document.getElementsByTagName('*'), 29 | i, attr, html, c, el; 30 | for (i = 0; ; i += 1) { 31 | el = els[i]; 32 | if(!el) { 33 | break; 34 | } 35 | attr = el.getAttribute('data-icon'); 36 | if (attr) { 37 | addIcon(el, attr); 38 | } 39 | c = el.className; 40 | c = c.match(/icon-[^\s'"]+/); 41 | if (c && icons[c[0]]) { 42 | addIcon(el, icons[c[0]]); 43 | } 44 | } 45 | }; -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/carousel/banner-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/carousel/banner-01.jpg -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/carousel/banner-02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/carousel/banner-02.jpg -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/carousel/banner-03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/carousel/banner-03.jpg -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/carousel/homepage-banners-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/carousel/homepage-banners-01.jpg -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/carousel/homepage-banners-02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/carousel/homepage-banners-02.jpg -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/image_not_found.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/image_not_found.jpg -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/svg/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/svg/logo.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/ajax-loader.gif -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/bg-category-title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/bg-category-title.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/bg-stars-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/bg-stars-small.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/bg-stars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/bg-stars.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/black.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/dashboard/bg_subtle_dots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/dashboard/bg_subtle_dots.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/dashboard/logo_oscar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/dashboard/logo_oscar.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/icon_arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/icon_arrow_down.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/icon_arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/icon_arrow_left.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/icon_minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/icon_minus.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/icon_plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/icon_plus.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/icon_slider_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/icon_slider_left.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/icon_slider_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/icon_slider_right.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/nav_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/nav_sprite.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/sprite.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/unavailable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/unavailable.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/img/ui/wavecut-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/img/ui/wavecut-blue.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/js/bootstrap-wysihtml5/bootstrap-wysihtml5-0.0.2.css: -------------------------------------------------------------------------------- 1 | ul.wysihtml5-toolbar { 2 | margin: 0; 3 | padding: 0; 4 | display: block; 5 | } 6 | 7 | ul.wysihtml5-toolbar::after { 8 | clear: both; 9 | display: table; 10 | content: ""; 11 | } 12 | 13 | ul.wysihtml5-toolbar > li { 14 | float: left; 15 | display: list-item; 16 | list-style: none; 17 | margin: 0 5px 10px 0; 18 | } 19 | 20 | ul.wysihtml5-toolbar a[data-wysihtml5-command=bold] { 21 | font-weight: bold; 22 | } 23 | 24 | ul.wysihtml5-toolbar a[data-wysihtml5-command=italic] { 25 | font-style: italic; 26 | } 27 | 28 | ul.wysihtml5-toolbar a[data-wysihtml5-command=underline] { 29 | text-decoration: underline; 30 | } 31 | 32 | ul.wysihtml5-toolbar a.btn.wysihtml5-command-active { 33 | background-image: none; 34 | -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05); 35 | -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05); 36 | box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05); 37 | background-color: #E6E6E6; 38 | background-color: #D9D9D9 9; 39 | outline: 0; 40 | } 41 | 42 | ul.wysihtml5-commands-disabled .dropdown-menu { 43 | display: none !important; 44 | } 45 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/js/flexslider/bg_direction_nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/js/flexslider/bg_direction_nav.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/js/flexslider/homepage-nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/js/flexslider/homepage-nav.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/js/flexslider/product-nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/js/flexslider/product-nav.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/js/mousewheel/jquery.mousewheel.min.js: -------------------------------------------------------------------------------- 1 | /*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net) 2 | * Licensed under the MIT License (LICENSE.txt). 3 | * 4 | * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. 5 | * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. 6 | * Thanks to: Seamus Leahy for adding deltaX and deltaY 7 | * 8 | * Version: 3.0.6 9 | * 10 | * Requires: 1.2.2+ 11 | */ 12 | (function(a){function d(b){var c=b||window.event,d=[].slice.call(arguments,1),e=0,f=!0,g=0,h=0;return b=a.event.fix(c),b.type="mousewheel",c.wheelDelta&&(e=c.wheelDelta/120),c.detail&&(e=-c.detail/3),h=e,c.axis!==undefined&&c.axis===c.HORIZONTAL_AXIS&&(h=0,g=-1*e),c.wheelDeltaY!==undefined&&(h=c.wheelDeltaY/120),c.wheelDeltaX!==undefined&&(g=-1*c.wheelDeltaX/120),d.unshift(b,e,g,h),(a.event.dispatch||a.event.handle).apply(this,d)}var b=["DOMMouseScroll","mousewheel"];if(a.event.fixHooks)for(var c=b.length;c;)a.event.fixHooks[b[--c]]=a.event.mouseHooks;a.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=b.length;a;)this.addEventListener(b[--a],d,!1);else this.onmousewheel=d},teardown:function(){if(this.removeEventListener)for(var a=b.length;a;)this.removeEventListener(b[--a],d,!1);else this.onmousewheel=null}},a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery); 13 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/js/select2/select2-spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/js/select2/select2-spinner.gif -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/js/select2/select2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/js/select2/select2.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/js/select2/select2x2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/django-oscar/django-oscar-demo/812efd607a17a27db0c7057ab1b3b0d4862ad0fa/src/oscar_demo/static/demo/js/select2/select2x2.png -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/js/site.js: -------------------------------------------------------------------------------- 1 | /*jslint browser:true */ 2 | /*global jQuery: false */ 3 | 4 | var site; 5 | (function ($) { 6 | "use strict"; 7 | 8 | site = { 9 | initList: [], 10 | 11 | init: function () { 12 | var i; 13 | for (i = 0; i < site.initList.length; i += 1) { 14 | site.initList[i](); 15 | } 16 | }, 17 | 18 | /** 19 | * Register a function to be called on DOM ready 20 | * 21 | * @var function f 22 | */ 23 | registerInitFunction: function (f) { 24 | site.initList.push(f); 25 | } 26 | }; 27 | 28 | $(document).ready(function () { 29 | site.init(); 30 | }); 31 | 32 | }(jQuery)); -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/README.rst: -------------------------------------------------------------------------------- 1 | ============ 2 | CSS and Less 3 | ============ 4 | 5 | Oscar uses Less to build its CSS files. Each of the 3 main CSS files has a 6 | corresponding less file:: 7 | 8 | styles.less -> styles.css 9 | responsive.less -> responsive.css 10 | 11 | Oscar's CSS uses Less files from `Twitter's Bootstrap project`_ - these are housed 12 | in the bootstrap folder. 13 | 14 | .. _`Twitter's Bootstrap project`: http://twitter.github.com/bootstrap/ 15 | 16 | Compiling less 17 | -------------- 18 | 19 | Use the helper script to build the CSS files:: 20 | 21 | ./generate_css.sh -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/accordion.less: -------------------------------------------------------------------------------- 1 | // 2 | // Accordion 3 | // -------------------------------------------------- 4 | 5 | 6 | // Parent container 7 | .accordion { 8 | margin-bottom: @baseLineHeight; 9 | } 10 | 11 | // Group == heading + body 12 | .accordion-group { 13 | margin-bottom: 2px; 14 | border: 1px solid #e5e5e5; 15 | .border-radius(@baseBorderRadius); 16 | } 17 | .accordion-heading { 18 | border-bottom: 0; 19 | } 20 | .accordion-heading .accordion-toggle { 21 | display: block; 22 | padding: 8px 15px; 23 | } 24 | 25 | // General toggle styles 26 | .accordion-toggle { 27 | cursor: pointer; 28 | } 29 | 30 | // Inner needs the styles because you can't animate properly with any styles on the element 31 | .accordion-inner { 32 | padding: 9px 15px; 33 | border-top: 1px solid #e5e5e5; 34 | } 35 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/alerts.less: -------------------------------------------------------------------------------- 1 | // 2 | // Alerts 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base styles 7 | // ------------------------- 8 | 9 | .alert { 10 | padding: 8px 35px 8px 14px; 11 | margin-bottom: @baseLineHeight; 12 | text-shadow: 0 1px 0 rgba(255,255,255,.5); 13 | background-color: @warningBackground; 14 | border: 1px solid @warningBorder; 15 | .border-radius(@baseBorderRadius); 16 | } 17 | .alert, 18 | .alert h4 { 19 | // Specified for the h4 to prevent conflicts of changing @headingsColor 20 | color: @warningText; 21 | } 22 | .alert h4 { 23 | margin: 0; 24 | } 25 | 26 | // Adjust close link position 27 | .alert .close { 28 | position: relative; 29 | top: -2px; 30 | right: -21px; 31 | line-height: @baseLineHeight; 32 | } 33 | 34 | 35 | // Alternate styles 36 | // ------------------------- 37 | 38 | .alert-success { 39 | background-color: @successBackground; 40 | border-color: @successBorder; 41 | color: @successText; 42 | } 43 | .alert-success h4 { 44 | color: @successText; 45 | } 46 | .alert-danger, 47 | .alert-error { 48 | background-color: @errorBackground; 49 | border-color: @errorBorder; 50 | color: @errorText; 51 | } 52 | .alert-danger h4, 53 | .alert-error h4 { 54 | color: @errorText; 55 | } 56 | .alert-info { 57 | background-color: @infoBackground; 58 | border-color: @infoBorder; 59 | color: @infoText; 60 | } 61 | .alert-info h4 { 62 | color: @infoText; 63 | } 64 | 65 | 66 | // Block alerts 67 | // ------------------------- 68 | 69 | .alert-block { 70 | padding-top: 14px; 71 | padding-bottom: 14px; 72 | } 73 | .alert-block > p, 74 | .alert-block > ul { 75 | margin-bottom: 0; 76 | } 77 | .alert-block p + p { 78 | margin-top: 5px; 79 | } 80 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/bootstrap.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v2.3.1 3 | * 4 | * Copyright 2012 Twitter, Inc 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Designed and built with all the love in the world @twitter by @mdo and @fat. 9 | */ 10 | 11 | // Core variables and mixins 12 | @import "variables.less"; // Modify this for custom colors, font-sizes, etc 13 | @import "mixins.less"; 14 | 15 | // CSS Reset 16 | @import "reset.less"; 17 | 18 | // Grid system and page structure 19 | @import "scaffolding.less"; 20 | @import "grid.less"; 21 | @import "layouts.less"; 22 | 23 | // Base CSS 24 | @import "type.less"; 25 | @import "code.less"; 26 | @import "forms.less"; 27 | @import "tables.less"; 28 | 29 | // Components: common 30 | @import "sprites.less"; 31 | @import "dropdowns.less"; 32 | @import "wells.less"; 33 | @import "component-animations.less"; 34 | @import "close.less"; 35 | 36 | // Components: Buttons & Alerts 37 | @import "buttons.less"; 38 | @import "button-groups.less"; 39 | @import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less 40 | 41 | // Components: Nav 42 | @import "navs.less"; 43 | @import "navbar.less"; 44 | @import "breadcrumbs.less"; 45 | @import "pagination.less"; 46 | @import "pager.less"; 47 | 48 | // Components: Popovers 49 | @import "modals.less"; 50 | @import "tooltip.less"; 51 | @import "popovers.less"; 52 | 53 | // Components: Misc 54 | @import "thumbnails.less"; 55 | @import "media.less"; 56 | @import "labels-badges.less"; 57 | @import "progress-bars.less"; 58 | @import "accordion.less"; 59 | @import "carousel.less"; 60 | @import "hero-unit.less"; 61 | 62 | // Utility classes 63 | @import "utilities.less"; // Has to be last to override when necessary 64 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | .breadcrumb { 6 | padding: 8px 0; 7 | margin: 0 0 20px; 8 | list-style: none; 9 | > li { 10 | display: inline-block; 11 | .ie7-inline-block(); 12 | text-shadow: 0 1px 0 @white; 13 | > .divider { 14 | padding: 0 5px; 15 | color: #ccc; 16 | } 17 | } 18 | > .active { 19 | color: @grayLight; 20 | } 21 | &.nav-accounts { 22 | position: relative; 23 | font-size: @fontSizeSmall; 24 | margin-bottom:-20px; 25 | z-index: 1; 26 | a { 27 | color: #6b8ea4; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/close.less: -------------------------------------------------------------------------------- 1 | // 2 | // Close icons 3 | // -------------------------------------------------- 4 | 5 | 6 | .close { 7 | float: right; 8 | font-size: 20px; 9 | font-weight: bold; 10 | line-height: @baseLineHeight; 11 | color: @black; 12 | text-shadow: 0 1px 0 rgba(255,255,255,1); 13 | .opacity(20); 14 | &:hover, 15 | &:focus { 16 | color: @black; 17 | text-decoration: none; 18 | cursor: pointer; 19 | .opacity(40); 20 | } 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | button.close { 27 | padding: 0; 28 | cursor: pointer; 29 | background: transparent; 30 | border: 0; 31 | -webkit-appearance: none; 32 | } -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/code.less: -------------------------------------------------------------------------------- 1 | // 2 | // Code (inline and blocK) 3 | // -------------------------------------------------- 4 | 5 | 6 | // Inline and block code styles 7 | code, 8 | pre { 9 | padding: 0 3px 2px; 10 | #font > #family > .monospace; 11 | font-size: @baseFontSize - 2; 12 | color: @grayDark; 13 | .border-radius(3px); 14 | } 15 | 16 | // Inline code 17 | code { 18 | padding: 2px 4px; 19 | color: #d14; 20 | background-color: #f7f7f9; 21 | border: 1px solid #e1e1e8; 22 | white-space: nowrap; 23 | } 24 | 25 | // Blocks of code 26 | pre { 27 | display: block; 28 | padding: (@baseLineHeight - 1) / 2; 29 | margin: 0 0 @baseLineHeight / 2; 30 | font-size: @baseFontSize - 1; // 14px to 13px 31 | line-height: @baseLineHeight; 32 | word-break: break-all; 33 | word-wrap: break-word; 34 | white-space: pre; 35 | white-space: pre-wrap; 36 | background-color: #f5f5f5; 37 | border: 1px solid #ccc; // fallback for IE7-8 38 | border: 1px solid rgba(0,0,0,.15); 39 | .border-radius(@baseBorderRadius); 40 | 41 | // Make prettyprint styles more spaced out for readability 42 | &.prettyprint { 43 | margin-bottom: @baseLineHeight; 44 | } 45 | 46 | // Account for some code outputs that place code tags in pre tags 47 | code { 48 | padding: 0; 49 | color: inherit; 50 | white-space: pre; 51 | white-space: pre-wrap; 52 | background-color: transparent; 53 | border: 0; 54 | } 55 | } 56 | 57 | // Enable scrollable blocks of code 58 | .pre-scrollable { 59 | max-height: 340px; 60 | overflow-y: scroll; 61 | } -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | 6 | .fade { 7 | opacity: 0; 8 | .transition(opacity .15s linear); 9 | &.in { 10 | opacity: 1; 11 | } 12 | } 13 | 14 | .collapse { 15 | position: relative; 16 | height: 0; 17 | overflow: hidden; 18 | .transition(height .35s ease); 19 | &.in { 20 | height: auto; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/grid.less: -------------------------------------------------------------------------------- 1 | // 2 | // Grid system 3 | // -------------------------------------------------- 4 | 5 | 6 | // Fixed (940px) 7 | #grid > .core(@gridColumnWidth, @gridGutterWidth); 8 | 9 | // Fluid (940px) 10 | #grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth); 11 | 12 | // Reset utility classes due to specificity 13 | [class*="span"].hide, 14 | .row-fluid [class*="span"].hide { 15 | display: none; 16 | } 17 | 18 | [class*="span"].pull-right, 19 | .row-fluid [class*="span"].pull-right { 20 | float: right; 21 | } 22 | 23 | //no margin on lists 24 | ol, 25 | ul { 26 | &.row-fluid { 27 | margin-left:0; 28 | list-style: none; 29 | } 30 | } 31 | 32 | //Remove margin if condition 33 | .row-fluid [class*="span"] { 34 | &.no-margin { 35 | margin-left:0; 36 | } 37 | } 38 | 39 | .product-list { 40 | //Gutters change for lists of procuts 41 | @gridGutterWidth:40px; 42 | #grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth); 43 | 44 | //Remove margin if condition 45 | .row-fluid [class*="span"] { 46 | &.no-margin { 47 | margin-left:0; 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/hero-unit.less: -------------------------------------------------------------------------------- 1 | // 2 | // Hero unit 3 | // -------------------------------------------------- 4 | 5 | 6 | .hero-unit { 7 | padding: 60px; 8 | margin-bottom: 30px; 9 | font-size: 18px; 10 | font-weight: 200; 11 | line-height: @baseLineHeight * 1.5; 12 | color: @heroUnitLeadColor; 13 | background-color: @heroUnitBackground; 14 | .border-radius(6px); 15 | h1 { 16 | margin-bottom: 0; 17 | font-size: 60px; 18 | line-height: 1; 19 | color: @heroUnitHeadingColor; 20 | letter-spacing: -1px; 21 | } 22 | li { 23 | line-height: @baseLineHeight * 1.5; // Reset since we specify in type.less 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/labels-badges.less: -------------------------------------------------------------------------------- 1 | // 2 | // Labels and badges 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base classes 7 | .label, 8 | .badge { 9 | display: inline-block; 10 | padding: 2px 4px; 11 | font-size: @baseFontSize * .846; 12 | font-weight: bold; 13 | line-height: 14px; // ensure proper line-height if floated 14 | color: @white; 15 | vertical-align: baseline; 16 | white-space: nowrap; 17 | text-shadow: 0 -1px 0 rgba(0,0,0,.25); 18 | background-color: @grayLight; 19 | } 20 | // Set unique padding and border-radii 21 | .label { 22 | .border-radius(3px); 23 | } 24 | .badge { 25 | padding-left: 9px; 26 | padding-right: 9px; 27 | .border-radius(9px); 28 | } 29 | 30 | // Empty labels/badges collapse 31 | .label, 32 | .badge { 33 | &:empty { 34 | display: none; 35 | } 36 | } 37 | 38 | // Hover/focus state, but only for links 39 | a { 40 | &.label:hover, 41 | &.label:focus, 42 | &.badge:hover, 43 | &.badge:focus { 44 | color: @white; 45 | text-decoration: none; 46 | cursor: pointer; 47 | } 48 | } 49 | 50 | // Colors 51 | // Only give background-color difference to links (and to simplify, we don't qualifty with `a` but [href] attribute) 52 | .label, 53 | .badge { 54 | // Important (red) 55 | &-important { background-color: @errorText; } 56 | &-important[href] { background-color: darken(@errorText, 10%); } 57 | // Warnings (orange) 58 | &-warning { background-color: @orange; } 59 | &-warning[href] { background-color: darken(@orange, 10%); } 60 | // Success (green) 61 | &-success { background-color: @successText; } 62 | &-success[href] { background-color: darken(@successText, 10%); } 63 | // Info (turquoise) 64 | &-info { background-color: @infoText; } 65 | &-info[href] { background-color: darken(@infoText, 10%); } 66 | // Inverse (black) 67 | &-inverse { background-color: @grayDark; } 68 | &-inverse[href] { background-color: darken(@grayDark, 10%); } 69 | } 70 | 71 | // Quick fix for labels/badges in buttons 72 | .btn { 73 | .label, 74 | .badge { 75 | position: relative; 76 | top: -1px; 77 | } 78 | } 79 | .btn-mini { 80 | .label, 81 | .badge { 82 | top: 0; 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/layouts.less: -------------------------------------------------------------------------------- 1 | // 2 | // Layouts 3 | // -------------------------------------------------- 4 | 5 | // Demo page structure 6 | html, 7 | body { 8 | height: 100%; 9 | } 10 | 11 | #layout { 12 | min-height: 100%; 13 | margin-bottom: -(@footer-height); 14 | } 15 | 16 | .container-fluid { 17 | padding-right:@gridGutterWidth; 18 | padding-left:@gridGutterWidth; 19 | margin:0px auto; 20 | max-width:@containerWidth; 21 | } 22 | 23 | .page_inner { 24 | padding:@gridGutterWidth 0 50px; 25 | .clearfix(); 26 | } -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/media.less: -------------------------------------------------------------------------------- 1 | // Media objects 2 | // Source: http://stubbornella.org/content/?p=497 3 | // -------------------------------------------------- 4 | 5 | 6 | // Common styles 7 | // ------------------------- 8 | 9 | // Clear the floats 10 | .media, 11 | .media-body { 12 | overflow: hidden; 13 | *overflow: visible; 14 | zoom: 1; 15 | } 16 | 17 | // Proper spacing between instances of .media 18 | .media, 19 | .media .media { 20 | margin-top: 15px; 21 | } 22 | .media:first-child { 23 | margin-top: 0; 24 | } 25 | 26 | // For images and videos, set to block 27 | .media-object { 28 | display: block; 29 | } 30 | 31 | // Reset margins on headings for tighter default spacing 32 | .media-heading { 33 | margin: 0 0 5px; 34 | } 35 | 36 | 37 | // Media image alignment 38 | // ------------------------- 39 | 40 | .media > .pull-left { 41 | margin-right: 10px; 42 | } 43 | .media > .pull-right { 44 | margin-left: 10px; 45 | } 46 | 47 | 48 | // Media list variation 49 | // ------------------------- 50 | 51 | // Undo default ul/ol styles 52 | .media-list { 53 | margin-left: 0; 54 | list-style: none; 55 | } 56 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/modals.less: -------------------------------------------------------------------------------- 1 | // 2 | // Modals 3 | // -------------------------------------------------- 4 | 5 | // Background 6 | .modal-backdrop { 7 | position: fixed; 8 | top: 0; 9 | right: 0; 10 | bottom: 0; 11 | left: 0; 12 | z-index: @zindexModalBackdrop; 13 | background-color: @black; 14 | // Fade for backdrop 15 | &.fade { opacity: 0; } 16 | } 17 | 18 | .modal-backdrop, 19 | .modal-backdrop.fade.in { 20 | .opacity(80); 21 | } 22 | 23 | // Base modal 24 | .modal { 25 | position: fixed; 26 | top: 10%; 27 | left: 50%; 28 | z-index: @zindexModal; 29 | width: 560px; 30 | margin-left: -280px; 31 | background-color: @white; 32 | border: 1px solid #999; 33 | border: 1px solid rgba(0,0,0,.3); 34 | *border: 1px solid #999; /* IE6-7 */ 35 | .border-radius(6px); 36 | .box-shadow(0 3px 7px rgba(0,0,0,0.3)); 37 | .background-clip(padding-box); 38 | // Remove focus outline from opened modal 39 | outline: none; 40 | 41 | &.fade { 42 | .transition(e('opacity .3s linear, top .3s ease-out')); 43 | top: -25%; 44 | } 45 | &.fade.in { top: 10%; } 46 | } 47 | .modal-header { 48 | padding: 9px 15px; 49 | border-bottom: 1px solid #eee; 50 | // Close icon 51 | .close { margin-top: 2px; } 52 | // Heading 53 | h3 { 54 | margin: 0; 55 | line-height: 30px; 56 | } 57 | } 58 | 59 | // Body (where all modal content resides) 60 | .modal-body { 61 | position: relative; 62 | overflow-y: auto; 63 | max-height: 400px; 64 | padding: 15px; 65 | } 66 | // Remove bottom margin if need be 67 | .modal-form { 68 | margin-bottom: 0; 69 | } 70 | 71 | // Footer (for actions) 72 | .modal-footer { 73 | padding: 14px 15px 15px; 74 | margin-bottom: 0; 75 | text-align: right; // right align buttons 76 | background-color: #f5f5f5; 77 | border-top: 1px solid #ddd; 78 | .border-radius(0 0 6px 6px); 79 | .box-shadow(inset 0 1px 0 @white); 80 | .clearfix(); // clear it in case folks use .pull-* classes on buttons 81 | 82 | // Properly space out buttons 83 | .btn + .btn { 84 | margin-left: 5px; 85 | margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs 86 | } 87 | // but override that for button groups 88 | .btn-group .btn + .btn { 89 | margin-left: -1px; 90 | } 91 | // and override it for block buttons as well 92 | .btn-block + .btn-block { 93 | margin-left: 0; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/pager.less: -------------------------------------------------------------------------------- 1 | // 2 | // Pager pagination 3 | // -------------------------------------------------- 4 | 5 | 6 | .pager { 7 | margin: @baseLineHeight 0; 8 | list-style: none; 9 | text-align: center; 10 | .clearfix(); 11 | } 12 | .pager li { 13 | display: inline; 14 | } 15 | .pager li > a, 16 | .pager li > span { 17 | display: inline-block; 18 | padding: 5px 14px; 19 | background-color: #fff; 20 | border: 1px solid #ddd; 21 | .border-radius(15px); 22 | } 23 | .pager li > a:hover, 24 | .pager li > a:focus { 25 | text-decoration: none; 26 | background-color: #f5f5f5; 27 | } 28 | .pager .next > a, 29 | .pager .next > span { 30 | float: right; 31 | } 32 | .pager .previous > a, 33 | .pager .previous > span { 34 | float: left; 35 | } 36 | .pager .disabled > a, 37 | .pager .disabled > a:hover, 38 | .pager .disabled > a:focus, 39 | .pager .disabled > span { 40 | color: @grayLight; 41 | background-color: #fff; 42 | cursor: default; 43 | } -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/responsive-1200px-min.less: -------------------------------------------------------------------------------- 1 | // 2 | // Responsive: Large desktop and up 3 | // -------------------------------------------------- 4 | 5 | 6 | @media (min-width: 1200px) { 7 | 8 | // Fixed grid 9 | #grid > .core(@gridColumnWidth1200, @gridGutterWidth1200); 10 | 11 | // Fluid grid 12 | #grid > .fluid(@fluidGridColumnWidth1200, @fluidGridGutterWidth1200); 13 | 14 | // Input grid 15 | #grid > .input(@gridColumnWidth1200, @gridGutterWidth1200); 16 | 17 | // Thumbnails 18 | .thumbnails { 19 | margin-left: -@gridGutterWidth1200; 20 | } 21 | .thumbnails > li { 22 | margin-left: @gridGutterWidth1200; 23 | } 24 | .row-fluid .thumbnails { 25 | margin-left: 0; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/responsive-768px-979px.less: -------------------------------------------------------------------------------- 1 | // 2 | // Responsive: Tablet to desktop 3 | // -------------------------------------------------- 4 | 5 | 6 | @media (min-width: 768px) and (max-width: 979px) { 7 | 8 | // Fixed grid 9 | #grid > .core(@gridColumnWidth768, @gridGutterWidth768); 10 | 11 | // Fluid grid 12 | #grid > .fluid(@fluidGridColumnWidth768, @fluidGridGutterWidth768); 13 | 14 | // Input grid 15 | #grid > .input(@gridColumnWidth768, @gridGutterWidth768); 16 | 17 | // No need to reset .thumbnails here since it's the same @gridGutterWidth 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/responsive-utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Responsive: Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // IE10 Metro responsive 7 | // Required for Windows 8 Metro split-screen snapping with IE10 8 | // Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ 9 | @-ms-viewport{ 10 | width: device-width; 11 | } 12 | 13 | // Hide from screenreaders and browsers 14 | // Credit: HTML5 Boilerplate 15 | .hidden { 16 | display: none; 17 | visibility: hidden; 18 | } 19 | 20 | // Visibility utilities 21 | 22 | // For desktops 23 | .visible-phone { display: none !important; } 24 | .visible-tablet { display: none !important; } 25 | .hidden-phone { } 26 | .hidden-tablet { } 27 | .hidden-desktop { display: none !important; } 28 | .visible-desktop { display: inherit !important; } 29 | 30 | // Tablets & small desktops only 31 | @media (min-width: 768px) and (max-width: 979px) { 32 | // Hide everything else 33 | .hidden-desktop { display: inherit !important; } 34 | .visible-desktop { display: none !important ; } 35 | // Show 36 | .visible-tablet { display: inherit !important; } 37 | // Hide 38 | .hidden-tablet { display: none !important; } 39 | } 40 | 41 | // Phones only 42 | @media (max-width: 767px) { 43 | // Hide everything else 44 | .hidden-desktop { display: inherit !important; } 45 | .visible-desktop { display: none !important; } 46 | // Show 47 | .visible-phone { display: inherit !important; } // Use inherit to restore previous behavior 48 | // Hide 49 | .hidden-phone { display: none !important; } 50 | } 51 | 52 | // Print utilities 53 | .visible-print { display: none !important; } 54 | .hidden-print { } 55 | 56 | @media print { 57 | .visible-print { display: inherit !important; } 58 | .hidden-print { display: none !important; } 59 | } 60 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/scaffolding.less: -------------------------------------------------------------------------------- 1 | // 2 | // Scaffolding 3 | // -------------------------------------------------- 4 | 5 | 6 | // Body reset 7 | // ------------------------- 8 | 9 | body { 10 | margin: 0; 11 | font-family: @baseFontFamily; 12 | font-size: @bodyFontSize; 13 | line-height: @baseLineHeight; 14 | color: @textColor; 15 | background-color: @bodyBackground; 16 | } 17 | 18 | 19 | // Links 20 | // ------------------------- 21 | 22 | a { 23 | color: @linkColor; 24 | text-decoration: none; 25 | } 26 | a:hover, 27 | a:focus { 28 | color: @linkColorHover; 29 | text-decoration: underline; 30 | } 31 | 32 | 33 | // Images 34 | // ------------------------- 35 | 36 | // Rounded corners 37 | .img-rounded { 38 | .border-radius(6px); 39 | } 40 | 41 | // Add polaroid-esque trim 42 | .img-polaroid { 43 | padding: 4px; 44 | background-color: #fff; 45 | border: 1px solid #ccc; 46 | border: 1px solid rgba(0,0,0,.2); 47 | .box-shadow(0 1px 3px rgba(0,0,0,.1)); 48 | } 49 | 50 | // Perfect circle 51 | .img-circle { 52 | .border-radius(500px); // crank the border-radius so it works with most reasonably sized images 53 | } 54 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/thumbnails.less: -------------------------------------------------------------------------------- 1 | // 2 | // Thumbnails 3 | // -------------------------------------------------- 4 | 5 | 6 | // Note: `.thumbnails` and `.thumbnails > li` are overriden in responsive files 7 | 8 | // Make wrapper ul behave like the grid 9 | .thumbnails { 10 | margin-left: -@gridGutterWidth; 11 | list-style: none; 12 | .clearfix(); 13 | } 14 | // Fluid rows have no left margin 15 | .row-fluid .thumbnails { 16 | margin-left: 0; 17 | } 18 | 19 | // Float li to make thumbnails appear in a row 20 | .thumbnails > li { 21 | float: left; // Explicity set the float since we don't require .span* classes 22 | margin-bottom: @baseLineHeight; 23 | margin-left: @gridGutterWidth; 24 | } 25 | 26 | // The actual thumbnail (can be `a` or `div`) 27 | .thumbnail { 28 | display: block; 29 | padding: 4px; 30 | line-height: @baseLineHeight; 31 | border: 1px solid #ddd; 32 | .border-radius(@baseBorderRadius); 33 | .box-shadow(0 1px 3px rgba(0,0,0,.055)); 34 | .transition(all .2s ease-in-out); 35 | } 36 | // Add a hover/focus state for linked versions only 37 | a.thumbnail:hover, 38 | a.thumbnail:focus { 39 | border-color: @linkColor; 40 | .box-shadow(0 1px 4px rgba(0,105,214,.25)); 41 | } 42 | 43 | // Images and captions 44 | .thumbnail > img { 45 | display: block; 46 | max-width: 100%; 47 | margin-left: auto; 48 | margin-right: auto; 49 | } 50 | .thumbnail .caption { 51 | padding: 9px; 52 | color: @gray; 53 | } 54 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/tooltip.less: -------------------------------------------------------------------------------- 1 | // 2 | // Tooltips 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .tooltip { 8 | position: absolute; 9 | z-index: @zindexTooltip; 10 | display: block; 11 | visibility: visible; 12 | font-size: 11px; 13 | line-height: 1.4; 14 | .opacity(0); 15 | &.in { .opacity(80); } 16 | &.top { margin-top: -3px; padding: 5px 0; } 17 | &.right { margin-left: 3px; padding: 0 5px; } 18 | &.bottom { margin-top: 3px; padding: 5px 0; } 19 | &.left { margin-left: -3px; padding: 0 5px; } 20 | } 21 | 22 | // Wrapper for the tooltip content 23 | .tooltip-inner { 24 | max-width: 200px; 25 | padding: 8px; 26 | color: @tooltipColor; 27 | text-align: center; 28 | text-decoration: none; 29 | background-color: @tooltipBackground; 30 | .border-radius(@baseBorderRadius); 31 | } 32 | 33 | // Arrows 34 | .tooltip-arrow { 35 | position: absolute; 36 | width: 0; 37 | height: 0; 38 | border-color: transparent; 39 | border-style: solid; 40 | } 41 | .tooltip { 42 | &.top .tooltip-arrow { 43 | bottom: 0; 44 | left: 50%; 45 | margin-left: -@tooltipArrowWidth; 46 | border-width: @tooltipArrowWidth @tooltipArrowWidth 0; 47 | border-top-color: @tooltipArrowColor; 48 | } 49 | &.right .tooltip-arrow { 50 | top: 50%; 51 | left: 0; 52 | margin-top: -@tooltipArrowWidth; 53 | border-width: @tooltipArrowWidth @tooltipArrowWidth @tooltipArrowWidth 0; 54 | border-right-color: @tooltipArrowColor; 55 | } 56 | &.left .tooltip-arrow { 57 | top: 50%; 58 | right: 0; 59 | margin-top: -@tooltipArrowWidth; 60 | border-width: @tooltipArrowWidth 0 @tooltipArrowWidth @tooltipArrowWidth; 61 | border-left-color: @tooltipArrowColor; 62 | } 63 | &.bottom .tooltip-arrow { 64 | top: 0; 65 | left: 50%; 66 | margin-left: -@tooltipArrowWidth; 67 | border-width: 0 @tooltipArrowWidth @tooltipArrowWidth; 68 | border-bottom-color: @tooltipArrowColor; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // Quick floats 7 | .pull-right { 8 | float: right; 9 | } 10 | .pull-left { 11 | float: left; 12 | } 13 | .pull-clear { 14 | clear: both; 15 | } 16 | 17 | // Toggling content 18 | .hide { 19 | display: none; 20 | } 21 | .show { 22 | display: block; 23 | } 24 | 25 | // Visibility 26 | .invisible { 27 | visibility: hidden; 28 | } 29 | 30 | // For Affix plugin 31 | .affix { 32 | position: fixed; 33 | } 34 | 35 | .align-right, 36 | .table .align-right, 37 | .table .align-right { 38 | text-align:right; 39 | } 40 | 41 | .align-center, 42 | .table .align-center, 43 | .table .align-center { 44 | text-align:center; 45 | } 46 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/bootstrap/wells.less: -------------------------------------------------------------------------------- 1 | // 2 | // Wells 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .well { 8 | min-height: 20px; 9 | padding: 19px; 10 | margin-bottom: @baseLineHeight; 11 | background-color: @wellBackground; 12 | border: 1px solid darken(@wellBackground, 7%); 13 | blockquote { 14 | border-color: #ddd; 15 | border-color: rgba(0,0,0,.15); 16 | } 17 | } 18 | 19 | // Sizes 20 | .well-large { 21 | padding: 24px; 22 | .border-radius(@borderRadiusLarge); 23 | } 24 | .well-small { 25 | padding: 9px; 26 | .border-radius(@borderRadiusSmall); 27 | } 28 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/page/account.less: -------------------------------------------------------------------------------- 1 | // OSCAR ACCOUNTS UNIQUE STYLES 2 | // ----------- 3 | .login_form, .register_form { 4 | form { 5 | .well(); 6 | min-height:400px; 7 | } 8 | } 9 | .nav-profile { 10 | margin-bottom:0; 11 | } 12 | .account-pages .content, 13 | .account-profile .tab-content { 14 | padding:@baseLineHeight + 10px; 15 | border:1px solid darken(@grayLighter, 5%); 16 | border-top-width:0; 17 | } 18 | .nav-stacked .icon-chevron-right { 19 | margin-top: 5px; 20 | margin-right: -6px; 21 | .opacity(50); 22 | } 23 | .nav-stacked .active .icon-chevron-right { 24 | .opacity(100); 25 | } 26 | //Language select 27 | #language_selector select { 28 | width:100px; 29 | } 30 | //Same Size buttons on the account pages 31 | .account-profile { 32 | .btn-large { 33 | font-size:1em; 34 | padding: 8px 16px; 35 | } 36 | } -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/page/theme.less: -------------------------------------------------------------------------------- 1 | @import "icomoon.less"; 2 | @import "head_foot.less"; 3 | @import "account.less"; 4 | @import "checkout.less"; 5 | @import "product_lists.less"; 6 | @import "product_page.less"; 7 | @import "plugins.less"; 8 | @import "flexslider.less"; 9 | @import "promotions.less"; 10 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/responsive.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Responsive v2.1.1 3 | * 4 | * Copyright 2012 Twitter, Inc 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Designed and built with all the love in the world @twitter by @mdo and @fat. 9 | */ 10 | 11 | 12 | // Responsive.less 13 | // For phone and tablet devices 14 | // ------------------------------------------------------------- 15 | 16 | 17 | // REPEAT VARIABLES & MIXINS 18 | // ------------------------- 19 | // Required since we compile the responsive stuff separately 20 | 21 | @import "bootstrap/variables.less"; // Modify this for custom colors, font-sizes, etc 22 | @import "bootstrap/mixins.less"; 23 | 24 | // RESPONSIVE CLASSES 25 | // ------------------ 26 | 27 | @import "bootstrap/responsive-utilities.less"; 28 | 29 | 30 | // MEDIA QUERIES 31 | // ------------------ 32 | 33 | // Large desktops 34 | @import "bootstrap/responsive-1200px-min.less"; 35 | 36 | // Tablets to regular desktops 37 | @import "bootstrap/responsive-768px-979px.less"; 38 | 39 | // Phones to portrait tablets and narrow desktops 40 | @import "bootstrap/responsive-767px-max.less"; 41 | 42 | // RESPONSIVE NAVBAR 43 | // ------------------ 44 | 45 | // From 979px and below, show a button to toggle navbar contents 46 | @import "bootstrap/responsive-navbar.less"; 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/oscar_demo/static/demo/less/styles.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v2.3.1 3 | * 4 | * Copyright 2012 Twitter, Inc 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Designed and built with all the love in the world @twitter by @mdo and @fat. 9 | */ 10 | 11 | // Core variables and mixins 12 | @import "bootstrap/variables.less"; // Modify this for custom colors, font-sizes, etc 13 | @import "bootstrap/mixins.less"; 14 | 15 | // CSS Reset 16 | @import "bootstrap/reset.less"; 17 | 18 | // Grid system and page structure 19 | @import "bootstrap/scaffolding.less"; 20 | @import "bootstrap/grid.less"; 21 | @import "bootstrap/layouts.less"; 22 | 23 | // Base CSS 24 | @import "bootstrap/type.less"; 25 | @import "bootstrap/forms.less"; 26 | @import "bootstrap/tables.less"; 27 | 28 | // Components: common 29 | @import "bootstrap/dropdowns.less"; 30 | @import "bootstrap/wells.less"; 31 | @import "bootstrap/component-animations.less"; 32 | @import "bootstrap/close.less"; 33 | 34 | // Components: Buttons & Alerts 35 | @import "bootstrap/buttons.less"; 36 | @import "bootstrap/button-groups.less"; 37 | @import "bootstrap/alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less 38 | 39 | // Components: Nav 40 | @import "bootstrap/navs.less"; 41 | @import "bootstrap/navbar.less"; 42 | @import "bootstrap/breadcrumbs.less"; 43 | @import "bootstrap/pagination.less"; 44 | @import "bootstrap/pager.less"; 45 | 46 | // Components: Popovers 47 | @import "bootstrap/modals.less"; 48 | 49 | // Components: Misc 50 | @import "bootstrap/labels-badges.less"; 51 | @import "bootstrap/progress-bars.less"; 52 | 53 | // Unique Page Styles 54 | @import "page/theme.less"; 55 | 56 | // Utility classes 57 | @import "bootstrap/utilities.less"; // Has to be last to override when necessary -------------------------------------------------------------------------------- /src/oscar_demo/static/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/base.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/base.html" %} 2 | {% load i18n compress %} 3 | {% load staticfiles %} 4 | 5 | {% block mainstyles %} 6 | {% block styles %} 7 | {% compress css %} 8 | {% if use_less %} 9 | 10 | 11 | {% else %} 12 | 13 | 14 | {% endif %} 15 | {% endcompress %} 16 | {% endblock %} 17 | {% endblock %} 18 | 19 | 20 | {% block scripts %} 21 | {% compress js %} 22 | 23 | 24 | 25 | 26 | {% endcompress %} 27 | {% endblock scripts %} 28 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/basket/basket.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/basket/basket.html" %} 2 | {% load i18n %} 3 | 4 | {% block headertext %} 5 | {% trans "Basket" %} 6 | {% endblock %} 7 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/catalogue/browse.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/catalogue/browse.html" %} 2 | 3 | {% load currency_filters %} 4 | {% load basket_tags %} 5 | {% load promotion_tags %} 6 | {% load product_tags %} 7 | {% load category_tags %} 8 | {% load i18n %} 9 | 10 | {% block header %} 11 |
12 | {% if category.image %} 13 | {{ summary }} 14 | {% endif %} 15 |
16 |

{{ summary }}

17 | {% if category.description %} 18 |

{{ category.description|safe|truncatechars:250 }}

19 | {% endif %} 20 |
21 |
22 | {% endblock %} 23 | 24 | {% block column_left %} 25 |
26 | {% category_tree as tree_categories %} 27 |

{% trans "Browse" %}

28 | {% if tree_categories %} 29 | 52 | {% endif %} 53 |
54 | {% endblock %} 55 | 56 | {% block content %} 57 | 58 | {% if products %} 59 |
60 |
    61 | {% for product in products %} 62 |
  1. {% render_product product %}
  2. 63 | {% endfor %} 64 |
65 | {% include "partials/pagination.html" %} 66 |
67 | {% else %} 68 |

{% trans "No products found." %}

69 | {% endif %} 70 | 71 | {% endblock content %} 72 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/catalogue/partials/add_to_wishlist.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% load wishlist_tags %} 3 | 4 | {% if user.is_authenticated %} 5 | {% with wishlists=user.wishlists.all %} 6 | {# Select wishlists that contains product #} 7 | {% wishlists_containing_product wishlists product as product_wishlists %} 8 | {% if wishlists|length > 0 %} 9 | 10 | 25 | {% else %} 26 | {# 1 or no existing wishlists - show a simple button #} 27 |
28 | {% csrf_token %} 29 | 30 |
31 | {% endif %} 32 | 33 | {% for wishlist in product_wishlists %} 34 | {% if forloop.first %}
{% endif %} 35 |
36 | {% csrf_token %} 37 | {% blocktrans with name=wishlist.name url=wishlist.get_absolute_url %} 38 | Product is in '{{ name }}' wishlist. 39 | {% endblocktrans %} 40 | 41 |
42 | {% if not forloop.last %}
{% endif %} 43 | {% endfor %} 44 | {% endwith %} 45 | {% else %} 46 |
47 | {% endif %} 48 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/catalogue/partials/alerts_form.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 3 |
4 | {% csrf_token %} 5 | {% if not user.is_authenticated %} 6 | {% include "partials/form_fields_inline.html" with form=alert_form %} 7 | {% else %} 8 | {% include "partials/form_fields.html" with form=alert_form %} 9 | {% endif %} 10 | 11 |
12 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/catalogue/partials/child_stock_record.html: -------------------------------------------------------------------------------- 1 | {% load currency_filters %} 2 | {% load i18n %} 3 | {% load purchase_info_tags %} 4 | 5 | {% purchase_info_for_product request product as session %} 6 | 7 | {% if session.price.exists %} 8 | {% if session.price.excl_tax == 0 %} 9 |

{% trans "Free" %}

10 | {% elif session.price.is_tax_known %} 11 |

{{ session.price.incl_tax|currency:session.price.currency }}

12 | {% else %} 13 |

{{ session.price.excl_tax|currency:session.price.currency }}

14 | {% endif %} 15 | {% else %} 16 |

 

17 | {% endif %} 18 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/catalogue/partials/gallery.html: -------------------------------------------------------------------------------- 1 | {% load thumbnail %} 2 | {% load i18n %} 3 | 4 | 38 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/catalogue/partials/product.html: -------------------------------------------------------------------------------- 1 | {% load currency_filters %} 2 | {% load reviews_tags %} 3 | {% load thumbnail %} 4 | {% load i18n %} 5 | {% load purchase_info_tags %} 6 | 7 | {% purchase_info_for_product request product as session %} 8 | 9 |
10 | {% block product_image %} 11 |
12 | {% with image=product.primary_image %} 13 | {% thumbnail image.original "150x150" upscale=False as thumb %} 14 | 15 | {{ product.get_title }} 16 | 17 | 18 | {% endthumbnail %} 19 | {% endwith %} 20 |
21 | {% endblock %} 22 | 23 | {% block product_title %} 24 |

25 | 26 | {% if session.availability.is_available_to_buy %} 27 | {{ session.stockrecord.partner.name|truncatechars:19 }} 28 | {% else %} 29 | {% trans "No partner" %} 30 | {% endif %} 31 | 32 | {{ product.get_title|truncatechars:30 }} 33 |

34 | {% endblock %} 35 | 36 | {% block product_review %} 37 |

38 | 39 | 40 | 41 | 42 | 43 |

44 | {% endblock %} 45 | 46 | {% block product_price %} 47 |
48 |

{% include "catalogue/partials/stock_record.html" %}

49 | 50 | {% if product.is_group %} 51 | {% trans "View range" %} 52 | {% else %} 53 | {% include "catalogue/partials/add_to_basket_form_compact.html" %} 54 | {% endif %} 55 | 56 |
57 | {% endblock %} 58 | 59 |
60 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/catalogue/partials/review.html: -------------------------------------------------------------------------------- 1 | {% load reviews_tags %} 2 | {% load i18n %} 3 | 4 |
5 |
6 |

7 | 8 | 9 | 10 | 11 | 12 | {{ review.title }} {{ review.score }} 13 |

14 |
15 | 16 | {{ review.body.strip|linebreaks }} 17 | 18 |
19 |
20 |
21 |

22 | 23 | {% blocktrans with name=review.get_reviewer_name %} 24 | Reviewed by {{ name }} on 25 | {% endblocktrans %}
26 | {{ review.date_created }} 27 |
28 |

29 |
30 |
31 |
32 |
33 | {% if request.user.is_authenticated %} 34 |

{% trans "Is this review helpful?" %}

35 |
36 | {% csrf_token %} 37 | 38 | 39 |
40 |
41 | {% csrf_token %} 42 | 43 | 44 |
45 | {% endif %} 46 | 47 | {% if review.has_votes %} 48 |

49 | 50 | {% blocktrans count review.num_up_votes as num_up_votes %} 51 | 1 customer found this useful 52 | {% plural %} 53 | {{ num_up_votes }} customers found this useful 54 | {% endblocktrans %} 55 | 56 |

57 | {% endif %} 58 |
59 |
60 |
61 |
62 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/catalogue/partials/review_totals.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% load reviews_tags %} 3 | {% load history_tags %} 4 | 5 | 29 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/catalogue/partials/stock_record.html: -------------------------------------------------------------------------------- 1 | {% load currency_filters %} 2 | {% load i18n %} 3 | {% load purchase_info_tags %} 4 | 5 | {% purchase_info_for_product request product as session %} 6 | 7 | {% if product.is_group %} 8 | {% blocktrans with product.min_child_price_incl_tax|currency as price %} From {{ price }}{% endblocktrans %} 9 | {% else %} 10 | {% if session.price.retail > session.price.incl_tax %}{{ session.price.retail|currency }}{% endif %} {{ session.price.incl_tax|currency }} 11 | {% endif %} 12 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/catalogue/reviews/review_detail.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/catalogue/reviews/review_detail.html" %} 2 | {% load currency_filters %} 3 | {% load history_tags %} 4 | {% load thumbnail %} 5 | {% load i18n %} 6 | {% load staticfiles %} 7 | 8 | {% block content %} 9 |
10 |
11 |
12 | {% include "catalogue/partials/gallery.html" %} 13 |
14 |
15 | {% include "catalogue/partials/review_totals.html" %} 16 | {% include 'catalogue/partials/review.html' %} 17 |
18 |
19 |
20 | {% endblock %} -------------------------------------------------------------------------------- /src/oscar_demo/templates/catalogue/reviews/review_form.html: -------------------------------------------------------------------------------- 1 | {% extends "catalogue/detail.html" %} 2 | {% load i18n %} 3 | {% load reviews_tags %} 4 | 5 | {% block product_review %} 6 | {% include "catalogue/partials/review_totals.html" %} 7 | 8 |
9 |

{% trans "Leave a product review" %}

10 |
11 |
12 | {% csrf_token %} 13 | {% include "partials/form_fields.html" with form=form %} 14 | 15 | {% trans "or" %} 16 | {% trans "cancel" %} 17 |
18 |
19 |
20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/catalogue/reviews/review_list.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/catalogue/reviews/review_list.html" %} 2 | {% load currency_filters %} 3 | {% load history_tags %} 4 | {% load thumbnail %} 5 | {% load i18n %} 6 | {% load staticfiles %} 7 | {% load reviews_tags %} 8 | 9 | 10 | {% block content %} 11 |
12 |
13 |
14 | {% include "catalogue/partials/gallery.html" %} 15 |
16 |
17 | {% include "catalogue/partials/review_totals.html" %} 18 | {% if reviews %} 19 |

{% trans "Sort by:" %}

20 |
21 | 25 | 26 |
27 | 28 | {% for review in reviews %} 29 | {% include 'catalogue/partials/review.html' %} 30 | {% endfor %} 31 | {% include 'partials/pagination.html' %} 32 | 33 | {% else %} 34 |

{% trans "This product does not have any reviews yet." %}

35 | {% endif %} 36 |
37 |
38 |
39 | {% endblock %} -------------------------------------------------------------------------------- /src/oscar_demo/templates/checkout/gateway.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/checkout/shipping_address.html" %} 2 | {% load currency_filters %} 3 | {% load i18n %} 4 | 5 | {% block content %} 6 | 7 | 10 | 11 |
12 |
13 |
14 |
15 | {% csrf_token %} 16 | {{ form.non_field_errors }} 17 | {% include 'partials/form_field.html' with field=form.username %} 18 | 19 |
20 | {{ form.options.errors }} 21 |
22 | 26 |
27 |
28 | 29 |
30 |
31 | {{ form.password }} 32 | {% trans "Get a password reminder" %} 33 | {% for error in form.password.errors %} 34 | 35 | {{ error }} 36 | 37 | {% endfor %} 38 |
39 |
40 | 41 |
42 |
43 | 47 |
48 |
49 |
50 |
51 |
52 | 53 |
54 | 55 | {% endblock content %} 56 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/checkout/nav.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 10 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/checkout/payment_details.html: -------------------------------------------------------------------------------- 1 | {% extends 'oscar/checkout/payment_details.html' %} 2 | {% load i18n %} 3 | 4 | {% block payment_details %} 5 | 8 | 9 | {% block payment_details_content %} 10 |
11 | {% csrf_token %} 12 | 13 |
14 |

{% trans "Bankcard" %}

15 | {% include 'partials/form_fields.html' with form=bankcard_form %} 16 |
17 |

{% trans "Demo site help" %}

18 |

{% trans "You can use a magic card number of 1000010000000007 together with an CVV number." %}

19 |
20 |
21 | 22 |
23 |

{% trans "Billing address" %}

24 | {{ billing_address_form.non_field_errors }} 25 | 26 | {% if basket.is_shipping_required %} 27 |

28 | {{ billing_address_form.same_as_shipping.0 }} 29 | {{ billing_address_form.same_as_shipping.1 }} 30 |

31 | 47 | 48 | 49 | 50 | {% endblock %} 51 | {% endblock payment_details %} 52 | 53 | {% block onbodyload %} 54 | {# Toggle visibility of the billing address form #} 55 | $("input[name='same_as_shipping']").change(function(){ 56 | $("#billing_address_form").toggle(); 57 | }); 58 | {% endblock %} 59 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/checkout/preview.html: -------------------------------------------------------------------------------- 1 | {% extends 'oscar/checkout/preview.html' %} 2 | {% load currency_filters %} 3 | {% load i18n %} 4 | 5 | {% block payment_method %} 6 |
7 |

{% trans "Payment" %}

8 |
9 | 10 |

Bankcard

11 |

{% blocktrans with amount=order_total.incl_tax|currency %} 12 | {{ amount }} will be debited from your bankcard: 13 | {% endblocktrans %}

14 | {% with bankcard=bankcard_form.bankcard %} 15 |

16 | {% trans "Card type" %}: {{ bankcard.card_type }}
17 | {% trans "Card number" %}: {{ bankcard.obfuscated_number }}
18 | {% trans "Expiry month" %}: {{ bankcard.expiry_month }}

19 | {% endwith %} 20 | 21 |

Billing address

22 |

23 | {% for field in billing_address.active_address_fields %} 24 | {{ field }}
25 | {% endfor %} 26 |

27 | {% if billing_address.phone_number %} 28 |

{% trans "Contact number" %}: {{ billing_address.phone_number }}

29 | {% endif %} 30 | 31 | 34 |
35 |
36 | {% endblock %} 37 | 38 | 39 | {% block place_order %} 40 |
41 |
42 | {% csrf_token %} 43 | 44 | 45 | {% comment %} 46 | When submitting sensitive data on the payment details page (eg a bankcard) 47 | we don't want to save the data and so we pass the bound form to the preview 48 | template and render it in a hidden div. Then the payment information will 49 | get re-submitted when the user confirms the order. 50 | {% endcomment %} 51 |
52 | {% block hiddenforms %} 53 | {{ bankcard_form.as_p }} 54 | {{ billing_address_form.as_p }} 55 | {% endblock %} 56 |
57 | 58 | 59 |
60 | {% endblock place_order %} 61 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/checkout/shipping_methods.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/checkout/shipping_methods.html" %} 2 | {% load currency_filters %} 3 | {% load i18n %} 4 | 5 | {% block shipping_method %} 6 | 9 |
10 |
11 |

{% trans "Method" %}

12 |

{% trans "Cost" %}

13 |
14 |
15 | 16 | {% for method in methods %} 17 |
18 |
19 |
20 |

{{ method.name }}

21 | {% if method.description %} 22 |

{{ method.description|safe }}

23 | {% endif %} 24 | {% if method.is_discounted %} 25 | 26 | {% with discount=method.get_discount %} 27 | {% blocktrans with amount=discount.discount|currency name=discount.name %} 28 | This includes a discount of {{ amount }} as 29 | your basket qualifies for the '{{ name }}' offer. 30 | {% endblocktrans %} 31 | {% endwith %} 32 | 33 | {% endif %} 34 |
35 |
36 | {{ method.charge_incl_tax|currency }} 37 |
38 |
39 |
40 | {% csrf_token %} 41 | 42 | 43 |
44 |
45 |
46 |
47 | {% endfor %} 48 | {% endblock shipping_method %} 49 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/checkout/user_address_delete.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/checkout/user_address_delete.html" %} 2 | {% load i18n %} 3 | 4 | 5 | {% block shipping_address %} 6 | 9 |
10 | {% csrf_token %} 11 |

{{ object.summary }}

12 |

{% trans "Are you sure you want to delete this address?" %}

13 |

14 | {% trans "or" %} {% trans "cancel" %}.

15 |
16 | {% endblock shipping_address %} 17 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/checkout/user_address_form.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/checkout/user_address_form.html" %} 2 | {% load i18n %} 3 | 4 | {% block shipping_address %} 5 | 8 | 9 |
10 | {% csrf_token %} 11 |
12 |
13 |
14 | {% include "partials/form_fields.html" with form=form %} 15 |
16 |
17 |
18 | 19 | {% trans "or" %} {% trans "cancel" %}. 20 |
21 | {% endblock shipping_address %} 22 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/customer/baseaccountpage.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/customer/baseaccountpage.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block column_left %} 6 |
7 |

{% trans "Your Account" %}

8 | 47 |
48 | {% endblock %} -------------------------------------------------------------------------------- /src/oscar_demo/templates/customer/history/recently_viewed_products.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% load product_tags %} 3 | 4 | {% if products %} 5 | 19 | {% endif %} 20 | 21 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/customer/login_registration.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/customer/login_registration.html" %} 2 | {% load currency_filters %} 3 | {% load i18n %} 4 | 5 | {% block content %} 6 | 7 |
8 | 17 |
18 |
19 |

{% trans 'Register' %}

20 | {% csrf_token %} 21 | {% include "partials/form_fields.html" with form=registration_form %} 22 | 23 |
24 |
25 |
26 | 27 | {% endblock content %} 28 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/customer/partials/nav_account.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 3 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/dashboard/orders/order_detail.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/dashboard/orders/order_detail.html" %} 2 | {% load i18n %} 3 | 4 | {% block line_actions %} 5 |
6 |

{% trans "With selected lines" %}:

7 | 8 |
9 |
10 | 13 | 21 | 24 |
25 |
26 | 27 |
28 | {% endblock line_actions %} 29 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/offer/detail.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/offer/detail.html" %} 2 | 3 | 4 | {% load i18n %} 5 | {% load product_tags %} 6 | 7 | 8 | {% block content %} 9 | 10 | {% if not offer.is_available %} 11 |
{% trans " This offer is no longer available." %}
12 | {% endif %} 13 | 14 | {% if upsell_message %} 15 |
16 | {% if offer.description %} 17 |

{{ offer.description|safe }}

18 |
19 | {% endif %} 20 |

{% trans "What you need to do" %}

21 |

{{ upsell_message }}

22 |
23 | {% endif %} 24 | 25 | {% if products %} 26 |
27 | {% include "partials/pagination.html" %} 28 |
    29 | {% for product in products %} 30 |
  1. {% render_product product %}
  2. 31 | {% endfor %} 32 |
33 | {% include "partials/pagination.html" %} 34 |
35 | {% else %} 36 |

{% trans "No products found." %}

37 | {% endif %} 38 | {% endblock content %} 39 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/offer/list.html: -------------------------------------------------------------------------------- 1 | {% extends "oscar/offer/list.html" %} 2 | 3 | 4 | {% load i18n %} 5 | {% load product_tags %} 6 | 7 | {% block body_class %}offer-page{% endblock body_class %} 8 | 9 | {% block content %} 10 | {% if not offers %} 11 |

{% trans "There are no site offers at the moment." %}

12 | {% else %} 13 | {% for offer in offers %} 14 |

{{ offer.name }}

15 | {% if offer.description %} 16 |

{{ offer.description|safe }}

17 | {% endif %} 18 | {% if offer.has_products %} 19 | 31 |

32 | 33 | {% trans "Browse products in offer" %} 34 | 35 |

36 | {% endif %} 37 |
38 | {% endfor %} 39 | {% endif %} 40 | {% endblock content %} -------------------------------------------------------------------------------- /src/oscar_demo/templates/partials/brand.html: -------------------------------------------------------------------------------- 1 | {% load staticfiles %} 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/partials/extrascripts.html: -------------------------------------------------------------------------------- 1 | {% load staticfiles %} 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/partials/footer.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 43 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/partials/mini_basket.html: -------------------------------------------------------------------------------- 1 | {% load currency_filters %} 2 | {% load i18n %} 3 | 4 | {{ request.basket.total_incl_tax|currency }} 5 | {% blocktrans count counter=request.basket.num_items %}1 item{% plural %}{{ counter }} items{% endblocktrans %} 6 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/partials/nav_accounts.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 3 |
4 | {% if LANGUAGES|length > 1 %} 5 | 14 | {% endif %} 15 | 16 | 41 |
42 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/partials/nav_primary.html: -------------------------------------------------------------------------------- 1 | {% load currency_filters %} 2 | {% load category_tags %} 3 | {% load i18n %} 4 | 5 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/promotions/automaticproductlist.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% load product_tags %} 3 | 4 | {% block content %} 5 |
6 |

{{ promotion.name }}

7 |

{{ promotion.description|safe }}

8 |
    9 | {% for product in products %} 10 |
  1. {% render_product product %}
  2. 11 | {% endfor %} 12 |
13 | {% if block.link_url %} 14 | {% trans "See more" %} 15 | {% endif %} 16 |
17 | {% endblock %} 18 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/promotions/baseproductlist.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% load product_tags %} 3 | 4 | {% block content %} 5 | 21 | {% endblock %} 22 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/promotions/featureproductlist.html: -------------------------------------------------------------------------------- 1 | {% load currency_filters %} 2 | {% load basket_tags %} 3 | {% load thumbnail %} 4 | {% load i18n %} 5 | 6 | 18 | 19 |
20 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/promotions/handpickedproductlist.html: -------------------------------------------------------------------------------- 1 | {% extends 'promotions/baseproductlist.html' %} 2 | 3 | {# just exists to allow overriding #} 4 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/promotions/image.html: -------------------------------------------------------------------------------- 1 | {% load staticfiles %} 2 | 3 | {% if promotion.image %} 4 | {% if promotion.link_url %} 5 | 11 | {% else %} 12 | 13 | {% endif %} 14 | {% endif %} -------------------------------------------------------------------------------- /src/oscar_demo/templates/promotions/partials/productsingle.html: -------------------------------------------------------------------------------- 1 | {% load basket_tags %} 2 | {% load thumbnail %} 3 | {% load i18n %} 4 | {% load purchase_info_tags %} 5 | 6 | {% purchase_info_for_product request product as session %} 7 | 8 |
9 |
10 |
11 | {% with image=product.primary_image %} 12 | {% thumbnail image.original "200x200" upscale=False as thumb %} 13 | {{ product.get_title }} 14 | {% endthumbnail %} 15 | {% endwith %} 16 |
17 |
18 |
19 |
20 | {% if session.availability.is_available_to_buy %} 21 |

{{ session.stockrecord.partner.name }}

22 | {% endif %} 23 |

{{ product.title }}

24 |

{% include "catalogue/partials/stock_record.html" %}

25 |

{{ promotion.description|safe|truncatechars:200 }}

26 | 27 | {% if product.is_group %} 28 | {% trans "View range" %} 29 | {% else %} 30 | {% if session.availability.is_available_to_buy %} 31 | {% basket_form request product 'single' as basket_form %} 32 |
33 | {% csrf_token %} 34 | {{ basket_form.as_p }} 35 | 36 |
37 | {% else %} 38 | {% trans "Out of Stock" %} 39 | {% endif %} 40 | {% endif %} 41 |
42 |
43 |
44 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/promotions/singleproduct.html: -------------------------------------------------------------------------------- 1 | {% load currency_filters %} 2 | 3 | 4 |
5 |

{{ promotion.name }}

6 |
7 | {% include "promotions/partials/productsingle.html" %} 8 |
9 |
10 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/shipping/express.html: -------------------------------------------------------------------------------- 1 | {% load currency_filters %} 2 | {% load i18n %} 3 | 4 | {% blocktrans with cost=charge_per_item|currency %} 5 | This is express shipping. Should reach you within 48 hours. 6 |

7 | It costs {{ cost }} per item. 8 |

9 | {% endblocktrans %} 10 | -------------------------------------------------------------------------------- /src/oscar_demo/templates/shipping/standard.html: -------------------------------------------------------------------------------- 1 | {% load currency_filters %} 2 | {% load i18n %} 3 | 4 | {% blocktrans with cost=charge_per_item|currency total=threshold|currency %} 5 | This is standard shipping. 6 |

7 | It costs {{ cost }} per item but is free for orders over 8 | {{ total }}. 9 |

10 | {% endblocktrans %} 11 | -------------------------------------------------------------------------------- /src/oscar_demo/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import include, url 2 | from django.conf import settings 3 | from django.contrib import admin 4 | from django.conf.urls.static import static 5 | from stores.app import application as stores_app 6 | from stores.dashboard.app import application as dashboard_app 7 | 8 | from apps.app import application 9 | from datacash.dashboard.app import application as datacash_app 10 | 11 | # These need to be imported into this namespace 12 | from oscar.views import handler500, handler404, handler403 # noqa 13 | 14 | js_info_dict = { 15 | 'packages': ('stores',), 16 | } 17 | 18 | admin.autodiscover() 19 | 20 | urlpatterns = [ 21 | url(r'^admin/', include(admin.site.urls)), 22 | url(r'^i18n/', include('django.conf.urls.i18n')), 23 | url(r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict), 24 | 25 | # Stores extension 26 | url(r'^stores/', include(stores_app.urls)), 27 | url(r'^dashboard/stores/', include(dashboard_app.urls)), 28 | 29 | # PayPal extension 30 | url(r'^checkout/paypal/', include('paypal.express.urls')), 31 | 32 | # Datacash extension 33 | url(r'^dashboard/datacash/', include(datacash_app.urls)), 34 | 35 | url(r'', include(application.urls)), 36 | ] 37 | 38 | if settings.DEBUG: 39 | import debug_toolbar 40 | urlpatterns += static(settings.MEDIA_URL, 41 | document_root=settings.MEDIA_ROOT) 42 | urlpatterns += [ 43 | url(r'^__debug__/', include(debug_toolbar.urls)), 44 | ] 45 | -------------------------------------------------------------------------------- /tests/test_checkout_forms.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | from apps.checkout import forms 4 | from oscar.apps.address import models 5 | from oscar.apps.order import models as order_models 6 | 7 | 8 | class TestBillingAddressForm(TestCase): 9 | 10 | def setUp(self): 11 | models.Country.objects.create( 12 | iso_3166_1_a2='GB', name="Great Britain") 13 | self.shipping_address = order_models.ShippingAddress() 14 | 15 | def test_selecting_same_as_shipping_is_valid_with_no_billing_address_data(self): 16 | data = { 17 | 'same_as_shipping': 'same', 18 | 'first_name': '', 19 | 'last_name': '', 20 | 'line1': '', 21 | 'line2': '', 22 | 'line3': '', 23 | 'line4': '', 24 | 'postcode': '', 25 | 'state': '', 26 | 'country': 'GB' 27 | } 28 | form = forms.BillingAddressForm( 29 | shipping_address=self.shipping_address, data=data) 30 | self.assertTrue( 31 | form.is_valid(), "Form invalid due to %r" % form.errors) 32 | 33 | def test_selecting_same_as_shipping_is_valid(self): 34 | data = { 35 | 'same_as_shipping': 'same', 36 | 'first_name': 'test', 37 | 'last_name': 'test', 38 | 'line1': 'test', 39 | 'line2': 'test', 40 | 'line3': 'test', 41 | 'line4': 'test', 42 | 'postcode': 'test', 43 | 'state': '', 44 | 'country': 'GB' 45 | } 46 | form = forms.BillingAddressForm( 47 | shipping_address=self.shipping_address, data=data) 48 | self.assertTrue( 49 | form.is_valid(), "Form invalid due to %r" % form.errors) 50 | 51 | def test_selecting_manual_validate_address(self): 52 | data = { 53 | 'same_as_shipping': 'new', 54 | 'first_name': 'test', 55 | 'last_name': 'test', 56 | 'line1': 'test', 57 | 'line2': 'test', 58 | 'line3': 'test', 59 | 'line4': 'test', 60 | 'postcode': 'test', 61 | 'state': '', 62 | 'country': 'GB' 63 | } 64 | form = forms.BillingAddressForm( 65 | shipping_address=self.shipping_address, data=data) 66 | self.assertFalse(form.is_valid()) 67 | -------------------------------------------------------------------------------- /tests/test_shipping_methods.py: -------------------------------------------------------------------------------- 1 | from decimal import Decimal as D 2 | 3 | from django.test import TestCase 4 | import mock 5 | 6 | from apps.shipping import methods 7 | 8 | 9 | class TestStandard(TestCase): 10 | 11 | def setUp(self): 12 | self.method = methods.Standard() 13 | self.basket = mock.Mock() 14 | 15 | def test_is_free_over_threshold(self): 16 | self.basket.total_incl_tax = D('20.00') 17 | price = self.method.calculate(self.basket) 18 | self.assertEqual(price.incl_tax, D('0.00')) 19 | 20 | def test_is_per_item_under_threshold(self): 21 | self.basket.total_incl_tax = D('10.00') 22 | self.basket.num_items = 3 23 | price = self.method.calculate(self.basket) 24 | self.assertEqual( 25 | price.incl_tax, 3 * self.method.charge_per_item) 26 | 27 | 28 | class TestExpress(TestCase): 29 | 30 | def setUp(self): 31 | self.method = methods.Express() 32 | self.basket = mock.Mock() 33 | 34 | def test_is_per_item_under_threshold(self): 35 | self.basket.total_incl_tax = D('10.00') 36 | self.basket.num_items = 3 37 | price = self.method.calculate(self.basket) 38 | self.assertEqual( 39 | price.incl_tax, 3 * self.method.charge_per_item) 40 | -------------------------------------------------------------------------------- /update_demo.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | cd /var/www/oscar/builds/demo/ 4 | source ../../virtualenvs/demo/bin/activate 5 | make demo 6 | 7 | cd sites/demo 8 | ./manage.py thumbnail clear 9 | ./manage.py collectstatic --noinput 10 | 11 | # Re-compile python code 12 | touch deploy/wsgi/demo.wsgi 13 | 14 | # Copy down server config files 15 | cp deploy/nginx/demo.conf /etc/nginx/sites-enabled/demo.oscarcommerce.com 16 | /etc/init.d/nginx configtest && /etc/init.d/nginx force-reload 17 | 18 | cp deploy/supervisord/demo.conf /etc/supervisor/conf.d/demo.conf 19 | supervisorctl reread && supervisorctl reload 20 | --------------------------------------------------------------------------------