Walking away from a Free-to-Play time sink - by Daryl Hornsby Blogs - 14 December 2018 - 7:13am
I've quit playing my favourite free-to-play game after 3 years of daily play. Why? Do I regret it? How does it feel to leave a game that I've played so much?
Categories: Game Theory & Design

Horses, Heists, and Guns... Oh My! - by Michael Carroll Blogs - 14 December 2018 - 7:08am
An examination of the player motivations that are present within Rockstar's Red Dead Redemption 2.
Categories: Game Theory & Design

The Use of Feedback Loops in Dungeons in Phantom Brave - by Samantha Wheeler Blogs - 14 December 2018 - 7:08am
Constantly challenging dungeons to make characters stronger in Phantom Brave could easily become tedious and boring, but the use of positive and negative feedback loops help keep gameplay interesting.
Categories: Game Theory & Design Blog: The Story of Agiledrop: Introduction

Planet Drupal - 14 December 2018 - 5:50am

We've started a series of blog posts that tell the story of what makes our developers successful when working with other Drupal teams. The first chapter introduces our workflow and the advantages it brings.

Categories: Drupal

Quick Quirks

Gnome Stew - 14 December 2018 - 5:00am

Photo by:

Some games have quirks, traits, aspects, and other goods along those lines baked right into the game. I’m mainly thinking of GURPS, Hero System, Fate, and Savage Worlds. There are plenty more games that I didn’t list here that have some way to customize and define your characters beyond “I’m a dwarven barbarian with an axe.”

This article is more for those gamers playing the games without these baked-in features of the game, but it can also assist the games that do have these structures.

As a player, I’ve found that my characters are more enjoyable (and memorable) if they have a quirk or three. I generally don’t do more than three because then the character gets annoying to play and to be around. I may even adopt new quirks or allow an old one to be overcome (or simply fade away) as game progresses because of in-game activities.

As a GM, I love adding one quirk (maybe two if it’s a major character) to NPCs that I want the players to remember. It’s a mental hook for them to hang their memory on. They may not remember that “Ragnar” was the fellow with the McGuffin, but they’ll certainly remember “the fellow with the bad limp and comb-over hairstyle.” These mnemonic clues can ease the game for players. This is especially true for those campaigns that may have long gaps between sessions (like a monthly game).

So, let’s get on to some tables you can roll on to generate some quirks. As always, random generation tables are going to produce some really odd results, so use them to spark your imagination. In other words, don’t take the results literally…. Unless that really works for you and your group.


To find a physical quirk, roll a d4 to determine which list to use. Then roll a d20 on that list.

    1. Adaptable
    2. Aggressive
    3. Animated
    4. Antsy
    5. Careless
    6. Cheap
    7. Colorful
    8. Comical
    9. Conventional
    10. Creative
    11. Cultivated
    12. Debonair
    13. Destructive
    14. Dignified
    15. Disciplined
    16. Energetic
    17. Excessive
    18. Extravagant
    19. Fanciful
    20. Farsighted
    1. Fastidious
    2. Flamboyant
    3. Flashy
    4. Flexible
    5. Formal
    6. Gentle
    7. Glamorous
    8. Grandiose
    9. Gregarious
    10. Hardworking
    11. Hyper
    12. Idle
    13. Inactive
    14. Industrious
    15. Inflexible
    16. Intense
    17. Irritating
    18. Lackadaisical
    19. Lazy
    20. Loutish
    1. Meticulous
    2. Militant
    3. Nearsighted
    4. Nervous
    5. Orderly
    6. Organized
    7. Ostentatious
    8. Peculiar
    9. Plain
    10. Polished
    11. Pompous
    12. Precise
    13. Professional
    14. Proper
    15. Provocative
    16. Pushy
    17. Resourceful
    18. Respectable
    19. Restless
    20. Rough
    1. Savage
    2. Sensual
    3. Shallow
    4. Showy
    5. Simple
    6. Sleazy
    7. Slothful
    8. Slow
    9. Sluggish
    10. Sneaky
    11. Sophisticated
    12. Swaggering
    13. Threatening
    14. Tireless
    15. Unassuming
    16. Unblemished
    17. Uncouth
    18. Vain
    19. Versatile
    20. Weak

