%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/voting.current/templates/.userfield/ |
| Current File : /home/bitrix/www/bitrix/components/bitrix/voting.current/templates/.userfield/script.js |
;(function(window) {
var BX = window.BX;
if (BX["Vote"])
return;
BX.Vote = (function() {
var d = function(){
};
d.prototype = {
};
return d;
})();
var repo = {};
BX.Vote.init = function(params) {
repo[params['cid'] + '_count'] = (repo[params['cid'] + '_count'] || 1);
if (repo[params['cid'] + '_count'] > 100)
throw "Vote with cid " + params['cid'] + " could not be found.";
else if (!BX('vote-' + params['cid']))
setTimeout(function(){ BX.Vote.init(params);}, 100);
else if (!BX('vote-' + params['cid']).hasAttribute("data-bx-bound"))
{
BX('vote-' + params['cid']).setAttribute("data-bx-bound", "vote");
repo[params['cid']] = new BVotedUser({
'CID' : params['cid'],
'controller': BX('vote-' + params['cid']),
'urlTemplate' : params['urlTemplate'],
'nameTemplate' : params['nameTemplate'],
'url' : params['url'],
'voteId' : params['id'],
'startCheck' : params['startCheck']
});
// continue or stop voting
if (BX('vote-' + params['cid'] + '-stop'))
{
BX.bind(BX('vote-' + params['cid'] + '-stop'), "click", function(e) {
voteAJAX(this, params['cid'], this.href, {
VOTE_ID : params['id'],
stopVoting : params['id']
});
return BX.PreventDefault(e);
});
}
else if (BX('vote-' + params['cid'] + '-resume'))
{
BX.bind(BX('vote-' + params['cid'] + '-resume'), "click", function(e) {
voteAJAX(this, params['cid'], this.href, {
VOTE_ID : params['id'],
resumeVoting : params['id']
});
return BX.PreventDefault(e);
});
}
if (BX('vote-' + params['cid'] + '-revote'))
{
BX.bind(BX('vote-' + params['cid'] + '-revote'), "click", function(e) {
voteAJAX(this, params['cid'], this.href, {
VOTE_ID : params['id'],
view_form : 'Y'
});
return BX.PreventDefault(e);
});
}
if (BX('vote-' + params['cid'] + '-act'))
{
BX.bind(BX('vote-' + params['cid'] + '-act'), "click", function(e) {
BX.addClass(BX('vote-' + params['cid'] + '-act'), "feed-add-button-load");
var form = BX('vote-form-' + params['cid']);
if (!!form)
{
voteAJAX(
this,
params['cid'],
form.action,
BX.ajax.prepareForm(form).data
);
}
return BX.PreventDefault(e);
});
}
if (BX('vote-' + params['cid'] + '-results'))
{
BX.bind(BX('vote-' + params['cid'] + '-results'), "click", function(e) {
var link = this,
controller = repo[params['cid']].controller;
VCLinkShowWait(link);
BX.addCustomEvent(
controller,
'OnBeforeChangeData',
function()
{
var res = BX.findParent(controller, {"className" : "bx-vote-block"});
BX.addClass(res, "bx-vote-block-result");
VCLinkCloseWait(link);
}
);
BX.addCustomEvent(
controller,
'OnAfterChangeData',
function()
{
if (!!link)
BX.hide(link);
}
);
repo[params['cid']].send(true);
return BX.PreventDefault(e);
});
}
}
};
var
VCLinkCloseWait = function(el) { BX.removeClass(el, 'bx-vote-loading'); },
VCLinkShowWait = function(el) { BX.addClass(el, 'bx-vote-loading'); },
voteAJAX = function(link, CID, url, data)
{
if (link.disabled === true)
return false;
url = url.
replace(/.AJAX_RESULT=Y/g,'').
replace(/.AJAX_POST=Y/g,'').
replace(/.sessid=[^&]*/g, '').
replace(/.VOTE_ID=([\d]+)/,'').
replace(/.view_form=Y/g, '').
replace(/.view_result=Y/g, '');
data["AJAX_POST"] = "Y";
data["sessid"] = BX.bitrix_sessid();
VCLinkShowWait(link);
BX.ajax({
'method': 'POST',
'processData': false,
'url': url,
'data': data,
'onsuccess': function(result)
{
VCLinkCloseWait(link);
var
ob = BX.processHTML(result, false),
res = BX.findParent(link, {"className" : "bx-vote-block"});
if (!!res)
{
res.innerHTML = ob.HTML;
BX.removeClass(res, "bx-vote-block-result");
BX.removeClass(res, "bx-vote-block-result-view");
if (ob.HTML.indexOf('<form') < 0)
{
BX.addClass(res, "bx-vote-block-result");
}
BX.defer(function()
{
BX.ajax.processScripts(ob.SCRIPT);
})();
}
if (repo[CID])
{
repo[CID].__destruct();
repo[CID] = null;
delete repo[CID];
}
}
});
return true;
};
var BVotedUser = (function(){
var d = function(params) {
this.CID = params["CID"];
this.url = params["url"];
this.urlTemplate = params["urlTemplate"];
this.nameTemplate = params["nameTemplate"];
this.dateTemplate = params["dateTemplate"];
this.data = {};
this.popup = null;
this.controller = params["controller"];
this.startCheck = (!!params["startCheck"] ? parseInt(params["startCheck"]) : false);
this.voteId = params["voteId"];
this.status = "ready";
this.__construct();
};
d.prototype = {
__construct : function() {
var res = BX.findChildren(this.controller, {"tagName" : "A", "className" : "bx-vote-voted-users"}, true), ii,
f = BX.delegate(function() { this.get(); }, this);
for (ii in res)
{
if (res.hasOwnProperty(ii))
{
BX.bind(res[ii], "click", f);
//BX.bind(res[ii], "mouseover", BX.proxy(function(e) { this.init(e); }, this));
//BX.bind(res[ii], "mouseout", BX.proxy(function(e) { this.init(e); }, this));
}
}
this.onPullEvent = BX.delegate(function(command, params)
{
if (command == 'voting' && !!params && params["VOTE_ID"] == this.voteId)
{
var res = BX.findParent(this.controller, {"className" : "bx-vote-block"});
if (!!res && BX.hasClass(res, "bx-vote-block-result"))
{
this.changeData(params);
}
}
}, this);
BX.addCustomEvent("onPullEvent-vote", this.onPullEvent);
},
__destruct : function() {
var res = BX.findChildren(this.controller, {"tagName" : "A", "className" : "bx-vote-voted-users"}, true), ii;
if (!!res)
{
for (ii in res)
{
if (res.hasOwnProperty(ii))
{
BX.unbindAll(res[ii]);
}
}
}
BX.removeCustomEvent("onPullEvent", this.onPullEvent);
},
init : function(e) {
var node = BX.proxy_context;
if (!!node.timeoutOver)
{
clearTimeout(node.timeoutOver);
node.timeoutOver = false;
}
if (e.type == 'mouseover')
{
node.timeoutOver = setTimeout(BX.proxy(function()
{
this.get(node);
if (this.popup)
{
BX.bind(
this.popup.popupContainer,
'mouseout',
BX.proxy(
function()
{
this.popup.timeoutOut = setTimeout(
BX.proxy(
function()
{
if (this.node == node && !!this.popup)
{
this.popup.close();
}
}, this),
400
);
},
this
)
);
BX.bind(
this.popup.popupContainer,
'mouseover' ,
BX.proxy(
function()
{
if (this.popup.timeoutOut)
clearTimeout(this.popup.timeoutOut);
},
this
)
);
}
}, this), 400);
}
},
getID : function() {
return 'vote' + new Date().getTime();
},
make : function(data, needToCheckData) {
if (!this.popup)
return true;
needToCheckData = (needToCheckData !== false);
var
res1 = (this.popup && this.popup.contentContainer ? this.popup.contentContainer : BX('popup-window-content-bx-vote-popup-cont-' + this.CID)),
node = false, res = false, i;
if (this.popup.isNew)
{
node = BX.create("SPAN", {
props : {className : "bx-ilike-popup"},
children : [
BX.create("SPAN", {
props : {className: "bx-ilike-bottom_scroll"}
})
]
}
);
res = BX.create("SPAN", {
props : {className : "bx-ilike-wrap-block"},
children : [
node
]
});
}
else
{
node = BX.findChild(this.popup.contentContainer, {className : "bx-ilike-popup"}, true);
}
if (!!node && typeof data.items == "object")
{
var avatarNode = null;
for (i in data.items)
{
if (data.items.hasOwnProperty(i) && !BX.findChild(node, {tag : "A", attr : {id : ("a" + data["answer_id"] + "u" + data.items[i]['ID'])}}, true))
{
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"}
});
}
node.appendChild(
BX.create("A", {
attrs : {id : ("a" + data["answer_id"] + "u" + data.items[i]['ID'])},
props: {
href:data.items[i]['URL'],
target: "_blank",
className: "bx-ilike-popup-img" + (!!data.items[i]['TYPE'] ? " bx-ilike-popup-img-" + data.items[i]['TYPE'] : "")
},
text: "",
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']
}
)
]
})
);
}
}
}
if (this.popup.isNew)
{
this.popup.isNew = false;
if (!!res1)
{
try
{
res1.removeChild(res1.firstChild);
}
catch(e)
{
}
res1.appendChild(res);
}
}
this.adjustWindow();
if (needToCheckData)
this.popupScroll();
return true;
},
show : function() {
if (this.popup != null && this.node.id != this.popup.nodeID)
this.popup.close();
if (this.popup == null)
{
this.popup = new BX.PopupWindow('bx-vote-popup-cont-' + this.CID, this.node, {
lightShadow : true,
offsetTop: -2,
offsetLeft: 3,
autoHide: true,
closeByEsc: true,
bindOptions: {position: "top"},
events : {
onPopupClose : function() { this.destroy() },
onPopupDestroy : BX.proxy(function() { this.popup = null; }, this)
},
content : BX.create("SPAN", { props: {className: "bx-ilike-wait"}})
});
this.popup.nodeID = this.node.id;
this.popup.isNew = true;
this.popup.show();
}
this.popup.setAngle({position:'bottom'});
this.adjustWindow();
},
adjustWindow : function() {
if (this.popup != null)
{
this.popup.bindOptions.forceBindPosition = true;
this.popup.adjustPosition();
this.popup.bindOptions.forceBindPosition = false;
}
},
popupScroll : function() {
if (this.popup)
{
var res = BX.findChild(this.popup.contentContainer, {"className" : "bx-ilike-popup"}, true);
BX.bind(res, 'scroll' , BX.proxy(this.popupScrollCheck, this));
}
},
popupScrollCheck : function() {
var res = BX.proxy_context;
if (res.scrollTop > (res.scrollHeight - res.offsetHeight) / 1.5)
{
BX.unbind(res, 'scroll' , BX.proxy(this.popupScrollCheck, this));
this.get(this.popup.bindElement);
}
},
get : function(node) {
this.node = (!!node ? node : BX.proxy_context);
if (!this.node)
return false;
if (!this.node.getAttribute("id"))
this.node.setAttribute("id", this.getID());
if ((!this.node.getAttribute("rel") && !this.node.getAttribute("rev")) || parseInt(this.node.innerHTML) <= 0)
return false;
if (this.node.getAttribute("status") === "busy")
return false;
if (!this.node.getAttribute("inumpage"))
this.node.setAttribute("inumpage", "1");
else if (this.node.getAttribute("inumpage") != "done")
this.node.setAttribute("inumpage", (parseInt(this.node.getAttribute("inumpage")) + 1) + "");
this.show();
if (this.data[this.node.getAttribute("id")])
this.make(this.data[this.node.getAttribute("id")], (this.node.getAttribute("inumpage") != "done"));
if (this.node.getAttribute("inumpage") != "done")
{
this.node.setAttribute("status", "busy");
BX.ajax({
url: "/bitrix/components/bitrix/voting.current/templates/.userfield/users.php",
method: 'POST',
dataType: 'json',
data: {
'ID' : this.node.getAttribute("rel"),
'answer_id' : this.node.getAttribute("rev"),
'request_id' : this.node.getAttribute("id"),
'iNumPage' : this.node.getAttribute("inumpage"),
'URL_TEMPLATE' : this.urlTemplate,
'NAME_TEMPLATE' : this.nameTemplate,
'sessid': BX.bitrix_sessid()
},
onsuccess: BX.proxy(function(data) {
if (!!data && !!data.items)
{
data["StatusPage"] = (!!data["StatusPage"] ? data["StatusPage"] : false);
if (data.StatusPage == "done" || data.items.length <= 0)
this.node.setAttribute("inumpage", "done");
var res, items = (this.data[this.node.getAttribute("id")] ? this.data[this.node.getAttribute("id")]["items"] : []);
for (res=0; res<data.items.length; res++)
{
items.push(data.items[res]);
}
this.data[this.node.getAttribute("id")] = data;
this.data[this.node.getAttribute("id")]["items"] = items;
this.make(this.data[this.node.getAttribute("id")], (this.node.getAttribute("inumpage") != "done"));
}
this.node.setAttribute("status", "ready");
}, this),
onfailure: BX.proxy(function() { this.node.setAttribute("status", "ready"); }, this)
});
}
return true;
},
send : function() {
if (this.status === "ready")
{
this.status = "busy";
BX.ajax({
url: this.url.replace(/.AJAX_RESULT=Y/g,'').
replace(/.AJAX_POST=Y/g,'').
replace(/.sessid=[^&]*/g, '').
replace(/.VOTE_ID=([\d]+)/,'').
replace(/.view_form=Y/g, '').
replace(/.view_result=Y/g, ''),
method: 'POST',
dataType: 'json',
data: {
'VOTE_ID' : this.voteId,
'AJAX_RESULT' : 'Y',
'view_result' : 'Y',
'sessid': BX.bitrix_sessid()
},
onsuccess: BX.proxy(function(data) { this.changeData(data);this.status = "ready"; }, this),
onfailure: BX.proxy(function() { this.status = "ready"; }, this)
});
}
},
changeData : function(data) {
data = data["QUESTIONS"];
BX.onCustomEvent(this.controller, 'OnBeforeChangeData');
var question, answer, i, q, per;
for (q in data)
{
if (data.hasOwnProperty(q))
{
question = BX.findChild(this.controller, {"attr" : {"id" : "question" + q}}, true);
if (!!question)
{
for (i in data[q])
{
if (data[q].hasOwnProperty(i))
{
answer = BX.findChild(question, {"attr" : {"id" : ("answer" + i)}}, true);
if (!!answer)
{
per = parseInt(data[q][i]["PERCENT"]);
per = (isNaN(per) ? 0 : per);
BX.adjust(BX.findChild(answer, {"tagName" : "A", "className" : "bx-vote-voted-users"}, true),
{"attrs" : {"id" : "", "rel" : data[q][i]["USERS"], "rev" : i, "inumpage" : false},
"html" : data[q][i]["COUNTER"]});
BX.adjust(BX.findChild(answer, {"tagName" : "SPAN", "className" : "bx-vote-data-percent"}, true),
{"html" : per + '%'});
BX.adjust(BX.findChild(answer, {"tagName" : "DIV", "className" : "bx-vote-result-bar"}, true),
{"style" : {"width" : per + '%'}});
}
}
}
}
}
}
BX.onCustomEvent(this.controller, 'OnAfterChangeData');
}
};
return d;
})();
})(window);