OtterBrowser / otter-browser

Otter Browser aims to recreate the best aspects of the classic Opera (12.x) UI using Qt5
https://otter-browser.org
GNU General Public License v3.0
1.83k stars 277 forks source link

Start page (speed dial) #125

Closed szcsaba closed 9 years ago

szcsaba commented 10 years ago

Hi Emdek! :-) I'm glad I've found this project. Many thanks for developing Otter!

Please consider the latter suggestion: I know that the feedreader, notes have lower priority but at that time, could you add the tile support for them in the speed dial/start page? I mean, it would be useful to have note tiles, rss-article tiles, mail message tiles or even session tiles. And the folder tile is a good idea from Blink Opera.

Emdek commented 10 years ago

Folders will be available for sure, I'm not sure about other suggestions, these would require additional methods to be exposed for scripting (start page will be HTML based, with access to data from browser through scripting).

szcsaba commented 10 years ago

I will stay tuned, thank you.

lollox commented 10 years ago

speaking of Start Page here is it some thoughts:

  1. Responsive design with option to choose max number of items in a row (but only as an option... 0 should remove any limit)
  2. A simple slider to choose the zoom level (dimensions) of dials, no chaotic options like in new ChrOpera (Big thumbnails option, and then even width and heigth dimensions in pixel? ... why? O_o )
  3. Store (reasonable) SMALL pictures of dials, not big ones like in ChrOpera... I can ensure everyone that on old systems big pictures on SD slow down the browser like hell
  4. Obviously sync option and, if possible, it will be really good if even the thumbnails should be synchronized (so, for example, when you make a new install of the browser you can simply enter your Sync credential and your entire Speed dial will be downloaded in few seconds (small pictures, remember? :P ) instead of slow down your entire network while all sites are accessed in the same time to create snapshots) <---- this is very important IMHO .... hope to see it :)
  5. I read about your intention for folders support. Good... but, only if possible and if this doesn't bloat too much the code (I think that responsiveness and speed is the main goal of SD), would be really nice having support even for groups (I mean like the 3 buttons (Speed Dial, Stash, Discover) in ChrOpera that switch from a view to another) ... in this way organizing all dials could be very easy (for example "work", "home" etc...)

That is all... I know that it's a bit early for these stuff (sync thing above all) but I wanted only pointing out how SD could be done to be more productive ;)

Thanks in advance :)

Emdek commented 10 years ago

@lollox, synchronization is a separate issue, it will come at later stage.

As mentioned elsewhere start page will be simply some HTML and CSS, with access to special APIs (available only for this address) that will allow to list bookmarks, get thumbnails etc. It will be easy (HTML, CSS and JavaScript knowledge being only requirements) to create own version and replace it in profile directory.

lollox commented 10 years ago

Thanks for the reply:)

I like the modular structure you built Otter ;) ... I will look into it when available (and hope being able to give some help on this)

Katarn commented 10 years ago

Discussion is started a here: #155.

No need for AJAX, it is possible to expose C++ objects to JavaScript context, it is matter of defining needed APIs. I don't think that parsing HTML is really required, simple onload should be enough, page will be shown instantly anyway.

Pre-rendering in HTML exactly need on other pages, such as the About page will need to display information about the system. Text strings in different languages is also desirable pre-render in HTML before load in WebView. Something like this:

<div class="configure" title="{{ lang.configure }}"></div>

(This is Configure Speed Dial button.)

I studied the work of Speed Dial extensions in Chrome, all of them did not suit me speed display pages. In Opera it was instant. In Chrome - with an annoying delay. I think that speed - a distinctive feature of the Opera and we needs to pay close attention.

Onload, of course, be used, but only for internal initialization and placement of elements in the desired position at the start.

Can you tell us how the expose C++ objects in the JS?

It should be doable, as API. But I'm not sure if fully custom menus are really required, it should be enough to have special ones handled by browser, using identifiers and classes to mark "special areas" (like speed dial tiles).

By "custom context menu" I meant hardcoded, but not default context menu for usual page. Need menu with "Edit", "Delete", "Update" items as in Opera.

Example of what is done at the moment: http://rghost.ru/52257661. Still need to alter the elements location starts from the center of the page to edges. But it is already very similar to the Opera, to which I am particularly strive.

Emdek commented 10 years ago

@Katarn, only testing will tell if onload will be sufficient. ;-)

Can you tell us how the expose C++ objects in the JS?

All what you need could be found in documentation of this method: QWebFrame::addToJavaScriptWindowObject().

Personally I would try to make it as much as possible independent from browser, start with basic APIs - read and write settings, read and write bookmarks (maybe speed dial entries could be simply some subdirectory of bookmarks?), get thumbnails, request thumbnail reload. It should be enough to define configuration dialogs as HTML pop-ups, apparently Opera does it that way.

If you want some examples then you can take a look at my another project which relies on such APIs, this object is exposed to QtWebKit: https://github.com/Emdek/plasmoid-adjustable-clock/blob/master/applet/Clock.h It uses some JS methods too: https://github.com/Emdek/plasmoid-adjustable-clock/blob/master/applet/data/helper.js It's exposed as Clock JS object and used for exmaple here: https://github.com/Emdek/plasmoid-adjustable-clock/blob/master/applet/themes/binary/contents/ui/main.html

szcsaba commented 10 years ago

+1 for speed dial groups and folders together

@Emdek :

(maybe speed dial entries could be simply some subdirectory of bookmarks?)

There was another way: how Opera managed the bookmarksbar. So similar to that, there could be an option in the bookmark (or folder) properties to show them in the Speed Dial. In this way the user could put bookmarks from any subfolder into the start page (so Speed Dial would be a tag).

