Current Path : /var/www/u0635749/data/www/hobbyclick.ru/hobbyclick.ru/www/bitrix/js/main/ |
Current File : /var/www/u0635749/data/www/hobbyclick.ru/hobbyclick.ru/www/bitrix/js/main/rating_like.js |
if (!BXRL) { var BXRL = {}; var BXRLW = null; var lastVoteRepo = {}; var lastReactionRepo = {}; var BXRLParams = { pathToUserProfile: null }; } RatingLike = function(likeId, entityTypeId, entityId, available, userId, localize, template, pathToUserProfile, pathToAjax) { var key = entityTypeId+'_'+entityId; this.enabled = true; this.likeId = likeId; this.entityTypeId = entityTypeId; this.entityId = entityId; this.available = (available == 'Y'); this.userId = userId; this.localize = localize; this.template = template; this.pathToUserProfile = pathToUserProfile; this.pathToAjax = ( BX.type.isNotEmptyString(pathToAjax) ? pathToAjax : '/bitrix/components/bitrix/rating.vote/vote.ajax.php' ); this.box = BX('bx-ilike-button-'+likeId); if (this.box === null) { this.enabled = false; return false; } this.button = BX.findChild(this.box, { className: 'bx-ilike-left-wrap' }, true, false); this.buttonText = BX.findChild(this.button, { className: 'bx-ilike-text' }, true, false); this.count = BX.findChild(this.box, { tagName: 'span', className: 'bx-ilike-right-wrap' }, true, false); if (!this.count) { this.count = BX('bx-ilike-count-' + likeId); } this.countText = BX.findChild(this.count, { className: 'bx-ilike-right' }, true, false); this.topPanelContainer = BX('feed-post-emoji-top-panel-container-' + likeId); this.topPanel = BX('feed-post-emoji-top-panel-' + likeId); this.topUsersText = BX('bx-ilike-top-users-' + likeId); this.topUsersDataNode = BX('bx-ilike-top-users-data-' + likeId); this.userReactionNode = BX('bx-ilike-user-reaction-' + likeId); this.reactionsNode = BX('feed-post-emoji-icons-' + likeId); this.popup = null; this.popupId = null; this.popupTimeoutIdShow = null; this.popupTimeoutIdList = null; this.popupContent = BX.findChild(BX('bx-ilike-popup-cont-' + likeId), {tagName:'span', className:'bx-ilike-popup'}, true, false); this.popupContentPage = 1; this.popupTimeout = false; this.likeTimeout = false; this.mouseOverHandler = null; this.version = (BXRL.render && this.topPanel ? 2 : 1); this.mouseInShowPopupNode = {}; this.listXHR = null; if (typeof lastVoteRepo[key] != 'undefined') { this.lastVote = lastVoteRepo[key]; var ratingNode = (template == 'standart' ? this.button: this.count); if (this.lastVote == 'plus') { BX.addClass(ratingNode, 'bx-you-like'); } else { BX.removeClass(ratingNode, 'bx-you-like'); } } else { this.lastVote = BX.hasClass(template == 'standart'? this.button: this.count, 'bx-you-like')? 'plus': 'cancel'; lastVoteRepo[key] = this.lastVote; } if (typeof lastReactionRepo[key] != 'undefined') { this.lastReaction = lastReactionRepo[key]; this.count.setAttribute('data-myreaction', this.lastReaction); } else { var lastReaction = this.count.getAttribute('data-myreaction'); this.lastReaction = (BX.type.isNotEmptyString(lastReaction) ? lastReaction : 'like'); lastReactionRepo[key] = this.lastReaction; } if ( this.topPanelContainer && typeof BXRL.manager != 'undefined' ) { BXRL.manager.addEntity(key, this); } }; RatingLike.Draw = function(likeId, params) { var i = likeId; var element = BXRL[i]; element.countText.innerHTML = parseInt(params.TOTAL_POSITIVE_VOTES); if ( typeof params.TYPE != 'undefined' && typeof params.USER_ID != 'undefined' && parseInt(params.USER_ID) > 0 && typeof params.USER_DATA != 'undefined' && typeof params.USER_DATA.WEIGHT != 'undefined' ) { var userWeight = parseFloat(params.USER_DATA.WEIGHT); var usersData = ( BXRL[i].topUsersDataNode ? JSON.parse(BXRL[i].topUsersDataNode.getAttribute('data-users')) : false ); if ( params.TYPE != 'CHANGE' && BX.type.isPlainObject(usersData) ) { usersData.TOP = Object.values(usersData.TOP); var recalcNeeded = (usersData.TOP.length < 2); for(var k in usersData.TOP) { if (recalcNeeded) { break; } if (!usersData.TOP.hasOwnProperty(k)) { continue; } if ( ( params.TYPE == 'ADD' && userWeight > usersData.TOP[k].WEIGHT ) || ( params.TYPE == 'CANCEL' && params.USER_ID == usersData.TOP[k].ID ) ) { recalcNeeded = true; } } if (recalcNeeded) { if ( params.TYPE == 'ADD' && params.USER_ID != BX.message('USER_ID') ) { if (!usersData.TOP.find(function(a) { return a.ID == params.USER_ID })) { usersData.TOP.push({ ID: parseInt(params.USER_ID), NAME_FORMATTED: params.USER_DATA.NAME_FORMATTED, WEIGHT: parseFloat(params.USER_DATA.WEIGHT) }); } } else if (params.TYPE == 'CANCEL') { usersData.TOP = usersData.TOP.filter(function(a) { return a.ID != params.USER_ID }); } usersData.TOP.sort(function(a, b) { if (a.WEIGHT == b.WEIGHT) { return 0; } return (a.WEIGHT > b.WEIGHT) ? -1 : 1; }); if ( usersData.TOP.length > 2 && params.TYPE == 'ADD' ) { usersData.TOP.pop(); usersData.MORE++; } } else { if (params.TYPE == 'ADD') { usersData.MORE = ( typeof usersData.MORE != 'undefined' ? parseInt(usersData.MORE) + 1 : 1 ); } else if (params.TYPE == 'CANCEL') { usersData.MORE = ( typeof usersData.MORE != 'undefined' && parseInt(usersData.MORE) > 0 ? parseInt(usersData.MORE) - 1 : 0 ); } } BXRL[i].topUsersDataNode.setAttribute('data-users', JSON.stringify(usersData)); if (BXRL[i].topUsersText) { BXRL[i].topUsersText.innerHTML = BXRL.render.getTopUsersText({ you: ( params.USER_ID == BX.message('USER_ID') ? params.TYPE != 'CANCEL' : BX.hasClass(BXRL[i].count, 'bx-you-like') ), top: usersData.TOP, more: usersData.MORE }); } } if ( BX.type.isNotEmptyString(params.REACTION) && BX.type.isNotEmptyString(params.REACTION_OLD) && params.TYPE == 'CHANGE' ) { BXRL.render.setReaction({ likeId: i, rating: BXRL[i], action: 'change', userReaction: params.REACTION, userReactionOld: params.REACTION_OLD, totalCount: params.TOTAL_POSITIVE_VOTES, userId: params.USER_ID }); } else if ( BX.type.isNotEmptyString(params.REACTION) && BX.util.in_array(params.TYPE, ['ADD', 'CANCEL']) ) { BXRL.render.setReaction({ likeId: i, rating: BXRL[i], userReaction: params.REACTION, action: (params.TYPE == 'ADD' ? 'add' : 'cancel'), totalCount: params.TOTAL_POSITIVE_VOTES, userId: params.USER_ID }); } } if (BXRL[i].topPanel) { BXRL[i].topPanel.setAttribute('data-popup', 'N'); } if (!BXRL[i].userReactionNode) { element.count.insertBefore( BX.create("span", { props : { className : "bx-ilike-plus-one" }, style: {width: (element.countText.clientWidth-8)+'px', height: (element.countText.clientHeight-8)+'px'}, html: (params.TYPE == 'ADD'? '+1': '-1')}) , element.count.firstChild); } if (element.popup) { element.popup.close(); element.popupContentPage = 1; } }; RatingLike.LiveUpdate = function(params) { if (params.USER_ID == BX.message('USER_ID')) { return false; } for(var i in BXRL) { if (!BXRL.hasOwnProperty(i)) { continue; } if ( BXRL[i].entityTypeId == params.ENTITY_TYPE_ID && BXRL[i].entityId == params.ENTITY_ID ) { RatingLike.Draw(i, params); } } if (typeof BXRL.manager != 'undefined') { BXRL.manager.live(params); } }; RatingLike.Set = function(likeId, entityTypeId, entityId, available, userId, localize, template, pathToUserProfile, pathToAjax, mobile) { mobile = !!mobile; if (template === undefined) template = 'standart'; if (BXRLParams.pathToUserProfile) { pathToUserProfile = BXRLParams.pathToUserProfile; } if (!BXRL[likeId] || BXRL[likeId].tryToSet <= 5) { var tryToSend = BXRL[likeId] && BXRL[likeId].tryToSet? BXRL[likeId].tryToSet: 1; BXRL[likeId] = new RatingLike(likeId, entityTypeId, entityId, available, userId, localize, template, pathToUserProfile, pathToAjax); if (BXRL[likeId].enabled) { RatingLike.Init(likeId, { mobile: mobile }); } else { setTimeout(function(){ BXRL[likeId].tryToSet = tryToSend+1; RatingLike.Set(likeId, entityTypeId, entityId, available, userId, localize, template, pathToUserProfile, pathToAjax, mobile); }, 500); } } }; RatingLike.ClickVote = function(likeId, userReaction, forceAdd) { var cont = null, likeNode = null, likeThumbNode = null; if (typeof userReaction == 'undefined') { userReaction = 'like'; } if ( BXRL[likeId].version == 2 && BXRL[likeId].userReactionNode ) { BXRL.render.hideReactionsPopup({ likeId: likeId }); BXRL.render.blockReactionsPopup(); BX.unbind(document, 'mousemove', BXRL.render.reactionsPopupMouseOutHandler); } clearTimeout(BXRL[likeId].likeTimeout); var active = ( BX.hasClass( (BXRL[likeId].template == 'standart' ? this : BXRL[likeId].count), 'bx-you-like' ) ); forceAdd = !!forceAdd; var change = false, userReactionOld = false; if (active && !forceAdd) { userReaction = ( BXRL[likeId].version == 2 ? BXRL.render.getUserReaction({ userReactionNode: BXRL[likeId].userReactionNode }) : false ); BXRL[likeId].buttonText.innerHTML = BXRL[likeId].localize['LIKE_N']; BXRL[likeId].countText.innerHTML = parseInt(BXRL[likeId].countText.innerHTML)-1; BX.removeClass(BXRL[likeId].template == 'standart'? this: BXRL[likeId].count, 'bx-you-like'); BX.removeClass(BXRL[likeId].button, 'bx-you-like-button'); if (userReaction) { BX.removeClass(BXRL[likeId].button, 'bx-you-like-button-' + userReaction); } BXRL[likeId].likeTimeout = setTimeout(function() { if (BXRL[likeId].lastVote != 'cancel') { RatingLike.Vote(likeId, 'cancel', userReaction); } }, 1000); } else if (active && forceAdd) { change = true; userReactionOld = ( BXRL[likeId].version == 2 ? BXRL.render.getUserReaction({ userReactionNode: BXRL[likeId].userReactionNode }) : false ); if (userReaction != userReactionOld) { if (userReactionOld) { BX.removeClass(BXRL[likeId].button, 'bx-you-like-button-' + userReactionOld); } BX.addClass(BXRL[likeId].button, 'bx-you-like-button-' + userReaction); BXRL[likeId].likeTimeout = setTimeout(function(){ RatingLike.Vote(likeId, 'change', userReaction, userReactionOld); }, 1000); } } else if (!active) { BXRL[likeId].buttonText.innerHTML = BXRL[likeId].localize['LIKE_Y']; BXRL[likeId].countText.innerHTML = parseInt(BXRL[likeId].countText.innerHTML) + 1; BX.addClass(BXRL[likeId].template == 'standart'? this: BXRL[likeId].count, 'bx-you-like'); BX.addClass(BXRL[likeId].button, 'bx-you-like-button'); BX.addClass(BXRL[likeId].button, 'bx-you-like-button-' + userReaction); BXRL[likeId].likeTimeout = setTimeout(function(){ if (BXRL[likeId].lastVote != 'plus') { RatingLike.Vote(likeId, 'plus', userReaction); } else if (userReaction != BXRL[likeId].lastReaction) // http://jabber.bx/view.php?id=99339 { RatingLike.Vote(likeId, 'change', userReaction, BXRL[likeId].lastReaction); } }, 1000); } if (BXRL[likeId].version == 2) { if (change) { BXRL.render.setReaction({ likeId: likeId, rating: BXRL[likeId], action: 'change', userReaction: userReaction, userReactionOld: userReactionOld, totalCount: parseInt(BXRL[likeId].countText.innerHTML) }); } else { BXRL.render.setReaction({ likeId: likeId, rating: BXRL[likeId], action: (active ? 'cancel' : 'add'), userReaction: userReaction, totalCount: parseInt(BXRL[likeId].countText.innerHTML) }); } } if ( !change && BXRL[likeId].version == 2 ) { var dataUsers = ( BXRL[likeId].topUsersDataNode ? JSON.parse(BXRL[likeId].topUsersDataNode.getAttribute('data-users')) : false ); if (dataUsers) { dataUsers.TOP = Object.values(dataUsers.TOP); BXRL[likeId].topUsersText.innerHTML = BXRL.render.getTopUsersText({ you: !active, top: dataUsers.TOP, more: dataUsers.MORE }); } } if ( BXRL[likeId].template == 'light' && !BXRL[likeId].userReactionNode ) { cont = BXRL[likeId].box; likeNode = cont.cloneNode(true); likeNode.id = 'like_anim'; // to not dublicate original id var type = 'normal'; if (BX.findParent(cont, { 'className': 'feed-com-informers-bottom' })) { type = 'comment'; } else if (BX.findParent(cont, { 'className': 'feed-post-informers' })) { type = 'post'; } BX.removeClass(likeNode, 'bx-ilike-button-hover'); BX.addClass(likeNode, 'bx-like-anim'); BX.adjust(cont.parentNode, { style: { position: 'relative' } }); BX.adjust(likeNode, { style: { position: 'absolute', whiteSpace: 'nowrap', top: (type == 'post' ? '1px' : (type == 'comment' ? '0' : '')) } }); BX.adjust(cont, { style: { visibility: 'hidden' } }); BX.prepend(likeNode, cont.parentNode); new BX.easing({ duration: 140, start: { scale: 100 }, finish: { scale: (type == 'comment' ? 110 : 115) }, transition : BX.easing.transitions.quad, step: function(state) { likeNode.style.transform = "scale(" + state.scale / 100 + ")"; }, complete: function() { likeThumbNode = BX.create('SPAN', { props: { className: (active ? 'bx-ilike-icon' : 'bx-ilike-icon bx-ilike-icon-orange') } }); BX.adjust(likeThumbNode, { style: { position: 'absolute', whiteSpace: 'nowrap' } }); BX.prepend(likeThumbNode, cont.parentNode); new BX.easing({ duration: 140, start: { scale: (type == 'comment' ? 110 : 115) }, finish: { scale: 100 }, transition : BX.easing.transitions.quad, step: function(state) { likeNode.style.transform = "scale(" + state.scale / 100 + ")"; }, complete: function() { } }).animate(); var propsStart = { opacity: 100, scale: (type == 'comment' ? 110 : 115), top: 0 }; var propsFinish = { opacity: 0, scale: 200, top: (type == 'comment' ? -3 : -2) }; if (type != 'comment') { propsStart.left = -5; propsFinish.left = -13; } new BX.easing({ duration: 200, start: propsStart, finish: propsFinish, transition : BX.easing.transitions.linear, step: function(state) { likeThumbNode.style.transform = "scale(" + state.scale / 100 + ")"; likeThumbNode.style.opacity = state.opacity / 100; if (type != 'comment') { likeThumbNode.style.left = state.left + 'px'; } likeThumbNode.style.top = state.top + 'px'; }, complete: function() { likeNode.parentNode.removeChild(likeNode); likeThumbNode.parentNode.removeChild(likeThumbNode); BX.adjust(cont.parentNode, { style: { position: 'static' } }); BX.adjust(cont, { style: { visibility: 'visible' } }); } }).animate(); } }).animate(); } BX.removeClass(this.box, 'bx-ilike-button-hover'); }; RatingLike.Init = function(likeId, params) { if (typeof params == 'undefined') { params = {}; } if (typeof BXRL.manager != 'undefined') { BXRL.manager.init(params); } // like/unlike button if (BXRL[likeId].available) { var eventNode = ( BXRL[likeId].template == 'standart' ? BXRL[likeId].button : BXRL[likeId].buttonText ); if ( BXRL[likeId].version >= 2 && BXRL.manager.mobile ) { BX.bind( eventNode, 'touchstart', BX.delegate(function(e) { BXRL.manager.startScrollTop = ( ( document.documentElement && document.documentElement.scrollTop ) || document.body.scrollTop ); }) ); } var eventName = ( typeof BXRL.manager != 'undefined' && BXRL.manager.mobile ? 'touchend' : 'click' ); BX.bind( eventNode, eventName, BX.delegate(function(e) { if ( BXRL[likeId].version >= 2 && BXRL.manager.mobile && BXRL.render.blockTouchEndByScroll ) { BXRL.render.blockTouchEndByScroll = false; return; } if ( BXRL[likeId].version < 2 || !BXRL.manager.mobile || !BXRL.render.reactionsPopupLikeId ) { if ( BXRL[likeId].version >= 2 && BXRL.manager.mobile ) { var currentScrollTop = ( ( document.documentElement && document.documentElement.scrollTop ) || document.body.scrollTop ); if (Math.abs(currentScrollTop - BXRL.manager.startScrollTop) > 2) { return; } } RatingLike.ClickVote(likeId); } if (BXRL[likeId].version == 2) { BXRL.render.afterClick({ likeId: likeId }); } e.preventDefault(); }, this) ); if ( typeof BXRL.manager == 'undefined' || !BXRL.manager.mobile ) { // Hover/unHover like-button BX.bind(BXRL[likeId].box, 'mouseover', function() {BX.addClass(this, 'bx-ilike-button-hover')}); BX.bind(BXRL[likeId].box, 'mouseout', function() {BX.removeClass(this, 'bx-ilike-button-hover')}); } else { BXRL[likeId].pathToAjax = BX.message('SITE_DIR') + 'mobile/ajax.php?mobile_action=like'; BX.bind(BXRL[likeId].topPanel, 'click', function(e) { BXRL.render.openMobileReactionsPage({ entityTypeId: BXRL[likeId].entityTypeId, entityId: BXRL[likeId].entityId }); e.stopPropagation(); }); } } else if (BXRL[likeId].buttonText != undefined) { BXRL[likeId].buttonText.innerHTML = BXRL[likeId].localize['LIKE_D']; BXRL[likeId].buttonText.classList.add('bx-ilike-text-unavailable'); } // get like-user-list var clickShowPopupNode = ( BXRL[likeId].topUsersText ? BXRL[likeId].topUsersText : BXRL[likeId].count ); if ( typeof BXRL.manager == 'undefined' || !BXRL.manager.mobile ) { BX.bind(clickShowPopupNode, 'mouseenter', function(e) { RatingLike.onResultMouseEnter({ likeId: likeId, event: e, nodeId: e.currentTarget.id }); }); BX.bind(clickShowPopupNode, 'mouseleave', BX.proxy(function() { RatingLike.onResultMouseLeave({ likeId: likeId }); }, { likeId: likeId })); } if ( typeof BXRL.manager == 'undefined' || !BXRL.manager.mobile ) { BX.bind(clickShowPopupNode, 'click' , function(e) { RatingLike.onResultClick({ likeId: likeId, event: e, nodeId: e.currentTarget.id }); }); } if ( BXRL[likeId].version == 2 && BXRL[likeId].available && BXRL[likeId].userReactionNode ) { BXRL.render.bindReactionsPopup({ likeId: likeId }); } }; RatingLike.onResultClick = function(params) { var likeId = (BX.type.isNotEmptyString(params.likeId) ? params.likeId : false), clickEvent = (typeof params.event != 'undefined' ? params.event : null), reaction = (BX.type.isNotEmptyString(params.reaction) ? params.reaction : ''); if (BXRL[likeId].resultPopupAnimation) { return; } if ( BXRL[likeId].popup && BXRL[likeId].popup.isShown() ) { BXRL[likeId].popup.close(); } else { clearTimeout(BXRL[likeId].popupTimeoutIdList); clearTimeout(BXRL[likeId].popupTimeoutIdShow); if ( BXRL[likeId].popupContentPage == 1 && ( clickEvent.currentTarget.getAttribute('data-popup') != 'Y' || BXRL[likeId].popupCurrentReaction != reaction ) ) { RatingLike.List(likeId, 1, reaction, true); } RatingLike.OpenWindow( likeId, (clickEvent.currentTarget == BXRL[likeId].count ? null : clickEvent), clickEvent.currentTarget, clickEvent.currentTarget.id ); } }; RatingLike.onResultMouseEnter = function(params) { var likeId = (BX.type.isNotEmptyString(params.likeId) ? params.likeId : false), mouseEnterEvent = (typeof params.event != 'undefined' ? params.event : null), reaction = (BX.type.isNotEmptyString(params.reaction) ? params.reaction : ''), nodeId = (mouseEnterEvent && BX.type.isNotEmptyString(mouseEnterEvent.currentTarget.id) ? mouseEnterEvent.currentTarget.id : ''); BXRL[likeId].mouseInShowPopupNode[reaction] = true; clearTimeout(BXRL[likeId].popupTimeoutIdList); clearTimeout(BXRL[likeId].popupTimeoutIdShow); BXRL[likeId].popupTimeoutIdList = setTimeout(BX.proxy(function() { if (BXRLW == this.likeId) { return false; } if ( BXRL[this.likeId].popupContentPage == 1 && this.target.getAttribute('data-popup') != 'Y' ) { RatingLike.List(this.likeId, 1, this.reaction, true); } BXRL[this.likeId].popupTimeoutIdShow = setTimeout(BX.proxy(function() { BXRL[this._likeId].resultPopupAnimation = true; var _likeId = this._likeId; setTimeout(function() { BXRL[_likeId].resultPopupAnimation = false; }, 500); if (BXRL[this._likeId].mouseInShowPopupNode[this._reaction]) { RatingLike.OpenWindow( this._likeId, null, this._target, this._nodeId ); } }, { _likeId: this.likeId, _reaction: this.reaction, _target: this.target, _nodeId: this.nodeId }), 100); }, { likeId: likeId, target: mouseEnterEvent.currentTarget, reaction: reaction, nodeId: nodeId }), 300); }; RatingLike.onResultMouseLeave = function(params) { var likeId = (BX.type.isNotEmptyString(params.likeId) ? params.likeId : false), reaction = (BX.type.isNotEmptyString(params.reaction) ? params.reaction : ''); BXRL[likeId].mouseInShowPopupNode[reaction] = false; BXRL[likeId].resultPopupAnimation = false; }; RatingLike.OpenWindow = function(likeId, clickEvent, target, targetId) { if (parseInt(BXRL[likeId].countText.innerHTML) == 0) { return; } var bindNode = ( BXRL[likeId].template == 'standart' ? BXRL[likeId].count : ( BXRL[likeId].version == 2 ? ( BX(target) ? BX(target) : (BX.type.isNotEmptyString(targetId) && BX(targetId) ? BX(targetId): null) ) : BXRL[likeId].box ) ); if (!BX(bindNode)) { return; } if (BXRL[likeId].popup == null) { var globalZIndex = RatingLike.getGlobalIndex(BX(bindNode)); BXRL[likeId].popup = new BX.PopupWindow('ilike-popup-'+likeId, bindNode, { lightShadow : true, offsetTop: 0, offsetLeft: ( typeof clickEvent != 'undefined' && clickEvent != null && typeof clickEvent.offsetX != 'undefined' ? (clickEvent.offsetX - 100) : (BXRL[likeId].version == 2 ? -30 : 5) ), autoHide: true, closeByEsc: true, zIndexAbsolute: (globalZIndex > 1000 ? globalZIndex + 1 : 1000), bindOptions: { position: "top" }, animation: "fading-slide", events : { onPopupClose : function() { BXRLW = null; }, onPopupDestroy : function() { } }, content : BX('bx-ilike-popup-cont-'+likeId), className: (BXRL[likeId].topPanel ? 'bx-ilike-wrap-block-react-wrap' : '') + (typeof BXRL.manager != 'undefined' && BXRL.manager.mobile ? ' bx-ilike-mobile-wrap' : '') }); if ( !BXRL[likeId].topPanel && ( typeof BXRL.manager == 'undefined' || !BXRL.manager.mobile ) ) { BXRL[likeId].popup.setAngle({}); BX.bind(BX('ilike-popup-'+likeId), 'mouseout' , function() { clearTimeout(BXRL[likeId].popupTimeout); BXRL[likeId].popupTimeout = setTimeout(function(){ BXRL[likeId].popup.close(); }, 1000); }); BX.bind(BX('ilike-popup-'+likeId), 'mouseover' , function() { clearTimeout(BXRL[likeId].popupTimeout); }); } } else { if ( typeof clickEvent != 'undefined' && clickEvent != null && typeof clickEvent.offsetX != 'undefined' ) { BXRL[likeId].popup.offsetLeft = (clickEvent.offsetX - 100); } if (BX(bindNode)) { BXRL[likeId].popup.setBindElement(bindNode); } } if ( BXRLW != null && BXRLW != likeId ) { BXRL[BXRLW].popup.close(); } BXRLW = likeId; BXRL[likeId].popup.show(); if ( typeof BX.SidePanel != 'undefined' && BX.SidePanel.Instance.getTopSlider() ) { BX.addCustomEvent( BX.SidePanel.Instance.getTopSlider().getWindow(), "SidePanel.Slider:onClose", function removeOnCloseHandler() { BX.removeCustomEvent(BX.SidePanel.Instance.getTopSlider().getWindow(), "SidePanel.Slider:onClose", removeOnCloseHandler); if (typeof BXRL[BXRLW] != 'undefined') { BXRL[BXRLW].popup.close(); } } ); } RatingLike.AdjustWindow(likeId); }; RatingLike.getGlobalIndex = function(element) { var index = 0, propertyValue = ""; do { propertyValue = BX.style(element, "z-index"); if (propertyValue !== "auto") { index = BX.type.stringToInt(propertyValue); } element = element.offsetParent; } while ( element && element.tagName !== "BODY" ); return index; }; RatingLike.Vote = function(likeId, voteAction, voteReaction, voteReactionOld) { if (!BX.type.isNotEmptyString(voteReaction)) { voteReaction = 'like'; } var BMAjaxWrapper = null; if ( typeof BXRL.manager != 'undefined' && BXRL.manager.mobile ) { BMAjaxWrapper = new MobileAjaxWrapper; } var f = (BMAjaxWrapper ? BX.proxy(BMAjaxWrapper.Wrap, BMAjaxWrapper) : BX.ajax), callbackSuccessName = (BMAjaxWrapper ? 'callback' : 'onsuccess'), callbackFailureName = (BMAjaxWrapper ? 'callback_failure' : 'onfailure'); var actionUrl = BXRL[likeId].pathToAjax; actionUrl = BX.util.add_url_param(actionUrl, { b24statAction: 'addLike' }); if ( BXRL[likeId].version >= 2 && BXRL.manager.mobile ) { actionUrl = BX.util.add_url_param(actionUrl, { b24statContext: 'mobile' }); } var ajaxProperties = { url: actionUrl, method: 'POST', dataType: 'json', type: 'json', data: { RATING_VOTE : 'Y', RATING_VOTE_TYPE_ID : BXRL[likeId].entityTypeId, RATING_VOTE_ENTITY_ID : BXRL[likeId].entityId, RATING_VOTE_ACTION : voteAction, RATING_VOTE_REACTION : voteReaction, sessid: BX.bitrix_sessid() } }; ajaxProperties[callbackSuccessName] = function(data) { BXRL[likeId].lastVote = data.action; BXRL[likeId].lastReaction = voteReaction; lastVoteRepo[BXRL[likeId].entityTypeId + '_' + BXRL[likeId].entityId] = data.action; lastReactionRepo[BXRL[likeId].entityTypeId + '_' + BXRL[likeId].entityId] = data.voteReaction; BXRL[likeId].countText.innerHTML = data.items_all; BXRL[likeId].popupContentPage = 1; BXRL[likeId].popupContent.innerHTML = ''; spanTag0 = document.createElement("span"); spanTag0.className = "bx-ilike-wait"; BXRL[likeId].popupContent.appendChild(spanTag0); if (BXRL[likeId].topPanel) { BXRL[likeId].topPanel.setAttribute('data-popup', 'N'); } RatingLike.AdjustWindow(likeId); if( BX('ilike-popup-'+likeId) && BX('ilike-popup-'+likeId).style.display == "block" ) { RatingLike.List(likeId, null, '', true); } if ( BXRL[likeId].version >= 2 && BXRL.manager.mobile ) { BXMobileApp.onCustomEvent('onRatingLike', { action: data.action, ratingId: likeId, entityTypeId : BXRL[likeId].entityTypeId, entityId: BXRL[likeId].entityId, voteAction: voteAction, voteReaction: voteReaction, voteReactionOld: voteReactionOld, userId: BX.message('USER_ID'), userData: (typeof data.user_data != 'undefined' ? data.user_data : null), itemsAll: data.items_all }, true); } }; ajaxProperties[callbackFailureName] = function(data) { var dataUsers = ((BXRL[likeId].topUsersDataNode) ? JSON.parse(BXRL[likeId].topUsersDataNode.getAttribute('data-users')) : false ); if (BXRL[likeId].version == 2) { if (voteAction == 'change') { BXRL.render.setReaction({ likeId: likeId, rating: BXRL[likeId], action: voteAction, userReaction: voteReaction, userReactionOld: voteReactionOld, totalCount: parseInt(BXRL[likeId].countText.innerHTML) }); } else { BXRL.render.setReaction({ likeId: likeId, rating: BXRL[likeId], action: (voteAction == 'cancel' ? 'add' : 'cancel'), userReaction: voteReaction, totalCount: ( voteAction == 'cancel' ? parseInt(BXRL[likeId].countText.innerHTML) + 1 : parseInt(BXRL[likeId].countText.innerHTML) - 1 ) }); } if (BXRL[likeId].buttonText) { if (voteAction == 'add') { BXRL[likeId].buttonText.innerHTML = BX.message('RATING_LIKE_EMOTION_LIKE_CALC'); } else if (voteAction == 'change') { BXRL[likeId].buttonText.innerHTML = BX.message('RATING_LIKE_EMOTION_' + voteReactionOld.toUpperCase() + '_CALC'); } else { BXRL[likeId].buttonText.innerHTML = BX.message('RATING_LIKE_EMOTION_' + voteReaction.toUpperCase() + '_CALC'); } } } if ( dataUsers && voteAction != 'change' && BXRL[likeId].version == 2 ) { dataUsers.TOP = Object.values(dataUsers.TOP); BXRL[likeId].topUsersText.innerHTML = BXRL.render.getTopUsersText({ you: (voteAction == 'cancel'), // negative top: dataUsers.TOP, more: dataUsers.MORE }); } }; f(ajaxProperties); return false; }; RatingLike.List = function(likeId, page, reaction, clear) { if (parseInt(BXRL[likeId].countText.innerHTML) == 0) { return false; } reaction = (BX.type.isNotEmptyString(reaction) ? reaction : ''); if (page == null) { page = ( BXRL[likeId].version == 2 ? (typeof BXRL.render.popupPagesList[reaction] != 'undefined' ? BXRL.render.popupPagesList[reaction] : 1) : BXRL[likeId].popupContentPage ); } if ( clear && page == 1 && BXRL[likeId].version == 2 ) { BXRL.render.clearPopupContent({ likeId: likeId }); } if (BXRL[likeId].listXHR) { BXRL[likeId].listXHR.abort(); } BXRL[likeId].listXHR = BX.ajax({ url: BXRL[likeId].pathToAjax, method: 'POST', dataType: 'json', data: { RATING_VOTE_LIST : 'Y', RATING_VOTE_TYPE_ID : BXRL[likeId].entityTypeId, RATING_VOTE_ENTITY_ID : BXRL[likeId].entityId, RATING_VOTE_LIST_PAGE : page, RATING_VOTE_REACTION : (reaction == 'all' ? '' : reaction), PATH_TO_USER_PROFILE : BXRL[likeId].pathToUserProfile, sessid: BX.bitrix_sessid() }, onsuccess: function(data) { if (!data) { return false; } BXRL[likeId].countText.innerHTML = data.items_all; if (parseInt(data.items_page) == 0) { return false; } if (BXRL[likeId].version == 2) { BXRL.render.buildPopupContent({ likeId: likeId, reaction: reaction, rating: BXRL[likeId], page: page, data: data, clear: clear }); BXRL[likeId].topPanel.setAttribute('data-popup', 'Y'); } else { if (page == 1) { BXRL[likeId].popupContent.innerHTML = ''; spanTag0 = document.createElement("span"); spanTag0.className = "bx-ilike-bottom_scroll"; BXRL[likeId].popupContent.appendChild(spanTag0); } BXRL[likeId].popupContentPage += 1; var avatarNode = null; for (var i = 0; i < data.items.length; i++) { if (data.items[i]['PHOTO_SRC'].length > 0) { avatarNode = BX.create("IMG", { attrs: {src: data.items[i]['PHOTO_SRC']}, props: {className: "bx-ilike-popup-avatar-img"} }); } else { avatarNode = BX.create("IMG", { attrs: {src: '/bitrix/images/main/blank.gif'}, props: {className: "bx-ilike-popup-avatar-img bx-ilike-popup-avatar-img-default"} }); } BXRL[likeId].popupContent.appendChild( BX.create("A", { attrs: { href: data.items[i]['URL'], target: '_blank' }, props: { className: "bx-ilike-popup-img" + (!!data.items[i]['USER_TYPE'] ? " bx-ilike-popup-img-" + data.items[i]['USER_TYPE'] : "") }, children: [ BX.create("SPAN", { props: { className: "bx-ilike-popup-avatar-new" }, children: [ avatarNode, BX.create("SPAN", { props: {className: "bx-ilike-popup-avatar-status-icon"} }) ] }), BX.create("SPAN", { props: { className: "bx-ilike-popup-name-new" }, html: data.items[i]['FULL_NAME'] }) ] }) ); } } RatingLike.AdjustWindow(likeId); RatingLike.PopupScroll(likeId); }, onfailure: function(data) {} }); return false; }; RatingLike.AdjustWindow = function(likeId) { if (BXRL[likeId].popup != null) { BXRL[likeId].popup.bindOptions.forceBindPosition = true; BXRL[likeId].popup.adjustPosition(); BXRL[likeId].popup.bindOptions.forceBindPosition = false; } }; RatingLike.PopupScroll = function(likeId) { var contentContainerNodeList = BX.findChildren(BXRL[likeId].popupContent, { className: 'bx-ilike-popup-content' }, true); // reactions if (contentContainerNodeList.length <= 0) { contentContainerNodeList = [ BXRL[likeId].popupContent ]; } var contentContainerNode = null; for (var i = 0; i < contentContainerNodeList.length; i++) { contentContainerNode = contentContainerNodeList[i]; BX.bind(contentContainerNode, 'scroll' , function() { if (this.scrollTop > (this.scrollHeight - this.offsetHeight) / 1.5) { RatingLike.List(likeId, null, (BXRL[likeId].version == 2 ? BXRL.render.popupCurrentReaction : false)); BX.unbindAll(this); } }); } }; RatingLike.setParams = function(params) { if (typeof params != 'undefined') { if (typeof params.pathToUserProfile != 'undefined') { BXRLParams.pathToUserProfile = params.pathToUserProfile; } } };