Welcome, guest ( Login )

RecentChangesFeed

Recent Changes
Export table
Page:Wiki
Revision:2
Last edited:05/28/2007 09:52AM (05/28/2007)
Edited by:admin

Page:blanktemplate-070409-1604.zip
Revision:NEW
Last edited:05/11/2007 03:34PM (05/11/2007)
Edited by:admin

Page:R2.9ReleaseNotes
Revision:6
Last edited:03/22/2007 10:44AM (03/22/2007)
Edited by:gregd

Jot Wiki

  • Added: Support for Internet Explorer 7
  • Added: Support for Firefox 2
  • Added: Ability within the UI to set permissions on User and Group pages through the "set permissions" button in the upper right-hand corner of the pages
  • Added: Improved the interface for moving pages. A "Move this page" link has been added to the "Tools" menu at the bottom of pages that can be moved.
  • Fixed: Support for RSS feeds without the need for HTTP Authentication and cleaned up the appearance.  The link for RSS feeds remain in the footer of the pages.
    • WARNING: The new RSS feed infrastructure uses a token containing authentication information rather than requiring HTTP authentication, this means that many online RSS readers may now be used.  Some online news readers allow your personal feeds to be indexed by search engines.  This implies that password protected, private information on your wiki may be made accessible to search engines if you add it into an online RSS reader.  Please consider this when determining how you would like to use RSS feeds.

Jot Editor

  • Added: Warning for non-admin users that do not have writeScript permission that they cannot edit a page with code or the code will be removed

Jot Spreadsheets

  • Added: RSS Feed
  • Fixed: User was receiving a lock message when another user was editing but was still allowed to edit, that is no longer the case

Jot Blog

  • Fixed: reworked the RSS feed to simplify use

Jot Calendar

  • Added: RSS Feed

Jot File Cabinet

  • Added: RSS Feed

Jot Photo Page

  • Added: RSS Feed

Jot To Do List

  • Added: RSS Feed

Jot Knowledge Base

  • Added: RSS Feed

Jot Bug Reporter

  • Added: RSS Feed

Jot Forum

  • Fixed: Only the user who created the Forum can delete it by default

Jot Platform

  • Added: A new permission (sys/permission/writeScript) that, when added to a page with a user will allow that user to edit code on those pages.  This permission is not exposed in the UI and so therefore needs to be set by the admin user through the console.
  • Added: A new page (/System/WriteScript) which will allow admins to determine which users can edit scripts at all by allowing them Read access to this page.
  • Added: A new command that will allow admin users to extract a webspace and then completely refresh and old webspace with it, including deleting old content first.  Export can be done through the console using admin.exportZip({encrypted: true, includeRevisions: true}).  Clear and re-import can be done using jot.lib.admin.resetWebspace(req.uploaded.upload) admin.resetWebspace(req.uploaded.upload) after the downloaded file has been selected.
  • Added: Ability to export wiki (not including application) content to HTML, support can provide more details
Page:ReleaseNotes
Revision:10
Last edited:02/02/2007 12:15AM (02/02/2007)
Edited by:admin

JotSpotJotSpot Release Notes

  • Release 2.6 - new editor, enhanced permissions model
  • Release 2.7 - page types (spreadsheet, calendar, file cabinet, and photo page), new link picker, wiki appearance
  • Release 2.8 - table editing in wysiwyg editor
  • Release 2.9 - IE7 and Firefox 2 support, enhanced RSS support
Page:GetSupport
Revision:6
Last edited:02/02/2007 12:14AM (02/02/2007)
Edited by:admin

Online help, FAQ's, and the knowledge base can be found at http://feedback.jot.com.

To contact support, please email jotspotsupport at google googlesupport dot com.

Page:R2.8ReleaseNotes
Revision:2
Last edited:10/17/2006 10:31AM (10/17/2006)
Edited by:admin

Release Notes for 2.8

Jot Wiki

  • Added: search and index pages now support filtering by creation user, recently changed, and page types
  • Added: support for multipart/related emails sent to pages and other applications
  • Added: the ability to switch back to the default Jot logo once the logo has been changed
  • Added: the date format of the browser is now used to display dates (instead of a wiki setting)
  • Added: adding new code to pages is now restricted to the admin user
  • Fixed: sidebar content is not shown show to guests of private wikis when requesting a page that doesn't exist
  • Fixed: removed "default text area size" user preference given it doesn't make sense anymore with the new editor
  • Fixed: link to users and groups was disappearing when the sidebar was configured to hide the invite box even though a user had create child on the _Admin node
  • Fixed: single backslashes were getting removed on save of web pages

Jot Editor

  • Added: table editing (icon added to top menu bar, right click menu added when over a table)
  • Added: in addition to the listing interface, the link picker was enhanced to include a filter auto-complete which completes page names for easy page linking
  • Added: you can upload a document from the link picker
  • Added: link picker page selection now supports sorting
  • Added: link picker defaults to selected text for new pages
  • Added: loading messages when loading values in the link picker
  • Added: the link picker now follows the theme
  • Added: the ability to edit an existing link
  • Added: the editor now wraps when the browser is too narrow to display the entire bar
  • Fixed: markup mode was not correctly interpreting nested lists such that pages edited in markup mode would mangle lists created in wysiwyg mode
  • Fixed: "unable to edit as wysiwyg: object error" showing up when editing certain pages in Internet Explorer

Jot Spreadsheets

  • Fixed: Significant performance improvements in the import, loading, and rendering of the spreadsheet spreadsheet.
  • Fixed: when exporting a spreadsheet, blank columns are ignored

Jot To Do List

  • New App

Jot Blog

The Jot Blog was given a new look and feel that better fits into the new wiki look and feel.

  • Added: a tag cloud for easy tag navigation
  • Added: improved tag interface for selecting tags (auto complete)

Jot Email Lists

A email lists application was added to the Jot portfolio.

  • Added: the ability to create email lists in the wiki
  • Added: archive view of all emails sent to the list