To find a mental quirk, roll a d6 to determine which list to use. Then roll 2d20 on that list.

    1. Absent-Minded
    2. Academic
    3. Adaptable
    4. Adventurous
    5. Alert
    6. Ambitious
    7. Analytical
    8. Apathetic
    9. Argumentative
    10. Arrogant
    11. Artistic
    12. Bewildered
    13. Bookish
    14. Boring
    15. Bossy
    16. Braggart
    17. Brainy
    18. Bratty
    19. Bright
    20. Broad-Minded
    21. Bullheaded
    22. Calculating
    23. Callous
    24. Carefree
    25. Careless
    26. Cautious
    27. Charitable
    28. Clever
    29. Close-Minded
    30. Colorful
    31. Composed
    32. Confident
    33. Considerate
    34. Contemplative
    35. Controlling
    36. Conventional
    37. Cooperative
    38. Corrupt
    39. Crafty
    1. Cranky
    2. Creative
    3. Critical
    4. Curious
    5. Dauntless
    6. Deceptive
    7. Decisive
    8. Dedicated
    9. Deep
    10. Defiant
    11. Dense
    12. Dependable
    13. Determined
    14. Devoted
    15. Diligent
    16. Disciplined
    17. Dishonorable
    18. Disorganized
    19. Distracted
    20. Doubtful
    21. Down-To-Earth
    22. Driven
    23. Droll
    24. Dutiful
    25. Eccentric
    26. Eloquent
    27. Enthusiastic
    28. Exact
    29. Fair-Minded
    30. Faithful
    31. Faithless
    32. Fanatical
    33. Fearful
    34. Flighty
    35. Focused
    36. Foolhardy
    37. Forgetful
    38. Frugal
    39. Generous
    1. Gentle
    2. Gossipy
    3. Greedy
    4. Gullible
    5. Hardworking
    6. Hasty
    7. Headstrong
    8. Heartless
    9. Heedless
    10. Hesitant
    11. Honest
    12. Honorable
    13. Hospitable
    14. Hostile
    15. Humane
    16. Humorless
    17. Idealistic
    18. Illogical
    19. Imaginative
    20. Impolite
    21. Impulsive
    22. Inactive
    23. Indecisive
    24. Industrious
    25. Inflexible
    26. Ingenious
    27. Inquisitive
    28. Insecure
    29. Insightful
    30. Intense
    31. Introspective
    32. Introverted
    33. Inventive
    34. Irresponsible
    35. Keen
    36. Knowledgeable
    37. Lackadaisical
    38. Learned
    39. Logical
    1. Long-Winded
    2. Loyal
    3. Manipulative
    4. Materialistic
    5. Meddlesome
    6. Meditative
    7. Meek
    8. Melodramatic
    9. Merciful
    10. Meticulous
    11. Militant
    12. Mischievous
    13. Miserly
    14. Modest
    15. Naive
    16. Neurotic
    17. Nosy
    18. Obedient
    19. Objective
    20. Obliging
    21. Oblivious
    22. Observant
    23. Obsessive
    24. Obstinate
    25. Open-Minded
    26. Optimistic
    27. Orderly
    28. Organized
    29. Orthodox
    30. Patient
    31. Peaceful
    32. Perfectionist
    33. Persistent
    34. Pious
    35. Polite
    36. Possessive
    37. Positive
    38. Practical
    39. Pragmatic
    1. Precise
    2. Prejudiced
    3. Proactive
    4. Professional
    5. Proper
    6. Prudent
    7. Prying
    8. Radical
    9. Rash
    10. Rational
    11. Realistic
    12. Reasonable
    13. Rebellious
    14. Reckless
    15. Refined
    16. Relaxed
    17. Reliable
    18. Resentful
    19. Reserved
    20. Resourceful
    21. Responsible
    22. Restless
    23. Restrained
    24. Reverent
    25. Rude
    26. Ruthless
    27. Scatterbrained
    28. Scheming
    29. Secretive
    30. Sensible
    31. Shallow
    32. Simple
    33. Skittish
    34. Slow
    35. Snooping
    36. Speculative
    37. Spineless
    38. Stingy
    39. Structured
    1. Stubborn
    2. Studious
    3. Submissive
    4. Subservient
    5. Systematic
    6. Thick-Headed
    7. Thorough
    8. Thoughtful
    9. Thoughtless
    10. Thrifty
    11. Tolerant
    12. Truthful
    13. Two-Faced
    14. Uncertain
    15. Uncooperative
    16. Uncouth
    17. Understanding
    18. Unreliable
    19. Unstable
    20. Untruthful
    21. Vain
    22. Verbose
    23. Versatile
    24. Vigilant
    25. Visionary
    26. Vulgar
    27. Wary
    28. Wasteful
    29. Watchful
    30. Weak
    31. Well-Mannered
    32. Wicked
    33. Willful
    34. Wily
    35. Windbag
    36. Wise
    37. Wishy-Washy
    38. Witty
    39. Workaholic

