Lightning V5 [ANN]

569 views
Skip to first unread message

Graham Langley

unread,
Sep 21, 2018, 10:02:35 AM9/21/18
to Lightning - 4D Web Applications
All,

I am pleased to announce that Lightning V5 (Clean Air) has been in Alpha for a number of weeks.

With V5, there will no longer be built-in processing/inclusion of jQueryUI or jQuery Mobile platforms, both of those platforms are history.

Lightning V5 embraces Bootstrap V4 as the primary framework, Bootstrap V4 is substantially better than Bootstrap V3 with all the bells and whistles for either Desktop or Mobile apps.

V5, lean and mean 4D web apps.

Thanks for your support,

Graham



Paul Dennis

unread,
Sep 24, 2018, 12:20:05 PM9/24/18
to Lightning - 4D Web Applications
Well done Graham,

Traffic to our website is now overwhelmingly mobile so anything we can do to improve the mobile experiencel has to be worth it. 

Paul

Graham Langley

unread,
Oct 31, 2018, 10:04:59 AM10/31/18
to Lightning - 4D Web Applications

Lightning V5 (Clean Air - Alpha)


Welcome to Directives


Lightning tags have been great, extra processing and less typing for ease of use.


This ease of use comes with a price. You are constrained to a proprietary tag language which supports a limited amount of attributes, customisation and frameworks.


In the example below, which is a Bootstrap 4 mobile listing, there would have been <ltg-loop>, <ltg-obj>, <ltg-list>, <ltg-row>, <ltg-col> tags and more, if you outsource web development then it means the end of learning 3rdparty tags for your team and not being able to "tweak" to the limit.


<!--MOBILE CONTENT-->
<divalign="center"class="d-none d-sm-block d-md-block d-lg-none d-xl-none">
<ulclass="list-group list-group-flush">
<liclass="list-group-item active">
<ahref="#"class="list-group-item active"onclick="ltgFormDisplay('Companies-List','sort','[Companies]Company_Name');">ltg:%companies</a>
</li>

ltg:loop[Companies]
<liclass="list-group-item list-group-item-action ltg-link-pointer">

<ahref="#"onclick="ltgFormDisplay('Companies-Detail','edit','ltg:[Companies]Company_ID');">ltg:[Companies]Company_Name</a>
</li>
ltg:endloop[Companies]
</ul>
</div>
<!--/MOBILE CONTENT-->



The above uses the prefix “ltg:” for directives and determines the correct processing of the resulting directive. You gain complete control of the standard tags and attributes and can simply drop in html and add the directives.


ltgFormDisplaynow accepts optional action and record parameters.


More to come.

Pierre Coulombe

unread,
Oct 31, 2018, 12:16:58 PM10/31/18
to lightning-...@googlegroups.com
Brilliant!

--
You received this message because you are subscribed to the Google Groups "Lightning - 4D Web Applications" group.
To unsubscribe from this group and stop receiving emails from it, send an email to lightning-4d-web...@googlegroups.com.
To post to this group, send email to lightning-...@googlegroups.com.
Visit this group at https://groups.google.com/group/lightning-4d-web-apps.
For more options, visit https://groups.google.com/d/optout.

Paul Dennis

unread,
Oct 31, 2018, 1:06:54 PM10/31/18
to Lightning - 4D Web Applications
I think I get it however I liked the tags they were easy to read and validate in Oxygen. Now we have single quotes.  Not sure my eyesight can take it.
Is there an editor that I can use that automates single quote insertion ? I cant stand 'em

Graham Langley

unread,
Nov 2, 2018, 9:37:30 AM11/2/18
to Lightning - 4D Web Applications
We've had single quotes for ages, that's used for the JS parameters.

Here's an example of a combined Desktop and Mobile form, Customers List, the form code resides in a single form as Bootstrap hides content according to the screen size. There are no Lightning tags (this is an alpha version so things may change!);

<form method="Companies_List">

   
<!--DESKTOP CONTENT-->
   
<div class="card card-body d-none d-lg-block d-xl-block">

       
<!--FORM TITLE/-->
       
<h5 class="card-title"><span class="fa fa-industry"></span> ltg:%companies </h5>
 
       
<!--FORM TOOLBAR-->
       
<div class="btn-toolbar" role="toolbar">
           
<div class="btn-group" role="group">
               
<!--NEW RECORD-->
               
<button class="btn btn-secondary" onclick="ltgFormDisplay('Companies-Detail','new');" type="button"><i class="fa fa-plus"></i></button>
               