Jot Project Manager

Project Manager was given a new look and feel more consistent with the new wiki. The theme no longer takes over the entire screen but instead leaves the sidebar, header, and footer like our other applications.

Jot Calendar

  • Fixed: the calendar was not respecting the user's date format or timezone selection

Jot Platform

  • Added: forPathDeleted="/some/path" and forAllDeleted="1" search predicates to return pages that have been deleted deleted.
Page:Apps
Revision:14
Last edited:09/25/2006 01:21PM (09/25/2006)
Edited by:admin

Jotspot Wiki

Jotspot Class Reunion Planner

Jotspot Family Site

Page:R2.7ReleaseNotes
Revision:19
Last edited:09/15/2006 04:51PM (09/15/2006)
Edited by:s3admin

2.7 Release Notes

Wiki

  • Added: Page Types - users can now created different type pages, 2.7 supports web page (in 2.6 this was the only page type), calendar, spreadsheet, file cabinet, and photo page. Each page type (aside from web page) has a central page that is accessed using the application bar in the sidebar. This page lists all pages of that type in the wiki.
  • Added: calendar page type - the calendar page type allows a user to create a page to publish schedule information in a calendar form.
  • Added: spreadsheet page type - borrowing from the Jotspot Tracker application, the spreadsheet page type allows a user to embed spreadsheets right in the wiki.
  • Added: file cabinet page type - the file cabinet is not unlike a wiki page but emphasizes the documents on a page instead of the page content.
  • Added: photo page type - photo pages allow a user to create a page that highlights images or photos. Uploaded images are shown as thumbnails and slide show functionality is available as well.
  • Added: the behavior of the create page button was changed. In previous releases it would create a page under the current page in the hierarchy. This caused a lot of confusion and unintended page hierarchies. Create page now always creates a page under WikiHome. A new button "add sub-page" button has been introduced below the page content. This allows users to create hierarchies when they would like them and avoids unintended hierarchies. In future releases we will add the ability to place a page in a specific location on creation.
  • Added: wiki sidebar look and feel was reworked and new sidebar widgets were added. See below for widget descriptions.
  • Added: applications now appear as app bars in the sidebar
  • Added: sidebar configuration - administrators can now enabled and disable four available modules: wiki links, favorites, my recent changes, and all recent changes. These changes affect the sidebar for all users. Users that used the Toolbar page in previous releases should move the Toolbar content to the new Global Links page (Administration -> Global Links)
  • Added: changed welcome message for new users
  • Added: the ability for administrators to disable the welcome message (Administration -> Other Settings)
  • Added: the ability for administrators to reference an external URL to be used as the welcome message (Administration -> Other Settings)
  • Added: tips and hints for first time users
  • Added: the ability for administrators to disable tips and hints (Administration -> Other Settings)
  • Added: wiki links sidebar widget - administrator configurable sidebar widget that allows an admin to put standard wiki page content into the sidebar
  • Added: my recent changes sidebar widget - shows recent changes specific to the logged in user (Note: the widget does not yet search across all revisions so if a user edits a page after you, it will no longer show up in this widget. This will be addressed in a future release.)
  • Added: configurable colors - administrators can now change the colors of the wiki using the menu Wiki Appearance under Administration. Free wiki users can choose between 3 color themes. Paid wiki users (of any plan) can choose between 10 colors as well as define their own.
  • Added: upload logo - administrators of paid (any plan) wikis can now upload a logo to replace the Jotspot logo using the menu Wiki Appearance under Administration.
  • Added: IP filtering - administrators of Company and Workgroup wikis can now restrict access to their wiki by IP or IP block. Configuration can be reached using the Other Settings menu under Administration. It takes a comma separated list of IP filters, for example, 10.1.1.1, 10.2.0.0/16. This capability will not be automatically enabled by default for existing customers. Please contact support to enable it.
  • Fixed: fixed problems with enforcing SSL only access. Now http access to an SSL only webspace is redirect to https. We are also now enforcing the plan restrictions (SSL access for Workgroup and Company plans).
  • Added: search example page to help with search syntax. Users can access this via the linked search prompt or via the Want Help with Search? link in search results.
  • Added: search now supports exact phrase searching (surround phrase in quotes)
  • Added: free plans can no longer enable guest access. We were having trouble with spam wikis (spammers would put up wikis as link farms and then send out mail pointing to them). This will restrict this ability.
  • Fixed: incoming email not handled correctly when it contained illegal XML characters (3864)
  • Fixed: usernames are no longer case sensitive
  • Fixed: problems with search parsing some forms of logical operators
  • Fixed: users were sometimes seeing "unable to save: Type Error: content.match is not a function" because text conversion would choke when tags included an xmlns specifier, for example <img src="foo.jpg" xmlns="" /> (3876, 3817)
  • Fixed: when a group was deleted, pages that had used that group in security settings would throw an error (1407)
  • Fixed: when a user used the "recreate as new" function when recovering a delete page, the page would not retain its form. For example, if recreating a group after deletion, it would not retain the group form and therefore would not be recognized as a group. (2983)

Jot Editor

  • Added: new link picker that allows users to more easily link to pages within the wiki, links outside the wiki, and documents in the wiki
  • Added: the ability to edit HTML directly from the wysiwyg editor
  • Fixed: return/enter creates a new line instead of a new paragraph like standard word processing applications

Jot Spreadsheets

Jotspot Tracker was integrated into the wiki and added as a Page Type. Enhancements are as follows.
  • Added: formula support (see help icon next to fx for details)
  • Added: the ability to wrap text in a cell
  • Added: copy/paste support
  • Added: shift-click now selects ranges of cells
  • Added: the ability to rename spreadsheets
  • Spreadsheets made using the tracker app available on release 2.6 will be upgraded the Tracker app will be removed

Jot Calendar