To find an emotional quirk, roll a d6 to determine which list to use. Then roll 2d20 on that list.

    1. Abrasive
    2. Accepting
    3. Affable
    4. Affectionate
    5. Aggressive
    6. Agreeable
    7. Aloof
    8. Amicable
    9. Amorous
    10. Amusing
    11. Annoying
    12. Antagonistic
    13. Antisocial
    14. Anxious
    15. Appealing
    16. Appreciative
    17. Arrogant
    18. Assertive
    19. Audacious
    20. Authentic
    21. Bellicose
    22. Benevolent
    23. Big-Hearted
    24. Bitter
    25. Bloodthirsty
    26. Boisterous
    27. Bold
    28. Boorish
    29. Brave
    30. Bubbly
    31. Calm
    32. Carefree
    33. Caring
    34. Caustic
    35. Cautious
    36. Cheerful
    37. Childish
    38. Chivalrous
    39. Clingy
    1. Cocky
    2. Cold
    3. Colorful
    4. Compassionate
    5. Composed
    6. Compulsive
    7. Conceited
    8. Confrontational
    9. Congenial
    10. Considerate
    11. Contemptuous
    12. Content
    13. Constrained
    14. Courageous
    15. Courteous
    16. Covetous
    17. Cowardly
    18. Crabby
    19. Critical
    20. Crude
    21. Cruel
    22. Cynical
    23. Daring
    24. Dashing
    25. Dauntless
    26. Deep
    27. Demanding
    28. Demure
    29. Dependable
    30. Depressed
    31. Destructive
    32. Detached
    33. Devoted
    34. Dignified
    35. Diplomatic
    36. Direct
    37. Disciplined
    38. Discourteous
    39. Discreet
    1. Disdainful
    2. Docile
    3. Doting
    4. Dour
    5. Earnest
    6. Easygoing
    7. Ebullient
    8. Edgy
    9. Egocentric
    10. Encouraging
    11. Energetic
    12. Entitled
    13. Envious
    14. Erratic
    15. Evasive
    16. Excessive
    17. Excitable
    18. Extroverted
    19. Exuberant
    20. Faithful
    21. Fervent
    22. Fickle
    23. Finicky
    24. Flippant
    25. Flirtatious
    26. Frank
    27. Free-Spirited
    28. Friendly
    29. Frigid
    30. Frisky
    31. Frivolous
    32. Fun-Loving
    33. Funny
    34. Fussy
    35. Gallant
    36. Garrulous
    37. Gentle
    38. Genuine
    39. Gracious
    1. Grateful
    2. Gregarious
    3. Grouchy
    4. Guarded
    5. Gutsy
    6. Happy
    7. Happy-Go-Lucky
    8. Hateful
    9. Haughty
    10. Helpful
    11. Heroic
    12. Hopeful
    13. Humble
    14. Icy
    15. Ill-Tempered
    16. Immature
    17. Insolent
    18. Intense
    19. Jaded
    20. Jealous
    21. Jovial
    22. Judgmental
    23. Kind
    24. Lighthearted
    25. Lively
    26. Loving
    27. Macho
    28. Magnetic
    29. Mean
    30. Mercurial
    31. Merry
    32. Meticulous
    33. Militant
    34. Moody
    35. Morbid
    36. Nagging
    37. Narcissistic
    38. Negative
    39. Nervous
    1. Neurotic
    2. Nurturing
    3. Ornery
    4. Outgoing
    5. Over-Confident
    6. Overbearing
    7. Oversensitive
    8. Paranoid
    9. Passionate
    10. Pensive
    11. Peppy
    12. Persistent
    13. Pessimistic
    14. Petty
    15. Phony
    16. Playful
    17. Pompous
    18. Private
    19. Protective
    20. Proud
    21. Provocative
    22. Pushy
    23. Quarrelsome
    24. Raucous
    25. Relentless
    26. Resolute
    27. Respectful
    28. Romantic
    29. Rowdy
    30. Savage
    31. Scornful
    32. Sedate
    33. Selfish
    34. Selfless
    35. Sensual
    36. Sentimental
    37. Serene
    38. Shifty
    39. Showy
    1. Silly
    2. Sincere
    3. Sleazy
    4. Sly
    5. Sneaky
    6. Sociable
    7. Sour
    8. Spirited
    9. Spiteful
    10. Spoiled
    11. Spontaneous
    12. Spunky
    13. Sulky
    14. Superficial
    15. Swaggering
    16. Sympathetic
    17. Tame
    18. Temperamental
    19. Tenacious
    20. Tender
    21. Threatening
    22. Timid
    23. Touchy
    24. Trusting
    25. Trustworthy
    26. Uneasy
    27. Uninhibited
    28. Unruly
    29. Unstable
    30. Upbeat
    31. Vengeful
    32. Vindictive
    33. Volatile
    34. Weak-Willed
    35. Whimsical
    36. Whiny
    37. Wholesome
    38. Withdrawn
    39. Zealous

