diff --git a/CHANGELOG.md b/CHANGELOG.md index 91a7322fdb..1d825dd3cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ -### HEAD +### 6.5.0: August 23rd, 2013 +* Reference new site, [http://roots.io/](http://roots.io/) +* Remove bundled docs, reference [http://roots.io/docs/](http://roots.io/docs/) +* Use Bootstrap variables for media queries * Update to Bootstrap 3.0.0 * Update to jQuery 1.10.2 * Change media directory from `/assets/` to `/media/` @@ -15,9 +18,9 @@ ### 6.4.0: May 1st, 2013 * Fix Theme Activation page issues * Fix issues with root relative URLs and rewrites on non-standard setups -* Make sure rewrites are added to .htaccess immediately after activation -* Move HTML5 Boilerplate's .htaccess to a [plugin](https://github.com/retlehs/wp-h5bp-htaccess) -* Rename page-custom.php to template-custom.php +* Make sure rewrites are added to `.htaccess` immediately after activation +* Move HTML5 Boilerplate's `.htaccess` to a [plugin](https://github.com/roots/wp-h5bp-htaccess) +* Rename `page-custom.php` to `template-custom.php` * Don't warn about unwritable htaccess if that option is disabled * Add missing collapse class for top navbar * Add comment template diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e9bc540930..84bf86cfbb 100755 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,74 +1,121 @@ # Contributing to Roots Theme -## Reporting issues +Please take a moment to review this document in order to make the contribution +process easy and effective for everyone involved. -**We only accept issues that are bug reports or feature requests.** Bugs must - be isolated and reproducible problems that we can fix within Roots. Please - read the following guidelines before [opening any issues](https://github.com/retlehs/roots/issues): +Following these guidelines helps to communicate that you respect the time of +the developers managing and developing this open source project. In return, +they should reciprocate that respect in addressing your issue or assessing +patches and features. -1. **Use the GitHub issue search.** Check to see if the issue has already been -reported. If it has been, please comment on the existing issue. An existing -issue may also already have a fix available. -2. **Isolate the problem to Roots.** Make sure that the code in the Roots +## Using the issue tracker + +The issue tracker is the preferred channel for [bug reports](#bugs), +[features requests](#features) and [submitting pull +requests](#pull-requests), but please respect the following restrictions: + +* Please **do not** use the issue tracker for personal support requests (use the + [Roots Discourse](http://discourse.roots.io/)). + +* Please **do not** derail or troll issues. Keep the discussion on topic and + respect the opinions of others. + + + +## Bug reports + +A bug is a _demonstrable problem_ that is caused by the code in the repository. +Good bug reports are extremely helpful - thank you! + +Guidelines for bug reports: + +1. **Use the GitHub issue search** — check if the issue has already been + reported. + +2. **Check if the issue has been fixed** — try to reproduce it using the + latest `master` or development branch in the repository. + +3. **Isolate the problem to Roots** — make sure that the code in the Roots repository is _definitely_ responsible for the issue. Switch to a core WordPress -theme (such as Twenty Twelve) to confirm problems before reporting an issue. +theme (such as Twenty Thirteen) to confirm problems before reporting an issue. Make sure you have reproduced the bug with all plugins disabled. Any issues related to HTML5 Boilerplate or Bootstrap should be reported to their respected repositories and follow their contributing guidelines. -3. **Do not use GitHub issues for questions or support.** If you have a question -or support request, please post on the [Google Group](http://groups.google.com/group/roots-theme). +A good bug report shouldn't leave others needing to chase you up for more +information. Please try to be as detailed as possible in your report. + -Please try to be as detailed as possible in your report. What steps will -reproduce the issue? What would you expect to be the outcome? All these details -will help people to assess and fix any potential bugs. A good bug report -shouldn't leave people needing to chase you up to get further information. + +## Feature requests -**[File a bug report](https://github.com/retlehs/roots/issues)** +Feature requests are welcome. But take a moment to find out whether your idea +fits with the scope and aims of Roots. It's up to *you* to make a strong +case to convince the Roots developers of the merits of this feature. Please +provide as much detail and context as possible. + ## Pull requests -Good pull requests — patches, improvements, new features — are a fantastic +Good pull requests - patches, improvements, new features - are a fantastic help. They should remain focused in scope and avoid containing unrelated commits. -If your contribution involves a significant amount of work or substantial -changes to any part of the project, please open an issue to discuss it first. +**Please ask first** before embarking on any significant pull request (e.g. +implementing features, refactoring code), otherwise you risk spending a lot of +time working on something that the developers might not want to merge into Roots. + +Please adhere to the coding conventions used throughout the project (indentation, +comments, etc.). + +Adhering to the following this process is the best way to get your work +included in Roots: + +1. [Fork](http://help.github.com/fork-a-repo/) Roots, clone your fork, + and configure the remotes: -Please follow this process; it's the best way to get your work included in the -project: + ```bash + # Clone your fork of the repo into the current directory + git clone https://github.com// + # Navigate to the newly cloned directory + cd + # Assign the original repo to a remote called "upstream" + git remote add upstream https://github.com// + ``` -1. [Fork](https://help.github.com/articles/fork-a-repo) the project. +2. If you cloned a while ago, get the latest changes from upstream: -2. Clone your fork (`git clone - https://github.com//roots.git`). + ```bash + git checkout + git pull upstream + ``` -3. Add an `upstream` remote (`git remote add upstream - https://github.com/retlehs/roots.git`). +3. Create a new topic branch (off the main project development branch) to + contain your feature, change, or fix: -4. Get the latest changes from upstream (`git pull upstream - master`). + ```bash + git checkout -b + ``` -5. Create a new topic branch to contain your feature, change, or fix (`git - checkout -b `). +4. Commit your changes in logical chunks. Please adhere to these [git commit + message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) + or your code is unlikely be merged into the main project. Use Git's + [interactive rebase](https://help.github.com/articles/interactive-rebase) + feature to tidy up your commits before making them public. -6. Make sure that your changes adhere to the current coding conventions used - throughout the project - indentation, accurate comments, etc. Please update - any documentation that is relevant to the change you are making. +5. Locally merge (or rebase) the upstream development branch into your topic branch: -7. Commit your changes in logical chunks; use git's [interactive - rebase](https://help.github.com/articles/interactive-rebase) feature to tidy - up your commits before making them public. Please adhere to these [git commit - message - guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) - or your pull request is unlikely be merged. + ```bash + git pull [--rebase] upstream + ``` -8. Locally merge (or rebase) the upstream branch into your topic branch. +6. Push your topic branch up to your fork: -9. Push your topic branch up to your fork (`git push origin - `). + ```bash + git push origin + ``` -10. [Open a Pull Request](https://help.github.com/articles/using-pull-requests) with a - clear title and description. +10. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) + with a clear title and description. diff --git a/Gruntfile.js b/Gruntfile.js index 064a69796f..c2ce924928 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -48,14 +48,6 @@ module.exports = function(grunt) { } } }, - imageoptim: { - files: [ - 'assets/img' - ], - options: { - quitAfter: true - } - }, watch: { less: { files: [ @@ -86,14 +78,12 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-recess'); - grunt.loadNpmTasks('grunt-imageoptim'); // Register tasks grunt.registerTask('default', [ 'clean', 'recess', 'uglify', - 'imageoptim', 'version' ]); grunt.registerTask('dev', [ diff --git a/README.md b/README.md index 935589a5d5..789893c67b 100644 --- a/README.md +++ b/README.md @@ -1,75 +1,82 @@ -# [Roots Theme](http://www.rootstheme.com/) +# [Roots Theme](http://roots.io/) -Roots is a starting WordPress theme made for developers that’s based on -[HTML5 Boilerplate](http://html5boilerplate.com/) and [Bootstrap from Twitter](http://twitter.github.com/bootstrap/). +Roots is a WordPress starter theme based on [HTML5 Boilerplate](http://html5boilerplate.com/) & [Bootstrap](http://getbootstrap.com/) that will help you make better themes. -* Source: [https://github.com/retlehs/roots](https://github.com/retlehs/roots) -* Home Page: [http://www.rootstheme.com/](http://www.rootstheme.com/) +* Source: [https://github.com/roots/roots](https://github.com/roots/roots) +* Home Page: [http://roots.io/](http://roots.io/) * Twitter: [@retlehs](https://twitter.com/retlehs) -* Newsletter: [Subscribe](http://www.rootstheme.com/subscribe/) -* Google Group: [http://groups.google.com/group/roots-theme](http://groups.google.com/group/roots-theme) +* Newsletter: [Subscribe](http://roots.io/subscribe/) +* Forum: [http://discourse.roots.io/](http://discourse.roots.io/) ## Installation -* Clone the git repo - `git clone git://github.com/retlehs/roots.git` - or [download it](https://github.com/retlehs/roots/zipball/master) -* Reference the [theme activation](doc/activation.md) documentation to understand -everything that happens once you activate Roots +Clone the git repo - `git clone git://github.com/roots/roots.git` - or [download it](https://github.com/roots/roots/zipball/master) and then rename the directory to the name of your theme or website. [Install Grunt](http://gruntjs.com/getting-started), and then install the dependencies for Roots contained in `package.json`: + +``` +npm install +``` + +If you're using Nginx you'll need to add the Roots rewrites to your server config before the PHP block (`location ~ \.php$`) to use the clean URLs feature: + +```nginx +location ~ ^/assets/(img|js|css)/(.*)$ { + try_files $uri $uri/ /wp-content/themes/roots/assets/$1/$2; +} +location ~ ^/plugins/(.*)$ { + try_files $uri $uri/ /wp-content/plugins/$1; +} +``` + +Reference the [theme activation](http://roots.io/roots-101/#theme-activation) documentation to understand everything that happens once you activate Roots. + +## Theme Development + +After you've installed Grunt and ran `npm install` from the theme root, use `grunt watch` to watch for updates to your LESS and JS files and Grunt will automatically re-build as you write your code. ## Configuration -Edit `lib/config.php` to enable or disable support for various theme functions -and to define constants that are used throughout the theme. +Edit `lib/config.php` to enable or disable support for various theme functions and to define constants that are used throughout the theme. Edit `lib/init.php` to setup custom navigation menus and post thumbnail sizes. ## Documentation -Take a look at the [documentation table of contents](doc/TOC.md). +### [Roots Docs](http://roots.io/docs/) + +* [Roots 101](http://roots.io/roots-101/) — A guide to installing Roots, the files and theme organization +* [Theme Wrapper](http://roots.io/an-introduction-to-the-roots-theme-wrapper/) — Learn all about the theme wrapper +* [Build Script](http://roots.io/using-grunt-for-wordpress-theme-development/) — A look into the Roots build script powered by Grunt +* [Roots Sidebar](http://roots.io/the-roots-sidebar/) — Understand how to display or hide the sidebar in Roots ## Features -* HTML5 Boilerplate’s markup -* Bootstrap from Twitter -* [Theme wrapper](doc/wrapper.md) +* Organized file and template structure +* HTML5 Boilerplate's markup along with ARIA roles and microformat +* Bootstrap +* [Grunt build script](http://roots.io/using-grunt-for-wordpress-theme-development/) +* [Theme activation](http://roots.io/getting-started/#theme-activation) +* [Theme wrapper](http://roots.io/an-introduction-to-the-roots-theme-wrapper/) * Root relative URLs * Clean URLs (no more `/wp-content/`) -* All static theme assets are rewritten to the website root (`/assets/css/`, -`/assets/img/`, and `/assets/js/`) +* All static theme assets are rewritten to the website root (`/assets/*`) * Cleaner HTML output of navigation menus * Cleaner output of `wp_head` and enqueued scripts/styles +* Nice search (`/search/query/`) +* Image captions use `
` and `
` +* Example vCard widget * Posts use the [hNews](http://microformats.org/wiki/hnews) microformat -* [Multilingual ready](http://www.rootstheme.com/wpml/) (Brazilian Portuguese, -Bulgarian, Catalan, Danish, Dutch, English, Finnish, French, German, Hungarian, -Indonesian, Italian, Korean, Macedonian, Norwegian, Polish, Russian, Simplified -Chinese, Spanish, Swedish, Traditional Chinese, Turkish, Vietnamese, Serbian) - -### Build Script - -The [grunt branch](https://github.com/retlehs/roots/tree/grunt) contains a build -script powered by grunt. More information can be found at [Integrating grunt.js with Roots](http://benword.com/integrating-grunt-js-with-roots/). - -* Easily compile LESS files -* Minification and concatenation without plugins -* Fewer requests made to the server (one CSS file, one main JS file besides -Modernizr and jQuery) -* Ensures valid JavaScript -* Others working on your project are able to use the same build script and have -a unified development process -* Code is optimized for production use +* [Multilingual ready](http://roots.io/wpml/) (Brazilian Portuguese, Bulgarian, Catalan, Danish, Dutch, English, Finnish, French, German, Hungarian, Indonesian, Italian, Korean, Macedonian, Norwegian, Polish, Russian, Simplified Chinese, Spanish, Swedish, Traditional Chinese, Turkish, Vietnamese, Serbian) ## Contributing -Everyone is welcome to help [contribute](CONTRIBUTING.md) and improve this project. -There are several ways you can contribute: +Everyone is welcome to help [contribute](CONTRIBUTING.md) and improve this project. There are several ways you can contribute: * Reporting issues (please read [issue guidelines](https://github.com/necolas/issue-guidelines)) * Suggesting new features -* Writing or editing [docs](doc/TOC.md) * Writing or refactoring code -* Fixing [issues](https://github.com/retlehs/roots/issues) -* Replying to questions on the [Google Group](http://groups.google.com/group/roots-theme) +* Fixing [issues](https://github.com/roots/roots/issues) +* Replying to questions on the [forum](http://discourse.roots.io/) ## Support -Use the [Google Group](http://groups.google.com/group/roots-theme) to ask -questions and get support. +Use the [Roots Discourse](http://discourse.roots.io/) to ask questions and get support. diff --git a/assets/js/scripts.min.js b/assets/js/scripts.min.js index ab7b8a3d2b..fec9e805ed 100644 --- a/assets/js/scripts.min.js +++ b/assets/js/scripts.min.js @@ -1 +1 @@ -+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]}}t.fn.emulateTransitionEnd=function(e){var i=!1,o=this;t(this).one(t.support.transition.end,function(){i=!0});var n=function(){i||t(o).trigger(t.support.transition.end)};return setTimeout(n,e),this},t(function(){t.support.transition=e()})}(window.jQuery),+function(t){"use strict";var e='[data-dismiss="alert"]',i=function(i){t(i).on("click",e,this.close)};i.prototype.close=function(e){function i(){s.trigger("closed.bs.alert").remove()}var o=t(this),n=o.attr("data-target");n||(n=o.attr("href"),n=n&&n.replace(/.*(?=#[^\s]*$)/,""));var s=t(n);e&&e.preventDefault(),s.length||(s=o.hasClass("alert")?o:o.parent()),s.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one(t.support.transition.end,i).emulateTransitionEnd(150):i())};var o=t.fn.alert;t.fn.alert=function(e){return this.each(function(){var o=t(this),n=o.data("bs.alert");n||o.data("bs.alert",n=new i(this)),"string"==typeof e&&n[e].call(o)})},t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=o,this},t(document).on("click.bs.alert.data-api",e,i.prototype.close)}(window.jQuery),+function(t){"use strict";var e=function(i,o){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,o)};e.DEFAULTS={loadingText:"loading..."},e.prototype.setState=function(t){var e="disabled",i=this.$element,o=i.is("input")?"val":"html",n=i.data();t+="Text",n.resetText||i.data("resetText",i[o]()),i[o](n[t]||this.options[t]),setTimeout(function(){"loadingText"==t?i.addClass(e).attr(e,e):i.removeClass(e).removeAttr(e)},0)},e.prototype.toggle=function(){var t=this.$element.closest('[data-toggle="buttons"]');if(t.length){var e=this.$element.find("input").prop("checked",!this.$element.hasClass("active")).trigger("change");"radio"===e.prop("type")&&t.find(".active").removeClass("active")}this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=function(i){return this.each(function(){var o=t(this),n=o.data("bs.button"),s="object"==typeof i&&i;n||o.data("bs.button",n=new e(this,s)),"toggle"==i?n.toggle():i&&n.setState(i)})},t.fn.button.Constructor=e,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api","[data-toggle^=button]",function(e){var i=t(e.target);i.hasClass("btn")||(i=i.closest(".btn")),i.button("toggle"),e.preventDefault()})}(window.jQuery),+function(t){"use strict";var e=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",t.proxy(this.pause,this)).on("mouseleave",t.proxy(this.cycle,this))};e.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},e.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},e.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},e.prototype.to=function(e){var i=this,o=this.getActiveIndex();return e>this.$items.length-1||0>e?void 0:this.sliding?this.$element.one("slid",function(){i.to(e)}):o==e?this.pause().cycle():this.slide(e>o?"next":"prev",t(this.$items[e]))},e.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition.end&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},e.prototype.next=function(){return this.sliding?void 0:this.slide("next")},e.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},e.prototype.slide=function(e,i){var o=this.$element.find(".item.active"),n=i||o[e](),s=this.interval,a="next"==e?"left":"right",r="next"==e?"first":"last",l=this;if(!n.length){if(!this.options.wrap)return;n=this.$element.find(".item")[r]()}this.sliding=!0,s&&this.pause();var h=t.Event("slide.bs.carousel",{relatedTarget:n[0],direction:a});if(!n.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var e=t(l.$indicators.children()[l.getActiveIndex()]);e&&e.addClass("active")})),t.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(h),h.isDefaultPrevented())return;n.addClass(e),n[0].offsetWidth,o.addClass(a),n.addClass(a),o.one(t.support.transition.end,function(){n.removeClass([e,a].join(" ")).addClass("active"),o.removeClass(["active",a].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger("slid")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(h),h.isDefaultPrevented())return;o.removeClass("active"),n.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var i=t.fn.carousel;t.fn.carousel=function(i){return this.each(function(){var o=t(this),n=o.data("bs.carousel"),s=t.extend({},e.DEFAULTS,o.data(),"object"==typeof i&&i),a="string"==typeof i?i:s.slide;n||o.data("bs.carousel",n=new e(this,s)),"number"==typeof i?n.to(i):a?n[a]():s.interval&&n.pause().cycle()})},t.fn.carousel.Constructor=e,t.fn.carousel.noConflict=function(){return t.fn.carousel=i,this},t(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(e){var i,o=t(this),n=t(o.attr("data-target")||(i=o.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"")),s=t.extend({},n.data(),o.data()),a=o.attr("data-slide-to");a&&(s.interval=!1),n.carousel(s),(a=o.attr("data-slide-to"))&&n.data("bs.carousel").to(a),e.preventDefault()}),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var e=t(this);e.carousel(e.data())})})}(window.jQuery),+function(t){"use strict";var e=function(i,o){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,o),this.transitioning=null,this.options.parent&&(this.$parent=t(this.options.parent)),this.options.toggle&&this.toggle()};e.DEFAULTS={toggle:!0},e.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},e.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e=t.Event("show.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.$parent&&this.$parent.find("> .panel > .in");if(i&&i.length){var o=i.data("bs.collapse");if(o&&o.transitioning)return;i.collapse("hide"),o||i.data("bs.collapse",null)}var n=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[n](0),this.transitioning=1;var s=function(){this.$element.removeClass("collapsing").addClass("in")[n]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return s.call(this);var a=t.camelCase(["scroll",n].join("-"));this.$element.one(t.support.transition.end,t.proxy(s,this)).emulateTransitionEnd(350)[n](this.$element[0][a])}}},e.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return t.support.transition?(this.$element[i](0).one(t.support.transition.end,t.proxy(o,this)).emulateTransitionEnd(350),void 0):o.call(this)}}},e.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var i=t.fn.collapse;t.fn.collapse=function(i){return this.each(function(){var o=t(this),n=o.data("bs.collapse"),s=t.extend({},e.DEFAULTS,o.data(),"object"==typeof i&&i);n||o.data("bs.collapse",n=new e(this,s)),"string"==typeof i&&n[i]()})},t.fn.collapse.Constructor=e,t.fn.collapse.noConflict=function(){return t.fn.collapse=i,this},t(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(e){var i,o=t(this),n=o.attr("data-target")||e.preventDefault()||(i=o.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,""),s=t(n),a=s.data("bs.collapse"),r=a?"toggle":o.data(),l=o.attr("data-parent"),h=l&&t(l);a&&a.transitioning||(h&&h.find('[data-toggle=collapse][data-parent="'+l+'"]').not(o).addClass("collapsed"),o[s.hasClass("in")?"addClass":"removeClass"]("collapsed")),s.collapse(r)})}(window.jQuery),+function(t){"use strict";function e(){t(o).remove(),t(n).each(function(e){var o=i(t(this));o.hasClass("open")&&(o.trigger(e=t.Event("hide.bs.dropdown")),e.isDefaultPrevented()||o.removeClass("open").trigger("hidden.bs.dropdown"))})}function i(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}var o=".dropdown-backdrop",n="[data-toggle=dropdown]",s=function(e){t(e).on("click.bs.dropdown",this.toggle)};s.prototype.toggle=function(o){var n=t(this);if(!n.is(".disabled, :disabled")){var s=i(n),a=s.hasClass("open");if(e(),!a){if("ontouchstart"in document.documentElement&&!s.closest(".navbar-nav").length&&t('