The Jotspot Event Calendar/Meeting Manager was rewritten and integrated into the wiki as a page type. Enhancements are as follows.
  • Added: support for multiple calendars through the creation of calendar pages
  • Added: vastly improved calendar UI
  • Added: rapid event entry without page refreshes
  • Added: click on day to add event to that day
  • Added: upcoming event view
  • Users of the event calendar and meeting manager will be given the option to upgrade using a link at the bottom of the page seen when selecting the Calendars application bar.

Jot Group Directory

The company directory was reworked and generalized into a group directory application. Enhancements are as follow.
  • Added: support for multiple directories
  • Added: the ability to add and remove fields from the directory contact form (per directory) using a wysiwyg form configuration tool
  • Added: the ability to define multiple views of directory data by filtering on field values, ordering results, and choosing visible values
  • Added: skype field with skype presence indicator and click to call
  • Added: IM field with AIM and Yahoo presence indicator and click to IM
  • Added: vastly improved UI for uploading a portrait
  • Users of the Company Directory will be presented with an option to upgrade their directory when they first install the group directory. This will copy Company Directory entries into a newly created directory. The Company Directory can then be uninstalled.

Jot Platform

  • Added: jot.lib.attach was enhanced to accept a property list
  • Added: a heartbeat event was added for use in features like digest emails. The /JotHeartbeatHourly event is triggered hourly and /JotHeartbeatDaily is triggered every night at 2am PST. (3889)
  • Added: the package manager now supports the ability to include an "app name" which will be used on the application bar.
  • Added: the package manager now supports the ability to include a link to an icon to be shown on the sidebar

2.7 Release Version Information

Product Version as of 2006/09/15 (for diagnostic purposes only):
  • Core Product

    • Software version: 2.7.166
    • Bootstrap: 2.7.0
    • Dojo: 2.7.0
    • FancyTabs: 0.3
    • GroupManagement: 2.7.0
    • Init: 2.7.0
    • Lib: 0.072
    • PackageUserInterface: 2.7.0
    • System: 2.7.1.418
  • Included Applications

    • CalendarApp: 1.0.418
    • FileCabinetApp: 1.0.418
    • PhotoGalleryApp: 1.4.5.418
    • SpreadsheetApp: 2.7.04.418
  • Installable Gallery Applications

    • ProjectManagerApp: 1.0.442
    • BugReporterApp: 2.8.6.293
    • KnowledgeBaseV2App: 1.0.2
    • RecruitingApp: 1.32
    • CallLogApp: 1.25
    • BlogApp: 4.0.8
    • ForumApp: 2.0.15
    • GroupDirectoryApp: 0.2.342
    • SimplePollApp: 1.1
    • ToDoListApp: 2.8
Page:Search
Revision:4
Last edited:09/13/2006 07:31PM (09/13/2006)
Edited by:s3admin

Page:R2.6ReleaseNotes
Revision:NEW
Last edited:07/22/2006 06:53PM (07/22/2006)
Edited by:sjohnston@jot.com

The major themes of release 2.6 were improved wysiwyg editing and page permissions.

Jot Wiki

  • Added: the ability to widen permissions. In previous releases, a user would need to have access to a parent page in order to be given access to a child page. This didn't support the scenario where permissions needed to be widened. For example, if a user wanted to restrict editing of WikiHome but allow some users to edit sub-pages. Page permissions can now be accessed using the permissions button in the upper right of the page. The button also acts as an indicator regarding page permissions.
  • Added: per page level permissions. Permissions can be inherited from the parent or overridden at a specific page.
  • Added: new streamlined look and feel
  • Added: favorites sidebar widget which allows a user to bookmark frequently used pages in the wiki. Users can add and remove from their favorites widget by clicking on the star to the right of a page title.
  • Added: invite users sidebar widget
  • Added: recently changed sidebar widget that shows last 5 files changed in the wiki
  • Added: administration menu items and page tools were moved to the bottom of the page
  • Added: the page lock warning now displays the user editing the page
  • Added: the version information is now displayed more prominently on the page under the title. This includes last editor and last edit time so that a user doesn't need to click into the version information to get this information.
  • Added: the comments section of the page is more defined and comments can be added without refreshing or leaving the page
  • Added: the attachments section of the page is more defined and files can be added without refreshing or leaving the page
  • Added: edit/save/cancel buttons were moved to the right side of the page. Create page is still on the left but out of the frame to indicate the global nature of the action.
  • Fixed: page titles now support special characters
  • Fixed: improved document conversion from Microsoft Word
  • Fixed: the jot wiki was improperly encoding spaces as plus signs (+). It now uses the correct encoding. This can cause problems on upgrade if there are conflicting pages.

Jot Editor

The jot wysiwyg editor was rewritten from the ground up to be much faster, responsive, and easy to use. This makes for a much more reliable wysiwyg experience. Note that we were not able to implement table editing in the 2.6 release but this capability will be added back very soon.
  • Added: instant editing - when a user edits a page, the editor is swapped in quickly without reloading the page
  • Added: undo/redo buttons
  • Added: the editable area now automatically grows as you type. This eliminates double scroll bars.
  • Added: warning if you navigate away from the page while editing

Jot Spreadsheets

  • Added: jot tracker (standalone) was integrated into the wiki as an application in preparation for release 2.7 page types
Page:FamilySiteAdministration
Revision:4
Last edited:04/12/2006 10:02PM (04/12/2006)
Edited by:jolbrys@yahoo.com

Table of Contents

Site Setup

The Site Setup page contains the basic configuration for the site. You can configure:

  • Family name
  • Site color theme

Access to Site Functionality

The Site Admin can:

  • Edit theEdit the Site Setup page
  • Re-order and remove pages from the sidebar

By default, the Site Admin is the person who created the site.

Members can:

  • Update the front page (Home)
  • Update their own profile
  • Create a page
  • Add to the directory
  • Create or add to the family tree
  • Post to the calendar
  • Upload photos
  • Input family birthdays
  • Post to the family blog
  • Add recipes
  • Create and participate in polls
  • Create and add to the reunion schedule