A side note: Yes, I’m aware that 2d20 on a “linear list” isn’t a fair chance for each item on the list, and I didn’t cultivate the list to make oddball quirks more or less likely. I just decided that it’d be easier to lay it out the way I did rather than a d12 followed by a d20, which would be more mathematically fair. It would also give us a chance to use those rarely-rolled d12s. Ah well, such is how I have things done.

I hope you’re able to use this list of quirks and traits in your various games!

Categories: Game Theory & Design

Show as expanded - always

New Drupal Modules - 14 December 2018 - 4:11am

Depending on the implementation of the menu it is necessary to check the
"Show as expanded"-checkbox all the time - but the default implementation of the Drupal "Add menu item"-form has false as default value.

That is just annoying - and a potential source of error and frustration!

Show as expanded - always helps the editor to do this (sometimes) unnecessary job: It checks the "Show as expanded"-checkbox by default when creating a new menu item.

Categories: Drupal

OpenSense Labs: SCORM and E-Learning. Can Drupal Fit In?

Planet Drupal - 14 December 2018 - 4:02am
SCORM and E-Learning. Can Drupal Fit In? Vasundhra Fri, 12/14/2018 - 17:32

Referred to as the de facto standard of e-learning, Shareable Content Object Reference Model aka SCORM was sponsored by US Department of Defense to bring uniformity in the standards of procuring both training content and Learning Management Systems. 

Long gone but not forgotten are those days when learning was only limited to books and classrooms. With the development of technology, virtual learning has transformed into an approachable and convenient method.

Can Drupal, which is a widely popular CMS for education websites, conform to SCORM standards? How does it ensure that it remains SCORM compliant? 

In Details - What is SCORM?

SCORM is a set of standard guidelines and specifications for the programmers on how to create LMS and training content to be shared across systems. 

The agenda to bring SCORM was to create standard units of training and educational material to be shared and reused across systems. 

Shareable Content Object refers to creating units of online training material that can be shared and reused across systems and contexts.

Reference Model refers to the existing standards in the education industry while informing developers on how to properly use them together.

