Вход Регистрация
Файл: sngine-v2.8/Script/includes/assets/js/plugins/zuck/zuck.js
Строк: 1296
<?php
/*
    zuck.js
    https://github.com/ramon82/zuck.js
    MIT License
*/

(function (global) {
    
"use strict";

    var 
ZuckJS = (function() {
      var 
window;
    
      var 
ZuckJS = function ZuckJS(timelineoptions) {
        var 
document;
        var 
zuck this;
    
        if (
typeof timeline == "string") {
          
timeline d.getElementById(timeline);
        }
    
        
/* core functions */
        
var query = function query(qs) {
          return 
d.querySelectorAll(qs)[0];
        };
    
        var 
get = function get(array, what) {
          if (array) {
            return array[
what] || "";
          } else {
            return 
"";
          }
        };
    
        var 
each = function each(arrfunc) {
          if (
arr) {
            var 
total arr.length;
    
            for (var 
0totali++) {
              
func(iarr[i]);
            }
          }
        };
    
        var 
setVendorVariable = function setVendorVariable(refvariablevalue) {
          var 
variables = [
            
variable.toLowerCase(),
            
"webkit" variable,
            
"MS" variable,
            
"o" variable
          
];
    
          
each(variables, function(ival) {
            
ref[val] = value;
          });
        };
    
        var 
addVendorEvents = function addVendorEvents(elfuncevent) {
          var 
events = [
            
event.toLowerCase(),
            
"webkit" event,
            
"MS" event,
            
"o" event
          
];
          var 
element el;
    
          
each(events, function(ival) {
            
el.addEventListener(valfuncfalse);
          });
        };
    
        var 
onAnimationEnd = function onAnimationEnd(elfunc) {
          
addVendorEvents(elfunc"AnimationEnd");
        };
    
        var 
onTransitionEnd = function onTransitionEnd(elfunc) {
          if (!
el.transitionEndEvent) {
            
el.transitionEndEvent true;
    
            
addVendorEvents(elfunc"TransitionEnd");
          }
        };
    
        var 
prepend = function prepend(parentchild) {
          if (
parent.firstChild) {
            
parent.insertBefore(childparent.firstChild);
          } else {
            
parent.appendChild(child);
          }
        };
    
        var 
getElIndex = function getElIndex(el) {
          for (var 
1; (el el.previousElementSibling); i++) {
            return 
i;
          }
    
          return 
0;
        };
    
        var 
fullScreen = function fullScreen(elemcancel) {
          var 
func "RequestFullScreen";
          var 
elFunc "requestFullScreen"//crappy vendor prefixes.
    
          
if (cancel) {
            if(
document.fullscreen) {
              if (
document.exitFullscreen) {
                
document.exitFullscreen();
              } else if (
document.mozCancelFullScreen) {
                
document.mozCancelFullScreen();
              } else if (
document.webkitExitFullscreen) {
                
document.webkitExitFullscreen();
              }
            }
          } else {
            try {
              if (
elem[elFunc]) {
                
elem[elFunc]();
              } else if (
elem["ms" func]) {
                
elem["ms" func]();
              } else if (
elem["moz" func]) {
                
elem["moz" func]();
              } else if (
elem["webkit" func]) {
                
elem["webkit" func]();
              }
            } catch (
e) {}
          }
        };
    
        var 
translate = function translate(elementtodurationease) {
          var 
direction to : -1;
          var 
to3d =
            (
Math.abs(to) / query("#zuck-modal").offsetWidth) * 90 direction;
    
          if (
option("cubeEffect")) {
            var 
scaling to3d == "scale(0.95)" "scale(0.930,0.930)";
    
            
setVendorVariable(
              
query("#zuck-modal-content").style,
              
"Transform",
              
scaling
            
);
    
            if (
to3d < -90 || to3d 90) {
              return 
false;
            }
          }
    
          var 
transform = !option("cubeEffect")
            ? 
"translate3d(" to "px, 0, 0)"
            
"rotateY(" to3d "deg)";
    
          if (
element) {
            
setVendorVariable(element.style"TransitionTimingFunction"ease);
            
setVendorVariable(element.style"TransitionDuration"duration "ms");
            
setVendorVariable(element.style"Transform"transform);
          }
        };
    
        var 
findPos = function findPos(objoffsetYoffsetXstop) {
          var 
curleft 0;
          var 
curtop 0;
    
          if (
obj) {
            if (
obj.offsetParent) {
              do {
                
curleft += obj.offsetLeft;
                
curtop += obj.offsetTop;
    
                if (
obj == stop) {
                  break;
                }
              } while ((
obj obj.offsetParent));
            }
    
            if (
offsetY) {
              
curtop curtop offsetY;
            }
    
            if (
offsetX) {
              
curleft curleft offsetX;
            }
          }
    
          return [
curleftcurtop];
        };
    
        var 
timeAgo = function timeAgo(time) {
          
time Number(time) * 1000;
    
          var 
dateObj = new Date(time);
          var 
dateStr dateObj.getTime();
          var 
seconds = (new Date().getTime() - dateStr) / 1000;
    
          var 
language option("language""time");
    
          var 
formats = [
            [
60" " language["seconds"], 1], // 60
            
[120"1 " language["minute"], ""], // 60*2
            
[3600" " language["minutes"], 60], // 60*60, 60
            
[7200"1 " language["hour"], ""], // 60*60*2
            
[86400" " language["hours"], 3600], // 60*60*24, 60*60
            
[172800" " language["yesterday"], ""], // 60*60*24*2
            
[604800" " language["days"], 86400]
          ];
    
          var 
currentFormat 1;
          if (
seconds 0) {
            
seconds Math.abs(seconds);
    
            
currentFormat 2;
          }
    
          var 
0;
          var 
format void 0;
          while ((
format formats[i++])) {
            if (
seconds format[0]) {
              if (
typeof format[2] == "string") {
                return 
format[currentFormat];
              } else {
                return 
Math.floor(seconds format[2]) + format[1];
              }
            }
          }
    
          var 
day dateObj.getDate();
          var 
month dateObj.getMonth();
          var 
year dateObj.getFullYear();
    
          return 
day "/" + (month 1) + "/" year;
        };
    
        
/* options */
        
var id timeline.id;
    
        var 
optionsDefault = {
          
skin"snapgram",
          
avatarstrue,
          
stories: [],
          
backButtontrue,
          
backNativefalse,
          
previousTaptrue,
          
autoFullScreenfalse,
          
openEffecttrue,
          
cubeEffectfalse,
          list: 
false,
          
localStoragetrue,
          
callbacks: {
            
onOpen: function onOpen(storyIdcallback) {
              
callback();
            },
            
onView: function onView(storyId) {},
            
onEnd: function onEnd(storyIdcallback) {
              
callback();
            },
            
onClose: function onClose(storyIdcallback) {
              
callback();
            },
            
onNextItem: function onNextItem(storyIdnextStoryIdcallback) {
              
callback();
            },
            
onNavigateItem: function onNavigateItem(
              
storyId,
              
nextStoryId,
              
callback
            
) {
              
callback();
            }
          },
          
language: {
            
unmute__['Touch to unmute'],
            
keyboardTip__['Press space to see next'],
            
visitLink__['Visit link'],
            
time: {
              
ago__['ago'],
              
hour__['hour ago'],
              
hours__['hours ago'],
              
minute__['minute ago'],
              
minutes__['minutes ago'],
              
fromnow__['from now'],
              
seconds__['seconds ago'],
              
yesterday__['yesterday'],
              
tomorrow__['tomorrow'],
              
days__['days ago']
            }
          }
        };
    
        var 
option = function option(nameprop) {
          var 
type = function type(what) {
            return 
typeof what !== "undefined";
          };
    
          if (
prop) {
            if (
type(options[name])) {
              return 
type(options[name][prop])
                ? 
options[name][prop]
                : 
optionsDefault[name][prop];
            } else {
              return 
optionsDefault[name][prop];
            }
          } else {
            return 
type(options[name]) ? options[name] : optionsDefault[name];
          }
        };
    
        
/* modal */
        
var zuckModal = function zuckModal() {
          var 
opened false;
          var 
modalZuckContainer query("#zuck-modal");
    
          if (!
modalZuckContainer && !w["Zuck"].hasModal) {
            
w["Zuck"].hasModal true;
    
            
modalZuckContainer d.createElement("div");
            
modalZuckContainer.id "zuck-modal";
    
            if (
option("cubeEffect")) {
              
modalZuckContainer.className "with-cube";
            }
    
            
modalZuckContainer.innerHTML '<div id="zuck-modal-content"></div>';
            
modalZuckContainer.style.display "none";
    
            
modalZuckContainer.setAttribute("tabIndex""1");
            
modalZuckContainer.onkeyup = function(e) {
              var 
code e.keyCode;
    
              if (
code == 27) {
                
modal.close();
              } else if (
code == 13 || code == 32) {
                
modal.next();
              }
            };
    
            if (
option("openEffect")) {
              
modalZuckContainer.classList.add("with-effects");
            }
    
            
onTransitionEnd(modalZuckContainer, function() {
              if (
modalZuckContainer.classList.contains("closed")) {
                
modalContent.innerHTML "";
                
modalZuckContainer.style.display "none";
                
modalZuckContainer.classList.remove("closed");
                
modalZuckContainer.classList.remove("animated");
              }
            });
    
            
d.body.appendChild(modalZuckContainer);
          }
    
          var 
modalContent query("#zuck-modal-content");
          var 
moveStoryItem = function moveStoryItem(direction) {
            var 
modalContainer query("#zuck-modal");
    
            var 
target "";
            var 
useless "";
            var 
transform "0";
            var 
modalSlider query("#zuck-modal-slider-" id);
    
            var 
slideItems = {
              
previousquery("#zuck-modal .story-viewer.previous"),
              
nextquery("#zuck-modal .story-viewer.next"),
              
viewingquery("#zuck-modal .story-viewer.viewing")
            };
    
            if (
              (!
slideItems["previous"] && !direction) ||
              (!
slideItems["next"] && direction)
            ) {
              return 
false;
            }
    
            if (!
direction) {
              
target "previous";
              
useless "next";
            } else {
              
target "next";
              
useless "previous";
            }
    
            var 
transitionTime 600;
            if (
option("cubeEffect")) {
              if (
target == "previous") {
                
transform modalContainer.slideWidth;
              } else if (
target == "next") {
                
transform modalContainer.slideWidth * -1;
              }
            } else {
              
transform findPos(slideItems[target]);
              
transform transform[0] * -1;
            }
    
            
translate(modalSlidertransformtransitionTimenull);
    
            
setTimeout(function() {
              if (
target != "" && slideItems[target] && useless != "") {
                var 
currentStory slideItems[target].getAttribute("data-story-id");
                
zuck.internalData["currentStory"] = currentStory;
    
                var 
oldStory query("#zuck-modal .story-viewer." useless);
                if (
oldStory) {
                  
oldStory.parentNode.removeChild(oldStory);
                }
    
                if (
slideItems["viewing"]) {
                  
slideItems["viewing"].classList.add("stopped");
                  
slideItems["viewing"].classList.add(useless);
                  
slideItems["viewing"].classList.remove("viewing");
                }
    
                if (
slideItems[target]) {
                  
slideItems[target].classList.remove("stopped");
                  
slideItems[target].classList.remove(target);
                  
slideItems[target].classList.add("viewing");
                }
    
                var 
newStoryData getStoryMorningGlory(target);
                if (
newStoryData) {
                  
createStoryViewer(newStoryDatatarget);
                }
    
                var 
storyId zuck.internalData["currentStory"];
                var 
items query('#zuck-modal [data-story-id="' storyId '"]');
    
                if (
items) {
                  
items items.querySelectorAll("[data-index].active");
                  var 
duration items[0].firstElementChild;
    
                  
zuck.data[storyId]["currentItem"] = parseInt(
                    
items[0].getAttribute("data-index"),
                    
10
                  
);
    
                  
items[0].innerHTML =
                    
'<b style="' duration.style.cssText '"></b>';
                  
onAnimationEnd(items[0].firstElementChild, function() {
                    
zuck.nextItem(false);
                  });
                }
    
                
translate(modalSlider"0"0null);
    
                if (
items) {
                  
playVideoItem([items[0], items[1]], true);
                }
    
                
option("callbacks""onView")(zuck.internalData["currentStory"]);
              }
            }, 
transitionTime 50);
          };
    
          var 
createStoryViewer = function createStoryViewer(
            
storyData,
            
className,
            
forcePlay
          
) {
            var 
modalContainer query("#zuck-modal");
            var 
modalSlider query("#zuck-modal-slider-" id);
    
            var 
htmlItems "";
            var 
pointerItems "";
            var 
storyId get(storyData"id");
            var 
slides d.createElement("div");
            var 
currentItem get(storyData"currentItem") || 0;
            var 
exists query(
              
'#zuck-modal .story-viewer[data-story-id="' storyId '"]'
            
);
            var 
currentItemTime "";
    
            if (
exists) {
              return 
false;
            }
    
            
slides.className "slides";
            
each(get(storyData"items"), function(iitem) {
              if (
currentItem i) {
                
storyData["items"][i]["seen"] = true;
                
item["seen"] = true;
              }
    
              var 
length get(item"length");
              var 
linkText get(item"linkText");
              var 
seenClass get(item"seen") === true "seen" "";
              var 
commonAttrs =
                
'data-index="' '" data-item-id="' get(item"id") + '"';
    
              if (
currentItem === i) {
                
currentItemTime timeAgo(get(item"time"));
              }
    
              
pointerItems +=
                
"<span " +
                
commonAttrs +
                
' class="' +
                (
currentItem === "active" "") +
                
" " +
                
seenClass +
                
'"><b style="animation-duration:' +
                (
length === "" "3" length) +
                
's"></b></span>';
              
htmlItems +=
                
'<div data-time="' +
                
get(item"time") +
                
'" data-type="' +
                
get(item"type") +
                
'"' +
                
commonAttrs +
                
' class="item ' +
                
seenClass +
                
" " +
                (
currentItem === "active" "") +
                
'">' +
                (
get(item"type") === "video"
                  
'<video class="media" muted webkit-playsinline playsinline preload="auto" src="' +
                    
get(item"src") +
                    
'" ' +
                    
get(item"type") +
                    
'></video><b class="tip muted">' +
                    
option("language""unmute") +
                    
"</b>"
                  
'<img class="media" src="' +
                    
get(item"src") +
                    
'" ' +
                    
get(item"type") +
                    
">") +
                (
get(item"link")
                  ? 
'<a class="tip link" href="' +
                    
get(item"link") +
                    
'" rel="noopener" target="_blank">' +
                    (
linkText == "" || !linkText
                      
option("language""visitLink")
                      : 
linkText) +
                    
"</a>"
                  
"") +
                
"</div>";
            });
            
slides.innerHTML htmlItems;
    
            var 
video slides.querySelector("video");
            var 
addMuted = function addMuted(video) {
              if (
video.muted) {
                
storyViewer.classList.add("muted");
              } else {
                
storyViewer.classList.remove("muted");
              }
            };
    
            if (
video) {
              
video.onwaiting = function(e) {
                if (
video.paused) {
                  
storyViewer.classList.add("paused");
                  
storyViewer.classList.add("loading");
                }
              };
    
              
video.onplay = function() {
                
addMuted(video);
    
                
storyViewer.classList.remove("stopped");
                
storyViewer.classList.remove("paused");
                
storyViewer.classList.remove("loading");
              };
    
              
video.onready video.onload video.onplaying video.oncanplay = function() {
                
addMuted(video);
    
                
storyViewer.classList.remove("loading");
              };
    
              
video.onvolumechange = function() {
                
addMuted(video);
              };
            }
    
            var 
storyViewer d.createElement("div");
            
storyViewer.className =
              
"story-viewer muted " +
              
className +
              
" " +
              (!
forcePlay "stopped" "") +
              
" " +
              (
option("backButton") ? "with-back-button" "");
            
storyViewer.setAttribute("data-story-id"storyId);
    
            var 
html =
              
'<div class="head"><div class="left">' +
              (
option("backButton") ? '<a class="back">&lsaquo;</a>' "") +
              
'<u class="img" style="background-image:url(' +
              
get(storyData"photo") +
              
');"></u><div><strong>' +
              
get(storyData"name") +
              
'</strong><span class="time">' +
              
currentItemTime +
              
'</span></div></div><div class="right"><span class="time">' +
              
currentItemTime +
              
'</span><span class="loading"></span><a class="close" tabIndex="2">&times;</a></div></div><div class="slides-pointers"><div>' +
              
pointerItems +
              
"</div></div>";
            
storyViewer.innerHTML html;
    
            
each(storyViewer.querySelectorAll(".close, .back"), function(iel) {
              
el.onclick = function(e) {
                
e.preventDefault();
                
modal.close();
              };
            });
    
            
storyViewer.appendChild(slides);
    
            if (
className == "viewing") {
              
playVideoItem(
                
storyViewer.querySelectorAll(
                  
'[data-index="' currentItem '"].active'
                
),
                
false
              
);
            }
    
            
each(
              
storyViewer.querySelectorAll(".slides-pointers [data-index] > b"),
              function(
iel) {
                
onAnimationEnd(el, function() {
                  
zuck.nextItem(false);
                });
              }
            );
    
            if (
className == "previous") {
              
prepend(modalSliderstoryViewer);
            } else {
              
modalSlider.appendChild(storyViewer);
            }
          };
    
          var 
createStoryTouchEvents = function createStoryTouchEvents(
            
modalSliderElement
          
) {
            var 
modalContainer query("#zuck-modal");
            var 
enableMouseEvents true;
    
            var 
modalSlider modalSliderElement;
            var 
position = {};
            var 
touchOffset void 0;
            var 
isScrolling void 0;
            var 
delta void 0;
            var 
timer void 0;
            var 
nextTimer void 0;
    
            var 
touchStart = function touchStart(event) {
              var 
storyViewer query("#zuck-modal .viewing");
    
              if (
event.target.nodeName == "A") {
                return 
true;
              } else {
                
event.preventDefault();
              }
    
              var 
touches event.touches event.touches[0] : event;
              var 
pos findPos(query("#zuck-modal .story-viewer.viewing"));
    
              
modalContainer.slideWidth query(
                
"#zuck-modal .story-viewer"
              
).offsetWidth;
              
position = {
                
xpos[0],
                
ypos[1]
              };
    
              var 
pageX touches.pageX;
              var 
pageY touches.pageY;
    
              
touchOffset = {
                
xpageX,
                
ypageY,
                
timeDate.now()
              };
    
              
isScrolling undefined;
              
delta = {};
    
              if (
enableMouseEvents) {
                
modalSlider.addEventListener("mousemove"touchMove);
                
modalSlider.addEventListener("mouseup"touchEnd);
                
modalSlider.addEventListener("mouseleave"touchEnd);
              }
              
modalSlider.addEventListener("touchmove"touchMove);
              
modalSlider.addEventListener("touchend"touchEnd);
    
              if (
storyViewer) {
                
storyViewer.classList.add("paused");
              }
              
pauseVideoItem();
    
              
timer setTimeout(function() {
                
storyViewer.classList.add("longPress");
              }, 
600);
    
              
nextTimer setTimeout(function() {
                
clearInterval(nextTimer);
                
nextTimer false;
              }, 
250);
            };
    
            var 
touchMove = function touchMove(event) {
              var 
touches event.touches event.touches[0] : event;
              var 
pageX touches.pageX;
              var 
pageY touches.pageY;
    
              if (
touchOffset) {
                
delta = {
                  
xpageX touchOffset.x,
                  
ypageY touchOffset.y
                
};
    
                if (
typeof isScrolling === "undefined") {
                  
isScrolling = !!(
                    
isScrolling || Math.abs(delta.x) < Math.abs(delta.y)
                  );
                }
    
                if (!
isScrolling && touchOffset) {
                  
event.preventDefault();
                  
translate(modalSliderposition.delta.x0null);
                }
              }
            };
    
            var 
touchEnd = function touchEnd(event) {
              var 
storyViewer query("#zuck-modal .viewing");
              var 
lastTouchOffset touchOffset;
    
              if (
delta) {
                var 
slidesLength d.querySelectorAll("#zuck-modal .story-viewer")
                  .
length;
                var 
duration touchOffset
                  
Date.now() - touchOffset.time
                  
undefined;
                var 
isValid =
                  (
Number(duration) < 300 && Math.abs(delta.x) > 25) ||
                  
Math.abs(delta.x) > modalContainer.slideWidth 3;
                var 
direction delta.0;
    
                var 
index direction
                  
query("#zuck-modal .story-viewer.next")
                  : 
query("#zuck-modal .story-viewer.previous");
                var 
isOutOfBounds = (direction && !index) || (!direction && !index);
    
                if (!
isScrolling) {
                  if (
isValid && !isOutOfBounds) {
                    
moveStoryItem(directiontrue);
                  } else {
                    
translate(modalSliderposition.x300);
                  }
                }
    
                
touchOffset undefined;
    
                if (
enableMouseEvents) {
                  
modalSlider.removeEventListener("mousemove"touchMove);
                  
modalSlider.removeEventListener("mouseup"touchEnd);
                  
modalSlider.removeEventListener("mouseleave"touchEnd);
                }
                
modalSlider.removeEventListener("touchmove"touchMove);
                
modalSlider.removeEventListener("touchend"touchEnd);
              }
    
              var 
video zuck.internalData["currentVideoElement"];
              if (
timer) {
                
clearInterval(timer);
              }
    
              if (
storyViewer) {
                
storyViewer.classList.remove("longPress");
                
storyViewer.classList.remove("paused");
              }
    
              if (
nextTimer) {
                
clearInterval(nextTimer);
                
nextTimer false;
    
                var 
navigateItem = function navigateItem() {
                  if (
                    
lastTouchOffset.w.screen.width ||
                    !
option("previousTap")
                  ) {
                    
zuck.navigateItem("next"event);
                  } else {
                    
zuck.navigateItem("previous"event);
                  }
                };
    
                var 
storyViewerViewing query("#zuck-modal .viewing");
                if (
storyViewerViewing && video) {
                  if (
storyViewerViewing.classList.contains("muted")) {
                    
unmuteVideoItem(videostoryViewerViewing);
                  } else {
                    
navigateItem();
                  }
                } else {
                  
navigateItem();
    
                  return 
false;
                }
              }
            };
    
            
modalSlider.addEventListener("touchstart"touchStart);
    
            if (
enableMouseEvents) {
              
modalSlider.addEventListener("mousedown"touchStart);
            }
          };
    
          return {
            
show: function show(storyIdpage) {
              var 
modalContainer query("#zuck-modal");
    
              var 
callback = function callback() {
                
modalContent.innerHTML =
                  
'<div id="zuck-modal-slider-' id '" class="slider"></div>';
    
                var 
storyData zuck.data[storyId];
                var 
currentItem storyData["currentItem"] || 0;
                var 
modalSlider query("#zuck-modal-slider-" id);
    
                
createStoryTouchEvents(modalSlider);
    
                
zuck.internalData["currentStory"] = storyId;
                
storyData["currentItem"] = currentItem;
    
                if (
option("backNative")) {
                  
location.hash "#!" id;
                }
    
                var 
previousItemData getStoryMorningGlory("previous");
                if (
previousItemData) {
                  
createStoryViewer(previousItemData"previous");
                }
    
                
createStoryViewer(storyData"viewing"true);
    
                var 
nextItemData getStoryMorningGlory("next");
                if (
nextItemData) {
                  
createStoryViewer(nextItemData"next");
                }
    
                if (
option("autoFullScreen")) {
                  
modalContainer.classList.add("fullscreen");
                }
    
                var 
tryFullScreen = function tryFullScreen() {
                  if (
                    
modalContainer.classList.contains("fullscreen") &&
                    
option("autoFullScreen") &&
                    
w.screen.width <= 1024
                  
) {
                    
fullScreen(modalContainer);
                  }
    
                  
modalContainer.focus();
                };
    
                if (
option("openEffect")) {
                  var 
storyEl query(
                    
"#" id ' [data-id="' storyId '"] .img'
                  
);
                  var 
pos findPos(storyEl);
    
                  
modalContainer.style.marginLeft =
                    
pos[0] + storyEl.offsetWidth "px";
                  
modalContainer.style.marginTop =
                    
pos[1] + storyEl.offsetHeight "px";
    
                  
modalContainer.style.display "block";
    
                  
modalContainer.slideWidth query(
                    
"#zuck-modal .story-viewer"
                  
).offsetWidth;
    
                  
setTimeout(function() {
                    
modalContainer.classList.add("animated");
                  }, 
10);
    
                  
setTimeout(function() {
                    
tryFullScreen();
                  }, 
300); //because effects
                
} else {
                  
modalContainer.style.display "block";
                  
modalContainer.slideWidth query(
                    
"#zuck-modal .story-viewer"
                  
).offsetWidth;
    
                  
tryFullScreen();
                }
    
                
option("callbacks""onView")(storyId);
              };
    
              
option("callbacks""onOpen")(storyIdcallback);
            },
            
next: function next(unmute) {
              var 
modalContainer query("#zuck-modal");
    
              var 
callback = function callback() {
                var 
lastStory zuck.internalData["currentStory"];
                var 
lastStoryTimelineElement query(
                  
"#" id ' [data-id="' lastStory '"]'
                
);
    
                if (
lastStoryTimelineElement) {
                  
lastStoryTimelineElement.classList.add("seen");
    
                  
zuck.data[lastStory]["seen"] = true;
                  
zuck.internalData["seenItems"][lastStory] = true;
    
                  
saveLocalData("seenItems"zuck.internalData["seenItems"]);
                  
updateStoryseenPosition();
                }
    
                var 
stories query("#zuck-modal .story-viewer.next");
                if (!
stories) {
                  
modal.close();
                } else {
                  
moveStoryItem(true);
                }
              };
    
              
option("callbacks""onEnd")(
                
zuck.internalData["currentStory"],
                
callback
              
);
            },
            
close: function close() {
              var 
modalContainer query("#zuck-modal");
    
              var 
callback = function callback() {
                if (
option("backNative")) {
                  
location.hash "";
                }
    
                
fullScreen(modalContainertrue);
    
                if (
option("openEffect")) {
                  
modalContainer.classList.add("closed");
                } else {
                  
modalContent.innerHTML "";
                  
modalContainer.style.display "none";
                }
              };
    
              
option("callbacks""onClose")(
                
zuck.internalData["currentStory"],
                
callback
              
);
            }
          };
        };
        var 
modal = new zuckModal();
    
        
/* parse functions */
        
var parseItems = function parseItems(story) {
          var 
storyId story.getAttribute("data-id");
          var 
storyItems d.querySelectorAll(
            
"#" id ' [data-id="' storyId '"] .items > li'
          
);
          var 
items = [];
    
          
each(storyItems, function(iel) {
            var 
el.firstElementChild;
            var 
img a.firstElementChild;
    
            
items.push({
              
srca.getAttribute("href"),
              
lengtha.getAttribute("data-length"),
              
typea.getAttribute("data-type"),
              
timea.getAttribute("data-time"),
              
linka.getAttribute("data-link"),
              
linkTexta.getAttribute("data-linkText"),
              
previewimg.getAttribute("src")
            });
          });
    
          
zuck.data[storyId].items items;
        };
    
        var 
parseStory = function parseStory(story) {
          var 
storyId story.getAttribute("data-id");
          var 
seen false;
    
          if (
zuck.internalData["seenItems"][storyId]) {
            
seen true;
          }
    
          if (
seen) {
            
story.classList.add("seen");
          } else {
            
story.classList.remove("seen");
          }
    
          try {
            
zuck.data[storyId] = {
              
idstoryId//story id
              
photostory.getAttribute("data-photo"), //story photo (or user photo)
              
namestory.firstElementChild.lastElementChild.firstChild.innerText,
              
linkstory.firstElementChild.getAttribute("href"),
              
lastUpdatedstory.getAttribute("data-last-updated"),
              
seenseen,
              
items: []
            };
          } catch (
e) {
            
zuck.data[storyId] = {
              
items: []
            };
          }
    
          
story.onclick = function(e) {
            
e.preventDefault();
    
            
modal.show(storyId);
          };
        };
    
        var 
getStoryMorningGlory = function getStoryMorningGlory(what) {
          
//my wife told me to stop singing Wonderwall. I SAID MAYBE.
          
var currentStory zuck.internalData["currentStory"];
          var 
whatEl what "ElementSibling";
    
          if (
currentStory) {
            var 
foundStory query("#" id ' [data-id="' currentStory '"]')[
              
whatEl
            
];
    
            if (
foundStory) {
              var 
storyId foundStory.getAttribute("data-id");
              var 
data zuck.data[storyId] || false;
    
              return 
data//(get(zuck.data[storyId], 'seen')==true)?false:data;
            
}
          }
    
          return 
false;
        };
    
        var 
updateStoryseenPosition = function updateStoryseenPosition() {
          
each(d.querySelectorAll("#" id " .story.seen"), function(iel) {
            var 
newData zuck.data[el.getAttribute("data-id")];
            var 
timeline el.parentNode;
    
            
timeline.removeChild(el);
            
zuck.add(newDatatrue);
          });
        };
    
        var 
playVideoItem = function playVideoItem(elementsunmute) {
          var 
itemElement elements[1];
          var 
itemPointer elements[0];
          var 
storyViewer itemPointer.parentNode.parentNode.parentNode;
    
          if (!
itemElement || !itemPointer) {
            return 
false;
          }
    
          var 
cur zuck.internalData["currentVideoElement"];
          if (
cur) {
            
cur.pause();
          }
    
          if (
itemElement.getAttribute("data-type") == "video") {
            var 
video itemElement.getElementsByTagName("video")[0];
            if (!
video) {
              
zuck.internalData["currentVideoElement"] = false;
    
              return 
false;
            }
    
            var 
setDuration = function setDuration() {
              if (
video.duration) {
                
setVendorVariable(
                  
itemPointer.getElementsByTagName("b")[0].style,
                  
"AnimationDuration",
                  
video.duration "s"
                
);
              }
            };
    
            
setDuration();
            
video.addEventListener("loadedmetadata"setDuration);
            
zuck.internalData["currentVideoElement"] = video;
    
            
video.currentTime 0;
            
video.play();
    
            if (
unmute.target) {
              
unmuteVideoItem(videostoryViewer);
            }
          } else {
            
zuck.internalData["currentVideoElement"] = false;
          }
        };
    
        var 
pauseVideoItem = function pauseVideoItem() {
          var 
video zuck.internalData["currentVideoElement"];
          if (
video) {
            try {
              
video.pause();
            } catch (
e) {}
          }
        };
    
        var 
unmuteVideoItem = function unmuteVideoItem(videostoryViewer) {
          
video.muted false;
          
video.volume 1.0;
          
video.removeAttribute("muted");
          
video.play();
    
          if (
video.paused) {
            
video.muted true;
            
video.play();
          }
    
          if (
storyViewer) {
            
storyViewer.classList.remove("paused");
          }
        };
    
        
/* data functions */
        
var saveLocalData = function saveLocalData(keydata) {
          try {
            if (
option("localStorage")) {
              var 
keyName "zuck-" id "-" key;
    
              
w.localStorage[keyName] = JSON.stringify(data);
            }
          } catch (
e) {}
        };
    
        var 
getLocalData = function getLocalData(key) {
          if (
option("localStorage")) {
            var 
keyName "zuck-" id "-" key;
    
            return 
w.localStorage[keyName]
              ? 
JSON.parse(w.localStorage[keyName])
              : 
false;
          } else {
            return 
false;
          }
        };
    
        
/* api */
        
zuck.data = {};
        
zuck.internalData = {};
        
zuck.internalData["seenItems"] = getLocalData("seenItems") || {};
    
        
zuck.add zuck.update = function(dataappend) {
          var 
storyId get(data"id");
          var 
storyEl query("#" id ' [data-id="' storyId '"]');
          var 
html "";
          var 
items get(data"items");
          var 
story false;
    
          
zuck.data[storyId] = {};
    
          if (!
storyEl) {
            
story d.createElement("div");
            
story.className "story";
          } else {
            
story storyEl;
          }
    
          if (
data["seen"] === false) {
            
zuck.internalData["seenItems"][storyId] = false;
            
saveLocalData("seenItems"zuck.internalData["seenItems"]);
          }
    
          
story.setAttribute("data-id"storyId);
          
story.setAttribute("data-photo"get(data"photo"));
          
story.setAttribute("data-last-updated"get(data"lastUpdated"));
    
          var 
preview false;
          if (
items[0]) {
            
preview items[0]["preview"] || "";
          }
    
          
html =
            
'<a href="' +
            
get(data"link") +
            
'"><span class="img"><u style="background-image:url(' +
            (
option("avatars") || !preview || preview == ""
              
get(data"photo")
              : 
preview) +
            
')"></u></span><span class="info"><strong>' +
            
get(data"name") +
            
'</strong><span class="time">' +
            
timeAgo(get(data"lastUpdated")) +
            
'</span></span></a><ul class="items"></ul>';
          
story.innerHTML html;
          
parseStory(story);
    
          if (!
storyEl) {
            if (
append) {
              
timeline.appendChild(story);
            } else {
              
prepend(timelinestory);
            }
          }
    
          
each(items, function(iitem) {
            
zuck.addItem(storyIditemappend);
          });
    
          if (!
append) {
            
updateStoryseenPosition();
          }
        };
        
zuck.next = function() {
          
modal.next();
        };
        
zuck.remove = function(storyId) {
          var 
story query("#" id ' > [data-id="' storyId '"]');
          
story.parentNode.removeChild(story);
        };
        
zuck.addItem = function(storyIddataappend) {
          var 
story query("#" id ' > [data-id="' storyId '"]');
          var 
li d.createElement("li");
    
          
li.className get(data"seen") ? "seen" "";
          
li.setAttribute("data-id"get(data"id"));
    
          
li.innerHTML =
            
'<a href="' +
            
get(data"src") +
            
'" data-link="' +
            
get(data"link") +
            
'" data-linkText="' +
            
get(data"linkText") +
            
'" data-time="' +
            
get(data"time") +
            
'" data-type="' +
            
get(data"type") +
            
'" data-length="' +
            
get(data"length") +
            
'"><img src="' +
            
get(data"preview") +
            
'"></a>';
    
          var 
el story.querySelectorAll(".items")[0];
          if (
append) {
            
el.appendChild(li);
          } else {
            
prepend(elli);
          }
    
          
parseItems(story);
        };
        
zuck.removeItem = function(storyIditemId) {
          var 
item query(
            
"#" id ' > [data-id="' storyId '"] [data-id="' itemId '"]'
          
);
    
          
timeline.parentNode.removeChild(item);
        };
        
zuck.navigateItem zuck.nextItem = function(directionevent) {
          var 
currentStory zuck.internalData["currentStory"];
          var 
currentItem zuck.data[currentStory]["currentItem"];
          var 
storyViewer query(
            
'#zuck-modal .story-viewer[data-story-id="' currentStory '"]'
          
);
          var 
directionNumber direction == "previous" ? -1;
    
          if (!
storyViewer || storyViewer.touchMove == 1) {
            return 
false;
          }
    
          var 
currentItemElements storyViewer.querySelectorAll(
            
'[data-index="' currentItem '"]'
          
);
          var 
currentPointer currentItemElements[0];
          var 
currentItemElement currentItemElements[1];
    
          var 
navigateItem currentItem directionNumber;
          var 
nextItems storyViewer.querySelectorAll(
            
'[data-index="' navigateItem '"]'
          
);
          var 
nextPointer nextItems[0];
          var 
nextItem nextItems[1];
    
          if (
storyViewer && nextPointer && nextItem) {
            var 
navigateItemCallback = function navigateItemCallback() {
              if (
direction == "previous") {
                
currentPointer.classList.remove("seen");
                
currentItemElement.classList.remove("seen");
              } else {
                
currentPointer.classList.add("seen");
                
currentItemElement.classList.add("seen");
              }
    
              
currentPointer.classList.remove("active");
              
currentItemElement.classList.remove("active");
    
              
nextPointer.classList.remove("seen");
              
nextPointer.classList.add("active");
    
              
nextItem.classList.remove("seen");
              
nextItem.classList.add("active");
    
              
each(storyViewer.querySelectorAll(".time"), function(iel) {
                
el.innerText timeAgo(nextItem.getAttribute("data-time"));
              });
    
              
zuck.data[currentStory]["currentItem"] =
                
zuck.data[currentStory]["currentItem"] + directionNumber;
    
              
playVideoItem(nextItemsevent);
            };
    
            var 
callback option("callbacks""onNavigateItem");
            
callback = !callback
              
option("callbacks""onNextItem")
              : 
option("callbacks""onNavigateItem");
    
            
callback(
              
currentStory,
              
nextItem.getAttribute("data-story-id"),
              
navigateItemCallback
            
);
          } else if (
storyViewer) {
            if (
direction != "previous") {
              
modal.next(event);
            }
          }
        };
        var 
init = function init() {
          if (
location.hash == "#!" id) {
            
location.hash "";
          }
    
          if (
query("#" id " .story")) {
            
each(timeline.querySelectorAll(".story"), function(istory) {
              
parseStory(storytrue);
            });
          }
    
          if (
option("backNative")) {
            
w.addEventListener(
              
"popstate",
              function(
e) {
                if (
location.hash != "#!" id) {
                  
location.hash "";
                }
              },
              
false
            
);
          }
    
          
each(option("stories"), function(iitem) {
            
zuck.add(itemtrue);
          });
    
          
updateStoryseenPosition();
    
          var 
avatars option("avatars") ? "user-icon" "story-preview";
          var list = 
option("list") ? "list" "carousel";
    
          
timeline.className =
            
"stories " +
            
avatars +
            
" " +
            list +
            
" " +
            (
option("skin") + "").toLowerCase();
    
          return 
zuck;
        };
    
        return 
init();
      };
    
      
/* Helpers */
      
ZuckJS.buildItem = function(
        
id,
        
type,
        
length,
        
src,
        
preview,
        
link,
        
linkText,
        
seen,
        
time
      
) {
        return {
          
idid,
          
typetype,
          
lengthlength,
          
srcsrc,
          
previewpreview,
          
linklink,
          
linkTextlinkText,
          
seenseen,
          
timetime
        
};
      };
    
      
/* Too much zuck zuck to maintain legacy */
      
w["ZuckitaDaGalera"] = w["Zuck"] = ZuckJS;
    
      return 
ZuckJS;
    })();

    
// AMD support
    
if (typeof define === 'function' && define.amd) {
        
define(function () { return ZuckJS; });
    
// CommonJS and Node.js module support.
    
} else if (typeof exports !== 'undefined') {
        
// Support Node.js specific `module.exports` (which can be a function)
        
if (typeof module !== 'undefined' && module.exports) {
            
exports module.exports ZuckJS;
        }
        
// But always support CommonJS module 1.1.1 spec (`exports` cannot be a function)
        
exports.ZuckJS ZuckJS;
    } else {
        global.
ZuckJS ZuckJS;
    }
})(
this);
?>
Онлайн: 1
Реклама