|
@@ -0,0 +1,527 @@
|
|
|
+/*
|
|
|
+ * Diaspora
|
|
|
+ * @author LoeiFy
|
|
|
+ * @url http://lorem.in
|
|
|
+ */
|
|
|
+var Home = location.href,
|
|
|
+ Pages = 4,
|
|
|
+ xhr,
|
|
|
+ xhrUrl = '';
|
|
|
+
|
|
|
+var Diaspora = {
|
|
|
+
|
|
|
+ L: function(url, f, err) {
|
|
|
+ if (url == xhrUrl) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ xhrUrl = url;
|
|
|
+
|
|
|
+ if (xhr) {
|
|
|
+ xhr.abort()
|
|
|
+ }
|
|
|
+
|
|
|
+ xhr = $.ajax({
|
|
|
+ type: 'GET',
|
|
|
+ url: url,
|
|
|
+ timeout: 10000,
|
|
|
+ success: function(data) {
|
|
|
+ f(data)
|
|
|
+ xhrUrl = '';
|
|
|
+ },
|
|
|
+ error: function(a, b, c) {
|
|
|
+ if (b == 'abort') {
|
|
|
+ err && err()
|
|
|
+ } else {
|
|
|
+ window.location.href = url
|
|
|
+ }
|
|
|
+ xhrUrl = '';
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ P: function() {
|
|
|
+ return !!('ontouchstart' in window);
|
|
|
+ },
|
|
|
+
|
|
|
+ PS: function() {
|
|
|
+ if (!(window.history && history.pushState)) return;
|
|
|
+
|
|
|
+ history.replaceState({u: Home, t: document.title}, document.title, Home)
|
|
|
+
|
|
|
+ window.addEventListener('popstate', function(e) {
|
|
|
+ var state = e.state;
|
|
|
+
|
|
|
+ if (!state) return;
|
|
|
+
|
|
|
+ document.title = state.t;
|
|
|
+
|
|
|
+ if (state.u == Home) {
|
|
|
+ $('#preview').css('position', 'fixed')
|
|
|
+ setTimeout(function() {
|
|
|
+ $('#preview').removeClass('show').addClass('trans')
|
|
|
+ $('#container').show()
|
|
|
+ window.scrollTo(0, parseInt($('#container').data('scroll')))
|
|
|
+ setTimeout(function() {
|
|
|
+ $('#preview').html('')
|
|
|
+ $(window).trigger('resize')
|
|
|
+ }, 300)
|
|
|
+ }, 0)
|
|
|
+ } else {
|
|
|
+ Diaspora.loading()
|
|
|
+
|
|
|
+ Diaspora.L(state.u, function(data) {
|
|
|
+
|
|
|
+ document.title = state.t;
|
|
|
+
|
|
|
+ $('#preview').html($(data).filter('#single'))
|
|
|
+
|
|
|
+ Diaspora.preview()
|
|
|
+
|
|
|
+ setTimeout(function() { Diaspora.player() }, 0)
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ HS: function(tag, flag) {
|
|
|
+ var id = tag.data('id') || 0,
|
|
|
+ url = tag.attr('href'),
|
|
|
+ title = tag.attr('title') || tag.text();
|
|
|
+
|
|
|
+ if (!$('#preview').length || !(window.history && history.pushState)) location.href = url;
|
|
|
+
|
|
|
+ Diaspora.loading()
|
|
|
+
|
|
|
+ var state = {d: id, t: title, u: url};
|
|
|
+
|
|
|
+ Diaspora.L(url, function(data) {
|
|
|
+
|
|
|
+ if (!$(data).filter('#single').length) {
|
|
|
+ location.href = url;
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (flag) {
|
|
|
+
|
|
|
+ case 'push':
|
|
|
+ history.pushState(state, title, url)
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'replace':
|
|
|
+ history.replaceState(state, title, url)
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ document.title = title;
|
|
|
+
|
|
|
+ $('#preview').html($(data).filter('#single'))
|
|
|
+
|
|
|
+ switch (flag) {
|
|
|
+
|
|
|
+ case 'push':
|
|
|
+ Diaspora.preview()
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'replace':
|
|
|
+ window.scrollTo(0, 0)
|
|
|
+ Diaspora.loaded()
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ setTimeout(function() {
|
|
|
+ Diaspora.player()
|
|
|
+
|
|
|
+ if (flag == 'replace') {
|
|
|
+ $('#top').show()
|
|
|
+ }
|
|
|
+ }, 0)
|
|
|
+
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ preview: function() {
|
|
|
+ setTimeout(function() {
|
|
|
+ $('#preview').addClass('show')
|
|
|
+ $('#container').data('scroll', window.scrollY)
|
|
|
+ setTimeout(function() {
|
|
|
+ $('#container').hide()
|
|
|
+ setTimeout(function() {
|
|
|
+ $('#preview').css({
|
|
|
+ 'position': 'static',
|
|
|
+ 'overflow-y': 'auto'
|
|
|
+ }).removeClass('trans')
|
|
|
+ $('#top').show()
|
|
|
+
|
|
|
+ Diaspora.loaded()
|
|
|
+ }, 500)
|
|
|
+ }, 300)
|
|
|
+ }, 0)
|
|
|
+ },
|
|
|
+
|
|
|
+ player: function() {
|
|
|
+ var p = $('#audio');
|
|
|
+
|
|
|
+ if (!p.length) {
|
|
|
+ $('.icon-play').css({
|
|
|
+ 'color': '#dedede',
|
|
|
+ 'cursor': 'not-allowed'
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if (p.eq(0).data("autoplay") == true) {
|
|
|
+ p[0].play();
|
|
|
+ }
|
|
|
+
|
|
|
+ p.on({
|
|
|
+ 'timeupdate': function() {
|
|
|
+ var progress = p[0].currentTime / p[0].duration * 100;
|
|
|
+ $('.bar').css('width', progress + '%');
|
|
|
+ if (progress / 5 <= 1) {
|
|
|
+ p[0].volume = progress / 5;
|
|
|
+ }else {
|
|
|
+ p[0].volume = 1;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ 'ended': function() {
|
|
|
+ $('.icon-pause').removeClass('icon-pause').addClass('icon-play')
|
|
|
+ },
|
|
|
+ 'playing': function() {
|
|
|
+ $('.icon-play').removeClass('icon-play').addClass('icon-pause')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ loading: function() {
|
|
|
+ var w = window.innerWidth;
|
|
|
+ var css = '<style class="loaderstyle" id="loaderstyle'+ w +'">'+
|
|
|
+ '@-moz-keyframes loader'+ w +'{100%{background-position:'+ w +'px 0}}'+
|
|
|
+ '@-webkit-keyframes loader'+ w +'{100%{background-position:'+ w +'px 0}}'+
|
|
|
+ '.loader'+ w +'{-webkit-animation:loader'+ w +' 3s linear infinite;-moz-animation:loader'+ w +' 3s linear infinite;}'+
|
|
|
+ '</style>';
|
|
|
+ $('.loaderstyle').remove()
|
|
|
+ $('head').append(css)
|
|
|
+
|
|
|
+ $('#loader').removeClass().addClass('loader'+ w).show()
|
|
|
+ },
|
|
|
+
|
|
|
+ loaded: function() {
|
|
|
+ $('#loader').removeClass().hide()
|
|
|
+ },
|
|
|
+
|
|
|
+ F: function(id, w, h) {
|
|
|
+ var _height = $(id).parent().height(),
|
|
|
+ _width = $(id).parent().width(),
|
|
|
+ ratio = h / w;
|
|
|
+
|
|
|
+ if (_height / _width > ratio) {
|
|
|
+ id.style.height = _height +'px';
|
|
|
+ id.style.width = _height / ratio +'px';
|
|
|
+ } else {
|
|
|
+ id.style.width = _width +'px';
|
|
|
+ id.style.height = _width * ratio +'px';
|
|
|
+ }
|
|
|
+
|
|
|
+ id.style.left = (_width - parseInt(id.style.width)) / 2 +'px';
|
|
|
+ id.style.top = (_height - parseInt(id.style.height)) / 2 +'px';
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+$(function() {
|
|
|
+
|
|
|
+ if (Diaspora.P()) {
|
|
|
+ $('body').addClass('touch')
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($('#preview').length) {
|
|
|
+
|
|
|
+ var cover = {};
|
|
|
+ cover.t = $('#cover');
|
|
|
+ cover.w = cover.t.attr('width');
|
|
|
+ cover.h = cover.t.attr('height');
|
|
|
+
|
|
|
+ ;(cover.o = function() {
|
|
|
+ $('#mark').height(window.innerHeight)
|
|
|
+ })();
|
|
|
+
|
|
|
+ if (cover.t.prop('complete')) {
|
|
|
+ // why setTimeout ?
|
|
|
+ setTimeout(function() { cover.t.load() }, 0)
|
|
|
+ }
|
|
|
+
|
|
|
+ cover.t.on('load', function() {
|
|
|
+
|
|
|
+ ;(cover.f = function() {
|
|
|
+
|
|
|
+ var _w = $('#mark').width(), _h = $('#mark').height(), x, y, i, e;
|
|
|
+
|
|
|
+ e = (_w >= 1000 || _h >= 1000) ? 1000 : 500;
|
|
|
+
|
|
|
+ if (_w >= _h) {
|
|
|
+ i = _w / e * 50;
|
|
|
+ y = i;
|
|
|
+ x = i * _w / _h;
|
|
|
+ } else {
|
|
|
+ i = _h / e * 50;
|
|
|
+ x = i;
|
|
|
+ y = i * _h / _w;
|
|
|
+ }
|
|
|
+
|
|
|
+ $('.layer').css({
|
|
|
+ 'width': _w + x,
|
|
|
+ 'height': _h + y,
|
|
|
+ 'marginLeft': - 0.5 * x,
|
|
|
+ 'marginTop': - 0.5 * y
|
|
|
+ })
|
|
|
+
|
|
|
+ if (!cover.w) {
|
|
|
+ cover.w = cover.t.width();
|
|
|
+ cover.h = cover.t.height();
|
|
|
+ }
|
|
|
+
|
|
|
+ Diaspora.F($('#cover')[0], cover.w, cover.h)
|
|
|
+
|
|
|
+ })();
|
|
|
+
|
|
|
+ setTimeout(function() {
|
|
|
+ $('html, body').removeClass('loading')
|
|
|
+ }, 1000)
|
|
|
+
|
|
|
+ $('#mark').parallax()
|
|
|
+
|
|
|
+ var vibrant = new Vibrant(cover.t[0]);
|
|
|
+ var swatches = vibrant.swatches()
|
|
|
+
|
|
|
+ if (swatches['DarkVibrant']) {
|
|
|
+ $('#vibrant polygon').css('fill', swatches['DarkVibrant'].getHex())
|
|
|
+ $('#vibrant div').css('background-color', swatches['DarkVibrant'].getHex())
|
|
|
+ }
|
|
|
+ if (swatches['Vibrant']) {
|
|
|
+ $('.icon-menu').css('color', swatches['Vibrant'].getHex())
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+
|
|
|
+ if (!cover.t.attr('src')) {
|
|
|
+ alert('Please set the post thumbnail')
|
|
|
+ }
|
|
|
+
|
|
|
+ $('#preview').css('min-height', window.innerHeight)
|
|
|
+
|
|
|
+ Diaspora.PS()
|
|
|
+
|
|
|
+ $('.pview a').addClass('pviewa')
|
|
|
+
|
|
|
+ var T;
|
|
|
+ $(window).on('resize', function() {
|
|
|
+ clearTimeout(T)
|
|
|
+
|
|
|
+ T = setTimeout(function() {
|
|
|
+ if (!Diaspora.P() && location.href == Home) {
|
|
|
+ cover.o()
|
|
|
+ cover.f()
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($('#loader').attr('class')) {
|
|
|
+ Diaspora.loading()
|
|
|
+ }
|
|
|
+ }, 500)
|
|
|
+ })
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ $('#single').css('min-height', window.innerHeight)
|
|
|
+
|
|
|
+ setTimeout(function() {
|
|
|
+ $('html, body').removeClass('loading')
|
|
|
+ }, 1000)
|
|
|
+
|
|
|
+ window.addEventListener('popstate', function(e) {
|
|
|
+
|
|
|
+ if (e.state) location.href = e.state.u;
|
|
|
+
|
|
|
+ })
|
|
|
+
|
|
|
+ Diaspora.player();
|
|
|
+
|
|
|
+ $('.icon-icon, .image-icon').attr('href', '/')
|
|
|
+
|
|
|
+ $('#top').show()
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ $(window).on('scroll', function() {
|
|
|
+ if ($('.scrollbar').length && !Diaspora.P() && !$('.icon-images').hasClass('active')) {
|
|
|
+ var st = $(window).scrollTop(),
|
|
|
+ ct = $('.content').height();
|
|
|
+
|
|
|
+ if (st > ct) {
|
|
|
+ st = ct
|
|
|
+ }
|
|
|
+
|
|
|
+ $('.scrollbar').width((50 + st) / ct * 100 +'%')
|
|
|
+
|
|
|
+ if (st > 80 && window.innerWidth > 800) {
|
|
|
+ $('.subtitle').fadeIn()
|
|
|
+ } else {
|
|
|
+ $('.subtitle').fadeOut()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ $(window).on('touchmove', function(e) {
|
|
|
+ if ($('body').hasClass('mu')) {
|
|
|
+ e.preventDefault()
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ $('body').on('click', function(e) {
|
|
|
+ var tag = $(e.target).attr('class') || '',
|
|
|
+ rel = $(e.target).attr('rel') || '';
|
|
|
+
|
|
|
+ if (!tag && !rel) return;
|
|
|
+
|
|
|
+ switch (true) {
|
|
|
+
|
|
|
+ // nav menu
|
|
|
+ case (tag.indexOf('switchmenu') != -1):
|
|
|
+ window.scrollTo(0, 0)
|
|
|
+ $('html, body').toggleClass('mu');
|
|
|
+
|
|
|
+ break;
|
|
|
+
|
|
|
+ // next page
|
|
|
+ case (tag.indexOf('more') != -1):
|
|
|
+ tag = $('.more');
|
|
|
+
|
|
|
+ if (tag.data('status') == 'loading') {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ var num = parseInt(tag.data('page')) || 1;
|
|
|
+
|
|
|
+ if (num == 1) {
|
|
|
+ tag.data('page', 1)
|
|
|
+ }
|
|
|
+
|
|
|
+ if (num >= Pages) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ tag.html('加载中..').data('status', 'loading')
|
|
|
+ Diaspora.loading()
|
|
|
+
|
|
|
+ Diaspora.L(tag.attr('href'), function(data) {
|
|
|
+ var link = $(data).find('.more').attr('href');
|
|
|
+ if (link != undefined) {
|
|
|
+ tag.attr('href', link).html('加载更多').data('status', 'loaded')
|
|
|
+ tag.data('page', parseInt(tag.data('page')) + 1)
|
|
|
+ } else {
|
|
|
+ $('#pager').remove()
|
|
|
+ }
|
|
|
+
|
|
|
+ $('#primary').append($(data).find('.post'))
|
|
|
+
|
|
|
+ Diaspora.loaded()
|
|
|
+ }, function() {
|
|
|
+ tag.html('加载更多').data('status', 'loaded')
|
|
|
+ })
|
|
|
+
|
|
|
+ return false;
|
|
|
+ break;
|
|
|
+
|
|
|
+ // home
|
|
|
+ case (tag.indexOf('icon-home') != -1):
|
|
|
+ if ($('#preview').hasClass('show')) {
|
|
|
+ history.back();
|
|
|
+ } else {
|
|
|
+ location.href = "/";
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+
|
|
|
+ // qrcode
|
|
|
+ case (tag.indexOf('icon-scan') != -1):
|
|
|
+ if ($('.icon-scan').hasClass('tg')) {
|
|
|
+ $('#qr').toggle()
|
|
|
+ } else {
|
|
|
+ $('.icon-scan').addClass('tg')
|
|
|
+ $('#qr').qrcode({ width: 128, height: 128, text: location.href}).toggle()
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ // audio play
|
|
|
+ case (tag.indexOf('icon-play') != -1):
|
|
|
+ $('#audio')[0].play()
|
|
|
+ $('.icon-play').removeClass('icon-play').addClass('icon-pause')
|
|
|
+ break;
|
|
|
+
|
|
|
+ // audio pause
|
|
|
+ case (tag.indexOf('icon-pause') != -1):
|
|
|
+ $('#audio')[0].pause()
|
|
|
+ $('.icon-pause').removeClass('icon-pause').addClass('icon-play')
|
|
|
+ break;
|
|
|
+
|
|
|
+
|
|
|
+ // history state
|
|
|
+ case (tag.indexOf('cover') != -1):
|
|
|
+ Diaspora.HS($(e.target).parent(), 'push')
|
|
|
+ return false;
|
|
|
+ break;
|
|
|
+
|
|
|
+ // history state
|
|
|
+ case (tag.indexOf('posttitle') != -1):
|
|
|
+ Diaspora.HS($(e.target), 'push')
|
|
|
+ return false;
|
|
|
+ break;
|
|
|
+
|
|
|
+ // relate post
|
|
|
+ case (tag.indexOf('relatea') != -1):
|
|
|
+ Diaspora.HS($(e.target), 'replace')
|
|
|
+ return false;
|
|
|
+ break;
|
|
|
+
|
|
|
+ // relate post
|
|
|
+ case (tag.indexOf('relateimg') != -1):
|
|
|
+ Diaspora.HS($(e.target).parent(), 'replace')
|
|
|
+ return false;
|
|
|
+ break;
|
|
|
+
|
|
|
+ // prev, next post
|
|
|
+ case (rel == 'prev' || rel == 'next'):
|
|
|
+ if (rel == 'prev') {
|
|
|
+ var t = $('#prev_next a')[0].text
|
|
|
+ } else {
|
|
|
+ var t = $('#prev_next a')[1].text
|
|
|
+ }
|
|
|
+ $(e.target).attr('title', t)
|
|
|
+
|
|
|
+ Diaspora.HS($(e.target), 'replace')
|
|
|
+ return false;
|
|
|
+ break;
|
|
|
+
|
|
|
+ // quick view
|
|
|
+ case (tag.indexOf('pviewa') != -1):
|
|
|
+ $('body').removeClass('mu')
|
|
|
+
|
|
|
+ setTimeout(function() {
|
|
|
+ Diaspora.HS($(e.target), 'push')
|
|
|
+ }, 300)
|
|
|
+
|
|
|
+ return false;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ return;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+
|
|
|
+ console.log("%c Github %c","background:#24272A; color:#ffffff","","https://github.com/Fechin/hexo-theme-diaspora")
|
|
|
+
|
|
|
+})
|