Working with the authoring tools to design and produce the content, e-learning professionals, training managers, and instructional designers are the ones who typically use SCORM packages.

Content (used in courses and LMS) is exported to a SCORM package (.zip folder) to deliver the learners a seamless and smooth upload of the content.

The Evolution of SCORM

Since SCORM wasn’t built as a standard from the ground up and was primarily a reference to the existing ones, the goal was to create an interoperable system that will work well with other systems. 

Till date, there are three released versions of SCORM, each built on top of the previous one solving the problem of its predecessor.

SCORM 1.0 was merely a draft outline of the framework. It did not include any fully implementable specifications but rather contained a preview of work which was yet to come. 

SCORM 1.0 included the core elements that would become the foundation of SCORM.  

In other words, this version specified how the content should be packaged. How content should communicate to systems and how the content should be described.

  • SCORM 1.1

SCORM 1.1 was the first implementable version of SCORM. It marked the end of the trial implementation phase and the beginning of the application phase for ADL. 

  • SCORM 1.2

SCORM 1.2 solved the many problems that came along version 1.1. It provided with robust and implementable specifications, this version presented its end users with drastic cost savings. 

It was and still remains one of the most widely used version.

  • SCORM 2004 (1st - 4th edition)

The 2004 1st edition allowed content vendors to create navigation rules between SCOs. The 2nd edition covered the various shortcomings of the 1st. It brought with it Advanced Distributed Learning which focused on developing and assessing the distributed learning prototypes, enabling more effective, efficient, & affordable learner-centric solutions.

The 3rd edition removed any ambiguity, improving the sequencing specifications for greater interoperability.

The final and 4th edition was focused on disambiguation and addition of new sequencing specifications. These specifications widened the options available to the content authors which made the creation of sequenced content even more simple.

Why Should You Use SCORM?

Now that we have an idea about SCORM and its attempt of reducing chaos in the entire industry, let’s know what benefits it brings along. 

Here are some of the reasons that can contribute to a huge factor in terms of using SCORM.

  • It is a pro-consumer initiative. The online courses are eligible to be used on any compliant LMS vendor. You can alternatively upload the courses to LMS as long as you have a zip folder.
  • All the high-quality LMSs and the authoring tools are SCORM compliant so that they can build and be part of a great ecosystem of interoperability and reliability.
  • The introduction and evolution in SCORM have brought about a great reduction in overall cost of delivering training. The reason is that it has no additional cost for integrating any type of content. 
  • SCORM helps in standardizing eLearning specifications. SCORM provides a set of technical specifications that gives the developers a standard blueprint to work with.
How does SCORM Work?

Other than guiding the programmers, SCORM administers two main things, i.e packaging content and exchanging data at runtime to ensure workability. 

  • Packaging content or content aggregation model (CAM) defines how a piece of content should be presented in a physical sense. It is required by the LMS to export and import a launch content without the use of any human interventions
  • Runtime communication or data exchange helps in defining how the content is supposed to work with the LMS while it is actually being played. This is the part which describes the delivery and tracking of the content. Eventually, these are the things that include “request the learner’s name” or “tell the LMS that the learner scored 95% in a test”. 
“SCORM recommends contents to be delivered in a self-contained directory or a ZIP file.”
Working of SCORM Packages

SCORM recommends contents to be delivered in a self-contained directory or a ZIP file. These files contain content, defined by the SCORM standards and is called Package Interface File (PIF) or in other words SCORM packages. 

It contains all the files that are needed to be delivered in the content packages via SCORM runtime environment. 

Course manifest files are considered as the heart of the SCORM content packaging system. The manifest is considered as the XML file that describes the content. 

Some of the pieces involved in the packaging are:

  • Resources 

Resources are the list of parts that bundle up to be a single course. There are two types of resources that contribute to the course.

The first is the collection of one or more files that make up a logical unit presented to the users. The other is SCO or Sharable Content Object which is the unit of instructions that are composed of one or more files, to communicate with LMS. It mostly contains the instructional or static part of a content that is presented to the users via course. 

