Loklak apps site has now got a completely functional store listing page where users can find all relevant information about the app which they want to view. The page has a left side bar which shows various categories to switch between, a right sidebar for suggesting similar kind of apps to users and a middle section to provide users with various important informations about the app like getting started, use of app, promo images, preview images, test link and various other details. In this blog I will be describing how the bottom section of the middle column has been created (related issue: #209).
The bottom section
The bottom section provides various informations like updated, version, app source, developer information, contributors, technology stack, license. All these informations has to be dynamically loaded for each selected app. As I had previously mentioned here, no HTML content can be hard coded in the store listing page. So how do we show the above mentioned informations for the different apps? Well, for this we will once again use the app.json of the corresponding app like we had done for the middle section here.
At first, for a given app we need to define some extra fields in the app.json file as shown below.
"appSource": "https://github.com/fossasia/apps.loklak.org/tree/master/MultiLinePlotter", "contributors": [{"name": "djmgit", "url": "http://djmgit.github.io/"}], "techStack": ["HTML", "CSS", "AngularJs", "Morris.js", "Bootstrap", "Loklak API"], "license": {"name": "LGPL 2.1", "url": "https://www.gnu.org/licenses/old-licenses/lgpl-2.1"}, "version": "1.0", "updated": "June 10,2017",
The above code snippet shows the new fields included in app.json. The fields are as described below.
- appSource: Stores link to the source code of the app.
- Contributors: Stores a list containing objects. Each object stores name of the contributor and an url corresponding to that contributor.
- techStack: A list containing names of the technologies used.
- License: Name and link of the license.
- Version: The current version of the app.
- Updated: Date on which the app was last updated.
These fields provide the source for the informations present in the bottom section of the app.
Now we need to render these information on the store listing page. Let us take an example. Let us see how version is rendered.
<div ng-if="appData.version !== undefined && appData.version !== ''" class="col-md-4 add-info"> <div class="info-type"> <h5 class="info-header"> <strong>Version</strong> </h5> </div> <div class="info-body"> {{appData.version}} </div> </div>
We first check if version field is defined and version is not empty. Then we print a header (Version in this case) and then we print the value. This is how updated, appSource and license are also displayed. What about technology stack and contributors? Technology stack is basically an list and it may contain quite a number of strings(technology names). If we display all the values at once the bottom section will get crowded and it may degrade the UI of the page.To avoid this a popup dialog has been used. When user clicks on the technology stack label, a popup dialogue appears which shows the various technologies used in the app.
<div class="info-body"> <div class="dropdown"> <div class="dropdown-toggle" type="button" data-toggle="dropdown"> View technology stack </div> <ul class="dropdown-menu"> <li ng-repeat="item in appData.techStack" class="tech-item"> {{item}} </li> </ul> </div> </div>
After displaying a header, we iterate over the techStack list and populate our popup dialogue. This popup dialogue is attached to the label ‘View technology stack‘. Whenever a user clicks on this label, the popup is shown. The same technique technique is also applied for rendering contributors. A popup dialogue is used to display all the contributors. Thus technology stack and contributors list is shown only on demand.
For developer information, name of the developer is shown which is linked to his/her website and there is an option to send email or copy email id if present.
<div class="info-body"> <span ng-if="appData.author.url !== undefined && appData.author.url !== ''"> <a href="{{appData.author.url}}"> {{appData.author.name}} </a> </span> <a ng-if="appData.author.email !== undefined && appData.author.email !== ''" class="mail" href="mailto:{{appData.author.email}}"> <span class="glyphicon glyphicon-envelope"></span> </a> </div>
For email id, bootstrap’s email glyphicon is used along with a mailto link pointing to the developer’s email id. What does mailto do? It simply opens your default mail client. For example if you are on linux, it might open Thunderbird. If you do not have a mail client installed, but your default browser is google chrome, it will open gmail mail composer. If you are viewing the site on android device, it will open gmail app directly.
The bottom section can be viewed here.
Important resources
- Learn more about AngularJS on the Angular.org documentation.
- View Loklak apps site source code here
- Know more about Loklak API here (Loklak API documentation)