Файл: static/plugins/base/js/default.js
Строк: 3012
<?php
var PeepUtils = function(){
var langs = {};
var messageTime = 3000;
var $messageCont = $('<div class="peep_message_cont"></div>');
var events = {};
this.registry = {};
$(function(){
$messageCont.appendTo(document.body);
});
this.message = function( message, type, paramTime ){
var $messageNode = $('<div class="peep_message_node '+type+'" style="display:none;"><div><div><a class="close_button" href="javascript://" onclick="$(this).closest('.peep_message_node').slideUp(200, function(){$(this).remove();})"></a>'+message+'</div></div></div>').appendTo($messageCont);
if( paramTime == undefined ){
paramTime = messageTime;
}
$messageNode.slideDown(200,
function(){
window.setTimeout(
function(){
$messageNode.slideUp(200,
function() {
$messageNode.remove();
}
);
}, paramTime
);
}
);
}
this.error = function( message ){
this.message(message, 'error');
};
this.warning = function( message ){
this.message(message, 'warning');
};
this.info = function( message ){
this.message(message, 'info');
};
this.flagContent = function( entityType, entityId )
{
PEEP.registry['flag-panel-fb'] = PEEP.ajaxFloatBox("BASE_CMP_Flag", [entityType, entityId], {
width: 315,
title: PEEP.getLanguageText('base', 'flag_as')
});
};
var loadedScriptFiles = {};
this.loadScriptFiles = function( urlList, callback, options ){
if ( $.isPlainObject(callback) ) {
options = callback;
callback = null;
}
var addScript = function(url) {
return jQuery.ajax($.extend({
dataType: "script",
cache: true,
url: url
}, options || {})).done(function() {
loadedScriptFiles[url] = true;
});
};
if( urlList && urlList.length > 0 ) {
var recursiveInclude = function(urlList, i) {
if( (i+1) === urlList.length )
{
addScript(urlList[i]).done(callback);
return;
}
addScript(urlList[i]).done(function() {
recursiveInclude(urlList, ++i);
});
};
recursiveInclude(urlList, 0);
} else {
callback.apply(this);
}
};
this.addScriptFiles = function( urlList, callback, once ) {
if ( once === false ) {
this.loadScriptFiles(urlList, callback);
return;
}
$("script").each(function() {
loadedScriptFiles[this.src] = true;
});
var requiredScripts = $.grep(urlList, function(url) {
return !loadedScriptFiles[url];
});
this.loadScriptFiles(requiredScripts, callback);
};
this.addScript = function( script, scope, context )
{
if (!script)
{
return;
}
context = context || window;
scope = scope || window;
Function('_scope', script).call(context, scope);
},
this.addCssFile = function( url )
{
if ( $('link[href="'+ $.trim(url) +'"]').length ) {
return;
}
$('head').append($('<link type="text/css" rel="stylesheet" href="'+$.trim(url)+'" />'));
},
this.addCss = function( css ){
$('head').append($('<style type="text/css">'+css+'</style>'));
};
this.getLanguageText = function(prefix, key, assignedVars)
{
if ( langs[prefix] === undefined ) {
return prefix + '+' + key;
}
if ( langs[prefix][key] === undefined ) {
return prefix + '+' + key;
}
var langValue = langs[prefix][key];
if ( assignedVars ) {
for( varName in assignedVars ) {
langValue = langValue.replace('{$'+varName+'}', assignedVars[varName]);
}
}
return langValue;
};
this.registerLanguageKey = function(prefix, key, value)
{
if ( langs[prefix] === undefined ) {
langs[prefix] = {};
}
langs[prefix][key] = value;
};
this.inProgressNode = function(node)
{
return $(node).inprogress();
};
this.activateNode = function(node)
{
return $(node).activate();
};
this.showUsers = function(userIds, title)
{
PEEP.Users.showUsers(userIds, title);
},
this.getActiveFloatBox = function getFloatBox()
{
if ( typeof window.PEEPActiveFloatBox === 'undefined' )
{
return false;
}
return window.PEEPActiveFloatBox;
},
/**
* Loads a component
*
* Examples:
* 1:
* PEEP.loadComponent(cmpClass, '.place_to_node');
*
* 2:
* PEEP.loadComponent(cmpClass, function(){
* //onReady event
* //Add the html somewhere
* });
*
* 3:
* PEEP.loadComponent(cmpClass, [ p1, p2, ... ], '.place_to_node');
*
* 4:
* PEEP.loadComponent(cmpClass, [ p1, p2, ... ], function(html){
* //onReady event
* //Add the html somewhere
* });
*
* 5:
* PEEP.loadComponent(cmpClass, [ p1, p2, ... ],
* {
* onLoad: function(){},
* onError: function(){},
* onComplete: function(){},
* onReady: function( html )
* {
* //Add the html somewhere
* }
* });
*
* @param string cmpClass
*
* Cmp class params or targetNode selector or targetNod HtmlElement or ready callback
* @param array|string|HTMLElement|jQuery|function p1
*
* Options or targetNode selector or targetNod HtmlElement or ready callback
* @param object|string|HTMLElement|jQuery|function p2
*/
this.loadComponent = function( cmpClass, p1, p2 )
{
function isNode( node )
{
return typeof node === 'string' || node.jquery || node.nodeType
}
var params = [], options = {};
if ( isNode(p2) )
{
options.place = $(p2);
}
else if ( $.isPlainObject(p2) )
{
options = p2;
}
else if ( $.isFunction(p2) )
{
options.onReady = p2;
}
if ( isNode(p1) )
{
options.place = $(p1);
}
else if ( $.isArray(p1) || $.isPlainObject(p1) )
{
params = p1;
}
else if ( $.isFunction(p1) )
{
options.onReady = p1;
}
options = $.extend({}, {
place: false,
scope: window,
context: window,
addClass: '',
onLoad: function() {},
onReady: function( r ) {},
onError: function( r ) {},
onComplete: function( r ) {}
}, options);
var rsp = this.ajaxComponentLoaderRsp,
jsonParams = JSON.stringify(params),
$preloader = false;
if ( options.place )
{
$preloader = $('<div class="peep_ajaxloader_preloader peep_preloader_content ' + options.addClass + '"></div>');
$(options.place).html($preloader);
}
var ajaxOptions = {
url: rsp + '?cmpClass=' + cmpClass + '&r=' + Math.random(),
dataType: 'json',
type: 'POST',
data: {params: jsonParams},
error: function(r)
{
options.onError(r);
},
complete: function(r)
{
options.onComplete(r);
},
success: function(markup)
{
var contentHtml = markup.content, $contentHtml = $(contentHtml);
if ( !$contentHtml.length )
{
contentHtml = '<span>' + contentHtml + '</span>';
$contentHtml = $(contentHtml)
}
if ( $preloader )
{
$preloader.replaceWith($contentHtml);
}
options.onReady($contentHtml);
PEEP.bindAutoClicks($contentHtml);
PEEP.bindTips($contentHtml);
if (markup.styleSheets)
{
$.each(markup.styleSheets, function(i, o)
{
PEEP.addCssFile(o);
});
}
if (markup.styleDeclarations)
{
PEEP.addCss(markup.styleDeclarations);
}
if (markup.beforeIncludes)
{
PEEP.addScript(markup.beforeIncludes, options.scope, options.context);
}
if (markup.scriptFiles)
{
PEEP.addScriptFiles(markup.scriptFiles, function()
{
if (markup.onloadScript)
{
PEEP.addScript(markup.onloadScript, options.scope, options.context);
options.onLoad();
}
});
}
else
{
if (markup.onloadScript)
{
PEEP.addScript(markup.onloadScript, options.scope, options.context);
}
options.onLoad();
}
}
};
$.ajax(ajaxOptions);
},
this.ajaxFloatBox = function(cmpClass, params, options)
{
params = params || [];
options = options || {};
options = $.extend({}, {
title: '',
width: false,
height: false,
top: false,
left: false,
iconClass: false,
addClass: false,
layout: 'default',
$preloader: null,
scope: {},
context: null,
onLoad: function(){},
onReady: function(){},
onError: function(){},
onComplete: function(){}
}, options);
var floatBox = new PEEP_FloatBox({
$title: options.title,
width: options.width,
height: options.height,
top: options.top,
left: options.left,
icon_class: options.iconClass,
addClass: options.addClass,
layout: options.layout,
$preloader: options.$preloader
});
options.scope = $.extend({floatBox: floatBox}, options.scope);
options.context = options.context || floatBox;
this.loadComponent(cmpClass, params,
{
scope: options.scope,
context: options.context,
onLoad: options.onLoad,
onError: options.onError,
onComplete: options.onComplete,
onReady: function( r )
{
floatBox.setContent(r);
if ( $.isFunction(options.onReady) )
{
options.onReady.call(this, r);
}
}
})
return floatBox;
};
this.bind = function(type, func)
{
if (events[type] == undefined)
{
events[type] = [];
}
events[type].push(func);
};
this.trigger = function(type, params, applyObject)
{
if (events[type] == undefined) {
return false;
}
applyObject = applyObject || this;
params = params || [];
if ( !$.isArray(params) )
{
params = [params];
}
for (var i = 0, func; func = events[type][i]; i++)
{
if (func.apply(applyObject, params) === false)
{
return false;
}
}
return true;
};
this.unbind = function( type )
{
if (events[type] == undefined) {
return false;
}
events[type] = [];
};
this.editLanguageKey = function( prefix, key, success )
{
var fb = PEEP.ajaxFloatBox("BASE_CMP_LanguageValueEdit", [prefix, key, true], {width: 520, title: this.getLanguageText('admin', 'edit_language')});
PEEP.bind("admin.language_key_edit_success", function( e ) {
fb.close();
PEEP.unbind("admin.language_key_edit_success");
success(e);
});
};
this.authorizationLimitedFloatbox = function( message )
{
PEEP.ajaxFloatBox(
"BASE_CMP_AuthorizationLimited",
{message: message},
{width: 500, title: this.getLanguageText('base', 'authorization_limited_permissions')}
);
};
this.bindAutoClicks = function(context){
var autoClicks;
if ( context )
{
autoClicks = $('.form_auto_click', context);
}
else
{
autoClicks = $('.form_auto_click');
}
$.each(autoClicks, function(i,o){
var context = $(o);
$('textarea.invitation', context)
.bind('focus.auto_click', {context:context},
function(e){
$('.peep_submit_auto_click', e.data.context).show();
$(this).unbind('focus.auto_click')
}
);/*
.bind('keyup.auto_click',
function(){
if( $(this).val() != '' ){
$(this).unbind('focus.auto_click').unbind('keyup.auto_click').unbind('mouseup.auto_click').unbind('blur.auto_click');
}
}
)
.bind('mouseup.auto_click',
function(){
if( $(this).val() != '' ){
$(this).unbind('focus.auto_click').unbind('keyup.auto_click').unbind('mouseup.auto_click').unbind('blur.auto_click');
}
}
)
.bind('blur.auto_click', {context:context},
function(e){
if( $(this).hasClass('invitation') ){
$('.peep_submit_auto_click', e.data.context).hide();
}
}
);*/
});
};
this.initWidgetMenu = function( items ){
var $toolbarCont = null;
var $contex = null;
var condIds = [];
var linkIds = [];
$.each( items, function(key, value){
if( $toolbarCont === null ){
$contex = $('#'+value['contId']).closest('.peep_box, .peep_box_empty');
$toolbarCont = $('.peep_box_toolbar_cont', $contex);
}
condIds.push('#'+value['contId']);
linkIds.push('#'+value['id']);
}
);
var contIdSelector = $(condIds.join(','));
var linkIdSelector = $(linkIds.join(','));
$.each( items, function(key, value){
$('#'+value['id']).bind('click', {value:value},
function(e){
contIdSelector.hide();
$('#'+e.data.value.contId).show();
linkIdSelector.removeClass('active');
$(this).addClass('active');
if( e.data.value.toolbarId != undefined ){
if( e.data.value.toolbarId ){
if( $toolbarCont.length === 0 ){
$toolbarCont = $('<div class="peep_box_toolbar_cont"></div>');
$contex.append($toolbarCont);
}
$toolbarCont.html($('#'+e.data.value.toolbarId).html());
}
else{
if( $toolbarCont.length !== 0 ){
$toolbarCont.remove();
$toolbarCont = [];
}
}
}
}
);
}
);
};
this.showTip = function( $el, params ){
params = params || {};
params = $.extend({side:'bot', show:null, width:null, timeout:0, offset:5, hideEvent: null}, params);
var showTipN = function(){
var $rootEl = $el.data('peepTip');
var coords = $el.offset();
switch( params.side )
{
case 'top':
var left = coords.left + $el.outerWidth()/2 - $rootEl.outerWidth()/2;
var top = coords.top - $rootEl.outerHeight() - params.offset;
break;
case 'bot':
var left = coords.left + $el.outerWidth()/2 - $rootEl.outerWidth()/2;
var top = coords.top + $el.outerHeight() + params.offset;
break;
case 'right':
var left = coords.left + $el.outerWidth() + params.offset;
var top = coords.top + $el.outerHeight()/2 - $rootEl.outerHeight()/2;
break;
case 'left':
var left = coords.left - $rootEl.outerWidth() - params.offset;
var top = coords.top + $el.outerHeight()/2 - $rootEl.outerHeight()/2;
break;
default:
return;
}
$rootEl.css({left:left, top:top});
var tod = setTimeout( function(){
$el.data('peepTip').show( 1,
function(){
if( params.hideEvent ){
$el.bind(params.hideEvent, function(){PEEP.hideTip($el)});
}
$el.data('peepTipStatus', true);
if( $el.data('peepTipHide') == true ){
PEEP.hideTip($el);
}
}
);
}, params.timeout);
$el.data('tod', tod)
}
if( $el.data('peepTip') ){
if( $el.data('peepTipStatus') == true ){
return;
}
showTipN();
return;
}
var showContent;
if( params.show != null ){
showContent = ( typeof(params.show) == 'string' ? params.show : params.show.html() );
}
else{
if( !$el.attr('title') ){
return;
}
showContent = '<span class="peep_tip_title">'+$el.attr('title')+'</span>';
}
var $rootEl = $('<div class="peep_tip peep_tip_'+params.side+'"></div>').css({display:'none'}).append($('<div class="peep_tip_arrow"><span></span></div><div class="peep_tip_box">'+ showContent +'</div>'));
if( params.width != null ){
$rootEl.css({width:params.width});
}
$('body').append($rootEl);
$el.removeAttr('title');
$el.data('peepTip', $rootEl);
showTipN();
};
this.hideTip = function( $el ){
if( $el.data('tod') ){
clearTimeout($el.data('tod'));
}
if( $el.data('peepTip') && $el.data('peepTipStatus') == true ){
$el.data('peepTip').hide();
$el.data('peepTipStatus', false);
$el.data('peepTipHide', false);
}
};
this.bindTips = function( $context ){
//$('*[title]', $context).each( function(i, o){$(o).hover(function(){PEEP.showTip($(this), {timeout:200})}, function(){PEEP.hideTip($(this))})});
$('*[title]', $context).each( function(i, o){
$(o).on('mouseenter', function(){ PEEP.showTip($(this), {timeout:200}); });
$(o).on('mouseleave', function(){ PEEP.hideTip($(this)); });
});
};
this.resizeImg = function($context, params){
if( !params.width ){
return;
}
$( 'img', $context ).each(function(){
$(this).load(
function(){
if( $(this).data('imgResized') != true){
var $fakeImg = $(this).clone();
$fakeImg.css({width:'auto',height:'auto',visibility:'hidden',position:'absolute',left:'-9999px'}).removeAttr('width').removeAttr('height');
$(document.body).append ($fakeImg);
var self = this;
$fakeImg.load(function(){
var width = $(this).width();
if( width < params.width ){
$(self).css({width:'auto', height:'auto'});
}
else if( $(self).width() >= params.width ){
$(self).css({width:params.width, height:'auto'});
}
$(self).data('imgResized', true);
$(this).remove();
});
}
}
);
});
};
this.showImageInFloatBox = function( src )
{
var floatBox = new PEEP_FloatBox({layout: 'empty'});
var $fakeImageC = $('<div></div>');
var $fakeImg = $('<img src="'+src+'" />');
$fakeImageC.append($fakeImg);
$fakeImageC.css({visibility:'hidden',position:'absolute',left:'-9999px'});
$(document.body).append ($fakeImageC);
$fakeImg.load(function(){
var width = $fakeImg.width();
var height = $fakeImg.height();
if( width > 340 || height > 220 ){
if( width > 800 )
{
$fakeImg.css({width:'800px', height:'auto'});
width = 800;
}
else if( $fakeImg.height > 600 )
{
height = 600;
$fakeImg.css({height:'600px', width:'auto'});
}
floatBox.setContent($fakeImg);
}
else{
floatBox.setContent($fakeImg);
}
floatBox.fitWindow({
"width": width,
"height": height
});
floatBox.bind('close', function(){
$fakeImageC.remove();
});
});
}
}
//Enable / Disable node
jQuery.fn.extend({
inprogress: function() {
this.each(function()
{
var $this = jQuery(this).addClass('peep_inprogress');
this.disabled = true;
if ( this.tagName != 'INPUT' && this.tagName != 'TEXTAREA' && this.tagName != 'SELECT' )
{
this.jQuery_disabled_clone = $this.clone().removeAttr('id').removeAttr('onclick').get(0);
$this.hide()
.bind('unload', function(){
$this.activate();
})
.after(this.jQuery_disabled_clone);
}
});
return this;
},
activate: function() {
this.each(function()
{
var $this = jQuery(this).removeClass('peep_inprogress');
this.disabled = false;
if ( this.jQuery_disabled_clone )
{
jQuery(this.jQuery_disabled_clone).remove();
this.jQuery_disabled_clone = null;
jQuery(this)
.unbind('unload', function(){
$this.activate();
})
.show();
}
});
return this;
}
});
window.PEEP = new PeepUtils();
function lg(o){
console.log(o);
}
$( //8aa: resize fullsize images to fit to it's parendt width
function (){
if(typeof($) == 'undefined') return;
$('.fullsize-image').hide();
var node = $('.fullsize-image')[0];
while( node = $(node).parent()[0]){
if( node.tagName != 'DIV'){
continue;
}
if($('.fullsize-image').width() > parseInt($(node).innerWidth()))
$('.fullsize-image').width( (parseInt($(node).innerWidth()) - 10) + 'px' );
$('.fullsize-image').show();
break;
}
}
);
/**
* Float box constructor.
*
* @param string|jQuery $title
* @param string|jQuery $contents
* @param jQuery $controls
* @param object position {top, left} = center
* @param integer width = auto
* @param integer height = auto
*/
function PEEP_FloatBox(options)
{
var fl_box = this;
var fb_class;
this.parentBox = PEEP.getActiveFloatBox();
this.options = options;
this.verion = 2;
this.events = {close: [], show: []};
if (typeof document.body.style.maxHeight === 'undefined') { //if IE 6
jQuery('body').css({height: '100%', width: '100%'});
jQuery('html').css('overflow', 'hidden');
if (document.getElementById('floatbox_HideSelect') === null)
{ //iframe to hide select elements in ie6
jQuery('body').append('<iframe id="floatbox_HideSelect"></iframe><div id="floatbox_overlay"></div>');
fb_class = PEEP_FloatBox.detectMacXFF() ? 'floatbox_overlayMacFFBGHack' : 'floatbox_overlayBG';
jQuery('#floatbox_overlay').addClass(fb_class);
}
}
else { //all others
if (document.getElementById('floatbox_overlay') === null)
{
jQuery('body').append('<div id="floatbox_overlay"></div>');
fb_class = PEEP_FloatBox.detectMacXFF() ? 'floatbox_overlayMacFFBGHack' : 'floatbox_overlayBG';
jQuery('#floatbox_overlay').addClass(fb_class).click(function()
{
fl_box.close();
});
}
}
options.layout = options.layout || 'default';
jQuery('body').addClass('floatbox_nooverflow');
var activeCanvas = jQuery('.floatbox_canvas_active');
var fbContext = jQuery('#floatbox_prototype').find('.' + options.layout);
this.$canvas = jQuery('.floatbox_canvas', fbContext).clone().appendTo(document.body);
this.$preloader = jQuery('.floatbox_preloader_container', this.$canvas);
if ( options.addClass )
{
this.$canvas.addClass(options.addClass);
}
activeCanvas.removeClass('floatbox_canvas_active');
this.$canvas.addClass('floatbox_canvas_active');
if (this.parentBox)
{
this.$canvas.addClass('floatbox_canvas_sub');
this.parentBox.bind('close', function()
{
fl_box.close();
});
}
this.$canvas.click(function(e)
{
if ( $(e.target).is(this) )
{
fl_box.close();
}
});
this.$container = jQuery('.floatbox_container', this.$canvas);
if ( options.$title )
{
if (typeof options.$title == 'string')
{
options.$title = jQuery('<span>'+options.$title+'</span>');
}
else
{
this.$title_parent = options.$title.parent();
}
this.$header = jQuery('.floatbox_header', this.$container);
var $fbTitle = jQuery('.floatbox_cap', this.$header)
.find('.floatbox_title')
.append(options.$title);
}
/*if (typeof options.icon_class == 'string')
{
$fbTitle.addClass(options.icon_class);
}*/
this.$body = jQuery('.floatbox_body', this.$container);
this.$bottom = jQuery('.floatbox_bottom', this.$container);
this.showPreloader(options.$preloader || null);
if (options.$controls)
{
if (typeof options.$controls == 'string')
{
options.$controls = jQuery('<span>'+options.$controls+'</span>');
}
else
{
this.$controls_parent = options.$controls.parent();
}
this.$bottom.append(options.$controls);
}
if (options.width)
this.$container.css("width", options.width);
if (options.height)
this.$body.css("height", options.height);
jQuery('.close', this.$header)
.one('click', function()
{
fl_box.close();
return false;
});
this.esc_listener =
function(event) {
if (event.keyCode == 27) {
fl_box.close();
return false;
}
return true;
}
jQuery(document).bind('keydown', this.esc_listener);
if (options.left)
{
this.$container.css('margin-left', options.left);
}
if (options.top)
{
this.$container.css('margin-top', options.top);
}
if ( options.$contents )
{
this.setContent(options.$contents);
}
window.PEEPActiveFloatBox = this;
}
PEEP_FloatBox.version = 3;
PEEP_FloatBox.detectMacXFF = function()
{
var userAgent = navigator.userAgent.toLowerCase();
return (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox') != -1);
}
PEEP_FloatBox.prototype = {
fitWindow: function( params )
{
params = params || {};
params = $.extend({
"width": null,
"height": null,
"top": null,
"left": null
}, params);
var css = {};
if ( params.width )
{
this.options.width = params.width;
css.width = params.width;
}
if ( params.height )
{
this.options.height = params.height;
css.height = params.height;
}
if ( params.top )
{
this.options.top = params.top;
css.marginTop = params.top;
}
if ( params.left )
{
this.options.left = params.left;
css.marginLeft = params.left;
}
this.$container.css(css);
},
setContent: function( $contents )
{
var self = this;
if (typeof $contents == 'string')
{
var $contentsNode = jQuery($contents);
if ( !$contentsNode.length )
{
$contentsNode = jQuery('<span>' + $contents + '</span>');
}
$contents = jQuery($contentsNode);
}
else
{
this.$contents_parent = $contents.parent();
}
var width, fakeNode;
if ( !this.options.width )
{
fakeNode = $('<div></div>').insertAfter(this.$body);
fakeNode.attr('class', this.$body.attr('class'));
fakeNode.css({position: 'absolute',top: -2000, visibility: 'hidden'});
fakeNode.append($contents);
width = fakeNode.outerWidth();
}
else
{
width = this.options.width;
}
this.$body.empty().append($contents);
if ( fakeNode )
{
fakeNode.remove();
}
this.hidePreloader();
this.fitWindow({width: width});
window.setTimeout(function(){
self.trigger('show');
});
},
// OLD
/*showPreloader: function( preloaderContent )
{
var css = {};
if ( preloaderContent )
{
if ( typeof preloaderContent == 'string' )
{
preloaderContent = jQuery('<div class="floatbox_string_preloader"><span>' + preloaderContent + '</span></div>');
}
this.$preloader.html(preloaderContent);
}
this.$canvas.addClass('peep_floatbox_loading');
this.$preloader.css('visibility', 'hidden');
css.marginTop = ( jQuery(window).height() / 2 ) - ( this.$preloader.height() / 2 + 100);
css.visibility = 'visible';
this.$preloader.css(css);
},*/
showPreloader: function( preloaderContent )
{
if ( preloaderContent )
{
if ( typeof preloaderContent == 'string' )
{
preloaderContent = jQuery('<div class="floatbox_string_preloader"><span>' + preloaderContent + '</span></div>');
}
this.$preloader.html(preloaderContent);
}
this.$canvas.addClass('peep_floatbox_loading');
},
hidePreloader: function()
{
this.$canvas.removeClass('peep_floatbox_loading');
},
close: function()
{
if (this.trigger('close') === false) {
return false;
}
jQuery(document).unbind('keydown', this.esc_listener);
if (this.$title_parent && this.$title_parent.length)
{
this.$title_parent.append(
jQuery('.floatbox_title', this.$header).children()
);
}
if (this.$contents_parent && this.$contents_parent.length)
{
this.$contents_parent.append(this.$body.children());
}
if (this.$controls_parent && this.$controls_parent.length)
{
this.$controls_parent.append(this.$bottom.children());
}
this.$canvas.remove();
if (jQuery('.floatbox_canvas:visible').length === 0)
{
jQuery('html, body').removeClass('floatbox_nooverflow');
jQuery('#floatbox_overlay, #floatbox_HideSelect').remove();
}
window.PEEPActiveFloatBox = this.parentBox;
return true;
},
bind: function(type, func)
{
if (this.events[type] == undefined) {
throw 'form error: unknown event type "'+type+'"';
}
this.events[type].push(func);
},
trigger: function(type, params)
{
if (this.events[type] == undefined) {
throw 'form error: unknown event type "'+type+'"';
}
params = params || [];
for (var i = 0, func; func = this.events[type][i]; i++) {
if (func.apply(this, params) === false) {
return false;
}
}
return true;
}
}
/* PEEP Forms */
var PeepFormElement = function( id, name ){
this.id = id;
this.name = name;
this.input = document.getElementById(id);
this.validators = [];
}
PeepFormElement.prototype = {
validate: function(){
var error = false;
var errorMessage = '';
try{
for( var i = 0; i < this.validators.length; i++ ){
this.validators[i].validate(this.getValue());
}
}catch (e) {
error = true;
this.showError(e);
errorMessage = e;
}
if( error ){
throw errorMessage;
}
},
addValidator: function( validator ){
this.validators.push(validator);
},
getValue: function(){
return $(this.input).val();
},
setValue: function( value ){
$(this.input).val(value);
},
resetValue: function(){
$(this.input).val('');
},
showError: function( errorMessage ){
$('#'+this.id+'_error').append(errorMessage).fadeIn(50);
},
removeErrors: function(){
$('#'+this.id+'_error').empty().fadeOut(50);
}
}
var PeepForm = function( params ){
$.extend(this, params);
this.form = document.getElementById(this.id);
this.elements = {};
var actionUrl = $(this.form).attr('action');
this.actionUrl = ( !actionUrl ? location.href : actionUrl );
this.showErrors = true;
this.events = {
submit:[],
success:[]
}
};
PeepForm.prototype = {
addElement: function( element ){
this.elements[element.name] = element;
},
getElement: function( name ){
if( this.elements[name] === undefined ){
return null;
}
return this.elements[name];
},
validate: function(){
var error = false;
var element = null;
var errorMessage;
$.each( this.elements,
function(index, data){
try{
data.validate();
}catch (e){
error = true;
if( element == null ){
element = data;
errorMessage = e;
}
}
}
);
if( error ){
element.input.focus();
if( this.validateErrorMessage ){
throw this.validateErrorMessage;
}else{
throw errorMessage;
}
}
},
bind: function( event, fnc ){
this.events[event].push(fnc);
},
sucess: function( fnc ){
this.bind('success', fnc);
},
submit: function( fnc ){
this.bind('submit', fnc);
},
trigger: function( event, data ){
if( this.events[event] == undefined || this.events[event].length == 0 ){
return;
}
var result = undefined, returnVal;
for( var i = 0; i < this.events[event].length; i++ ){
returnVal = this.events[event][i].apply(this.form, [data]);
if(returnVal === false || returnVal === true ){
result = returnVal;
}
}
if( result !== undefined ){
return result;
}
},
getValues: function(){
var values = {};
$.each(this.elements,
function( index, data ){
values[data.name] = data.getValue();
}
);
return values;
},
setValues: function( values ){
var self = this;
$.each( values,
function( index, data ){
if(self.elements[index]){
self.elements[index].setValue(data);
}
}
);
},
resetForm: function(){
$.each( this.elements,
function( index, data ){
data.resetValue();
}
);
},
removeErrors: function(){
$.each( this.elements,
function( index, data ){
data.removeErrors();
}
);
},
submitForm: function(){
var self = this;
this.removeErrors();
try{
this.validate();
}catch(e){
if( this.showErrors ){
PEEP.error(e);
}
return false;
}
var dataToSend = this.getValues();
if( self.trigger('submit', dataToSend) === false ){
return false;
}
var buttons = $('input[type=button], input[type=submit], button', '#' + this.id).addClass('peep_inprogress');
if( this.ajax ){
PEEP.inProgressNode(buttons);
var postString = '';
$.each( dataToSend, function( index, data ){
if ( $.isArray(data) || $.isPlainObject(data) ) {
$.each(data, function (key, value){
postString += index + '[' + key + ']=' + encodeURIComponent(value) + '&';
});
}
else{
postString += index + '=' + encodeURIComponent(data) + '&';
}
} );
$.ajax({
type: 'post',
url: this.actionUrl,
data: postString,
dataType: self.ajaxDataType,
success: function(data){
if(self.reset){
self.resetForm();
}
self.trigger('success', data);
},
error: function( XMLHttpRequest, textStatus, errorThrown ){
PEEP.error(textStatus);
throw textStatus;
},
complete: function(){
PEEP.activateNode(buttons);
}
});
return false;
}
$.each(this.elements,
function( i, o ){
if( $(o.input).hasClass('invitation') ){
$(o.input).attr('disabled', 'disabled');
}
}
);
return true;
}
}
peepForms = {};
// custom fields
var addInvitationBeh = function( formElement, invitationString ){
formElement.invitationString = invitationString;
formElement.getValue = function(){
var val = $(this.input).val();
if( val != '' && val != this.invitationString ){
$(this.input).removeClass('invitation');
return val;
}
else{
return '';
}
};
var parentResetValue = formElement.resetValue;
formElement.resetValue = function(){
parentResetValue.call(this);
$(this.input).addClass('invitation');
$(this.input).val(invitationString);
};
$(formElement.input
).bind('focus.invitation', {formElement:formElement},
function(e){
el = $(this);
el.removeClass('invitation');
if( el.val() == '' || el.val() == e.data.formElement.invitationString){
el.val('');
//hotfix for media panel
if( 'htmlarea' in el.get(0) ){
el.unbind('focus.invitation').unbind('blur.invitation');
el.get(0).htmlarea();
el.get(0).htmlareaFocus();
}
}
else{
el.unbind('focus.invitation').unbind('blur.invitation');
}
}
)/*.bind('blur.invitation', {formElement:formElement},
function(e){
el = $(this);
if( el.val() == '' || el.val() == e.data.formElement.invitationString){
el.addClass('invitation');
el.val(e.data.formElement.invitationString);
}
else{
el.unbind('focus.invitation').unbind('blur.invitation');
}
}
);*/
}
var PeepTextField = function( id, name, invitationString ){
var formElement = new PeepFormElement(id, name);
if( invitationString ){
addInvitationBeh(formElement, invitationString);
}
return formElement;
}
var PeepTextArea = function( id, name, invitationString ){
var formElement = new PeepFormElement(id, name);
if( invitationString ){
addInvitationBeh(formElement, invitationString);
}
return formElement;
}
var PeepWysiwyg = function( id, name, invitationString ){
var formElement = new PeepFormElement(id, name);
formElement.input.focus = function(){this.htmlareaFocus();};
addInvitationBeh(formElement, invitationString);
formElement.resetValue = function(){$(this.input).val('');$(this.input).keyup();};
formElement.getValue = function(){
var val = $(this.input).val();
if( val != '' && val != '<br>' && val != '<div><br></div>' && val != this.invitationString ){
$(this.input).removeClass('invitation');
return val;
}
else{
return '';
}
};
return formElement;
}
var PeepRadioField = function( id, name ){
var formElement = new PeepFormElement(id, name);
formElement.getValue = function(){
var value = $("input[name='"+this.name +"']:checked", $(this.input.form)).val();
return ( value == undefined ? '' : value );
};
formElement.resetValue = function(){
$("input[name='"+this.name +"']:checked", $(this.input.form)).removeAttr('checked');
};
formElement.setValue = function(value){
$("input[name='"+ this.name +"'][value='"+value+"']", $(this.input.form)).attr('checked', 'checked');
};
return formElement;
}
var PeepCheckboxGroup = function( id, name ){
var formElement = new PeepFormElement(id, name);
formElement.getValue = function(){
var $inputs = $("input[name='"+ this.name +"[]']:checked", $(this.input.form));
var values = [];
$.each( $inputs, function(index, data){
if( this.checked == true ){
values.push($(this).val());
}
}
);
return values;
};
formElement.resetValue = function(){
var $inputs = $("input[name='"+ this.name +"[]']:checked", $(this.input.form));
$.each( $inputs, function(index, data){
$(this).removeAttr('checked');
}
);
};
formElement.setValue = function(value){
for( var i = 0; i < value.length; i++ ){
$("input[name='"+ this.name +"[]'][value='"+value[i]+"']", $(this.input.form)).attr('checked', 'checked');
}
};
return formElement;
}
var PeepCheckboxField = function( id, name ){
var formElement = new PeepFormElement(id, name);
formElement.getValue = function(){
var $input = $("input[name='"+this.name+"']:checked", $(this.input.form));
if( $input.length == 0 ){
return '';
}
return 'on';
};
formElement.setValue = function(value){
var $input = $("input[name='"+this.name+"']:checked", $(this.input.form));
if( value ){
$input.attr('checked', 'checked');
}
else{
$input.removeAttr('checked');
}
};
formElement.resetValue = function(){
var $input = $("input[name='"+this.name+"']:checked", $(this.input.form));
$input.removeAttr('checked');
};
return formElement;
}
var PeepRange = function( id, name ){
var formElement = new PeepFormElement(id, name);
formElement.getValue = function(){
var $inputFrom = $("select[name='"+ this.name +"[from]']");
var $inputTo = $("select[name='"+ this.name +"[to]']");
var values = [];
values.push($inputFrom.val());
values.push($inputTo.val());
return values;
};
formElement.setValue = function(value){
var $inputFrom = $("select[name='"+ this.name +"[from]']");
var $inputTo = $("select[name='"+ this.name +"[to]']");
if( value[1] ){
$("option[value='"+ value[1] +"']", $inputFrom).attr('selected', 'selected');
}
if( value[2] ){
$("option[value='"+ value[2] +"']", $inputTo).attr('selected', 'selected');
}
};
return formElement;
}
var PeepAvatarField = function( id, name, params ){
var formElement = new PeepFormElement(id, name);
var $preview = $(formElement.input).closest(".peep_avatar_field").find(".peep_avatar_field_preview");
var $img = $preview.find("img");
$preview.click(function(){
$(formElement.input).trigger('click');
});
$preview.find("span").click(function(e){
e.stopPropagation();
$img.attr("src", "");
formElement.resetValue();
$preview.hide();
$(formElement.input).val("").show();
// delete a tmp avatar
if (!$("#" + id + "_preload_avatar").length) {
$.ajax({
url: params.ajaxResponder,
type: 'POST',
data: { ajaxFunc: 'ajaxDeleteImage' },
dataType: 'json',
success: function(data){ }
});
}
$("#" + id + "_preload_avatar").remove();
});
$(formElement.input).change(function(e){
document.avatarFloatBox = PEEP.ajaxFloatBox(
"BASE_CMP_AvatarChange",
{ params : { step : 2, inputId : id, hideSteps: true, displayPreloader: true, changeUserAvatar: params.changeUserAvatar} },
{ width : 749, title: PEEP.getLanguageText('base', 'avatar_change') }
);
});
PEEP.bind('base.avatar_cropped', function(data){
formElement.removeErrors();
$(formElement.input).hide();
formElement.setValue(data.url);
$preview.show();
var ts = new Date().getTime();
$img.attr("src", data.url + "?" + ts);
$("#" + id + "_preload_avatar").remove();
});
return formElement;
}
/* end of forms */
/* Drag and drop fix */
DND_InterfaceFix = new (function(){
var embed = function(context){
var $context = $(context);
var cWidth = $context.innerWidth();
var configureEmbed = function($embed) {
var embed = $embed.get(0);
if ( embed.default_width === undefined || embed.default_width === null ) {
embed.default_width = $embed.width();
}
if ( cWidth < embed.default_width )
{
$embed.css('width', '100%');
}
else
{
$embed.css('width', embed.default_width + 'px');
}
$embed.attr('wmode', 'transparent');
};
var configureObject = function($object) {
$object.css('width', '100%');
};
$('embed', context).each(function(){
var $node = $(this).hide();
configureEmbed($node);
$node.show();
});
$('object', context).each(function() {
var $node = $(this).hide(), $embeds = $('embed', this);
configureObject($node);
if ( $embeds.length )
{
configureEmbed($embeds);
}
$node.show();
});
};
var image = function(context) {
var $context = $(context), cWidth;
var cWidth = $context.innerWidth();
if ( !cWidth )
{
return;
}
var resize = function(img) {
var $img = $(img);
if ( img.default_width ) {
img.default_width = $img.width();
}
if ( img.default_width > cWidth ) {
$img.css('width', '100%');
} else {
$img.css('width', img.default_width);
}
};
$context.find('img').each(function(){
$(this).css('max-width', '100%');
if (this.naturalWidth == 0) {
$(this).load(function(){
resize(this);
});
} else {
resize(this);
}
});
};
var iframe = function(context)
{
var $iframe = $('iframe', context);
var cWidth = $(context).innerWidth();
$iframe.each(function(i, o)
{
var $o = $(o), url, wmode;
if ( $o.width() > cWidth )
{
$o.css('width', '100%');
}
url = $(this).attr("src");
if ( !url ) return;
wmode = "wmode=transparent";
if ( url.indexOf("?") != -1)
{
$o.attr("src", url + "&" + wmode);
}
else
{
$o.attr("src", url + "?" + wmode);
}
});
};
this.fix = function(context) {
this.embed(context);
this.image(context);
this.iframe(context);
};
this.embed = function(context) {
$(context).each(function(){
embed(this);
})
};
this.image = function(context) {
$(context).each(function(){
image(this);
});
};
this.iframe = function(context) {
$(context).each(function(){
iframe(this);
});
};
})();
/* Comments */
var PeepComments = function( params ){
$.extend(this, params);
this.$cmpContext = $('#' + this.contextId);
var self = this;
var sleeping = false;
this.eventParams = {entityType:self.entityType, entityId:self.entityId, customId:self.customId};
this.submitHandler = function(){PEEP.error('FORM IS NOT INITIALIZED!');};
this.attachmentInProgressHandler = function(){PEEP.error(params.labels.attachmentLoading);};
var checkAddress = function( data ){
if( data.customId && data.customId != self.customId ){
return false;
}
return ( data.entityType == self.entityType && data.entityId == self.entityId );
};
PEEP.bind('base.comments_sleep',
function(data){
if( checkAddress(data) ){
sleeping = true;
if( this.userAuthorized ){
self.moveForm();
}
self.$cmpContext.hide();
}
}
);
PEEP.bind('base.comments_wakeup',
function(data){
if( checkAddress(data) ){
sleeping = false;
self.$cmpContext.show();
}
}
);
PEEP.bind('base.comments_destroy',
function(data){
if( checkAddress(data) ){
self.$cmpContext.remove();
}
}
);
if( !this.userAuthorized ){
return;
}
this.$textarea = $('#'+this.textAreaId);
this.$attchCont = $('#'+this.attchId);
this.$formWrapper = $('.peep_comments_form_wrap', this.$cmpContext);
this.$formWrapperPre = $('.peep_comments_form_wrap_pre', this.$cmpContext);
this.$hiddenBtnCont = $('.comments_hidden_btn', this.$cmpContext);
this.$commentsInputCont = $('.peep_comments_item_info', this.$formWrapper);
this.initTextarea();
this.attachmentInfo = false;
this.oembedInfo = false;
PEEP.bind('base.comments_list_init',
function(data){
if( sleeping ) return;
if( checkAddress(data) ){
self.initialCount = this.initialCount;
}
}
);
PEEP.bind('base.add_photo_attachment_submit',
function(data){
if( sleeping ) return;
if( data.uid == self.attchUid ){
self.oembedInfo = false;
self.$attchCont.empty();
self.submitHandler = self.attachmentInProgressHandler;
self.$hiddenBtnCont.show();
PEEP.trigger('base.comment_button_show', self.eventParams);
}
}
);
PEEP.bind('base.attachment_added',
function(data){
if( sleeping ) return;
if( data.uid == self.attchUid ){
self.attachmentInfo = data;
self.$textarea.focus();
self.submitHandler = self.realSubmitHandler;
PEEP.trigger('base.comment_attachment_added', self.eventParams);
}
}
);
PEEP.bind('base.attachment_deleted',
function(data){
if( sleeping ) return;
if( data.uid == self.attchUid ){
self.attachmentInfo = false;
self.$hiddenBtnCont.hide();
PEEP.trigger('base.comment_attachment_deleted', self.eventParams);
}
}
);
PEEP.bind('base.move_comments_form',
function(data){
if( sleeping ) return;
if( !data.entityType || !data.entityId ){
return;
}
if( checkAddress(data) ){
if( data.appendTo ){
self.moveForm(data.appendTo);
}else{
self.moveForm();
}
}
}
);
}
PeepComments.prototype = {
repaintCommentsList: function(data){
if(data.error){
PEEP.error(data.error);
return;
}
//PEEP.trigger('base.comments_list_update', {entityType: data.entityType, entityId: data.entityId, id:this.uid});
$('.comments_list_cont', this.$cmpContext).empty().append($(data.commentList));
PEEP.addScript(data.onloadScript);
},
sendMessage: function( message ){
var self = this;
var dataToSend = {
entityType: self.entityType,
entityId: self.entityId,
displayType: self.displayType,
pluginKey: self.pluginKey,
ownerId: self.ownerId,
cid: self.uid,
attchUid: self.attchUid,
commentCountOnPage: self.commentCountOnPage,
commentText: message,
initialCount: self.initialCount
};
if( self.attachmentInfo ){
dataToSend.attachmentInfo = JSON.stringify(self.attachmentInfo);
}
else if( self.oembedInfo ){
dataToSend.oembedInfo = JSON.stringify(self.oembedInfo);
}
$.ajax({
type: 'post',
url: self.addUrl,
data: dataToSend,
dataType: 'JSON',
success: function(data){
self.repaintCommentsList(data);
PEEP.trigger('base.photo_attachment_uid_update', {uid:self.attchUid, newUid:data.newAttachUid});
self.eventParams.commentCount = data.commentCount;
PEEP.trigger('base.comment_added', self.eventParams);
self.attchUid = data.newAttachUid;
self.$formWrapper.removeClass('peep_preloader');
self.$commentsInputCont.show();
},
error: function( XMLHttpRequest, textStatus, errorThrown ){
PEEP.error(textStatus);
},
complete: function(){
}
});
this.$textarea.val('').keyup().trigger('input.autosize');
},
initTextarea: function(){
var self = this;
this.realSubmitHandler = function(){
self.initialCount++;
self.sendMessage(self.$textarea.val());
self.attachmentInfo = false;
self.oembedInfo = false;
self.$hiddenBtnCont.hide();
if( this.mediaAllowed ){
PEEPLinkObserver.getObserver(self.textAreaId).resetObserver();
}
self.$attchCont.empty();
PEEP.trigger('base.photo_attachment_reset', {pluginKey:self.pluginKey, uid:self.attchUid});
PEEP.trigger('base.comment_add', self.eventParams);
self.$formWrapper.addClass('peep_preloader');
self.$commentsInputCont.hide();
};
this.submitHandler = this.realSubmitHandler;
this.$textarea
.bind('keypress',
function(e){
if( e.which === 13 && !e.shiftKey ){
var textBody = $(this).val();
if ( $.trim(textBody) == '' && !self.attachmentInfo && !self.oembedInfo ){
PEEP.error(self.labels.emptyCommentMsg);
return false;
}
self.submitHandler();
return false;
}
}
)
.one('focus', function(){$(this).removeClass('invitation').val('').autosize({callback:function(data){PEEP.trigger('base.comment_textarea_resize', self.eventParams);}});});
this.$hiddenBtnCont.unbind('click').click(function(){self.submitHandler();});
if( this.mediaAllowed ){
PEEPLinkObserver.observeInput(this.textAreaId, function( link ){
if( !self.attachmentInfo ){
self.$attchCont.html('<div class="peep_preloader" style="height: 30px;"></div>');
this.requestResult( function( r ){
self.$attchCont.html(r);
self.$hiddenBtnCont.show();
PEEP.trigger('base.comment_attach_media', {})
});
this.onResult = function( r ){
self.oembedInfo = r;
if( $.isEmptyObject(r) ){
self.$hiddenBtnCont.hide();
}
};
}
});
}
},
moveForm: function( $appendTo ){
if( $appendTo ){
$appendTo.append(this.$formWrapper);
}
else{
this.$formWrapperPre.after(this.$formWrapper);
}
}
};
var PeepCommentsList = function( params ){
this.$context = $('#' + params.contextId);
$.extend(this, params, peepCommentListCmps.staticData);
this.$loader = $('.peep_comment_list_loader', this.$context);
}
PeepCommentsList.prototype = {
init: function(){
var self = this;
$('.peep_comments_item', this.$context).hover(function(){$('.cnx_action', this).show();$('.peep_comments_date_hover', this).hide();}, function(){$('.cnx_action', this).hide();$('.peep_comments_date_hover', this).show();});
this.$loader.one('click',
function(){
self.$loader.addClass('peep_preloader');
$('a', self.$loader).hide();
self.initialCount += self.loadMoreCount;
self.reload();
}
);
// PEEP.bind('base.comments_list_update',
// function(data){
// if( data.entityType == self.entityType && data.entityId == self.entityId && data.id != self.cid ){
// self.reload();
// }
// }
// );
PEEP.trigger('base.comments_list_init', {entityType: this.entityType, entityId: this.entityId}, this);
PEEP.bind('base.comment_add', function(data){ if( data.entityType == self.entityType && data.entityId == self.entityId ) self.initialCount++ });
if( this.pagesCount > 0 )
{
for( var i = 1; i <= this.pagesCount; i++ )
{
$('a.page-'+i, self.$context).bind( 'click', {i:i},
function(event){
self.reload(event.data.i);
}
);
}
}
$.each(this.actionArray.comments,
function(i,o){
$('#'+i).click(
function(){
if( confirm(self.delConfirmMsg) )
{
$(this).closest('div.peep_comments_item').slideUp(300, function(){$(this).remove();});
$.ajax({
type: 'POST',
url: self.delUrl,
data: {
cid:self.cid,
commentCountOnPage:self.commentCountOnPage,
ownerId:self.ownerId,
pluginKey:self.pluginKey,
displayType:self.displayType,
entityType:self.entityType,
entityId:self.entityId,
initialCount:self.initialCount,
page:self.page,
commentId:o
},
dataType: 'json',
success : function(data){
if(data.error){
PEEP.error(data.error);
return;
}
self.$context.replaceWith(data.commentList);
PEEP.addScript(data.onloadScript);
var eventParams = {
entityType: self.entityType,
entityId: self.entityId,
commentCount: data.commentCount
};
PEEP.trigger('base.comment_delete', eventParams, this);
}
});
}
}
);
}
);
$.each(this.actionArray.users,
function(i,o){
$('#'+i).click(
function(){
PEEP.Users.deleteUser(o);
}
);
}
);
for( i = 0; i < this.commentIds.length; i++ )
{
if( $('#att'+this.commentIds[i]).length > 0 )
{
$('.attachment_delete',$('#att'+this.commentIds[i])).bind( 'click', {i:i},
function(e){
$('#att'+self.commentIds[e.data.i]).slideUp(300, function(){$(this).remove();});
$.ajax({
type: 'POST',
url: self.delAtchUrl,
data: {
cid:self.cid,
commentCountOnPage:self.commentCountOnPage,
ownerId:self.ownerId,
pluginKey:self.pluginKey,
displayType:self.displayType,
entityType:self.entityType,
entityId:self.entityId,
page:self.page,
initialCount:self.initialCount,
loadMoreCount:self.loadMoreCount,
commentId:self.commentIds[e.data.i]
},
dataType: 'json'
});
}
);
}
}
},
reload:function( page ){
var self = this;
$.ajax({
type: 'POST',
url: self.respondUrl,
data: {
cid:self.cid,
commentCountOnPage:self.commentCountOnPage,
ownerId:self.ownerId,
pluginKey:self.pluginKey,
displayType:self.displayType,
entityType:self.entityType,
entityId:self.entityId,
initialCount:self.initialCount,
loadMoreCount:self.loadMoreCount,
page:page
},
dataType: 'json',
success : function(data){
if(data.error){
PEEP.error(data.error);
return;
}
self.$loader.removeClass('peep_preloader');
$('a', self.$loader).hide();
self.$context.replaceWith(data.commentList);
PEEP.addScript(data.onloadScript);
},
error : function( XMLHttpRequest, textStatus, errorThrown ){
PEEP.error('Ajax Error: '+textStatus+'!');
throw textStatus;
}
});
}
}
peepCommentCmps = {};
peepCommentListCmps = {items:{},staticData:{}};
var PeepRate = function( params ){
this.cmpId = params.cmpId;
this.userRate = params.userRate;
this.entityId = params.entityId;
this.entityType = params.entityType;
this.itemsCount = params.itemsCount;
this.respondUrl = params.respondUrl;
this.ownerId = params.ownerId;
this.$context = $('#rate_'+params.cmpId);
}
PeepRate.prototype = {
init: function(){
var self = this;
this.setRate(this.userRate);
for( var i = 1; i <= this.itemsCount; i++ ){
$('#' + this.cmpId + '_rate_item_' + i).bind( 'mouseover', {i:i},
function(e){
self.setRate(e.data.i);
}
).bind( 'mouseout',
function(){
self.setRate(self.userRate);
}
).bind( 'click', {i:i},
function(e){
self.updateRate(e.data.i);
}
);
}
},
setRate: function( rate ){
for( var i = 1; i <= this.itemsCount; i++ ){
var $el = $('#' + this.cmpId + '_rate_item_' + i);
$el.removeClass('active');
if( !rate ){
continue;
}
if( i <= rate ){
$el.addClass('active');
}
}
},
updateRate: function( rate ){
var self = this;
if( rate == this.userRate ){
return;
}
this.userRateBackup = this.userRate;
this.userRate = rate;
$.ajax({
type: 'POST',
url: self.respondUrl,
data: 'entityType='+encodeURIComponent(self.entityType)+'&entityId='+encodeURIComponent(self.entityId)+'&rate='+encodeURIComponent(rate)+'&ownerId='+encodeURIComponent(self.ownerId),
dataType: 'json',
success : function(data){
if( data.errorMessage ){
PEEP.error(data.errorMessage);
self.userRate = self.userRateBackup;
self.setRate(self.userRateBackup);
return;
}
if( data.message ){
PEEP.info(data.message);
}
$('.total_score', self.$context).empty().append(data.totalScoreCmp);
PEEP.trigger('base.rate_update', {entityType: self.entityType, entityId: self.entityId, rate: rate, ownerId: self.ownerId}, this);
},
error : function( XMLHttpRequest, textStatus, errorThrown ){
alert('Ajax Error: '+textStatus+'!');
throw textStatus;
}
});
}
}
PEEPLinkObserver =
{
observers: {},
observeInput: function( inputId, callBack )
{
this.observers[inputId] = new PEEPLinkObserver.handler(inputId, callBack);
},
getObserver: function( inputId )
{
return this.observers[inputId] || null;
}
};
PEEPLinkObserver.handler = function( inputId, callBack )
{
this.callback = callBack;
this.input = $('#' + inputId);
this.inputId = inputId;
this.detectedUrl = null;
this.onResult = function(){};
this.startObserve();
};
PEEPLinkObserver.handler.prototype =
{
startObserve: function()
{
var self = this;
var detect = function()
{
var val = self.input.val();
if ( $.trim(val) )
{
self.detectLink();
}
};
this.input.bind('paste', function(){
setTimeout(function() {
detect();
}, 100);
});
this.input.bind('blur', detect);
this.input.keyup(function(e)
{
if (e.keyCode == 32 || e.keyCode == 13) {
detect();
}
});
},
detectLink: function( text )
{
var text, rgxp, result;
text = this.input.val();
rgxp = /(http(s)?://|www.)((d+.d+.d+.d+)|(([w-]+.)+([a-z,A-Z][w-]*)))(:[1-9][0-9]*)?(/?([?w-.,/:%+@&*=~]+[w-,./?':%+@&=*|]*)?)?/;
result = text.match(rgxp);
if ( !result )
{
return false;
}
if ( this.detectedUrl == result[0] )
{
return false;
}
this.detectedUrl = result[0];
this.callback.call(this, this.detectedUrl);
},
requestResult: function( callback, link )
{
var self = this;
link = link || this.detectedUrl;
$.ajax({
type: 'POST',
url: PEEP.ajaxAttachmentLinkRsp,
data: {"url": link},
dataType: 'json',
success: function( r )
{
if ( r.content )
{
if ( r.content.css )
{
PEEP.addCss(r.content.css);
}
if ( $.isFunction(callback) )
{
callback.call(self, r.content.html, r.result);
}
if ( $.isFunction(self.onResult) )
{
self.onResult(r.result);
}
if ( r.content.js )
{
PEEP.addScript(r.content.js);
}
}
if ( r.attachment && PEEP_AttachmentItemColletction[r.attachment] )
{
PEEP_AttachmentItemColletction[r.attachment].onChange = function(oembed){
self.onResult(oembed);
};
}
}
});
},
resetObserver: function()
{
this.detectedUrl = null;
}
};
PEEP_AttachmentItemColletction = {};
PEEP_Attachment = function(uniqId, data)
{
var self = this;
this.data = data;
this.uniqId = uniqId;
this.node = document.getElementById(this.uniqId);
this.onChange = function(){};
//PEEP.resizeImg(this.$('.EQ_AttachmentImageC'),{width:'150'});
this.$('.PEEP_AttachmentSelectPicture').click(function()
{
self.showImageSelector();
});
this.$('.PEEP_AttachmentDelete').click(function()
{
$(self.node).remove();
if ( $.isFunction(self.onChange) )
{
self.data = [];
self.onChange.call(self, self.data);
}
return false;
});
};
PEEP_AttachmentProto = function()
{
this.$ = function (sel)
{
return $(sel, this.node);
};
this.showImageSelector = function()
{
var fb, $contents, self = this;
$contents = this.$('.PEEP_AttachmentPicturesFbContent')
fb = new PEEP_FloatBox({
$title: this.$('.PEEP_AttachmentPicturesFbTitle'),
$contents: $contents,
width: 520
});
$contents.find('.PEEP_AttachmentPictureItem').unbind().click(function()
{
var img = $('img', this);
self.changeImage(img.attr('src'));
fb.close();
});
};
this.changeImage = function( url )
{
var clone, original;
original = this.$('.PEEP_AttachmentImage');
clone = original.clone();
clone.attr('src', url);
original.replaceWith(clone);
if ( $.isFunction(this.onChange) )
{
this.data["thumbnail_url"] = url;
this.onChange.call(this, this.data);
}
};
};
PEEP_Attachment.prototype = new PEEP_AttachmentProto();
// Additional jQuery plugins
jQuery.fn.onImageLoad = function(fn)
{
this.load(fn);
this.each( function() {
if ( this.complete && this.naturalWidth !== 0 ) {
$(this).trigger('load');
}
});
};
/* PING */
PEEP_PingCommand = function( commandName, commandObject, stack )
{
$.extend(this, commandObject);
this.commandName = commandName;
this.repeatTime = false;
this.minRepeatTime = null;
this.stack = stack;
this.commandTimeout = null;
this.stopped = true;
this.skipped = false;
this.inProcess = false;
this.isRootCommand = false;
this._lastRunTime = null;
};
PEEP_PingCommand.PROTO = function()
{
this._updateLastRunTime = function()
{
this._lastRunTime = $.now();
};
this._received = function( r )
{
this.after(r);
},
this._delayCommand = function()
{
var self = this;
if ( this.commandTimeout )
{
window.clearTimeout(this.commandTimeout);
}
this.commandTimeout = window.setTimeout(function()
{
self._run();
self.skipped = false;
}, this.repeatTime);
},
this._completed = function()
{
this.inProcess = false;
this._updateLastRunTime();
if ( this.skipped || this.stopped || this.repeatTime === false )
{
return;
}
this._delayCommand();
},
this._getStackCommand = function()
{
return {
"command": this.commandName,
"params": this.params
};
};
this._beforeStackSend = function()
{
if ( this.minRepeatTime === null || this.stopped || this.inProcess || this.isRootCommand )
{
return;
}
if ( $.now() - this._lastRunTime < this.minRepeatTime )
{
return;
}
this._run();
};
this._run = function()
{
if ( !this.stopped )
{
this.inProcess = true;
this.stack.push(this);
}
if ( this.onRun )
{
this.onRun(this);
}
};
this.params = {};
this.before = function(){};
this.after = function(){};
this.start = function( repeatTime )
{
if ( $.isNumeric(repeatTime) )
{
this.repeatTime = repeatTime;
}
else if ( $.isPlainObject(repeatTime) )
{
if ( repeatTime.max )
{
this.repeatTime = repeatTime.max;
}
if ( repeatTime.min )
{
this.minRepeatTime = repeatTime.min == 'each' ? 0 : repeatTime.min;
}
}
this.stop();
this.stopped = false;
if ( !this.inProcess )
{
this._run();
}
};
this.skip = function()
{
this.skipped = true;
this._delayCommand();
};
this.stop = function()
{
this.stopped = true;
};
};
PEEP_PingCommand.prototype = new PEEP_PingCommand.PROTO();
PEEP_Ping = function()
{
var _stack = [], _commands = {};
var rspUrl;
var _rootCommand = null;
var beforeStackSend, sendStack, refreshRootCommand, rootOnCommandRun, genericOnCommandRun, setRootCommand;
rootOnCommandRun = function( command )
{
window.setTimeout(function(){
sendStack();
}, 10);
};
genericOnCommandRun = function( command )
{
if ( !_rootCommand )
{
setRootCommand(command);
rootOnCommandRun(command);
return;
}
if ( command.repeatTime === false )
{
return;
}
if ( _rootCommand.repeatTime === false || _rootCommand.repeatTime > command.repeatTime )
{
setRootCommand(command);
rootOnCommandRun(command);
}
};
refreshRootCommand = function()
{
var rootCommand = null;
for ( var c in _commands )
{
if ( _commands[c].repeatTime === false || _commands[c].stopped )
{
continue;
}
if ( !rootCommand || _commands[c].repeatTime < rootCommand.repeatTime )
{
rootCommand = _commands[c];
}
}
if ( rootCommand )
{
setRootCommand(rootCommand);
}
};
setRootCommand = function( command )
{
if ( _rootCommand )
{
_rootCommand.onRun = genericOnCommandRun;
_rootCommand.isRootCommand = false;
}
command.isRootCommand = true;
_rootCommand = command;
_rootCommand.onRun = rootOnCommandRun;
};
beforeStackSend = function()
{
for ( var c in _commands )
{
_commands[c]._beforeStackSend();
}
};
sendStack = function()
{
beforeStackSend();
if ( !_stack.length )
{
return;
}
var stack = [], commands = [];
while ( _stack.length )
{
var c = _stack.pop();
commands.push(c);
if ( c.before() === false )
{
c.skip();
continue;
}
stack.push(c._getStackCommand());
}
if ( !stack.length )
{
return;
}
var request = {
"stack": stack
};
var jsonRequest = JSON.stringify(request);
var ajaxOptions =
{
url: rspUrl,
dataType: 'json',
type: 'POST',
data: {request: jsonRequest},
success: function(result)
{
if ( !result || !result.stack )
{
return;
}
$.each(result.stack, function(i, command)
{
if ( _commands[command.command] )
{
_commands[command.command]._received(command.result);
}
});
},
complete: function()
{
$(commands).each(function(i, command)
{
command._completed();
});
refreshRootCommand();
}
};
$.ajax(ajaxOptions);
};
this.addCommand = function( commandName, commandObject )
{
if ( _commands[commandName] )
{
return _commands[commandName];
}
commandObject = commandObject || {};
_commands[commandName] = new PEEP_PingCommand(commandName, commandObject, _stack);
_commands[commandName].onRun = genericOnCommandRun;
return _commands[commandName]
};
this.getCommand = function( commandName )
{
return _commands[commandName] || null;
};
this.setRspUrl = function( url )
{
rspUrl = url;
};
};
PEEP_Ping.getInstance = function()
{
if ( !PEEP_Ping.pingInstance )
{
PEEP_Ping.pingInstance = new PEEP_Ping();
}
return PEEP_Ping.pingInstance;
}
PEEP.getPing = function()
{
return PEEP_Ping.getInstance();
};
/* Add command example
PEEP.getPing().addCommand('ajaxim', {
params: {
p1: 1,
p2: 3
},
before: function()
{
this.params.p1 = 4;
},
after: function( res )
{
}
}).start(5000); // repeatTime ( Number or Object {max: maxRepeatTime, min: minRepeatTime} )
*/
/* Scroll */
PEEP.Scroll = {};
PEEP.Scroll.settings =
{
verticalGutter: 0,
horizontalGutter: 0,
showArrows: false
};
PEEP.addScroll = function( node, settings )
{
settings = settings || {};
settings = $.extend({}, PEEP.Scroll.settings, settings);
var $node = $(node);
$node.unbind('jsp-initialised').bind('jsp-initialised', function()
{
var track = $node.find('.jspTrack');
$node.hover(function()
{
track.fadeIn('fast');
}, function()
{
track.fadeOut(200);
});
});
if ( !$node.hasClass('peep_scrollable') )
{
$node.addClass('peep_scrollable');
}
$node.jScrollPane(settings);
return $node.data().jsp;
};
PEEP.removeScroll = function( node )
{
var $node = $(node);
var jsp = $node.data('jsp');
if ( jsp )
{
jsp.destroy();
}
//$node.jScrollPaneRemove();
$node.removeClass('peep_scrollable');
};
PEEP.updateScroll = function( node, settings )
{
var jsp = $(node).data('jsp');
settings = settings || {};
settings = $.extend({}, PEEP.Scroll.settings, settings);
if ( jsp )
{
jsp.reinitialise(settings);
}
};
PEEP.addScrolls = function( context )
{
context = context || null;
$('.peep_scrollable', context).each(function()
{
PEEP.addScroll(this);
});
};
PEEP.removeScrolls = function( context )
{
context = context || null;
$('.peep_scrollable', context).each(function()
{
PEEP.removeScroll(this);
});
};
PEEP.updateScrolls = function( context )
{
context = context || null;
$('.peep_scrollable', context).each(function()
{
PEEP.updateScroll(this);
});
};
PEEP.Utils = (function() {
return {
toggleText: function( node, value, alternateValue ) {
var $node = $(node), text = $node.text();
if ( !$node.data("toggle-text") )
$node.data("toggle-text", text);
alternateValue = alternateValue || $node.data("toggle-text");
$node.text(text == alternateValue ? value : alternateValue);
},
toggleAttr: function( node, attributeName, value, alternateValue ) {
var $node = $(node), attributeValue = $node.attr(attributeName);
if ( !$node.data("toggle-" + attributeName) )
$node.data("toggle-" + attributeName, attributeValue);
alternateValue = alternateValue || $node.data("toggle-" + attributeName);
$node.attr(attributeName, attributeValue == alternateValue ? value : alternateValue);
}
};
})();
PEEP.Users = null;
PEEP_UsersApi = function( _settings )
{
var _usersApi = this;
var _query = function(command, params, callback) {
callback = callback || function( r ) {
if ( !r ) return;
if (r.info) PEEP.info(r.info);
if (r.error) PEEP.error(r.error);
};
return $.getJSON(_settings.rsp, {"command": command, "params": JSON.stringify(params)}, callback);
};
PEEP.Users = this;
//Public methods
this.deleteUser = function(userId, callBack, showMessage)
{
showMessage = showMessage === false ? false : true;
var redirectUrl = null;
if ( typeof callBack == 'string' )
{
redirectUrl = callBack;
}
var floatBox;
floatBox = PEEP.ajaxFloatBox('BASE_CMP_DeleteUser', [{userId: userId, showMessage : showMessage && redirectUrl}],
{
title: PEEP.getLanguageText('base', 'delete_user_confirmation_label'),
iconClass: 'peep_ic_add',
scope: {
deleteCallback: function( r )
{
if ( r.result == 'error' )
{
if ( r.message )
{
PEEP.error(r.message);
}
return;
}
if ( redirectUrl )
{
window.location.href = redirectUrl;
return;
}
if ( showMessage )
{
PEEP.info(r.message);
}
if ( callBack )
{
callBack.call(floatBox, r);
return;
}
}
}
});
},
this.showUsers = function(userIds, title)
{
title = title || PEEP.getLanguageText('base', 'ajax_floatbox_users_title');
PEEP.ajaxFloatBox('BASE_CMP_FloatboxUserList', [userIds], {iconClass: "peep_ic_user", title: title, width: 470});
},
this.suspendUser = function( userId, callback, message ) {
return _query("suspend", {"userId": userId, 'message': message}, callback);
};
this.unSuspendUser = function( userId, callback ) {
return _query("unsuspend", {"userId": userId}, callback);
};
this.blockUserWithConfirmation = function( userId, confirmationCallback, callback ) {
var floatBox = PEEP.ajaxFloatBox("BASE_CMP_BlockUser", [userId], {
scope: {
"confirmCallback": function() {
_usersApi.blockUser(userId, callback);
if ( $.isFunction(confirmationCallback) ) {
confirmationCallback.call(null, userId);
floatBox.close();
}
}
}
});
};
this.blockUser = function( userId, callback ) {
return _query("block", {"userId": userId}, callback);
};
this.unBlockUser = function( userId, callback ) {
return _query("unblock", {"userId": userId}, callback);
};
this.featureUser = function( userId, callback ) {
return _query("feature", {"userId": userId}, callback);
};
this.unFeatureUser = function( userId, callback ) {
return _query("unfeature", {"userId": userId}, callback);
};
};
?>