Resources should contain a complete list of all the files that are required for proper functionality of the resources. 

This is done to port the list to a new environment and function it the similar way. 


  • Organizations

Organizations are considered as the logical grouping of the parts of resources into a hierarchical arrangement. This is what is delivered to a particular learner when the item has been selected. 

  • Metadata 

Metadata are used to describe elements of a content package in its manifest file. They are important because they facilitate the discovery of learning resources across content package or in a repository. 

When a learning resource is intended to be reusable, it is a best practice to describe it with metadata. 

For describing learning content, Learning Object Metadata contains many predefined fields.   
  • Sequencing

Sequencing is responsible for determining what happens next when a learner exits an SCO. With navigational control, it orchestrates the flow and status of the course as a whole. 

However, it doesn’t affect how SCOs operate and navigate internally, that is defined by the content developer.

Drupal With SCORM 

Drupal is best at managing the digital content, but the task of planning, implementing, and assessing a specific learning process can be best done by an LMS.

How can Drupal become a platform for an organization that delivers effective training, manage learners, individual progress and record results?

Since Drupal is not an LMS, its distributions and modules help it become more effective. When it comes to SCORM compliance, Drupal has Opigno LMS as its core distribution.  

Opigno LMS is a Drupal distribution that integrates H5P technology (an open-source content collaboration framework based on javascript), which enable you to create rich interactive training content. It allows you to maintain the training paths that are organized in courses and lessons. 

This distribution includes the latest version of Opigno core that offers you effective and innovative online training tools.

Opigno LMS is fully compliant with SCORM (1.2 and 2004 v3) which offers a powerful editor for content management, in particular, to create course material. These courses can eventually be grouped into classes to provide easy and manageable training paths. It should also be noted that this distribution is the quickest way to present a functional e-learning platform out of the box, with the users, courses, certificates, etc. 

Based on this distribution, Opigno SCORM implements the SCORM feature in Opigno which allows you to load and play SCORM packages within Opigno training and is also responsible to handle and manage training paths that are organized in courses and lessons. 

Opigno LMS comprises an app store that also enables you to install latest features easily, without asking you to upgrade the current install. 

According to the requirements and expectations of the learners, Opigno LMS can be summarized by the following specification:

  1. Scalable to manage the hardships of a dynamic and modifying environment
  2. Safe and easy to update
  3. Support further development of customized functionalities with proper integration with the core solution in a modular way
  4. Open to letting each client be free and independent
  5. And most importantly, easy integration with other enterprise systems 

H5P javascript framework makes it easy to create, share and reuse HTML5 content and applications, allowing users to built richer content. With the use of H5P, the authors can edit and construct videos, presentation games, advertisement etc. To create an e-learning platform, the integration of HP5 framework and SCORM is essential.  

H5P SCORM/xAPI module allows to upload and view SCROM and xAPI packages. It uses two HP5 libraries namely (HP5 libraries are used to create and share rich content and applications)

  1. H5P SCORM/xAPI library to view SCORM package.
  2. H5PEditor SCORM library to upload and validate SCORM package.

You can create a new content type by uploading it in the preceding step of a process using the H5P editor.

In the nutshell

Different people adopt SCORM for different reasons. You and your team are the only ones that can decide whether sticking to SCORM is worthwhile or not. 

Depending upon the nature of your requirement and the course of action, it can be decided which platform is best for you. At OpenSense labs, we have been giving adequate solutions to our customers. Contact us on to make the right decision on the correct choice of a platform. 

blog banner blog image Drupal Drupal 8 SCORM LMS Learning Management System Shareable Content Object Reference Model SCORM 1.0 SCORM 1.1 SCORM 1.2 SCORM 2004 E-learning Content Aggregation Model Organization Sequencing Resource Opigno LMS Blog Type Articles Is it a good read ? On
Categories: Drupal

Embed video plugin integrated in CKEDITOR

New Drupal Modules - 14 December 2018 - 12:18am

This is used to insert the embedded videos in the CKEditor .This plugin has the following functionality:-
a)Takes the Input as embedded code
b)Generate the HTML of the input code and insert the video in CKEDITOR.
c) This module is multipurpose module so it can be used to insert the video from YouTube website or sound cloud website or any other website.