<!--/NEW RECORD-->
               
               
<!--DELETE RECORD-->
               
<button class="btn btn-secondary" onclick="ltgExecuteMethod('Company_Delete','confirm');" type="button"><i class="fa fa-trash"></i></button>
               
<!--/DELETE RECORD-->
           
</div>
           
<div class="btn-group" role="group">
               
<!--SEARCH RECORDS-->
               
<div class="input-group">
                   
<input class="form-control ltg-focus" id=".txtCompanies_Search" name=".txtCompanies_Search" onkeypress="return ltgSearchSubmit(event);" placeholder="ltg:#search" value="ltg:.txtCompanies_Search"/>
                   
<div class="input-group-append">   
                       
<button class="btn btn-secondary" onclick="return ltgSearchSubmit();" type="button"><i class="fa fa-search"></i></button>
                   
</div>
               
</div>
               
<!--/SEARCH RECORDS-->
           
</div>
           
<div class="btn-group">
               
<!--NAVIGATE RECORDS-->
               
<button type="button" class="btn btn-secondary" onclick="ltgFormDisplay('Companies-List','first');" tabindex="-1">
                   
<i class="fa fa-angle-double-left"></i>
               
</button>
               
               
<button type="button" class="btn btn-secondary" onclick="ltgFormDisplay('Companies-List','previous');" tabindex="-1">
                   
<i class="fa fa-long-arrow-left"></i>
               
</button>
               
               
<button type="button" class="btn btn-secondary" onclick="ltgFormDisplay('Companies-List','next');" tabindex="-1">
                   
<i class="fa fa-long-arrow-right"></i>
               
</button>
               
               
<button type="button" class="btn btn-secondary" onclick="ltgFormDisplay('Companies-List','last');" tabindex="-1">
                   
<i class="fa fa-angle-double-right"></i>
               
</button>
               
<!--/NAVIGATE RECORDS-->
           
</div>
       
</div>
       
<!--/FORM TOOLBAR-->
       
       
<!--LIST RECORDS-->
       
<table class="table table-hover">
           
<thead class="thead-light">
               
<tr>
                   
<th style="text-align: center;">
                       
<input type="checkbox" onclick="ltgFormDisplay('Companies-List','select-all');"/>
                   
</th>
                   
<th>
                       
<a href="#" onclick="ltgFormDisplay('Companies-List','sort','[Companies]Company_Name');">ltg:%company_name</a>
                   
</th>
                   
<th>
                       
<a href="#" onclick="ltgFormDisplay('Companies-List','sort','[Companies]Address');">ltg:%address</a>
                   
</th>
                   
<th>
                       
<a href="#" onclick="ltgFormDisplay('Companies-List','sort','[Companies]City');">ltg:%city</a>
                   
</th>
                   
<th>
                       
<a href="#" onclick="ltgFormDisplay('Companies-List','sort','[Companies]Postcode');">ltg:%postcode</a>
                   
</th>
               
</tr>
           
</thead>

           
<tbody>
                ltg:loop[Companies]
                   
<tr>
                       
<td style="text-align: center;">
                           
<input type="checkbox" onclick="ltgFormDisplay('Companies-List','select','ltg:[Companies]Company_ID');"/>
                       
</td>
                       
<td>
                           
<a href="#" onclick="ltgFormDisplay('Companies-Detail','edit','ltg:[Companies]Company_ID');">ltg:[Companies]Company_Name</a>
                       
</td>
                       
<td>
                            ltg:[Companies]Address
                       
</td>
                       
<td>
                            ltg:[Companies]City
                       
</td>
                       
<td>
                            ltg:[Companies]Postcode
                       
</td>
                   
</tr>
                ltg:endloop[Companies]
           
</tbody>
       
</table>
       
<!--/LIST RECORDS-->
       
       
<!--DELETE RECORD DIALOG-->
       
<div class="modal" id="company-delete" tabindex="-1" role="dialog">
           
<div class="modal-dialog" role="document">
               
<div class="modal-content">
                   
<div class="modal-header">
                       
<h5 class="modal-title">ltg:#delete</h5>
                       
<button type="button" class="close" onclick="ltgDialogClose('company-delete');" aria-label="ltg:#cancel">
                           
<span aria-hidden="true">&times;</span>
                       
</button>
                   
</div>
                   
<div class="modal-body">
                       
<p>ltg:.txtCompanies_Delete</p>
                   
