TiddlyWiki by Swytch is a repository for random bits of techie information which I have collected and wish to share.\n\nMore Links To My WebWorld:\n\nhttp://www.cyberfindz.com\nhttp://swytchit.blogspot.com
<<option chkGenerateAnRssFeed>> GenerateAnRssFeed\n<<option chkOpenInNewWindow>> OpenLinksInNewWindow\n<<option chkSaveEmptyTemplate>> SaveEmptyTemplate\n<<option chkToggleLinks>> Clicking on links to tiddlers that are already open causes them to close\n^^(override with Control or other modifier key)^^\n<<option chkHttpReadOnly>> HideEditingFeatures when viewed over HTTP\n<<option chkForceMinorUpdate>> Treat edits as MinorChanges by preserving date and time\n^^(override with Shift key when clicking 'done' or by pressing Ctrl-Shift-Enter^^\n<<option chkConfirmDelete>> ConfirmBeforeDeleting\nMaximum number of lines in a tiddler edit box: <<option txtMaxEditRows>>\nFolder name for backup files: <<option txtBackupFolder>>\n<<option chkInsertTabs>> Use tab key to insert tab characters instead of jumping to next field
config.options.chkHttpReadOnly = false;\n
[[Welcome to your tiddlyspot.com site!]] GettingStarted [[Tutorials]]
Enabling IMFv2 in Exchange SP2(As a reference after SP2/IMF v2 has been installed)\n\n\nTo enable IMFv2 filtering in MS Exchange SP2 you must first browse to Administrative Groups -> First Administrative Group -> Servers -> SMT-DC -> Protocols -> SMTP –> Default SMTP Server\n\nRight-click on Default SMTP Server and select Properties\n\n In the General Tab, click on Advanced -> Edit\n \nCheck the box for Apply Intelligent Message Filter and click OK.\nYou have now enabled IMFv2 for MS Exchange SP2.\n\nTo adjust the Gateway Blocking Configuration and Store Junk Email Configurations browse to Global Settings -> Message Delivery\nRight-click on Message Delivery and click on Properties\nSelect the Intelligent Message Filtering tab and adjust the Gateway and Store Junk Email options\n \nThe Gateway portion is blocked immediately at the server level and users will not see those emails. Store Junk Email portion is all email which passes through the Gateway but will be deposited in the user’s MS Outlook Junk Email folder for their review if necessary. Remember, the lower the number, the more SPAM is blocked.\n\n\n
To adjust, set or regain file/access permissions:\n\n\nFolder Permissions:\n\nWhen permissions are lost on a file or folder, Administrator must take ownership of it to recover/adjust to the proper permissions.\n\nRight click on the file in question and select Security.\nWhen prompted with a warning that "you only have rights to view", click ok.\nClick on the Advanced Tab.\nClick on the Ownership Tab\nTo change ownership, select Administrator and click OK.\nClick OK again to close the window.\nNow,\nRight-click on that file again and adjust the rights to what they should be.
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:\n* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)\n* MainMenu: The menu (usually on the left)\n* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened\nYou'll also need to enter your username for signing your edits: Swytch
If you accidentally name your PC the same as one that already exists on the Domain, you will receive a PC Name Conflict (Windows) error.\nFirst - Rename your PC and reboot.\nSecond - Find the PC you conflicted with and perform the following steps.\n1. Take that PC off the Domain (reboot)\n2. Unplug from the network\n3. Rename that PC with an unused PC name (reboot)\n4. Re-join that PC to the Domain (reboot)\n\nYour PC should now be fully functional again on the network Domain.
Step By Step PGP 8.3 Installation Tutorial\n\n \nTo download PGP 8.3, click on the link provided below:\n\nhttp://www.pgpi.org/products/pgp/versions/freeware/\n\n When prompted, select “Save to Desktop”\n\n Double-click on the new install file, PGP8_3.zip, to proceed with the install\n\nYou will see the screen above, click NEXT\n\nClick YES to accept\n\nClick NEXT\n\n\nSelect NO to create a new key pair (Public/Private)\n\nClick NEXT\n \nSelect only the PGPDisk Volume Security option, then click NEXT\n\n Click NEXT\n\n You will see PGP installing\n\nSelect YES to reboot your PC, click FINISH\n\nAfter reboot PGP will automatically startup to complete the process.\n\nYou will be prompted to enter license information to which you may simply click “LATER”.\n\nYou will be greeted with the Welcome to PGP screen. Click NEXT to continue.\n \nEnter your Full Name and email address. (This information is used to configure your key. You will not be sent solicitations)\n\nSelect Attempt to Find, click NEXT\n\nEnter a “private” passphrase which will be for your use only. Do not share this passphrase with others. This passphrase is your key to opening encrypted documents. Click NEXT when finished entering.\n\nClick NEXT\n\n Click FINISH and your installation is complete.\n \n\n\n\nTo Exchange PGP Public Keys\n\n\nYou will first need to EXPORT your PGP Public Key\n\nRight-click on the PGP lock icon in the lower right side of your screen. Click on PGPKeys to open your key ring.\n\n Right-click on your PGP Key and click on EXPORT\n\n A second window will appear asking where you wish to export to, select desktop.\n\nYou will now see your PGP public key on your desktop area.\n\nSimply attached that public key to an email as you would a normal file.\n\n\n\n \nTo Encrypt A File Using PGP\n\n\nRight-click on the file you wish to encrypt\n\nClick on PGP option -> Encrypt\n\n\nDouble-click on the recipient you wish to encrypt to.\n\nChoose where you wish to put the encrypted file (DESKTOP suggested)\n\nYou will see the newly encrypted file (ex: on your DESKTOP)\n\nTo Create An SDA (Self Decrypting Archive) PGP File\n\n (SDAs are used when the recipient does not have PGP Encryption software installed)\n\n To send an encrypted document to a selected recipient, right-click on the file\n\nRight-click on the file you wish to encrypt\n\nClick on PGP option -> Create SDA\n\n You will see a window appear requesting that you enter a separate passphrase to encrypt this document. This passphrase should not match your private passphrase (the private passphrase you use to decrypt files with). This is a passphrase which you will share with the recipient so that he/she can open the file after it is received.\n\n \nSelect where you wish to place the newly encrypted file (DESKTOP suggested), click SAVE\n\n \nYou will now see your newly encrypted file (ex: on your DESKTOP)\n
/***\n|''Name:''|LegacyStrikeThroughPlugin|\n|''Description:''|Support for legacy (pre 2.1) strike through formatting|\n|''Version:''|1.0.1|\n|''Date:''|Jul 21, 2006|\n|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|\n|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|\n|''License:''|[[BSD open source license]]|\n|''CoreVersion:''|2.1.0|\n|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|\n\n***/\n\n//{{{\n\n// Ensure that the LegacyStrikeThrough Plugin is only installed once.\nif(!version.extensions.LegacyStrikeThroughPlugin)\n {\n version.extensions.LegacyStrikeThroughPlugin = true;\n\nconfig.formatters.push(\n{\n name: "legacyStrikeByChar",\n match: "==",\n termRegExp: /(==)/mg,\n element: "strike",\n handler: config.formatterHelpers.createElementAndWikify\n});\n\n} // end of "install only once"\n//}}}\n
How-Tos\nRandom Tidbits
Quick Reports for Domain Users and Groups:\n\n(The NET commands and the Windows Resource Kit ADDUSERS.EXE and PERMS.EXE utilities can be used to create limited administrative reports by piping the output to a text file.)\n\nLimited report generation is possible through the following commands: \n\nNote: Removal of the /domain switch will generate a report for the local machine. \n\n\nNET USERS /DOMAIN >USERS.TXT\n\nThis command will return the user accounts from the Primary Domain Controller (PDC) of the current domain, and write them to a file called USER.TXT \n---\n\nNET ACCOUNTS /DOMAIN >ACCOUNTS.TXT\n\nThis command will return the account policy information from the PDC of the current domain, and write it to a file called ACCOUNTS.TXT \n---\n\nNET CONFIG SERVER >SERVER.TXT\n\nThis command will return the server name, version of Windows, active network adapter information/MAC address, Server hidden status, Maximum Logged On Users, Maximum open files per session, Idle session time, and assign it to a file called SERVER.TXT \n---\n\nNET CONFIG WORKSTATION >WKST.TXT\n\nThis command will return the workstation name, user name, version of Windows, network adapter, network adapter information/MAC address, Logon domain, COM Open Timeout, COM Send Count, COM Send Timout, and write it to a file called WKST.TXT. \n---\nNET GROUP /DOMAIN >DGRP.TXT\n\nThis command will return the global groups on the PDC of the current domain, and write them to a file called GRP.TXT. \n---\n\nNET LOCALGROUP >LGRP.TXT\n\nThis command will return the local groups on the local machine, and write them to a file call LGRP.TXT. \n---\nNET VIEW /DOMAIN:DOMAINNAME >VIEW.TXT\n\nThis command will return the resources in the specified domain, and write them to a file called VIEW.TXT. \n\nUsing Resource Kit Tools\n\nADDUSERS \s\sCOMPUTERNAME /D USERINFO.TXT\n\nThis Windows Resource Kit command will return a comma delimited file (for spreadsheets) containing user and group information, and write it to a file called USERINFO.TXT. \n---\n\nPERMS COMPUTERNAME\sUSERNAME C:\s*.* /S >PERMS.TXT\n\nThis Windows Resource Kit command will return the username permissions on all files in all subdirectories on the c:\s drive of the computername, and write it to a file called PERMS.TXT \nIn addition to these user management tools, there are many tools and scripts out there to help in querying, creating, modifying and deleting user objects in the directory. You should explore the Support Tools from the Windows 2000 product CD and the Windows 2000 Resource Kit to get acquainted with some of them at least, since they can really ease your work sometimes. Here is a quick description of some of those tools: \nThe Windows 2000 Resource Kit offers us some scripts for handling users:\nClassifyMembers.vbs\n\nWill list objects in a container/OU or a domain. \n---\n\nListProperties.vbs\n\nThis script can be used with the WinNT:// namespace against Windows NT, Member or Workstation machines, or with the LDAP:// namespace for Active Directory Domain Controllers. Pay attention that this script is case-sensitive in its syntax. \nAs for enumerating group membership, there are several tools, such as:\n\nFindGrp.exe\nIfMember.exe\nShowGrps.exe\n\nEach gives different results, so you might want to run them and compare the outputs of each tool. ShowGrps.exe, for example, can also query for group membership of computer objects:\n\nFindGrp.exe <Domainname>\s<MachineName>$\nIf you want to search for users satisfying a given criteria, you can try out\n\nchkusers.vbs\n\nThis script checks your domain for users that satisfy a certain criteria that you define. \n---\n\nCscript CHKUSERS.VBS /A:WinNT://YourDomainName /P:FullName;Description/C:"((LastLogin:>4/3/01 or LastLogin:<8/4/01) and AccountDisabled:=False)"\nThis will output the full name and description of all active users whose last login was between 4/3/01 to 8/4/01. \n---\n\nUsing LDIFDE\n\nFrom the support tools we can find LDIFDE.exe, which is a tool for bulk import and export of Active Directory Objects. You can use LDIFDE to import new user records into the directory, or export specific information on specific users into a text file. LDIFDE defaults to export mode (reading From the Directory). When you add the -i option it can be used to write changes into the Directory. Also, if you want to export and extract only specific details, such as the user name, title and login name for all the users in a specific OU (Organizational Unit), you can run the following command: \n\nldifde\n-f C:\sldif\sExportUsers.ldf –s SERVERNAME -d\n"OU=YourOUname,dc=YourDomainName,dc=com" -p subtree -r\n"(objectClass=User)" -l "cn,givenName,Title,SamAccountName"\n \nOriginal Info Source:\nhttp://www.petri.co.il/list_all_users_and_groups_in_domain.htm\n \n\n
First, elevate your rights as an administrator.\nClick the Start button and type cmd in the Instant Search field BUT press CTRL + SHIFT + ENTER instead of just ENTER.\n\nYour rights are now elevated\n\n\n
Random Tidbits Of Useful Information
TiddlyWiki by Swytch
How to “Clean Up” after a virus has been detected on your PC\n\n \n\n\nProcess Overview:\n\n 1. Disable System Restore (Windows Me/XP).\n 2. Remove all the entries that the risk added to the hosts file.\n 3. Update the virus definitions.\n 4. Run a full system scan and delete all the files detected.\n 5. Delete any values added to the registry.\n 6. Disable unneeded Windows startup programs\n\n \n\nThe following instructions.\n\n1. To disable System Restore (Windows Me/XP)\nIf you are running Windows Me or Windows XP, it is almost always the case that you will need to disable this feature in Windows temporarily. When you chose disable, Windows will delete any saved System Restore entries that are present. This is to be done because if a virus, worm, or Trojan infects a computer, System Restore may back up the virus, worm, or Trojan on the computer. Since the Windows OS prevents modification of this area by anything other than itself, antivirus tools can not enter, analyze and disinfect any virus that may be hiding in it.\n\nI have included 2 short articles with instructions for disabling System Restore in both Windows ME and XP.\n\n \n\nHow to disable or enable Windows Me System Restore\n\nHow to turn off or turn on Windows XP System Restore\n\n \n\n\n* Once you have completed the process of disinfecting your PC, you will want to re-enable System Restore in Windows. To do this you will simply reverse the disable instructions. \n\n \n\n\n2. To remove all the entries that the risk added to the hosts file\n\n 1. Navigate to the following location:\n * Windows 95/98/Me:\n %Windir%\n * Windows NT/2000/XP:\n %Windir%\sSystem32\sdrivers\setc\n\n\n 2. Right-click on the HOSTS file, select Copy and Paste to your desktop for a backup\n 3. Now, right-click the HOSTS file again and select “Open With” -> Browse.\n 4. Scroll through the list of programs and double-click Notepad.\n 5. When the file opens, delete all the entries added by the particular virus you are disinfecting. (See the technical details on the virus in question, search the online Virus Encyclopedia)\n 6. By default, most systems will only have the following line:\n\n127.0.0.1 localhost\n\n 7. Close Notepad and save your changes when prompted.\n\nTo learn more about Window’s HOST file, click here.\n\n \n\n3. Make sure your current Antivirus program’s virus signature files are completely up to date. Follow the necessary step to update your antivirus program. See manufacturer’s website for specific details on this operation.\n\n \n\n4. Run a full system scan on you PC. If you do not have media in your CD-Rom/DVD/Floppy Drives, you may omit them from your scan. If you have more than one hard drive, though, be sure and select it in addition to your C Drive (main boot drive).\n\n \n\n \n\n5. To delete a value from the registry\nI strongly recommend that you back up the registry before making any changes to it. Changes to the registry that are incorrect can cause permanent data loss or even cause Windows to crash. \n\n \n\nClick here for more information on that process.\n\n \n\nAfter you have backed up the registry, modify only the Registry Subkeys that pertain to the particular virus you are disinfecting. Pay close attention to this. Information on exactly what Registry Subkeys to change can be found when you research the virus on sites such as Antivirus.com or Symantec.com. When you search the web on the subject, be sure the information you are getting is from a valid and trustworthy source. There are many website posts out there from individuals who are not truly experienced and may inadvertently suggest you delete an important or necessary Registry key or some other type of serious modification.\n\n \n\nTo enter the Windows Registry:\n\n 1. Click Start > Run.\n 2. Type regedit\n 3. Click OK.\n\n*If, after you have proceeded though the above instructions, the Windows Registry refuses to open, the virus may have altered the executable prohibiting you from further getting rid of it. It is a survival tactic viruses occasionally use. To get by this, Symantec’s Security Response Center has created a tool to assist you. Click here to download it and remember to read the instructions carefully. \n\n \nExamples of Registry Subkeys you will navigate through are shown below in the following example on removing the virus: Trojan.Tooso.L\n\nBrowse to:\n\nHKEY_LOCAL_MACHINE\sSOFTWARE\sMicrosoft\sWindows\sCurrentVersion\sRun\nHKEY_CURRENT_USER\sSoftware\sMicrosoft\sWindows\sCurrentVersion\sRun\n\n 4. In the right pane, delete the value:\n\n "winshost.exe" = "%System%\swinshost.exe"\n 5. Navigate to the subkeys:\n\n HKEY_LOCAL_MACHINE\sSYSTEM\sCurrentControlSet\sServices\sAlerter\n HKEY_LOCAL_MACHINE\sSYSTEM\sCurrentControlSet\sServices\sSharedAccess\n HKEY_LOCAL_MACHINE\sSYSTEM\sCurrentControlSet\sServices\swuauserv\n 6. In the right pane, restore the value to the original value if applicable.\n 7. Exit the Registry Editor\n\n \n\n6. To Edit your System Startup Area\n\nLast, you’ll need to go into Windows OS startup area also known as “System Configuration Utility or msconfig” and remove any unwanted startup programs. If you have an active virus, you will see it’s entry in this area. Again, the precise entries to remove will be outlined in your target virus’s description found on Antivirus.com or Symantec.com. NOTE: It is good practice to only have what you absolutely need (checked) in this startup area. By having less programs running at start up, your PC will boot faster.\n\n \n\na. Click here for a good overview on this process.\n\n
Welcome. Have a tech "how-to" question? Search my collection of neat tips and tricks. Simply type a keyword into the search box on the right and scroll through the results. Can't find something? Contact me at http://www.cyberfindz.com \n
Use the search box to the right to search my database of tech tips. The database is being updated daily so stop by often!
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |\n| 9/1/2007 9:34:56 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 9/1/2007 9:39:57 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 9/1/2007 16:9:18 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 9/1/2007 16:11:47 | Swytch | [[index.html|http://swytch.tiddlyspot.com/index.html]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 9/1/2007 16:39:40 | Swytch | [[index.html|http://swytch.tiddlyspot.com/index.html]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 9/1/2007 16:42:12 | Swytch | [[index.html|http://swytch.tiddlyspot.com/index.html]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/1/2007 9:40:11 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 10/1/2007 9:42:5 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 10/1/2007 9:42:28 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 10/1/2007 9:43:49 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/1/2007 21:2:58 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 10/1/2007 21:5:14 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 10/1/2007 21:5:53 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/1/2007 21:7:34 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 13/2/2007 12:25:12 | swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 13/2/2007 12:25:51 | swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 13/2/2007 12:30:16 | swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 13/2/2007 12:31:2 | swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 13/2/2007 12:31:28 | swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 13/2/2007 12:35:1 | swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 13/2/2007 12:35:18 | swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/1/2008 10:2:40 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/1/2008 10:2:55 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/1/2008 10:35:33 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/1/2008 10:35:46 | Swytch7 | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/1/2008 10:35:55 | Swytch7 | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/1/2008 10:36:4 | Swytch7 | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 28/1/2008 10:37:33 | Swytch7 | [[/|http://swytch.tiddlyspot.com/#%5B%5BWelcome%20to%20your%20tiddlyspot.com%20site!%5D%5D%20GettingStarted%20Tutorials]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/1/2008 10:45:31 | Swytch7 | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/1/2008 13:51:30 | Swytch7 | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 13/2/2008 14:25:34 | Swytch | [[/|http://swytch.tiddlyspot.com/]] | [[store.cgi|http://swytch.tiddlyspot.com/store.cgi]] | . | index.html | . |
/***\n|''Name:''|UploadPlugin|\n|''Description:''|Save to web a TiddlyWiki|\n|''Version:''|3.4.4|\n|''Date:''|Sep 30, 2006|\n|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|\n|''Documentation:''|http://tiddlywiki.bidix.info/#UploadDoc|\n|''Author:''|BidiX (BidiX (at) bidix (dot) info)|\n|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|\n|''~CoreVersion:''|2.0.0|\n|''Browser:''|Firefox 1.5; InternetExplorer 6.0; Safari|\n|''Include:''|config.lib.file; config.lib.log; config.lib.options; PasswordTweak|\n|''Require:''|[[UploadService|http://tiddlywiki.bidix.info/#UploadService]]|\n***/\n//{{{\nversion.extensions.UploadPlugin = {\n major: 3, minor: 4, revision: 4, \n date: new Date(2006,8,30),\n source: 'http://tiddlywiki.bidix.info/#UploadPlugin',\n documentation: 'http://tiddlywiki.bidix.info/#UploadDoc',\n author: 'BidiX (BidiX (at) bidix (dot) info',\n license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',\n coreVersion: '2.0.0',\n browser: 'Firefox 1.5; InternetExplorer 6.0; Safari'\n};\n//}}}\n\n////+++!![config.lib.file]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.file) config.lib.file= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\nconfig.lib.file.dirname = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(0, lastpos);\n } else {\n return filePath.substring(0, filePath.lastIndexOf("\s\s"));\n }\n};\nconfig.lib.file.basename = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("#")) != -1) \n filePath = filePath.substring(0, lastpos);\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(lastpos + 1);\n } else\n return filePath.substring(filePath.lastIndexOf("\s\s")+1);\n};\nwindow.basename = function() {return "@@deprecated@@";};\n//}}}\n////===\n\n////+++!![config.lib.log]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.log) config.lib.log= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 1}, \n date: new Date(2006,8,19)\n};\nconfig.lib.Log = function(tiddlerTitle, logHeader) {\n if (version.major < 2)\n this.tiddler = store.tiddlers[tiddlerTitle];\n else\n this.tiddler = store.getTiddler(tiddlerTitle);\n if (!this.tiddler) {\n this.tiddler = new Tiddler();\n this.tiddler.title = tiddlerTitle;\n this.tiddler.text = "| !date | !user | !location |" + logHeader;\n this.tiddler.created = new Date();\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[tiddlerTitle] = this.tiddler;\n else\n store.addTiddler(this.tiddler);\n }\n return this;\n};\n\nconfig.lib.Log.prototype.newLine = function (line) {\n var now = new Date();\n var newText = "| ";\n newText += now.getDate()+"/"+(now.getMonth()+1)+"/"+now.getFullYear() + " ";\n newText += now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" | ";\n newText += config.options.txtUserName + " | ";\n var location = document.location.toString();\n var filename = config.lib.file.basename(location);\n if (!filename) filename = '/';\n newText += "[["+filename+"|"+location + "]] |";\n this.tiddler.text = this.tiddler.text + "\sn" + newText;\n this.addToLine(line);\n};\n\nconfig.lib.Log.prototype.addToLine = function (text) {\n this.tiddler.text = this.tiddler.text + text;\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[this.tiddler.tittle] = this.tiddler;\n else {\n store.addTiddler(this.tiddler);\n story.refreshTiddler(this.tiddler.title);\n store.notify(this.tiddler.title, true);\n }\n if (version.major < 2)\n store.notifyAll(); \n};\n//}}}\n////===\n\n////+++!![config.lib.options]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.options) config.lib.options = {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\n\nconfig.lib.options.init = function (name, defaultValue) {\n if (!config.options[name]) {\n config.options[name] = defaultValue;\n saveOptionCookie(name);\n }\n};\n//}}}\n////===\n\n////+++!![PasswordTweak]\n\n//{{{\nversion.extensions.PasswordTweak = {\n major: 1, minor: 0, revision: 3, date: new Date(2006,8,30),\n type: 'tweak',\n source: 'http://tiddlywiki.bidix.info/#PasswordTweak'\n};\n//}}}\n/***\n!!config.macros.option\n***/\n//{{{\nconfig.macros.option.passwordCheckboxLabel = "Save this password on this computer";\nconfig.macros.option.passwordType = "password"; // password | text\n\nconfig.macros.option.onChangeOption = function(e)\n{\n var opt = this.getAttribute("option");\n var elementType,valueField;\n if(opt) {\n switch(opt.substr(0,3)) {\n case "txt":\n elementType = "input";\n valueField = "value";\n break;\n case "pas":\n elementType = "input";\n valueField = "value";\n break;\n case "chk":\n elementType = "input";\n valueField = "checked";\n break;\n }\n config.options[opt] = this[valueField];\n saveOptionCookie(opt);\n var nodes = document.getElementsByTagName(elementType);\n for(var t=0; t<nodes.length; t++) \n {\n var optNode = nodes[t].getAttribute("option");\n if (opt == optNode) \n nodes[t][valueField] = this[valueField];\n }\n }\n return(true);\n};\n\nconfig.macros.option.handler = function(place,macroName,params)\n{\n var opt = params[0];\n if(config.options[opt] === undefined) {\n return;}\n var c;\n switch(opt.substr(0,3)) {\n case "txt":\n c = document.createElement("input");\n c.onkeyup = this.onChangeOption;\n c.setAttribute ("option",opt);\n c.className = "txtOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\n break;\n case "pas":\n // input password\n c = document.createElement ("input");\n c.setAttribute("type",config.macros.option.passwordType);\n c.onkeyup = this.onChangeOption;\n c.setAttribute("option",opt);\n c.className = "pasOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\n // checkbox link with this password "save this password on this computer"\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option","chk"+opt);\n c.className = "chkOptionInput "+opt;\n place.appendChild(c);\n c.checked = config.options["chk"+opt];\n // text savePasswordCheckboxLabel\n place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));\n break;\n case "chk":\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option",opt);\n c.className = "chkOptionInput "+opt;\n place.appendChild(c);\n c.checked = config.options[opt];\n break;\n }\n};\n//}}}\n/***\n!! Option cookie stuff\n***/\n//{{{\nwindow.loadOptionsCookie_orig_PasswordTweak = window.loadOptionsCookie;\nwindow.loadOptionsCookie = function()\n{\n var cookies = document.cookie.split(";");\n for(var c=0; c<cookies.length; c++) {\n var p = cookies[c].indexOf("=");\n if(p != -1) {\n var name = cookies[c].substr(0,p).trim();\n var value = cookies[c].substr(p+1).trim();\n switch(name.substr(0,3)) {\n case "txt":\n config.options[name] = unescape(value);\n break;\n case "pas":\n config.options[name] = unescape(value);\n break;\n case "chk":\n config.options[name] = value == "true";\n break;\n }\n }\n }\n};\n\nwindow.saveOptionCookie_orig_PasswordTweak = window.saveOptionCookie;\nwindow.saveOptionCookie = function(name)\n{\n var c = name + "=";\n switch(name.substr(0,3)) {\n case "txt":\n c += escape(config.options[name].toString());\n break;\n case "chk":\n c += config.options[name] ? "true" : "false";\n // is there an option link with this chk ?\n if (config.options[name.substr(3)]) {\n saveOptionCookie(name.substr(3));\n }\n break;\n case "pas":\n if (config.options["chk"+name]) {\n c += escape(config.options[name].toString());\n } else {\n c += "";\n }\n break;\n }\n c += "; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/";\n document.cookie = c;\n};\n//}}}\n/***\n!! Initializations\n***/\n//{{{\n// define config.options.pasPassword\nif (!config.options.pasPassword) {\n config.options.pasPassword = 'defaultPassword';\n window.saveOptionCookie('pasPassword');\n}\n// since loadCookies is first called befor password definition\n// we need to reload cookies\nwindow.loadOptionsCookie();\n//}}}\n////===\n\n////+++!![config.macros.upload]\n\n//{{{\nconfig.macros.upload = {\n accessKey: "U",\n formName: "UploadPlugin",\n contentType: "text/html;charset=UTF-8",\n defaultStoreScript: "store.php"\n};\n\n// only this two configs need to be translated\nconfig.macros.upload.messages = {\n aboutToUpload: "About to upload TiddlyWiki to %0",\n backupFileStored: "Previous file backuped in %0",\n crossDomain: "Certainly a cross-domain isue: access to an other site isn't allowed",\n errorDownloading: "Error downloading",\n errorUploadingContent: "Error uploading content",\n fileLocked: "Files is locked: You are not allowed to Upload",\n fileNotFound: "file to upload not found",\n fileNotUploaded: "File %0 NOT uploaded",\n mainFileUploaded: "Main TiddlyWiki file uploaded to %0",\n passwordEmpty: "Unable to upload, your password is empty",\n urlParamMissing: "url param missing",\n rssFileNotUploaded: "RssFile %0 NOT uploaded",\n rssFileUploaded: "Rss File uploaded to %0"\n};\n\nconfig.macros.upload.label = {\n promptOption: "Save and Upload this TiddlyWiki with UploadOptions",\n promptParamMacro: "Save and Upload this TiddlyWiki in %0",\n saveLabel: "save to web", \n saveToDisk: "save to disk",\n uploadLabel: "upload" \n};\n\nconfig.macros.upload.handler = function(place,macroName,params){\n // parameters initialization\n var storeUrl = params[0];\n var toFilename = params[1];\n var backupDir = params[2];\n var uploadDir = params[3];\n var username = params[4];\n var password; // for security reason no password as macro parameter\n var label;\n if (document.location.toString().substr(0,4) == "http")\n label = this.label.saveLabel;\n else\n label = this.label.uploadLabel;\n var prompt;\n if (storeUrl) {\n prompt = this.label.promptParamMacro.toString().format([this.toDirUrl(storeUrl, uploadDir, username)]);\n }\n else {\n prompt = this.label.promptOption;\n }\n createTiddlyButton(place, label, prompt, \n function () {\n config.macros.upload.upload(storeUrl, toFilename, uploadDir, backupDir, username, password); \n return false;}, \n null, null, this.accessKey);\n};\nconfig.macros.upload.UploadLog = function() {\n return new config.lib.Log('UploadLog', " !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |" );\n};\nconfig.macros.upload.UploadLog.prototype = config.lib.Log.prototype;\nconfig.macros.upload.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {\n var line = " [[" + config.lib.file.basename(storeUrl) + "|" + storeUrl + "]] | ";\n line += uploadDir + " | " + toFilename + " | " + backupDir + " |";\n this.newLine(line);\n};\nconfig.macros.upload.UploadLog.prototype.endUpload = function() {\n this.addToLine(" Ok |");\n};\nconfig.macros.upload.basename = config.lib.file.basename;\nconfig.macros.upload.dirname = config.lib.file.dirname;\nconfig.macros.upload.toRootUrl = function (storeUrl, username)\n{\n return root = (this.dirname(storeUrl)?this.dirname(storeUrl):this.dirname(document.location.toString()));\n}\nconfig.macros.upload.toDirUrl = function (storeUrl, uploadDir, username)\n{\n var root = this.toRootUrl(storeUrl, username);\n if (uploadDir && uploadDir != '.')\n root = root + '/' + uploadDir;\n return root;\n}\nconfig.macros.upload.toFileUrl = function (storeUrl, toFilename, uploadDir, username)\n{\n return this.toDirUrl(storeUrl, uploadDir, username) + '/' + toFilename;\n}\nconfig.macros.upload.upload = function(storeUrl, toFilename, uploadDir, backupDir, username, password)\n{\n // parameters initialization\n storeUrl = (storeUrl ? storeUrl : config.options.txtUploadStoreUrl);\n toFilename = (toFilename ? toFilename : config.options.txtUploadFilename);\n backupDir = (backupDir ? backupDir : config.options.txtUploadBackupDir);\n uploadDir = (uploadDir ? uploadDir : config.options.txtUploadDir);\n username = (username ? username : config.options.txtUploadUserName);\n password = config.options.pasUploadPassword; // for security reason no password as macro parameter\n if (!password || password === '') {\n alert(config.macros.upload.messages.passwordEmpty);\n return;\n }\n if (storeUrl === '') {\n storeUrl = config.macros.upload.defaultStoreScript;\n }\n if (config.lib.file.dirname(storeUrl) === '') {\n storeUrl = config.lib.file.dirname(document.location.toString())+'/'+storeUrl;\n }\n if (toFilename === '') {\n toFilename = config.lib.file.basename(document.location.toString());\n }\n\n clearMessage();\n // only for forcing the message to display\n if (version.major < 2)\n store.notifyAll();\n if (!storeUrl) {\n alert(config.macros.upload.messages.urlParamMissing);\n return;\n }\n // Check that file is not locked\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n if (BidiX.GroupAuthoring.lock.isLocked() && !BidiX.GroupAuthoring.lock.isMyLock()) {\n alert(config.macros.upload.messages.fileLocked);\n return;\n }\n }\n \n var log = new this.UploadLog();\n log.startUpload(storeUrl, toFilename, uploadDir, backupDir);\n if (document.location.toString().substr(0,5) == "file:") {\n saveChanges();\n }\n var toDir = config.macros.upload.toDirUrl(storeUrl, toFilename, uploadDir, username);\n displayMessage(config.macros.upload.messages.aboutToUpload.format([toDir]), toDir);\n this.uploadChanges(storeUrl, toFilename, uploadDir, backupDir, username, password);\n if(config.options.chkGenerateAnRssFeed) {\n //var rssContent = convertUnicodeToUTF8(generateRss());\n var rssContent = generateRss();\n var rssPath = toFilename.substr(0,toFilename.lastIndexOf(".")) + ".xml";\n this.uploadContent(rssContent, storeUrl, rssPath, uploadDir, '', username, password, \n function (responseText) {\n if (responseText.substring(0,1) != '0') {\n displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));\n }\n else {\n var toFileUrl = config.macros.upload.toFileUrl(storeUrl, rssPath, uploadDir, username);\n displayMessage(config.macros.upload.messages.rssFileUploaded.format(\n [toFileUrl]), toFileUrl);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n });\n }\n return;\n};\n\nconfig.macros.upload.uploadChanges = function(storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var original;\n if (document.location.toString().substr(0,4) == "http") {\n original = this.download(storeUrl, toFilename, uploadDir, backupDir, username, password);\n return;\n }\n else {\n // standard way : Local file\n \n original = loadFile(getLocalPath(document.location.toString()));\n if(window.Components) {\n // it's a mozilla browser\n try {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]\n .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);\n converter.charset = "UTF-8";\n original = converter.ConvertToUnicode(original);\n }\n catch(e) {\n }\n }\n }\n //DEBUG alert(original);\n this.uploadChangesFrom(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password);\n};\n\nconfig.macros.upload.uploadChangesFrom = function(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var startSaveArea = '<div id="' + 'storeArea">'; // Split up into two so that indexOf() of this source doesn't find it\n var endSaveArea = '</d' + 'iv>';\n // Locate the storeArea div's\n var posOpeningDiv = original.indexOf(startSaveArea);\n var posClosingDiv = original.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1))\n {\n alert(config.messages.invalidFileError.format([document.location.toString()]));\n return;\n }\n var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + \n allTiddlersAsHtml() + "\sn\st\st" +\n original.substr(posClosingDiv);\n var newSiteTitle;\n if(version.major < 2){\n newSiteTitle = (getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode();\n } else {\n newSiteTitle = (wikifyPlain ("SiteTitle") + " - " + wikifyPlain ("SiteSubtitle")).htmlEncode();\n }\n\n revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");\n revised = revised.replaceChunk("<!--PRE-HEAD-START--"+">","<!--PRE-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPreHead","") + "\sn");\n revised = revised.replaceChunk("<!--POST-HEAD-START--"+">","<!--POST-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPostHead","") + "\sn");\n revised = revised.replaceChunk("<!--PRE-BODY-START--"+">","<!--PRE-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPreBody","") + "\sn");\n revised = revised.replaceChunk("<!--POST-BODY-START--"+">","<!--POST-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPostBody","") + "\sn");\n\n var response = this.uploadContent(revised, storeUrl, toFilename, uploadDir, backupDir, \n username, password, function (responseText) {\n if (responseText.substring(0,1) != '0') {\n alert(responseText);\n displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath(document.location.toString())]));\n }\n else {\n if (uploadDir !== '') {\n toFilename = uploadDir + "/" + config.macros.upload.basename(toFilename);\n } else {\n toFilename = config.macros.upload.basename(toFilename);\n }\n var toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n if (responseText.indexOf("destfile:") > 0) {\n var destfile = responseText.substring(responseText.indexOf("destfile:")+9, \n responseText.indexOf("\sn", responseText.indexOf("destfile:")));\n toFileUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + destfile;\n }\n else {\n toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n }\n displayMessage(config.macros.upload.messages.mainFileUploaded.format(\n [toFileUrl]), toFileUrl);\n if (backupDir && responseText.indexOf("backupfile:") > 0) {\n var backupFile = responseText.substring(responseText.indexOf("backupfile:")+11, \n responseText.indexOf("\sn", responseText.indexOf("backupfile:")));\n toBackupUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + backupFile;\n displayMessage(config.macros.upload.messages.backupFileStored.format(\n [toBackupUrl]), toBackupUrl);\n }\n var log = new config.macros.upload.UploadLog();\n log.endUpload();\n store.setDirty(false);\n // erase local lock\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n BidiX.GroupAuthoring.lock.eraseLock();\n // change mtime with new mtime after upload\n var mtime = responseText.substr(responseText.indexOf("mtime:")+6);\n BidiX.GroupAuthoring.lock.mtime = mtime;\n }\n \n \n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n }\n );\n};\n\nconfig.macros.upload.uploadContent = function(content, storeUrl, toFilename, uploadDir, backupDir, \n username, password, callbackFn) {\n var boundary = "---------------------------"+"AaB03x"; \n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n if (window.netscape){\n try {\n if (document.location.toString().substr(0,4) != "http") {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');}\n }\n catch (e) {}\n } \n //DEBUG alert("user["+config.options.txtUploadUserName+"] password[" + config.options.pasUploadPassword + "]");\n // compose headers data\n var sheader = "";\n sheader += "--" + boundary + "\sr\snContent-disposition: form-data; name=\s"";\n sheader += config.macros.upload.formName +"\s"\sr\sn\sr\sn";\n sheader += "backupDir="+backupDir\n +";user=" + username \n +";password=" + password\n +";uploaddir=" + uploadDir;\n // add lock attributes to sheader\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n var l = BidiX.GroupAuthoring.lock.myLock;\n sheader += ";lockuser=" + l.user\n + ";mtime=" + l.mtime\n + ";locktime=" + l.locktime;\n }\n sheader += ";;\sr\sn"; \n sheader += "\sr\sn" + "--" + boundary + "\sr\sn";\n sheader += "Content-disposition: form-data; name=\s"userfile\s"; filename=\s""+toFilename+"\s"\sr\sn";\n sheader += "Content-Type: " + config.macros.upload.contentType + "\sr\sn";\n sheader += "Content-Length: " + content.length + "\sr\sn\sr\sn";\n // compose trailer data\n var strailer = new String();\n strailer = "\sr\sn--" + boundary + "--\sr\sn";\n //strailer = "--" + boundary + "--\sr\sn";\n var data;\n data = sheader + content + strailer;\n //request.open("POST", storeUrl, true, username, password);\n try {\n request.open("POST", storeUrl, true); \n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if (request.status == 200)\n callbackFn(request.responseText);\n else\n alert(config.macros.upload.messages.errorUploadingContent + "\snStatus: "+request.status.statusText);\n }\n };\n request.setRequestHeader("Content-Length",data.length);\n request.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);\n request.send(data); \n};\n\n\nconfig.macros.upload.download = function(uploadUrl, uploadToFilename, uploadDir, uploadBackupDir, \n username, password) {\n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n try {\n if (uploadUrl.substr(0,4) == "http") {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n }\n else {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n }\n } catch (e) { }\n //request.open("GET", document.location.toString(), true, username, password);\n try {\n request.open("GET", document.location.toString(), true);\n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n \n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if(request.status == 200) {\n config.macros.upload.uploadChangesFrom(request.responseText, uploadUrl, \n uploadToFilename, uploadDir, uploadBackupDir, username, password);\n }\n else\n alert(config.macros.upload.messages.errorDownloading.format(\n [document.location.toString()]) + "\snStatus: "+request.status.statusText);\n }\n };\n request.send(null);\n};\n\n//}}}\n////===\n\n////+++!![Initializations]\n\n//{{{\nconfig.lib.options.init('txtUploadStoreUrl','store.php');\nconfig.lib.options.init('txtUploadFilename','');\nconfig.lib.options.init('txtUploadDir','');\nconfig.lib.options.init('txtUploadBackupDir','');\nconfig.lib.options.init('txtUploadUserName',config.options.txtUserName);\nconfig.lib.options.init('pasUploadPassword','');\nsetStylesheet(\n ".pasOptionInput {width: 11em;}\sn"+\n ".txtOptionInput.txtUploadStoreUrl {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadFilename {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadDir {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadBackupDir {width: 25em;}\sn"+\n "",\n "UploadOptionsStyles");\nconfig.shadowTiddlers.UploadDoc = "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadDoc ]]\sn"; \nconfig.options.chkAutoSave = false; saveOptionCookie('chkAutoSave');\n\n//}}}\n////===\n\n////+++!![Core Hijacking]\n\n//{{{\nconfig.macros.saveChanges.label_orig_UploadPlugin = config.macros.saveChanges.label;\nconfig.macros.saveChanges.label = config.macros.upload.label.saveToDisk;\n\nconfig.macros.saveChanges.handler_orig_UploadPlugin = config.macros.saveChanges.handler;\n\nconfig.macros.saveChanges.handler = function(place)\n{\n if ((!readOnly) && (document.location.toString().substr(0,4) != "http"))\n createTiddlyButton(place,this.label,this.prompt,this.onClick,null,null,this.accessKey);\n};\n\n//}}}\n////===\n
Viewing Computer/User Sessions\n\nTo view a user’s Session(s):\n\nGo to Programs ->Administrative Tools -> Computer Management\n\nOnce you are in Computer Management, expand Shared Folders\n\nClick on Sessions\n\nIn the main window you should see a list of current user/computer information. From there you can either this information, decide to force a user off or simply give the user a call. this is also useful when a database is locked and you need to know who is in it at that moment in time.\n\nExit out when finished.
This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://swytch.tiddlyspot.com/controlpanel]] (your control panel username is //swytch//).\n<<tiddler tiddlyspotControls>>\n@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the "save to web" button in the column on the right.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click "upload" and your ~TiddlyWiki will be saved back to tiddlyspot.com.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions.
Browse this Wiki for various techie tips & tricks I've picked up along the way!
| tiddlyspot password:|<<option pasUploadPassword>>|\n| site management:|<<upload http://swytch.tiddlyspot.com/store.cgi index.html . . swytch>>//(requires tiddlyspot password)//<<br>>[[control panel|http://swytch.tiddlyspot.com/controlpanel]], [[download (go offline)|http://swytch.tiddlyspot.com/download]]|\n| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[announcements|http://announce.tiddlyspot.com/]], [[blog|http://tiddlyspot.com/blog/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|