Categories: Drupal

Business of Gaming Retail: Basic Technology Needs

RPGNet - 14 December 2018 - 12:00am
Technology can\\\'t be an afterthought.
Categories: Game Theory & Design

Grazitti Interactive: Grazitti’s Drupal Marketo Connector Helps Personalize Content on Your Drupal Website

Planet Drupal - 13 December 2018 - 11:02pm

Drupal is one of the leading open source and secure content management systems used by businesses across the world. Drupal [...]

Categories: Drupal

Blizzard pulls devs off Heroes of the Storm and cuts eSports support

Social/Online Games - Gamasutra - 13 December 2018 - 4:33pm

Today Blizzard announced plans to pull developers off of its free-to-play MOBA Heroes of the Storm and discontinue Heroes eSports events in a bid to position the game for "long-term sustainability." ...

Categories: Game Theory & Design

Stripe Gate

New Drupal Modules - 13 December 2018 - 4:23pm

Initial works to bridge between Stripe and Drupal on a decoupled approach.

Categories: Drupal

Capgemini Engineering: A framework for progressively decoupled Drupal

Planet Drupal - 13 December 2018 - 4:00pm

A lot of people have been jumping on the headless CMS bandwagon over the past few years, but I’ve never been entirely convinced. Maybe it’s partly because I don’t want to give up on the sunk costs of what I’ve learned about Drupal theming, and partly because I’m proud to be a boring developer, but I haven’t been fully sold on the benefits of decoupling.

On our current project, we’ve continued to take an approach that Dries Buytaert has described as “progressively decoupled Drupal”. Drupal handles routing, navigation, access control, and page rendering, while rich interactive functionality is provided by a JavaScript application sitting on top of the Drupal page. In the past, we’d taken a similar approach, with AngularJS applications on top of Drupal 6 or 7, getting their configuration from Drupal.settings, and for this project we decided to use React on top of Drupal 8.

There are a lot of advantages to this approach, in my view. There are several discrete interactive applications on the site, but the bulk of the site is static content, so it definitely makes sense for that content to be rendered by the server rather than constructed in the browser. This brings a lot of value in terms of accessibility, search engine optimisation, and performance.

A decoupled system is almost inevitably more complex, with more potential points of failure.

The application can be developed independently of the CMS, so specialist JavaScript developers can work without needing to worry about having a local Drupal build process.

If at some later date, the client decides to move away from Drupal, or at the point where we upgrade to Drupal 9, the applications aren’t so tightly coupled, so the effort of moving them should be smaller.

Having made the decision to use this architecture, we wanted a consistent framework for managing application configuration, to make sure we wouldn’t need to keep reinventing the wheel for every application, and to keep things easy for the content team to manage.

The client’s content team want to be able to control all of the text within the application (across multiple languages), and be able to preview changes before putting them live.

There didn’t seem to be an established approach for this, so we’ve built a module for it.

As we’ve previously mentioned, the team at Capgemini are strongly committed to supporting the open source communities whose work we depend on, and we try to contribute back whenever we can, whether that’s patches to fix bugs and add new features, or creating new modules to fill gaps where nothing appropriate already exists. For instance, a recent client requirement to promote their native applications led us to build the App Banners module.

Aiming to make our modules open source wherever possible helps us to think in systems, considering the specific requirements of this client as an example of a range of other potential use cases. This helps to future-proof our code, because it’s more likely that evolving requirements can be met by a configuration change, rather than needing a code change.

So, guided by these principles, I’m very pleased to announce the Single Page Application Landing Page module for Drupal 8, or to use the terrible acronym that it has unfortunately but inevitably acquired, SPALP.

On its own, the module doesn’t do much other than provide an App Landing Page content type. Each application needs its own module to declare a dependency on SPALP, define a library, and include its configuration as JSON (with associated schema). When a module which does that is installed, SPALP takes care of creating a landing page node for it, and importing the initial configuration onto the node. When that node is viewed, SPALP adds the library, and a link to an endpoint serving the JSON configuration.