</div>
                   
<div class="modal-footer">
                       
<button type="button" class="btn btn-secondary" onclick="ltgDialogClose('company-delete');">ltg:#cancel</button>
                       
<button type="button" class="btn btn-primary" onclick="ltgExecuteMethod('Company_Delete','delete');">ltg:#delete</button>
                   
</div>
               
</div>
           
</div>
       
</div>
       
<!--/DELETE RECORD DIALOG-->
       
   
</div>
   
<!--/DESKTOP CONTENT-->

   
<!--MOBILE CONTENT-->
   
<div align="center" class="d-none d-sm-block d-md-block d-lg-none d-xl-none">


       
<ul class="list-group list-group-flush">
           
<li class="list-group-item active">


               
<a href="#" class="list-group-item active" onclick="ltgFormDisplay('Companies-List','sort','[Companies]Company_Name');">ltg:%companies</a>


           
</li>
           
            ltg:loop[Companies]
           
<li class="list-group-item list-group-item-action ltg-link-pointer">


               
               
<a href="#" onclick="ltgFormDisplay('Companies-Detail','edit','ltg:[Companies]Company_ID');">ltg:[Companies]Company_Name</a>
           
</li>
            ltg:endloop
       
</ul>
       
       
<div class="btn-group fixed-bottom align-items-center justify-content-center" style="padding:8px;">
           
<!--NAVIGATE RECORDS-->
           
<button type="button" class="btn btn-secondary" onclick="ltgFormDisplay('Companies-List','first');" tabindex="-1">
               
<i class="fa fa-angle-double-left"></i>
           
</button>
           
           
<button type="button" class="btn btn-secondary" onclick="ltgFormDisplay('Companies-List','previous');" tabindex="-1">
               
<i class="fa fa-long-arrow-left"></i>
           
</button>
           
           
<button type="button" class="btn btn-secondary" onclick="ltgFormDisplay('Companies-List','next');" tabindex="-1">
               
<i class="fa fa-long-arrow-right"></i>
           
</button>
           
           
<button type="button" class="btn btn-secondary" onclick="ltgFormDisplay('Companies-List','last');" tabindex="-1">
               
<i class="fa fa-angle-double-right"></i>
           
</button>
           
<!--/NAVIGATE RECORDS-->
       
</div>
   
</div>
   
<!--/MOBILE CONTENT-->
</form>


With V5 you can drop in a third-party template and modify it to work using directives without learning a new tag language, with V4 you had to make everything a Lightning tag and hope it worked out with the internal processing. V5 will work with any framework as it does not need to know about processing proprietary tags.

Let's go all the way with this one ;-)

Paul Dennis

unread,
Nov 8, 2018, 8:19:43 AM11/8/18
to Lightning - 4D Web Applications
Graham, Will V5 enable us to have a url so we can target particular pages for example edit a record

Graham Langley

unread,
Nov 9, 2018, 9:36:03 AM11/9/18
to Lightning - 4D Web Applications
Yes and I'm currently looking at JSON data transfer which will open up Lightning as a web service API also, together with AngularJS in the WUI, which is great for JSON.

Paul Dennis

unread,
Nov 17, 2018, 5:56:49 AM11/17/18
to Lightning - 4D Web Applications
Morning Graham,

Thinking out loud don't know if this is possible. As you know we integrate lightning with the Joomla! content management system and run 4D behind the nginx proxy. It is becoming more complex to synchronise information between Joomla! and 4D. With version 5 could you consider the scenario where 4D runs behind Nginx and the majority of the HTML template is served by Nginx and just lightning forms served by 4D.  Some sort of include via a path so the request is forwarded to 4D to fetch the form something like

<link rel="import" href="/path/to/lightning/lightningform.html">

Nginx is free and runs on windows servers ssl etc the proxy would forward any url with path = /path/to/lightning .  to 4D webserver But the rest of the static content would be served by Nginx. The important thing is that we will be able to target individual lightning forms rather than index.ltg.

Just a thought

Thanks

Graham Langley

unread,
Nov 19, 2018, 8:32:45 AM11/19/18
to Lightning - 4D Web Applications
Paul,

Yes, I like this idea, using the rel="import" attribute to deliver a web component. 

Graham Langley

unread,
Mar 27, 2020, 10:51:20 AM3/27/20
to Lightning - 4D Web Applications
I hope you are all keeping well in these bizarre times!

