Re: Fwd: Re: The sidebar resources as viewed from JS

Ralf Lang <[email protected]>
Newsgroups gmane.comp.horde.devel
Message-ID <[email protected]>
Hi Michael & list,

On 15.12.2015 15:02, Michael J Rubinsky wrote:
> Hm. For some reason IMP has decided to start ignoring my identity prefs
> and send everything using my non-horde email. Forwarding to the list.
> 
> ----- Forwarded message from Michael J Rubinsky
> <[email protected]> -----
>    Date: Tue, 15 Dec 2015 08:59:30 -0500
>    From: Michael J Rubinsky <[email protected]>
> Subject: Re: [dev] The sidebar resources as viewed from JS
>      To: [email protected]
> 
> Quoting Ralf Lang <[email protected]>:
> 
>> Hi,
>>
>> I am currently examining the sidebar resources handling.
>>
>> In a plain horde application (from skeleton), one would add sidebar
>> resources via $app_Application->sidebar derived from
>> Horde_Core_Application.
>>
>> This would generate pretty bare "radio" or "checkbox" resources - they
>> have no identifying id, class or other element and the radios would not
>> have any relation besides living on the same container. For a
>> traditional static render-and-forget app, this works well but for
>> dynamic, it seems not ideal.
>>
>> In kronolith/dynamic, resources are added via js and generate a slightly
>> different html code for the resources (checkboxes only).
>> They store the actual context  of the checkbox via prototypeJS' store()
>> method.
> 
> Kronolith/dynamic also uses the Kronolith_View_Sidebar:: method (like
> Hermes, below), as this is the dynamic view way of rendering it. The
> actual calendar resources are appended via JS since they are obtained
> from various AJAX calls after the UI has loaded.
> 
>> In Hermes/dynamic,
>>
>> the sidebar() method is ignored and a separate Hermes_View_Sidebar /
>> sidebar.html.php is rendered which actually has IDs to refer to.
> 
> Hermes_Application::sidebar is used, but only for the traditional view
> (as in the other dynamic apps as well). The only items added from
> Hermes_View_Sidebar are static links/informational displays. The
> remaining data (Timers) are loaded via AJAX like calendars in kronolith.
> Also, FWIW, we store context for the Timers via the .store() method here
> as well.

I missed/overlooked that kronolith dynamic is so close to hermes - I
probably got confused by the "traditional view" code.

>> Which solution would be acceptable for re-use in other horde apps (i.e.
>> turba)?
> 
> FWIW, turba has always been it's own little bag-of-monkeys - mostly
> because of the way individual address books are never shown together
> (unlike other apps where we can view multiple resources on the same
> view), and the complexities of allowing both share and non-share based
> address books - but I digress...
> 
>> 1) Amend the sidebar() generated code with optional class for logically
>> grouping radio items and optional id to make use of them in javascript
>> code
>>
>> 2) Generate dynamic-view resources in javascript code, including
>> class/id needed for handling
>>
>> 3) The hermes way
> 
> I admit I'm not 100% sure exactly what the differences are between 2 and
> 3 since they seem to me to be very similar and I'm not clear if you are
> doing this in a traditional or dynamic app (your points above seem to
> refer to both).

I think you gave the answer: kronolith/dyn and hermes/dyn are similar
and the sidebar() method should be left to traditional view apps.

We are currently implementing apps which use HordeCore.doAction() /
Horde_Core_Ajax_Application & friends to load and filter content. These
don't have a traditional view and probably won't ever have. They just
feel "traditional" wherever this was the fastest way to implement.

I was asking the question because

a) lack of documentation on what features not to use in a horde ajax app
- I will add to the wiki what I learn

b) I felt handling of radio resources in dynamic views has not been done
yet and I'd like to contribute the solution, if it is of interest. I
mean strictly: Add and identify radio entries, decide which radio
resources are supposed to be one mutex group, clear already selected
when clicking a new one, delegate actual action to some callback.


> The current way of doing this in a *dynamic* view is to create static
> links in the PHP template (via {Application}_Template_Sidebar) and
> create resource links (like calendars) via javascript when they are
> loaded via Ajax. Then, utilize the clickHandler in javascript and switch
> on either DOM id, or other CSS selector such as class name.  IMO, this
> gives the greatest flexibility: We can assign DOM id when really needed
> (they are more expensive for the browser), create whatever custom logic
> we need to handle the enabling/disabling/hiding/etc... of other related
> links based on whatever state we want.
> 
> E.g., I'm currently working on adding a dynamic view of Ansel and have
> "view filters" in the sidebar that indicate if the content displayed are
> for all users, just the current user, or just to "subscribed" galleries.
> I catch the clicks on these based on DOM id and in my various loadView
> type of methods, I set the state of other UI elements accordingly. Since
> there are other menu items whose state affects the content displayed
> (are we viewing galleries, images, a map, date browsing etc...) it
> wouldn't really be feasible with a one-size-fits-all sidebar handling code.

I will have a look at the ansel_4 branch. I only looked at "master" so far.

> If you are talking about changing some content in an ajax-y way in a
> traditional view app, you are probably going to need to use our Imple
> pattern to attach the functionality to the UI element and handle the
> resulting action.

I'd rather not use imples in anything new.

> Does this even get close to answering your question? ;)

This mail really clarified a lot. :)


-- 
Ralf Lang
Linux Consultant / Developer
Tel.: +49-170-6381563
Mail: [email protected]
B1 Systems GmbH
Osterfeldstraße 7 / 85088 Vohburg / http://www.b1-systems.de
GF: Ralph Dehner / Unternehmenssitz: Vohburg / AG: Ingolstadt,HRB 3537

-- 
dev mailing list
Frequently Asked Questions: http://wiki.horde.org/FAQ
To unsubscribe, mail: [email protected]
signature.asc (application/pgp-signature, 181 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iEYEARECAAYFAlZwMIsACgkQCs1dsHJ/X7AoyACgusXYrAA/5sObW5dkFqxpSA4b
XjIAni0o6o4N14IcLL1v0rkTkKT/kZ7u
=XpNj
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.