Deciding how to store the app configuration and make all the text editable was one of the main questions, and we ended up answering it in a slightly “un-Drupally” way.

On our old Drupal 6 projects, the text was stored in a separate ‘Messages’ node type. This was a bit unwieldy, and it was always quite tricky to figure out what was the right node to edit.

For our Drupal 7 projects, we used the translation interface, even on a monolingual site, where we translated from English to British English. It seemed like a great idea to the development team, but the content editors always found it unintuitive, struggling to find the right string to edit, especially for common strings like button labels. It also didn’t allow the content team to preview changes to the app text.

We wanted to maintain everything related to the application in one place, in order to keep things simpler for developers and content editors. This, along with the need to manage revisions of the app configuration, led us down the route of using a single node to manage each application.

This approach makes it easy to integrate the applications with any of the good stuff that Drupal provides, whether that’s managing meta tags, translation, revisions, or something else that we haven’t thought of.

The SPALP module also provides event dispatchers to allow configuration to be altered. For instance, we set different API endpoints in test environments.

Another nice feature is that in the node edit form, the JSON object is converted into a usable set of form fields using the JSON forms library. This generic approach means that we don’t need to spend time copying boilerplate Form API code to build configuration forms when we build a new application - instead the developers working on the JavaScript code write their configuration as JSON in a way that makes sense for their application, and generate a schema from that. When new configuration items need to be added, we only need to update the JSON and the schema.

Each application only needs a very simple Drupal module to define its library, so we’re able to build the React code independently, and bring it into Drupal as a Composer dependency.

The repository includes a small example module to show how to implement these patterns, and hopefully other teams will be able to use it on other projects.

As with any project, it’s not complete. So far we’ve only built one application following this approach, and it seems to be working pretty well. Among the items in the issue queue is better integration with configuration management system, so that we can make it clear if a setting has been overridden for the current environment.

I hope that this module will be useful for other teams - if you’re building JavaScript applications that work with Drupal, please try it out, and if you use it on your project, I’d love to hear about it. Also, if you spot any problems, or have any ideas for improvements, please get in touch via the issue queue.

A framework for progressively decoupled Drupal was originally published by Capgemini at Capgemini Engineering on December 14, 2018.

Categories: Drupal

Hook 42: 'Tis the Season for Giving: A Retrospective on Drupal Contribution

Planet Drupal - 13 December 2018 - 3:02pm

'Tis the season for giving. This is the first of many articles about why and how to give back to the community. The information can be used by individuals, agencies, and companies that want to increase their community contribution efforts.

Categories: Drupal

User Online Status

New Drupal Modules - 13 December 2018 - 2:08pm

* description needs to be written
* screenshots need to be added
* tests need to be written
* README needs to be added

Categories: Drupal

Lullabot: The Content Strategy Team

Planet Drupal - 13 December 2018 - 1:53pm
Mike and Matt talk with the team that helped implement content strategy on
Categories: Drupal

Twitch sells Curse Media after two years

Social/Online Games - Gamasutra - 13 December 2018 - 1:46pm

Wiki hosting service Fandom (formerly known as Wikia) announced that it is currently in the process of acquiring Curse Media, which hosts a collection of gaming websites. ...

Categories: Game Theory & Design

Texas Creative: Doing Business with Government Agencies

Planet Drupal - 13 December 2018 - 1:30pm

Learn what steps your full-service ad agency needs to take in order to work with Federal, State, and Local Agencies. Public affairs campaigns and website development are today’s big business opportunity.

Read More
Categories: Drupal

League of Legends will no longer support Windows XP and Vista in 2019

Social/Online Games - Gamasutra - 13 December 2018 - 12:41pm

League of Legends is officially ending support for Windows XP and Vista as of May 14, 2019.  ...

Categories: Game Theory & Design

Kudos Slider

New Drupal Modules - 13 December 2018 - 9:22am

It's a simple responsive slider.Its allow to customize as per requirement basis.

Categories: Drupal


Subscribe to As If Productions aggregator