]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Updated the instructions
authorcash <cash.costello@gmail.com>
Sat, 1 Oct 2011 21:38:47 +0000 (17:38 -0400)
committercash <cash.costello@gmail.com>
Sat, 1 Oct 2011 21:38:47 +0000 (17:38 -0400)
mod/embed/README.txt
mod/embed/views/default/js/embed/embed.php

index 33c9fff6526c1d79a79a2b2eb00b137b3228ed66..c7ce2e5281e99e5397c542c34c42f8ad9414f46d 100644 (file)
-Embed plugin - Point-and-click embedding using ECML.
+Embed plugin
 
 CONTENTS:
        1. Overview
-       2. Extending Embed
-               1. Registering and Populating Embed Sections
-               2. Registering Upload Sections
-               3. Advanced Layouts
-               4. Javascript
-       3. Other Editors and Embed
+       2. Adding a Tab
+       3. Populating a Select Tab
+       4. Populating an Upload Tab
+       5. Other WYSIWYG Editors and Embed
 
        
 1. Overview
        The Embed plugin is a simple way to allow users to link to or embed
        their personal network content or third party resources in any text area.
-       
-       Embed includes support for the default input/longtext view, but is easily
-       extendable to include support for rich text editors like TinyMCE or CK 
-       Editor.
 
+       The Embed plugin adds a menu item to the longtext menu. Clicking on this
+       link pops up a lightbox. The lightbox has two types of tabs: one for
+       selecting content to embed and one for uploading new content.
 
-2. Extending Embed
-       The Embed plugin can be extended by other plugins using a combination
-       of plugin hooks and specific views.
-       
-       Plugins can register a new content section or a new upload section.
-       
-       Plugins can also provide special views for their embed section, if
-       they require something the default view doesn't provide.
+2. Adding a Tab
+       The Embed plugin uses the menu system to manage its tabs. Use
+       elgg_register_menu_item() for the embed menu to add a new tab like this:
 
+       $item = ElggMenuItem::factory(array(
+               'name' => 'file',
+               'text' => elgg_echo('file'),
+               'section' => 'select',
+               'data' => array(
+                       'options' => array(
+                               'type' => 'object',
+                               'subtype' => 'file',
+                       ),
+               ),
+       ));
+       elgg_register_menu_item('embed', $item);
 
-2.1  Registering and Populating Embed Sections
-       Plugins providing embed content should reply to two hooks: embed_get_sections:all
-       and embed_get_items:$section_name.
-       
-       Embed emits the 'embed_get_sections' hook to populate the tabs of the modal display.
-       Plugins supporting embed should reply by pushing an array element to the passed
-       $value.
-       
-       Register plugins hooks like this:
-       
-               register_plugin_hook('embed_get_sections', 'all', 'my_plugin_embed_get_sections');
-               
-               function my_plugin_embed_get_sections($hook, $type, $value, $params) {
-                       $value['videolist'] = array(
-                               'name' => elgg_echo('my_plugin'),
-                               'layout' => 'list',
-                               'icon_size' => 'medium',
-                       );
-               
-                       return $value;
-               }
-       
-       The index of the returned array is the id used for the Embed section.
-       
-       Options available in the array value are:
-               name => The friendly name to display in the tab
-               layout => The layout style to use.  Layouts are found in the 
-                               embed/layouts/$layout and embed/item/$layout views.  
-                               Default supported layouts are list and gallery.
-               icon_size => The icon size to use for in the item list.
-               
-               
-       Embed emits the 'embed_get_items' hook to populate the embed section.  Plugins
-       supporting embed should reply by returning an array of ElggEntities, which will
-       be formatted by Embed.  If you need specific formatting for items, see section 2.3.
-       
-               register_plugin_hook('embed_get_items', 'videolist', 'videolist_embed_get_items');
-               
-               function my_plugin_embed_get_items($hook, $type, $value, $params) {
-                       $options = array(
-                               'owner_guid' => get_loggedin_userid(),
-                               'type_subtype_pair' => array('object' => 'my_plugin_type'),
-                               'count' => TRUE
-                       );
-               
-                       if ($count = elgg_get_entities($options)) {
-                               $value['count'] += $count;
-                       
-                               unset($options['count']);
-                               $options['offset'] = $params['offset'];
-                               $options['limit'] = $params['limit'];
-                       
-                               $items = elgg_get_entities($options);
-                       
-                               $value['items'] = array_merge($items, $value['items']);
-                       }
-               
-                       return $value;
-               }
-               
-               Values passed in $params are:
-                       offset - Offset for entity list.
-                       limit - Limit for entity list.
-                       section - The current active section.
-                       upload_sections - Valid upload sections.
-                       internal_name - Internal name of the input field
-                       
-               The function should return $value as:
-                       items - An array of ElggEntities
-                       count - The count of all available entities to embed
-                       
-               In case other plugins want to mangle the value, be sure to
-               check for existing values before appending.
+       Parameters:
+               name: The unique name of the tab.
+               text: The text shown on the tab
+               section: 'select' for embed selection or 'upload' for uploading new content
+               data: an array of parameters for creating the tab and its content. See
+                       the two sections below for data key values for the two tab types.
 