Emdek commented 10 years ago

@szcsaba, it's worth considering, but downside is that their order had to be stored separately.

lollox commented 10 years ago

I was considering the same but I realized that it isn't a so much suitable solution since in that way the order and folders/groups (if available) position isn't easy to manage... to me store them in a secial folder of bookmarks (so even implementing the synchronization is easier) is the best way :)

Emdek commented 10 years ago

@lollox, order could be still managed, but only by drag and drop. ;-) But it would require separate storage.

Use of sub folder as source allows to handle it all in unified way and saves resources - only one bookmarks database, no need for special attributes, simpler UI etc. But it requires a bit different workflow, and habits are sometimes hard to change. ;-) In case of speed dial it would be still possible to reorder them on start page too.

But it should be decided ASAP, it's blocker for new bookmarks storage format (which itself is blocker for bookmarks import).

Katarn commented 10 years ago

I believe we should first implement the usual functional Opera and then expand it. Expand only, not change of the concept. Grouping of the items as in Firefox, free placement of elements (I only saw the screenshots as here: http://www.osp.ru/FileStorage/ARTICLE/Nir_PK/2011-04/05_11/13105408/Nir_PK_S19-5_(7026).jpg) - is the change of concept and I do not like this idea.

lollox commented 10 years ago

@Emdek, I'm not a programmer so I can only try to do some help with suggestions :P , however I think that storing Speed Dial entries in the bookmarks database lets you having less work to do... a special folder with the following structure of subfloders:

Level 1: Groups Level 2: Folders

What do you think?

PS obviously if someone use no groups (only the main one) than in the Speed dial page there will be no elements of this feature, while who use 2 or more groups will have "buttons" (or whatever) to switch through them

Emdek commented 10 years ago

Opera crashed in the middle of this reply, so it will be shorter in this version. ;-)

@Katarn, that is different story, https://github.com/Emdek/otter/issues/29. Important decisions has to be made before beta so some incompatible changes could be avoided in future. Also, being identical is not the main goal of project, if something could be done better, more flexible then we should do it that way, instead of simply copying old solutions. ;-)

@lollox, I don't want to introduce new terminology here, those are just folders and it's up to visualization layer to show it whatever it want. ;-) In case of default start page it should be very similar to that of classic Opera. Folders could be visualized there in few different ways, dropdown menu, pop-up etc.

But if someone would like to create own implementation then why not, it will be simply HTML page with access to some special JS APIs (available only for that URL) to get and set bookmarks etc.

szcsaba commented 10 years ago

I forgot to ask: In Opera, It is annoying many times when you not simply open a webpage or do it in a new page (shift, ctrl) but you'd like to drag&drop the tile somewhere (onto a tab or between two tabs). When dragging, it rearranges the other tiles. Could you implement an "Unlock tiles|Lock tiles" button to solve this problem in Otter?

Emdek commented 10 years ago

@szcsaba, I wanted to mention such feature earlier, as part of "global" lock (including tool bars etc.) or as separate button for start page.

tbmatuka commented 10 years ago

Having all speed dial URLs in a bookmark folder would have the added benefit of them appearing marked in URL suggestions or autocomplete, which isn't happening in Opera 12.x, or at least I haven't seen that option.

Also, I think these options would be useful:

gdv22 commented 10 years ago

@tbmatuka: good suggestions - like 'em all :)

"...and was reverted by accidently reloading the speed dial" <<< FYI, this can be prevented for any preferred SD images in Op12.x (Windows) by setting the "Read Only" attribute on the thumbnail images so they don't get "updated."

Emdek commented 10 years ago

@tbmatuka, currently I'm not planning to add support for these special images defined by webpage. And yes, reloading has to be manual, automatic reload doesn't play well in some cases, for example creating confusing traffic in case of forums, giving illusion of real visits to other users.

In theory it should be easy to create start page that allows to upload custom images, since it's normal HTML page then it should be able to use standard storage and upload APIs - no need for custom ones. :-)

szcsaba commented 10 years ago

Hi again! :-) Although I know (and appreciate) that supporting of background pictures and themes for Start page is at the end of the row of plans, this question is tile-related, too. (So I think it is better to ask it earlier)

Could you add a setting that defines the interval among tiles? IMO there's no need to distinguish horizontal and vertical ones.

In Opera, I had to drop many lightweight themes and couldn't use most of my own pictures as a background because the view is messy with those, the tiles are too close to the adjacent ones.

Emdek commented 10 years ago

@szcsaba, we can consider it, although whatever it will end up, as HTML or QML (both solutions have own sets of advantages and disadvantages) it will be possible to completely replace it, adding custom options or hard-coding them. Start page will be simply a single file, easy to replace.

lollox commented 10 years ago

@Emdek: can you post the main pro and cons of QML vs HTML ? I don't know at all the first one but since it's used to build program's GUIs I thinked it was a lot more powerful than HTML ... however, as Opera 15+ demonstrated, HTML is good enough to build a very handy, fast and powerful SD, so in both cases there're no problems

Emdek commented 10 years ago

@lollox, QML will require messing with tab navigation history, while HTML will depend on availability of JavaScript to QObject bridge, so we could expose APIs (allowing JS in start page could interact with bookmarks etc.), this would mean no start page for non Qt based backends (like Gecko). Well, QML appears then a better choice, although it's something less used, requires learning new language, but on the other hands it uses JavaScript like syntax.

ersi-dnd commented 9 years ago

In speeddial, will you also set the keybinds CTRL+number for the first nine tiles? If so, I warmly recommend to have an option to unbind them.

Emdek commented 9 years ago

Note that it is still possible that we will use QML in future, but this attempt simply failed, and additional dependency caused additional issues like #811.