W3C home > Mailing lists > Public > whatwg@whatwg.org > December 2013

Re: [whatwg] Comments on <dialog>

From: Matt Falkenhagen <falken@chromium.org>
Date: Tue, 17 Dec 2013 15:15:25 +0900
Message-ID: <CAJ_xCimEQKk_y1osA1Lm_v2CzkRZdD80T25Q2MubN9G0xFHTpg@mail.gmail.com>
To: Ian Hickson <ian@hixie.ch>
Cc: WHATWG <whatwg@lists.whatwg.org>, Ojan Vafai <ojan@chromium.org>
On Fri, Sep 27, 2013 at 7:15 AM, Ian Hickson <ian@hixie.ch> wrote:
>
> On Mon, 26 Aug 2013, Ojan Vafai wrote:
> >
> > IMO, showModalDialog is the legacy broken API we're stuck with. Better
> > to name the new thing in a way that's self-consistent and consistent
> > with everything else (i.e. openModal).
>
> I started doing this, since several people have asked about this and it
> seems the consistency between showModalDialog()/close() seems less
> interesting to people than the consistency with "open" everywhere else.
> However, it turns out this would make the show() method clash with the
> "open" IDL attribute on <dialog>, which we want since it matches the name
> of the open="" content attribute which matches <details open>.
>
> Note that window.open() and document.open() don't really do the same as
> this method does, either. window.open() creates a new Window, or navigates
> and existing one; document.open() resets the document. dialog.show() just
> changes the dialog to be visible.
>
> Also, there's an interesting mix in other APIs. (Disclaimer: I don't know
> many of these APIs personally, so I may be misinterpreting their
> documentation wildly. I basically looked for terms like "open" and "close"
> in the docs and tried to see what the right methods were in each case. I
> only included methods for modal dialogs if there was a trivial method;
> many APIs have to be configured to make dialogs modals separately.)
>
>  Android uses show() and dismiss()
>  Closure uses setVisible()
>  Cocoa uses makeKeyAndOrderFront:, orderOut:, close, and performClose:.
>  Delphi uses Show(), ShowModal(), Hide(), and Close().
>  Ext JS uses show(), hide(), and close().
>  jQuery uses "open" and "close".
>  Gtk uses gtk_widget_show(), gtk_dialog_run(), gtk_window_close().

Gtk also has gtk_widget_hide(), see [0]

>  .NET uses Show(), ShowDialog(), Hide(), and Close().
>  Win32 uses ShowWindow() and CloseWindow().
>  X11 uses XMapWindow() and XUnmapWindow()
>
> Most of the APIs I looked at use "close". Most use "show". So I think
> we're in ok company here.

Sorry to add feedback so late. Whenever there's a post/tweet about
Chrome's <dialog>, the most common complaint from devs seems to be this
show/close naming.

I think with any naming choice there will be an inconsistency somewhere
in the whole platform API. For example, show/hide is a little weird since
dialog.hide() is different from dialog.hidden = true. But show/close are
immediately inconsistent with themselves which gives people an adverse
reaction.

I think I'd prefer, in order:
1) open()/openModal()/close() and "opened" attribute
2) show()/showModal()/hide() and "open"
3) show()/showModal()/close() and "open"

1) is nice because it's internally consistent. The downside is that
dialog.opened is inconsistent with details.open.

In the list of existing APIs above, only Win32 has only show/close. Of APIs
that have all of show/hide/close, it looks like close does something like
dispose of the object/free its memory so it can't be shown again (e.g., see
[1][2][3]) So show/hide for <dialog> seems more consistent than
show/close with these APIs.

Some additional data points:
- QT uses show(), hide(), close(), done() (close/done delete the dialog) [4]
- Dojo uses show(), hide() [5]
- Java AWT uses setVisible() (show() and hide() are deprecated, also
there is a dispose()) [6]
- Blackberry uses show(), close() [7]
- Xt uses XtPopup(), XtPopdown() [8]
- wxWindows uses Show(bool), ShowModal(), EndModal(), Close() [9]
- YUI uses show(), hide() [10]
- Bootstrap uses show(), hide() [11]
- GWT uses show(), hide() [12]

It seems existing JS frameworks mostly use show/hide, maybe because they
predate element.hidden.

[0] https://developer.gnome.org/gtk3/stable/GtkWidget.html
[1] http://www.objis.com/formationextjs/lib/extjs-4.0.0/docs/api/Ext.window.MessageBox.html
[2] http://stackoverflow.com/questions/2075405/how-to-close-non-modal-form-in-delphi
[3] http://www.dummies.com/how-to/content/opening-closing-and-hiding-forms-with-visual-basic.html
[4] http://qt-project.org/doc/qt-4.8/qwidget.html#close
[5] http://dojotoolkit.org/api/?qs=1.9/dijit/Dialog
[6] http://docs.oracle.com/javase/6/docs/api/java/awt/Dialog.html
[7] http://www.blackberry.com/developers/docs/5.0.0api/net/rim/device/api/ui/component/Dialog.html
[8] http://www.unix.com/man-page/all/3x/XtPopup/
[9] http://docs.wxwidgets.org/stable/classwx_dialog.html
[10] http://yuilibrary.com/yui/docs/api/classes/Panel.html
[11] http://getbootstrap.com/javascript/#modals
[12] http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/client/ui/DialogBox.html
Received on Tuesday, 17 December 2013 06:16:22 UTC

This archive was generated by hypermail 2.4.0 : Wednesday, 22 January 2020 17:00:14 UTC