<script>
  ;(function(){
    var currentOrigin = location.origin || 'https://weex-project.io',
        currentPathname = location.pathname,
        currentLang = navigator.language || navigator.browserLanguage || 'en',
        selectedLang = '';

    if (currentOrigin.match(/weex(\-project)?\.io/i)) {
      if (window.localStorage) {
        selectedLang = window.localStorage.getItem('lang')
        currentLang = selectedLang ? selectedLang : currentLang
      }

      if (/zh|cn/i.test(currentLang)) { // Chinese
        if (currentPathname.indexOf('/cn/') != 0) {
          location.href = currentOrigin + '/cn/'
        }
      } else if (/en/i.test(currentLang)) { // English
        if (!/^\/$|^\/index/.test(currentPathname)) {
          location.href = currentOrigin
        }
      } else { // Other
        if (!/^\/$|^\/index/.test(currentPathname)) {
          location.href = currentOrigin
        }
      }
    }
  })();
</script>
<div class="scene header" style="background: #00BDFF;">
  <div class="scene-container">
    <div class="galaxy left">
      <canvas width="560" height="560" id="left-canvas"></canvas>
    </div>
    <div class="galaxy right">
      <canvas width="500" height="500" id="right-canvas"></canvas>
    </div>
    <%- partial('_partial/slider') %>
  </div>
</div>

<%- partial('_partial/footer') %>

<%- js('js/swiper.min') %>
<%- js('js/velocity.js') %>
<script>
var swiper = new Swiper('.swiper-container', {
  nextButton: '.swiper-button-next',
  prevButton: '.swiper-button-prev',
  slidesPerView: 1,
  spaceBetween: 30,
  loop: false,
  autoplay: false,
  autoplayDisableOnInteraction: false
});
</script>