+       Select tab data parameters:
+               options: array of options passed to elgg_list_entities()
 
-2.2 Registering Upload Sections
-       Embed includes a special tab, Upload, that allows users to immediatley
-       upload a new item.  Like the embed sections, plugins can extend this
-       to add their own upload form.
-       
-       Embed emits the embed_get_upload_sections:all hook to populate the
-       dropdown in the upload tab.  Plugins should respond to this hook
-       by returning an array with details about the upload section:  
-       
-               register_plugin_hook('embed_get_upload_sections', 'all', 'my_plugin_embed_get_upload_sections');
-               
-               function my_plugin_embed_get_upload_sections($hook, $type, $value, $params) {
-                       $value['my_plugin'] = array(
-                               'name' => elgg_echo('my_plugin'),
-                               'view' => 'my_plugin/forms/embed_upload'
-                       );
-       
-                       return $value;
-               }
-               
-       The array index is the ID of the upload section, and the values are:
-               name - The friendly name of the upload section
-               view - The view to use for the upload section's content
-       
-       The upload form view should use AJAX to upload a file and return
-       the user to the correct section or automatically insert the new upload
-       into the text area.  See Tidypics as an example. 
-       
-       
-2.3 Advanced Layouts
-       By default, Embed will automatically format items returned by 
-       embed_get_items hooks.  If you need special formatting you can
-       override both the content and layout views.
-       
-       Embed looks for a section-specific views before defaulting to built
-       in formatting:
-               embed/$section/content - The content of the embed section
-                                                               including all headers and navigation elements.
-               embed/$section/item/$layout - The content of the embed section
-                                                               for the specific layout.  Inserted
-                                                               between navigation elements.
-                                                               
-       Embed also supports adhoc layouts that can be shared among different plugins.
-       To use a specific layout, register the embed section with your own layout
-       and create the appropriate layout view:
-       
-               function my_plugin_embed_get_sections($hook, $type, $value, $params) {
-                       $value['videolist'] = array(
-                               'name' => elgg_echo('my_plugin'),
-                               'layout' => 'shared_embed_layout',
-                               'icon_size' => 'medium',
-                       );
-               
-                       return $value;
-               }
-               
-               Create the views 'embed/layouts/shared_embed_layout' and 
-               'embed/items/shared_embed_layout.'  See the default list and 
-               gallery layouts as examples.
-               
-               
-2.4 Javascript
-       If you use a custom layout you need to provide a way to insert
-       the user's selection into the current editor.  Usually this will be
-       an onClick event via Javascript.  Embed provides a helper function for
-       this:
-       
-       elggEmbedInsertContent(content, textAreaId)
-       
-       Content is the pre-formatted content to insert into the text area,
-       and textAreaId is the name of the text area.  This name is
-       sent via GET as 'internal_name.'
-       
+       Upload tab data parameters:
+               view: the view used to render the tab content
+
+       See the file plugin for examples of registering both tab types.
+
+
+3. Populating a Select Tab
+       Nothing should be required other than setting the options parameter array
+       when registering the tab. See the view embed/item to see how an entity is
+       rendered.
+
+4. Populating an Upload Tab
+       The view that is registered must be defined. It must include a form for
+       uploading the content. The form must be wrapped in a div with the class
+       .embed-upload. Somewhere in the view must be a hidden input field with the
+       name embed_hidden with its value be the name of the tab to forward the user
+       to when uploading is complete.
+
+       See the view embed/file_upload/content for an example
        
