SHARE
TWEET

Untitled

a guest Jan 11th, 2019 141 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* DVZ Shoutbox by Tomasz 'Devilshakerz' Mlynski [devilshakerz.com]; Copyright (C) 2014 */
  2.  
  3. var dvz_shoutbox = {
  4.  
  5.     // defaults
  6.     interval:   5,
  7.     antiflood:  0,
  8.     maxShouts:  20,
  9.     awayTime:   600000,
  10.     lazyMode:   false,
  11.     lazyMargin: 0,
  12.     callSign:   '@',
  13.     lang:       [],
  14.     status:     true,
  15.     reversed:   false,
  16.     callbacks:  {
  17.         'toggle':  [],
  18.         'update':  [],
  19.         'entries': [],
  20.         'shout':   [],
  21.         'edit':    [],
  22.         'delete':  [],
  23.         'call':    [],
  24.     },
  25.  
  26.     // runtime
  27.     timeout:    false,
  28.     frozen:     false,
  29.     updating:   false,
  30.     started:    false,
  31.     lastSent:   0,
  32.     lastId:     0,
  33.     activity:   0,
  34.  
  35.     loop: function (forced) {
  36.  
  37.         if (forced == true) {
  38.             clearTimeout(dvz_shoutbox.timeout);
  39.         } else {
  40.  
  41.             if (dvz_shoutbox.isAway()) {
  42.                 dvz_shoutbox.toggle(false, false);
  43.                 dvz_shoutbox.frozen = true;
  44.                 return false;
  45.             }
  46.  
  47.             if (!dvz_shoutbox.lazyLoad()) {
  48.                 dvz_shoutbox.frozen = true;
  49.                 return false;
  50.             }
  51.  
  52.             if (dvz_shoutbox.status == false) {
  53.                 dvz_shoutbox.frozen = true;
  54.                 return false;
  55.             }
  56.  
  57.         }
  58.  
  59.         dvz_shoutbox.update(function(){
  60.  
  61.             dvz_shoutbox.started = true;
  62.  
  63.             // next request
  64.             if (dvz_shoutbox.interval) {
  65.                 dvz_shoutbox.timeout = setTimeout('dvz_shoutbox.loop()', dvz_shoutbox.interval * 1000);
  66.             }
  67.  
  68.         });
  69.  
  70.  
  71.     },
  72.  
  73.     // actions
  74.     update: function (callback) {
  75.  
  76.         if (dvz_shoutbox.updating) {
  77.             return false;
  78.         } else {
  79.             dvz_shoutbox.updating = true;
  80.         }
  81.  
  82.         $.get(
  83.             'xmlhttp.php',
  84.             { action: 'dvz_sb_get_shouts', from: dvz_shoutbox.lastId },
  85.             function(data) {
  86.  
  87.                 if (dvz_shoutbox.handleErrors(data)) {
  88.                     return false;
  89.                 }
  90.  
  91.                 if (data) {
  92.  
  93.                     var data = $.parseJSON(data);
  94.  
  95.                     // insert new shouts
  96.                     if (dvz_shoutbox.reversed) {
  97.  
  98.                         var scrollMax = $('#shoutbox .data').innerHeight() - $('#shoutbox .window').innerHeight(),
  99.                             scroll    = $('#shoutbox .window').scrollTop();
  100.  
  101.                         $('#shoutbox .data').append ( $(data.html).fadeIn(function(){
  102.  
  103.                             // scroll to bottom again
  104.                             if (!dvz_shoutbox.started || scroll >= scrollMax) {
  105.                                 $('#shoutbox .window').scrollTop( $('#shoutbox .window')[0].scrollHeight );
  106.                             }
  107.  
  108.                         }) );
  109.  
  110.                     } else {
  111.                         $('#shoutbox .data').prepend( $(data.html).hide().fadeIn() );
  112.                     }
  113.  
  114.                     // remove old shouts to fit the limit
  115.                     var old = $('#shoutbox .entry').length - dvz_shoutbox.maxShouts;
  116.  
  117.                     if (old > 0) {
  118.                         $('#shoutbox .entry:nth'+(dvz_shoutbox.reversed ? '' : '-last')+'-child(-n+'+old+')').remove();
  119.                     }
  120.  
  121.                     // mark new shouts
  122.                     if (dvz_shoutbox.started) {
  123.  
  124.                         $('#shoutbox .entry').filter(function(){
  125.                             return parseInt($(this).attr('data-id')) > dvz_shoutbox.lastId && $(this).not('[data-own]').length;
  126.                         }).addClass('new');
  127.  
  128.                         setTimeout("$('#shoutbox .entry.new').removeClass('new')", 1000);
  129.                     }
  130.  
  131.                     dvz_shoutbox.lastId = data.last;
  132.  
  133.                     dvz_shoutbox.appendControls();
  134.  
  135.                 }
  136.  
  137.                 dvz_shoutbox.updating = false;
  138.  
  139.                 dvz_shoutbox.runCallbacks('update');
  140.  
  141.                 if (typeof(callback) == 'function') {
  142.                     callback();
  143.                 }
  144.  
  145.             }
  146.         );
  147.  
  148.     },
  149.  
  150.     shout: function() {
  151.  
  152.         var message = $('#shoutbox input.text').val();
  153.  
  154.         if ($.trim(message) == '') {
  155.             return false;
  156.         }
  157.  
  158.         if (!dvz_shoutbox.antifloodPass()) {
  159.             dvz_shoutbox.handleErrors('A');
  160.             return false;
  161.         }
  162.  
  163.         dvz_shoutbox.toggleForm(false);
  164.  
  165.         $.post(
  166.             'xmlhttp.php',
  167.             { action: 'dvz_sb_shout', text: message, key: my_post_key },
  168.             function(data) {
  169.  
  170.                 if (!dvz_shoutbox.handleErrors(data)) {
  171.  
  172.                     dvz_shoutbox.lastSent = Math.floor((new Date).getTime() / 1000);
  173.                     dvz_shoutbox.clearForm();
  174.                     dvz_shoutbox.loop(true);
  175.  
  176.                     dvz_shoutbox.runCallbacks('shout', { message: message });
  177.  
  178.                 }
  179.  
  180.                 dvz_shoutbox.toggleForm(true);
  181.  
  182.             }
  183.         );
  184.  
  185.     },
  186.  
  187.     edit: function (id) {
  188.  
  189.         // text request
  190.         $.get(
  191.             'xmlhttp.php',
  192.             { action: 'dvz_sb_get', id: id, key: my_post_key },
  193.             function(data){
  194.  
  195.                 if (dvz_shoutbox.handleErrors(data)) {
  196.                     return false;
  197.                 }
  198.  
  199.                 var data    = $.parseJSON(data),
  200.                     newText = prompt('Shout #'+id+':', data.text);
  201.  
  202.                 if (newText && newText != data.text) {
  203.  
  204.                     // update request
  205.                     $.post(
  206.                         'xmlhttp.php',
  207.                         { action: 'dvz_sb_update', text: newText, id: id, key: my_post_key },
  208.                         function(data) {
  209.  
  210.                             if (!dvz_shoutbox.handleErrors(data)) {
  211.  
  212.                                 $('#shoutbox .entry[data-id="'+id+'"] .text').html(data);
  213.  
  214.                                 dvz_shoutbox.runCallbacks('edit', { id: id, text: data });
  215.  
  216.                             }
  217.  
  218.                         }
  219.                     );
  220.  
  221.                 }
  222.  
  223.             }
  224.         );
  225.     },
  226.  
  227.     delete: function (id) {
  228.  
  229.         if (confirm(dvz_shoutbox.lang[0])) {
  230.  
  231.             $.post(
  232.                 'xmlhttp.php',
  233.                 { action: 'dvz_sb_delete', id: id, key: my_post_key },
  234.                 function(data) {
  235.  
  236.                     if (!dvz_shoutbox.handleErrors(data)) {
  237.  
  238.                         $('#shoutbox .entry[data-id="'+id+'"]').fadeOut(function(){ $(this).remove() });
  239.  
  240.                         dvz_shoutbox.runCallbacks('delete', { id: id });
  241.  
  242.                     }
  243.  
  244.                 }
  245.             );
  246.  
  247.         }
  248.  
  249.     },
  250.  
  251.     // functionality
  252.     toggle: function (status, remember) {
  253.  
  254.         if (status == true) {
  255.  
  256.             dvz_shoutbox.status = true;
  257.  
  258.             $('#shoutbox').removeClass('collapsed');
  259.             $('#shoutbox .body').fadeIn();
  260.  
  261.             if (dvz_shoutbox.frozen) {
  262.                 dvz_shoutbox.frozen = false;
  263.                 dvz_shoutbox.loop();
  264.             }
  265.  
  266.         } else {
  267.  
  268.             dvz_shoutbox.status = false;
  269.  
  270.             $('#shoutbox .body').stop(1).fadeOut(function(){
  271.                 if (dvz_shoutbox.status == false) $('#shoutbox').stop(1).addClass('collapsed');
  272.             });
  273.  
  274.         }
  275.  
  276.         if (remember !== false) {
  277.             document.cookie = cookiePrefix+'dvz_sb_status='+(+status)+'; path='+cookiePath+'; max-age=31536000';
  278.         }
  279.  
  280.         dvz_shoutbox.runCallbacks('toggle', { status: status });
  281.  
  282.     },
  283.  
  284.     // core
  285.     antifloodPass: function() {
  286.         var time = Math.floor((new Date).getTime() / 1000);
  287.         return (time - dvz_shoutbox.lastSent) >= dvz_shoutbox.antiflood;
  288.     },
  289.  
  290.     updateActivity: function () {
  291.         dvz_shoutbox.activity = (new Date).getTime();
  292.     },
  293.  
  294.     isAway: function () {
  295.         if (!dvz_shoutbox.awayTime) return false;
  296.         return (new Date).getTime() - dvz_shoutbox.activity > dvz_shoutbox.awayTime;
  297.     },
  298.  
  299.     onDisplay: function () {
  300.         var viewTop       = $(document).scrollTop(),
  301.             viewBottom    = viewTop + $(window).height(),
  302.             elementTop    = $('#shoutbox').offset().top,
  303.             elementBottom = elementTop + $('#shoutbox').height();
  304.  
  305.         return elementBottom >= (viewTop - dvz_shoutbox.lazyMargin) && elementTop <= (viewBottom + dvz_shoutbox.lazyMargin);
  306.     },
  307.  
  308.     checkVisibility: function () {
  309.         if (dvz_shoutbox.frozen && dvz_shoutbox.onDisplay()) {
  310.             dvz_shoutbox.frozen = false;
  311.             dvz_shoutbox.loop();
  312.         }
  313.     },
  314.  
  315.     lazyLoad: function () {
  316.         if (dvz_shoutbox.lazyMode && !dvz_shoutbox.onDisplay()) {
  317.             if (
  318.                 dvz_shoutbox.lazyMode == 'start' && !dvz_shoutbox.started ||
  319.                 dvz_shoutbox.lazyMode == 'always'
  320.             ) {
  321.                 return false;
  322.             }
  323.         }
  324.  
  325.         return true;
  326.     },
  327.  
  328.     handleErrors: function (response) {
  329.         if (response == 'A') {
  330.             alert(dvz_shoutbox.lang[1]);
  331.             return true;
  332.         } else
  333.         if (response == 'P') {
  334.             alert(dvz_shoutbox.lang[2]);
  335.             return true;
  336.         }
  337.         if (response == 'S') {
  338.             dvz_shoutbox.toggle(false);
  339.             return true;
  340.         }
  341.  
  342.         return false;
  343.     },
  344.  
  345.     runCallbacks: function (name, data) {
  346.         if (dvz_shoutbox.callbacks[name]) {
  347.             for (i in dvz_shoutbox.callbacks[name]) {
  348.                 dvz_shoutbox.callbacks[name][i](data);
  349.             }
  350.         }
  351.     },
  352.  
  353.     // visual
  354.     call: function (username) {
  355.  
  356.         var $input = $('#shoutbox input.text'),
  357.             words = $input.val().split(' '),
  358.             appendix = username;
  359.  
  360.         // enclose in quotes if needed
  361.         if (username.match( /[!?\(\)\[\]{}\s\\]+/g )) {
  362.             appendix = '"' + username + '"';
  363.         }
  364.  
  365.         // add a call sign
  366.         appendix = dvz_shoutbox.callSign + appendix;
  367.  
  368.         // add a leading space if suitable
  369.         if ($input.val() != '' && $input.val().slice(-1) != ' ') {
  370.             appendix = ' ' + appendix;
  371.         }
  372.  
  373.         // add a trailing space if suitable
  374.         for (i in words) {
  375.             if (words[i] != '' && words[i].slice(0,1) != dvz_shoutbox.callSign) {
  376.                 break;
  377.             }
  378.             if (i == words.length-1) {
  379.                 appendix = appendix + ' ';
  380.             }
  381.         }
  382.  
  383.         $('#shoutbox input.text').focus();
  384.         $('#shoutbox input.text').val($input.val() + appendix);
  385.         $('#shoutbox input.text').focus();
  386.  
  387.         dvz_shoutbox.runCallbacks('call', { username: username });
  388.  
  389.     },
  390.  
  391.     toggleForm: function (status) {
  392.         if (status == false) {
  393.             $("#shoutbox input.text").attr('disabled', 'disabled');
  394.         } else {
  395.             $("#shoutbox input.text").removeAttr('disabled');
  396.             $("#shoutbox input.text").focus();
  397.         }
  398.     },
  399.  
  400.     clearForm: function () {
  401.         $('#shoutbox input.text').val('');
  402.     },
  403.  
  404.     appendControls: function () {
  405.         dvz_shoutbox.runCallbacks('entries');
  406.  
  407.         $('#shoutbox .entry:not([parsed])').each(function(){
  408.  
  409.             if (typeof $(this).attr('data-mod') !== 'undefined') {
  410.                 $(this).children('.info').prepend('<a href="" class="mod edit">E</a><a href="" class="mod del">X</a>');
  411.             }
  412.  
  413.             $(this).attr('parsed', '');
  414.  
  415.         });
  416.     },
  417.  
  418. };
  419.  
  420. $(document).on('click', '#shoutbox .head', function() {
  421.     dvz_shoutbox.toggle(!dvz_shoutbox.status);
  422. });
  423. $(document).on('click', '#shoutbox .head a', function(e){
  424.     e.stopPropagation();
  425. });
  426. $(document).on('click', '#shoutbox .entry .avatar', function() {
  427.     dvz_shoutbox.call( $(this).parents('.entry').attr('data-username') );
  428.     return false;
  429. });
  430. $(document).on('click', '#shoutbox .entry .mod.edit', function() {
  431.     dvz_shoutbox.edit( $(this).parents('.entry').attr('data-id') );
  432.     return false;
  433. });
  434. $(document).on('click', '#shoutbox .entry .mod.del', function() {
  435.     dvz_shoutbox.delete( $(this).parents('.entry').attr('data-id') );
  436.     return false;
  437. });
  438. $(document).on('submit', '#shoutbox .panel form', function() {
  439.     dvz_shoutbox.shout();
  440.     return false;
  441. });
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top