core/skin/shkola5nt.ru/js/pluso/pinbutton.js

469 lines
22 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function() {
var baseUrl = 'http://pinme.ru/';
var baseStaticUrl = 'http://pinme.ru/';
var baseNoSchemaStaticUrl = '//pinme.ru/';
var pinmeUID = "PINME_" + (new Date).getTime();
if (window.location.href.match(/^http:\/\/.*?\.?pinme\.ru\//)) {
alert('Панель Pinme успешно установлена. Теперь Вы можете использовать ее на своих любимых сайтах для добавления пинов.');
return false;
}
if (typeof window.pinmePanel == 'undefined') {
window.pinmePanel = {};
}
if (window.pinmePanel.proceed) {
window.pinmePanel.close();
return false;
}
window.pinmePanel.proceed = true;
function isIE() {
return /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent);
}
function isChrome() {
return /Chrome/.test(navigator.userAgent);
}
function isSafari() {
return /Safari/.test(navigator.userAgent) && !isChrome();
}
function isIOS() {
return navigator.userAgent.match(/iPad/i) != null || navigator.userAgent.match(/iPhone/i) != null || navigator.userAgent.match(/iPod/i) != null || navigator.userAgent.match(/iPod/i) != null
}
function hasClass(elem, className) {
return new RegExp("(^|\\s)"+className+"(\\s|$)").test(elem.className)
}
function addClass(o, c){
var re = new RegExp("(^|\\s)" + c + "(\\s|$)", "g");
if (re.test(o.className)) return
o.className = (o.className + " " + c).replace(/\s+/g, " ").replace(/(^ | $)/g, "")
}
function removeClass(o, c){
var re = new RegExp("(^|\\s)" + c + "(\\s|$)", "g");
o.className = o.className.replace(re, "$1").replace(/\s+/g, " ").replace(/(^ | $)/g, "")
}
function in_array(needle, haystack, strict)
{
var found = false, key, strict = !!strict;
for (key in haystack) {
if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
found = true;
break;
}
}
return found;
}
function temphide(tag)
{
if (!window.pinmePanel.hiddenTag) {
window.pinmePanel.hiddenTag = [];
}
var emb = document.getElementsByTagName(tag);
for (var i = 0; i < emb.length; i++) {
if (emb[i].style.display != 'none') {
window.pinmePanel.hiddenTag.push([emb[i], emb[i].style.display]);
emb[i].style.display = 'none';
}
}
}
function reverttemphide()
{
if (!window.pinmePanel.hiddenTag) {
return;
}
for (var i = 0; i < window.pinmePanel.hiddenTag.length; i++) {
window.pinmePanel.hiddenTag[i][0].style.display = window.pinmePanel.hiddenTag[i][1];
}
window.pinmePanel.hiddenTag = [];
}
function initPanel()
{
if (window.pinmePanel.panel) {
window.pinmePanel.block.style.display = 'block';
window.pinmePanel.panel.style.display = 'block';
return;
}
window.pinmePanel.close = function()
{
window.pinmePanel.block.style.display = 'none';
window.pinmePanel.panel.style.display = 'none';
window.pinmePanel.imageContainer.innerHTML = '';
window.pinmePanel.submitButton.style.display = 'none';
reverttemphide();
window.pinmePanel.proceed = false;
};
window.pinmePanel.select = function(event)
{
var item = event.target;
if (hasClass(item, 'pinmeSelectButton') || hasClass(item, 'pinmeInfo') || hasClass(item, 'pinmeImg'))
{
item = item.parentElement;
}
var imgId = item.imgId;
var img = window.pinmePanel.images[imgId];
if (hasClass(item, 'selected')) {
removeClass(item, 'selected');
var selected = [];
for (var i = 0; i < window.pinmePanel.selectedImages.length; i++) {
if (window.pinmePanel.selectedImages[i].id != imgId) {
selected.push(window.pinmePanel.selectedImages[i]);
}
}
window.pinmePanel.selectedImages = selected;
} else {
addClass(item, 'selected');
var image_item = img;
image_item.alt = (img.alt || img.title || document.title);
image_item.id = imgId;
window.pinmePanel.selectedImages.push(image_item);
}
if (window.pinmePanel.selectedImages.length) {
window.pinmePanel.submitButton.style.display = 'block';
} else {
window.pinmePanel.submitButton.style.display = 'none';
}
};
window.pinmePanel.submit = function()
{
if (!window.pinmePanel.selectedImages.length) {
return false;
}
var form = document.createElement('form');
form.action = baseUrl + 'index/popup';
form.acceptCharset = 'utf-8';
form.method = 'POST';
form.target = '_blank';
form.innerHTML += '<input type="hidden" name="popup[url]" value="' + window.location.href + '" />';
for (var i = 0; i < window.pinmePanel.selectedImages.length; i++) {
var item = window.pinmePanel.selectedImages[i];
if (!item.isVideo){
form.innerHTML += '<input type="hidden" name="popup[img]['+ i +'][src]" value="' + item.src + '" />';
form.innerHTML += '<input type="hidden" name="popup[img]['+ i +'][alt]" value="' + item.alt.replace(/"/g, '&quot;') + '" />';
}
else {
form.innerHTML += '<input type="hidden" name="popup[img]['+ i +'][type]" value="2" />';
for (prop in item) {
form.innerHTML += '<input type="hidden" name="popup[img]['+ i +']['+ prop +']" value="'+ item[prop] +'" />';
}
}
}
window.pinmePanel.panel.appendChild(form);
form.submit();
window.pinmePanel.close();
};
window.document.onkeydown = function (e)
{
if (!e) e = event;
if (e.keyCode == 27) {
window.pinmePanel.close();
}
};
var css = [];
css.push("div.pinmePanel {font-family: arial; font-size: 12px; color: #000; position: fixed; width: 100%; height: 100%; top: 0; left: 0; z-index: 10000000002; box-sizing: content-box; -moz-box-sizing: content-box; -ms-box-sizing: content-box; -webkit-box-sizing: content-box;}");
css.push("div.pinmePanel div { display: block; }");
css.push("div.pinmePanel div, div.pinmePanel a {box-sizing: content-box; -moz-box-sizing: content-box; -ms-box-sizing: content-box; -webkit-box-sizing: content-box;}");
css.push("div.pinmePanel a, div.pinmePanel a:hover {color: #000;}");
css.push("div.pinmePanel div.pinmeHeader {width: 95%; margin: 5px auto; text-align: center;}");
css.push("div.pinmePanel div.pinmeTitleHeader {font-size:16px; padding-top: 20px; text-align: center;}");
css.push("div.pinmePanel div.pinmeClose {background: #fff; text-align: center; cursor: pointer; margin-bottom: 30px; font-size: 14px; padding-top:12px; height:28px; font-weight: bold; border-bottom: 1px solid #ccc;}");
css.push("div.pinmePanel div.pinmeClose:hover {background: #fafafa; color: #fb5350}");
css.push("div.pinmePanel .pinmeImage {display: inline-block; cursor: pointer; position: relative; width: 120px; background: #ccc; height: 120px; overflow: hidden;margin:5px; border: 1px solid #000;}");
css.push("div.pinmePanel .pinmeIcoVideo {background: url('"+baseNoSchemaStaticUrl+"asset/rele/img/face/ico_video.png') no-repeat; width:26px;height:30px; position:absolute; z-index:2; right:3px;top:3px;}");
css.push("div.pinmePanel .pinmeSelectButton {background: url('"+baseNoSchemaStaticUrl+"asset/rele/img/widget/button_select.png') no-repeat; width:71px;height:25px; position:absolute; z-index:3; left:25px;top:45px; display:none;}");
css.push("div.pinmePanel .pinmeImage.selected .pinmeSelectButton {background: url('"+baseNoSchemaStaticUrl+"asset/rele/img/widget/button_deselect.png') no-repeat;}");
css.push("div.pinmePanel .pinmeImage:hover .pinmeSelectButton {display:block;}");
if (isChrome() || isSafari()) css.push("div.pinmePanel .pinmeImage {display: block; float: left;}");
css.push("div.pinmePanel .pinmeImage.selected {border: 1px solid #fc7573;}");
css.push("div.pinmePanel div.pinmeImageContainer {max-height: 50%; position: relative; background:#fff; overflow: auto; text-align: center; width: 94%; margin: 0px auto; border: 1px solid #ccc; padding: 10px;}");
css.push("div.pinmePanel .pinmeImage img {width: 120px; border: 0px;}");
css.push("div.pinmePanel .pinmeImage div.pinmeInfo {width: 112px; font-size: 11px; padding: 4px; position: absolute; bottom: 0px; left: 0px; color: #fff; text-align: center; background: #000;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=70);-khtml-opacity: 0.7;opacity: 0.7;}");
css.push("div.pinmePanel .pinmeImage.selected div.pinmeInfo {background: #fc7573;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);-khtml-opacity: 1;opacity: 1;}");
css.push("div.pinmeBlock {position:fixed;width:100%;height:100%;z-index: 10000000001;background:#fff;top: 0; left: 0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=90);-khtml-opacity: 0.9;opacity: 0.9;}");
css.push("div.pinmePanel a.pinmeButton {display: none; background: #fc7573; color: #fff; margin: 20px auto 0px; padding: 15px 0px; font-size:16px; text-align: center; width: 200px; bottom: 5%; position: fixed; left: 50%; margin-left: -100px; text-decoration: none; border-radius: 4px;}");
css.push("div.pinmePanel a.pinmeButton:hover {text-decoration: none;}");
//ie quirkmode fix
if (isIE() && document.compatMode != 'CSS1Compat') {
css.push("div.pinmePanel, div.pinmeBlock {position: absolute;}");
css.push("div.pinmePanel div.pinmeClose {height:40px;}");
css.push("div.pinmePanel a.pinmeButton {height: 56px; margin-left:40%;}");
css.push("div.pinmePanel .pinmeImage div.pinmeInfo {width: 122px;}");
}
css = css.join("\n");
window.pinmePanel.style = document.createElement("style");
window.pinmePanel.style.type = "text/css";
window.pinmePanel.style.media = "screen";
if (isIE()) {
window.pinmePanel.style.styleSheet.cssText = css;
document.getElementsByTagName("head")[0].appendChild(window.pinmePanel.style)
} else {
if (navigator.userAgent.lastIndexOf("Safari/") > 0 && parseInt(navigator.userAgent.substr(navigator.userAgent.lastIndexOf("Safari/") + 7, 7)) < 533) {
window.pinmePanel.style.innerText = css;
} else {
window.pinmePanel.style.innerHTML = css;
}
document.body.appendChild(window.pinmePanel.style)
}
window.pinmePanel.block = document.createElement('div');
addClass(window.pinmePanel.block, 'pinmeBlock');
document.body.appendChild(window.pinmePanel.block);
window.pinmePanel.panel = document.createElement('div');
addClass(window.pinmePanel.panel, 'pinmePanel');
document.body.appendChild(window.pinmePanel.panel);
window.pinmePanel.panel.innerHTML += '<div class="pinmeClose" id="' + pinmeUID + '_pinmeClose">Отменить</div>';
window.pinmePanel.panel.innerHTML += '<div class="pinmeHeader"><a href="'+baseUrl+'" title="Pinme.ru" target="_blank"><img src="'+baseNoSchemaStaticUrl+'asset/rele/img/widget/small_logo.png" alt="Pinme.ru" width="91px" height="38px" /></a><div class="pinmeTitleHeader">Выберите картинки:</div></div>';
window.pinmePanel.imageContainer = document.createElement('div');
addClass(window.pinmePanel.imageContainer, 'pinmeImageContainer');
window.pinmePanel.panel.appendChild(window.pinmePanel.imageContainer);
window.pinmePanel.submitButton = document.createElement('a');
window.pinmePanel.submitButton.href = '#';
window.pinmePanel.submitButton.innerHTML = 'Далее &raquo;';
addClass(window.pinmePanel.submitButton, 'pinmeButton');
window.pinmePanel.submitButton.onclick = function()
{
window.pinmePanel.submit();
return false;
};
window.pinmePanel.panel.appendChild(window.pinmePanel.submitButton);
window.document.getElementById(pinmeUID + '_pinmeClose').addEventListener('click', window.pinmePanel.close);
}
var imagesSrc = [];
var videoId = null;
window.pinmePanel.images = [];
window.pinmePanel.selectedImages = [];
var meta = document.getElementsByTagName('meta');
for (var i=0; i<meta.length; i++) {
if (meta[i].name == 'pinme' && meta[i].content == 'nopin') {
alert('К сожалению, этот сайт не позволяет добавлять свои изображения на Pinme');
return false;
}
}
// Youtube (direct)
if ((videoId = /^https?:\/\/(www\.)?youtube\.com\/watch.+v=([a-zA-Z0-9\-_]+)/.exec(window.location.href)) && (videoId=videoId[2]) && !in_array(videoId, imagesSrc)) {
if (!in_array(videoId, imagesSrc)) {
var duration = /T(\d{1,2})M(\d{1,2})/.exec(document.querySelectorAll("meta[itemprop='duration']")[0].content);
duration = parseInt(duration[1]) * 60 + parseInt(duration[2]);
window.pinmePanel.images.push({
isVideo: true,
src: window.location.href,
alt: document.title.replace(/\s+\-\s+YouTube$/, ''),
thumb: 'http://img.youtube.com/vi/' + videoId + '/0.jpg',
videoId: videoId,
provider: 'youtube',
duration: duration
});
imagesSrc.push(videoId);
}
}
// Rutube (direct)
if (videoId = ( /^https?:\/\/(www\.)?rutube\.ru\/video\/([0-9a-z]+)/.exec(window.location.href))) {
if (!document.querySelectorAll("link[rel=image_src]")[0]){
alert('Pinme не может забрать видео с этой страницы. Перейдите на страницу видео, нажав на соответствующую ссылку сразу после названия видео, или нажав F5 на клавиатуре.');
return false;
}
else {
if (document.querySelectorAll("meta[property='og:video']")[0]){
videoUrl = document.querySelectorAll("meta[property='og:video']")[0].content;
videoId = /video.rutube.ru\/(\d+)/.exec(videoUrl)[1];
}
else{
videoId = videoId[2];
}
if (!in_array(videoId, imagesSrc)){
window.pinmePanel.images.push({
isVideo: true,
src: document.querySelectorAll("link[rel=image_src]")[0].href,
alt: document.getElementById('id-title').innerHTML,
thumb: document.querySelectorAll("link[rel=image_src]")[0].href,
videoId: videoId,
provider: 'rutube',
duration: document.querySelectorAll("meta[property='og:video:duration']")[0].content
});
imagesSrc.push(videoId);
}
}
}
if (videoId = ( /^https?:\/\/(www\.)?vimeo\.com\/([0-9a-z]+)/.exec(window.location.href))) {
var src = '';
if (document.querySelectorAll("meta[itemprop=playpageUrl]")[0]){
videoId = /^https?:\/\/(www\.)?vimeo\.com\/([0-9a-z]+)/.exec(document.querySelectorAll("meta[itemprop=playpageUrl]")[0].content);
src = document.querySelectorAll("meta[itemprop=playpageUrl]")[0].content;
videoId = videoId[2];
} else if (document.querySelectorAll('meta[property="og:url"]')[0]){
videoId = /^https?:\/\/(www\.)?vimeo\.com\/([0-9a-z]+)/.exec(document.querySelectorAll('meta[property="og:url"]')[0].content);
src = document.querySelectorAll('meta[property="og:url"]')[0].content;
videoId = videoId[2];
}
if (videoId && !in_array(videoId, imagesSrc)){
window.pinmePanel.images.push({
isVideo: true,
src: src,
alt: document.querySelectorAll('title')[0].innerHTML,
thumb: (document.querySelectorAll('meta[property="og:image"]')[0] ? document.querySelectorAll('meta[property="og:image"]')[0].content : (document.querySelectorAll('meta[name="twitter:image"]')[0] ? document.querySelectorAll('meta[name="twitter:image"]')[0].content : '')),
videoId: videoId,
provider: 'vimeo'
});
imagesSrc.push(videoId);
}
}
// Images
for (var i = 0; i < document.images.length; i++) {
var image = document.images[i];
if (image.width >= 150 && (typeof image.src != 'undefined') && !in_array(image.src, imagesSrc) && image.src.indexOf('data:image') == -1) {
window.pinmePanel.images.push(image);
imagesSrc.push(image.src);
}
}
// Youtube (iframe)
var iframes = document.getElementsByTagName('iframe');
for (var i = 0; i < iframes.length; i++) {
if ((videoId = /^https?:\/\/(www\.)?youtube\.com\/(embed|v)\/([a-zA-Z0-9\-_]+)/.exec(iframes[i].src)) && (videoId=videoId[3]) && !in_array(videoId, imagesSrc)) {
window.pinmePanel.images.push({
isVideo: true,
src: iframes[i].src,
alt: 'Видео Youtube',
thumb: 'http://img.youtube.com/vi/'+videoId+'/0.jpg',
videoId: videoId,
provider: 'youtube'
});
imagesSrc.push(videoId);
}
}
// Youtube/Rutube (embed) @todo проверить работает ли это
var embeds = document.getElementsByTagName('embed');
for (var i = 0; i < embeds.length; i++) {
if ((videoId = /^https?:\/\/(www\.)?youtube\.com\/(embed|v)\/([a-zA-Z0-9\-_]+)/.exec(embeds[i].src)) && (videoId=videoId[3]) && !in_array(videoId, imagesSrc)) {
window.pinmePanel.images.push({
isVideo: true,
src: embeds[i].src,
alt: 'Видео Youtube',
thumb: 'http://img.youtube.com/vi/'+videoId+'/0.jpg',
videoId: videoId,
provider: 'youtube'
});
imagesSrc.push(videoId);
} else if ((videoId = /^https?:\/\/(www\.)?video\.rutube\.ru\/([a-z0-9]+)/.exec(embeds[i].src)) && (videoId=videoId[2]) && !in_array(videoId, imagesSrc)) {
window.pinmePanel.images.push({
isVideo: true,
src: embeds[i].src,
alt: 'Видео Rutube',
thumb: 'http://tub.rutube.ru/thumbs/'+videoId.substr(0,2)+'/'+videoId.substr(2,2)+'/'+videoId+'-2.jpg',
videoId: videoId,
provider: 'rutube'
});
imagesSrc.push(videoId);
}
}
if (!window.pinmePanel.images.length) {
var url = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'pinme.ru/pin/source_failed';
url += ('?url=' + encodeURIComponent(document.location.href));
url += ('&tool=' + encodeURIComponent('button'));
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.send();
alert('К сожалению, подходящих фотографий не найдено');
window.pinmePanel.proceed = false;
return false;
}
temphide('embed');
temphide('iframe');
temphide('object');
if (document.compatMode != 'CSS1Compat') document.body.scrollTop = 0;
initPanel();
var imgHtml = '';
window.pinmePanel.images.sort(function(a,b)
{
if (a.isVideo && !b.isVideo) return -1;
if (!a.isVideo && b.isVideo) return 1;
if (a.isVideo && b.isVideo) return 0;
if ((a.width*a.height) >= (b.width*b.height)) return -1;
return 1;
});
for (var i = 0; i < window.pinmePanel.images.length; i++) {
var img = window.pinmePanel.images[i];
if (img.isVideo) {
imgHtml += '<span class="pinmeImage" id="'+ pinmeUID +'_pinmeImage_' + i + '"><img class="pinmeImg" src="' + img.thumb + '" alt="" title="" /><div class="pinmeInfo">' + img.alt + '</div><div class="pinmeIcoVideo"></div><div class="pinmeSelectButton"></div></span>';
} else {
imgHtml += '<span class="pinmeImage" id="'+ pinmeUID +'_pinmeImage_' + i + '"><img class="pinmeImg" src="' + img.src + '" alt="' + img.alt + '" title="' + img.alt + '" /><div class="pinmeInfo">' + img.width + 'x' + img.height + '</div><div class="pinmeSelectButton"></div></span>';
}
}
window.pinmePanel.imageContainer.innerHTML = imgHtml;
for (var i = 0; i < window.pinmePanel.images.length; i++) {
var el = window.document.getElementById(pinmeUID + '_pinmeImage_' + i);
el.imgId = i;
el.addEventListener('click', window.pinmePanel.select);
}
})();