Sidebar

The sidebar is a global setting for your site. Changes to this sidebar will be seen by all users. All users. All members can add pages to pages to the sidebar. Only the Site Admin can remove and reorder pages on the sidebar.

Page:FamilySiteHelp
Revision:14
Last edited:04/12/2006 10:01PM (04/12/2006)
Edited by:jolbrys@yahoo.com

Help for users and administrators of the Jotspot Family Wiki.

Recent News

  • [4.11.2006] Family Site public beta released! Read more.
  • [4.3.2006] Family Site private beta released!

Help

  • Application Overview
    • Privacy and Security
    • Access
    • Page Creation
    • Browser Support
  • Default Application Pages
    • Family Directory - displays a directory listing of all family members that have accepted an invitation to the site
    • Family Tree - enables you to create and display your family's tree
    • Family Calendar - provides a central place for your scheduled events
    • Family Map - shows the locations of family members throughout the world
    • Family Photos - provides a central place to create albums and upload photos
    • Family Birthdays - enables you to add and display family members' birthdays so they are never missed
    • Family Blog - allows family members to post announcements, memories, and other information to be shared
    • Family Recipes - provides a place for grandma's classic recipes or interesting new ones
    • Family Polls - lets family members vote on topics of interest
    • Reunion Schedule - provides a place to display the family reunion schedule
  • Site Administration
    • Site Setup
    • Access to Site Functionality
    • Sidebar
    • Page Permissions
Page:ClassReunionHelp
Revision:18
Last edited:04/12/2006 10:01PM (04/12/2006)
Edited by:jolbrys@yahoo.com

Help for users and administrators of the Jotspot Class Reunion Wiki.

Recent News

  • [2.9.2006] Class Reunion Planner version 1.1 released! Release highlights include page security, image upload for page authoring, and photo deletion. See the release notes for more information.
  • [2.1.2006] Note that we don't currently support GIF images for the class logo, class photos, or portrait. We plan to start supporting GIF's in the April timeframe.

Help

  • Application Overview
    • Pricing
    • Privacy and Security
    • Access
    • Page Creation
    • Browser Support
  • Default Application Pages
    • Back Then - pulls in events from around the web from back when you were in school
    • Class Map - shows the locations of classmates throughout the world
    • Class Directory - displays a directory listing of all classmates that have accepted an invitation to the site
    • Event Calendar - provides a central place for your scheduled events
    • Class Photos - provides a repository to which you can upload photos whether current or from way back when
  • Site Administration
    • SiteSet Setup
    • Access to Site Functionality
    • Sidebar
    • Page Permissions
Page:FamilySiteDefaultApplicationPages
Revision:10
Last edited:04/12/2006 09:55PM (04/12/2006)
Edited by:jolbrys@yahoo.com

These pages come with your Family Site Wiki. The Site Admin can remove them from the list or reorder them. Below is brief description of each default page:

  • Family Directory - displays a directory listing of all family members that have accepted an invitation to the site
  • Family TreeFamily Tree - enables you to create and display your family's tree
  • Family CalendarFamily Calendar - provides a central place for your scheduled events
  • Family MapFamily Map - shows the locations of family members throughout the world
  • Family PhotosFamily Photos - provides a central place to create albums and upload photos
  • Family BirthdaysFamily Birthdays - enables you to add and display family members' birthdays so that they are never missed
  • Family RecipesFamily Recipes - provides a place for Grandma's classic recipes or interesting new ones
  • Family PollsFamily Polls - lets family members vote on topics of interest
  • Reunion Schedule - provides a place to display the family reunion schedule

In addition to these default pages, all users can create new pages that will get added to the list. Perhaps you want to create a "Save the Date" page for your upcoming wedding or want to add a page that lists the details for Mom and Dad's 40th anniversary party, it’s easy to do by simply clicking on the "create a page" button in the sidebar. Once you save your page, it will show up in the list of pages in the sidebar. If the Site Admin deems a page inappropriate he/she can remove it from the list.

Family Directory

Users are able to see a list of all members who are part of the Family Site. They can also access their profiles from this page by clicking on the link “Fill out your profile or upload a current photo.” From here, they can upload a photo of themselves or click on the "edit page" button in the top right- hand corner of the page and add details. Family directory entries are automatically created when a user accepts an invitation.

Family TreeFamily Tree

The family tree is a simplisitc representation of each member in your family and their associated generational ties. It is very easy to fill out and anyone can do it. When you first come to the page, you are asked to start by entering in your full name, your mother's and father's names and your spouse's name, if applicable. It is important to enter in the names as completely as possible so the tree remains clear. For example, if your name is Joseph Smith and your son's name is Joseph Smith, Jr., be sure to keep the Jr. as part of his name. Once you have entered yourself, click on the "add" button. You will be taken to the family tree. You will see that you have been added to the tree, your mother has been added, your father has been added and your spouse, if applicable, has been added. From there, you can add more family members by clicking on the "Add more family members" link or the "edit the current family tree" link. If you would like to enter in your mom's mother and father, click on the "edit the current family tree" link since your mom is already a member of the tree. If you would like to add one of your siblings, click on the "Add more family members" link since your siblings have not yet been added.

Family CalendarFamily Calendar

The Family Calendar provides a monthly view of all events related to the family. Any user can add events by clicking on the "add an event" button in the upper left-hand corner of the page. The New Calendar Event page lets users put in a short summary of the event, its date and time as well as a detailed description. By clicking on the "choose dates button", users are able to select the start date and time, the event's duration, as well as any recurring schedule the event may have.

Family MapFamily Map

The Family Map is an interactive map that lets users see where their family members are living. They can zoom all the way in for neighborhood detail or zoom all the way out for a world wide perspective. In addition, the satellite view lets users see actual satellite images.

Family PhotosFamily Photos

