2017

Ideas for GSoC student projects for Plone from 2017.

These are project ideas that were proposed for Plone's participation in Google Summer of Code 2017. Student interested in working on these were encouraged to apply for the program

Note, most projects do not require the candidate to know Plone already, but we do expect applicants to have started to learn about Plone before applying. Applicants that submit bug fixes, even minor ones to add-on packages, are strongly preferred. The specific technologies required for each project are listed alongside the title and in the details for the idea.

Improve the Customization of Plone Listings

(Python, JavaScript)

Summary

Plone needs to have an easier way to customize the look of listing pages, such as those for search and faceted navigation.  The end goal of this project is to provide an intuitive and flexible system for creating different kinds of listings and different kinds of search/faceted navigation pages in Plone. This could replace eea.facetednavigation, collective.listingviews, and even Plone's own search, advanced search and collections views.

This work is needed because for Plone websites customizing listing pages and creating new complex search pages are two of the most commonly requested tasks. It should be possible for a non technical person to achieve this task online with minimal training. By doing so we enhance Plone's reputation as being easy to customise and we can potentially expand its audience. For this reason this task is strategically important.

Implementation

The plan as outlined in GitHub issue #239 is to make changes to mosaic first. Namely

  1. Inline tiles. The ability to drag tiles inside (and out of again) a rich text tile. This makes tiles more flexible because TinyMCE layout capabilities can be used in addition to the grid making more layouts possible. Stringing together small tiles for calculated values for example todays_date or last_author become possible TTW.
  2. Rework the existing listing tile so it appears as a richtext tile for customising the repeated block by arranging inline field tiles as needed. Adding a lead images to each item is as easy as DnD.
  3. Change mosaic so it can optionally work as a form. Various form tiles similar to what eea.facetnavigation has available.
  4. Installer such that you can optionally replace plones built in search and advanced search.

Skills

A successful GSoC student will require jQuery skills to work with the existing mosaic code base. It would also be good to have Python skills to work on the layer changes for inline tiles (but perhaps this could be done with someone else?)

Mentors

Dylan Jay, Asko Soukka

Aims

PR to mosaic, p.a.tiles and associated dependencies.

Content Import & Export

(Plone & Python)

Summary

Strategically, good content import/export is important because

  1. it allows new users to get started quickly.
  2. It also helps overcome an obstacle when users expect a SQL database to be able to import and export from.
  3. It makes it easier for regular bulk uploads or syncs of content from external sources. It allows this for non technical users and non python developers.

The end goal is to make plone more approachable for webmasters which will in turn help grow the install base.

The aim would be a online UI which allows

  • both CSV and JSON import and export of content (using seperate files for binary/content). CSV is included so non technical users can update metadata. Both formats will able to hold the same data, CSV will need to use quoted JSON for certain parts.
  • It will allow for both object creation as well as finding and updating existing content via various unique attributes such as path or custom fields.
  • It will work for metadata, content and binary content or just combinations of these (ie just metadata refresh if required).
  • It should make it possible to export content and then reimport it into a new site with a different version such that almost all data is retained.
  • Help when imports go wrong, e.g dry-run mode, reports on content created, skipped etc etc.
  • Permissions and security to be respected. Lower roles can still use it just with content/fields they have access to.

Implementation

It will be implemented as an add-on or extend an existing add-on, that can be incorporated into Plone as at a later date. collective.importexport is example of existing add-on that can be extended.

Skills

Mainly python. Some UX skills to help create an intuitive UI but this can be provided by the mentor.

Mentors

Dylan Jay, Eric Bréhault

Aims

A new add-on and a PLIP to include this in core Plone.

Plone as a Progressive Web App

(HTML, CSS, & JavaScript)

Summary

PWA (progressive web apps) is an approach to building web applications that behave more like native mobile apps.  For Plone, the goal of this project would be to allow administrators to turn any Plone site into a mobile progressive web app.  This would improve the user experience for Plone on any mobile device: making it load faster, support offline access and in general feel more like a mobile app than a web site.

Implementation

The objective is to develop an Angular 2 app that will implement the PWA behavior. It will retrieve the contents from the Plone site using the Plone REST API. 

The resulting JS bundle would be packaged for Plone into a basic add-on.

Skills

JavaScript, HTML and CSS development knowledge is mandatory. Knowledge of Angular 2 is recommended.

Mentors

Eric Bréhault, Victor Fernández de Alba, Timo Stollenwerk

Aims

A new add-on.

Improved Patterns-based Widgets

(HTML & JavaScript)

Summary

Patterns (and plone.app.widgets) allows Javascript developers to create new widgets for Plone. We have a number of great widgets, but there are some specific improvements that need to be made to the widget javascript:

A more harmonized date and date-time widget

An improved date/date-time widget might be based on the implementation in patternslib.  It would support better keyboard input, text-only input, and improved styling across multiple browsers.

A replacement for the data-grid field

A new replacement might be based on patternslib, and could use JavaScript to support doing a grid nicely without ugly cloning of first row. For example, the form rendering of a row might be done in JavaScript, using support for JS-digested supermodel XML as a form schema.

A Taxonomy picker

A tree based widget with the ability to support some of the features of Products.ATVocabularyManager. This would be of value in supporting selections from hierarchical vocabularies.

And more...

Implementation

