1 WCF
.Poll
={};WCF
.Poll
.Management
=Class
.extend({_container
:null,_count
:0,_inputSize
:0,_maxOptions
:0,init:function(a
,e
,f
){this._count
=0;this._maxOptions
=f
||-1;this._container
=$("#"+a
).children("ol:eq(0)");if(!this._container
.length
){console
.debug("[WCF.Poll.Management] Invalid container id given, aborting.");return}e
=e
||[];this._createOptionList(e
);$(window
).resize($.proxy(this._resize
,this));this._container
.parents("form").submit($.proxy(this._submit
,this));new WCF
.Sortable
.List(a
,"",undefined,undefined,true);this._resize();var d
=this._container
.parents(".tabMenuContent:eq(0)");var c
=d
.wcfIdentify();var b
=this;d
.parents(".tabMenuContainer:eq(0)").on("wcftabsactivate",function(g
,h
){if(h
.newPanel
.wcfIdentify()==c
){b
._resize()}})},_createOptionList:function(b
){for(var d
=0,c
=b
.length
;d
<c
;d
++){var a
=b
[d
];this._createOption(a
.optionValue
,a
.optionID
)}this._createOption()},_createOption:function(f
,d
,c
){f
=f
||"";d
=parseInt(d
)||0;c
=c
||null;var b
=$('<li class="sortableNode" />').data("optionID",d
);if(c
===null){b
.appendTo(this._container
)}else{b
.insertAfter(c
)}var a
=$('<span class="sortableButtonContainer" />').appendTo(b
);$('<span class="icon icon16 icon-plus jsTooltip jsAddOption pointer" title="'+WCF
.Language
.get("wcf.poll.button.addOption")+'" />').click($.proxy(this._addOption
,this)).appendTo(a
);$('<span class="icon icon16 icon-remove jsTooltip jsDeleteOption pointer" title="'+WCF
.Language
.get("wcf.poll.button.removeOption")+'" />').click($.proxy(this._removeOption
,this)).appendTo(a
);var e
=$('<input type="text" value="'+f
+'" maxlength="255" />').css({width
:this._inputSize
+"px"}).keydown($.proxy(this._keyDown
,this)).appendTo(b
);if(c
!==null){e
.focus()}WCF
.DOMNodeInsertedHandler
.execute();this._count
++;if(this._count
===this._maxOptions
){this._container
.find("span.jsAddOption").removeClass("pointer").addClass("disabled")}},_keyDown:function(a
){if(a
.which
!==13){return true}$(a
.currentTarget
).prev(".sortableButtonContainer").children(".jsAddOption").trigger("click");a
.preventDefault();a
.stopPropagation();return false},_addOption:function(b
){if(this._count
===this._maxOptions
){return false}var a
=$(b
.currentTarget
).parents("li");this._createOption(undefined,undefined,a
)},_removeOption:function(a
){$(a
.currentTarget
).parents("li").remove();this._count
--;this._container
.find("span.jsAddOption").addClass("pointer").removeClass("disabled");if(this._container
.children("li").length
==0){this._createOption()}},_resize:function(){var d
=this._container
.innerWidth();var c
=this._container
.children("li:eq(0)");var b
=c
.children(".sortableButtonContainer").outerWidth();var a
=d
-b
;if(a
!=this._inputSize
){this._inputSize
=a
;this._container
.find("li > input").css({width
:this._inputSize
+"px"})}},_submit:function(){var a
=[];this._container
.children("li").each(function(f
,i
){var h
=$(i
);var g
=$.trim(h
.children("input").val());if(g
!=""){a
.push({optionID
:h
.data("optionID"),optionValue
:g
})}});if(a
.length
){var b
=this._container
.parents("form").find(".formSubmit");for(var e
=0,d
=a
.length
;e
<d
;e
++){var c
=a
[e
];$('<input type="hidden" name="pollOptions['+e
+']" />').val(c
.optionID
+"_"+c
.optionValue
).appendTo(b
)}}}});WCF
.Poll
.Manager
=Class
.extend({_cache
:{},_canViewParticipants
:{},_canViewResult
:{},_canVote
:{},_inputElements
:{},_participants
:{},_polls
:{},_proxy
:null,init:function(a
){var c
=$(a
);if(!c
.length
){console
.debug("[WCF.Poll.Manager] Given selector '"+a
+"' does not match, aborting.");return}this._cache
={};this._canViewParticipants
={};this._canViewResult
={};this._inputElements
={};this._participants
={};this._polls
={};this._proxy
=new WCF
.Action
.Proxy({success
:$.proxy(this._success
,this),url
:"index.php/Poll/?t="+SECURITY_TOKEN
+SID_ARG_2ND
});var b
=this;c
.each(function(e
,g
){var f
=$(g
);var d
=f
.data("pollID");if(b
._polls
[d
]===undefined){b
._cache
[d
]={result
:"",vote
:""};b
._polls
[d
]=f
;b
._canViewParticipants
[d
]=(f
.data("canViewParticipants"))?true:false;b
._canViewResult
[d
]=(f
.data("canViewResult"))?true:false;b
._canVote
[d
]=(f
.data("canVote"))?true:false;b
._bindListeners(d
);if(f
.data("inVote")){b
._prepareVote(d
)}b
._toggleButtons(d
)}})},_bindListeners:function(a
){this._polls
[a
].find(".jsButtonPollShowParticipants").data("pollID",a
).click($.proxy(this._showParticipants
,this));this._polls
[a
].find(".jsButtonPollShowResult").data("pollID",a
).click($.proxy(this._showResult
,this));this._polls
[a
].find(".jsButtonPollShowVote").data("pollID",a
).click($.proxy(this._showVote
,this));this._polls
[a
].find(".jsButtonPollVote").data("pollID",a
).click($.proxy(this._vote
,this))},_showResult:function(b
,c
){var a
=(b
===null)?c
:$(b
.currentTarget
).data("pollID");if(!this._canViewResult
[a
]){return}if(!this._polls
[a
].data("inVote")){return}if(!this._cache
[a
].result
){this._proxy
.setOption("data",{actionName
:"getResult",pollID
:a
});this._proxy
.sendRequest()}else{this._polls
[a
].find(".pollInnerContainer").html(this._cache
[a
].result
);this._polls
[a
].data("inVote",false);this._toggleButtons(a
)}},_showParticipants:function(b
){var a
=$(b
.currentTarget
).data("pollID");if(!this._participants
[a
]){this._participants
[a
]=new WCF
.User
.List("wcf\\data\\poll\\PollAction",this._polls
[a
].data("question"),{pollID
:a
})}this._participants
[a
].open()},_showVote:function(b
,c
){var a
=(b
===null)?c
:$(b
.currentTarget
).data("pollID");if(!this._canVote
[a
]){return}if(this._polls
[a
].data("inVote")){return}if(!this._cache
[a
].vote
){this._proxy
.setOption("data",{actionName
:"getVote",pollID
:a
});this._proxy
.sendRequest()}else{this._polls
[a
].find(".pollInnerContainer").html(this._cache
[a
].vote
);this._polls
[a
].data("inVote",true);this._prepareVote(a
);this._toggleButtons(a
)}},_success:function(c
,d
,b
){if(!c
||!c
.actionName
){return}var a
=c
.pollID
;if(c
.resultTemplate
){this._cache
[a
].result
=c
.resultTemplate
}if(c
.voteTemplate
){this._cache
[a
].vote
=c
.voteTemplate
}switch(c
.actionName
){case"getResult":this._showResult(null,a
);break;case"getVote":this._showVote(null,a
);break;case"vote":this._canViewResult
[a
]=true;this._canVote
[a
]=(c
.canVote
)?true:false;this._showResult(null,a
);break}},_prepareVote:function(c
){this._polls
[c
].find(".jsButtonPollVote").disable();var d
=this._polls
[c
].find(".pollInnerContainer > .jsPollVote");var a
=this;this._inputElements
[c
]=d
.find("input").change(function(){a
._handleVoteButton(c
)});this._handleVoteButton(c
);var b
=d
.data("maxVotes");if(this._inputElements
[c
].filter("[type=checkbox]").length
){this._inputElements
[c
].change(function(){a
._enforceMaxVotes(c
,b
)});this._enforceMaxVotes(c
,b
)}},_enforceMaxVotes:function(c
,b
){var a
=this._inputElements
[c
];if(a
.filter(":checked").length
==b
){a
.filter(":not(:checked)").disable()}else{a
.enable()}},_handleVoteButton:function(b
){var a
=this._inputElements
[b
];var c
=this._polls
[b
].find(".jsButtonPollVote");if(a
.filter(":checked").length
){c
.enable()}else{c
.disable()}},_toggleButtons:function(c
){var a
=this._polls
[c
].children(".formSubmit");a
.find(".jsButtonPollShowParticipants, .jsButtonPollShowResult, .jsButtonPollShowVote, .jsButtonPollVote").hide();var b
=true;if(this._polls
[c
].data("inVote")){b
=false;a
.find(".jsButtonPollVote").show();if(this._canViewResult
[c
]){a
.find(".jsButtonPollShowResult").show()}}else{if(this._canVote
[c
]){b
=false;a
.find(".jsButtonPollShowVote").show()}if(this._canViewParticipants
[c
]){b
=false;a
.find(".jsButtonPollShowParticipants").show()}}if(b
){a
.hide()}},_vote:function(c
){var a
=$(c
.currentTarget
).data("pollID");if(!this._canVote
[a
]){return}var b
=[];this._inputElements
[a
].each(function(e
,d
){var f
=$(d
);if(f
.is(":checked")){b
.push(f
.data("optionID"))}});if(b
.length
){this._proxy
.setOption("data",{actionName
:"vote",optionIDs
:b
,pollID
:a
});this._proxy
.sendRequest()}}});