Family Photos is an easy way for members to share their photos with others. If your family is spread out across different geographical areas, it is a nice way to keep up to date on new babies, weddings, etc. Users can upload photos to the site by clicking on the "Create New Album" button in the top left-hand corner of the page. You will be prompted to type in an album name. From the album page, you can upload your photos by clicking on the "Upload Photo" button. Once you have uploaded several photos into your ablum, you can view your album, play a slideshow or delete your album.

Family BirthdaysFamily Birthdays

Family birthdays are easy to add and keep track of in this application. Simply click on the "Add a Birthday" button and enter the family member's name and his/her birthday. The birthdays are listed on the pages by month and get automatically added onto the Family Calendar. Never miss a birthday again!

Family RecipesFamily Recipes

This is a great way to keep track of and share your favorite family recipes. Click on the "Add a Recipe" button, type in the name of the recipe, add any tags associated with the recipe such as chicken, Mexican, spicy, and then type in the recipe's details and instructions. Make sure that your Grandmother's famous recipes don't get lost. Add them here and feel confident that they will remain in the family for generations to come. In addition to adding your own recipes, you can link to ones that you love online. As before, type in the name of the recipe, add any tags, but instead of writing in the details, simply type in the recipe's name, highlight the name then click on the "link" icon . A popup box will prompt you for the web address of the recipe. Type in the URL and click "OK." When you click on the name of recipe, it will take you to its location online.

Family PollsFamily Polls

Family Polls is a great way to make decisions using a voting system. Perhaps you are arranging a family reunion and want your family members to vote on its location. You can create a poll and ask them to vote on up to one of five choices. Click on the "Create a Poll" button, type in the question such as "Where would you like the family reunion to be held?" and then save. Your poll will be posted on the page and each user can cast his/her vote. You can view the results of the poll and let the majority rule!

Reunion ScheduleReunion Schedule

The Reunion Schedule is simply an editable text page. You can format it, change it, add photos to it, etc. Click on the "Edit This Page" button in the top right-hand corner of the page and personlize the details accordingly.

Page:linkicon.gif
Revision:NEW
Last edited:04/12/2006 08:56PM (04/12/2006)
Edited by:jolbrys@yahoo.com

Page:FamilySiteApplicationOverview
Revision:3
Last edited:04/11/2006 02:16PM (04/11/2006)
Edited by:jolbrys@yahoo.com

Application Privacy and Security

Jotspot takes privacy and security very seriously. The Jotspot security policy is attached to this page. You can also find more about our security audits and data protection on our security page.

Application Access

Your family site will only be available to members you invite. You send an email invitation with your own custom message through the application and then you are able to track and can track the status of your outstanding invitations. When members accept invitations, they are asked to enter a password. If they forget their password the application allows them to reset the password.

The family site administrator can change the site's color scheme, edit the family name and modify the sidebar. Registered users can do everything else including upload photos, add events, post to the blog, create pages, etc.

Page Creation

All pages are created and edited using our in-browser "What You See Is What You Get" (WYSIWYG) editor. So no there are no HTML skills necessary to build your site. Images can be uploaded and included in pages as well.

Browser Support

No special software is needed to update or use the site. Jotspot supports Internet Explorer and Firefox on both Windows and OS X. We are working on Safari support.

Page:JotSpot_Security_Policy.pdf
Revision:NEW
Last edited:04/11/2006 02:14PM (04/11/2006)
Edited by:jolbrys@yahoo.com

Page:SharedRoot
Revision:40
Last edited:04/10/2006 06:54AM (04/10/2006)
Edited by:admin

var SharedRoot = "/ApplicationHelp/ApplicationHelpShared";
Page:WikiHome
Revision:10
Last edited:04/09/2006 10:21PM (04/09/2006)
Edited by:sjohnston@jot.com

var url = jot.lib.util.makeURL("wiki:/Apps/", 1); jot.lib.redirect(url);

My blank page.

Click "edit page" and start typing to create your home page.

Page:TestPage
Revision:NEW
Last edited:04/09/2006 10:19PM (04/09/2006)
Edited by:sjohnston@jot.com

jot.lib.savePage('/Apps',{'sys/theme':'/System/Themes/AppHelp/'});
Page:SharedUtils
Revision:2
Last edited:04/09/2006 03:12PM (04/09/2006)
Edited by:admin

