W3C home > Mailing lists > Public > public-webapps@w3.org > April to June 2012

Re: Clipboard API spec should specify beforecopy, beforecut, and beforepaste events

From: Ryosuke Niwa <rniwa@webkit.org>
Date: Wed, 2 May 2012 10:07:05 -0700
Message-ID: <CABNRm60xrRhFnzgjr7vd31wSSvj6VEa15HJxENCmL17VjmEgAA@mail.gmail.com>
To: Bronislav Klučka <Bronislav.Klucka@bauglir.com>
Cc: public-webapps@w3.org
On Wed, May 2, 2012 at 9:44 AM, Bronislav Klučka <
Bronislav.Klucka@bauglir.com> wrote:
>
>  On 2.5.2012 18:15, Ryosuke Niwa wrote:
>
> On Wed, May 2, 2012 at 8:55 AM, Bronislav Klučka <
> Bronislav.Klucka@bauglir.com> wrote:
>
>> Bear with me...
>> Delphi (Object Pascal) Visual Component Library has concept of Actions,
>> some Actions can be assigned to Controls (those would be here
>> menu/contextmenu items of the browser, would be great to be able to assign
>> such Action (or some inherited object) to my own <button>), one Action can
>> be assigned to unlimited number of controls. Action has 2 important
>> methods/events (either overriding the method or listening to the event
>> default method triggers). First one is Execute, that is called, when
>> Control default activation happens (click/enter on button, click on menu
>> item), which helps to utilize functionality for several controls in one
>> place (essentially one event handler function, we can do that of course in
>> JS..)
>> The important thing is, Action also has Update method (OnUpdate event),
>> that is called every time application gets to idle state (application
>> receive message (system message like click, paint, keydown, whatever),
>> application processes this message and any subsequent messages if any new
>> are in the queue and goes to idle). And in that idle state application goes
>> through all the Actions in the application and calls Update method and then
>> the Action can decide, whether is enabled or not. And all Controls with
>> this Action assigned would change this property as well
>>
>>  I could express it in JS as
>> var deleteUserAction = new Action();
>>
>> deleteUserAction.addEventHandler('execute', function()
>> {
>>  //some code to delete all selected users
>> });
>>
>> deleteUserAction.addEventHandler('update', function()
>> {
>>  this.enabled = (myList.selectedUsers.length > 1) &&
>> havingRightsToDeleteUsers;
>> });
>> mainMenuItemDelete.action = deleteUserAction;
>> contextMenuItemDelete.action = deleteUserAction;
>> toolbarButtonDelete.action = deleteUserAction;
>>
>> So the update handler allows you not to care about how many controls
>> should you disable/enable, just assign this action to any control, in this
>> action handler set up enabled to this action and all controls are updated.
>> So except the assignment of Action to Control, no additional work needed.
>> And the concept of calling the update method guarantees, the UI is up to
>> date (user is doing something, messages are queued and processed, the
>> second there is time, all actions are updated). Since it is in idle state,
>> programmer does not have to care when and how to set up all controls.
>> Action also has e.g. caption, image, etc. when updated again, all
>> assigned controls are updated to have the same caption, image, etc...
>>
>> I'm currently trying to implement this in my web application (would be
>> handy to have idle event), because it would simplify UI management on
>> programmers level, but something like this could help to update browser's
>> UI as well.
>>
>
>  This is why I've suggested to tie command elements to execCommand in
> http://lists.w3.org/Archives/Public/public-webapps/2011OctDec/1232.htmlto be used as a state machine.
>
> Basically yes... self updatable state machine (that "self" part is
> extremely important to me), but if doing so, it would be great not to bing
> it some specific feature (Editing API, browser UI), but make it more
> generic = usable.
>

But scripts can already do that if they don't need / want to communicate
any intents with the browser; e.g. you're implementing it for your web app.

- Ryosuke
Received on Wednesday, 2 May 2012 17:07:59 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 18:49:52 GMT