├── Font ├── static │ ├── dummy │ │ ├── background.jpg │ │ ├── background@2x.jpg │ │ ├── figure.jpg │ │ ├── figure@2x.jpg │ │ ├── person-1.jpg │ │ ├── person-1@2x.jpg │ │ ├── person-2.jpg │ │ ├── person-2@2x.jpg │ │ ├── person-3.jpg │ │ ├── person-3@2x.jpg │ │ ├── person-4.jpg │ │ ├── person-4@2x.jpg │ │ ├── single-image.jpg │ │ ├── single-image@2x.jpg │ │ ├── slide-1.jpg │ │ ├── slide-1@2x.jpg │ │ ├── slide-2.jpg │ │ ├── slide-2@2x.jpg │ │ ├── slide-3.jpg │ │ ├── slide-3@2x.jpg │ │ ├── thumb-1.jpg │ │ ├── thumb-1@2x.jpg │ │ ├── thumb-2.jpg │ │ ├── thumb-2@2x.jpg │ │ ├── thumb-3.jpg │ │ ├── thumb-3@2x.jpg │ │ ├── thumb-4.jpg │ │ ├── thumb-4@2x.jpg │ │ ├── thumb-5.jpg │ │ ├── thumb-5@2x.jpg │ │ ├── thumb-6.jpg │ │ ├── thumb-6@2x.jpg │ │ ├── thumb-7.jpg │ │ ├── thumb-7@2x.jpg │ │ ├── thumb-8.jpg │ │ └── thumb-8@2x.jpg │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── font-awesome.min.css │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ └── fontawesome-webfont.woff │ ├── images │ │ ├── arrow-gray.png │ │ ├── arrow-gray@2x.png │ │ ├── arrow.png │ │ ├── arrow@2x.png │ │ ├── icon-contact-envelope.png │ │ ├── icon-contact-envelope@2x.png │ │ ├── icon-contact-globe.png │ │ ├── icon-contact-globe@2x.png │ │ ├── icon-contact-map.png │ │ ├── icon-contact-map@2x.png │ │ ├── icon-contact-message.png │ │ ├── icon-contact-message@2x.png │ │ ├── icon-contact-pencil.png │ │ ├── icon-contact-pencil@2x.png │ │ ├── icon-contact-phone.png │ │ ├── icon-contact-phone@2x.png │ │ ├── icon-contact-user.png │ │ ├── icon-contact-user@2x.png │ │ ├── logo.png │ │ ├── logo@2x.png │ │ ├── select.png │ │ └── select@2x.png │ ├── js │ │ ├── app.js │ │ ├── bootstrap3-typeahead.min.js │ │ ├── ie-support │ │ │ ├── html5.js │ │ │ ├── pie.htc │ │ │ └── respond.js │ │ ├── jquery-1.11.1.min.js │ │ ├── jquery-1.11.1.min.map │ │ ├── min │ │ │ ├── app-min.js │ │ │ └── plugins-min.js │ │ └── plugins.js │ ├── sass │ │ ├── layout │ │ │ ├── _content.scss │ │ │ ├── _footer.scss │ │ │ └── _header.scss │ │ ├── libs │ │ │ ├── _components.scss │ │ │ ├── _global.scss │ │ │ ├── _mixins.scss │ │ │ ├── _normalize.scss │ │ │ ├── _settings.scss │ │ │ └── bootstrap-grid │ │ │ │ ├── _grid.scss │ │ │ │ ├── _mixins.scss │ │ │ │ └── _settings.scss │ │ └── style.scss │ └── style.css ├── templates │ ├── about.html │ ├── base.html │ ├── contact.html │ ├── index.html │ ├── joinus.html │ ├── review.html │ └── single.html └── webmovie.py ├── ImdbSpider ├── Imdbspider │ ├── __init__.py │ ├── items.py │ ├── middlewares.py │ ├── pipelines.py │ ├── settings.py │ └── spiders │ │ ├── __init__.py │ │ └── imdb_spider.py └── scrapy.cfg └── README.md /Font/static/dummy/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/background.jpg -------------------------------------------------------------------------------- /Font/static/dummy/background@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/background@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/figure.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/figure.jpg -------------------------------------------------------------------------------- /Font/static/dummy/figure@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/figure@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/person-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/person-1.jpg -------------------------------------------------------------------------------- /Font/static/dummy/person-1@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/person-1@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/person-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/person-2.jpg -------------------------------------------------------------------------------- /Font/static/dummy/person-2@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/person-2@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/person-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/person-3.jpg -------------------------------------------------------------------------------- /Font/static/dummy/person-3@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/person-3@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/person-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/person-4.jpg -------------------------------------------------------------------------------- /Font/static/dummy/person-4@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/person-4@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/single-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/single-image.jpg -------------------------------------------------------------------------------- /Font/static/dummy/single-image@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/single-image@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/slide-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/slide-1.jpg -------------------------------------------------------------------------------- /Font/static/dummy/slide-1@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/slide-1@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/slide-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/slide-2.jpg -------------------------------------------------------------------------------- /Font/static/dummy/slide-2@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/slide-2@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/slide-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/slide-3.jpg -------------------------------------------------------------------------------- /Font/static/dummy/slide-3@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/slide-3@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-1.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-1@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-1@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-2.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-2@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-2@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-3.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-3@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-3@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-4.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-4@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-4@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-5.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-5@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-5@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-6.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-6@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-6@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-7.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-7@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-7@2x.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-8.jpg -------------------------------------------------------------------------------- /Font/static/dummy/thumb-8@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/dummy/thumb-8@2x.jpg -------------------------------------------------------------------------------- /Font/static/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /Font/static/fonts/font-awesome.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */@font-face{font-family:'FontAwesome';src:url('fontawesome-webfont.eot?v=4.0.3');src:url('fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'),url('fontawesome-webfont.woff?v=4.0.3') format('woff'),url('fontawesome-webfont.ttf?v=4.0.3') format('truetype'),url('fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857142858em;text-align:center}.fa-ul{padding-left:0;margin-left:2.142857142857143em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;top:.14285714285714285em;text-align:center}.fa-li.fa-lg{left:-1.8571428571428572em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-asc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-desc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-reply-all:before{content:"\f122"}.fa-mail-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"} -------------------------------------------------------------------------------- /Font/static/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /Font/static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /Font/static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /Font/static/images/arrow-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/arrow-gray.png -------------------------------------------------------------------------------- /Font/static/images/arrow-gray@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/arrow-gray@2x.png -------------------------------------------------------------------------------- /Font/static/images/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/arrow.png -------------------------------------------------------------------------------- /Font/static/images/arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/arrow@2x.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-envelope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-envelope.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-envelope@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-envelope@2x.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-globe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-globe.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-globe@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-globe@2x.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-map.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-map@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-map@2x.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-message.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-message@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-message@2x.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-pencil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-pencil.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-pencil@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-pencil@2x.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-phone.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-phone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-phone@2x.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-user.png -------------------------------------------------------------------------------- /Font/static/images/icon-contact-user@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/icon-contact-user@2x.png -------------------------------------------------------------------------------- /Font/static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/logo.png -------------------------------------------------------------------------------- /Font/static/images/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/logo@2x.png -------------------------------------------------------------------------------- /Font/static/images/select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/select.png -------------------------------------------------------------------------------- /Font/static/images/select@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/Font/static/images/select@2x.png -------------------------------------------------------------------------------- /Font/static/js/app.js: -------------------------------------------------------------------------------- 1 | (function($, document, window){ 2 | 3 | $(document).ready(function(){ 4 | 5 | // Cloning main navigation for mobile menu 6 | $(".mobile-navigation").append($(".main-navigation .menu").clone()); 7 | 8 | // Mobile menu toggle 9 | $(".menu-toggle").click(function(){ 10 | $(".mobile-navigation").slideToggle(); 11 | }); 12 | $(".search-form button").click(function(){ 13 | $(this).toggleClass("active"); 14 | var $parent = $(this).parent(".search-form"); 15 | 16 | $parent.find("input").toggleClass("active").focus(); 17 | }); 18 | 19 | 20 | $(".slider").flexslider({ 21 | controlNav: false, 22 | prevText:'', 23 | nextText:'', 24 | }); 25 | if( $(".map").length ) { 26 | $('.map').gmap3({ 27 | map: { 28 | options: { 29 | maxZoom: 14 30 | } 31 | }, 32 | marker:{ 33 | address: "40 Sibley St, Detroit", 34 | } 35 | }, 36 | "autofit" ); 37 | 38 | } 39 | }); 40 | 41 | $(window).load(function(){ 42 | 43 | }); 44 | 45 | })(jQuery, document, window); -------------------------------------------------------------------------------- /Font/static/js/bootstrap3-typeahead.min.js: -------------------------------------------------------------------------------- 1 | (function(root,factory){"use strict";if(typeof module!=="undefined"&&module.exports){module.exports=factory(require("jquery"))}else if(typeof define==="function"&&define.amd){define(["jquery"],function($){return factory($)})}else{factory(root.jQuery)}})(this,function($){"use strict";var Typeahead=function(element,options){this.$element=$(element);this.options=$.extend({},$.fn.typeahead.defaults,options);this.matcher=this.options.matcher||this.matcher;this.sorter=this.options.sorter||this.sorter;this.select=this.options.select||this.select;this.autoSelect=typeof this.options.autoSelect=="boolean"?this.options.autoSelect:true;this.highlighter=this.options.highlighter||this.highlighter;this.render=this.options.render||this.render;this.updater=this.options.updater||this.updater;this.displayText=this.options.displayText||this.displayText;this.source=this.options.source;this.delay=this.options.delay;this.$menu=$(this.options.menu);this.$appendTo=this.options.appendTo?$(this.options.appendTo):null;this.fitToElement=typeof this.options.fitToElement=="boolean"?this.options.fitToElement:false;this.shown=false;this.listen();this.showHintOnFocus=typeof this.options.showHintOnFocus=="boolean"||this.options.showHintOnFocus==="all"?this.options.showHintOnFocus:false;this.afterSelect=this.options.afterSelect;this.addItem=false;this.value=this.$element.val()||this.$element.text()};Typeahead.prototype={constructor:Typeahead,select:function(){var val=this.$menu.find(".active").data("value");this.$element.data("active",val);if(this.autoSelect||val){var newVal=this.updater(val);if(!newVal){newVal=""}this.$element.val(this.displayText(newVal)||newVal).text(this.displayText(newVal)||newVal).change();this.afterSelect(newVal)}return this.hide()},updater:function(item){return item},setSource:function(source){this.source=source},show:function(){var pos=$.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});var scrollHeight=typeof this.options.scrollHeight=="function"?this.options.scrollHeight.call():this.options.scrollHeight;var element;if(this.shown){element=this.$menu}else if(this.$appendTo){element=this.$menu.appendTo(this.$appendTo);this.hasSameParent=this.$appendTo.is(this.$element.parent())}else{element=this.$menu.insertAfter(this.$element);this.hasSameParent=true}if(!this.hasSameParent){element.css("position","fixed");var offset=this.$element.offset();pos.top=offset.top;pos.left=offset.left}var dropup=$(element).parent().hasClass("dropup");var newTop=dropup?"auto":pos.top+pos.height+scrollHeight;var right=$(element).hasClass("dropdown-menu-right");var newLeft=right?"auto":pos.left;element.css({top:newTop,left:newLeft}).show();if(this.options.fitToElement===true){element.css("width",this.$element.outerWidth()+"px")}this.shown=true;return this},hide:function(){this.$menu.hide();this.shown=false;return this},lookup:function(query){var items;if(typeof query!="undefined"&&query!==null){this.query=query}else{this.query=this.$element.val()||this.$element.text()||""}if(this.query.length0){this.$element.data("active",items[0])}else{this.$element.data("active",null)}if(this.options.addItem){items.push(this.options.addItem)}if(this.options.items=="all"){return this.render(items).show()}else{return this.render(items.slice(0,this.options.items)).show()}},matcher:function(item){var it=this.displayText(item);return~it.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(items){var beginswith=[];var caseSensitive=[];var caseInsensitive=[];var item;while(item=items.shift()){var it=this.displayText(item);if(!it.toLowerCase().indexOf(this.query.toLowerCase()))beginswith.push(item);else if(~it.indexOf(this.query))caseSensitive.push(item);else caseInsensitive.push(item)}return beginswith.concat(caseSensitive,caseInsensitive)},highlighter:function(item){var html=$("
");var query=this.query;var i=item.toLowerCase().indexOf(query.toLowerCase());var len=query.length;var leftPart;var middlePart;var rightPart;var strong;if(len===0){return html.text(item).html()}while(i>-1){leftPart=item.substr(0,i);middlePart=item.substr(i,len);rightPart=item.substr(i+len);strong=$("").text(middlePart);html.append(document.createTextNode(leftPart)).append(strong);item=rightPart;i=item.toLowerCase().indexOf(query.toLowerCase())}return html.append(document.createTextNode(item)).html()},render:function(items){var that=this;var self=this;var activeFound=false;var data=[];var _category=that.options.separator;$.each(items,function(key,value){if(key>0&&value[_category]!==items[key-1][_category]){data.push({__type:"divider"})}if(value[_category]&&(key===0||value[_category]!==items[key-1][_category])){data.push({__type:"category",name:value[_category]})}data.push(value)});items=$(data).map(function(i,item){if((item.__type||false)=="category"){return $(that.options.headerHtml).text(item.name)[0]}if((item.__type||false)=="divider"){return $(that.options.headerDivider)[0]}var text=self.displayText(item);i=$(that.options.item).data("value",item);i.find("a").html(that.highlighter(text,item));if(text==self.$element.val()){i.addClass("active");self.$element.data("active",item);activeFound=true}return i[0]});if(this.autoSelect&&!activeFound){items.filter(":not(.dropdown-header)").first().addClass("active");this.$element.data("active",items.first().data("value"))}this.$menu.html(items);return this},displayText:function(item){return typeof item!=="undefined"&&typeof item.name!="undefined"&&item.name||item},next:function(event){var active=this.$menu.find(".active").removeClass("active");var next=active.next();if(!next.length){next=$(this.$menu.find("li")[0])}next.addClass("active")},prev:function(event){var active=this.$menu.find(".active").removeClass("active");var prev=active.prev();if(!prev.length){prev=this.$menu.find("li").last()}prev.addClass("active")},listen:function(){this.$element.on("focus",$.proxy(this.focus,this)).on("blur",$.proxy(this.blur,this)).on("keypress",$.proxy(this.keypress,this)).on("input",$.proxy(this.input,this)).on("keyup",$.proxy(this.keyup,this));if(this.eventSupported("keydown")){this.$element.on("keydown",$.proxy(this.keydown,this))}this.$menu.on("click",$.proxy(this.click,this)).on("mouseenter","li",$.proxy(this.mouseenter,this)).on("mouseleave","li",$.proxy(this.mouseleave,this)).on("mousedown",$.proxy(this.mousedown,this))},destroy:function(){this.$element.data("typeahead",null);this.$element.data("active",null);this.$element.off("focus").off("blur").off("keypress").off("input").off("keyup");if(this.eventSupported("keydown")){this.$element.off("keydown")}this.$menu.remove();this.destroyed=true},eventSupported:function(eventName){var isSupported=eventName in this.$element;if(!isSupported){this.$element.setAttribute(eventName,"return;");isSupported=typeof this.$element[eventName]==="function"}return isSupported},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:if(e.shiftKey)return;e.preventDefault();this.prev();break;case 40:if(e.shiftKey)return;e.preventDefault();this.next();break}},keydown:function(e){this.suppressKeyPressRepeat=~$.inArray(e.keyCode,[40,38,9,13,27]);if(!this.shown&&e.keyCode==40){this.lookup()}else{this.move(e)}},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},input:function(e){var currentValue=this.$element.val()||this.$element.text();if(this.value!==currentValue){this.value=currentValue;this.lookup()}},keyup:function(e){if(this.destroyed){return}switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break}},focus:function(e){if(!this.focused){this.focused=true;if(this.options.showHintOnFocus&&this.skipShowHintOnFocus!==true){if(this.options.showHintOnFocus==="all"){this.lookup("")}else{this.lookup()}}}if(this.skipShowHintOnFocus){this.skipShowHintOnFocus=false}},blur:function(e){if(!this.mousedover&&!this.mouseddown&&this.shown){this.hide();this.focused=false}else if(this.mouseddown){this.skipShowHintOnFocus=true;this.$element.focus();this.mouseddown=false}},click:function(e){e.preventDefault();this.skipShowHintOnFocus=true;this.select();this.$element.focus();this.hide()},mouseenter:function(e){this.mousedover=true;this.$menu.find(".active").removeClass("active");$(e.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=false;if(!this.focused&&this.shown)this.hide()},mousedown:function(e){this.mouseddown=true;this.$menu.one("mouseup",function(e){this.mouseddown=false}.bind(this))}};var old=$.fn.typeahead;$.fn.typeahead=function(option){var arg=arguments;if(typeof option=="string"&&option=="getActive"){return this.data("active")}return this.each(function(){var $this=$(this);var data=$this.data("typeahead");var options=typeof option=="object"&&option;if(!data)$this.data("typeahead",data=new Typeahead(this,options));if(typeof option=="string"&&data[option]){if(arg.length>1){data[option].apply(data,Array.prototype.slice.call(arg,1))}else{data[option]()}}})};$.fn.typeahead.defaults={source:[],items:8,menu:'',item:'
  • ',minLength:1,scrollHeight:0,autoSelect:true,afterSelect:$.noop,addItem:false,delay:0,separator:"category",headerHtml:'',headerDivider:''};$.fn.typeahead.Constructor=Typeahead;$.fn.typeahead.noConflict=function(){$.fn.typeahead=old;return this};$(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(e){var $this=$(this);if($this.data("typeahead"))return;$this.typeahead($this.data())})}); 2 | -------------------------------------------------------------------------------- /Font/static/js/ie-support/html5.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document); -------------------------------------------------------------------------------- /Font/static/js/ie-support/pie.htc: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 96 | 97 | -------------------------------------------------------------------------------- /Font/static/js/ie-support/respond.js: -------------------------------------------------------------------------------- 1 | /*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl 2 | * Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT 3 | */ 4 | !function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='­',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b',nextText:''}),$(".map").length&&$(".map").gmap3({map:{options:{maxZoom:14}},marker:{address:"40 Sibley St, Detroit"}},"autofit")}),$(e).load(function(){})}(jQuery,document,window); -------------------------------------------------------------------------------- /Font/static/sass/layout/_content.scss: -------------------------------------------------------------------------------- 1 | .main-content{ 2 | .container{ 3 | background: white; 4 | border-radius: 5px; 5 | padding: 30px; 6 | } 7 | } 8 | 9 | .section-title{ 10 | @include em(30); 11 | font-weight: 300; 12 | } 13 | 14 | .movie-schedule{ 15 | list-style: none; 16 | li{ 17 | padding: 10px 0; 18 | border-bottom: 1px solid #d7d8da; 19 | 20 | &:last-child{ border-bottom: none } 21 | } 22 | .date,.entry-title{ 23 | display: inline-block 24 | } 25 | .date{ 26 | width: 80px; 27 | padding: 5px 10px; 28 | text-align: center; 29 | @include em(12); 30 | border: 1px solid #d7d8da; 31 | border-radius: 3px; 32 | margin-right: 10px; 33 | } 34 | .entry-title{ 35 | @include em(15); 36 | font-weight: 400; 37 | margin: 0; 38 | 39 | a{ 40 | transition: .3s ease; 41 | &:hover{color: $body-color} 42 | } 43 | } 44 | } 45 | 46 | .no-bullet{ 47 | list-style: none; 48 | } 49 | 50 | .leading{ 51 | @include em(26); 52 | font-weight: 300; 53 | } 54 | 55 | .page{ 56 | figure{margin-bottom: 30px} 57 | img{ 58 | max-width: 100%; 59 | } 60 | .movie-title{ 61 | @include em(36); 62 | font-weight: 300; 63 | } 64 | } 65 | 66 | .filters{ 67 | margin-bottom: 50px; 68 | 69 | select{ 70 | -webkit-appearance: none; 71 | -moz-appearance: none; 72 | appearance: none; 73 | padding: 10px 50px 10px 10px; 74 | background-color: #e7e7e7; 75 | border-radius:5px; 76 | border: none; 77 | margin-right: 10px; 78 | box-shadow: 0 1px 1px rgba(0,0,0,.3); 79 | outline: none; 80 | background-image: url(images/select.png); 81 | background-repeat: no-repeat; 82 | background-position: 100% center; 83 | 84 | } 85 | } 86 | 87 | .movie-list{ 88 | margin: 0 -15px; 89 | .movie{ 90 | width: 25%; 91 | padding: 0 15px; 92 | float: left; 93 | margin-bottom: 30px; 94 | 95 | @media screen and (min-width:991px){ 96 | &:nth-child(4n+1){clear: both} 97 | } 98 | @media screen and (max-width: 990px){ 99 | width: 50%; 100 | &:nth-child(4n+1){clear: none} 101 | &:nth-child(2n+1){clear: both} 102 | } 103 | @media screen and (max-width: 480px){ 104 | width: 100%; 105 | clear: both; 106 | } 107 | 108 | .movie-poster{ 109 | border-radius: 5px; 110 | overflow: hidden; 111 | margin-bottom: 20px; 112 | border: 1px solid transparent; 113 | 114 | img{ 115 | display: block; 116 | width: 100%; 117 | max-width: 100%; 118 | height: auto; 119 | transition: .3s ease; 120 | } 121 | } 122 | &:hover img{ transform: scale(1.2) } 123 | .movie-title{ 124 | @include em(24); 125 | font-weight: 300; 126 | margin-bottom: 20px; 127 | 128 | a{ 129 | color: $body-color; 130 | transition: .3s ease; 131 | 132 | &:hover{color: $accent-color} 133 | } 134 | } 135 | } 136 | } 137 | 138 | 139 | .pagination{ 140 | clear: both; 141 | text-align: center; 142 | 143 | .page-number{ 144 | display: inline-block; 145 | width: 40px; 146 | height: 40px; 147 | border-radius: 5px; 148 | background: #e7e7e7; 149 | box-shadow: 0 1px 1px rgba(0,0,0,.2); 150 | line-height: 2.6; 151 | color: $body-color; 152 | @include em(15); 153 | transition: .3s ease; 154 | 155 | &.current,&:hover{ 156 | background: $accent-color; 157 | color: white; 158 | } 159 | 160 | } 161 | } 162 | 163 | .movie-meta,.starring{ 164 | margin-bottom: 30px; 165 | list-style: none; 166 | li{margin-bottom: 10px} 167 | } -------------------------------------------------------------------------------- /Font/static/sass/layout/_footer.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Footer Styles 3 | */ 4 | 5 | .site-footer{ 6 | padding: 50px 0; 7 | .widget{margin-bottom: 30px} 8 | .widget-title{ 9 | color:#bec1c8; 10 | font-weight: 300; 11 | } 12 | 13 | .subscribe-form{ 14 | input[type="text"]{ 15 | width: 100%; 16 | border: 1px solid #bec1c8; 17 | background-color:transparent; 18 | background-image: url(images/arrow.png); 19 | background-repeat: no-repeat; 20 | background-position: right center; 21 | color: inherit; 22 | @include em(13); 23 | transition: .3s ease; 24 | 25 | &:focus,&:hover{ 26 | border-color: $accent-color; 27 | } 28 | } 29 | } 30 | 31 | a{ 32 | color: $body-color; 33 | transition: .3s ease; 34 | 35 | &:hover{ 36 | color: $accent-color; 37 | } 38 | } 39 | 40 | .colophon{padding-top: 30px} 41 | } -------------------------------------------------------------------------------- /Font/static/sass/layout/_header.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Header Styles 3 | */ 4 | .site-header{ 5 | padding: 50px 0; 6 | @include clearfix; 7 | } 8 | #branding{ 9 | float: left; 10 | .logo,.logo-copy{ 11 | display: inline-block; 12 | } 13 | .logo{ margin-right: 10px } 14 | .site-title{ 15 | margin: 0; 16 | text-transform: uppercase; 17 | color:white; 18 | @include em(16); 19 | 20 | a{ 21 | color:white; 22 | } 23 | } 24 | .site-description{ 25 | @include em(13); 26 | color:#9198af; 27 | } 28 | } 29 | 30 | .main-navigation{ 31 | float: right; 32 | background: white; 33 | border-radius: 5px; 34 | 35 | .menu-toggle, .menu,.search-form{ 36 | display: inline-block; 37 | vertical-align: middle; 38 | } 39 | 40 | .menu-toggle{ 41 | color: #333; 42 | border:none; 43 | background: none; 44 | @include em(18);; 45 | padding: 8px 15px; 46 | display: none; 47 | outline: none; 48 | @media screen and (max-width: 990px){ display: inline-block } 49 | @media screen and (min-width: 991px){ display: none!important } 50 | } 51 | 52 | .menu{ 53 | list-style: none; 54 | margin: 0; 55 | 56 | @media screen and (min-width: 991px){ display: inline-block!important } 57 | @media screen and (max-width: 990px){ display: none } 58 | } 59 | .menu-item{ 60 | display: inline-block; 61 | padding: 10px 0; 62 | a{ 63 | padding:0 15px; 64 | display: inline-block; 65 | color: $body-color; 66 | @include em(14); 67 | font-weight: 400; 68 | line-height: 1; 69 | border-right: 1px solid lighten($body-color, 40%); 70 | } 71 | &.current-menu-item, &:hover{ 72 | position: relative; 73 | 74 | &:after{ 75 | content: " "; 76 | position: absolute; 77 | width: 80%; 78 | height: 3px; 79 | background-color: $accent-color; 80 | bottom: -3px; 81 | left:0; 82 | right: 0; 83 | margin: 0 auto; 84 | display: block; 85 | } 86 | 87 | } 88 | } 89 | 90 | .search-form{ 91 | input{ 92 | background-color: #f0f0f0; 93 | border: none; 94 | border-left: 1px solid lighten($body-color, 40%); 95 | border-radius:0; 96 | font-family: inherit; 97 | font-weight: 300; 98 | width: 0; 99 | visibility: hidden; 100 | opacity: 0; 101 | transition: .3s ease; 102 | padding: 10px 0; 103 | 104 | &.active{ 105 | width:200px; 106 | visibility: visible; 107 | opacity: 1; 108 | padding: 10px; 109 | } 110 | } 111 | button{ 112 | background-color: transparent; 113 | border:none; 114 | border-left: 1px solid lighten($body-color, 40%); 115 | border-radius: 0; 116 | border-top-right-radius: 5px; 117 | border-bottom-right-radius: 5px; 118 | margin-left: -5px; 119 | color: inherit; 120 | box-shadow: none; 121 | outline: none; 122 | transition: .3s ease; 123 | 124 | &.active{ 125 | background-color: #f0f0f0 126 | } 127 | } 128 | } 129 | } 130 | 131 | .mobile-navigation{ 132 | clear: both; 133 | padding-top: 20px; 134 | display: none; 135 | 136 | @media screen and (min-width: 991px){ display: none!important } 137 | 138 | .menu{ 139 | padding: 10px 20px; 140 | background-color: white; 141 | border-radius: 3px; 142 | list-style: none; 143 | li{ 144 | border-bottom:1px solid lighten($body-color,40%); 145 | &:last-child{ border-bottom: none } 146 | } 147 | a{ 148 | color: $body-color; 149 | padding: 10px; 150 | display: block; 151 | 152 | &:hover{ color: $accent-color; } 153 | } 154 | } 155 | } -------------------------------------------------------------------------------- /Font/static/sass/libs/_components.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Reusable Components Style 3 | */ 4 | 5 | .button{ 6 | border: none; 7 | background: $accent-color; 8 | padding: 10px; 9 | border-radius: 3px; 10 | color: #92601e; 11 | box-shadow: 0 1px 1px rgba(0,0,0,.3); 12 | transition: .3s ease; 13 | 14 | &:hover,&:focus{ 15 | background-color: lighten($accent-color, 10%); 16 | } 17 | } 18 | 19 | .slider{ 20 | position: relative; 21 | margin-bottom: 30px; 22 | .slides{ 23 | list-style: none; 24 | @include clearfix; 25 | } 26 | 27 | li{ 28 | border-radius: 5px; 29 | overflow: hidden; 30 | } 31 | img{ 32 | max-width: 100%; 33 | width: 100%; 34 | height: auto; 35 | display: block; 36 | } 37 | 38 | .flex-direction-nav{ 39 | list-style: none; 40 | z-index: 2; 41 | position: absolute; 42 | top: 45%; 43 | width: 100%; 44 | 45 | a{ 46 | width: 45px; 47 | height: 45px; 48 | border-radius: 50%; 49 | background: white; 50 | text-align: center; 51 | line-height: 2.5; 52 | @include em(18); 53 | display: block; 54 | position: absolute; 55 | transition: .3s ease; 56 | &:hover{ 57 | background-color: $accent-color; 58 | color: white; 59 | } 60 | } 61 | .flex-prev{ 62 | left: 30px; 63 | } 64 | .flex-next{ 65 | right: 30px; 66 | } 67 | } 68 | } 69 | 70 | .latest-movie{ 71 | margin-bottom: 30px; 72 | border-radius: 5px; 73 | overflow: hidden; 74 | 75 | img{ 76 | max-width: 100%; 77 | width: 100%; 78 | display: block; 79 | height: auto; 80 | } 81 | } 82 | 83 | .team{ 84 | text-align: center; 85 | margin: 0 0 30px; 86 | .team-image{ 87 | width: 230px; 88 | height: 230px; 89 | border-radius: 50%; 90 | overflow: hidden; 91 | margin: 0 auto 30px; 92 | 93 | img{ 94 | display: block; 95 | max-width: 100%; 96 | width: 100%; 97 | } 98 | } 99 | .team-name{ 100 | @include em(16); 101 | margin: 0; 102 | } 103 | .team-title{ 104 | @include em(12); 105 | } 106 | } 107 | 108 | .social-links{ 109 | margin: 20px 0; 110 | a{ 111 | color: white; 112 | display: inline-block; 113 | width: 30px; 114 | height: 30px; 115 | text-align: center; 116 | border-radius: 50%; 117 | line-height: 1.9; 118 | transition: .3s ease; 119 | } 120 | .facebook{ 121 | background-color: #204385; 122 | &:hover{ 123 | background-color: lighten(#204385, 10%); 124 | } 125 | } 126 | .twitter{ 127 | background-color: #2aa9e0; 128 | &:hover{ 129 | background-color: lighten(#2aa9e0, 10%); 130 | } 131 | } 132 | .google-plus{ 133 | background-color: #d3492c; 134 | &:hover{ 135 | background-color: lighten(#d3492c, 10%); 136 | } 137 | } 138 | .pinterest{ 139 | background-color: #ca2128; 140 | &:hover{ 141 | background-color: lighten(#ca2128, 10%); 142 | } 143 | } 144 | } 145 | 146 | .breadcrumbs{ 147 | padding-bottom: 20px; 148 | margin-bottom: 30px; 149 | border-bottom: 1px solid $secondary-color; 150 | 151 | a{ 152 | font-weight: 400; 153 | color: lighten($body-color,10%); 154 | 155 | &:after{ 156 | content:" "; 157 | width: 8px; 158 | height: 5px; 159 | display: inline-block; 160 | margin-left: 10px; 161 | margin-right: 10px; 162 | background: url(images/arrow-gray.png) no-repeat; 163 | } 164 | 165 | &:hover{color: $accent-color;} 166 | } 167 | span{color: #84878d} 168 | } 169 | 170 | ul.arrow{ 171 | list-style: none; 172 | 173 | li{ 174 | padding-left: 20px; 175 | background: url(images/arrow.png) no-repeat 0 center; 176 | margin-bottom: 5px; 177 | 178 | a{ 179 | color: $body-color; 180 | transition: .3s ease; 181 | 182 | &:hover{ 183 | color: $accent-color; 184 | } 185 | } 186 | } 187 | } 188 | 189 | 190 | /* Star rating style */ 191 | .star-rating { 192 | display: inline-block; 193 | overflow: hidden; 194 | position: relative; 195 | top:2px; 196 | height: 1em; 197 | line-height: 1.1; 198 | @include em(15); 199 | width: 4.7em; 200 | font-family: "FontAwesome"; 201 | } 202 | .star-rating:before { 203 | content: "\f005\f005\f005\f005\f005"; 204 | float: left; 205 | top: 0; 206 | left: 0; 207 | position: absolute; 208 | } 209 | .star-rating span { 210 | overflow: hidden; 211 | float: left; 212 | top: 0; 213 | left: 0; 214 | position: absolute; 215 | padding-top: 1.5em; 216 | } 217 | .star-rating span:before { 218 | content: "\f005\f005\f005\f005\f005"; 219 | top: 0; 220 | position: absolute; 221 | left: 0; 222 | color: $accent-color; 223 | } 224 | 225 | .feature{ 226 | margin-bottom: 30px; 227 | .feature-title{ 228 | color: $accent-color; 229 | @include em(30); 230 | margin: 0; 231 | } 232 | .feature-subtitle{ 233 | @include em(24); 234 | margin:0 0 30px; 235 | font-weight: 300; 236 | display: block; 237 | } 238 | p{margin-bottom: 30px;} 239 | } 240 | 241 | .map{ 242 | clear: both; 243 | height: 490px; 244 | margin-bottom: 30px; 245 | } 246 | 247 | .contact-detail{ 248 | list-style: none; 249 | margin-bottom: 30px; 250 | li{ 251 | padding-left: 30px; 252 | position: relative; 253 | margin-bottom: 10px; 254 | 255 | img{ 256 | position: absolute; 257 | left: 0; 258 | top: 5px; 259 | } 260 | } 261 | } 262 | 263 | .contact-form{ 264 | margin-bottom: 30px; 265 | @include clearfix; 266 | 267 | input:not([type="submit"]),textarea{ 268 | margin-bottom: 10px; 269 | border: 1px solid #ccc; 270 | padding: 10px 10px 10px 40px; 271 | display: block; 272 | width: 100%; 273 | border-radius: 3px; 274 | box-shadow: inset 0 1px 1px rgba(0,0,0,.1); 275 | background-repeat: no-repeat; 276 | background-position: 10px 15px; 277 | transition: .3s ease; 278 | outline: none; 279 | 280 | &:focus, &:hover{ 281 | border-color: $accent-color; 282 | } 283 | } 284 | textarea{min-height: 100px} 285 | .name{@include at2x("images/icon-contact-user","png",12px,14px)} 286 | .email{@include at2x("images/icon-contact-envelope","png",14px,11px)} 287 | .website{@include at2x("images/icon-contact-globe","png",14px,14px)} 288 | .message{@include at2x("images/icon-contact-pencil","png",14px,14px)} 289 | input[type="submit"]{ 290 | @extend .button; 291 | float: right; 292 | } 293 | } -------------------------------------------------------------------------------- /Font/static/sass/libs/_global.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Global Styles 3 | */ 4 | 5 | $browser-context: 15; // Default 6 | 7 | body { 8 | background-color: $bg-color; 9 | background-image: url(dummy/background.jpg); 10 | background-position: top center; 11 | background-repeat: no-repeat; 12 | color : $body-color; 13 | font-family : $primary-font; 14 | font-size : #{$browser-context}px; 15 | font-weight : 400; 16 | line-height : normal; 17 | 18 | } 19 | 20 | h1,h2,h3,h4,h5,h6{ 21 | font-weight : 700; 22 | margin : 0 0 20px; 23 | } 24 | 25 | hr{ 26 | border: none; 27 | border-bottom: 1px solid #777; 28 | } 29 | 30 | ul, ol { 31 | margin: 0; 32 | padding-left: 0; 33 | } 34 | 35 | a { 36 | text-decoration: none; 37 | color: $accent-color; 38 | } 39 | 40 | address { font-style: normal } 41 | 42 | p{ margin-top: 0 } 43 | 44 | form{ 45 | 46 | input,textarea,select{ 47 | outline: none; 48 | border: 1px solid #ccc; 49 | padding: 10px; 50 | border-radius: 5px; 51 | outline: none; 52 | } 53 | select{ 54 | -webkit-appearance: none; 55 | -moz-appearance: none; 56 | appearance: none; 57 | } 58 | textarea{ 59 | resize: vertical; 60 | } 61 | input[type="submit"],button, input[type="reset"]{ 62 | @extend .button; 63 | } 64 | 65 | } -------------------------------------------------------------------------------- /Font/static/sass/libs/_mixins.scss: -------------------------------------------------------------------------------- 1 | @mixin clearfix { 2 | *zoom:1; 3 | 4 | &:after { 5 | content : " "; 6 | clear : both; 7 | display : block; 8 | overflow: hidden; 9 | height : 0; 10 | } 11 | } 12 | 13 | @mixin size($width, $height:$width){ 14 | width : $width; 15 | height: $height; 16 | } 17 | 18 | @mixin cover(){ 19 | position:absolute; 20 | left :0; 21 | right :0; 22 | top :0; 23 | bottom :0; 24 | } 25 | 26 | @mixin auto_center($width, $height:$width){ 27 | @include cover(); 28 | margin: auto; 29 | } 30 | 31 | // retina.sass 32 | // A helper mixin for applying high-resolution background images (http://www.retinajs.com) 33 | 34 | // Submitted by Nathan Crank 35 | // nathancrank.com 36 | 37 | @mixin at2x($path, $ext: "jpg", $w: auto, $h: auto) { 38 | $at1x_path: "#{$path}.#{$ext}"; 39 | $at2x_path: "#{$path}@2x.#{$ext}"; 40 | 41 | background-image: url("#{$at1x_path}"); 42 | 43 | @media all and (-webkit-min-device-pixel-ratio : 1.5), 44 | all and (-o-min-device-pixel-ratio: 3/2), 45 | all and (min--moz-device-pixel-ratio: 1.5), 46 | all and (min-device-pixel-ratio: 1.5) { 47 | background-image: url("#{$at2x_path}"); 48 | background-size: $w $h; 49 | } 50 | } 51 | 52 | // Converting PX value to EM based on browser-context variable 53 | // Usage: @include em(16) 54 | @mixin em($pixels, $context: $browser-context) { 55 | font-size: #{$pixels}px; 56 | font-size: #{$pixels/$context}em; 57 | } 58 | 59 | @mixin rem($pixels, $context: $browser-context) { 60 | font-size: #{$pixels}px; 61 | font-size: #{$pixels/$context}rem; 62 | } -------------------------------------------------------------------------------- /Font/static/sass/libs/_normalize.scss: -------------------------------------------------------------------------------- 1 | // ============================================================================= 2 | // Normalize.scss based on Nicolas Gallagher and Jonathan Neal's 3 | // normalize.css v2.1.3 | MIT License | git.io/normalize 4 | // ============================================================================= 5 | 6 | // ============================================================================= 7 | // Normalize.scss settings 8 | // ============================================================================= 9 | 10 | 11 | // Set to true if you want to add support for IE6 and IE7 12 | // Notice: setting to true might render some elements 13 | // slightly differently than when set to false 14 | $legacy_support_for_ie: false !default; // Used also in Compass 15 | 16 | 17 | // Set the default font family here so you don't have to override it later 18 | $normalized_font_family: sans-serif !default; 19 | 20 | $normalize_headings: true !default; 21 | 22 | $h1_font_size: 2em !default; 23 | $h2_font_size: 1.5em !default; 24 | $h3_font_size: 1.17em !default; 25 | $h4_font_size: 1em !default; 26 | $h5_font_size: 0.83em !default; 27 | $h6_font_size: 0.75em !default; 28 | 29 | $h1_margin: 0.67em 0 !default; 30 | $h2_margin: 0.83em 0 !default; 31 | $h3_margin: 1em 0 !default; 32 | $h4_margin: 1.33em 0 !default; 33 | $h5_margin: 1.67em 0 !default; 34 | $h6_margin: 2.33em 0 !default; 35 | 36 | $background: #fff !default; 37 | $color: #000 !default; 38 | 39 | // ============================================================================= 40 | // HTML5 display definitions 41 | // ============================================================================= 42 | 43 | // Corrects block display not defined in IE6/7/8/9 & FF3 44 | 45 | article, 46 | aside, 47 | details, 48 | figcaption, 49 | figure, 50 | footer, 51 | header, 52 | hgroup, 53 | nav, 54 | section, 55 | summary { 56 | display: block; 57 | } 58 | 59 | // Corrects inline-block display not defined in IE6/7/8/9 & FF3 60 | 61 | audio, 62 | canvas, 63 | video { 64 | display: inline-block; 65 | @if $legacy_support_for_ie { 66 | *display: inline; 67 | *zoom: 1; 68 | } 69 | } 70 | 71 | // 1. Prevents modern browsers from displaying 'audio' without controls 72 | // 2. Remove excess height in iOS5 devices 73 | 74 | audio:not([controls]) { 75 | display: none; // 1 76 | height: 0; // 2 77 | } 78 | 79 | // 80 | // Address `[hidden]` styling not present in IE 8/9. 81 | // Hide the `template` element in IE, Safari, and Firefox < 22. 82 | // 83 | 84 | [hidden], template { 85 | display: none; 86 | } 87 | 88 | // ============================================================================= 89 | // Base 90 | // ============================================================================= 91 | 92 | // 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units 93 | // http://clagnut.com/blog/348/#c790 94 | // 2. Prevents iOS text size adjust after orientation change, without disabling user zoom 95 | // www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/ 96 | 97 | html { 98 | @if $legacy_support_for_ie { 99 | font-size: 100%; // 1 100 | } 101 | background: $background; 102 | color: $color; 103 | -webkit-text-size-adjust: 100%; // 2 104 | -ms-text-size-adjust: 100%; // 2 105 | } 106 | 107 | // Addresses font-family inconsistency between 'textarea' and other form elements. 108 | 109 | html, 110 | button, 111 | input, 112 | select, 113 | textarea { 114 | font-family: $normalized_font_family; 115 | } 116 | 117 | // Addresses margins handled incorrectly in IE6/7 118 | 119 | body { 120 | margin: 0; 121 | } 122 | 123 | // ============================================================================= 124 | // Links 125 | // ============================================================================= 126 | 127 | // 1. Remove the gray background color from active links in IE 10. 128 | // 2. Addresses outline displayed oddly in Chrome 129 | // 3. Improves readability when focused and also mouse hovered in all browsers 130 | // people.opera.com/patrickl/experiments/keyboard/test 131 | 132 | a { 133 | // 1 134 | 135 | background: transparent; 136 | 137 | // 2 138 | 139 | &:focus { 140 | outline: thin dotted; 141 | } 142 | 143 | // 3 144 | 145 | &:hover, 146 | &:active { 147 | outline: 0; 148 | } 149 | } 150 | 151 | // ============================================================================= 152 | // Typography 153 | // ============================================================================= 154 | 155 | // Addresses font sizes and margins set differently in IE6/7 156 | // Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5 157 | 158 | @if $normalize_headings == true { 159 | h1 { 160 | font-size: $h1_font_size; 161 | margin: $h1_margin; 162 | } 163 | 164 | h2 { 165 | font-size: $h2_font_size; 166 | margin: $h2_margin; 167 | } 168 | 169 | h3 { 170 | font-size: $h3_font_size; 171 | margin: $h3_margin; 172 | } 173 | 174 | h4 { 175 | font-size: $h4_font_size; 176 | margin: $h4_margin; 177 | } 178 | 179 | h5 { 180 | font-size: $h5_font_size; 181 | margin: $h5_margin; 182 | } 183 | 184 | h6 { 185 | font-size: $h6_font_size; 186 | margin: $h6_margin; 187 | } 188 | } 189 | 190 | // Addresses styling not present in IE 8/9, S5, Chrome 191 | 192 | abbr[title] { 193 | border-bottom: 1px dotted; 194 | } 195 | 196 | // Addresses style set to 'bolder' in FF3+, S4/5, Chrome 197 | 198 | b, 199 | strong { 200 | font-weight: bold; 201 | } 202 | 203 | @if $legacy_support_for_ie { 204 | blockquote { 205 | margin: 1em 40px; 206 | } 207 | } 208 | 209 | // Addresses styling not present in S5, Chrome 210 | 211 | dfn { 212 | font-style: italic; 213 | } 214 | 215 | // Addresses styling not present in IE6/7/8/9 216 | 217 | mark { 218 | background: #ff0; 219 | color: #000; 220 | } 221 | 222 | // Addresses margins set differently in IE6/7 223 | @if $legacy_support_for_ie { 224 | p, 225 | pre { 226 | margin: 1em 0; 227 | } 228 | } 229 | 230 | // Corrects font family set oddly in IE6, S4/5, Chrome 231 | // en.wikipedia.org/wiki/User:Davidgothberg/Test59 232 | 233 | code, 234 | kbd, 235 | pre, 236 | samp { 237 | font-family: monospace, serif; 238 | @if $legacy_support_for_ie { 239 | _font-family: 'courier new', monospace; 240 | } 241 | font-size: 1em; 242 | } 243 | 244 | // Improves readability of pre-formatted text in all browsers 245 | 246 | pre { 247 | white-space: pre; 248 | white-space: pre-wrap; 249 | word-wrap: break-word; 250 | } 251 | 252 | // Set consistent quote types. 253 | 254 | q { 255 | quotes: "\201C" "\201D" "\2018" "\2019"; 256 | } 257 | 258 | // 1. Addresses CSS quotes not supported in IE6/7 259 | // 2. Addresses quote property not supported in S4 260 | 261 | // 1 262 | @if $legacy_support_for_ie { 263 | q { 264 | quotes: none; 265 | } 266 | } 267 | 268 | // 2 269 | q:before, 270 | q:after { 271 | content: ''; 272 | content: none; 273 | } 274 | 275 | // Address inconsistent and variable font size in all browsers. 276 | 277 | small { 278 | font-size: 80%; 279 | } 280 | 281 | // Prevents sub and sup affecting line-height in all browsers 282 | // gist.github.com/413930 283 | 284 | sub, 285 | sup { 286 | font-size: 75%; 287 | line-height: 0; 288 | position: relative; 289 | vertical-align: baseline; 290 | } 291 | 292 | sup { 293 | top: -0.5em; 294 | } 295 | 296 | sub { 297 | bottom: -0.25em; 298 | } 299 | 300 | // ============================================================================= 301 | // Lists 302 | // ============================================================================= 303 | 304 | // Addresses margins set differently in IE6/7 305 | @if $legacy_support_for_ie { 306 | dl, 307 | menu, 308 | ol, 309 | ul { 310 | margin: 1em 0; 311 | } 312 | } 313 | 314 | @if $legacy_support_for_ie { 315 | dd { 316 | margin: 0 0 0 40px; 317 | } 318 | } 319 | 320 | // Addresses paddings set differently in IE6/7 321 | @if $legacy_support_for_ie { 322 | menu, 323 | ol, 324 | ul { 325 | padding: 0 0 0 40px; 326 | } 327 | } 328 | 329 | // Corrects list images handled incorrectly in IE7 330 | 331 | nav { 332 | ul, 333 | ol { 334 | @if $legacy_support_for_ie { 335 | list-style-image: none; 336 | } 337 | } 338 | } 339 | 340 | // ============================================================================= 341 | // Embedded content 342 | // ============================================================================= 343 | 344 | // 1. Removes border when inside 'a' element in IE6/7/8/9, FF3 345 | // 2. Improves image quality when scaled in IE7 346 | // code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ 347 | 348 | img { 349 | border: 0; // 1 350 | @if $legacy_support_for_ie { 351 | -ms-interpolation-mode: bicubic; // 2 352 | } 353 | } 354 | 355 | // Corrects overflow displayed oddly in IE9 356 | 357 | svg:not(:root) { 358 | overflow: hidden; 359 | } 360 | 361 | // ============================================================================= 362 | // Figures 363 | // ============================================================================= 364 | 365 | // Addresses margin not present in IE6/7/8/9, S5, O11 366 | 367 | figure { 368 | margin: 0; 369 | } 370 | 371 | // ============================================================================= 372 | // Forms 373 | // ============================================================================= 374 | 375 | // Corrects margin displayed oddly in IE6/7 376 | @if $legacy_support_for_ie { 377 | form { 378 | margin: 0; 379 | } 380 | } 381 | 382 | // Define consistent border, margin, and padding 383 | 384 | fieldset { 385 | border: 1px solid #c0c0c0; 386 | margin: 0 2px; 387 | padding: 0.35em 0.625em 0.75em; 388 | } 389 | 390 | // 1. Corrects color not being inherited in IE6/7/8/9 391 | // 2. Remove padding so people aren't caught out if they zero out fieldsets. 392 | // 3. Corrects text not wrapping in FF3 393 | // 4. Corrects alignment displayed oddly in IE6/7 394 | 395 | legend { 396 | border: 0; // 1 397 | padding: 0; // 2 398 | white-space: normal; // 3 399 | @if $legacy_support_for_ie { 400 | *margin-left: -7px; // 4 401 | } 402 | } 403 | 404 | // 1. Correct font family not being inherited in all browsers. 405 | // 2. Corrects font size not being inherited in all browsers 406 | // 3. Addresses margins set differently in IE6/7, FF3+, S5, Chrome 407 | // 4. Improves appearance and consistency in all browsers 408 | 409 | button, 410 | input, 411 | select, 412 | textarea { 413 | font-family: inherit; // 1 414 | font-size: 100%; // 2 415 | margin: 0; // 3 416 | vertical-align: baseline; // 4 417 | @if $legacy_support_for_ie { 418 | *vertical-align: middle; // 4 419 | } 420 | } 421 | 422 | // Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet 423 | 424 | button, 425 | input { 426 | line-height: normal; 427 | } 428 | 429 | // Address inconsistent `text-transform` inheritance for `button` and `select`. 430 | // All other form control elements do not inherit `text-transform` values. 431 | // Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. 432 | // Correct `select` style inheritance in Firefox 4+ and Opera. 433 | 434 | button, 435 | select { 436 | text-transform: none; 437 | } 438 | 439 | // 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 440 | // and `video` controls 441 | // 2. Corrects inability to style clickable 'input' types in iOS 442 | // 3. Improves usability and consistency of cursor style between image-type 443 | // 'input' and others 444 | // 4. Removes inner spacing in IE7 without affecting normal text inputs 445 | // Known issue: inner spacing remains in IE6 446 | 447 | button, 448 | html input[type="button"], // 1 449 | input[type="reset"], 450 | input[type="submit"] { 451 | -webkit-appearance: button; // 2 452 | cursor: pointer; // 3 453 | @if $legacy_support_for_ie { 454 | *overflow: visible; // 4 455 | } 456 | } 457 | 458 | // Re-set default cursor for disabled elements 459 | 460 | button[disabled], 461 | input[disabled] { 462 | cursor: default; 463 | } 464 | 465 | // 1. Address box sizing set to `content-box` in IE 8/9/10. 466 | // 2. Remove excess padding in IE 8/9/10. 467 | // 3. Removes excess padding in IE7 468 | // Known issue: excess padding remains in IE6 469 | 470 | input[type="checkbox"], 471 | input[type="radio"] { 472 | box-sizing: border-box; // 1 473 | padding: 0; // 2 474 | @if $legacy_support_for_ie { 475 | *height: 13px; // 3 476 | *width: 13px; // 3 477 | } 478 | } 479 | 480 | // 1. Addresses appearance set to searchfield in S5, Chrome 481 | // 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof) 482 | 483 | input[type="search"] { 484 | -webkit-appearance: textfield; // 1 485 | -moz-box-sizing: content-box; 486 | -webkit-box-sizing: content-box; // 2 487 | box-sizing: content-box; 488 | } 489 | 490 | // Remove inner padding and search cancel button in Safari 5 and Chrome 491 | // on OS X. 492 | 493 | input[type="search"]::-webkit-search-cancel-button, 494 | input[type="search"]::-webkit-search-decoration { 495 | -webkit-appearance: none; 496 | } 497 | 498 | // Removes inner padding and border in FF3+ 499 | // www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/ 500 | 501 | button, input { 502 | &::-moz-focus-inner { 503 | border: 0; 504 | padding: 0; 505 | } 506 | } 507 | 508 | // 1. Removes default vertical scrollbar in IE6/7/8/9 509 | // 2. Improves readability and alignment in all browsers 510 | 511 | textarea { 512 | overflow: auto; // 1 513 | vertical-align: top; // 2 514 | } 515 | 516 | // ============================================================================= 517 | // Tables 518 | // ============================================================================= 519 | 520 | // Remove most spacing between table cells 521 | 522 | table { 523 | border-collapse: collapse; 524 | border-spacing: 0; 525 | } 526 | 527 | // Box sizing 528 | *, *:before, *:after { 529 | box-sizing: border-box; 530 | } 531 | -------------------------------------------------------------------------------- /Font/static/sass/libs/_settings.scss: -------------------------------------------------------------------------------- 1 | // Font family 2 | $primary-font : "Roboto", "Open Sans", sans-serif; 3 | // $secondary-font : "Roboto Slab", "Raleway", "Open Sans", serif; 4 | 5 | 6 | // Color Variables 7 | $accent-color : #ffaa3c; 8 | $primary-color : $accent-color; 9 | $secondary-color : #ebebeb; 10 | 11 | $body-color : #84878d; 12 | 13 | $bg-color: #131a20; 14 | 15 | // Grid system 16 | $grid-columns : 12 !default; 17 | $grid-gutter-width : 30px !default; 18 | -------------------------------------------------------------------------------- /Font/static/sass/libs/bootstrap-grid/_grid.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Grid system 3 | // -------------------------------------------------- 4 | 5 | 6 | // Container widths 7 | // 8 | // Set the container width, and override it for fixed navbars in media queries. 9 | 10 | .container { 11 | @include container-fixed(); 12 | 13 | @media (min-width: $screen-sm-min) { 14 | width: $container-sm; 15 | } 16 | @media (min-width: $screen-md-min) { 17 | width: $container-md; 18 | } 19 | @media (min-width: $screen-lg-min) { 20 | width: $container-lg; 21 | } 22 | } 23 | 24 | 25 | // Fluid container 26 | // 27 | // Utilizes the mixin meant for fixed width containers, but without any defined 28 | // width for fluid, full width layouts. 29 | 30 | .container-fluid { 31 | @include container-fixed(); 32 | } 33 | 34 | 35 | // Row 36 | // 37 | // Rows contain and clear the floats of your columns. 38 | 39 | .row { 40 | @include make-row(); 41 | } 42 | 43 | 44 | // Columns 45 | // 46 | // Common styles for small and large grid columns 47 | 48 | @include make-grid-columns(); 49 | 50 | 51 | // Extra small grid 52 | // 53 | // Columns, offsets, pushes, and pulls for extra small devices like 54 | // smartphones. 55 | 56 | @include make-grid(xs); 57 | 58 | 59 | // Small grid 60 | // 61 | // Columns, offsets, pushes, and pulls for the small device range, from phones 62 | // to tablets. 63 | 64 | @media (min-width: $screen-sm-min) { 65 | @include make-grid(sm); 66 | } 67 | 68 | 69 | // Medium grid 70 | // 71 | // Columns, offsets, pushes, and pulls for the desktop device range. 72 | 73 | @media (min-width: $screen-md-min) { 74 | @include make-grid(md); 75 | } 76 | 77 | 78 | // Large grid 79 | // 80 | // Columns, offsets, pushes, and pulls for the large desktop device range. 81 | 82 | @media (min-width: $screen-lg-min) { 83 | @include make-grid(lg); 84 | } 85 | 86 | // 87 | // Responsive: Utility classes 88 | // -------------------------------------------------- 89 | 90 | 91 | // IE10 in Windows (Phone) 8 92 | // 93 | // Support for responsive views via media queries is kind of borked in IE10, for 94 | // Surface/desktop in split view and for Windows Phone 8. This particular fix 95 | // must be accompanied by a snippet of JavaScript to sniff the user agent and 96 | // apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at 97 | // our Getting Started page for more information on this bug. 98 | // 99 | // For more information, see the following: 100 | // 101 | // Issue: https://github.com/twbs/bootstrap/issues/10497 102 | // Docs: http://getbootstrap.com/getting-started/#support-ie10-width 103 | // Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/ 104 | // Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ 105 | 106 | @-ms-viewport { 107 | width: device-width; 108 | } 109 | 110 | 111 | // Visibility utilities 112 | // Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0 113 | @mixin responsive-visibility($parent) { 114 | #{$parent} { 115 | display: block !important; 116 | } 117 | table#{$parent} { display: table; } 118 | tr#{$parent} { display: table-row !important; } 119 | th#{$parent}, 120 | td#{$parent} { display: table-cell !important; } 121 | } 122 | 123 | // [converter] $parent hack 124 | @mixin responsive-invisibility($parent) { 125 | #{$parent} { 126 | display: none !important; 127 | } 128 | } 129 | 130 | @include responsive-invisibility('.visible-xs, .visible-sm, .visible-md, .visible-lg'); 131 | 132 | .visible-xs-block, 133 | .visible-xs-inline, 134 | .visible-xs-inline-block, 135 | .visible-sm-block, 136 | .visible-sm-inline, 137 | .visible-sm-inline-block, 138 | .visible-md-block, 139 | .visible-md-inline, 140 | .visible-md-inline-block, 141 | .visible-lg-block, 142 | .visible-lg-inline, 143 | .visible-lg-inline-block { 144 | display: none !important; 145 | } 146 | 147 | @media (max-width: $screen-xs-max) { 148 | @include responsive-visibility('.visible-xs'); 149 | } 150 | .visible-xs-block { 151 | @media (max-width: $screen-xs-max) { 152 | display: block !important; 153 | } 154 | } 155 | .visible-xs-inline { 156 | @media (max-width: $screen-xs-max) { 157 | display: inline !important; 158 | } 159 | } 160 | .visible-xs-inline-block { 161 | @media (max-width: $screen-xs-max) { 162 | display: inline-block !important; 163 | } 164 | } 165 | 166 | @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) { 167 | @include responsive-visibility('.visible-sm'); 168 | } 169 | .visible-sm-block { 170 | @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) { 171 | display: block !important; 172 | } 173 | } 174 | .visible-sm-inline { 175 | @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) { 176 | display: inline !important; 177 | } 178 | } 179 | .visible-sm-inline-block { 180 | @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) { 181 | display: inline-block !important; 182 | } 183 | } 184 | 185 | @media (min-width: $screen-md-min) and (max-width: $screen-md-max) { 186 | @include responsive-visibility('.visible-md'); 187 | } 188 | .visible-md-block { 189 | @media (min-width: $screen-md-min) and (max-width: $screen-md-max) { 190 | display: block !important; 191 | } 192 | } 193 | .visible-md-inline { 194 | @media (min-width: $screen-md-min) and (max-width: $screen-md-max) { 195 | display: inline !important; 196 | } 197 | } 198 | .visible-md-inline-block { 199 | @media (min-width: $screen-md-min) and (max-width: $screen-md-max) { 200 | display: inline-block !important; 201 | } 202 | } 203 | 204 | @media (min-width: $screen-lg-min) { 205 | @include responsive-visibility('.visible-lg'); 206 | } 207 | .visible-lg-block { 208 | @media (min-width: $screen-lg-min) { 209 | display: block !important; 210 | } 211 | } 212 | .visible-lg-inline { 213 | @media (min-width: $screen-lg-min) { 214 | display: inline !important; 215 | } 216 | } 217 | .visible-lg-inline-block { 218 | @media (min-width: $screen-lg-min) { 219 | display: inline-block !important; 220 | } 221 | } 222 | 223 | @media (max-width: $screen-xs-max) { 224 | @include responsive-invisibility('.hidden-xs'); 225 | } 226 | 227 | @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) { 228 | @include responsive-invisibility('.hidden-sm'); 229 | } 230 | 231 | @media (min-width: $screen-md-min) and (max-width: $screen-md-max) { 232 | @include responsive-invisibility('.hidden-md'); 233 | } 234 | 235 | @media (min-width: $screen-lg-min) { 236 | @include responsive-invisibility('.hidden-lg'); 237 | } 238 | 239 | 240 | // Print utilities 241 | // 242 | // Media queries are placed on the inside to be mixin-friendly. 243 | 244 | // Note: Deprecated .visible-print as of v3.2.0 245 | 246 | @include responsive-invisibility('.visible-print'); 247 | 248 | @media print { 249 | @include responsive-visibility('.visible-print'); 250 | } 251 | .visible-print-block { 252 | display: none !important; 253 | 254 | @media print { 255 | display: block !important; 256 | } 257 | } 258 | .visible-print-inline { 259 | display: none !important; 260 | 261 | @media print { 262 | display: inline !important; 263 | } 264 | } 265 | .visible-print-inline-block { 266 | display: none !important; 267 | 268 | @media print { 269 | display: inline-block !important; 270 | } 271 | } 272 | 273 | @media print { 274 | @include responsive-invisibility('.hidden-print'); 275 | } 276 | -------------------------------------------------------------------------------- /Font/static/sass/libs/bootstrap-grid/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Framework grid generation 2 | // 3 | // Used only by Bootstrap to generate the correct number of grid classes given 4 | // any value of `$grid-columns`. 5 | 6 | // [converter] This is defined recursively in LESS, but Sass supports real loops 7 | @mixin make-grid-columns($i: 1, $list: ".col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}") { 8 | @for $i from (1 + 1) through $grid-columns { 9 | $list: "#{$list}, .col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}"; 10 | } 11 | #{$list} { 12 | position: relative; 13 | // Prevent columns from collapsing when empty 14 | min-height: 1px; 15 | // Inner gutter via padding 16 | padding-left: ($grid-gutter-width / 2); 17 | padding-right: ($grid-gutter-width / 2); 18 | } 19 | } 20 | 21 | 22 | // [converter] This is defined recursively in LESS, but Sass supports real loops 23 | @mixin float-grid-columns($class, $i: 1, $list: ".col-#{$class}-#{$i}") { 24 | @for $i from (1 + 1) through $grid-columns { 25 | $list: "#{$list}, .col-#{$class}-#{$i}"; 26 | } 27 | #{$list} { 28 | float: left; 29 | } 30 | } 31 | 32 | 33 | @mixin calc-grid-column($index, $class, $type) { 34 | @if ($type == width) and ($index > 0) { 35 | .col-#{$class}-#{$index} { 36 | width: percentage(($index / $grid-columns)); 37 | } 38 | } 39 | @if ($type == push) and ($index > 0) { 40 | .col-#{$class}-push-#{$index} { 41 | left: percentage(($index / $grid-columns)); 42 | } 43 | } 44 | @if ($type == push) and ($index == 0) { 45 | .col-#{$class}-push-0 { 46 | left: auto; 47 | } 48 | } 49 | @if ($type == pull) and ($index > 0) { 50 | .col-#{$class}-pull-#{$index} { 51 | right: percentage(($index / $grid-columns)); 52 | } 53 | } 54 | @if ($type == pull) and ($index == 0) { 55 | .col-#{$class}-pull-0 { 56 | right: auto; 57 | } 58 | } 59 | @if ($type == offset) { 60 | .col-#{$class}-offset-#{$index} { 61 | margin-left: percentage(($index / $grid-columns)); 62 | } 63 | } 64 | } 65 | 66 | // [converter] This is defined recursively in LESS, but Sass supports real loops 67 | @mixin loop-grid-columns($columns, $class, $type) { 68 | @for $i from 0 through $columns { 69 | @include calc-grid-column($i, $class, $type); 70 | } 71 | } 72 | 73 | 74 | // Create grid for specific class 75 | @mixin make-grid($class) { 76 | @include float-grid-columns($class); 77 | @include loop-grid-columns($grid-columns, $class, width); 78 | @include loop-grid-columns($grid-columns, $class, pull); 79 | @include loop-grid-columns($grid-columns, $class, push); 80 | @include loop-grid-columns($grid-columns, $class, offset); 81 | } 82 | 83 | // Grid system 84 | // 85 | // Generate semantic grid columns with these mixins. 86 | 87 | // Centered container element 88 | @mixin container-fixed($gutter: $grid-gutter-width) { 89 | margin-right: auto; 90 | margin-left: auto; 91 | padding-left: ($gutter / 2); 92 | padding-right: ($gutter / 2); 93 | @include clearfix(); 94 | } 95 | 96 | // Creates a wrapper for a series of columns 97 | @mixin make-row($gutter: $grid-gutter-width) { 98 | margin-left: ($gutter / -2); 99 | margin-right: ($gutter / -2); 100 | @include clearfix(); 101 | } 102 | 103 | // Generate the extra small columns 104 | @mixin make-xs-column($columns, $gutter: $grid-gutter-width) { 105 | position: relative; 106 | float: left; 107 | width: percentage(($columns / $grid-columns)); 108 | min-height: 1px; 109 | padding-left: ($gutter / 2); 110 | padding-right: ($gutter / 2); 111 | } 112 | @mixin make-xs-column-offset($columns) { 113 | margin-left: percentage(($columns / $grid-columns)); 114 | } 115 | @mixin make-xs-column-push($columns) { 116 | left: percentage(($columns / $grid-columns)); 117 | } 118 | @mixin make-xs-column-pull($columns) { 119 | right: percentage(($columns / $grid-columns)); 120 | } 121 | 122 | // Generate the small columns 123 | @mixin make-sm-column($columns, $gutter: $grid-gutter-width) { 124 | position: relative; 125 | min-height: 1px; 126 | padding-left: ($gutter / 2); 127 | padding-right: ($gutter / 2); 128 | 129 | @media (min-width: $screen-sm-min) { 130 | float: left; 131 | width: percentage(($columns / $grid-columns)); 132 | } 133 | } 134 | @mixin make-sm-column-offset($columns) { 135 | @media (min-width: $screen-sm-min) { 136 | margin-left: percentage(($columns / $grid-columns)); 137 | } 138 | } 139 | @mixin make-sm-column-push($columns) { 140 | @media (min-width: $screen-sm-min) { 141 | left: percentage(($columns / $grid-columns)); 142 | } 143 | } 144 | @mixin make-sm-column-pull($columns) { 145 | @media (min-width: $screen-sm-min) { 146 | right: percentage(($columns / $grid-columns)); 147 | } 148 | } 149 | 150 | // Generate the medium columns 151 | @mixin make-md-column($columns, $gutter: $grid-gutter-width) { 152 | position: relative; 153 | min-height: 1px; 154 | padding-left: ($gutter / 2); 155 | padding-right: ($gutter / 2); 156 | 157 | @media (min-width: $screen-md-min) { 158 | float: left; 159 | width: percentage(($columns / $grid-columns)); 160 | } 161 | } 162 | @mixin make-md-column-offset($columns) { 163 | @media (min-width: $screen-md-min) { 164 | margin-left: percentage(($columns / $grid-columns)); 165 | } 166 | } 167 | @mixin make-md-column-push($columns) { 168 | @media (min-width: $screen-md-min) { 169 | left: percentage(($columns / $grid-columns)); 170 | } 171 | } 172 | @mixin make-md-column-pull($columns) { 173 | @media (min-width: $screen-md-min) { 174 | right: percentage(($columns / $grid-columns)); 175 | } 176 | } 177 | 178 | // Generate the large columns 179 | @mixin make-lg-column($columns, $gutter: $grid-gutter-width) { 180 | position: relative; 181 | min-height: 1px; 182 | padding-left: ($gutter / 2); 183 | padding-right: ($gutter / 2); 184 | 185 | @media (min-width: $screen-lg-min) { 186 | float: left; 187 | width: percentage(($columns / $grid-columns)); 188 | } 189 | } 190 | @mixin make-lg-column-offset($columns) { 191 | @media (min-width: $screen-lg-min) { 192 | margin-left: percentage(($columns / $grid-columns)); 193 | } 194 | } 195 | @mixin make-lg-column-push($columns) { 196 | @media (min-width: $screen-lg-min) { 197 | left: percentage(($columns / $grid-columns)); 198 | } 199 | } 200 | @mixin make-lg-column-pull($columns) { 201 | @media (min-width: $screen-lg-min) { 202 | right: percentage(($columns / $grid-columns)); 203 | } 204 | } 205 | -------------------------------------------------------------------------------- /Font/static/sass/libs/bootstrap-grid/_settings.scss: -------------------------------------------------------------------------------- 1 | //== Media queries breakpoints 2 | // 3 | //## Define the breakpoints at which your layout will change, adapting to different screen sizes. 4 | 5 | // Extra small screen / phone 6 | //** Deprecated `$screen-xs` as of v3.0.1 7 | $screen-xs: 480px !default; 8 | //** Deprecated `$screen-xs-min` as of v3.2.0 9 | $screen-xs-min: $screen-xs !default; 10 | //** Deprecated `$screen-phone` as of v3.0.1 11 | $screen-phone: $screen-xs-min !default; 12 | 13 | // Small screen / tablet 14 | //** Deprecated `$screen-sm` as of v3.0.1 15 | $screen-sm: 768px !default; 16 | $screen-sm-min: $screen-sm !default; 17 | //** Deprecated `$screen-tablet` as of v3.0.1 18 | $screen-tablet: $screen-sm-min !default; 19 | 20 | // Medium screen / desktop 21 | //** Deprecated `$screen-md` as of v3.0.1 22 | $screen-md: 992px !default; 23 | $screen-md-min: $screen-md !default; 24 | //** Deprecated `$screen-desktop` as of v3.0.1 25 | $screen-desktop: $screen-md-min !default; 26 | 27 | // Large screen / wide desktop 28 | //** Deprecated `$screen-lg` as of v3.0.1 29 | $screen-lg: 1200px !default; 30 | $screen-lg-min: $screen-lg !default; 31 | //** Deprecated `$screen-lg-desktop` as of v3.0.1 32 | $screen-lg-desktop: $screen-lg-min !default; 33 | 34 | // So media queries don't overlap when required, provide a maximum 35 | $screen-xs-max: ($screen-sm-min - 1) !default; 36 | $screen-sm-max: ($screen-md-min - 1) !default; 37 | $screen-md-max: ($screen-lg-min - 1) !default; 38 | 39 | // Add your settings here 40 | //== Grid system 41 | // 42 | //## Define your custom responsive grid. 43 | 44 | // //** Number of columns in the grid. 45 | // $grid-columns: 12 !default; 46 | // //** Padding between columns. Gets divided in half for the left and right. 47 | // $grid-gutter-width: 30px !default; 48 | // Navbar collapse 49 | //** Point at which the navbar becomes uncollapsed. 50 | $grid-float-breakpoint: $screen-sm-min !default; 51 | //** Point at which the navbar begins collapsing. 52 | $grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default; 53 | 54 | 55 | //== Container sizes 56 | // 57 | //## Define the maximum width of `.container` for different screen sizes. 58 | 59 | // Small screen / tablet 60 | $container-tablet: ((720px + $grid-gutter-width)) !default; 61 | //** For `$screen-sm-min` and up. 62 | $container-sm: $container-tablet !default; 63 | 64 | // Medium screen / desktop 65 | $container-desktop: ((940px + $grid-gutter-width)) !default; 66 | //** For `$screen-md-min` and up. 67 | $container-md: $container-desktop !default; 68 | 69 | // Large screen / wide desktop 70 | $container-large-desktop: ((1140px + $grid-gutter-width)) !default; 71 | //** For `$screen-lg-min` and up. 72 | $container-lg: $container-large-desktop !default; 73 | 74 | -------------------------------------------------------------------------------- /Font/static/sass/style.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Project_Name: Themezy Movie Review 3 | * Author: Themezy 4 | * Email: info@themezy.com 5 | * URL: http://themezy.com 6 | */ 7 | /*=========================================== 8 | * Importing CSS Libraries 9 | *===========================================*/ 10 | @import "libs/settings", 11 | "libs/mixins", 12 | "libs/normalize", 13 | "libs/global", 14 | "libs/components", 15 | 16 | // importing bootstrap grid framework 17 | "libs/bootstrap-grid/settings", 18 | "libs/bootstrap-grid/mixins", 19 | "libs/bootstrap-grid/grid", 20 | 21 | // importing layout styles 22 | "layout/header", 23 | "layout/content", 24 | "layout/footer"; 25 | -------------------------------------------------------------------------------- /Font/templates/about.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Movie Review | About 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
    29 | 58 |
    59 |
    60 |
    61 | 65 | 66 |
    67 |
    68 |
    figure image
    69 |
    70 |
    71 |

    Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium totam.

    72 |

    Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit consectetur adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam.

    73 |
    74 |
    75 | 76 |
    77 |
    78 |

    Vision & Misssion

    79 |

    Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.

    80 | 81 |

    Neque porro quisquam est, qui dolorem ipsum quia dolor sit consectetur adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam dignissimos ducimus qui blanditiis praesentium voluptatum atque.

    82 |
    83 | 95 |
    96 | 97 |

    Our Team

    98 |
    99 | 100 |
    101 |
    102 |
    103 |

    Sarah Stuart

    104 | Co-founder 105 | 111 |
    112 |
    113 |
    114 |
    115 |
    116 |

    John Doe

    117 | Managing Director 118 | 124 |
    125 |
    126 |
    127 |
    128 |
    129 |

    Jessica Branson

    130 | Reviewer 131 | 137 |
    138 |
    139 |
    140 |
    141 |
    142 |

    Sarah Stuart

    143 | Consultant 144 | 150 |
    151 |
    152 | 153 |
    154 |
    155 |
    156 |
    157 |
    158 |
    159 |
    160 |
    161 |
    162 |

    About Us

    163 |

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quia tempore vitae mollitia nesciunt saepe cupiditate

    164 |
    165 |
    166 |
    167 |
    168 |

    Recent Review

    169 |
      170 |
    • Lorem ipsum dolor
    • 171 |
    • Sit amet consecture
    • 172 |
    • Dolorem respequem
    • 173 |
    • Invenore veritae
    • 174 |
    175 |
    176 |
    177 |
    178 |
    179 |

    Help Center

    180 |
      181 |
    • Lorem ipsum dolor
    • 182 |
    • Sit amet consecture
    • 183 |
    • Dolorem respequem
    • 184 |
    • Invenore veritae
    • 185 |
    186 |
    187 |
    188 |
    189 |
    190 |

    Join Us

    191 |
      192 |
    • Lorem ipsum dolor
    • 193 |
    • Sit amet consecture
    • 194 |
    • Dolorem respequem
    • 195 |
    • Invenore veritae
    • 196 |
    197 |
    198 |
    199 |
    200 |
    201 |

    Social Media

    202 |
      203 |
    • Facebook
    • 204 |
    • Twitter
    • 205 |
    • Google+
    • 206 |
    • Pinterest
    • 207 |
    208 |
    209 |
    210 |
    211 |
    212 |

    Newsletter

    213 | 216 |
    217 |
    218 |
    219 | 220 |
    Copyright 2014 Company name, Designed by Themezy. All rights reserved
    221 |
    222 | 223 |
    224 |
    225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | -------------------------------------------------------------------------------- /Font/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% block head %} 4 | 5 | 6 | 7 | 8 | 9 | Movie Review | Review 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 81 | 82 | {% endblock %} 83 | 84 |
    85 | {% block site_header %} 86 | 113 | {% endblock %} 114 |
    115 | {% block main_content %} 116 | {% endblock %} 117 |
    118 | {% block site_footer %} 119 |
    120 |
    121 |
    122 |
    123 |
    124 |

    About Us

    125 |

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quia tempore vitae mollitia nesciunt saepe cupiditate

    126 |
    127 |
    128 |
    129 |
    130 |

    Recent Review

    131 |
      132 |
    • Lorem ipsum dolor
    • 133 |
    • Sit amet consecture
    • 134 |
    • Dolorem respequem
    • 135 |
    • Invenore veritae
    • 136 |
    137 |
    138 |
    139 |
    140 |
    141 |

    Help Center

    142 |
      143 |
    • Lorem ipsum dolor
    • 144 |
    • Sit amet consecture
    • 145 |
    • Dolorem respequem
    • 146 |
    • Invenore veritae
    • 147 |
    148 |
    149 |
    150 |
    151 |
    152 |

    Join Us

    153 |
      154 |
    • Lorem ipsum dolor
    • 155 |
    • Sit amet consecture
    • 156 |
    • Dolorem respequem
    • 157 |
    • Invenore veritae
    • 158 |
    159 |
    160 |
    161 |
    162 |
    163 |

    Social Media

    164 |
      165 |
    • Facebook
    • 166 |
    • Twitter
    • 167 |
    • Google+
    • 168 |
    • Pinterest
    • 169 |
    170 |
    171 |
    172 |
    173 |
    174 |

    Newsletter

    175 | 178 |
    179 |
    180 |
    181 | 182 |
    Copyright 2014 Company name, Designed by Themezy. All rights reserved
    183 |
    184 | 185 |
    186 | {% endblock %} 187 |
    188 | 189 | 190 | 191 | -------------------------------------------------------------------------------- /Font/templates/contact.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Movie Review | Contact 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
    29 | 58 |
    59 |
    60 |
    61 | 65 | 66 |
    67 |
    68 |
    69 |

    Contact

    70 | 84 |
    85 | 86 | 87 | 88 | 89 | 90 | 91 |
    92 |
    93 |
    94 |
    95 |
    96 |
    97 |
    98 |
    99 |
    100 |
    101 |
    102 |
    103 |
    104 |
    105 |
    106 |

    About Us

    107 |

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quia tempore vitae mollitia nesciunt saepe cupiditate

    108 |
    109 |
    110 |
    111 |
    112 |

    Recent Review

    113 |
      114 |
    • Lorem ipsum dolor
    • 115 |
    • Sit amet consecture
    • 116 |
    • Dolorem respequem
    • 117 |
    • Invenore veritae
    • 118 |
    119 |
    120 |
    121 |
    122 |
    123 |

    Help Center

    124 |
      125 |
    • Lorem ipsum dolor
    • 126 |
    • Sit amet consecture
    • 127 |
    • Dolorem respequem
    • 128 |
    • Invenore veritae
    • 129 |
    130 |
    131 |
    132 |
    133 |
    134 |

    Join Us

    135 |
      136 |
    • Lorem ipsum dolor
    • 137 |
    • Sit amet consecture
    • 138 |
    • Dolorem respequem
    • 139 |
    • Invenore veritae
    • 140 |
    141 |
    142 |
    143 |
    144 |
    145 |

    Social Media

    146 |
      147 |
    • Facebook
    • 148 |
    • Twitter
    • 149 |
    • Google+
    • 150 |
    • Pinterest
    • 151 |
    152 |
    153 |
    154 |
    155 |
    156 |

    Newsletter

    157 | 160 |
    161 |
    162 |
    163 | 164 |
    Copyright 2014 Company name, Designed by Themezy. All rights reserved
    165 |
    166 | 167 |
    168 |
    169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | -------------------------------------------------------------------------------- /Font/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Movie Review 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
    29 | 58 |
    59 |
    60 |
    61 |
    62 |
    63 |
    64 |
      65 |
    • Slide 1
    • 66 |
    • Slide 2
    • 67 |
    • Slide 3
    • 68 |
    69 |
    70 |
    71 |
    72 |
    73 |
    74 |
    75 | Movie 1 76 |
    77 |
    78 |
    79 |
    80 | Movie 2 81 |
    82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |
    89 | Movie 3 90 |
    91 |
    92 |
    93 |
    94 | Movie 4 95 |
    96 |
    97 |
    98 |
    99 | Movie 5 100 |
    101 |
    102 |
    103 |
    104 | Movie 6 105 |
    106 |
    107 |
    108 | 109 |
    110 |
    111 |

    December premiere

    112 |

    Lorem ipsum dolor sit amet consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.

    113 | 131 |
    132 |
    133 |

    November premiere

    134 |

    Lorem ipsum dolor sit amet consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.

    135 | 153 |
    154 |
    155 |

    October premiere

    156 |

    Lorem ipsum dolor sit amet consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.

    157 | 175 |
    176 |
    177 |
    178 |
    179 |
    180 | 247 |
    248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | -------------------------------------------------------------------------------- /Font/templates/joinus.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Movie Review | Join Us 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
    29 | 58 |
    59 |
    60 |
    61 | 65 | 66 |
    67 |

    Consectetur adipiscing elit sed eiusmod tempor

    68 |

    Aenean vehicula eget risus sit amet posuere. Maecenas id risus maximus, malesuada leo eget, pellentesque arcu. Phasellus vitae leo rhoncus, consectetur mauris vitae, lacinia quam. Nunc turpis erat, accumsan eget justo quis, auctor ultricies magna. Mauris sodales, risus sit amet hendrerit tincidunt, erat ante facilisis sapien, sit amet maximus neque massa a felis. Nullam consectetur justo massa, vel commodo metus gravida in. Aliquam erat volutpat. Nullam a lorem sed lorem euismod gravida a eu velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec venenatis ac ligula vel pharetra. Aenean vitae nulla sed dui volutpat euismod.

    69 | 70 |

    Nemo enim ipsam voluptatem quia voluptas

    71 |

    At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga et harum quidem rerum facilis est et expedita.

    72 | 73 |

    Distinctio nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.

    74 | 75 |
    76 |
    77 |
    78 |

    Exceptur cupidat

    79 | Incididunt labore dolore 80 |

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rerum aut ad optio praesentium amet, ullam vel impedit dignissimos voluptas, consequatur recusandae quo autem consectetur tempore rem quam corrupti a. Accusamus.

    81 | Send a request 82 |
    83 |
    84 |
    85 |
    86 |

    Neque quisquam

    87 | Duis aute reprehenderit 88 |

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Soluta aperiam quidem nobis rem exercitationem aut assumenda iure molestias eius accusantium, temporibus quis esse tempora. Laboriosam libero odio nobis, eligendi minus.

    89 | Send a request 90 |
    91 |
    92 |
    93 |
    94 |

    Tempor Labore

    95 | Ratione sequi nesciunt 96 |

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quo commodi impedit ea beatae, in ipsa doloribus consequuntur ut, quod dolor dolore unde, esse eligendi autem nobis rem tempora recusandae laborum.

    97 | Send a request 98 |
    99 |
    100 |
    101 |
    102 |
    103 |
    104 |
    105 |
    106 |
    107 |
    108 |
    109 |
    110 |

    About Us

    111 |

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quia tempore vitae mollitia nesciunt saepe cupiditate

    112 |
    113 |
    114 |
    115 |
    116 |

    Recent Review

    117 |
      118 |
    • Lorem ipsum dolor
    • 119 |
    • Sit amet consecture
    • 120 |
    • Dolorem respequem
    • 121 |
    • Invenore veritae
    • 122 |
    123 |
    124 |
    125 |
    126 |
    127 |

    Help Center

    128 |
      129 |
    • Lorem ipsum dolor
    • 130 |
    • Sit amet consecture
    • 131 |
    • Dolorem respequem
    • 132 |
    • Invenore veritae
    • 133 |
    134 |
    135 |
    136 |
    137 |
    138 |

    Join Us

    139 |
      140 |
    • Lorem ipsum dolor
    • 141 |
    • Sit amet consecture
    • 142 |
    • Dolorem respequem
    • 143 |
    • Invenore veritae
    • 144 |
    145 |
    146 |
    147 |
    148 |
    149 |

    Social Media

    150 |
      151 |
    • Facebook
    • 152 |
    • Twitter
    • 153 |
    • Google+
    • 154 |
    • Pinterest
    • 155 |
    156 |
    157 |
    158 |
    159 |
    160 |

    Newsletter

    161 | 164 |
    165 |
    166 |
    167 | 168 |
    Copyright 2014 Company name, Designed by Themezy. All rights reserved
    169 |
    170 | 171 |
    172 |
    173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | -------------------------------------------------------------------------------- /Font/templates/review.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | {% extends "base.html" %} 13 | {% block main_content %} 14 |
    15 |
    16 | 20 | 21 |
    22 | 28 | 34 |
    35 |
    36 | {% for movie in movies %} 37 |
    38 |
    #
    39 | 40 |
    41 | {% endfor %} 42 |
    43 | 44 | 52 |
    53 |
    54 | {% endblock %} 55 | -------------------------------------------------------------------------------- /Font/templates/single.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | {% extends "base.html" %} 13 | {% block main_content %} 14 |
    15 |
    16 | 21 | 22 |
    23 |
    24 |
    25 |
    #
    26 |
    27 |
    28 |

    {{ movie.title }}

    29 |
    30 | {{ movie.summary }} 31 |
    32 |
      33 |
    • Rating: 34 |
      {{movie.rating/2}} out of 5
      35 |
    • 36 |
    • Length: {{movie.time}} min
    • 37 |
    • Premiere: {{movie.datePublished}}
    • 38 |
    • Category: {{movie.genres}}
    • 39 |
    40 | 41 |
      42 |
    • Creators: {{movie.creators}}
    • 43 |
    • Stars: {{movie.casts}}
    • 44 |
    45 |
    46 |
    47 |
    48 |
    49 |
    50 | {% endblock %} 51 | -------------------------------------------------------------------------------- /Font/webmovie.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, render_template, request, Response, jsonify 2 | from elasticsearch import Elasticsearch 3 | from elasticsearch_dsl import Search, Q 4 | from elasticsearch_dsl.aggs import A 5 | import logging 6 | import sys 7 | import json 8 | 9 | logger = logging.getLogger() 10 | logger.setLevel(logging.DEBUG) 11 | 12 | ch = logging.StreamHandler(sys.stdout) 13 | ch.setLevel(logging.DEBUG) 14 | formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 15 | ch.setFormatter(formatter) 16 | logger.addHandler(ch) 17 | 18 | # create a Elasticsearch client, you can change to your own username and password 19 | es=Elasticsearch(['localhost'],http_auth=('elastic', 'changeme'),port=9200) 20 | app = Flask(__name__) 21 | 22 | PAGE_SIZE = 8 23 | 24 | 25 | def get_page_url(search, genre, sort, i): 26 | return '/movies?%s' % '&'.join(filter(lambda x: x, [search, genre, sort, 'page=%s' % i])) 27 | 28 | 29 | def get_list_result(movies, max_page, **kwargs): 30 | page = int(kwargs.get('page', 1)) 31 | search = 'search=%s' % kwargs.get('search') if kwargs.get('search') else '' 32 | genre = 'genre=%s' % kwargs.get('genre') if kwargs.get('genre') else '' 33 | sort = 'sort=%s' % kwargs.get('sort') if kwargs.get('sort') else '' 34 | pages = [(str(i), get_page_url(search, genre, sort, i)) 35 | for i in range(page, min(page+5, max_page))] 36 | lastpage = {'num': max_page, 'url': get_page_url(search, genre, sort, max_page)} 37 | firstpage = {'num': 1, 'url': get_page_url(search, genre, sort, 1)} 38 | pageinfos = [{'num': p[0], 'url': p[1]} for p in pages] + [firstpage] + [lastpage] 39 | return render_template('review.html', movies=movies, genres=get_genre_agg(), 40 | pages=pageinfos, search=kwargs.get('search'), genre=kwargs.get('genre'), 41 | sort=kwargs.get('sort'), page=page) 42 | 43 | 44 | @app.route('/test') 45 | def test(): 46 | return render_template('about.html') 47 | 48 | # set up home page 49 | @app.route('/') 50 | @app.route('/movies') 51 | @app.route('/index.html') 52 | @app.route('/movie/index.html') 53 | def index(genre=None): 54 | # Get index first page items 55 | page = 1 56 | if request.args.get('page'): 57 | page = int(request.args.get('page')) 58 | genre = request.args.get('genre') 59 | sort = request.args.get('sort') 60 | search = request.args.get('search') 61 | print genre 62 | print page 63 | print search 64 | print sort 65 | s = Search(using=es) 66 | s = s.index('imdb') 67 | s = s.source(includes=['vote', 'title', 'poster', '_id']) 68 | s = s.query(Q('match_all')) 69 | if genre: 70 | s = s.query('bool', filter=[Q('term', genres=genre)]) 71 | if sort: 72 | s = s.sort(sort) 73 | if search: 74 | s = s.query(Q('multi_match', query=search, fields=['title', 'summary', 'casts', 'creators', 'genres'])).extra(size=8) 75 | s = s[(page-1)*PAGE_SIZE:page*PAGE_SIZE] 76 | ret = s.execute() 77 | logger.debug(ret) 78 | movies, max_page = get_movies(ret.hits), int(ret.hits.total/PAGE_SIZE) + 1 79 | return get_list_result(movies, max_page, page=page, genre=genre, sort=sort, search=search) 80 | 81 | 82 | # aggregation 83 | def get_genre_agg(): 84 | s = Search(using=es) 85 | s = s.index('imdb') 86 | s.aggs.bucket('genres', A('terms', field='genres')) 87 | ret = s.execute() 88 | # logger.debug('genre agg is %s', json.dumps(ret.aggs.to_dict(), indent=2)) 89 | return [x['key'] for x in ret.aggs.to_dict()['genres']['buckets']] 90 | 91 | 92 | # set up movie page 93 | @app.route('/movie/') 94 | def movie_page(mid): 95 | s = Search(using=es) 96 | s = s.index('imdb') 97 | s = s.filter('term', _id=mid) 98 | ret = s.execute() 99 | return render_template('single.html', movie=get_movie_detail(ret.hits[0].to_dict())) 100 | 101 | 102 | def get_movie_detail(hit): 103 | movie = hit 104 | movie['genres'] = '/'.join(movie['genres']) 105 | movie['creators'] = ', '.join(movie['creators']) 106 | movie['casts'] = ', '.join(movie['casts']) 107 | if movie['datePublished']: 108 | movie['datePublished'] = movie['datePublished'].split('T')[0] 109 | else: 110 | movie['datePublished'] = 'N/A' 111 | return movie 112 | 113 | 114 | def get_movies(hits): 115 | for r in hits: 116 | r._d_['id'] = r.meta.id 117 | return [x.to_dict() for x in hits] 118 | 119 | # auto completion suggester 120 | @app.route('/suggest/') 121 | def get_suggest(input): 122 | if not input: 123 | return None 124 | s = Search(using=es) 125 | s = s.index('imdb') 126 | s = s.suggest('suggestion', input, completion={'field': 'suggest'}) 127 | s = s.source(False) 128 | logger.debug(s.to_dict()) 129 | ret = s.execute() 130 | results = [x['text'] for x in ret.suggest.suggestion[0]['options']] 131 | logger.debug(results) 132 | return jsonify(result=results) 133 | -------------------------------------------------------------------------------- /ImdbSpider/Imdbspider/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuQQiu/ElasticSearch/de0191f6e71955dc1c58f2cc26d3adbd665624d8/ImdbSpider/Imdbspider/__init__.py -------------------------------------------------------------------------------- /ImdbSpider/Imdbspider/items.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Define here the models for your scraped items 4 | # 5 | # See documentation in: 6 | # http://doc.scrapy.org/en/latest/topics/items.html 7 | 8 | import scrapy 9 | 10 | 11 | class ImdbspiderItem(scrapy.Item): 12 | # define the fields for your item here like: 13 | # name = scrapy.Field() 14 | pass 15 | -------------------------------------------------------------------------------- /ImdbSpider/Imdbspider/middlewares.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Define here the models for your spider middleware 4 | # 5 | # See documentation in: 6 | # http://doc.scrapy.org/en/latest/topics/spider-middleware.html 7 | 8 | from scrapy import signals 9 | 10 | 11 | class ImdbspiderSpiderMiddleware(object): 12 | # Not all methods need to be defined. If a method is not defined, 13 | # scrapy acts as if the spider middleware does not modify the 14 | # passed objects. 15 | 16 | @classmethod 17 | def from_crawler(cls, crawler): 18 | # This method is used by Scrapy to create your spiders. 19 | s = cls() 20 | crawler.signals.connect(s.spider_opened, signal=signals.spider_opened) 21 | return s 22 | 23 | def process_spider_input(response, spider): 24 | # Called for each response that goes through the spider 25 | # middleware and into the spider. 26 | 27 | # Should return None or raise an exception. 28 | return None 29 | 30 | def process_spider_output(response, result, spider): 31 | # Called with the results returned from the Spider, after 32 | # it has processed the response. 33 | 34 | # Must return an iterable of Request, dict or Item objects. 35 | for i in result: 36 | yield i 37 | 38 | def process_spider_exception(response, exception, spider): 39 | # Called when a spider or process_spider_input() method 40 | # (from other spider middleware) raises an exception. 41 | 42 | # Should return either None or an iterable of Response, dict 43 | # or Item objects. 44 | pass 45 | 46 | def process_start_requests(start_requests, spider): 47 | # Called with the start requests of the spider, and works 48 | # similarly to the process_spider_output() method, except 49 | # that it doesn’t have a response associated. 50 | 51 | # Must return only requests (not items). 52 | for r in start_requests: 53 | yield r 54 | 55 | def spider_opened(self, spider): 56 | spider.logger.info('Spider opened: %s' % spider.name) 57 | -------------------------------------------------------------------------------- /ImdbSpider/Imdbspider/pipelines.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Define your item pipelines here 4 | # 5 | # Don't forget to add your pipeline to the ITEM_PIPELINES setting 6 | # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html 7 | 8 | from elasticsearch_dsl.document import DocType 9 | from elasticsearch_dsl.field import Text, Date, Keyword, Integer, String, Completion, Float 10 | from elasticsearch_dsl.analysis import token_filter, analyzer 11 | from elasticsearch_dsl import Index 12 | from elasticsearch import Elasticsearch 13 | 14 | 15 | es=Elasticsearch(['localhost'],http_auth=('elastic', 'changeme'),port=9200) 16 | 17 | ngram_filter = token_filter('ngram_filter', 18 | type='nGram', 19 | min_gram=1, 20 | max_gram=20) 21 | 22 | ngram_analyzer = analyzer('ngram_analyzer', 23 | type='custom', 24 | tokenizer='whitespace', 25 | filter=[ 26 | 'lowercase', 27 | 'asciifolding', 28 | ngram_filter 29 | ]) 30 | 31 | 32 | class ImdbspiderPipeline(object): 33 | def __init__(self): 34 | movies = Index('imdb', using=es) 35 | movies.doc_type(Movie) 36 | movies.delete(ignore=404) 37 | movies.create() 38 | 39 | # insert data into ElasticSearch 40 | def process_item(self, item, spider): 41 | movie = Movie() 42 | movie.title = item['title'] 43 | movie.summary = item['summary'] 44 | movie.datePublished = item['datePublished'] 45 | movie.genres = item['genres'] 46 | movie.creators = item['creators'] 47 | movie.casts = item['casts'] 48 | movie.time = item['time'] 49 | movie.rating = item['rating'] 50 | movie.countries = item['country'] 51 | movie.languages = item['languages'] 52 | movie.poster = item['poster'] 53 | movie.plot_keywords = item['plot_keywords'] 54 | movie.suggest = [item['title']] + item['casts'] + item['creators'] 55 | movie.save(using=es) 56 | return item 57 | 58 | 59 | # define data mapping and analyzer 60 | class Movie(DocType): 61 | title = Text(fields={'raw':{'type': 'keyword'}}) 62 | summary = Text() 63 | datePublished = Date() 64 | creators = Keyword(multi=True) 65 | genres = Keyword(multi=True) 66 | casts = Keyword(multi=True) 67 | time = Integer() 68 | countries = Keyword(multi=True) 69 | plot_keywords = Keyword(multi=True) 70 | languages = Keyword(multi=True) 71 | rating = Float() 72 | poster = Keyword() 73 | suggest = Completion(analyzer=ngram_analyzer, 74 | search_analyzer=analyzer('standard')) 75 | class Meta: 76 | index = 'imdb' 77 | -------------------------------------------------------------------------------- /ImdbSpider/Imdbspider/settings.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Scrapy settings for Imdbspider project 4 | # 5 | # For simplicity, this file contains only settings considered important or 6 | # commonly used. You can find more settings consulting the documentation: 7 | # 8 | # http://doc.scrapy.org/en/latest/topics/settings.html 9 | # http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html 10 | # http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html 11 | 12 | BOT_NAME = 'Imdbspider' 13 | 14 | SPIDER_MODULES = ['Imdbspider.spiders'] 15 | NEWSPIDER_MODULE = 'Imdbspider.spiders' 16 | 17 | 18 | # Crawl responsibly by identifying yourself (and your website) on the user-agent 19 | #USER_AGENT = 'Imdbspider (+http://www.yourdomain.com)' 20 | 21 | # Obey robots.txt rules 22 | ROBOTSTXT_OBEY = True 23 | 24 | # Configure maximum concurrent requests performed by Scrapy (default: 16) 25 | #CONCURRENT_REQUESTS = 32 26 | 27 | # Configure a delay for requests for the same website (default: 0) 28 | # See http://scrapy.readthedocs.org/en/latest/topics/settings.html#download-delay 29 | # See also autothrottle settings and docs 30 | #DOWNLOAD_DELAY = 3 31 | # The download delay setting will honor only one of: 32 | #CONCURRENT_REQUESTS_PER_DOMAIN = 16 33 | #CONCURRENT_REQUESTS_PER_IP = 16 34 | 35 | # Disable cookies (enabled by default) 36 | #COOKIES_ENABLED = False 37 | 38 | # Disable Telnet Console (enabled by default) 39 | #TELNETCONSOLE_ENABLED = False 40 | 41 | # Override the default request headers: 42 | #DEFAULT_REQUEST_HEADERS = { 43 | # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 44 | # 'Accept-Language': 'en', 45 | #} 46 | 47 | # Enable or disable spider middlewares 48 | # See http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html 49 | #SPIDER_MIDDLEWARES = { 50 | # 'Imdbspider.middlewares.ImdbspiderSpiderMiddleware': 543, 51 | #} 52 | 53 | # Enable or disable downloader middlewares 54 | # See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html 55 | #DOWNLOADER_MIDDLEWARES = { 56 | # 'Imdbspider.middlewares.MyCustomDownloaderMiddleware': 543, 57 | #} 58 | 59 | # Enable or disable extensions 60 | # See http://scrapy.readthedocs.org/en/latest/topics/extensions.html 61 | #EXTENSIONS = { 62 | # 'scrapy.extensions.telnet.TelnetConsole': None, 63 | #} 64 | 65 | # Configure item pipelines 66 | # See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html 67 | ITEM_PIPELINES = { 68 | 'Imdbspider.pipelines.ImdbspiderPipeline': 300, 69 | } 70 | 71 | # Enable and configure the AutoThrottle extension (disabled by default) 72 | # See http://doc.scrapy.org/en/latest/topics/autothrottle.html 73 | #AUTOTHROTTLE_ENABLED = True 74 | # The initial download delay 75 | #AUTOTHROTTLE_START_DELAY = 5 76 | # The maximum download delay to be set in case of high latencies 77 | #AUTOTHROTTLE_MAX_DELAY = 60 78 | # The average number of requests Scrapy should be sending in parallel to 79 | # each remote server 80 | #AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0 81 | # Enable showing throttling stats for every response received: 82 | #AUTOTHROTTLE_DEBUG = False 83 | 84 | # Enable and configure HTTP caching (disabled by default) 85 | # See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings 86 | #HTTPCACHE_ENABLED = True 87 | #HTTPCACHE_EXPIRATION_SECS = 0 88 | #HTTPCACHE_DIR = 'httpcache' 89 | #HTTPCACHE_IGNORE_HTTP_CODES = [] 90 | #HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage' 91 | -------------------------------------------------------------------------------- /ImdbSpider/Imdbspider/spiders/__init__.py: -------------------------------------------------------------------------------- 1 | # This package will contain the spiders of your Scrapy project 2 | # 3 | # Please refer to the documentation for information on how to create and manage 4 | # your spiders. 5 | -------------------------------------------------------------------------------- /ImdbSpider/Imdbspider/spiders/imdb_spider.py: -------------------------------------------------------------------------------- 1 | import scrapy 2 | import time 3 | import random 4 | import logging 5 | 6 | class Imdbspider(scrapy.Spider): 7 | name = 'imdb_spider' 8 | 9 | start_urls = [ 10 | 'http://www.imdb.com/search/title?release_date=1980-01-01,2018-01-01&title_type=feature&user_rating=5.0,10' 11 | ] 12 | imdbhome = 'http://www.imdb.com' 13 | 14 | # obtain the movie hrefs and next page's href 15 | def parse(self,response): 16 | logging.basicConfig() 17 | logger = logging.getLogger('imdb') 18 | logger.setLevel(logging.INFO) 19 | i = 1 20 | movie_hrefs = [self.imdbhome + ele for ele in response.selector.xpath('//h3[@class="lister-item-header"]/a/@href').extract()] 21 | next_page = response.selector.xpath('//a[@class="lister-page-next next-page"]/@href').extract() 22 | for movie in movie_hrefs: 23 | yield scrapy.Request(movie,callback=self.parse_movie) 24 | # sleep random 2 to 4 seconds 25 | time.sleep (random.randint(1,3)) 26 | if next_page: 27 | logger.info('this is the %f pages' %i) 28 | i = i+1 29 | logger.info('%s' %next_page) 30 | yield scrapy.Request('http://www.imdb.com/search/title' + next_page[0],callback=self.parse) 31 | 32 | # obtain the needed data from a movie page and sent to ElasticSearch 33 | def parse_movie(self, response): 34 | title = response.selector.xpath('//h1[@itemprop="name"]/text()').extract_first() 35 | datePublished = response.selector.xpath('//meta[@itemprop="datePublished"]/@content').extract_first() 36 | summary = response.selector.xpath('//div[@class="summary_text"]/text()').extract_first() 37 | genres = response.xpath("//span[@itemprop='genre']/text()").extract() 38 | creators = response.xpath("//span[@itemprop='creator']//span[@itemprop='name']/text()").extract() 39 | casts = response.xpath("//td[@itemprop='actor']//span[@itemprop='name']/text()").extract() 40 | time = response.xpath("//time[@datetime]/text()").extract()[-1] 41 | plot_keywords = response.xpath("//div[@itemprop='keywords']//span[@itemprop='keywords']/text()").extract() 42 | rating = response.xpath("//div[@class='ratingValue']//span[@itemprop='ratingValue']/text()").extract_first() 43 | country = response.xpath("//div[h4[text() = 'Country:']]/a/text()").extract() 44 | language = response.xpath("//div[h4[text() = 'Language:']]/a/text()").extract() 45 | poster = response.xpath('//div[@class="poster"]//img/@src').extract_first() 46 | yield {'title': title, 47 | 'datePublished': datePublished, 48 | 'summary': self.normalize_string(summary), 49 | 'genres': genres, 50 | 'creators': creators, 51 | 'casts': casts, 52 | 'time': self.normalize_integer(time), 53 | 'plot_keywords': plot_keywords, 54 | 'rating': self.normalized_float(rating), 55 | 'country': country, 56 | 'languages': language, 57 | 'poster': poster} 58 | 59 | 60 | 61 | 62 | def normalized_float(self,num): 63 | return float(num) 64 | 65 | def normalize_string(self,s): 66 | return s.strip() 67 | 68 | 69 | def normalize_integer(self,num): 70 | return int(filter(lambda x: x.isdigit(), num)) 71 | -------------------------------------------------------------------------------- /ImdbSpider/scrapy.cfg: -------------------------------------------------------------------------------- 1 | # Automatically created by: scrapy startproject 2 | # 3 | # For more information about the [deploy] section see: 4 | # https://scrapyd.readthedocs.org/en/latest/deploy.html 5 | 6 | [settings] 7 | default = Imdbspider.settings 8 | 9 | [deploy] 10 | #url = http://localhost:6800/ 11 | project = Imdbspider 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ElasticSearch - a movie search website 2 | 3 | ## Project Outline 4 | First, I crawled more than 200 pages movie data from IMDB webside using Python Scrapy and defined fields with mapping configuration. 5 | 6 | After that, I established backend search engine that realized ngram partial matching, auto-suggest, structured query and aggregation in ElasticSearch. 7 | 8 | Finally, A website was developed and designed with Flask and Node.js to display the movie information. 9 | 10 | ## How to Run 11 | starting to crawl data from IMDB website 12 | ``` 13 | scrapy crawl imdb_spider 14 | ``` 15 | 16 | Setting up Flask application 17 | ``` 18 | export FLASK_APP=webmovie.py 19 | ``` 20 | ``` 21 | flask run 22 | ``` 23 | Now, you can open your movie website in the browser 24 | ``` 25 | localhost:5000 26 | ``` 27 | 28 | ## Final Webpage 29 | ### Auto completion suggester 30 | ![autocomple](https://cloud.githubusercontent.com/assets/25273483/23535259/5015a626-ff8b-11e6-9ea0-367290cb8449.jpeg) 31 | ### Aggregation 32 | ![agg](https://cloud.githubusercontent.com/assets/25273483/23535260/50dd2ff2-ff8b-11e6-803c-91eba6832198.jpeg) 33 | ### Sort 34 | ![sort](https://cloud.githubusercontent.com/assets/25273483/23535261/5208e682-ff8b-11e6-97ce-3688f2966837.jpeg) 35 | ### Detailed webpage 36 | ![detailed](https://cloud.githubusercontent.com/assets/25273483/23535263/530d3bd2-ff8b-11e6-94df-718997470979.jpeg) 37 | ### More than 300 pages 38 | ![300](https://cloud.githubusercontent.com/assets/25273483/23536331/274d3c2a-ff92-11e6-943a-48d17fb103ee.jpeg) 39 | 40 | --------------------------------------------------------------------------------