-3. Other Editors and Embed
+5. Other WYSIWYG Editors and Embed
        Embed ships with support for the default input/longtext textarea.
-       Plugins replacing this view are expected to include Javascript to
+       Plugins replacing this view are expected to include JaVascript to
        allow embed to work with the new editors.
        
-       The elggEmbedInsertContent() JS function can be extened for custom
-       text editors by extending the embed/custom_insert_js view.  Plugins 
-       should extend this view with javascript code that inserts
-       content into the specific text area.  Variables available within
-       this view are:
-               str content The content to insert.
-               str textAreaId The name of the textarea to receive the content.
-       
-       Note: Extend this view; don't override it.  It is important to correctly
-       extend this view for compatibility across multiple plugins and textarea 
-       states.  Your custom JS should run without error no matter plugin order 
-       or rich text editor status.  See TinyMCE as an example of how to losely 
-       extend this function.
\ No newline at end of file
+       To add custom JavaScript into the Embed plugin's elgg.embed.insert() function,
+       override the view embed/custom_insert_js. The textarea jQuery object is
+       available as the variable textArea and the content to be inserted is the
+       variable content. See the TinyMCE plugin for an example of this view.
\ No newline at end of file
index 6d4e2e4ea8811f11a6b255193d983a9210f36973..840d8f89cc4714b0ebda7b2ac7cce219b685f0bd 100644 (file)
@@ -14,9 +14,9 @@ elgg.embed.init = function() {
        });
 
        // special pagination helper for lightbox
-       $('.embed-wrapper .elgg-pagination a').live('click', elgg.embed.loadContent);
+       $('.embed-wrapper .elgg-pagination a').live('click', elgg.embed.forward);
 
-       $('.embed-section').live('click', elgg.embed.loadContent);
+       $('.embed-section').live('click', elgg.embed.forward);
 
        $('.embed-upload .elgg-form').live('submit', elgg.embed.submit);
 }
@@ -31,25 +31,20 @@ elgg.embed.init = function() {
  */
 elgg.embed.insert = function(event) {
        var textAreaId = elgg.embed.textAreaId;
+       var textArea = $('#' + textAreaId);
 
        // generalize this based on a css class attached to what should be inserted
        var content = ' ' + $(this).find(".elgg-image").html() + ' ';
        
+       textArea.val(textArea.val() + content);
+       textArea.focus();
+       
 <?php
-// If a wysiwyg editor has been registered, it handles the insertion by
-// overriding the embed/custom_insert_js view. See the TinyMCE plugin for an
-// example of this.
-$custom_insert_code = elgg_view('embed/custom_insert_js');
-if ($custom_insert_code) {
-       echo $custom_insert_code;
-} else {
-?>
-       $('#' + textAreaId).val($('#' + textAreaId).val() + content);
-       $('#' + textAreaId).focus();
-<?php
-}
+// See the TinyMCE plugin for an example of this view
+ echo elgg_view('embed/custom_insert_js');
 ?>
 
+
        $.fancybox.close();
 
        event.preventDefault();
@@ -98,7 +93,7 @@ elgg.embed.submit = function(event) {
  * @param {Object} event
  * @return void
  */
-elgg.embed.loadContent = function(event) {
+elgg.embed.forward = function(event) {
        $('.embed-wrapper').parent().load($(this).attr('href'));
        event.preventDefault();
 }