577
edits
| Dandonkulous (talk | contribs) | No edit summary | ||
| Line 14: | Line 14: | ||
| /** | /** | ||
| Creates a new simple feature, whose properties are that it has a small 32x32 | Creates a new simple feature, whose properties are that it has a small 32x32 | ||
| pixel display, as well as a larger display  | pixel display, as well as a larger display that defaults to 350px by 450px. | ||
| @constructor | @constructor | ||
| @param options {object} | @param options {object} | ||
|    @prop  |    @prop content {uri|html|xml|window} | ||
|          This is the small view of the feature. |          This is the small view of the feature. | ||
|          uri: A link to the URL of either an icon, or a webpage |          uri: A link to the URL of either an icon, or a webpage | ||
|          html: A html string that will be shown in the small view |          html: A html string that will be shown in the small view | ||
|          xml: E4X version of the above |          xml: E4X version of the above | ||
|    @prop [ |         window: a reference to a DOM window object | ||
|    @prop [panel] {uri|html|xml|window|panel} | |||
|          See above descriptions. |          See above descriptions. | ||
|    @prop [ |         panel: A reference to a panel object | ||
|         If a panel is specified then the default action is that a  | |||
|         click on the content area opens the panel. If you wish  | |||
|         to over-ride this behavior you do it in the standard way: | |||
|         by creating a new widget.onClick that returns false, or | |||
|         calls event.preventDefault(). | |||
|    @prop [on*] {function} | |||
|          You can optionally place event handlers in the constructor. | |||
| **/ | **/ | ||
| widget = require("basic-widget").Widget(options); | |||
| // Using the convention that constructors can optionall | |||
| // take new or not. | |||
| /** | /** | ||
| Event handlers | Event handlers | ||
| @method | @method | ||
| @param callback {function} | @param callback {function} | ||
| Potential to be all standard events. But for now: click, mouseover, mouseout | |||
| **/ | **/ | ||
| widget.on*( callback ) //f.e., widget.onClick() | |||
| /** | /** | ||
| Remove event handlers. Without any arguments, all bound events are removed. | Remove event handlers. Without any arguments, all bound events are removed. | ||
| If the function that was passed to bind is provided, only that specific event handler is removed. | |||
| @method | |||
| passed to bind is provided  | @param [callback] {function} | ||
| handler is removed. | **/ | ||
| widget.on*.unbind( [callback] ) | |||
| /** | |||
| Enumerates all event handlers of the type specified, returning | |||
| a list of event handlers. | |||
| @method | |||
| **/ | |||
| widget.on*.list( ) | |||
| /** | |||
| Removes the widget from the interface. | |||
| @method | @method | ||
| **/ | **/ | ||
| widget.destory() | |||
| /** | /** | ||
| @prop [ | @prop [content] {canvas|window} | ||
|        If there was a image passed into the constructor this will  |        If there was a image passed into the constructor this will be a canvas | ||
|        you can draw on. It updates the displayed icon in real time. If there |        you can draw on. It updates the displayed icon in real time. If there | ||
|        was a page, then this is a window element. |        was a page, then this is a window element. | ||
| @prop [ | @prop [panel] {panel} | ||
|        A  |        A reference to the panel object. | ||
| **/ | **/ | ||
| feature.property | feature.property | ||
| Line 67: | Line 83: | ||
| === Notes === | === Notes === | ||
| * Do we  | * Do we want a <code>widget.listEventsHandlers()</code>? | ||
| === Key Issues === | === Key Issues === | ||
| * What are the conditions that we should impose on add-ons being included in this UI element. | * What are the conditions that we should impose on add-ons being included in this UI element. | ||
| * The code <tt>new require("simple-feature").Feature(options)</tt> is actually wrong due to the way the <tt>new</tt> operator works, which would, this code, regard <tt>require</tt> as a constructor. The correct code would be <tt>new (require("simple-feature")).Feature(options)</tt>. | * Need to figure out ContentFrames. | ||
| * The code <tt>new require("simple-feature").Feature(options)</tt> is actually wrong due to the way the <tt>new</tt> operator works, which would, this code, regard <tt>require</tt> as a constructor. The correct code would be <tt>new (require("simple-feature")).Feature(options)</tt>. '''Then let's simplify to | |||
| <tt>require("basic-widget").Widget(options)</tt> without the new, using the | |||
| auto-constructor pattern.''' | |||
| === Dependencies & Requirements === | === Dependencies & Requirements === | ||
| * [[Labs/Jetpack/Reboot/JEP/103|JEP 103 - Panel]] | * [[Labs/Jetpack/Reboot/JEP/103|JEP 103 - Panel]] | ||
| * ContentFrame | |||
| * Update-allowable implementation of "icon" - may share similar implementation of content area with Panel and other JEPs | * Update-allowable implementation of "icon" - may share similar implementation of content area with Panel and other JEPs | ||
| === Use Cases === | === Use Cases === | ||
| * Create a email notifier that shows you a small view that has the latest count/sparkline of emails yet to be read, and when you click on it it shows the detailed information about those unread messages. | * Create a email notifier that shows you a small view that has the latest count/sparkline of emails yet to be read, and when you click on it it shows the detailed information about those unread messages. | ||
| * A clock, which has no detail view,  | * A clock, which has no detail view. Similarly, an x-eyes reimplementation (the eyes follow your cursor around). | ||
| * A Stumble Upon-style interface, where the small view allows you to upvote/downvote a page, and when a triangle is clicked shows a detailed view of ratings of this page. | * A Stumble Upon-style interface, where the small view allows you to upvote/downvote a page, and when a triangle is clicked shows a detailed view of ratings of this page. | ||
| * Snow-globe, where when you click it causes the snow to swirl around the page you are looking at. Clicking a little gear opens a detailed view for setting the color and strength of the snow storm. (Like the previous case.) | * Snow-globe, where when you click it causes the snow to swirl around the page you are looking at. Clicking a little gear opens a detailed view for setting the color and strength of the snow storm. (Like the previous case.) | ||
| * An expanding search interface. It is displayed as a small search box. When you click in it, the search box expands in width with a quick animation. As you start typing, a panel appears which has search results listed in which you can arrow up/down, or mouse to. | |||
| === Examples === | |||
| <pre class="brush:js"> | |||
| function Snowglobe(win){ | |||
|   // ... | |||
| } | |||
| var globes = {}; | |||
| widget = require("basic-widget").Widget({ | |||
|   content: "snowglobe.png", | |||
|   onClick: function(){ | |||
|     tabs = require("tabs"); | |||
|     var win = tabs.focused.contentWindow; | |||
|     if( !globes[win] ) globes[win] = new Snowglobe(win); | |||
|     globes[win].shake(); | |||
|   } | |||
| }); | |||
| </pre> | |||
| <pre class="brush:js"> | |||
| widget = require("basic-widget").Widget({ | |||
|   content: "http://reddit.com/favicon", | |||
|   panel: "http://m.reddit.com" | |||
| }) | |||
| </pre> | |||
| <pre class="brush:js"> | |||
| widget = require("basic-widget").Widget({ | |||
|   content: "http://wikipedia.com/favicon", | |||
|   panel: "Loading..." | |||
| }) | |||
| widget.onClick(function(){ | |||
|   var sel = require("selection").text; | |||
|   var url = "http://wikipedia.com/search?q=" + sel; | |||
|   widget.panel.load(url); | |||
| }); | |||
| </pre> | |||
edits