1var icms = icms || {}; 2var Notification = window.Notification || window.mozNotification || window.webkitNotification; 3 4icms.messages = (function ($) { 5 6 var self = this; 7 8 this.is_modal = true; 9 this.contactId = null; 10 this.msg_ids = []; 11 12 this.options = { 13 isRefresh: false, 14 refreshInterval: 15000 15 }; 16 17 this.desktopNotification = function (title, params){ 18 if(Notification) { 19 var instance = Notification.requestPermission(function (permission){ 20 if(permission !== 'granted') { return false; } 21 notification = new Notification(title, params); 22 }); 23 } 24 }; 25 26 this.setMsgLastDate = function (last_date){ 27 $('#msg_last_date').val(last_date); 28 }; 29 30 this.getMsgLastDate = function (){ 31 return $('#msg_last_date').val(); 32 }; 33 34 this.showLoader = function (){ 35 $('#pm_window .left-panel').html('<div class="spinner"><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div>'); 36 }; 37 38 this.initUserSearch = function (){ 39 var user_list = $('#pm_window .right-panel .contacts .contact'); 40 $('#user_search_panel input').on('input', function() { 41 var uquery = $(this).val(); 42 $(user_list).show(); 43 if(uquery.length > 1){ 44 s = $('.contact_nickname:Contains("'+uquery+'")', user_list).parents('.contact'); 45 $(user_list).show().not(s).hide(); 46 } 47 }); 48 }; 49 50 this.bindMyMsg = function (){ 51 var default_hint = null; 52 $('#pm_window .left-panel').on('mouseup', '.is_can_select', function (){ 53 var is_selected = ''; 54 if (window.getSelection) { 55 is_selected = window.getSelection().toString(); 56 } else if (document.selection) { 57 is_selected = document.selection.createRange().text; 58 } 59 if (is_selected.length > 0){ return false; } 60 if(default_hint === null){ 61 default_hint = $('#delete_msgs').val(); 62 } 63 $(this).toggleClass('selected'); 64 var msg_selected = $(this).parents('#pm_chat').find('.is_can_select.selected'); 65 var selected_length = $(msg_selected).length; 66 icms.messages.msg_ids = []; 67 if(selected_length > 0){ 68 $('#delete_msgs').val(default_hint+' ('+selected_length+')').show(); 69 $(msg_selected).each(function (){ 70 icms.messages.msg_ids.push($(this).data('id')); 71 }); 72 } else { 73 $('#delete_msgs').val(default_hint).hide(); 74 } 75 }); 76 }; 77 78 this.deleteMsgs = function (){ 79 if(this.msg_ids.length > 0){ 80 81 var pm_window = $('#pm_window'); 82 83 var url = $(pm_window).data('delete-mesage-url'); 84 85 $.post(url, {message_ids: this.msg_ids}, function(result) { 86 87 icms.messages.msg_ids = []; 88 89 if (result.error) { return; } 90 91 $('.left-panel .is_can_select', pm_window).removeClass('selected'); 92 $('#delete_msgs').hide(); 93 94 var replace_func = function (id, delete_text, is_remove_block){ 95 var msg_block = $('#message-' + id, pm_window); 96 $(msg_block).find('.is_can_select').removeClass('is_can_select'). 97 find('.message_text').hide(). 98 after('<span>'+delete_text+'</span>'); 99 if(is_remove_block){ 100 $(msg_block).delay(3000).fadeOut(); 101 } 102 }; 103 104 if(result.message_ids){ 105 for(var key in result.message_ids){ 106 replace_func(result.message_ids[key], result.delete_text); 107 } 108 } 109 110 if(result.delete_msg_ids){ 111 for(var key in result.delete_msg_ids){ 112 replace_func(result.delete_msg_ids[key], result.remove_text, true); 113 } 114 } 115 116 }, 'json'); 117 } 118 return false;
119 }; 120 121 this.restoreMsg = function (linkObj){ 122 123 var pm_window = $('#pm_window'); 124 var url = $(pm_window).data('restore-mesage-url'); 125 var _content = $(linkObj).closest('.content'); 126 127 $.post(url, {message_id: $(_content).data('id')}, function(result) { 128 129 if (result.error) { return; } 130 131 $(_content).addClass('is_can_select').find('.message_text').show(); 132 $('> span', _content).remove(); 133 134 }, 'json'); 135 136 return false; 137 }; 138 139 this.selectContact = function(id){ 140 141 if(Notification) { 142 Notification.requestPermission(function (permission){}); 143 } 144 145 var pm_window = $('#pm_window'); 146 var contact = $('#contact-' + id, pm_window); 147 148 $('.messages .counter').fadeOut(); 149 150 $('.contacts a', pm_window).removeClass('selected'); 151 152 $('a', contact).addClass('selected'); 153 154 icms.messages.showLoader(); 155 156 var url = pm_window.data('contact-url'); 157 var form_data = {contact_id: id}; 158 159 if(self.is_modal){ 160 icms.modal.setCallback('close', function(){ 161 icms.messages.options.isRefresh = false; 162 }); 163 } 164 165 this.msg_ids = []; 166 167 $.post(url, form_data, function(result){ 168 169 if(!$('.left-panel', pm_window).is(':visible')){ 170 $('.right-panel').hide().css({left: ''}); 171 $('.left-panel').show(); 172 } 173 174 $('.left-panel', pm_window).html(result); 175 176 $('.left-panel textarea', pm_window).focus(); 177 178 icms.messages.setContactCounter(id, 0); 179 180 icms.messages.scrollChat(); 181 182 $('.composer form', pm_window).on('keydown', function(event){ 183 if (event.keyCode === 10 || event.keyCode == 13 && event.ctrlKey) { 184 icms.messages.send(); 185 } 186 }); 187 188 $('#contact_toggle', pm_window).off('click').on('click', function(event){ 189 $('.left-panel').hide(); 190 $('.right-panel').show().animate({left: '0px'}, 200); 191 }); 192 193 if($('.overview > a > span', pm_window).first().hasClass('peer_online')){ 194 $('a > span', contact).first().addClass('peer_online'); 195 $('a > strong', contact).remove(); 196 } else { 197 $('a > span', contact).first().removeClass('peer_online'); 198 if(!$('a > strong', contact).length){ 199 $('a', contact).append('<strong>'+$('.overview .user_date_log > span', pm_window).text()+'</strong>'); 200 } else { 201 $('a > strong', contact).html($('.overview .user_date_log > span', pm_window).text()); 202 } 203 } 204 205 icms.messages.contactId = id; 206 207 if(!icms.messages.options.isRefresh) { 208 icms.messages.options.isRefresh = true; 209 setTimeout('icms.messages.refresh()', icms.messages.options.refreshInterval); 210 } 211 212 }, 'html'); 213 214 return false; 215 216 }; 217 218 this.scrollChat = function(){ 219 $('#pm_chat').stop().animate({ 220 scrollTop: $('#pm_chat')[0].scrollHeight 221 }, 500); 222 if(self.is_modal){ 223 $('.nyroModalCont').stop().animate({ 224 scrollTop: $('.nyroModalCont')[0].scrollHeight 225 }, 500); 226 } 227 }; 228 229 //====================================================================// 230 231 this.send = function(){ 232 233 var form = $('#pm_contact .composer form'); 234 235 var form_data = icms.forms.toJSON( form ); 236 237 if (!form_data.content) {return;} 238 239 var url = form.attr('action'); 240 241 $('.buttons', form).addClass('sending').find('.button').prop('disabled', true); 242 243 $.post(url, form_data, function(result){ 244 245 $('.buttons', form).removeClass('sending').find('.button').prop('disabled', false); 246 247 if (!result.error){ 248 icms.forms.wysiwygInsertText('content', ''); 249 $('textarea', form).focus(); 250 icms.messages.addMessage(result); 251 } else { 252 if (result.message.length){ 253 icms.messages.error(result.message); 254 } 255 } 256 257 }, 'json'); 258 259 }; 260 261 this.addMessage = function(result){ 262 263 if (result.error){ 264 return icms.messages.error(result.message); 265 } 266 267 if (result.message){ 268 $('#pm_contact .chat').append(result.message); 269 this.scrollChat(); 270 } 271 272 }; 273 274 this.error = function (text){ 275 $('#error_wrap').html(text).fadeIn().delay(5000).fadeOut(); return false;
276 }; 277 278 this.confirm = function (text, callback){ 279 var pm_window = $('#pm_window'); 280 pm_window.addClass('wrap_blur'); 281 $('.nyroModalCont').append('<div class="msg_overlay"></div><div class="confirm_wrap"><div class="ui_message">'+text.replace(/\n/g, '<br />')+'<div class="buttons"><input type="button" class="button" id="btn_yes" value="'+LANG_YES+'"><input type="button" class="button" id="btn_no" value="'+LANG_NO+'"></div></div></div>'); 282 $('#btn_yes').one('click', function () { 283 if (callback){ callback(true); } 284 $('.msg_overlay, .confirm_wrap').remove(); pm_window.removeClass('wrap_blur'); 285 }); 286 $('#btn_no, .msg_overlay').one('click', function () { 287 if (callback){ callback(false); } 288 $('.msg_overlay, .confirm_wrap').remove(); pm_window.removeClass('wrap_blur'); 289 }); 290 return false; 291 }; 292 293 //====================================================================// 294 295 this.setContactCounter = function(id, value){ 296 297 var contact = $('#pm_window #contact-' + id); 298 299 $('.counter', contact).remove(); 300 301 if (value > 0){ 302 303 var html = '<span class="counter">' + value + '</span>'; 304 $('a', contact).append(html); 305 306 } 307 308 }; 309 310 //====================================================================// 311 312 this.refresh = function(){ 313 314 if (!icms.messages.options.isRefresh) {return false;} 315 316 var pm_window = $('#pm_window:visible'); 317 if ($(pm_window).length == 0){return false;} 318 319 var form = $('.composer form', pm_window); 320 321 var url = pm_window.data('refresh-url'); 322 323 $('.buttons', form).addClass('sending'); 324 325 $.post(url, {contact_id: this.contactId, last_date: this.getMsgLastDate()}, function(result){ 326 327 $('.buttons', form).removeClass('sending'); 328 329 if (result.error) { 330 icms.messages.options.isRefresh = false; 331 return false; 332 } 333 334 if (result.html){ 335 $('#pm_chat', pm_window).append(result.html); 336 $('#pm_chat .message .content .date-new', pm_window).removeClass('date-new').addClass('date'); 337 icms.messages.scrollChat(); 338 } 339 340 var contact = $('#contact-' + result.contact_id, pm_window); 341 342 if(result.is_online == 1){ 343 $('a > span', contact).first().addClass('peer_online'); 344 $('a > strong', contact).remove(); 345 $('.overview > a > span', pm_window).first().addClass('peer_online'); 346 $('.overview .user_date_log', pm_window).hide(); 347 } else { 348 $('a > span', contact).first().removeClass('peer_online'); 349 if(!$('a > strong', contact).length){ 350 $('a', contact).append('<strong>'+result.date_log+'</strong>'); 351 } else { 352 $('a > strong', contact).html(result.date_log); 353 } 354 $('.overview > a > span', pm_window).first().removeClass('peer_online'); 355 $('.overview .user_date_log', pm_window).show().find('span').html(result.date_log); 356 } 357 358 setTimeout('icms.messages.refresh()', icms.messages.options.refreshInterval); 359 360 }, 'json'); 361 362 return true; 363 364 }; 365 366 //====================================================================// 367 368 this.deleteContact = function(id){ 369 370 this.confirm(LANG_PM_DELETE_CONTACT_CONFIRM, function (success){ 371 372 if(!success){ return false; } 373 374 icms.messages.showLoader(); 375 376 var url = $(pm_window).data('delete-url'); 377 var form_data = {contact_id: id}; 378 379 $.post(url, form_data, function(result) { 380 381 if (result.error) {return;} 382 383 $('#contact-' + id, pm_window).remove(); 384 385 if (result.count > 0){ 386 var next_id = $('.contact', pm_window).eq(0).attr('rel'); 387 icms.messages.selectContact(next_id); 388 } else { 389 if(self.is_modal){ 390 icms.modal.close(); 391 } 392 } 393 394 }, 'json'); 395 396 return true; 397 398 }); 399 400 return true; 401 402 }; 403 404 this.ignoreContact = function(id){ 405 406 this.confirm(LANG_PM_IGNORE_CONTACT_CONFIRM, function (success){ 407 408 if(!success){ return false; } 409 410 icms.messages.showLoader(); 411 412 var url = $(pm_window).data('ignore-url'); 413 var form_data = {contact_id: id}; 414 415 $.post(url, form_data, function(result) { 416 417 if (result.error) {return false;} 418 419 $('#contact-' + id, pm_window).remove(); 420 421 if (result.count > 0){ 422 var next_id = $('.contact', pm_window).eq(0).attr('rel'); 423 icms.messages.selectContact(next_id); 424 } else { 425 if(self.is_modal){ 426 icms.modal.close(); 427 } 428 } 429 430 }, 'json'); 431 432 return true; 433 434 }); 435 436 }; 437 438 this.forgiveContact = function(id){ 439 440 var pm_window = $('#pm_window'); 441 442 var url = pm_window.data('forgive-url'); 443 var form_data = {contact_id: id}; 444 445 $.post(url, form_data, function(result) { 446 447 if (result.error) {return false;} 448 449 icms.messages.selectContact(id); 450 451 }, "json"); 452 453 return true; 454 455 }; 456 457 //====================================================================// 458 459 this.showOlder = function(contact_id, link_obj){ 460 461 var pm_window = $('#pm_window'); 462 var pm_chat = $('#pm_chat', pm_window); 463
464 var url = pm_window.data('show-older-url'); 465 466 var message_id = $(link_obj).attr('rel'); 467 468 var form_data = { 469 contact_id: contact_id, 470 message_id: message_id 471 }; 472 473 $('.show-older', pm_chat).hide(); 474 $('.older-loading', pm_chat).show(); 475 476 $.post(url, form_data, function(result) { 477 478 $('.older-loading', pm_chat).hide(); 479 480 if (result.error) {return;} 481 482 if (result.html){ 483 484 $('.show-older', pm_chat).after( result.html ); 485 486 var msg_top = $('#message-'+message_id, pm_chat).position().top; 487 488 pm_chat.scrollTop(pm_chat.scrollTop() + msg_top); 489 490 } 491 492 if (result.has_older){ 493 $('.show-older', pm_chat).attr('rel', result.older_id).show(); 494 } 495 496 }, "json"); 497 498 return false; 499 500 }; 501 502 this.noticeAction = function(id, name){ 503 504 var pm_notices_window = $('#pm_notices_window'); 505 506 var url = pm_notices_window.data('action-url'); 507 508 var form_data = { 509 notice_id: id, 510 action_name: name 511 }; 512 513 $.post(url, form_data, function(result) { 514 515 if (result.error) { 516 return false; 517 } 518 519 if (result.href){ 520 window.location.href = result.href; 521 } 522 523 $('#notice-'+id, pm_notices_window).fadeOut(300, function(){ 524 $(this).remove(); 525 var count = $('.item', pm_notices_window).length; 526 icms.messages.setNoticesCounter(count); 527 if(self.is_modal){ 528 if (count==0){icms.modal.close();} else {icms.modal.resize();} 529 } 530 }); 531 532 }, "json"); 533 534 return false; 535 536 }; 537 538 this.noticeClear = function(){ 539 540 this.confirm(LANG_PM_CLEAR_NOTICE_CONFIRM, function (success){ 541 542 if(!success){ return false; } 543 544 var pm_notices_window = $('#pm_notices_window'); 545 var url = pm_notices_window.data('action-url'); 546 547 $.post(url, {action_name: 'clear_notice'}, function(result) { 548 549 if (result.error) { 550 return false; 551 } 552 553 $('.item', pm_notices_window).fadeOut('fast', function(){ 554 $(this).remove(); 555 var count = $('.item', pm_notices_window).length; 556 icms.messages.setNoticesCounter(count); 557 if(self.is_modal){ 558 if (count==0){icms.modal.close();} else {icms.modal.resize();} 559 } 560 }); 561 562 }, 'json'); 563 564 return true; 565 566 }); 567 568 return false; 569 570 }; 571 572 this.setNoticesCounter = function(value){ 573 574 var button = $('li.notices-counter'); 575 576 $('.counter', button).remove(); 577 578 if (value > 0){ 579 var html = '<span class="counter">' + value + '</span>'; 580 $('a', button).append(html); 581 } else { 582 $(button).remove(); 583 } 584 585 }; 586 587 return this; 588 589}).call(icms.messages || {},jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.