Until recently, I had made my mind up to cease developing Lightning. The V4 product has been stable, the forum is quiet and the revenue is low.

Thankfully, things have changed.

V5 is coming.

Helge Antonsen

unread,
May 9, 2020, 5:22:43 AM5/9/20
to Lightning - 4D Web Applications
Thats good news, need upgrad for the transition to 64-bit :)

Graham Langley

unread,
Sep 18, 2020, 5:58:45 AM9/18/20
to Lightning - 4D Web Applications
Folks,

I am pretty much there with the new Lightning V5, the final bits are some demonstration videos and documentation updates.

The new demo uses the SB Admin 2 Bootstrap 4 theme;


There is a Dashboard, Companies, Contacts, Products, Orders and Demos section.

I've attached some screenshots.

One thing I could do with some help on are translations from English to French, German and Spanish. I've attached the English version. If you wanted to tackle this there will be a £75 discount on the V5 product, please contact me  if you are interested (ma...@grahamlangley.co.uk), first come first serve.

More news to come shortly. V5 will require 4DV18R3 minimum and is Object/ORDA based to embrace the new way of working with 4D.

Cheers!

Graham
dashboard.png
products.png
contacts.png
orders.png

Graham Langley

unread,
Sep 18, 2020, 6:02:10 AM9/18/20
to Lightning - 4D Web Applications
And now the translations;
dicitonary.xlsx

Mike Beatty

unread,
Sep 18, 2020, 6:18:37 AM9/18/20
to lightning-...@googlegroups.com
Graham-

Looks good — excited to see it.

Mike

--
You received this message because you are subscribed to the Google Groups "Lightning - 4D Web Applications" group.
To unsubscribe from this group and stop receiving emails from it, send an email to lightning-4d-web...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/lightning-4d-web-apps/a438c732-7242-42e0-95a2-39a7ac8f2c3cn%40googlegroups.com.
<dashboard.png><products.png><contacts.png><orders.png>

Martin Wolter

unread,
Sep 18, 2020, 6:40:23 AM9/18/20
to lightning-...@googlegroups.com
Unfortunately using this R-branch is a total show stopper.


Best regards

Martin Wolter

Mike Beatty

unread,
Sep 18, 2020, 8:17:54 AM9/18/20
to lightning-...@googlegroups.com
Martin-

Why do you say that?

Mike

--
You received this message because you are subscribed to the Google Groups "Lightning - 4D Web Applications" group.
To unsubscribe from this group and stop receiving emails from it, send an email to lightning-4d-web...@googlegroups.com.

Martin Wolter

unread,
Sep 18, 2020, 8:50:03 AM9/18/20
to lightning-...@googlegroups.com
We stick strictly to the official line v18. Any R line is a no-go.

Martin

Mike Beatty

unread,
Sep 18, 2020, 9:18:58 AM9/18/20
to lightning-...@googlegroups.com
Ah, understood. Perhaps Ltg v5 will work with 18.3 LTS.

Mike

Graham Langley

unread,
Sep 18, 2020, 11:01:30 AM9/18/20
to Lightning - 4D Web Applications
V5 will not work with 4DV18.3 LTS, 4D V18 R3 is the minimum requirement. V5 is completely different to V4, so you will need time to adapt and update to the new architecture, test, repeat etc. It's worth a look now.

Graham Langley

unread,
Sep 18, 2020, 11:15:41 AM9/18/20
to Lightning - 4D Web Applications
<!--V4-->

<ltg-caption class="col-sm-4 control-label" title="%reference"/>
<ltg-div class="col-sm-8">
    <ltg-obj name="[Sales_Orders]Reference" mandatory="false"/>
</ltg-div>
  
<!--V5-->
<label for="Order.PO_Reference" class="col-form-label">{{%order_reference}}</label>
<div>
    <input type="text" class="form-control" id="Order.PO_Reference" name="Order.PO_Reference" value="{{Order.PO_Reference}}" />
</div>

No more ltg-x tags with V5, instead we use 4D objects in the html.

Attached is a screenshot to demonstrate an Order form selecting a company whose name begins with "bar".

In the TRACE on the left you can see the oConnection object (New in V5).

oConnection.data.Order is an object.
objects.png

Hervé LE MARCHAND

unread,
Sep 18, 2020, 11:18:07 AM9/18/20
to lightning-...@googlegroups.com

One thing I could do with some help on are translations from English to French, German and Spanish.


I can do the french translation..

Mimosa, France

Graham Langley

