fossasia / open-event-wsgen

Open Event Website App Generator https://sched.eventyay.com
Apache License 2.0
2.02k stars 864 forks source link

Propose suitable technologies #201

Closed mariobehling closed 8 years ago

mariobehling commented 8 years ago

For FOSSASIA and OpenTechSummit we used the open event scraper, where a JSON file is used to generate the a web app. We want to continue in this way and generate events with this script. Another goal is to make the web app themable. An organizer user could choose a theme and color and the app is generated with this theme. The app can then be downloaded as a zip file or as done with the Open Event Scraper be deployed on GitHub.

To enable this workflow and follow the user story (https://github.com/fossasia/open-event-webapp/issues/200), please propose suitable technologies. Do we still need AngularJS in this case?

championswimmer commented 8 years ago

First question to answer will be if or not to be a single-page-application.

Pros of SPA are -

If we do go with SPA, we'll have to use a webapp framework like ember or Angular or React+Redux.

I have learnt from GSoC2015 to stay away from Angular1. For large lists it'll be slow, and there are no easy ways out of it. So we have to look at a framework that has DOM diff or virtual DOM or shadow DOM.

Even if we make an SPA, each session, speaker etc should have unique URLs (for sharing), for which we can use hash routes, or the new pushState() or histort API.

Finally, whatever framework we use, we are not to theme the frontend using framework features. This leads to the current situation where we are too tightly bound to Material. Instead our generator (for non SPA) or our framework should only spit out html, with our custom class markups like session-list or speaker-card and our CSS will style it as per that markup.

niranjan94 commented 8 years ago

+1 for a SPA.

As for the framework, I found Vue.js to be quite good. Vue.js along with webpack would be a good choice. It is very light (so much more lighter than Angular and has a much better performance even with large datasets) and has most of the core reactive features of React. And there is vuex similar to Flux or Redux that has been made for Vue.js.

aayusharora commented 8 years ago

+1 for a SPA . According to my views , I can have some options

  1. SHIFTING FRAMEWORK

PROS

1) React can have good scope for large projects .

2) I have gone through various articles online and find out that React is for larger projects and Angular is for fast development .

  1. NOT SHIFTING FRAMEWORK , REUSING CODE PROS a) Continuing with Angular is advantageous , to reuse some of the code , not binded with Material. Let say Twitterwall , No component of it is binded with Material .The Services even "ApiJsonFactory.js" , TwitterJSONFactory.js can be reused .

    b) All we need to add the directives and replace the views .

    c) Taking the theme part into consideration ,I was thinking to bind the data dynamically with "choose theme option" after the Server UI wizard is completed by the organizer .

3 . Considering @niranjan94 idea for Vue.js , can be an option that also will be considered in the point (1).

juslee commented 8 years ago

To paraphrase @mariobehling:

Web App to have 2 modes - Hosted (on our servers), and On Prem (downloaded and hosted on their servers).

Does that make sense? @championswimmer and @aayusharora

championswimmer commented 8 years ago

@juslee That makes sense now much more than before.

We will start working on the basic version that satisfies these three points ASAP.

championswimmer commented 8 years ago

I have had a call with @aayusharora today.

We have concurred on division of labour this way - I'll be taking up everything coming under labels config and dataapi now. @aayusharora will be working on displaying data and the styling

Getting the Data

Two modes -

These two modes shall be transparent to the view-rendering layer. I'll make a openevent.js library, that shall have calls like OpenEvent.getSessions() The library internall will handle any of the two above cases as per the configuration of deployment.

Displaying the data

We'll use a SPA framework (Angular2 is what we concurred upon) for displaying of the data. @aayusharora is creating the wireframes right now, and will get on with integrating with Gentelella.

I'll start making issues for all the tasks in hand.