Child pages
  • Tutorial - Rich Text Inline Edit

Documentation for a historical release of Infusion: 1.3
Please view the Infusion Documentation site for the latest documentation.
If you're looking for Fluid Project coordination, design, communication, etc, try the Fluid Project Wiki.

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

This is work in progress. Please do not use as reference.

This documentation refers to the latest trunk version of the Rich Text Inline Edit code. For documentation specific earlier releases, please see Previous Versions of Tutorials

This page will walk you through an example of adding the Fluid Rich Text Inline Edit component to an HTML file. For more general information about the Inline Edit API, see Rich Text Inline Edit API.

This tutorial assumes that:

  • you are already familiar with HTML, Javascript and CSS
  • you are familiar with what the Inline Edit is and does
  • now you just want to know how to add it to your file.

Tutorial: How to Use the Inline Edit

Scenario

You've created a database to keep track of your vast collection of CDs, and you're working on a web interface for it. When viewing the details of a CD, you would like to very easily add a personal review. Prone to rambling, you know you will want to add some basic styling so the text is easier to read. This tutorial will show you how to use the Fluid Rich Text Inline Edit for this.

There are four basic steps to adding the Inline Edit to your application:

  • Step 1: Add the Markup
  • Step 2: Write the script
  • Step 3: Add the Fluid library to your HTML
  • Step 4: Apply styles

The rest of this tutorial will explain each of these steps in detail.

On This Page
Still need help?

Join the infusion-users mailing list and ask your questions there.


Step 1: Prepare your markup

Let's assume that you're working with some HTML that displays the information about a CD in your collection - something simple like this:

<h1>Album Details</h1>

<h2>Artist</h2>
Portishead

<h2>Album</h2>
Third

<h2>Year</h2>
2008

<h2>Label</h2>
Universal Music

<h2>Review</h2>
<p>After a hiatus, <strong>Portishead</strong> is back with their first studio 
album in 6 years. <em>Third</em> brings back the familiar and
the new, and none of this is best exemplified than in the track
<em>Machine Gun</em>.</p>

<p>It seems that regardless of how <strong>Portishead</strong> sounds now, the one
thing that has stayed constant is their refusal to be ordinary.</p>

In a browser window, this might look something like this:

Unable to render embedded object: File (inline-edit-1.jpeg) not found.

The Changes

The simplest way to make many pieces of text editable requires you to do three things:

  1. define the block of text you want to make editable by using a container.
  2. define how you want the rich inline edit component to look by using a container.
  3. group the above two containers inside a parent container.

If we want to make the review editable editable, then we could

  1. wrap entire review text inside a <span> element and give it the default class flc-inlineEdit-text.
  2. create a new <span> element with the default class name flc-inlineEdit-editContainer. We also define how big we want the rich edit field to be, and add Save and Cancel buttons.
  3. place the above two <span> containers inside a <div> and give it a unique ID.

This might look like the HTML sample to the right.

<h1>Album Details</h1>

<h2>Artist</h2>
Portishead

<h2>Album</h2>
Third

<h2>Year</h2>
2008

<h2>Label</h2>
Universal Music

<h2>Review</h2>
<div id="cd-review">
  <span class="flc-inlineEdit-text">
    <p>After a hiatus, <strong>Portishead</strong> is back with their first studio 
    album in 6 years. <em>Third</em> brings back the familiar and
    the new, and none of this is best exemplified than in the track
    <em>Machine Gun</em>.</p>

    <p>It seems that regardless of how <strong>Portishead</strong> sounds now, the one
    thing that has stayed constant is their refusal to be ordinary.</p>
  </span>

  <span class="flc-inlineEdit-editContainer">
    <textarea rows="10" cols="80" ></textarea>
    <button class="save">Save</button> <button class="cancel">Cancel</button>
  </span>
</div>

That's all - these are the only changes you need to make to your HTML.


Step 2: Write the script

There are a some scripts you will need to add to your HTML file before the Rich Text Inline Edit will function properly.

Define Button Behaviour

The <button> elements by themselves will not do anything special unless we specify some behaviour. This can be done by adding the following script:

function makeButtons(editor) {
  $(".save", editor.container).click(function(){
    editor.finish();
    return false;
  });

  $(".cancel", editor.container).click(function(){
    editor.cancel();
    return false;
  });
}

This will make the Save and Cancel buttons perform what we'd expect.

Initialize the Rich Text Inline Editor

Now you need to initialize the Rich Text Inline Editor.

If using TinyMCE, this can be accomplished by the following code:

var richEditor = fluid.inlineEdit.tinyMCE("#cd-review");
makeButtons(richEditor);

If using FCKEditor, this can be accomplished by the following code:

var richEditor = fluid.inlineEdit.FCKEditor("#cd-review", 
  {FCKEditor: {BasePath: "/lib/fckeditor/"}});
makeButtons(richEditor);

This function (regardless of the editor being used) will look inside the element with the "cd-review" ID (in this case, your <div> element) for anything with the flc-inlineEdit-text and flc-inlineEdit-editContainer class, and convert it into an Rich Text Inline Edit field.

