From da15cfb1e452a0af4902272ba351d5a6d0d0b56a Mon Sep 17 00:00:00 2001 From: dumpfmprod Date: Tue, 17 Jul 2012 21:40:57 -0400 Subject: update src, scripts, etc from 2012 --- static/js/pichat.js | 229 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 216 insertions(+), 13 deletions(-) (limited to 'static/js/pichat.js') diff --git a/static/js/pichat.js b/static/js/pichat.js index afddec7..6eb5553 100644 --- a/static/js/pichat.js +++ b/static/js/pichat.js @@ -82,7 +82,7 @@ var Preferences = { function escapeHtml(txt) { if (!txt) { return ""; } -// txt = annoyingCaps(txt) + // txt = annoyingCaps(txt) return $("").text(txt).html() } @@ -223,7 +223,7 @@ function linkReplace(url) { if (type == 'image') { LastMsgContainsImage = true; - return ""; + return ""; } else if (type == 'youtube') { Youtube.startAnimation(); return "" + @@ -323,15 +323,23 @@ function removeOldMessages(){ } } -var TextEnabled = Preferences.getProperty("chat.textEnabled", "true") == "true"; +var TextEnabled = Preferences.getProperty("chat.textEnabled", "true") == "none"; var ImgsEnabled = Preferences.getProperty("chat.imgsEnabled", "true") == "true"; +function muteSelector() { + var muted = []; + for (nick in MUTES) { + muted.push(".nick_" + nick); + } + return muted.join(","); +} function setTextEnable() { + var muted = muteSelector(); if ($(this).attr('checked')) { TextEnabled = true; - Preferences.setProperty("chat.textEnabled", "true"); + Preferences.setProperty("chat.textEnabled", "false"); track('UI', 'TextEnabled'); - $('.dump').not('.contains-image').show(); + $('.dump').not('.contains-image,'+muted).show(); } else { TextEnabled = false; Preferences.setProperty("chat.textEnabled", "false"); @@ -341,11 +349,12 @@ function setTextEnable() { }; function setImgsEnable() { + var muted = muteSelector(); if ($(this).attr('checked')) { ImgsEnabled = true; Preferences.setProperty("chat.imgsEnabled", "true"); track('UI', 'ImgsEnabled'); - $('.contains-image').show(); + $('.contains-image').not(muted).show(); } else { ImgsEnabled = false; Preferences.setProperty("chat.imgsEnabled", "false"); @@ -372,8 +381,10 @@ function buildMessageDiv(msg, opts) { var loadingClass = opts.isLoading ? ' loading' : ''; var containsImageClass = LastMsgContainsImage ? ' contains-image' : ''; var displayStyle = ((ImgsEnabled && LastMsgContainsImage) || (TextEnabled && !LastMsgContainsImage)) ? '' : ' style="display: none"'; + if (displayStyle === '' && MUTES[nick]) + displayStyle = ' style="display: none"'; - return '
' + return '
' + '' + nick + '' + ' ' + '' @@ -381,17 +392,42 @@ function buildMessageDiv(msg, opts) { + '
'; } +var MUTES = {}; +$(".mute").live("click", function(){ + $(this).removeClass("mute"); + $(this).addClass("unmute"); + $(this).html("o"); + var nick = $(this).parent().children("a").html().replace(/]+>/,""); + $(".nick_" + nick).hide(); + MUTES[nick] = true; +}); +$(".unmute").live("click", function(){ + $(this).removeClass("unmute"); + $(this).addClass("mute"); + $(this).html("x"); + var nick = $(this).parent().children("a").html().replace(/]+>/,""); + $(".nick_" + nick).show(); + delete MUTES[nick]; +}); + function buildUserDiv(user) { + var muted = MUTES[user.nick] ? 'o' : 'x'; if (user.avatar) { return ''; + + escapeHtml(user.nick) + + '' + + '
'; } else { return ''; + + escapeHtml(user.nick) + + '' + + ''; } } @@ -425,7 +461,8 @@ function showFav(f) { function updateFavs(fs) { if (fs.length == 0) return; - $('#favbox').show(); +console.log("new faves"); + $('#favbox').show(); $(fs).each(function(i, f) { showFav(f) }); } @@ -538,11 +575,13 @@ function ifEnter(fn) { function addNewMessages(msgs) { var msgStr = $.map(msgs, buildMessageDiv).join(''); $('#messageList').append(msgStr); + Drag.bindImages(); } function addNewMessage(msg, isLoading) { var msgStr = buildMessageDiv(msg, { isLoading: true }); var div = $(msgStr).appendTo('#messageList'); + Drag.bindImages(); return div; } @@ -567,7 +606,7 @@ function updateUI(msgs, users, favs) { if (users !== null) { var flattened = flattenUserJson(users); if (!('userlist' in cache) || flattened != cache.userlist) { - $("#userList").html($.map(users.sort(sortUsersByAlpha), buildUserDiv).join('')); + $("#userList").html($.map(users.sort(sortUsersByAlpha), buildUserDiv).join('')); } cache.userlist = flattened } @@ -595,17 +634,18 @@ function refresh() { var onSuccess = function(json) { try { Timestamp = json.timestamp; - $.map(json.messages, function(msg){ MessageContentCache[msg.msg_id.toString()] = msg.content }) + $.map(json.messages, function(msg){ MessageContentCache[msg.msg_id.toString()] = msg.content }) var messages = $.grep( json.messages, function(m) { return !isDuplicateMessage(m) }); updateUI(messages, json.users, json.favs); +console.log("update ui"); if (!Away.HasFocus) Away.UnseenMsgCounter += messages.length; } catch(e) { if (IsAdmin && window.console) { - console.error(e); + console.log(e); } } setTimeout(refresh, 1500); @@ -667,6 +707,7 @@ function initChat() { else dump.hide(); }); + Drag.bindImages(); $('#msgInput').keyup(ifEnter(submitMessage)); $('#msgSubmit').click(sendClicked); @@ -1970,3 +2011,165 @@ var SHA1 = { }, "bit_rol": function(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)) } } + +window.Drag = { + 'imgSrc': "", + 'bindImages': function (){ + $('.unbound').each(function(index,img){ + img.addEventListener('dragstart', Drag.start, false); + $(this).removeClass('unbound'); + }); + }, + 'start': function(e){ + // console.log(this); + if (this.src) Drag.imgSrc = this.src; + }, + 'enter': function(e){ + Drag.chatbox.classList.add('over'); + // console.log('enter') + return false; + }, + 'over': function(e){ + if (e.preventDefault) { + e.preventDefault(); // Necessary. Allows us to drop. + } + // console.log('over') + return false; + }, + 'leave': function(e){ + Drag.chatbox.classList.remove('leave'); + // console.log('leave') + return false; + }, + 'end': function(e){ + Drag.chatbox.classList.remove('end'); + // console.log('end') + return false; + }, + 'drop': function(e){ + Drag.chatbox.classList.remove('over'); + if (e.stopPropagation) { + e.stopPropagation(); // stops the browser from redirecting. + } + if (e.preventDefault) { + e.preventDefault(); + } + // console.log('drop'); + Drag.chatbox.value += " " + Drag.imgSrc; + Drag.chatbox.value += " "; + Drag.chatbox.focus(); + // console.log(Drag.imgSrc); + Drag.imgSrc = ""; + // ok.onclick(); + return false; + } +} +$(function(){ + Drag.chatbox = document.getElementById("msgInput"); + if (! Drag.chatbox || $.browser.mozilla) return; + Drag.chatbox.addEventListener('dragenter', Drag.enter, false); + Drag.chatbox.addEventListener('dragover', Drag.over, false); + Drag.chatbox.addEventListener('dragleave', Drag.leave, false); + Drag.chatbox.addEventListener('dragend', Drag.end, false); + Drag.chatbox.addEventListener('drop', Drag.drop, false); +}); + +// generate a new CSS rule and apply it immediately +// (more persistent than dumping a style tag) +window.cssRule = function (selector, declaration) { + var x = document.styleSheets,y=x.length-1; + x[y].insertRule(selector+"{"+declaration+"}",x[y].cssRules.length); + $(selector).css(declaration.split(": ")); +}; + + +// manual fave palette by ohgod +$(function(){ + $('#manual-palette-button').click(manPaletteClicked); + $('#manual-add-button').click(function () { + addManualFav($('#manual-add-url-txt').val().trim()); + $('#manual-add-url-txt').val(""); + }); + $('#manual-remove-button').click(function () { + removeManualFav($('#manual-add-url-txt').val().trim()); + $('#manual-add-url-txt').val(""); + }); +}); + +function manPaletteClicked() { + if ($("#manual-palette").css("display") == "none") { + manPaletteShow(); + } else { + $("#manual-palette").css("display", "none"); + $("#manual-palette-thumbs").html(""); + } +}; + +function manPaletteShow() { + $("#manual-palette").show(); + if (! hasLocalStorage()) { + $('#manual-palette-localstorage-error').show() + } else if (manPaletteIsEmpty()) { + $('#manual-palette-thumbs-empty').show(); + } else { + manualPaletteBuildImageThumbs(); + } +}; + +function hasLocalStorage() { + try { + return 'localStorage' in window && window['localStorage'] !== null; + } catch (e) { + return false; + } +} + +function manPaletteIsEmpty() { + return localStorage.manual_favs === undefined || localStorage.manual_favs === "[]" || localStorage.manual_favs === ""; +}; + +function getManualFaves() { + return localStorage.manual_favs ? JSON.parse(localStorage.manual_favs) : []; +}; + +function setManualFaves(mfavs) { + localStorage.manual_favs = JSON.stringify(mfavs); +}; + +function manualPaletteBuildImageThumbs() { + var imgs = JSON.parse(localStorage.manual_favs); + if (imgs && imgs.length != 0) { + for (var i = 0; i < imgs.length; i++) { + $("#manual-palette-thumbs").append(""); + } + } +}; + +function addManualFav(imgsrc) { + if (!imgsrc) return; + if (hasLocalStorage()) { + if (manPaletteIsEmpty()) + $("#manual-palette-thumbs").html(""); + var mfavs = getManualFaves(); + if ($.inArray(imgsrc, mfavs) == -1) { + mfavs.push(imgsrc); + setManualFaves(mfavs); + $("#manual-palette-thumbs").append(""); + } + } +}; + +function removeManualFav(imgsrc) { + if (hasLocalStorage()) { + var mfavs = getManualFaves(); + var idx = $.inArray(imgsrc, mfavs); + if (idx != -1) { + mfavs.splice(idx, 1); + setManualFaves(mfavs); + $("#manual-palette-thumbs").html(""); + manualPaletteBuildImageThumbs(); + } + } +}; + + -- cgit v1.2.3-70-g09d2