If you can't read please download the document
Upload
guido-stevens
View
1.521
Download
1
Embed Size (px)
Citation preview
cosent_slide_hd
Plone Intranet
under the hood
Guido Stevens@GuidoStevens
cosent.nlSocial Knowledge Technology
it starts with a vision
Once upon a time...
2010 Intranet designer at Syslab
2011 Created Patternslib
2012Mockup forked
2014 Plone Intranet Designer
2015Mockup merged
2015Plone 5.0 released
2015Plone Intranet 1.0 released
Patternslib Mockup Patternslib
Design First
Patternslib
Separate Github organization
Multipe repositories
Some patterns live elsewhere
Provides: Javascriptmarkup + CSS only for documentation purposes
Prototype
Separate repository
In ploneintranet Github org
No Javascriptdownloads patternslib bundle
No Plonehand-crafted markup
Standalone clickable prototypeJekyll static page templates
Provides: CSS, images
Defines: HTML markup
Patterns in action
post-box is our most complex frontend element
post-box is our most complex frontend element
pat-content-mirror
pat-inject
pat-switch
pat-subform
pat-autosubmit
pat-content-mirror
pat-content-mirror
textarea (invisible)
#mirror-post-box
pat-content-mirror
textarea (invisible)
#mirror-post-box
pat-inject
pat-inject
pat-inject executes AJAX request
activated by pat-inject class
fetches action page URL
extracts source #selector
replaces current page target selector
optionally replaces second && target selector
pat-inject executes AJAX request
activated by pat-inject class
fetches action page URL
extracts source #selector
replaces current page target selector
optionally replaces second && target selector
learn more at patternslib.com
+ 2 talks by JCBrand
putting it all together
ploneintranet/ploneintranet
single repository
single egg distribution
23 separate packagesseparate GS profiles
separate test suites
separation of concerns (1)
patternslib
javascript
prototype
CSS
markup definition
ploneintranet
python & Plone
markup implementation
prototype
ploneintranet
separation of concerns (2)
ploneintranet.theme
no views or templates
diazo transforms
CSS bundlefrom proto
JS bundlecompile / download
ploneintranet.layout
globally used views & templatesmenu bar
dashboard
App protocolcontext sensitive browser layers
ploneintranet.suite
no views or templates
only package that depends on ploneintranet.theme
integrates all other ploneintranet.*
robot tests on all ploneintranet.*
customization entry points
ploneintranet.theme
no views or templates
diazo transforms
CSS bundlefrom proto
JS bundlecompile / download
ploneintranet.suite
no views or templates
only package that depends on ploneintranet.theme
integrates all other ploneintranet.*
robot tests on all ploneintranet.*
don't customize, generalize
it's a productnot a framework
highly integrated
it's an applicationnot a website
minimal branding
forking is costlyto build
to maintain even more
generalize feature requestsgood idea test: useful for others
high quality generic solution
share future maintenance
improve core product
customize configuration not codeavoid hardcoding current business logic
avoid UX uglification
Just A Bunch Of Add-ons No More!
All pages hand-crafted markupNo z3c.form generated pages
No developer design...
Add-on integration requires design
Just A Bunch Of Add-ons No More!
All pages hand-crafted markupNo z3c.form generated pages
No developer design...
Add-on integration requires design
This is a product, not a framework
Consistent, superior UX
High quality polished product
Focus on OOTB product re-use
how to make money then?
free != beer
business analysisinformation flows
social structure
configure systemcase workflows
teamspace structure
integrationauthentication
other systems
enhancementsbuild new features
improve existing features
deployment
training
supportfix bugs
upgrades
analytics
re-use opportunities
whole productuse as base for client project
collaborate with partners
expand roadmap
library modedepend on ploneintranet
load only individual packagesnetwork (tagging)
async
themeswitcher
layout (app protocol)
stack overview
statistics
49 contributors
6800+ commits
835 tests
87% test coverage (excl. robot)
sloccount:python:23.9 k (85%)
xml: 3.8 k (13%)
investment ~ 750 000
built on Plone 5
moved to Plone5 a2 in 2014
took some initial effort
smooth sailing since
now we don't have to port :-)
now we don't have to support Plone4 :-)
we don't expose Barcelonetaexcept where we do: themeswitcher
package groups
frontendtheme
themeswitcher
integrationsuite
api
sitewidelayout
notifications
messaging
workspacesworkspace
todo
usersuserprofile
invitations
standalone appssearch
library
previewsattachments
docconv
async
plonesocialmicroblog
activitystream
network
(misc legacy)
integration
ploneintranet.suite:default loads all package profiles
:testing creates demo site
runs all robot testsfrom all packages
in fully themed site
on :testing content
ploneintranet.api
all developers are lazy :-)
search
Solr based
Elasticsearch future option
faceted
livesearch
standaloneZCatalog elsewhere
plonesocial
status updates
mentions
tags
attachmentspreviews
reply, re-share
filter by following network
like
microblog & activity stream
ploneintranet.microblogplonesocial.microblog
post-box form
microblog storage backendBtrees
performance optimizednot catalogued
queued batch writes
ploneintranet.activitystreamplonesocial.activitystream
render activity stream with status updates
personalized data structures
Btree persistent dictionaries
Arnold follows Bernard
Claire likes your update
Denise endorses Ellen for skill X
Generic personalized tagging behavior overrides DC: tags with
ploneintranet.network
Btree persistent dictionaries
Arnold follows Bernard
Claire likes your update
Denise endorses Ellen for skill X
Generic personalized tagging behavior overrides DC: tags with
user profiles
dexterity.membrane
personalized datapersonal stream
endorsements
followers/following
likes
import view for management
assumes AD/LDAPbut not required
see talk by Matt Sital Singh
team spaces and case management
based on collective.workspace
simplify security management
single trust zone
document management
activity stream
adaptive case management:workflowed team space
todo centered
see talk by Alexander Pilz
document previews
based on collective.documentviewer
.* pdf png screenshot
stored as annotations on files
used in all file listingsworkspace
activity stream
search results
WIP: async conversion
async
super minimalistic478 SLOC
no ZODB queue handlinguse Celery
use Redis
async request dispatch
handle in browser viewnormal view security
easy to debug
ploneintranet.async
super minimalistic478 SLOC
no ZODB queue handlinguse Celery
use Redis
async request dispatch
handle in browser viewnormal view security
easy to debug
generically re-usable
theme switcher
fallback to Barcelonetacontrol panels
raw editing
cms.localhost:8080/Ploneconfigurable switch host
plone.app.theming policy API
ploneintranet.themeswitcher implementation
ploneintranet.themeswitcher
fallback to Barcelonetacontrol panels
raw editing
cms.localhost:8080/Ploneconfigurable switch host
plone.app.theming policy API
ploneintranet.themeswitcher implementation
context-sensitive browserlayer switching
Use caseDocument in workspace
Document in library
different default view
same portal type
App protocoltoplevel traverse event handler
disable other IAppLayer
enable own IAppLayer
Mixin class for easy usage
ploneintranet.layout
Use caseDocument in workspace
Document in library
different default view
same portal type
App protocoltoplevel traverse event handler
disable other IAppLayer
enable own IAppLayer
Mixin class for easy usage
Roadmap
Content updates
Notifications
Mobile Push
News hub
Calendaring
Auto-tagging
Org charts
.
learn more
Product and services:quaive.com
Developer documentation:docs.ploneintranet.org
Sources and issue tracker:github.com/ploneintranet/ploneintranet