By putting the initialization function inside the jQuery(document).ready() call, you ensure that all of your markup is ready before you try to initialize the Inline Edit components.

This script can be placed in a <script> block at the end of your document.


Step 3: Add the Fluid library to your HTML

You'll need to add the Fluid library to you HTML file. In the header of the file, link to the Javascript files with <script> tags:

FCKEditor Inetgration:

<script type="text/javascript" src="lib/fckeditor/fckeditor.js"></script>
<script type="text/javascript" src="InfusionAll.js"></script>

TinyMCE Inetgration:

<script type="text/javascript" src="lib/tiny_mce//tiny_mce.js"></script>
<script type="text/javascript" src="InfusionAll.js"></script>

Alternatively, the individual file requirements if using FCKEditor are:

<script type="text/javascript" src="lib/fckeditor/fckeditor.js"></script>
<script type="text/javascript" src="lib/jquery/core/js/jquery.js"></script>
<script type="text/javascript" src="lib/jquery/ui/js/ui.core.js"></script>
<script type="text/javascript" src="lib/jquery/plugins/tooltip/js/jquery.tooltip.js"></script>
<script type="text/javascript" src="framework/core/js/jquery.keyboard-a11y.js"></script>
<script type="text/javascript" src="framework/core/js/Fluid.js"></script>
<script type="text/javascript" src="components/inlineEdit/js/InlineEdit.js"></script>
<script type="text/javascript" src="components/inlineEdit/js/InlineEditIntegrations.js"></script>

Otherwise, the individual file requirements if using TinyMCE are:

<script type="text/javascript" src="lib/tiny_mce//tiny_mce.js"></script>
<script type="text/javascript" src="lib/jquery/core/js/jquery.js"></script>
<script type="text/javascript" src="lib/jquery/ui/js/ui.core.js"></script>
<script type="text/javascript" src="lib/jquery/plugins/tooltip/js/jquery.tooltip.js"></script>
<script type="text/javascript" src="framework/core/js/jquery.keyboard-a11y.js"></script>
<script type="text/javascript" src="framework/core/js/Fluid.js"></script>
<script type="text/javascript" src="components/inlineEdit/js/jquery.tinymce.js"></script>
<script type="text/javascript" src="components/inlineEdit/js/InlineEdit.js"></script>
<script type="text/javascript" src="components/inlineEdit/js/InlineEditIntegrations.js"></script>

Important Note: FCKEditor and TinyMCE

FCKEditor and TinyMCE are not included in the Infusion bundle, but can be downloaded from their respective websites. Refer to components/inlineEdit/js/InlineEditInegrations.js - the integration file - to see how to technically integrate these editors into your application.


Step 4: Apply styles

If you look at the file in a browser now, it doesn't look any different than it looked before - there's no way to tell that the album titles are editable. That's what the styles are for.

Like all other components in the Inline Edit family, the Rich Text Inline Edit component can be skinned "out of the box" by including the Fluid Skinning System (FSS) CSS skin files. Just be sure to put the following in you document:

<link rel="stylesheet" type="text/css" href="framework/fss/css/fss-layout.css" />
<link rel="stylesheet" type="text/css" href="framework/fss/css/fss-theme.mist.css" />
<link rel="stylesheet" type="text/css" href="framework/fss/css/fss-theme.hc.css" />
<link rel="stylesheet" type="text/css" href="components/inlineEdit/css/InlineEdit.css" />

and to attach a class attribute that represents the skin you want to the components container, such as:

<div id="cd-review" class="fl-theme-mist">
    ...
</div>

The above code would make use of the fss-theme.mist.css skin file.

If you wish to define your own styles instead, use the following information:

The Inline Edit adds classes to the display text element that can be used to style the element to let users know that the text is editable - that is, to make the functionality 'discoverable.' These classes are applied at various 'interesting moments,' for example when the cursor hovers over the editable text, or when Tab key is used to move focus to the text.

Important note

The visual appearance of the styles in the example below are just that: examples. You are free to create whatever styles you like. The important thing to understand is

  • what the interesting moments are, and
  • what the names of the styles for those moments are

The styles that are applied by the Inline Edit, and the 'interesting moments' they are used for, are:

Style: "fl-inlineEdit-invitation"
When: mouse hover and keyboard focus
Why: so that users can know that the text is editable

Sample style:

.fl-inlineEdit-invitation {
   background-color: #FFECB3 !important;
   border: 1px solid #CCC !important;
}

Style: "fl-inlineEdit-focus"
When: keyboard focus on the text
Why: so that users know that focus is on the text, and that they can press Enter to start editing

Sample style:

.fl-inlineEdit-focus {
    border: 2px solid #777777;
}

If we add a stylesheet with these styles, the page will look like this when the mouse hovers over the album genre:

Unknown macro: {center}

Unable to render embedded object: File (drop-down-2.png) not found.


  • No labels