<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.limesurvey.org/index.php?action=history&amp;feed=atom&amp;title=GSOC_Dashboard_Project_Development_Log</id>
	<title>GSOC Dashboard Project Development Log - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.limesurvey.org/index.php?action=history&amp;feed=atom&amp;title=GSOC_Dashboard_Project_Development_Log"/>
	<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=GSOC_Dashboard_Project_Development_Log&amp;action=history"/>
	<updated>2026-08-17T06:09:41Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=GSOC_Dashboard_Project_Development_Log&amp;diff=1422&amp;oldid=prev</id>
		<title>Macduy at 14:38, 17 August 2009</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=GSOC_Dashboard_Project_Development_Log&amp;diff=1422&amp;oldid=prev"/>
		<updated>2009-08-17T14:38:24Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
=-Widget Sharing=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. To share, click the &amp;quot;Hands&amp;quot; pictogram:&lt;br /&gt;
&lt;br /&gt;
[[File:share.png]]&lt;br /&gt;
&lt;br /&gt;
2. Fill in dimensions (prefilled by default for your convenience)&lt;br /&gt;
&lt;br /&gt;
[[File:ls-29071.jpg]]&lt;br /&gt;
&lt;br /&gt;
3. Wheeeeeyyy!&lt;br /&gt;
&lt;br /&gt;
[[File:ls-29072.jpg]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Screenshots=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;[[File:020809.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;From: 2th August 2009, r7404: Dashboard tabs, Widget Options, Better search, UI Cleanup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;[[File:ls-2907.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;From: 29th July 2009, r7364: &amp;#039;&amp;#039;&amp;#039; Grips, Drag&amp;#039;n&amp;#039;Drop, Beefed-up notifications&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=-Performance Review=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After Code Overhaul and jqGrid Data Prefetching, I&amp;#039;m proud to say that the Dashboard has great performance, loading fast almost independently of the number of widgets and out-performing the original static Admin Dashboard by miles, even when displaying 3x as many&lt;br /&gt;
&lt;br /&gt;
widgets.&lt;br /&gt;
&lt;br /&gt;
[[File:lsdb-perf2.png]]&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
*&amp;#039;&amp;#039;All tests used 4 jqGrid-enabled widgets per dashboard. CakePHP caching is disabled&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;All measurements are rough and made on my machine at different times. Account for cca 1-2 second uncertainty&amp;#039;&amp;#039;:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Total Requests&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;: number of requests made to the server, i.e. initial page request + ajax requests&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Total Wait Time&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;: amount of time between pressing &amp;#039;Enter&amp;#039; in browser and having a fully functional dashboard (all controls active, all jqGrids loaded)&lt;br /&gt;
&lt;br /&gt;
==Benchmark==&lt;br /&gt;
&lt;br /&gt;
http://spreadsheets.google.com/pub?ke&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;#039;color:#FF0000&amp;#039;&amp;gt;Without Prefetching (estimated wait time)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;#039;color:#0000FF&amp;#039;&amp;gt;With Prefetching (Total Request time as measured by DebugKit)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
*[https://www.ohloh.net/accounts/macduy/messages/timeline Timeline view]&lt;br /&gt;
&lt;br /&gt;
=Diary=&lt;br /&gt;
&lt;br /&gt;
====-May 14th - 17th====&lt;br /&gt;
*Finished proposal&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Experiment&amp;#039;&amp;#039;&amp;#039;: Execute a script from an inline script tag placed in a file, which is fetched through ajax - &amp;lt;span style=&amp;#039;color:#00FF00&amp;#039;&amp;gt;success&amp;lt;/span&amp;gt;&lt;br /&gt;
**&amp;#039;&amp;#039;it is important that this works&amp;#039;&amp;#039;: This keeps scripts small, modular, relevant in context, coherent in their tasks and they are only loaded when needed.&lt;br /&gt;
**e.g.: &amp;#039;&amp;#039;In a page, a small central script detects if a dashboard is to be displayed - if so, it does a ajax-request for the &amp;#039;dashboard&amp;#039; loader page, which contains an inline script loading the needed scripts. The parent page does not need to load or even know anything about these &amp;#039;dashboard&amp;#039; scripts.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
====-May 18th - 24th====&lt;br /&gt;
*Using above mechanism, a sample dashboard has been dynamically loaded into the &amp;#039;Workbench&amp;#039; (previously &amp;#039;Dashboard&amp;#039;) page.&lt;br /&gt;
*HTML/CSS Reconstruction of the test widget&lt;br /&gt;
*Chained widget loading (normal page -&amp;gt; loads dashboard -&amp;gt; loads widgets)&lt;br /&gt;
*Widget implementation: widget as plugin controllers (access via &amp;#039;&amp;#039;/widgets/widget_type/action/parameter(s)&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
====-May 25th - 31th====&lt;br /&gt;
*top-level navigation, content switching with smooth transitions&lt;br /&gt;
*OO implementation of Widgets in JS&lt;br /&gt;
*Simple dashboard edit mode: Widget dragging.&lt;br /&gt;
*Two-column layout; widgets can be moved inside and between them&lt;br /&gt;
*Widgets remember position&lt;br /&gt;
&lt;br /&gt;
====-June 1st - 7th====&lt;br /&gt;
*Dashboard communication protocol (see picture above)&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Experiment&amp;#039;&amp;#039;&amp;#039;: Return widget content as XML, with content and script for execution - &amp;lt;span style=&amp;#039;color:#00FF00&amp;#039;&amp;gt;success&amp;lt;/span&amp;gt;&lt;br /&gt;
*Successfully implemented the Widget XML Format (see above)&lt;br /&gt;
**content as well as scripts can be passed&lt;br /&gt;
**script has default access to its widget only&lt;br /&gt;
**scripts can be triggered at specified events, e.g. onload, onupdate...&lt;br /&gt;
*Re-integrating jqGrid:&lt;br /&gt;
**new method allows only pure data to be passed to jqGrid, with the widget creating the remaining markup and jtooltips dynamically&lt;br /&gt;
&lt;br /&gt;
====-June 29th - July 5th====&lt;br /&gt;
*Dashboard XML&lt;br /&gt;
*Merge of &amp;#039;&amp;#039;&amp;#039;boot.js&amp;#039;&amp;#039;&amp;#039; into &amp;#039;&amp;#039;&amp;#039;dashboard.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Context sensitive dashboard (parametrized dashboards)&lt;br /&gt;
** Survey Summary widget for the Survey Dashboard&lt;br /&gt;
*Add Widget dialog, process streamlined with the Dashboard Edit mode.&lt;br /&gt;
*jqGrid automation (implemented as Dashboard &amp;#039;extension&amp;#039;)&lt;br /&gt;
*jqGrid additions:&lt;br /&gt;
**Quicksearch&lt;br /&gt;
**Click-Drag selectors + Selection Presets&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Widgets:&amp;#039;&amp;#039;&amp;#039; Users, Surveys, Announcements&lt;br /&gt;
&lt;br /&gt;
====-June 6th - July 12th====&lt;br /&gt;
*Dashboard ownership and security&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Light GUI Skin&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
**Widgets now draggable by default&lt;br /&gt;
**Fluid witdh and height&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Widgets&amp;#039;&amp;#039;&amp;#039;: Announcements, Assignments, Assignment groups&lt;br /&gt;
*All widgets now support interactive deletion (i.e. displays a confirmation dialog)&lt;br /&gt;
&lt;br /&gt;
====-July 13th - July 19th====&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Code Overhaul&amp;#039;&amp;#039;&amp;#039; - consolidated all widgets into a single controller (Dashboard), leading to a performance improvement&lt;br /&gt;
**Previously, initial loading of a dashboard required (1 + number of widgets) ajax requests.&lt;br /&gt;
**Now, only 1 intial request is made per dashboard, regardless of the number of widgets present&lt;br /&gt;
*Default dashboard now available at http://server/dashboard&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;jqGrid Data Prefetch&amp;#039;&amp;#039;&amp;#039; - jqGrid-enabled widgets now prefetch the table data, thus using &amp;lt;span style=&amp;#039;color:#FF0000&amp;#039;&amp;gt;only 1 request at the start!&amp;lt;/span&amp;gt;&lt;br /&gt;
**Massive performance improvement, means a dashboard with 20 jqGrid-enabled widgets loads almost as fast as one with only few (&amp;#039;&amp;#039;depending on server power&amp;#039;&amp;#039;)&lt;br /&gt;
**&amp;#039;&amp;#039;For comparison, see the Performance Review section above&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
====July 20th - July 26th====&lt;br /&gt;
*Standalone dashboards - ground work for cross-site widget and dashboard sharing&lt;br /&gt;
**&amp;#039;&amp;#039;Has few bugs, needs fixing&amp;#039;&amp;#039;&lt;br /&gt;
*simple Growl-like notifications &amp;#039;&amp;#039;(using blockUI)&amp;#039;&amp;#039;&lt;br /&gt;
*Ajax-based CSV User import&lt;br /&gt;
*jqGrid Draggables&lt;br /&gt;
**e.g. moving users to a different security group using drag-and-drop&lt;br /&gt;
*[Widgets Design Document], [UI Meeting 7 (25th July)]&lt;br /&gt;
&lt;br /&gt;
====July 27th - August 2nd====&lt;br /&gt;
*Dashboard initial auto-setup&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Widget Sharing:&amp;#039;&amp;#039;&amp;#039; click on the &amp;quot;Hands&amp;quot; pictogram (first icon) on the Widget header to display the &amp;quot;Share Widget&amp;quot; dialog&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Widget Secondary Options/Secondary Navigation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dashboard Snapshot:&amp;#039;&amp;#039;&amp;#039; Single-click saving of widget options and preferences&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dashboard Tabs:&amp;#039;&amp;#039;&amp;#039; in-page tabs, complete with Back/Forward browser navigation + Undo close tab feature&lt;br /&gt;
*jqGrid Quicksearch: further improvements on the custom simplified search interface for jqGrids.&lt;br /&gt;
&lt;br /&gt;
====August 3rd - August 9th====&lt;br /&gt;
*Bug fixing&lt;br /&gt;
&lt;br /&gt;
====August 10th - August 16th====&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Response Viewer: &amp;#039;&amp;#039;(Side-project)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; App for viewing and managing responses.&lt;br /&gt;
&lt;br /&gt;
[[File:ls-1708.jpg]]&lt;/div&gt;</summary>
		<author><name>Macduy</name></author>
	</entry>
</feed>