Git Product home page Git Product logo

prat-3-0's Introduction

Prat-3.0 is a chat enhancement addon for world of warcraft.

It is made up of 30+ smaller "modules" which each provide additional functionality, and can be enabled or disabled individually.

In game, type /prat for a menu.

Bug reports: https://github.com/sylvanaar/prat-3-0/issues

Prat has just about every feature you can think of, and then some. Really. When I get some more time, I'll try and put together a full list (Even I have lost count)

(Thanks to Dreamsight for this partial list)

  • Change arrows, buttons, mouse scroll for chat scroll, scroll speed
  • you can add color per channel, color per lvl, color per class
  • timestamps
  • timestamp color
  • whether to show timestamp (what format the timestamp should be in)
  • whether to show players lvl
  • you can select the option for channel "stickys" (last channel you used you auto use when hitting enter, that sort of thing – or last thing someone said)
  • change the looks of the chat's editbox - as well as where it appears (you can even undock it and move it to where you'd like it to be)
  • chat fading, fading delay
  • You can change the font to a list of fonts, add an outline to it, monochrome it (if you don’t mind messing with files a bit you could prolly even add other fonts to that list)
  • change the chat frame/chat box appearance
  • set Chat history
  • set channel abbreviations
  • set brackets and color(or something instead of brackets)round player/lvl
  • alt invite option (press keyboard “alt” button and click on the player’s name to auto inv them)
  • raid icon
  • invite links
  • info keeping
  • url copying
  • full chat copying + copy button
  • allows pop-up msgs
  • enables tell target /tt
  • Alias options
  • altnames options
  • you can enable/disable all prat modules - dont have to have the ones you dont use running
  • change chat sounds (incoming and outgoing as well as per channel)
  • achievement info and grats
  • full chat search
  • fully customizable filers for advanced users/li>

Its predecessor, Prat-2.0 has been around since the TBC release in 2006. This new version seeks to improve upon some aspects such as memory use, but still do so without creating 30+ small folders in your addon directory that you have to manage.

While trying to reduce resource utilization, it is also important to note that some people prefer the features, and don't care that an addon uses 500k more. I have been trying to isolate the most resource intensive functionality into the Prat_HighCPUUSageModules folder. You can enable or disable it per your preference.

prat-3-0's People

Contributors

funkydude avatar isitlove avatar kyroskrane avatar lukazoid avatar mitalie avatar nebularg avatar pigeond-wow avatar raccube avatar shauren avatar smthpickboy avatar sylvanaar avatar thrayl avatar vashidu avatar wanderingfox avatar xionglingfeng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

prat-3-0's Issues

Parts of words are class-colored when preceded with non-English characters

Prat colors part of strings that includes player names if non-English characters are right before it, such as öåä etc. When those characters are after the player string it works fine. Best described with a screenshot:

image

This is on classic and latest version of the addon (always been like this on classic).
I haven't tested on retail.

Guild Controls [Classic]