var SharedUtils_included = "true"; // var firstMark = jot.lib.date.now(); var prevMark = firstMark; var SharedUtilsNextWidgetId = 1; /** * Logs a message to the console **/ function msg(str) { jot.lib.srvadm.log(str); // For emergencies only // logToPage(str); } /** * Logs a message to a "DebugLog" page **/ function logToPage(str) { var logPage = jot.pages[SharedRoot+'/DebugLog']; // var logNum = 0; // var logNumKey = 'msglog/num'; // if (logPage && logPage.msglog && logPage.msglog.num) { // logNum = parseInt(logPage.msglog.num) + 1; // } // // var saveStuff = {}; // saveStuff['msglog/num'] = ""+logNum; // saveStuff['msglog/item' + logNum] = ""+str; // jot.lib.savePage(SharedRoot+'/DebugLog', saveStuff); } /** * Logs a message to the console and then forces the currently * executing script to have a fatal error. **/ function fatal(str) { msg(str); // this will force a script error var errorVariable = "fatal_script_error__" + makeSafeId(str); eval("(" + errorVariable + ")"); } /** * Logs a timestamped message to the console. When client is * specified, also appends a client-side timestamp to the browser's * page. **/ function mark(str, client) { var now = jot.lib.date.now(); var timeStamp = now.format("H:m:s.S"); if (!str) { str = "Mark"; } msg(timeStamp + ": (T0:"+jot.lib.date.timeBetween(firstMark, now).getMilliseconds()+"; TD:"+jot.lib.date.timeBetween(prevMark, now).getMilliseconds()+")\t " + str); prevMark = now; if (client) { jot.out.write("<script type=\"text/javascript\">" + "dojo.addOnLoad(function() {" + "var now = new Date();" + "var t = document.createElement(\"p\");" + "t.innerHTML = \""+str+": SERVER: " + timeStamp + " -- CLIENT: \" + now.getHours() + \":\" + now.getMinutes() + \":\" + now.getSeconds() + \".\" + (now.getTime()%1000);" + "document.appendChild(t);});</script>"); } } /** * Writes out a formatted version of a long piece of text that may * include newlines, such as a description. When showNewlines is * true, the returned text will contain <br/> tags for line breaks. * When this is false, newlines are stripped. When truncateLength is * greater than zero, the original text is truncated to the given * length. All other HTML is stripped away. **/ function getLongText(origText, showNewlines, truncateLength, noDataMessage) { var text = noDataMessage; if (jot.lib.util.countCharacters(origText) > 0) { text = ""+origText; } text = text.replace(/<.*?>/g, " "); if (showNewlines) { text = text.replace(/[\n\r]/g, "<br/>"); } if (truncateLength > 0) { text = truncateText(text, truncateLength); } text = xmlEscape(text); if (showNewlines) { text = text.replace(/[\n\r]/g, "<br/>"); } return text; } function writeLongText(origText, showNewlines, truncateLength, noDataMessage) { jot.out.write(getLongText(origText, showNewlines, truncateLength, noDataMessage)); } /** * Returns the given text, unless it is longer than the given length, * in which case the last 3 letters before the max length are removed * and replaced with "..." **/ function truncateText(text, maxLength) { if (!text || text.length <= maxLength) { return text; } else { return text.substring(0, maxLength-3) + "..."; } } /** * Returns a sanitized key from the given identifier, which can be * used as an HTML id. **/ function makeSafeId(identifier) { return identifier.replace(/[^A-Za-z0-9_]/g,"_"); identifier.replace(/[^A-Za-z0-9_]/,"_"); } /** * Escapes any quotes in the given string so that it's safe for * javascript. TODO: This has to be a server feature already, yes? **/ function jsEscape(identifier) { if (!identifier) { return ""; } identifier = "" + identifier; identifier = identifier.replace(/\\/g,"\\\\"); identifier = identifier.replace(/\'/g,"\\\'"); identifier = identifier.replace(/\"/g,"\\\""); identifier = identifier.replace(/\n/g,"\\n"); identifier = identifier.replace(/\r/g,"\\r"); return identifier; } /** * Escapes a string so that it is safe for XML. **/ function xmlEscape(identifier) { if (!identifier) { return ""; } // order matters identifier = "" + identifier; identifier = identifier.replace(/\&/g,"&amp;"); identifier = identifier.replace(/\</g,"&lt;"); identifier = identifier.replace(/\>/g,"&gt;"); identifier = identifier.replace(/\"/g,"&quot;"); return identifier; } /** * This is sort of a naughty function that i shoudln't have written. * It returns a string that, when eval'd, results in the given map. I * think the server has this feature already, but I need it now. * Properties in the excludeKeys list are excluded from the resulting * string. * * Only a subset of javascript types are supported. TODO: Replace * with the server's better implementation. **/ function jsEncodeMap(map, excludeKeys) { var result = "{"; var first = true; for (var key in map) { var val = map[key]; if (val == null || excludeKeys && excludeKeys[key]) { continue; } else if (first) { first = false; } else { result += ","; } if (typeof val == 'number' && isFinite(val)) { result += "'" + jsEscape(key) + "': " + val; } else if (typeof val == 'boolean') { result += "'" + jsEscape(key) + "': " + val; } else if (typeof val == "string") { result += "'" + jsEscape(key) + "': \'"+jsEscape(val)+"\'"; } else if (val instanceof Array || typeof val == "array") { result += "'" + jsEscape(key) + "': " + jsEncodeArray(val); } else if (typeof val == "object") { result += "'" + jsEscape(key) + "': " + jsEncodeMap(val); } } result += "}"; return result; } /** * This is sort of a naughty function that i shoudln't have written. * It returns a string that, when eval'd, results in the given array. I * think the server has this feature already, but I need it now. * * Only a subset of javascript types are supported. TODO: Replace * with the server's better implementation. **/ function jsEncodeArray(list) { var result = "["; var first = true; for (var i in list) { var val = list[i]; if (first) { first = false; } else { result += ","; } if (val == null) { result += "null"; } else if (typeof val == 'number' && isFinite(val)) { result += val; } else if (typeof val == 'boolean') { result += val; } else if (typeof val == "string") { result += "\'"+jsEscape(val)+"\'"; } else if (typeof val == "object") { result += jsEncodeMap(val); } } result += "]"; return result; } /** * Returns an array of the keys in the given map. Ignores keys that * might be lying around in the map with null values. If the given * list is non-null, then the keys are appended to the list and the * given list is returned. **/ function getMapKeys(map, addToList) { var rv; if (addToList) { rv = addToList; } else { rv = []; } for (key in map) { if (map[key]) { rv.push(key); } } return rv; } /** * Acts exactly like jot.lib.search().items, except that if * forDescendants is specified, the search is done in javascript * instead of calling the server, to workaround a bug. TODO: Remove * this in 2.6. * * TODO: Not all features are implemented, use carefully. **/ function nodeSearch(searchParamsMap, appendToArray) { if (!searchParamsMap.forDescendants) { // Just fall back on the jot search var rv = jot.lib.search(searchParamsMap).items; return rv; } var applySort = false; var applyExplicitOrder = false; var applyLimit = false; if (!appendToArray) { // this is the outermost call, so we need to finalize the // array a little bit appendToArray = []; if (searchParamsMap.limit) { applyLimit = true; } if (searchParamsMap.order) { applySort = true; } if (searchParamsMap.explicitOrder) { applyExplicitOrder = true; } } // run the search var filteredChildren = jot.lib.search({ forChildren: searchParamsMap.forDescendants, filter: searchParamsMap.filter }).items; var allChildren = jot.lib.search({ forChildren: searchParamsMap.forDescendants }).items; for (var i in filteredChildren) { appendToArray.push(filteredChildren[i]); } for (var i in allChildren) { var node = allChildren[i]; nodeSearch({forDescendants: node.path, filter: searchParamsMap.filter}, appendToArray); } if (applyExplicitOrder) { msg("TODO: ExplicitOrder not currently implemented."); } else if (applySort) { var orderCriteria = searchParamsMap.order.split(","); var orderReverse = []; var orderPropList = []; for (var i in orderCriteria) { if (orderCriteria[i].match(/\-$/)) { orderReverse.push(true); orderCriteria[i] = orderCriteria[i].substring(0,orderCriteria[i].length-1); } else if (orderCriteria[0].match(/\+$/)) { orderReverse.push(false); orderCriteria[i] = orderCriteria[i].substring(0,orderCriteria[i].length-1); } else { orderReverse.push(false); } orderPropList.push(orderCriteria[i].split("/")); } appendToArray.sort(function(a,b) { for (var i in orderCriteria) { var valA = a; for (var j in orderPropList[i]) { valA = valA[orderPropList[i][j]]; if (valA == null) { break; } } var valB = b; for (var j in orderPropList[i]) { valB = valB[orderPropList[i][j]]; if (valB == null) { break; } } // now compare them... ungh. if (valA == null || valB == null) { if (valA == null && valB == null) { // both null, continue on secondary criteria } else if (valA == null) { return (orderReverse[i] ? 1 : -1); } else { return (orderReverse[i] ? -1 : 1); } } else if (valA.compareTo && valB.compareTo) { // this case will take care of dates if (orderReverse[i]) { return valB.compareTo(valA); } else { return valA.compareTo(valB); } } else if (valA < valB) { return (orderReverse[i] ? 1 : -1); } else if (valA != valB) { return (orderReverse[i] ? -1 : 1); } // continue on secondary criteria } // out of criteria and never found any comparison, so they're equal return 0; }); } if (applyLimit && appendToArray.length > searchParamsMap.limit) { appendToArray.splice(searchParamsMap.limit, appendToArray.length - searchParamsMap.limit); } return appendToArray; } /** * Adds an item to the given list, which is a delimited string. If * the list is currently empty, the item is returned, otherwise the * item is appended to the list with the given delimiter. **/ function appendDelimited(listString, item, delimiter) { if (listString == null || listString.length == 0) { return item; } else { return listString + delimiter + item; } } /** * Creates and returns an ID that is unique in the page. **/ function getUniqueId() { // generate an ID to use that is unlikely to collide ++SharedUtilsNextWidgetId; return "SharedUtilsWidget_" + SharedUtilsNextWidgetId + "_" + (jot.lib.date.now().doubleValue()); } /** * Takes a wiki word and returns spaces between the wikiwords **/ function friendlyWikiWord(pageName){ if(!pageName){ nameArray = jot.util.wikiwords(pageName); if(nameArray.length == 1){ return ''; nameArray; } else if(pageName.length <= 2){ return pageName; } else { var lower fn = pageName.toLowerCase(); var fww nameArray[0]; for (i=1;i<nameArray.length-1;i++){ fn = pageName[0]; var digit fn +" "+nameArray[i]; } fn = /\d/; var nonDigit = /\D/; var word = /\w/; for(var i=1;i<pageName.length;i++){ //jot.out.write(pageName[i]+' digit? '+digit.test(pageName[i])+' and '); //jot.out.write(pageName[i-1]+' word? '+word.test(pageName[i-1])+'<br />'); //if((pageName[i]==lower[i]) || (pageName[i]!=lower[i] && pageName[i-1]!=lower[i-1])){ if(pageName[i]!=lower[i] && pageName[i-1]==lower[i-1]){ fww+=' '+pageName[i]; } else if((digit.test(pageName[i]) && nonDigit.test(pageName[i-1]) && word.test(pageName[i-1]))){ // split up number blocks fww+=' '+pageName[i]; } else { fww+=pageName[i]; } } fn+" "+nameArray[nameArray.length-1]; return fww; fn; } } function breadcrumbNoWikiHome(pagePath, altRoot) { return breadcrumbNoWikiHome(pagePath,altRoot,""); } /** * Takes the page path and produces the breadcrumb path w/o * WikiHome. If you pass * an altRoot it won't return that root if you * are on that page. The breadcrumbs are * in a friendly wiki word * format **/ function breadcrumbNoWikiHome(pagePath, altRoot, altTitle) { breadcrumbNoWikiHome(p,altRoot){ // just in case if(!pagePath if(!p || pagePath p == "") { ""){ return ""; } "";} var pathArray = pagePath.split('/'); p.split('/'); var breadcrumb = ""; var currPath = "/"; for (var i=0; i < pathArray.length; i++) { if (pathArray[i] i=0;i<pathArray.length;i++){ if(pathArray[i] && pathArray[i] != "" && pathArray[i] != "WikiHome") { if (i < pathArray.length - 1) { "WikiHome"){ if(i<pathArray.length-1){ currPath = currPath + pathArray[i] + "/"; breadcrumb += = breadcrumb + "<a href=\"" + jot.lib.util.webspaceURL(currPath) + "\">" + friendlyWikiWord(pathArray[i]) + "</a> href=\""+currPath+"\">"+friendlyWikiWord(pathArray[i])+"</a> &gt; "; //breadcrumb = breadcrumb + "[["+currPath+"]["+pathArray[i]+"] > "; } else { if(altTitle){ breadcrumb += altTitle; } else { = breadcrumb += + friendlyWikiWord(pathArray[i]); } } } } if(breadcrumb == friendlyWikiWord(altRoot)) { friendlyWikiWord(altRoot)){ // we are at the alt root, no path return ""; } else { return breadcrumb; } } /** * parses a comma sep list and returns an array, stips whitespace **/ function arrayFromList(commaSep){ var cleanArray = new Array(); if(commaSep){ var pageArray = new Array(); var pageArray = commaSep.split(","); for(var i=0;i<pageArray.length;i++){ // only doing this because the javascript engine is choking on the replace...special place in hell for // those that invented loosly typed languages var str = pageArray[i]+""; var newstr = str.replace(/\s/g,''); cleanArray.push(newstr); } return cleanArray; } } //
Page:SharedPopupDialogCode.js
Revision:2
Last edited:04/07/2006 09:18AM (04/07/2006)
Edited by:admin

