diff --git a/xtrn/SlyVote/SlyVote.cfg b/xtrn/SlyVote/SlyVote.cfg index 30123e7691b7e0ea73a03bbd4e1ac3de3177d9b8..74a994ec58f66a0bd34e6564b2e744cdf4cfceea 100644 --- a/xtrn/SlyVote/SlyVote.cfg +++ b/xtrn/SlyVote/SlyVote.cfg @@ -1,3 +1,4 @@ +showAvatars=true useAllAvailableSubBoards=true startupSubBoardCode= subBoardCodes= \ No newline at end of file diff --git a/xtrn/SlyVote/SlyVote.js b/xtrn/SlyVote/SlyVote.js index d27bb848c08512904ca5d4a8f9de3b2c56fabcee..a53545656f4ffadc0b2341a2272b3c5298e25056 100644 --- a/xtrn/SlyVote/SlyVote.js +++ b/xtrn/SlyVote/SlyVote.js @@ -98,6 +98,9 @@ * that the PageUp and PageDown keys continue to work * properly. This script should still also work with * older 3.17 builds of Synchronet. + * 2018-01-28 Eric Oulashin Version 0.34 beta + * Updated to display avatars for the person who posted + * a poll. */ load("sbbsdefs.js"); @@ -144,10 +147,13 @@ if ((user.security.restrictions & UFLAG_V) == UFLAG_V) load("frame.js"); load("scrollbar.js"); load("DDLightbarMenu.js"); +// These next 2 are for avatar support +load("smbdefs.js"); +var gAvatar = load({}, "avatar_lib.js"); // Version information -var SLYVOTE_VERSION = "0.33 Beta"; -var SLYVOTE_DATE = "2017-12-18"; +var SLYVOTE_VERSION = "0.34 Beta"; +var SLYVOTE_DATE = "2018-01-28"; // Determine the script's startup directory. // This code is a trick that was created by Deuce, suggested by Rob Swindell @@ -890,7 +896,8 @@ function ReadConfigFile() cfgReadError: "", useAllAvailableSubBoards: true, subBoardCodes: [], - startupSubBoardCode: "" + startupSubBoardCode: "", + showAvatars: true }; // Open the main configuration file. First look for it in the sbbs/mods @@ -943,7 +950,9 @@ function ReadConfigFile() value = trimSpaces(fileLine.substr(equalsPos+1), true, false, true); // Set the appropriate value in the settings object. - if (settingUpper == "USEALLAVAILABLESUBBOARDS") + if (settingUpper == "SHOWAVATARS") + retObj.showAvatars = (value.toUpperCase() == "TRUE"); + else if (settingUpper == "USEALLAVAILABLESUBBOARDS") retObj.useAllAvailableSubBoards = (value.toUpperCase() == "TRUE"); else if (settingUpper == "SUBBOARDCODES") { @@ -1932,6 +1941,13 @@ function ViewVoteResults(pSubBoardCode) console.gotoxy(curPos.x, curPos.y++); console.print(displayMsgHdr[i]); } + // If the 'show avatars' setting is true, then draw the 'from' + // user's avatar on the screen + if (gSlyVoteCfg.showAvatars) + { + gAvatar.draw(pollMsgHdrs[currentMsgIdx].from_ext, pollMsgHdrs[currentMsgIdx].from, pollMsgHdrs[currentMsgIdx].from_net_addr, /* above: */true, /* right-justified: */true); + console.attributes = 0; // Clear the background attribute as the next line might scroll, filling with BG attribute + } console.print("\1n"); } var msgBodyText = GetMsgBody(msgbase, pollMsgHdrs[currentMsgIdx], pSubBoardCode, user); @@ -2241,8 +2257,8 @@ function GetDefaultMsgDisplayHdr() hdrLine2 += "@\1n\1c" + VERTICAL_SINGLE; hdrDisplayLines.push(hdrLine2); var hdrLine3 = "\1n\1h\1k" + VERTICAL_SINGLE + BLOCK1 + BLOCK2 + BLOCK3 - + "\1gF\1n\1grom\1h\1c: \1b@MSG_FROM-L"; - numChars = console.screen_columns - 23; + + "\1gF\1n\1grom\1h\1c: \1b@MSG_FROM_AND_FROM_NET-L"; + numChars = console.screen_columns - 36; for (var i = 0; i < numChars; ++i) hdrLine3 += "#"; hdrLine3 += "@\1k" + VERTICAL_SINGLE; @@ -2323,7 +2339,12 @@ function ReplaceMsgAtCodeFormatStr(pMsgHdr, pSubBoardCode, pNumMsgs, pDisplayMsg var formatStr = ((/L/i).test(pAtCodeStr.charAt(pDashJustifyIdx+1)) ? "%-" : "%") + pSpecifiedLen + "s"; // Specify the replacement text depending on the @-code string var replacementTxt = ""; - if (pAtCodeStr.indexOf("@MSG_FROM") > -1) + if (pAtCodeStr.indexOf("@MSG_FROM_AND_FROM_NET") > -1) + { + var fromWithNet = pMsgHdr["from"] + (typeof(pMsgHdr["from_net_addr"]) == "string" ? " (" + pMsgHdr["from_net_addr"] + ")" : ""); + replacementTxt = fromWithNet.substr(0, pSpecifiedLen); + } + else if (pAtCodeStr.indexOf("@MSG_FROM") > -1) replacementTxt = pMsgHdr["from"].substr(0, pSpecifiedLen); else if (pAtCodeStr.indexOf("@MSG_FROM_EXT") > -1) replacementTxt = (typeof pMsgHdr["from_ext"] === "undefined" ? "" : pMsgHdr["from_ext"].substr(0, pSpecifiedLen)); @@ -2503,7 +2524,7 @@ function ParseMsgAtCodes(pTextLine, pMsgHdr, pSubBoardCode, pNumMsgs, pDisplayMs // The order of the strings in this array matters. For instance, @MSG_NUM_AND_TOTAL // needs to come before @MSG_NUM so that it gets processed properly, since they // both start out with the same text. - var atCodeStrBases = ["@MSG_FROM", "@MSG_FROM_EXT", "@MSG_TO", "@MSG_TO_NAME", "@MSG_TO_EXT", + var atCodeStrBases = ["@MSG_FROM", "@MSG_FROM_AND_FROM_NET", "@MSG_FROM_EXT", "@MSG_TO", "@MSG_TO_NAME", "@MSG_TO_EXT", "@MSG_SUBJECT", "@MSG_DATE", "@MSG_ATTR", "@MSG_AUXATTR", "@MSG_NETATTR", "@MSG_ALLATTR", "@MSG_NUM_AND_TOTAL", "@MSG_NUM", "@MSG_ID", "@MSG_REPLY_ID", "@MSG_TIMEZONE", "@GRP", "@GRPL", "@SUB", "@SUBL", @@ -2594,6 +2615,7 @@ function ParseMsgAtCodes(pTextLine, pMsgHdr, pSubBoardCode, pNumMsgs, pDisplayMs } var newTxtLine = textLine.replace(/@MSG_SUBJECT@/gi, pMsgHdr["subject"]) .replace(/@MSG_FROM@/gi, pMsgHdr["from"]) + .replace(/@MSG_FROM_AND_FROM_NET@/gi, pMsgHdr["from"] + (typeof(pMsgHdr["from_net_addr"]) == "string" ? " (" + pMsgHdr["from_net_addr"] + ")" : "")) .replace(/@MSG_FROM_EXT@/gi, (typeof(pMsgHdr["from_ext"]) == "string" ? pMsgHdr["from_ext"] : "")) .replace(/@MSG_TO@/gi, pMsgHdr["to"]) .replace(/@MSG_TO_NAME@/gi, pMsgHdr["to"]) diff --git a/xtrn/SlyVote/readme.txt b/xtrn/SlyVote/readme.txt index 10790b3c0781ff394664d9306109362a4064a59d..1beb0ce9d8b6e317461f129eeaed2b4ce16f5879 100644 --- a/xtrn/SlyVote/readme.txt +++ b/xtrn/SlyVote/readme.txt @@ -1,6 +1,6 @@ SlyVote - Version 0.33 Beta - Release date: 2017-12-18 + Version 0.34 Beta + Release date: 2018-01-28 by @@ -41,6 +41,8 @@ along with the latest JavaScript files for Synchronet, such as the following: - frame.js - scrollbar.js - DDLightbarMenu.js +- smbdefs.js +- avatar_lib.js - Possibly other JavaScript files If you are using a beta build of Synchronet 3.17, you must use one built on @@ -65,6 +67,11 @@ although a few BBSes on Dove-Net are not Synchronet). FidoNet networks and other message networks that might not have Synchronet BBSes should not support voting by default in Synchronet. +SlyVote also supports avatars, which was added in Synchronet 3.17. Users can +select a small ANSI graphic "avatar" to represent them, and SlyVote will +display the avatar of the people who posted polls. Avatar support requires +smbdefs.js and avatar_lib.js, as well as the latest sbbsdefs.js. + SlyVote stores user configuration files, which stores the user's last-read message numbers in the message areas, which are used when the user is viwing poll results. Even though Synchronet can keep track of the user's last-read @@ -77,8 +84,9 @@ For example, user 1 would be 0001.SlyVote.cfg. SlyVote's look and feel was initially based on DCT Vote, a voting booth door which was available in the 1990s. -NOTE: SlyVote is currently in an early beta state and is not fully complete -yet. +NOTE: SlyVote is currently considered beta, though it has been tested and seems +to be fairly stable. The first non-beta version of SlyVote might not be +released until an official non-beta Synchronet 3.17 is released. 3. Installation & Setup @@ -180,6 +188,11 @@ settings: Setting Description ------- ----------- +showAvatars Whether or not to show avatars of the + people who post polls in the results. + Valid values are true and false. + Defaults to true. + useAllAvailableSubBoards Whether or not to use all available sub-boards where voting is enabled. Valid values are true and false. This