I cannot change rank names or privileges when Prat is enabled. If I change the name of the rank, it changes my rank (I'm the GM). If I switch to another rank and check a privilege, it changes my rank name, and doesn't change the privilege on the rank I was trying to change. It does not throw an error. It took trial and error to figure out which addon was causing the issue. From this error, it could be that it isn't playing nice with Zygor Guides:

Date: 2019-12-04 15:20:31
ID: -1
Error occured in: AddOn: ZygorGuidesViewerClassic
Count: 1
Message: Error: AddOn ZygorGuidesViewerClassic attempted to call a forbidden function (GuildControlSetRank()) from a tainted execution path.
Debug:
[C]: GuildControlSetRank()
..\FrameXML\FriendsFrame.lua:2514: func()
..\FrameXML\UIDropDownMenu.lua:958: UIDropDownMenuButton_OnClick()
[string ":OnClick"]:1:
[string "
:OnClick"]:1
Locals:
None
AddOns:
Swatter, v8.2.6511 (SwimmingSeadragon)
AtlasLootClassic, vv1.4.1
AtlasLootClassicData, vv1.4.1
AtlasLootClassicDungeonsAndRaids, vv1.4.1
AucAdvanced, v8.2.6471 (SwimmingSeadragon)
AucFilterBasic, v8.2.6497 (SwimmingSeadragon)
AucScanData, v8.2.6498 (SwimmingSeadragon)
AucStatHistogram, v8.2.6499 (SwimmingSeadragon)
AucStatiLevel, v8.2.6503 (SwimmingSeadragon)
AucStatPurchased, v8.2.6500 (SwimmingSeadragon)
AucStatSimple, v8.2.6501 (SwimmingSeadragon)
AucStatStdDev, v8.2.6502 (SwimmingSeadragon)
AucUtilFixAH, v8.2.6504 (SwimmingSeadragon)
BagBrother, v
Bagnon, v8.2.16
BagnonConfig, v
BeanCounter, v8.2.6505 (SwimmingSeadragon)
CensusPlusClassic, v1.13.2
CharacterStatsClassic, v2.7
ClassicThreatMeter, v1.10
DBMCore, v1.13.22
DBMDefaultSkin, v
DBMStatusBarTimers, v
Dismounter, v1.2.1
Enchantrix, v8.2.6506 (SwimmingSeadragon)
EnchantrixBarker, v8.2.6507 (SwimmingSeadragon)
GatherMate2, v1.45.5
GTFO, v4.51
GuildRosterManager, v1.831
Informant, v8.2.6508 (SwimmingSeadragon)
nUI, v1.13.2.31727.3
PallyPower, vv1.1b-classic
Prat30, v3.7.41
Prat30Libraries, v
Questie, v5.2.3
Recount, vv1.13.2f
SlideBar, v8.2.6509 (SwimmingSeadragon)
Spy, v1.0.16
Stubby, v8.2.6510 (SwimmingSeadragon)
TomTom, vv80205-1.0.8
ZygorGuidesViewerClassic, v1.0
BlizRuntimeLib_enUS v1.13.2.11302
(ck=55a)

Buttons mouseover

It would be nice to have an option so buttons from Buttons module only show when you mouseover chat.

Error when sending or recieving Message from BNet Account

I get an error every message i send to a BattleNet account on my fl.
Seems like it tries to colorize the name, but has no class.

38x Prat-3.0-3.7.36\services\classcolor.lua:19: attempt to index local 'class' (a nil value) Prat-3.0-3.7.36\services\classcolor.lua:19: in function `GetClassGetColor' Prat-3.0-3.7.36\modules\PlayerNames.lua:1460: in function `GetClassColor' Prat-3.0-3.7.36\modules\PlayerNames.lua:1351: in function `Class' Prat-3.0-3.7.36\modules\PlayerNames.lua:1519: in function `FormatPlayer' Prat-3.0-3.7.36\modules\PlayerNames.lua:1623: in function `?' ...tip\libs\CallbackHandler-1.0\CallbackHandler-1.0-7.lua:119: in function <...tip\libs\CallbackHandler-1.0\CallbackHandler-1.0.lua:119> [C]: ? ...tip\libs\CallbackHandler-1.0\CallbackHandler-1.0-7.lua:29: in function <...tip\libs\CallbackHandler-1.0\CallbackHandler-1.0.lua:25> ...tip\libs\CallbackHandler-1.0\CallbackHandler-1.0-7.lua:64: in function `Fire' Prat-3.0-3.7.36\addon\addon.lua:626: in function <Prat-3.0\addon\addon.lua:567> (tail call): ? FrameXML\ChatFrame.lua:3012: in function `ChatFrame_OnEvent' [string "*:OnEvent"]:1: in function <[string "*:OnEvent"]:1>

Highlight configuration?

There seems to be no way you can configure highlights?

For example my priests name is Kwakzalver, but everyone says "kwak".

I could use a CustomFilter to do this, but shouldn't there be a configuration side to highlights like the tooltip hints at?

WoWScrnShot_091619_164135

Error trying to right click name in chat and do a who lookup [Classic]

Date: 2019-10-03 02:19:02
ID: 1
Error occured in: Global
Count: 1
Message: ..\AddOns\Prat-3.0\modules\PlayerNames.lua line 876:
attempt to call global 'SendWho' (a nil value)
Debug:
[C]: SendWho()
Prat-3.0\modules\PlayerNames.lua:876: func()
..\FrameXML\UIDropDownMenu.lua:958: UIDropDownMenuButton_OnClick()
[string ":OnClick"]:1:
[string "
:OnClick"]:1
Locals:

AddOns:
Swatter, v8.2.6377 (SwimmingSeadragon)
WowheadLooter, v11302
ACP, v3.5.6
AdvancedInterfaceOptions, v1.3.3
Atlas, vv1.45.01.11302
AtlasClassicWoW, vv1.45.00.11302.05
AtlasLootClassic, vv1.2.2
AtlasLootClassicDungeonsAndRaids, vv1.2.2
AtlasLootClassicMaps, vv1.0.0
ATTClassic, v0.1.0
AucAdvanced, v8.2.6430 (SwimmingSeadragon)
AucFilterBasic, v8.2.6364 (SwimmingSeadragon)
AucScanData, v8.2.6365 (SwimmingSeadragon)
AucStatHistogram, v8.2.6366 (SwimmingSeadragon)
AucStatiLevel, v8.2.6370 (SwimmingSeadragon)
AucStatPurchased, v8.2.6367 (SwimmingSeadragon)
AucStatSimple, v8.2.6399 (SwimmingSeadragon)
AucStatStdDev, v8.2.6369 (SwimmingSeadragon)
AucUtilFixAH, v8.2.6371 (SwimmingSeadragon)
BagBrother, v
Bagnon, v8.2.15
Bartender4, v4.8.8
BeanCounter, v8.2.6434 (SwimmingSeadragon)
BetterVendorPrice, vv1.09.01
BrokerAFK, vr89
BrokerEverything, v3.5.15-release
BrokerRunSpeed, v1.0 (Classic)
ChatLinkIcons, v2.0
ClassicAuraDurations, v
ClassicCastbars, vv1.0.9
ClassicCastbarsOptions, v
ClassicThreatMeter, v1.10
ClickLinks, v1.0.8
Coordinates, v2.1.0
DBMCore, v1.13.13b
DBMDefaultSkin, v
DBMStatusBarTimers, v
DejaClassicStats, v1302r026
Enchantrix, v8.2.6428 (SwimmingSeadragon)
EnchantrixBarker, v8.2.6454 (SwimmingSeadragon)
ExpJunkieClassic, v1.0c
EZJunk, v1.0.1
GatherMate2, v1.45.5
GTFO, v4.50.1
Guidelime, v1.032
GuidelimeBusteas160leveling, v1.7.0-Release
GuidelimeSage, v1.0
IAmAMerchant, v010000
InFlightLoad, v1.13.003
ItemTooltipProfessionIcons, v1.1.2
LetMeCast, v1.3
MaekorOverpowerAlert, v0.1
Misspelled, v1.7.4
OmniCC, v8.2.5
Postal, vv3.6.0
Prat30, v3.7.36
Prat30Libraries, v
Quartz, v3.5.2
QuestFrameFixer, v1.1.1
Questie, v4.1.1 BETA
Recount, vv1.13.2d
Scrap, v13.19
ScrapSpotlight, v13.19
SexyMap, vv3-classic
ShadowedUnitFrames, vv4.2-Classic-Beta7
SlideBar, v8.2.6375 (SwimmingSeadragon)
Stubby, v8.2.6376 (SwimmingSeadragon)
Titan, v5.17.1.80100
TitanBag, v5.17.1.80100
TitanClock, v5.17.1.80100
TitanGold, v5.17.1.80100
TitanLocation, v5.17.1.80100
TitanMail, v7.35
TitanPerformance, v5.17.1.80100
TitanReloadUI, v1.0
TitanRepair, v5.17.1.80100
TitanShard, v4.3.1.30300
TitanVolume, v5.17.1.80100
TitanXP, v5.17.1.80100
TomCats, v0.0.2
TomTom, vv11302-1.0.7
TownsfolkTracker, v1.0.6
TrackResources, v0.5
TradeSkillMaster, vv4.8.14
TradeSkillMasterAppHelper, vv4.0.5
WeakAuras, v2.15.2
WIM, v3.8.0
BlizRuntimeLib_enUS v1.13.2.11302
(ck=9eb)

Add Report Player Option

Players can only be reported via right-click and report, but Prat removes that option from the chat frame. This makes it impossible to report the gold spammers.

Prat is breaking my addon: my chat filters has no effect if Prat is installed

So, in my addon I do ChatFrame_AddMessageEventFilter("CHAT_MSG_COMBAT_HONOR_GAIN", CHAT_MSG_COMBAT_HONOR_GAIN_HANDLER).
If Prat is installed, handler is called, but the original message is displayed, instead of modified one.
In my chat filter I return:

return nil, msg .. format(" kills: %d, honor: |cff00FF96%d", HonorSpy.db.char.today_kills[victim], est_honor), arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, id, ...

and this suffix is not printed into chat.

To debug, install HonorSpy and check it.

Setting background opacity in Classic

Is there a way to set the background opacity for all of the tabs in Prat? I'm currently doing this in the Blizzard UI and it's not user friendly at all.

  • No indicator to see the specific opacity setting
  • Unable to set all tabs uniformly, instead it's required to set each one manually
  • Opacity settings don't seem to be persistent after logging off or disconnecting

I was hoping that this was something I could do within Prat but either it's not part of the functionality or I'm overlooking where these settings might be.

[UPDATE TO:] Method Dungeon Tools links not working #5

Hi there.

So in the new version links send from other players indeed work now without the workaround.
But if I send a link myself I have the same problem.
It's not a big deal because I have the route already in my MDT, but it's kinda weird.

Also "/pratdebugmsg" shows an empty frame now, so I have to post a screenshot.

WoWScrnShot_083119_212544

WoWScrnShot_083119_204451

WoWScrnShot_083119_204816

Guild Highlighting Matches Greedily

Given the following message:

<Test Guild 1> is fighting <Test Guild 2> in Hillsbrad!

The following appears:

Bad Highlighting

You can see the incorrect highlighting also includes the brackets and the words is fighting.

I believe these should not be included as a guild name cannot include < or > so these should never be included.

I have made the change required to fix this and will make a pull request shortly.

[Classic]wrong font used when whispering

I'm using the Chinese WoW Classic client with language set to English (it's almost the same as the English client with a few exceptions).

I installed prat 3.0 for classic, and set font to "WenQuanYi Zen Hei" which is a Chinese font loaded by SharedMedia addon. It works fine for most parts, but when I click someone with a Chinese ID to whisper, in the whisper window, all Chinese characters are displayed as "?", I assume that's because prat 3.0 doesn't pickup the right font.

wrong_font

[Feature Request] Disable certain player name highlighting

Forgive me if this already exists and I couldn't find it, but I'm looking for a way to disable highlights for certain names or certain name lengths (from the "Color Names Everywhere" feature under PlayerNames). I'm often seeing class color highlights for 2 and 3 letter character names that are common words/acronyms, like "at" or "dps" when they are obviously not being used in the context of referencing the character. So it would be nice to disable highlights for all 2 or 3 letter names, or to have a blacklist of names not to highlight.

API changes for Classic?

Not sure if there's anything that can be done for this, but this prevents you from executing commands like "/targetenemy" when using Prat in Classic WoW.

Date: 2019-08-31 06:33:55
ID: 1
Error occured in: AddOn: Prat-3.0
Count: 1
Message: Error: AddOn Prat-3.0 attempted to call a forbidden function (TargetNearestEnemy()) from a tainted execution path.
Debug:
[C]: TargetNearestEnemy()
..\FrameXML\ChatFrame.lua:1335: ?()
..\FrameXML\ChatFrame.lua:4586:
..\FrameXML\ChatFrame.lua:4553
[C]: ChatEdit_ParseText()
..\FrameXML\ChatFrame.lua:4267:
..\FrameXML\ChatFrame.lua:4266
[C]: ChatEdit_SendText()
..\FrameXML\ChatFrame.lua:4303: ChatEdit_OnEnterPressed()
[string ":OnEnterPressed"]:1:
[string "
:OnEnterPressed"]:1
Locals:
None
AddOns:
Swatter, v8.2.6377 (SwimmingSeadragon)
ACP, v3.5.6
AdvancedInterfaceOptions, v1.3.2
ArkInventoryClassic, v10004
ArkInventoryClassicRules, v10000
ArkInventoryClassicSearch, v10000
AucAdvanced, v8.2.6385 (SwimmingSeadragon)
AucFilterBasic, v8.2.6364 (SwimmingSeadragon)
AucScanData, v8.2.6365 (SwimmingSeadragon)
AucStatHistogram, v8.2.6366 (SwimmingSeadragon)
AucStatiLevel, v8.2.6370 (SwimmingSeadragon)
AucStatPurchased, v8.2.6367 (SwimmingSeadragon)
AucStatSimple, v8.2.6368 (SwimmingSeadragon)
AucStatStdDev, v8.2.6369 (SwimmingSeadragon)
AucUtilFixAH, v8.2.6371 (SwimmingSeadragon)
Bartender4, v4.8.5
BeanCounter, v8.2.6381 (SwimmingSeadragon)
BlizzMove, v1.9
ClassicAuraDurations, v
ClassicThreatMeter, v1.04
DBMCore, v1.13.3
DBMDefaultSkin, v
DBMStatusBarTimers, v
Details, v
DetailsTinyThreat, v
Enchantrix, v8.2.6392 (SwimmingSeadragon)
Informant, v8.2.6374 (SwimmingSeadragon)
LagBar, v4.1
LeatrixPlus, v1.13.26
OmniCC, v8.2.4
Prat30, v3.2.31
Prat30Libraries, v
SexyMap, vv2-classic
Stubby, v8.2.6376 (SwimmingSeadragon)
BlizRuntimeLib_enUS v1.13.2.11302
(ck=476)

Bug

Message: ..\FrameXML\ChatConfigFrame.lua line 1462:
attempt to index local 'info' (a nil value)
Debug:
[C]: ?
..\FrameXML\ChatConfigFrame.lua:1462: GetMessageTypeColor()
Prat-3.0\modules\Editbox.lua:560:
Prat-3.0\modules\Editbox.lua:549
(tail call): ?
..\FrameXML\ChatFrame.lua:4095: ChatEdit_ResetChatType()
..\FrameXML\ChatFrame.lua:4076: ChatEdit_OnShow()
[string ":OnShow"]:1:
[string "
:OnShow"]:1
[C]: Show()
..\FrameXML\ChatFrame.lua:4134:
..\FrameXML\ChatFrame.lua:4122
[C]: ?
[C]: ChatEdit_ActivateChat()
..\FrameXML\ChatFrame.lua:3755:
..\FrameXML\ChatFrame.lua:3744
[C]: ChatFrame_OpenChat()
[string "OPENCHAT"]:1:
[string "OPENCHAT"]:1
Locals:

Create A UI for the Search Feature

In order to surface the search functionality, placing a search bar on the chatframe would be useful.

The search feature would have 2 modes:

  1. "search in the chat" where it would scroll through the chat highlighting matches,
  2. 'list all matches" where it would just output the list of matching lines somewhere

Could also have the feature of case-insensitive matching - or allowing patterns

Taint when joining a Battleground (Classic)

Global variable Prat tainted by Prat-3.0 - Interface\AddOns\Prat-3.0\addon\addon.lua:30
Execution tainted by Prat-3.0 while reading Prat - Interface\AddOns\Prat-3.0\modules\Timestamps.lua:597
    Interface\AddOns\Prat-3.0\addon\addon.lua:701
    Interface\AddOns\Prat-3.0\addon\addon.lua:663
    Interface\FrameXML\ChatFrame.lua:2768 ChatFrame_OnEvent()
    ChatFrame3:OnEvent()
Interface\FrameXML\StaticPopup.lua:4971 StaticPopup_OnClick()
An action was blocked because of taint from Prat-3.0 - AcceptBattlefieldPort()
    Interface\FrameXML\StaticPopup.lua:689 OnAccept()
    Interface\FrameXML\StaticPopup.lua:5003 StaticPopup_OnClick()
    StaticPopup1Button1:OnClick()

Incorrect Names in Chat History

I'm noticing that when I log off of WoW Classic, when I log back in, the chat history has changed from people who have sent me a whisper who are on my account friends list. Character friends don't seem to be an issue but as an example, if before I logged off, I got a msg from "John Doe" when I log back in, the message would appear that it was "Jane Doe" instead.

Any idea what might be causing that?

Copychat Sometimes Produces A Blank Copy

If you have not set things like the # of scrollback lines in the chat history, then copychat copies nothing and opens a blank dialog.

The workaround it so go into the history module and adjust some of the values - but there must be something to make it work out of the box too.

Rerout Output

Rerouting output from a custom filter to anything other than a popupwindow does not work.

I would like to be able to filter out some messages and put them in a channel of my choosing.

Method Dungeon Tools links not working

Since a couple of months the link support for Method Dungeon Tools is screwed with Prat. You can't click route links in chat.

Some amazing guy (unfortunately I don't know anymore if it was here in the comments or somewhere else) wrote a workaround for this.

The problem can be fixed via "patterns.lua" (line 147 to 171):

        debug("MatchPatterns -->", text, tokennum)
        -- Match and remove strings
    	if not text:match("|H.*|h") then
    		for _,v in ipairs(sortedRegistry) do
    		  if text and ptype == (v.type or "FRAME") then

    			if type(v.pattern) == "string" and (v.pattern):len() > 0 then
    			  debug("MatchPatterns :", v.pattern)

    			  if v.deformat then
    				text = v.matchfunc(text)
    			  else
    				if v.matchfunc ~= nil then
    				  text = text:gsub(v.pattern, v.matchfunc)
    				else
    				  debug("ERROR", v.pattern)
    				end
    			  end
    			end
    		  end
    		end
    	end
        wipe(sortedRegistry)

        debug("MatchPatterns <--", text, tokennum)

Please implement this finally, since I/we have to fix this manually every update.

Thanks.

Error Log

4x Prat-3.0-3.7.36\services\classcolor.lua:19: attempt to index local 'class' (a nil value)
Prat-3.0-3.7.36\services\classcolor.lua:19: in function GetClassGetColor' Prat-3.0-3.7.36\modules\PlayerNames.lua:1460: in function GetClassColor'
Prat-3.0-3.7.36\modules\PlayerNames.lua:1351: in function Class' Prat-3.0-3.7.36\modules\PlayerNames.lua:1519: in function FormatPlayer'
Prat-3.0-3.7.36\modules\PlayerNames.lua:1623: in function ?' ...que\Libs\CallbackHandler-1.0\CallbackHandler-1.0-7.lua:119: in function <...que\Libs\CallbackHandler-1.0\CallbackHandler-1.0.lua:119> [C]: ? ...que\Libs\CallbackHandler-1.0\CallbackHandler-1.0-7.lua:29: in function <...que\Libs\CallbackHandler-1.0\CallbackHandler-1.0.lua:25> ...que\Libs\CallbackHandler-1.0\CallbackHandler-1.0-7.lua:64: in function Fire'
Prat-3.0-3.7.36\addon\addon.lua:626: in function <Prat-3.0\addon\addon.lua:567>
(tail call): ?
FrameXML\ChatFrame.lua:3012: in function `ChatFrame_OnEvent'
[string ":OnEvent"]:1: in function <[string ":OnEvent"]:1>

attempt to index local 'info' (a nil value)

When using the Guild keyboard shortcut. 3.2.30

Message: Interface\FrameXML\ChatConfigFrame.lua:1492: attempt to index local 'info' (a nil value)
Time: Sat Aug 31 09:56:46 2019
Count: 2
Stack: Interface\FrameXML\ChatConfigFrame.lua:1492: attempt to index local 'info' (a nil value)
[C]: ?
Interface\FrameXML\ChatConfigFrame.lua:1492: in function `GetMessageTypeColor'
Interface\AddOns\Prat-3.0\modules\Editbox.lua:834: in function <Interface\AddOns\Prat-3.0\modules\Editbox.lua:823>
(tail call): ?
Interface\FrameXML\ChatFrame.lua:3875: in function `ChatEdit_ResetChatType'
Interface\FrameXML\ChatFrame.lua:3856: in function `ChatEdit_OnShow'
[string "*:OnShow"]:1: in function <[string "*:OnShow"]:1>
[C]: in function `Show'
Interface\FrameXML\ChatFrame.lua:3914: in function `ChatEdit_ActivateChat'
Interface\FrameXML\ChatFrame.lua:3492: in function `ChatFrame_OpenChat'
[string "guild"]:1: in function <[string "guild"]:1>

Locals:

Hiding default UI timestamps without breaking Communities UI

I attempted to hide Blizzard's chat timestamps when using the Timestamps module in #3, but recently tried to use some Communities UI features and noticed they were broken by taint. I decided to take a step back and write down what exactly I wanted to fix and how it could be done without breaking other parts of the UI.

Issue

For the purpose of timestamp handling, chat events can be grouped in three categories:

  • Events that don't show default UI timestamp. Regardless of whether Prat processes them or passes them to default UI code, they receive their timestamps in Timestamps module's AddMessage hook.
  • Events that do show default UI timestamp but are handled in Prat. Default UI tries to show the message with a timestamp, but Prat core's AddMessage hook prevents the output from reaching the chat frame and Prat can print its own version of the message, receiving a timestamp in Timestamps module's AddMessage hook.
  • Events that do show default UI timestamp and are not handled in Prat. Default UI tries to show the message with a timestamp, Prat core's AddMessage hook lets it through, and Timestamps module's AddMessage hook adds a second timestamp. These messages are displayed with two differently formatted timestamps, which I want to fix.

Communities UI

In the past, the trivial solution was to simply disable default UI timestamps whenever Prat's Timestamps module was being used. However, in patch 8.0 Blizzard added the Communities feature, with the UI using the same timestamp setting as chat. Because of this, forcibly disabling default UI timestamps is no longer something we want to do if a better solution can be devised.

Failed solutions

  • First solution, which I implemented in #3, was to only disable default UI timestamps when handling a chat event and restoring them afterwards. But it turns out that the Communities UI is not prepared to handle CHAT_TIMESTAMP_FORMAT variable being tainted. It creates the chat window with scrollback without any issues, as the chat window doesn't need to be secure, but then it proceeds to create buttons that need to be secure from the now tainted execution path. Tainted buttons cause features like editing community settings or player notes to fail. While Blizzard could fix this by wrapping the chat window creation in securecall, my understanding is that we shouldn't expect anything in a short time frame.
  • The default UI timestamp format is persisted in the showTimestamps CVar, and those don't carry taint. Why can't we use that? The reason is obvious when reading default UI code, but I'm mentioning this idea for completeness. The CVar is not read directly where a timestamp is needed, but is cached in global lua variable CHAT_TIMESTAMP_FORMAT on VARIABLES_LOADED event and when changing the setting in the settings UI. We can't trigger either of those code paths securely, so the CVar is useless for rapidly toggling timestamps.

Potential solutions

  • Prat could process all the events that print a default UI timestamp, capturing the output and showing Prat's own version instead. The drawback is that it requires additional work to make sure these messages play nicely with all the other Prat modules and don't get mangled with unwanted formatting.
  • The CVar accepts custom formats including color escape sequences, so we could store Prat's timestamp format in the CVar and have the default UI code use it directly. Prat would need to notice the events that don't print a default UI timestamp and add its own for those events only. Custom format works in the Communities UI too, which may be considered a feature. Drawbacks of using the CVar are that a UI reload is required after modification (or writing the global variable and tainting the Communities UI until next reload), and that the CVar persists outside of Prat and its Timestamps module being loaded, which may confuse users.
  • Instead of writing the global CHAT_TIMESTAMP_FORMAT we can prevent the default UI chat code from reading it. By using setfenv on the original ChatFrame_MessageEventHandler we can redirect its global accesses to a separate table and set CHAT_TIMESTAMP_FORMAT=false (but not nil) while forwarding all other reads to the actual global environment using a metatable. The Communities UI continues to read the untainted actual global variable. For this method to work, we need a reference to the original function. This is only practical if we can do our setfenv before anyone else has hooked it.
  • Instead of preventing default UI code from adding timestamps, we could just try to remove them afterwards with string.gsub or other string functions. For this to work reliably, we'd want to create our own instance of the timestamp using BetterDate(CHAT_TIMESTAMP_FORMAT, time()). This will work most of the time, but it's possible that the system time rolls to the next second between default UI's and our time() calls and we fail to match the default UI timestamp. The likelihood of this happening is very small, but it makes the solution feel dirty in my opinion.

I'm currently running the setfenv solution and it seems to work without issues, so I'm working on making a PR for it. I'm open for discussion on any other solutions too.

Unable to Set Guild Note

When trying to set a Public Guild Note in Retail, there is an "Error when calling SetNote()". From reading comments, it may be the timestamp module. But I have not confirmed. I have confirmed that disabling Prat allows guild notes to be set.

Bug latest update

Error occured in: AddOn: Prat-3.0
Count: 1
Message: Error: AddOn Prat-3.0 attempted to call a forbidden function (TargetUnit()) from a tainted execution path.
Debug:
[string "=[C]"]: TargetUnit()
[string "@..\FrameXML\ChatFrame.lua"]:1352: ?()
[string "@..\FrameXML\ChatFrame.lua"]:4839:
..\FrameXML\ChatFrame.lua:4805
[string "=[C]"]: ChatEdit_ParseText()
[string "@..\FrameXML\ChatFrame.lua"]:4523:
..\FrameXML\ChatFrame.lua:4522
[string "=[C]"]: ChatEdit_SendText()
[string "@..\FrameXML\ChatFrame.lua"]:4559: ChatEdit_OnEnterPressed()
[string ":OnEnterPressed"]:1:
[string "
:OnEnterPressed"]:1

Conected with bug #10-
Bug 10 -couldnt use PAste addon to add tomtom waypoints so i did /way for each location.When i got to location i just tried /tar npc and this error poped up

Popup Message issue

The popup message nicknames seem to be case sensitive. I configured a nickname of "uld" and it pops up fine when it comes up in chat in lowercase. However, if someone types "ULD", it wont pop up. I then tried to add another nickname of "ULD" to account for this, but it doesnt differentiate between uppercase and lowercase in the nicknames list. Is there anyway to make it so no matter the upcase or lowcase letters, it will be recognized?

Thank you!

Whispers don't show up in the addon after 3.7.72

Disabling the addon fixes it, but while the addon is enabled whispers don't show up in the chat at all, not sent or recieved ones. I tried clearing saved variables without luck and reinstalling the addon entirely doesn't fix it either.

Sorry for not posting on Curseforge but the site sucks and throws errors when I submit comments.

popupmessage error

I understand this module is on its way out, but if you could help me figure out a quick fix easily enough I'd appreciate it. For the last few days popupmessage hasn't been working for me, and has been generating these errors. The second one occurs on every new message it tries to parse.

Message: Interface\AddOns\Prat-3.0\addon\locales.lua:28: attempt to index global 'Prat' (a nil value)
Time: Fri Sep 20 11:21:42 2019
Count: 1

Message: Interface\AddOns\Prat-3.0\modules\PopupMessage.lua:752: bad argument #1 to 'match' (string expected, got nil)
Time: Fri Sep 20 11:13:05 2019
Count: 543

[Classic] gbaa2804 alpha - ReplaceIconAndGroupExpressions error

151x Prat-3.0-3.7.72-3-gbaa2804\services\chatsections.lua:609: attempt to call field 'ReplaceIconAndGroupExpressions' (a nil value)
Prat-3.0-3.7.72-3-gbaa2804\services\chatsections.lua:609: in function 'SplitChatMessage'
Prat-3.0-3.7.72-3-gbaa2804\addon\addon.lua:591: in function <Prat-3.0\addon\addon.lua:566>
(tail call): ?
FrameXML\ChatFrame.lua:2792: in function 'ChatFrame_OnEvent'
[string "*:OnEvent"]:1: in function <[string "*:OnEvent"]:1>

Highlight module uses wrong translations

Highlight module imports translations in the Achievements namespace. Because the subtable name doesn't match module name, AddLocale doesn't see any of the phrases. Later on, when hovering over the module in the settings UI, an error is thrown because module_desc phrase is missing.

The phrases and the namespace for Highlight module don't seem to exist in the localization system either. I'm not sure what would happen if I attempted to import a non-existing namespace, so no pull request.

[WOW Classic] Displaying Alt Names in Chat does not work

The AltNames Module imports Alt names correctly and displays Alt Names in Tooltips but not in Chat where it would be important.
I tried deactivating all other Addons but got the same result, installing "LibAlts" didn't help either (was worth a try). :)

The Module causes no LUA errors so theres no Error report i can post, it just doesn't work.

I'm playing on the German WOW Classic Client if that's of any significance.

Thanks for your attention. :)

Errors in other addons probably (!) caused by Prat

Hi there.

Since the newest update I experienced an error in two addons (ChampionCommander and Method Dungeon Tools). It's the same error, but of course mentioning the specific files of these addons.
I'm not quite sure of course that it is caused by Prat, but since ChampionCommander and Prat are the only addons that got updates in the last days for me it seems logical.

Could you please take a look at this GitHub ticket:
alarofrunetotem/ChampionCommander#34

Perhaps you have an idea why this could occur.

Thanks.

Popup BG

Hello, i can't click on enter when BG popup

Date: 2019-12-14 10:03:46
ID: 1
Error occured in: AddOn: Prat-3.0
Count: 1
Message: Error: AddOn Prat-3.0 attempted to call a forbidden function (AcceptBattlefieldPort()) from a tainted execution path.
Debug:
   [C]: AcceptBattlefieldPort()
   ..\FrameXML\StaticPopup.lua:689: OnAccept()
   ..\FrameXML\StaticPopup.lua:5003: StaticPopup_OnClick()
   [string "*:OnClick"]:1:
      [string "*:OnClick"]:1
Locals:
None
AddOns:
  Swatter, v8.2.6377 (SwimmingSeadragon)
  ACP, v3.5.6 
  AdiBags, vv1.9.17-classic
  Atlas, vv1.45.01.11302
  AtlasClassicWoW, vv1.45.00.11302.05
  AtlasDungeonLocs, vv1.45.00.11302.01
  AtlasTransportation, vv1.45.00.11302.00
  AtlasLootClassic, vv1.4.2
  AtlasLootClassicData, vv1.4.2
  AtlasLootClassicDungeonsAndRaids, vv1.4.2
  AtlasLootClassicMaps, vv1.0.0
  AucAdvanced, v8.2.6430 (SwimmingSeadragon)
  AucFilterBasic, v8.2.6364 (SwimmingSeadragon)
  AucScanData, v8.2.6365 (SwimmingSeadragon)
  AucStatHistogram, v8.2.6366 (SwimmingSeadragon)
  AucStatiLevel, v8.2.6370 (SwimmingSeadragon)
  AucStatPurchased, v8.2.6367 (SwimmingSeadragon)
  AucStatSimple, v8.2.6399 (SwimmingSeadragon)
  AucStatStdDev, v8.2.6369 (SwimmingSeadragon)
  AucUtilFixAH, v8.2.6371 (SwimmingSeadragon)
  Auctionator, v8.1.0
  Bartender4, v4.8.8
  BeanCounter, v8.2.6434 (SwimmingSeadragon)
  CharacterStatsClassic, v2.8
  ClassicCastbars, vv1.2.0-hotfix
  ClassicCastbarsOptions, v
  ClassicThreatMeter, v1.10
  DBMCore, v1.13.24
  DBMDefaultSkin, v
  DBMStatusBarTimers, v
  Decursive, v2.7.6.6
  Enchantrix, v8.2.6428 (SwimmingSeadragon)
  EnchantrixBarker, v8.2.6469 (SwimmingSeadragon)
  FishingBuddy, v0.7 Beta 1
  GatherMate2, v1.45.5
  Guidelime, v1.040
  Guidelimeahmp, vv1.3
  GuidelimeMarkyMark, vv1.8
  GuidelimeSage, v1.0
  HealBot, v1.13.2.10
  HealBotfr, v1.13.2.0
  HealBotTips, v1.13.2.10
  Informant, v8.2.6374 (SwimmingSeadragon)
  ItemRack, v
  LeatrixMaps, v1.13.39
  LetMeCast, v1.3
  MoveToolTip, v1.0.6
  orbSellAndRepair, v1.0.1
  PallyPower, vv1.1c-classic 
  Prat30, v3.7.45
  Prat30Libraries, v
  Questie, v5.3.1
  Recount, vv1.13.3a
  SexyMap, vv4-classic
  Stubby, v8.2.6376 (SwimmingSeadragon)
  TitanClassic, v1.1.5.11303
  TitanClassicAmmo, v1.1.5.11303
  TitanClassicBag, v1.1.5.11303
  TitanClassicClock, v1.1.5.11303
  TitanClassicGold, v1.1.5.11303
  TitanClassicLocation, v1.1.5.11303
  TitanClassicLootType, v1.1.5.11303
  TitanClassicPerformance, v1.1.5.11303
  TitanClassicRegen, v1.1.5.11303
  TitanClassicRepair, v1.1.5.11303
  TitanClassicVolume, v1.1.5.11303
  TitanClassicXP, v1.1.5.11303
  ZPerl, v5.8.9
  ZPerlArcaneBar, v
  ZPerlPlayer, v
  ZPerlPlayerBuffs, v
  ZPerlPlayerPet, v
  ZPerlRaidAdmin, v
  ZPerlRaidHelper, v
  ZPerlTarget, v
  ZPerlTargetTarget, v
  BlizRuntimeLib_frFR v1.13.3.11303 <none>
  (ck=924)

Arrow Up adds extra spacing

If you attempt to resend a message bu using Arrow Up key combination an extra space is added to the message. This is especially annoying if you are using for example WeakAurass command "/wa" in the chat as the new output will be " /wa", and if you repeat this message " /wa" etc..

ERROR WITH TODAY UPDATE 3.7.46 (2020-01-19)

Date: 2020-01-20 18:42:31
ID: 1
Error occured in: Global
Count: 1
Message: ..\AddOns\Prat-3.0\addon\locales.lua line 70:
Locale key .[Tt]wink.$ is not provided.
Debug:
(tail call): ?
[C]: error()
Prat-3.0\addon\locales.lua:70:
Prat-3.0\addon\locales.lua:69
Prat-3.0\modules\AltNames.lua:2149: importGuildAlts()
Prat-3.0\modules\AltNames.lua:1648:
Prat-3.0\modules\AltNames.lua:1648
[string "safecall Dispatcher[2]"]:4:
[string "safecall Dispatcher[2]"]:4
[C]: ?
[string "safecall Dispatcher[2]"]:13: ?()
...tie\Libs\CallbackHandler-1.0\CallbackHandler-1.0.lua:90: Fire()
...ce\AddOns\Questie\Libs\AceEvent-3.0\AceEvent-3.0.lua:120:
...ce\AddOns\Questie\Libs\AceEvent-3.0\AceEvent-3.0.lua:119
Locals:
None
AddOns:
KalielsTracker, v0.2.0
Swatter, v8.2.6377 (SwimmingSeadragon)
AdiBags, vv1.9.17-classic
AskMrRobotClassic, v1
Atlas, vv1.47.00.11303.00
AtlasBattlegrounds, vv1.46.00.11303.00
AtlasClassicWoW, vv1.47.00.11303.00
AtlasDungeonLocs, vv1.47.00.11303.00
AtlasTransportation, vv1.46.03.11303.00
AtlasLootClassic, vv1.4.5
AtlasLootClassicData, vv1.4.5
AtlasLootClassicDungeonsAndRaids, vv1.4.5
AtlasLootClassicMaps, vv1.0.0
AtlasQuest, v4.11.61
AucAdvanced, v8.2.6430 (SwimmingSeadragon)
AucFilterBasic, v8.2.6364 (SwimmingSeadragon)
AucStatHistogram, v8.2.6366 (SwimmingSeadragon)
AucStatiLevel, v8.2.6370 (SwimmingSeadragon)
AucStatPurchased, v8.2.6367 (SwimmingSeadragon)
AucStatSimple, v8.2.6399 (SwimmingSeadragon)
AucStatStdDev, v8.2.6369 (SwimmingSeadragon)
AucUtilFixAH, v8.2.6371 (SwimmingSeadragon)
BagBrother, v
Bagnon, v8.3.1
Bartender4, v4.8.9
BeanCounter, v8.2.6434 (SwimmingSeadragon)
CharacterNotes, v8.2.5
CharacterStatsClassic, v3.1
ClassicBlacklist, v1.1.5
ClassicFriendBtn, v1
ClassicThreatMeter, v1.10
ClassTrainerPlus, v0.6-beta
Clique, vv1.0.3-classic
CoolLevelUp, v1.13.0.2
DBMCore, v1.13.30
DBMDefaultSkin, v
DBMStatusBarTimers, v
Decursive, v2.7.6.6
DejaClassicStats, v1303r001
Details, v
DetailsStreamer, v
DetailsTinyThreat, v
Enchantrix, v8.2.6428 (SwimmingSeadragon)
EnchantrixBarker, v8.2.6469 (SwimmingSeadragon)
ExRT, v4110
FleecingTip, v113.1577(211219)
GatherMate2, v1.45.5
GatherMate2MapButton, v1.1
GatherNotify, v1.6
GatherTrackingReminder, v1.0
GlobalIgnoreList, v1.13.3
Grail, v106
GrailNPCsclassic, v27178
GrailNPCsclassicenUS, v27178
GrailQuestsclassic, v27178
GrailQuestsclassicenUS, v29297
Grid2, vr943
Grid2LDB, vr943
Grid2RaidDebuffs, vr943
GuildRosterManager, v1.831
GuildSearch, v8.2.1
GuildTooltip, v2.13.11
Informant, v8.2.6374 (SwimmingSeadragon)
ItemAutocomplete, v1.0.6
ItemRack, v
ItemTooltipProfessionIcons, v1.1.5
KiwiItemInfo, vv2.3.4
LeatrixMaps, v1.13.44
LibClassicDurations, v1.44
MaxCam, vv2.4.2
NugRunning, v1.13.34
OmniCC, v8.3.1
OPie, vAncient Walnut 6
Pawn, v2.3.18
Prat30, v3.7.46
Prat30Libraries, v
Puggle, v2.8
PugLoot, vv1.1.1
Quartz, v3.5-classic-5
Questie, v5.5.1
RCLootCouncilClassic, v0.6.0
RealMobHealth, v2.18
RecipeRadarClassic, v1.0.0.23
RollTrackerClassic, v2.20
SexyMap, vv5-classic
ShadowedUnitFrames, vv4.2.3-Classic
SimpleDing, vv1.1.1
SimpleItemLevel, v1
SlideBar, v8.2.6375 (SwimmingSeadragon)
SmartQuest, v1.18.2
StatPriorityTracker, v0.0.3b
Storyline, v1.13.2.2
Stubby, v8.2.6376 (SwimmingSeadragon)
TalentSequence, v2.0
ThreatClassic2, v2.07
TidyPlatesThreatPlates, v1.2.8
TipTac, v19.03.31
TipTacItemRef, v19.03.31
TitanClassic, v1.1.5.11303
TitanClassicAmmo, v1.1.5.11303
TitanClassicBag, v1.1.5.11303
TitanClassicClock, v1.1.5.11303
TitanClassicGold, v1.1.5.11303
TitanClassicGuild, v1.0.0.3
TitanClassicLocation, v1.1.5.11303
TitanClassicLootType, v1.1.5.11303
TitanClassicPerformance, v1.1.5.11303
TitanClassicRecZone, v1.0.0.5
TitanClassicRegen, v1.1.5.11303
TitanClassicRepair, v1.1.5.11303
TitanClassicRestPlus, v1.0.0.1
TitanClassicVolume, v1.1.5.11303
TitanClassicXP, v1.1.5.11303
TitanProfession, vv1.2-classic
TitanProfessionsMulti, v1.4
TitanSkills, v1.7.0
TitanSocial, v1.13.3
TomTom, vv11303-1.0.9
TownsfolkTracker, v1.0.7
VendorPrice, v1.3.0
WeakAuras, v2.16.1
WhatsTraining, v1.8.7
WhereToGatherClassic, v1.0
BlizRuntimeLib_enUS v1.13.3.11303
(ck=e0a)

Option for chat tabs fading

This may also be an option already within Prat and I may be overlooking where the setting is however, would it be possible to set the chat tab fading delay? Ideally, I'd like to set the tab fading delay to 0 so that all my chat tabs remain visible.

More custom filters options

Can we get an option in custom filters to not include item links?
For example, I have "Lava" as a custom filter and all items that contain lava in them just get their link coloring really messed up.
Also, can we get the option to not have the custom filters case sensitive? I have to make a lot of filters just to filter the same words because of that.

Error log (classic)

1x ...ddOns\Prat-3.0-3.7.41_Libraries\LibSink-2.0\LibSink-2.0-90104.lua:438: bad argument #2 to 'format' (string expected, got table)
[C]: ?
...ddOns\Prat-3.0-3.7.41_Libraries\LibSink-2.0\LibSink-2.0-90104.lua:438: in function `generator'
...ddOns\Prat-3.0-3.7.41_Libraries\LibSink-2.0\LibSink-2.0-90104.lua:590: in main chunk

Locals:
(*temporary) = "Route output from this addon through %s."
(*temporary) = <unnamed> {
 0 = <userdata>
}
(*temporary) = "string expected, got table"

&

1x Prat-3.0-3.7.41\addon\modules.lua:262: Usage: EmbedLibrary(addon, libname, silent, offset): 'libname' - Library 'LibSink-2.0-90104' is not Embed capable
Prat-3.0-3.7.41\addon\addon.lua:237: in function <Prat-3.0\addon\addon.lua:191>
[C]: ?
...\common\Wildpants\libs\AceAddon-3.0\AceAddon-3.0-12.lua:70: in function <...\common\Wildpants\libs\AceAddon-3.0\AceAddon-3.0.lua:65>
...\common\Wildpants\libs\AceAddon-3.0\AceAddon-3.0-12.lua:498: in function `InitializeAddon'
...\common\Wildpants\libs\AceAddon-3.0\AceAddon-3.0-12.lua:613: in function <...\common\Wildpants\libs\AceAddon-3.0\AceAddon-3.0.lua:605>

prat block the report system

example a fake Gm whisper you, you right click report the player and this error pop up and report system is blocked, the only way to report a player is turning off prat

Date: 2020-03-01 01:01:10
ID: 16
Error occured in: AddOn: Prat-3.0
Count: 1
Message: Error: AddOn Prat-3.0 attempted to call a forbidden function (InitiateReportPlayer()) from a tainted execution path.
Debug:
[string "=[C]"]: InitiateReportPlayer()
[string "@..\FrameXML\HelpFrame.lua"]:341: HelpFrame_ShowReportCheatingDialog()
[string "@..\FrameXML\UnitPopup.lua"]:1796: func()
[string "@..\FrameXML\UIDropDownMenu.lua"]:889: UIDropDownMenuButton_OnClick()
[string ":OnClick"]:1:
[string "
:OnClick"]:1
Locals:
None

New Module Proposal: "Mentions"

The Prat @ mention.

Let's say a user wants to ping someone in the chat in the scope of say a GUILD message. There is no real way to do this with a single message - just hope they read or see it, or message them directly.

The @ mention will solve this through this basic functionality.

When a user is @ mentioned in a chat, a second will be sent to that user notifying them of the @ mention - this should not be visible to users without an addon that supports it.

Perhaps in response to some of the complaints about spam - this needs to happen over the addon channel. or just local chat filtering, and end up in a "Mentions tab"

On the mentions tab, there should be "click-to-reply" links that will route messages back to the original channel or directly to the @ mentioner.

Player1 mentioned you in <Channel>: "Message"

Enhancements to basic functionality

Reply functionality - replying to the mention notification routes the message to the Channel where the @mention was used.

Clickable Mentions - mentions should be turned into links, so they can be clicked - they should lead to whispering the person mentioned

@ Mention Name Autocomplete would be nice if @ mentions autocompleted like most chat apps

Notification Auto-Squelch if the current frame that you are reading contains the message with the @ mention - the secondary whisper should probably be ignored

Opt-In/Opt-Out No need for this due to its opt-in nature (using the addon)

Hash-tag support Based on the updated proposal to have a "Mentions" tab, there could also be a tab for hashtag mentions - or the same tab.

Consolidation

Prat has various modules that support the concept of highlight or mention alerting.

  1. Popupmessage
  2. Highlight
  3. Custom Filters
  4. Playernames (sort of)

While considering a new feature "@ mentions" I would like to consolidate a few modules into one.

[Classic] target from context menu or chat

Wrote this on Curseforge but not sure which one you actively use, so copied to here.

When attempting to target a player via right-clicking their name in the chat or sometimes by typing /target in the chat, the following popup appears and cancels the action:

image

Lagging during loot rolls

While in dungeons when loot distribution is taking place, where the system lotto is being drawn to see who wins a piece of loot, there is a bit of lag. It only takes place during the loot distribution where you see in chat, "[Loot]: Greed Roll - # for [Item] by Person"

At first, I didn't think it was Prat although I had no idea what it was until I disabled all addons and didn't have the issue. I then re-enabled them and disabled them one by one until I found that with all of them enabled except for Prat, I don't have the issue.

At the time, I had it set to automatically turn on chat logging by default and was thinking that perhaps this is the problem but I'm not exactly sure. Is there anything that I can test to find out why this might be happening or any possible way to isolate the issue?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.