Page:SharedPageCommentsDialog
Revision:2
Last edited:04/07/2006 09:18AM (04/07/2006)
Edited by:admin

var SharedPageCommentsDialog_included = "true";
Page:SharedLoaderTableTile
Revision:2
Last edited:04/07/2006 09:18AM (04/07/2006)
Edited by:admin

// /** * This page creates a lazily loaded table. The rows (not the * columns, currently--- sorry) are lazily loaded into the table based * on screen visibility. * * @param tableId a unique ID for the table. All needed HTML sub-IDs * will be prepended with this ID, and it will also be needed later * when making updates to the table. * * @param setupPath a page that runs once for the table. It is passed * the "args.tileParams" map, which includes an item "rowIds", which * is an empty list. This page is expected to append items to the * rowIds list. Each of these items will be interpreted as the unique * ID of a row; it will be passed to the row page for formatting, when * needed. Note that even when the table is marked as lazy, this page * still runs once. * * @param rowPath a page that runs once for each row to be displayed * in the table (or when it needs to be displayed, if lazy is set.) * This page will have access to the normal tileParams map, and in * addition the variable "args.tileParams.rowId" will be set, and * should be construed as the ID for this row. Based on this, the row * page should write out a list of TDs that represent the row. This * page should assume that the TR already exists. * * @param tileLazy indicates that the rows of the table should not be * initially rendered. When this is true, the rows of the table will * only be rendered when the browser sends a request for them. * * @param tileParams the parameters to this table. The table setup * page will see these in its "args.tileParams" map, and in addition * each row will see these. * * @param tileEvents: A list of events that impact the structure of * the table. If this is not specified, then it is assumed that this * table's structure should be refreshed whenever anything on the page * changes. * * @param tableClass the CSS class to use for the table **/ var tableId = args.tableId; var setupPath = args.setupPath; var rowPath = args.rowPath; // The styling to use on the table var tableClass = ""; if (args.tableClass) { tableClass = args.tableClass; } // The structure change events for this table var tableDeps = ["*"]; if (args.tileEvents) { // process the user's event parameter, and do some nice tricks to // pick up their changes as JavaScript even if they didn't pass a // map. if (typeof(args.tileEvents) == "string") { if (args.tileEvents.indexOf("[") == 0 && args.tileEvents.lastIndexOf("]") == args.tileEvents.length-1) { // this is probably a JavaScript array, so just eval it tableDeps = eval("("+args.tileEvents+")"); } else { // assume this is a comma-delimited list tableDeps = args.tileEvents.split(","); } } else { tableDeps = args.tileEvents; } } // set up the parameters for this table tile var tileParams = {}; if (args.tileParams) { if (typeof(args.tileParams) == "string") { args.tileParams = eval("("+args.tileParams+")"); } // copy these in so that they're modifyable to the callee page for (var key in args.tileParams) { tileParams[key] = args.tileParams[key]; } } // allow lazy loading var isLazy = "true"; if (!args.tileLazy || args.tileLazy != "true") { isLazy = "false"; } function makeEventList(eventMap) { var rowEventsList = []; for (var i in tileParams.rowIds) { var eList = tileParams.rowEvents[tileParams.rowIds[i]]; if (eList) { rowEventsList.push(eList); } else { rowEventsList.push(["*"]); } } return rowEventsList; } // write out the table, and fetch all of the rows tileParams.tableId = tableId; tileParams.rowIds = []; tileParams.rowEvents = {}; tileParams.rowClasses = {}; var rowIdsMap = {}; var includeParams = {path: setupPath, tileParams: tileParams}; jot.lib.include(includeParams); var jsHandlerURL = jsEscape(jot.lib.util.makeURL("wiki:"+SharedRoot+"/Utils/Loader/SharedLoaderHandler")) + "?theme="+SharedRoot+"/Themes/AjaxData/"; var jsCursorURL = jsEscape(jot.lib.util.makeURL("wiki:"+SharedRoot+"/Utils/Loader/SharedLoaderSpinCursor.gif")); var jsTableId = jsEscape(tableId); var jsTableDeps = jsEncodeArray(tableDeps); var jsSetupPath = jsEscape(setupPath); var jsRowPath = jsEscape(rowPath); var jsTileParams = jsEncodeMap(tileParams, {rowIds:1,rowId:1,rowClasses:1,rowEvents:1}); var jsRowIds = jsEncodeArray(tileParams.rowIds); var jsRowEvents = jsEncodeArray(makeEventList(tileParams.rowEvents)); // Unfortunately, from here I need to drop out of script mode so that // the XML parsing boundaries won't be wacky. TODO: File this, // DEFINITELY a bug. // // tileParams.rowId = rowId; if (rowIdsMap[tileParams.rowId]) { jot.out.write("ERROR: DUPLICATE ROW ID DETECTED"); msg("ERROR: DUPLICATE ROW ID DETECTED. ABORTING."); } rowIdsMap[tileParams.rowId] = 1; var rowClass = ""; if (tileParams.rowClasses[tileParams.rowId]) { rowClass = tileParams.rowClasses[tileParams.rowId]; } //
...
Page:AjaxData
Revision:2
Last edited:04/07/2006 09:18AM (04/07/2006)
Edited by:admin