unread,
Oct 14, 2020, 7:17:04 AM10/14/20
to Lightning - 4D Web Applications
Folks,

I am ready to go with V5, please contact me for a demo copy and I will send this to you via WeTransfer. I would appreciate your feedback.

On Friday, September 18, 2020 at 4:01:30 PM UTC+1 Graham Langley wrote:

Robert Ocana

unread,
Oct 15, 2020, 3:57:09 AM10/15/20
to lightning-...@googlegroups.com
Hi Graham,

Please send me a demo copy of Lightning v5. Thank you.

Best regards,

Robert Ocana

Graham Langley

unread,
Oct 17, 2020, 8:23:36 AM10/17/20
to Lightning - 4D Web Applications
For those of you that have the V5 demo, please post to this group for your questions, as it will prove helpful to others.

henning...@schulz-ag.de

unread,
Oct 20, 2020, 3:59:12 AM10/20/20
to Lightning - 4D Web Applications
Hi Graham,
I would also like to get a v5 demo.
Regards
Henning

Graham Langley

unread,
Oct 27, 2020, 8:32:27 AM10/27/20
to Lightning - 4D Web Applications
I would be pleased to hear of any feedback you have on V5, good, or bad. Please post here.

V5 uses Objects*, and the minimum requirement is 4DV18R3.

*This is the way 4D is going and I have designed V5 to suit.


Robert Ocana

unread,
Oct 28, 2020, 5:48:30 AM10/28/20
to lightning-...@googlegroups.com
Looking forward to taking for a test drive this week!  Thanks. 

Sent from my iPhone

On Oct 27, 2020, at 8:32 PM, Graham Langley <graham...@hotmail.co.uk> wrote:

I would be pleased to hear of any feedback you have on V5, good, or bad. Please post here.

www.4...@gmail.com

unread,
Oct 28, 2020, 11:58:20 AM10/28/20
to Lightning - 4D Web Applications
Yes, its different than v4, it seems more "clean", focus on communication between 4d and html.
No design elements with Ltg, all moved to external web design application.

Easy controll with the one method Web_Router.
I like the way Ltg use the objects "oConnection" and "oUser" - less complicated :)

But i have some Q:
- Is the documentation available in pdf?
- What design application is "best" to use for bootstrap + Ltg.
- Only Index.html have <html></html> tags, all other html files without this. required or?
- I miss one function - Ltg_Conn_IsRequest?

Graham Langley

unread,
Oct 29, 2020, 5:05:57 AM10/29/20
to Lightning - 4D Web Applications

Helge,

Thanks for the feedback!

I would certainly agree that V5 is “clean”, a description I would use myself. You have the component (server) and js library (client), and that's it. The previous lightning-xml, lightning-web and lightning-custom folders have all been retired, and the “ltg-” tags are also gone. The use of the Connection and User objects also removes quite a few of the previous Ltg_ component methods. Less, is more.

PDF Documentation

Documentation is in markdown (.md) but it should be easy enough to create a PDF from that, leave it with me.

Designing Forms

I think with the large number of Bootstrap 4 themes available, where the design has been done for you, all you need is to pick your choice and use a regular html editor to place the Lightning directives in the template. It's a much faster process with V5 as there are no “ltg-” tags to replace the standard html.

<html></html> Tag

In the demo, 404.html, login.html and index.html each have the <html></html> tag. The other forms are contained inside index.html so do not need the html tag as it's already done in the container form.

Ltg_Conn_ProcessRequest

I have removed this and handed control to the developer to determine whether the request should go through the router.

To create your own method, it will involve determining whether the URL is “/LTGAJAX”, that will defintiely be a V5 connection request, but for other URL's you will need to determine yourself whether these should be routed via Lightning or your own mechanism.

Graham Langley

unread,
Oct 29, 2020, 5:50:12 AM10/29/20
to Lightning - 4D Web Applications
Ltg_Conn_IsRequest is removed, not Ltg_Conn_ProcessRequest! Sorry, only had the one coffee.

Fabrice Cornet

unread,
Feb 21, 2022, 7:17:52 AM2/21/22
to Lightning - 4D Web Applications
Hello,
does v5 work completely with 4D v19 ?
Thanks

Graham Langley

unread,
Feb 21, 2022, 7:20:33 AM2/21/22
to Lightning - 4D Web Applications
Yes, Lightning V5 is ideal for 4D v19, as it makes the most out of ORDA and Objects.
Reply all
Reply to author
Forward
0 new messages