HTML and Javascript mockups for the new widget designs, added to plone.app.widgets.

See Also

Skills

Javascript and HTML. No Python or Plone knowledge needed.

Mentors

Sean Upton (former GSoC) and Franco Pellegrini

Aims

A contribution to the Plone core

Improved Import of non-Plone Themes

(Zope, Plone & Python)

Summary

Currently, it is possible to import into Plone themes which are packaged as .zip files.  Themes of this sort are easily found and may be readily adopted to Plone using the theme editor.  However, in order to use them, several manual steps must be taken to adapt them to the Plone environment.  This project would automate these steps, easing the path to theme development for Plone.  At a minimum, this project would implement steps to:

  • Automatically generate a theme manifest file describing the resources of the theme, if one were not already present.

  • Automatically parse and adjust the src and href attributes of tags within the theme HTML in order to fix them for a Plone environment.

Other steps may also be automated, but these would be an excellent first step.

Implementation

Work for this project will involve updating and refactoring some of the code in plone.app.theming involved in the upload of theme packages in .zip format.  It will involve writing Python and learning about the Zope and Plone layers involved in theme resources.

Skills

Python ability is required and a curiosity about Zope and Plone internals will be helpful

Mentors

Fulvio Casali

Aims

A PR for plone.app.theming

Better Diff Viewer for Content

(HTML & JavaScript)

Summary

Plone allows users to compare different versions of their content (and revert to previous versions, if required). However, the user interface for this is very technical and of limited use to most end-users. This project is to replace the current way of viewing diffs with one similar to tools users may experience elsewhere.

The biggest improvement that needs to be made is to the diffing HTML text. The current view is very colorful but not particularly useful. The way that Wikipedia behaves in displaying changes would be a good source for influence in design, as would Microsoft Word's track changes feature.

A second focus is on fields which are not "inline-diffable".  This means that the user must change to a poorly-formatted "code view" to see differences in these fields One possible approach to implementing this would be to re-use the UI of the edit form and highlight changes there.

Implementation

The functionality for generating diffs has been part of Plone for a long while. The main work here will be in designing a new UI that both accurately shows differences in field values and is easy to understand. This will, by necessity, be primarily a HTML and Javascript project, but some minor knowledge of Python will be needed. That's not to say you'd have a completely free hand in Javascript, though. The use of libraries in making this view would need to be cautious, as this is part of core Plone. Certainly no new JS frameworks could be introduced, but it would be good to explore diffing in javascript.

See Also

Skills

HTML, Javascript. Some minimal Python will be required to ensure the data formats are appropriate.

Mentors

Jens Klein, Hector Velarde

Aims

A pull request to be included in the next Plone release.

Built-in Accessibility Compliance Checker

(Plone, Python, HTML, & CSS)

Summary

Out of the box, Plone 5 is WCAG 2.0 AA compliant. However, any changes to a theme, or any new theme applied to Plone can result in reduced compliance levels (sometimes severely so). Plone needs a tool to verify the accessibility compliance of one or more content items (or even an entire site) that identifies accessibility issues.

Implementation

The W3C maintains a somewhat overwhelming list of Web Accessibility Evaluation Tools. The work would be to identify a viable service or software tool, allow a site administrator to invoke this tool on a per-item or entire-site basis, and package the work as an add-on ready to be installed.

Skills

Successful implementation will require HTML and CSS to create a compelling user experience, and some knowledge of Python and Plone in order to integrate the selected tool with existing Plone functionality.

Mentors

Paul Roeland

Aims

A Plone add-on

Improve AMP Support in Plone

(Python, JavaScript, HTML)

Summary

Accelerated Mobile Pages are one approach to improving the performance of a website.  Supporting AMP will help make Plone more attractive to end users who want the achieve the best possible load times for their pages.  The goal of this idea is to increase support for AMP in Plone by extending and enhancing an existing add-on package.

Implementation

The collective.behavior.amp package implements a behavior for Dexterity-based content types which adds an AMP HTML version of your content. Most of the newest mobile browsers will serve this version by default. Google will also link mobile search results to this version.

collective.behavior.amp currently supports metadata, related items (amp-related), social share (amp-social-share) and analytics (amp-analytics) components. We would like to increase support for other components including:

  • ads (amp-ad and amp-sticky-ad)

  • audio (amp-audio)

  • comments (amp-form)

  • image galleries (amp-carousel)

  • tweets (amp-twitter)

  • video (amp-video)

  • YouTube videos (amp-youtube)

Integration with third party products could allow us to provide:

  • polls (collective.polls)

  • liveblogs (collective.liveblog)

  • news articles (collective.nitf)

Skills

Python and basic Plone experience, some minor HTML5, CSS3 and JavaScript.

Mentors

Héctor Velarde

Aims

A series of pull requests on collective.behavior.amp each implementing a feature.

 

Your Own Idea

Summary

We love your own suggestions! Ask us at community.plone.org and we'll help you polish the idea into something we both love.

Implementation

As long as it benefits the Plone community it can be anything. Most likely the majority will be Python and direct to Plone, but we will also accept Zope, ZODB, WSGI, HTML/CSS, JavaScript, etc.

Skills

Tailor your idea to your own skills

Mentors

Don't worry about this, at Plone we think it's our responsibility to find you the right mentor.

Aims

A core contribution or an add-on, most likely.