Файл: js/api/widgets/al_community.js
Строк: 713
<?php
var Community = {
init: function() {
cur.Rpc = new fastXDM.Client({
onInit: function() {
setTimeout(function () {
Community.resizeWidget();
}, 500);
},
authorised: function (args) {
var href = location.href;
if (href.indexOf('fieldText=') != -1) href = href.replace(/fieldText=.+?(&|$)/, 'fieldText=' + winToUtf(ge('commentFiled').getValue()) + '1');
else href = href + '&fieldText=' + winToUtf(ge('commentFiled').getValue());
if (href.indexOf('autoLogin=1') != -1) href = href.replace('autoLogin=1', 'autoLogin=0');
location.href = href;
return;
},
unauthorised: function (args) {
var href = location.href;
if (href.indexOf('autoLogin=0') != -1) href = href.replace('autoLogin=0', 'autoLogin=1');
else href = href + '&autoLogin=1';
cur.Rpc.callMethod('auth');
location.href = href;
return;
},
mouseMove: function(screenY) {
cur.mouseMove(screenY);
},
mouseUp: function() {
cur.mouseUp();
}
}, {safe: true});
cur.mainDiv = ge('main');
Community.resizeWidget();
if (window.wall) {
wall.postTooltip = function() {};
}
setTimeout(function () {
Community.resizeWidget();
}, 0);
},
resizeWidget: function() {
onBodyResize(true);
if (!cur.mainDiv || !cur.Rpc) return;
var size = getSize(cur.mainDiv)[1];
cur.Rpc.callMethod('resize', size);
},
sendChangeState: function(state, oid, callback, isEvent) {
if (state) {
cur.Rpc.callMethod('publish', 'widgets.groups.joined');
} else {
cur.Rpc.callMethod('publish', 'widgets.groups.leaved');
}
var hiddenDomain = ge('hiddenDomain');
if (hiddenDomain) {
domain = hiddenDomain.value;
} else {
domain = '';
}
ajax.post('/widget_community.php', {
act: 'a_change_state',
state: state,
oid: oid,
hash: cur.hash,
domain: domain,
is_event: isEvent ? 1 : 0
}, {
onDone: function(result, str) {
if (callback) {
callback(result, str);
}
}
});
},
changeGroupState: function(state, callback) {
if (cur.isAdmin) {
if (!confirm(cur.isAdminLang)) { return false; }
}
if (cur.noAuth) {
Community.widgetAuth();
window.gotSession = function(autorzied) {
if (autorzied == -1) {
setTimeout(function () {
location.reload();
}, 1000);
location.href = location.href + '&1';
}
if (autorzied) {
ajax.post('/widget_community.php', {act: 'a_get_info', oid: cur.oid}, {
onDone: function(result) {
if (result.hash) {
cur.noAuth = false;
cur.justAuth = true;
cur.hash = result.hash;
cur.can_subscribe = result.can_subscribe;
if (result.subscribed) {
addClass(cur.join_community, 'community_checked');
} else {
removeClass(cur.join_community, 'community_checked');
}
Community.changeGroupState(state, callback);
}
}
});
} else {
}
}
return false;
} else {
if (!cur.justAuth && ge('community_anim_row')) {
if (state) {
animate(ge('community_anim_row'), {marginLeft: 0}, 200);
ge('members_count').innerHTML = cur.count_in;
} else {
animate(ge('community_anim_row'), {marginLeft: -cur.mWidth}, 200);
ge('members_count').innerHTML = cur.count_out;
}
}
Community.sendChangeState(state, cur.oid);
callback();
return true;
}
},
changeEventState: function(state, oid, btn) {
if (cur.noAuth) {
Community.widgetAuth();
window.gotSession = function(autorzied) {
cur.noAuth = false;
ajax.post('/widget_community.php', {act: 'a_get_info', oid: cur.oid}, {
onDone: function(result) {
if (result.hash) {
cur.hash = result.hash;
cur.can_subscribe = result.can_subscribe;
Community.changeEventState(state, oid, btn);
}
}
});
}
return false;
}
if (state == -1) {
cur.linkCont = btn.innerHTML;
btn.innerHTML = '<img src="/images/upload.gif" />';
} else {
lockButton(btn);
}
Community.sendChangeState(state, cur.oid, function(html) {
if (state == -1) {
btn.innerHTML = cur.linkCont;
} else {
unlockButton(btn);
}
ge('community_event_join').innerHTML = html;
Community.resizeWidget();
}, 1);
},
widgetAuth: function() {
var
screenX = typeof window.screenX != 'undefined' ? window.screenX : window.screenLeft,
screenY = typeof window.screenY != 'undefined' ? window.screenY : window.screenTop,
outerWidth = typeof window.outerWidth != 'undefined' ? window.outerWidth : document.body.clientWidth,
outerHeight = typeof window.outerHeight != 'undefined' ? window.outerHeight : (document.body.clientHeight - 22),
features = 'width=554,height=207,left=' + parseInt(screenX + ((outerWidth - 554) / 2), 10) + ',top=' + parseInt(screenY + ((outerHeight - 207) / 2.5), 10);
window.activePopup = window.open('/login.php?app=-1&layout=widgets', 'vk_openapi', features);
function checkWnd() {
if (window.activePopup.closed) {
window.gotSession(true);
} else {
setTimeout(checkWnd, 1000);
}
}
checkWnd();
},
toggleStat: function(oid, width) {
if (cur.statShown) {
setStyle(ge('community_groups_main'), {height: 'auto'});
hide('hide_stat');
show('show_stat');
show('community_content');
hide('stat_info');
setTimeout(Community.resizeWidget, 0);
} else {
cur.oldHeight = getSize('community_groups_main')[1];
show('hide_stat');
hide('show_stat');
hide('community_content');
show('stat_info');
setTimeout(Community.resizeWidget, 0);
setTimeout(Community.resizeWidget, 500);
if (!cur.statLoaded) {
setStyle(ge('community_groups_main'), {height: cur.oldHeight - 8});
setStyle(ge('wcomments_progress'), {marginTop: cur.oldHeight / 2 - 40});
ajax.post('/widget_community.php', {act: 'a_get_stat', width: width, oid: oid}, {
onDone: function(text) {
setStyle(ge('community_groups_main'), {height: 'auto'});
cur.statLoaded = true;
ge('stat_info').innerHTML = text;
setTimeout(Community.resizeWidget, 0);
setTimeout(Community.resizeWidget, 500);
}
});
} else {
setStyle(ge('community_groups_main'), {height: 'auto'});
}
}
cur.statShown = !cur.statShown;
},
membersBox: function(oid) {
cur.Rpc.callMethod('showBox', 'widget_community.php?act=members_box&oid='+oid, {height: 442, width: 498});
},
subscribeGroupState: function(state, oid) {
ajax.post('/widget_community.php', {act: 'a_subscribe', state: state, oid: oid, hash: cur.hash}, {
onDone: function(t) {
},
onFail: function() {
return true;
}
});
return true;
},
hideStat: function(oid, width) {
hide('hide_stat');
show('show_stat');
show('community_content');
hide('stat_info');
setTimeout(Community.resizeWidget, 0);
},
subscribeSimple: function() {
Community.changeGroupState(1, function() {
hide('subscribe_button');
show('unsubscribe_button');
if (cur.canSwitch) {
hide('community_friends');
show('community_like');
}
});
},
unsubscribeSimple: function() {
Community.changeGroupState(0, function() {
show('subscribe_button');
hide('unsubscribe_button');
if (cur.canSwitch) {
show('community_friends');
hide('community_like');
}
});
},
headerOver: function(ev) {
if (cur.nameOutTimeout) {
clearTimeout(cur.nameOutTimeout);
}
if (cur.headTween) {
return;
}
var obj = ge('wcommunity_name_cont');
addClass(obj, 'wcommuinty_name_scrolling');
var anim = ge('wcommunity_name_anim');
var width = getSize(anim)[0] - getSize(obj)[0];
if (width < 0) {
return false;
}
var speed = width * 40;
if (cur.headTimeout) {
clearTimeout(cur.headTimeout);
}
cur.headTween = animate(anim, {marginLeft: -width}, {duration: speed, transition: Fx.Transitions.linear, onComplete:function() {
cur.headTimeout = setTimeout(function() {
cur.headTween = animate(anim, {marginLeft: 0}, {duration: speed, transition: Fx.Transitions.linear, onComplete: function() {
cur.headTween = false;
cur.headTimeout = setTimeout(Community.headerOver.pbind(ev), 1000);
}});
}, 1000);
}});
},
headerOut: function(ev) {
var obj = ge('wcommunity_name_cont');
if (cur.headTimeout) {
clearTimeout(cur.headTimeout);
}
cur.nameOutTimeout = setTimeout(function() {
var anim = ge('wcommunity_name_anim');
cur.headTween = animate(anim, {marginLeft: 0}, 200, function() {
removeClass(obj, 'wcommuinty_name_scrolling');
cur.headTween = false;
});
if (cur.headTimeout) {
clearTimeout(cur.headTimeout);
}
}, 50);
},
_eof: 1};try{stManager.done('api/widgets/al_community.js');}catch(e){}
window.gotSession = function(session_data) {
//pass
}
var communityWall = {
postTooltip: function(el, post, opts) {
if (cur.viewAsBox) return;
var poll = geByClass('poll', el);
if (poll.length && cur.baseUrl) {
el.href = cur.baseUrl + 'wall'+post;
}
return true;
},
showMore: function() {
if (cur.wallLoaded) {
return false;
}
if (cur.loadingMore) {
cur.meedMore = true;
return;
}
cur.loadingMore = true;
hide('wall_more_text');
show('wall_more_progress');
var params = {
act: 'load_more',
offset: cur.offset,
oid: cur.oid
};
if (cur.mode) {
params.mode = 1;
}
ajax.post('/widget_community.php', params, {
onDone: function(wallCont, count, limit) {
cur.offset += limit;
if (cur.offset >= count) {
cur.wallLoaded = true;
hide('wall_more_cont');
}
ge('page_wall_posts').appendChild(ce('div', {
innerHTML: wallCont
}))
Community.resizeWidget();
setTimeout(Community.resizeWidget, 500);
show('wall_more_text');
hide('wall_more_progress');
cur.loadingMore = false;
if (cur.meedMore) {
cur.meedMore = false;
setTimeout(function() {
communityWall.showMore()
}, 0);
}
if (cur.scrollbar) {
cur.scrollbar.update();
}
},
onFail: function() {
return true;
}
})
}
}
function goAway(url) { return true; }
function showPhoto (photo, list) {
var h = 607, w = 607;
cur.Rpc.callMethod('showBox', 'al_photos.php?' + ajx2q({act: 'photo_box', photo: photo, wall_owner: photo.split('_')[0], widget: 1, list: list, widget_width: 654, widget: 1}), {height: window.outerHeight || screen.availHeight || 768, width: window.outerWidth || screen.availWidth || 1028});
return false;
}
function showVideo(video, list) {
cur.Rpc.callMethod('showBox', 'al_video.php?' + ajx2q({act: 'video_box', video: video, list: list, wall_owner: video.split('_')[0], widget_width: 654, widget: 1}), {height: window.outerHeight || screen.availHeight || 768, width: window.outerWidth || screen.availWidth || 1028});
return false;
}
function showFriends(oid) {
if (oid > 0) return true;
cur.Rpc.callMethod('showBox', 'al_page.php?' + ajx2q({act: 'show_members_box', gid: -oid, tab: 'friends', widget: 1}), {height: 495, width: 432});
return false;
}
// Tiny Scrollbars start (from al_community.js)
(function(w) {
w.Scrollbar = function (obj, options) {
this.obj = obj = ge(obj);
this.options = options || {};
setTimeout((function() {
if (!obj) return;
setStyle(obj, {
overflow: 'hidden'
});
var size = getSize(obj);
if (size[0] < 100 && options.width) {
size[0] = options.width - 2;
}
this.scrollHeight = size[1];
this.scrollbar = ce('div', {
className: 'scrollbar_cont'
});
setStyle(this.scrollbar, {
right: '1px',
left: 'auto',
height: size[1] + 'px'
});
this.inner = ce('div', {
className: 'scrollbar_inner'
});
this.scrollbar.appendChild(this.inner);
if (options.shadows) {
this.topShadowDiv = ce('div', {
className: 'scrollbar_top'
});
this.bottomShadowDiv = ce('div', {
className: 'scrollbar_bottom',
width: size[0]+'px'
});
this.bottomShadowDiv.style.width = this.topShadowDiv.style.width = size[0]+'px';
obj.parentNode.insertBefore(this.topShadowDiv, obj);
obj.parentNode.insertBefore(this.bottomShadowDiv, obj.nextSibling);
}
obj.parentNode.insertBefore(this.scrollbar, obj);
this.mouseMove = this._mouseMove.bind(this);
this.mouseUp = this._mouseUp.bind(this);
var self = this;
function down(event) {
if (self.moveY) return;
addEvent(w.document, 'mousemove', self.mouseMove);
addEvent(w.document, 'mouseup', self.mouseUp);
self.moveY = event.screenY - (parseInt(self.inner.style.marginTop) || 0);
w.document.body.style.cursor = 'pointer';
addClass(self.inner, 'scrollbar_hovered');
if (options.startDrag) {
options.startDrag();
}
self.isDown = true;
return cancelEvent(event);
}
this.mouseDown = down;
function keydown(event) {
var key = event.keyCode;
switch (key) {
case 40: self.obj.scrollTop += 20; break;
case 38: self.obj.scrollTop -= 20; break;
case 34: self.obj.scrollTop += self.scrollHeight; break;
case 33: self.obj.scrollTop -= self.scrollHeight; break;
default: return true;
}
self.update(true);
return cancelEvent(event);
}
addEvent(obj, 'mousewheel', this.wheel.bind(this));
addEvent(w, 'DOMMouseScroll', this.wheel.bind(this));
addEvent(this.scrollbar, 'mouseover', this.contOver.bind(this));
addEvent(this.scrollbar, 'mouseout', this.contOut.bind(this));
addEvent(this.scrollbar, 'mousedown', this.contDown.bind(this));
if (browser.safari_mobile) {
addEvent(obj, 'touchstart', function(event) {
cur.touchY = event.touches[0].pageY;
//return cancelEvent(event);
});
addEvent(obj, 'touchmove', function(event) {
var touchY = event.touches[0].pageY;
cur.touchDiff = cur.touchY - touchY;
obj.scrollTop += cur.touchDiff;
cur.touchY = touchY;
if (obj.scrollTop > 0 && self.shown !== false) {
self.update(true);
return cancelEvent(event);
}
});
addEvent(obj, 'touchend', function() {
cur.animateInt = setInterval(function() {
cur.touchDiff = cur.touchDiff * 0.9;
if (cur.touchDiff < 1 && cur.touchDiff > -1) {
clearInterval(cur.animateInt);
} else {
obj.scrollTop += cur.touchDiff;
self.update(true);
}
}, 0);
})
}
addEvent(this.inner, 'mousedown', down);
addEvent(w, 'keydown', keydown);
if (this.contHeight() <= this.scrollHeight) {
hide(this.bottomShadowDiv);
} else {
this.bottomShadow = true;
}
this.inited = true;
this.update(true);
}).bind(this), 0);
}
Scrollbar.prototype.contOver = function() {
this.isOut = false;
addClass(this.scrollbar, 'scrollbar_c_overed');
}
Scrollbar.prototype.contOut = function() {
this.isOut = true;
if (this.isDown) return;
removeClass(this.scrollbar, 'scrollbar_c_overed');
}
Scrollbar.prototype.contDown = function(ev) {
var y = ev.offsetY - this.innerHeight / 2 + 5;// - this.innerHeight;
var scrH = this.scrollHeight - this.innerHeight;
var newScroll = Math.floor((this.contHeight() - this.scrollHeight) * Math.min(1, y / scrH));
this.obj.scrollTop = newScroll;
this.update(true);
this.mouseDown(ev);
}
w.Scrollbar.prototype._mouseMove = function(event) {
this.obj.scrollTop = Math.floor((this.contHeight() - this.scrollHeight) * Math.min(1, (event.screenY - this.moveY) / (this.scrollHeight - 26)));
this.update(true);
return false;
}
w.Scrollbar.prototype._mouseUp = function(event) {
this.moveY = false;
this.isDown = false;
if (this.isOut) {
this.contOut();
}
removeEvent(w.document, 'mousemove', this.mouseMove);
removeEvent(w.document, 'mouseup', this.mouseUp);
w.document.body.style.cursor = 'default';
removeClass(this.inner, 'scrollbar_hovered');
if (this.options.stopDrag) {
this.options.stopDrag();
}
return false;
}
w.Scrollbar.prototype.wheel = function(event) {
if (!event) event = window.event;
var delta = 0;
if (event.wheelDeltaY || event.wheelDelta) {
delta = (event.wheelDeltaY || event.wheelDelta) / 2;
} else if (event.detail) {
delta = -event.detail * 10
}
var stWas = this.obj.scrollTop;
this.obj.scrollTop -= delta;
if (stWas != this.obj.scrollTop && this.shown !== false) {
this.update(true);
return false;
}
}
w.Scrollbar.prototype.contHeight = function() {
if (this.contHashCash) {
return this.contHashCash;
}
var nodes = this.obj.childNodes;
var height = 0;
var i = nodes.length;
while (i--) {
height += nodes[i].offsetHeight || 0;
}
this.contHashCash = height;
return height;
}
w.Scrollbar.prototype.update = function(noChange, updateScroll) {
if (!this.inited) {
return;
}
if (!noChange) {
this.contHashCash = false;
if (this.moveY) {
return true;
}
}
if (updateScroll) {
var size = getSize(this.obj);
this.scrollHeight = size[1];
}
var height = this.contHeight();
if (height <= this.scrollHeight) {
hide(this.inner);
this.shown = false;
return;
} else if (!this.shown) {
show(this.inner);
this.shown = true;
}
var progress = Math.min(1, this.obj.scrollTop / (height - this.scrollHeight));
if (progress > 0 != this.topShadow && this.topShadowDiv) {
(this.topShadow ? hide : show)(this.topShadowDiv);
this.topShadow = !this.topShadow;
}
if (progress < 1 != this.bottomShadow && this.bottomShadowDiv) {
(this.bottomShadow ? hide : show)(this.bottomShadowDiv);
this.bottomShadow = !this.bottomShadow;
}
this.innerHeight = Math.max(40, Math.floor(this.scrollHeight * this.scrollHeight / height));
this.inner.style.height = this.innerHeight + 'px';
if (height - this.obj.scrollTop < this.scrollHeight * 2) {
this.options.more();
}
this.inner.style.marginTop = Math.floor((this.scrollHeight - this.innerHeight - 4) * progress + 2) + 'px';
// console.log(this.scrollHeight, height, progress);
}
})(window);
// Tiny Scrollbars end
/* Old */
?>