]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
First pass at a loosely couple embed plugin using ECML.
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Tue, 1 Jun 2010 22:33:58 +0000 (22:33 +0000)
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Tue, 1 Jun 2010 22:33:58 +0000 (22:33 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@6315 36083f99-b078-4883-b0ff-0f9b5a30f544

13 files changed:
mod/embed/README.txt
mod/embed/embed.php
mod/embed/manifest.xml
mod/embed/start.php
mod/embed/views/default/embed/addcontentjs.php
mod/embed/views/default/embed/embed.php [new file with mode: 0644]
mod/embed/views/default/embed/item/list.php [new file with mode: 0644]
mod/embed/views/default/embed/js.php
mod/embed/views/default/embed/layouts/gallery.php [new file with mode: 0644]
mod/embed/views/default/embed/layouts/list.php [new file with mode: 0644]
mod/embed/views/default/embed/link.php
mod/embed/views/default/embed/media.php
mod/embed/views/default/embed/upload.php

index 17f867d7aaf4b4561c5e2ff63de5bb7ca9abe180..f81d5b14afefdb1b983ebf7a8ed25f73488584e1 100644 (file)
@@ -6,5 +6,4 @@ http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 The embed plugin requires Elgg 1.5 (or prior to the Elgg 1.5
 release, Elgg revision 2634 or above) and the file plugin.
 
-It makes use of the jQuery form plugin, available at:
-http://malsup.com/jquery/form/
\ No newline at end of file
+To insert into the active editor, use elggEmbedInsert(html).
\ No newline at end of file
index 3585474919f3168a8bce829525030f6d29d9c1bf..09b3ac29be420811f89e40f730f8117a4c3577d0 100644 (file)
@@ -1,37 +1,35 @@
 <?php
 // This page can only be run from within the Elgg framework
-       if (!is_callable('elgg_view')) exit;
-       
+if (!is_callable('elgg_view')) exit;
+
 // Get the name of the form field we need to inject into
-       $internalname = get_input('internalname');
-       
-       if (!isloggedin()) exit;
-       
-       global $SESSION;
-       
-       $offset = (int) get_input('offset',0);
-       $simpletype = get_input('simpletype');
-       $entity_types = array('object' => array('file'));
+$internalname = get_input('internalname');
 
-       if (empty($simpletype)) {
-               $count = elgg_get_entities(array('type' => 'object', 'subtype' => 'file', 'owner_guid' => $SESSION['user']->guid, 'count' => TRUE));
-               $entities = elgg_get_entities(array('type' => 'object', 'subtype' => 'file', 'owner_guid' => $SESSION['user']->guid, 'limit' => 6, 'offset' => $offset));
-       } else {
-               $count = elgg_get_entities_from_metadata(array('metadata_name' => 'simpletype', 'metadata_value' => $simpletype, 'types' => 'object', 'subtypes' => 'file', 'owner_guid' => $SESSION['user']->guid, 'limit' => 6, 'offset' => $offset, 'count' => TRUE));
-               $entities = elgg_get_entities_from_metadata(array('metadata_name' => 'simpletype', 'metadata_value' => $simpletype, 'types' => 'object', 'subtypes' => 'file', 'owner_guid' => $SESSION['user']->guid, 'limit' => 6, 'offset' => $offset));
-       }
-       
-       $types = get_tags(0,10,'simpletype','object','file',$SESSION['user']->guid);
-       
-// Echo the embed view
-       echo elgg_view('embed/media', array(
-                                               'entities' => $entities,
-                                               'internalname' => $internalname,
-                                               'offset' => $offset,
-                                               'count' => $count,
-                                               'simpletype' => $simpletype,
-                                               'limit' => 6,
-                                               'simpletypes' => $types,
-                                  ));
+if (!isloggedin()) exit;
+
+global $SESSION;
+
+$offset = (int) get_input('offset',0);
+$simpletype = get_input('simpletype');
+$entity_types = array('object' => array('file'));
 
-?>
\ No newline at end of file
+if (empty($simpletype)) {
+       $count = elgg_get_entities(array('type' => 'object', 'subtype' => 'file', 'owner_guid' => $SESSION['user']->guid, 'count' => TRUE));
+       $entities = elgg_get_entities(array('type' => 'object', 'subtype' => 'file', 'owner_guid' => $SESSION['user']->guid, 'limit' => 6, 'offset' => $offset));
+} else {
+       $count = elgg_get_entities_from_metadata(array('metadata_name' => 'simpletype', 'metadata_value' => $simpletype, 'types' => 'object', 'subtypes' => 'file', 'owner_guid' => $SESSION['user']->guid, 'limit' => 6, 'offset' => $offset, 'count' => TRUE));
+       $entities = elgg_get_entities_from_metadata(array('metadata_name' => 'simpletype', 'metadata_value' => $simpletype, 'types' => 'object', 'subtypes' => 'file', 'owner_guid' => $SESSION['user']->guid, 'limit' => 6, 'offset' => $offset));
+}
+
+$types = get_tags(0, 10, 'simpletype', 'object', 'file', $SESSION['user']->guid);
+
+// Echo the embed view
+echo elgg_view('embed/media', array(
+                                       'entities' => $entities,
+                                       'internalname' => $internalname,
+                                       'offset' => $offset,
+                                       'count' => $count,
+                                       'simpletype' => $simpletype,
+                                       'limit' => 6,
+                                       'simpletypes' => $types,
+                       ));
index f0f82a699873a536b99acddf98a2784428cab54a..f54de1fa335cb4e8b1ccf1b43576ebf9321e9f0c 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <plugin_manifest>
        <field key="author" value="Curverider" />
-       <field key="version" value="1.7" />
+       <field key="version" value="1.8" />
        <field key="description" value="Allows users to easily upload and embed media into text areas." />
        <field key="website" value="http://www.elgg.org/" />
        <field key="copyright" value="(C) Curverider 2009-2010" />
index f98c21245c646f97c40ed599668e864799e2c48d..eb6f6d4a6e1045c95c02cfaf3efbf54e23ead5c5 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * Elgg media embed plugin
- * 
+ *
  * @package ElggEmbed
  * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
  * @author Curverider Ltd <info@elgg.com>
  * Init function
  *
  */
-       function embed_init() {
-               
-               // Extend useful views with stuff we need for our embed modal
-                       elgg_extend_view('css','embed/css');
-                       elgg_extend_view('js/initialise_elgg','embed/js');
-                       elgg_extend_view('metatags','embed/metatags');
-                       elgg_extend_view('input/longtext','embed/link',1);
-                       
-               // Page handler for the modal media embed
-                       register_page_handler('embed','embed_page_handler');
-               
-       }
-       
+function embed_init() {
+       elgg_extend_view('css', 'embed/css');
+       elgg_extend_view('js/initialise_elgg', 'embed/js');
+       elgg_extend_view('metatags', 'embed/metatags');
+       elgg_extend_view('input/longtext', 'embed/link', 1);
+
+       // Page handler for the modal media embed
+       register_page_handler('embed', 'embed_page_handler');
+}
+
 /**
- * Runs the 'embed' script
+ * Serves pages for upload and embed.
  *
+ * @param $page
  */
-       function embed_page_handler($page) {
-               
-               switch($page[0]) {
-                       case 'upload':          require_once(dirname(__FILE__) . '/upload.php');
-                                                               exit;
-                                                               break;
-                       default:                        require_once(dirname(__FILE__) . '/embed.php');
-                                                               exit;
-                                                               break;                  
-               }
-               
+function embed_page_handler($page) {
+       if (!isset($page[0])) {
+               $page[0] = 'embed';
+       }
+
+       switch($page[0]) {
+               case 'upload':
+                       echo elgg_view('embed/upload');
+
+                       break;
+
+               case 'embed':
+               default:
+                       // trigger hook to get section tabs
+                       // use views for embed/section/
+                       //      listing
+                       //      item
+                       // default to embed/listing | item if not found.
+                       // @todo trigger for all right now. If we categorize these later we can trigger
+                       // for certain categories.
+                       $sections = trigger_plugin_hook('embed_get_sections', 'all', NULL, array());
+                       asort($sections, SORT_LOCALE_STRING);
+                       $active_section = get_input('active_section', NULL);
+
+                       echo elgg_view('embed/embed', array(
+                               'sections' => $sections,
+                               'active_section' => $active_section
+                       ));
+
+                       break;
        }
 
-// Register the init action
-       register_elgg_event_handler('init','system','embed_init',10);
+       exit;
+}
 
-?>
+register_elgg_event_handler('init', 'system', 'embed_init');
\ No newline at end of file
index ee3678b892a338b512f0a93d2e08b75ce83f544f..f5533c22eb678124809ff86048c9d018203ac668 100644 (file)
@@ -1,4 +1,2 @@
-
        var entity;
-       $('textarea[name='+entityname+']').val($('textarea[name='+entityname+']').val() + ' ' + content);       
-       
+       $('textarea[name=' + textAreaName + ']').val($('textarea[name=' + textAreaName + ']').val() + ' ' + content);
\ No newline at end of file
diff --git a/mod/embed/views/default/embed/embed.php b/mod/embed/views/default/embed/embed.php
new file mode 100644 (file)
index 0000000..7815c12
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+/**
+ * Embed landing page
+ *
+ * @uses string $vars['sections'] Array of section_id => Section Display Name
+ * @uses string $vars['active_section'] Currently selected section_id
+ */
+
+$sections = (isset($vars['sections'])) ? $vars['sections'] : array();
+$active_section = (isset($vars['active_section'])) ? $vars['active_section'] : array_shift(array_keys($sections));
+
+if (!$sections) {
+       $content = elgg_echo('embed:no_sections');
+} else {
+       $offset = max(0, get_input('offset', 0));
+       $limit = get_input('limit', 10);
+
+       $content = elgg_view_title(elgg_echo('embed:embed'));
+
+       // prepare tabbed menu
+       $tabs = array();
+       foreach ($sections as $section_id => $section_info) {
+               $tab = array(
+                       'title' => $section_info['name'],
+                       'url' => '#',
+                       'url_class' => 'embed_section',
+                       // abusing the js attribute.
+                       'url_js' => "id=\"$section_id\""
+               );
+
+               if ($section_id == $active_section) {
+                       $tab['selected'] = TRUE;
+               }
+               $tabs[] = $tab;
+       }
+
+       $tabs_html = elgg_view('navigation/tabs', array('tabs' => $tabs));
+       $content .= $tabs_html;
+
+       $pagination_vars = array(
+
+       );
+
+       $content .= elgg_view('navigation/pagination', $pagination_vars);
+
+       if (array_key_exists($active_section, $sections)) {
+               $section_info = $sections[$active_section];
+               $layout = isset($section_info['layout']) ? $section_info['layout'] : 'list';
+
+               $params =  array(
+                       //'type'        => $type,
+                       //'subtype'     => $subtype,
+                       'offset' => $offset,
+                       'limit' => $limit,
+                       'section' => $active_section
+               );
+
+               // allow full override for this section
+               // check for standard hook
+               if ($section_content = elgg_view("embed/$active_section/content", $params)) {
+                       // handles its own pagination
+                       $content .= $section_content;
+               } elseif ($embed_info = trigger_plugin_hook('embed_get_items', $active_section, $params, array('items' => array(), 'count' => 0))) {
+                       $params['items'] = $embed_info['items'];
+                       $params['count'] = $embed_info['count'];
+                       // pagination here.
+                       $content .= elgg_view('navigation/pagination', $params);
+                       $content .= elgg_view("embed/layouts/{$section_info['layout']}", $params);
+               } else {
+                       $content .= elgg_echo('embed:no_section_content');
+               }
+       } else {
+               $content .= elgg_echo('embed:invalid_section');
+       }
+
+}
+echo $content;
+?>
+
+<script type="text/javascript">
+$(document).ready(function() {
+
+       // insert embed codes
+       $('.embed_section').click(function() {
+               var section = $(this).attr('id');
+               var url = '<?php echo $vars['url']; ?>pg/embed/embed?active_section=' + section;
+               $('#facebox .body .content').load(url);
+
+               return false;
+       });
+
+       // handle pagination
+       function elggPaginationClick() {
+               $('#facebox .body .content').load($(this).attr('href'));
+               return false;
+       }
+
+       $('.pagination_number').click(elggPaginationClick);
+       $('.pagination_next').click(elggPaginationClick);
+       $('.pagination_previous').click(elggPaginationClick);
+});
+
+</script>
+
diff --git a/mod/embed/views/default/embed/item/list.php b/mod/embed/views/default/embed/item/list.php
new file mode 100644 (file)
index 0000000..259419d
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Default item view for embed items in list display.
+ *
+ * Why don't we recycle the view/type/subtype views?
+ * Because we need to have special JavaScript that fires when you click on
+ * the icon / title.
+ *
+ * @uses object $vars['item'] The item to display
+ * @return string A formatted item
+ */
+
+$item = $vars['item'];
+$section = $vars['section'];
+$target = $vars['target'];
+$ecml_keyword = (isset($vars['ecml_enabled']) && isset($vars['ecml_keyword'])) ? $vars['ecml_keyword'] : NULL;
+
+// @todo add entity checking.
+
+// different entity types have different title attribute names.
+$title = isset($item->name) ? $item->name : $item->title;
+// don't let it be too long
+$title = elgg_make_excerpt($title);
+
+// @todo you can disable plugins that are required by other plugins
+// (embed requires ecml) so fallback to a hard-coded check to see if ecml is enabled.
+// #grumble
+if ($ecml_keyword) {
+       $embed_code = "[$ecml_keyword guid={$item->getGUID()}]";
+} else {
+       // fallback to inserting a hard link to the object with its icon
+       $icon = "<img src=\"{$item->getIcon()}\" />" . htmlentities($title, ENT_QUOTES, 'UTF-8');
+
+       $embed_code = elgg_view('output/url', array(
+               'href' => $item->getURL(),
+               'title' => $title,
+               'text' => $title,
+               'encode_text' => FALSE
+       ));
+}
+
+$icon = "<img src=\"{$item->getIcon('tiny')}\" />";
+$info = htmlentities($title, ENT_QUOTES, 'UTF-8');
+
+// @todo is this approach better than inline js?
+echo "<div class=\"embed_data\" id=\"embed_{$item->getGUID()}\">" . elgg_view_listing($icon, $info) . '</div>';
+echo "<script type=\"text/javascript\">
+       $('#embed_{$item->getGUID()}').data('embed_code', " . json_encode($embed_code) . ");
+</script>";
\ No newline at end of file
index 71120e68f20c42e048a508b9faa106a794917d5a..c98fe63dad6c34546ad35460390541afd2d753cf 100644 (file)
@@ -1,11 +1,21 @@
+<?php
+/**
+ * JS interface for inserting content into the active editor.
+ */
 
-       function elggUpdateContent(content, entityname) {
-               content = ' ' + content + ' ';
-               <?php
-                       echo elgg_view('embed/addcontentjs');
-               ?>
-               $.facebox.close();
-       }
+?>
+function elggEmbedInsertContent(content, textAreaName) {
+       content = ' ' + content + ' ';
+       <?php
+               // This view includes the guts of the function to do the inserting.
+               // Anything that overrides input/longtext with its own editor
+               // needs to supply its own function here that inserts
+               // content into textAreaName.
+               // See TinyMCE as an example.
+               echo elgg_view('embed/addcontentjs');
+       ?>
+       $.facebox.close();
+}
 
 
 /*
@@ -21,9 +31,9 @@
  * Copyright 2007, 2008 Chris Wanstrath [ chris@ozmm.org ]
  *
  * Usage:
- *  
+ *
  *  jQuery(document).ready(function() {
- *    jQuery('a[rel*=facebox]').facebox() 
+ *    jQuery('a[rel*=facebox]').facebox()
  *  })
  *
  *  <a href="#terms" rel="facebox">Terms</a>
  *
  *
  *  You can also use it programmatically:
- * 
+ *
  *    jQuery.facebox('some html')
  *
  *  The above will open a facebox with "some html" as the content.
- *    
- *    jQuery.facebox(function($) { 
+ *
+ *    jQuery.facebox(function($) {
  *      $.get('blah.html', function(data) { $.facebox(data) })
  *    })
  *
@@ -50,7 +60,7 @@
  *  allowing for a better ajaxy experience.
  *
  *  The facebox function can also display an ajax page or image:
- *  
+ *
  *    jQuery.facebox({ ajax: 'remote.html' })
  *    jQuery.facebox({ image: 'dude.jpg' })
  *
  *
  */
 (function($) {
-  $.facebox = function(data, klass) {
-    $.facebox.loading()
+$.facebox = function(data, klass) {
+       $.facebox.loading()
 
-    if (data.ajax) fillFaceboxFromAjax(data.ajax)
-    else if (data.image) fillFaceboxFromImage(data.image)
-    else if (data.div) fillFaceboxFromHref(data.div)
-    else if ($.isFunction(data)) data.call($)
-    else $.facebox.reveal(data, klass)
-  }
+       if (data.ajax) fillFaceboxFromAjax(data.ajax)
+       else if (data.image) fillFaceboxFromImage(data.image)
+       else if (data.div) fillFaceboxFromHref(data.div)
+       else if ($.isFunction(data)) data.call($)
+       else $.facebox.reveal(data, klass)
+}
 
-  /*
+/*
    * Public, $.facebox methods
    */
 
-  $.extend($.facebox, {
-    settings: {
-      opacity      : 0.7,
-      overlay      : true,
-      loadingImage : '<?php echo $vars['url']; ?>_graphics/ajax_loader_bw.gif',
-      closeImage   : '<?php echo $vars['url']; ?>_graphics/spacer.gif',
-      imageTypes   : [ 'png', 'jpg', 'jpeg', 'gif' ],
-      faceboxHtml  : '\
-    <div id="facebox" class="hidden"> \
-      <div class="popup"> \
-             <div class="body"> \
-                     <div class="footer"> \
-                         <a href="#" class="close"> \
-                           <img src="<?php echo $vars['url']; ?>_graphics/spacer.gif" title="close" class="close_image" width="22" height="22" border="0" /> \
-                         </a> \
-                       </div> \
-                       <div class="content"> \
-                       </div> \
-             </div> \
-      </div> \
-    </div>'
-    },
-
-    loading: function() {
-      init()
-      if ($('#facebox .loading').length == 1) return true
-      showOverlay()
-
-      $('#facebox .content').empty()
-      $('#facebox .body').children().hide().end().
-        append('<div class="loading"><br /><br /><img src="'+$.facebox.settings.loadingImage+'"/><br /><br /></div>')
-
-      $('#facebox').css({
-        top:   getPageScroll()[1] + (getPageHeight() / 10),
-        // Curverider addition (pagewidth/2 - modalwidth/2)
-        left: ((getPageWidth() / 2) - ($('#facebox').width() / 2))
-      }).show()
-
-      $(document).bind('keydown.facebox', function(e) {
-        if (e.keyCode == 27) $.facebox.close()
-        return true
-      })
-      $(document).trigger('loading.facebox')
-    },
-
-    reveal: function(data, klass) {
-      $(document).trigger('beforeReveal.facebox')
-      if (klass) $('#facebox .content').addClass(klass)
-      $('#facebox .content').append(data)
-      
+$.extend($.facebox, {
+       settings: {
+       opacity      : 0.7,
+       overlay      : true,
+       loadingImage : '<?php echo $vars['url']; ?>_graphics/ajax_loader_bw.gif',
+       closeImage   : '<?php echo $vars['url']; ?>_graphics/spacer.gif',
+       imageTypes   : [ 'png', 'jpg', 'jpeg', 'gif' ],
+       faceboxHtml  : '\
+       <div id="facebox" class="hidden"> \
+       <div class="popup"> \
+               <div class="body"> \
+                       <div class="footer"> \
+                               <a href="#" class="close"> \
+                                       <img src="<?php echo $vars['url']; ?>_graphics/spacer.gif" title="close" class="close_image" width="22" height="22" border="0" /> \
+                               </a> \
+                               </div> \
+                               <div class="content"> \
+                               </div> \
+               </div> \
+       </div> \
+       </div>'
+       },
+
+       loading: function() {
+       init()
+       if ($('#facebox .loading').length == 1) return true
+       showOverlay()
+
+       $('#facebox .content').empty()
+       $('#facebox .body').children().hide().end().
+               append('<div class="loading"><br /><br /><img src="'+$.facebox.settings.loadingImage+'"/><br /><br /></div>')
+
+       $('#facebox').css({
+               top:    getPageScroll()[1] + (getPageHeight() / 10),
+               // Curverider addition (pagewidth/2 - modalwidth/2)
+               left: ((getPageWidth() / 2) - ($('#facebox').width() / 2))
+       }).show()
+
+       $(document).bind('keydown.facebox', function(e) {
+               if (e.keyCode == 27) $.facebox.close()
+               return true
+       })
+       $(document).trigger('loading.facebox')
+       },
+
+       reveal: function(data, klass) {
+       $(document).trigger('beforeReveal.facebox')
+       if (klass) $('#facebox .content').addClass(klass)
+       $('#facebox .content').append(data)
+
        setTimeout(function() {
-           $('#facebox .loading').remove();
-           $('#facebox .body').children().fadeIn('slow');
-        $('#facebox').css('left', $(window).width() / 2 - ($('#facebox').width() / 2));
-        $(document).trigger('reveal.facebox').trigger('afterReveal.facebox');
-        }, 100);
-      
-      //$('#facebox .loading').remove()
-      //$('#facebox .body').children().fadeIn('slow')
-      //$('#facebox').css('left', $(window).width() / 2 - ($('#facebox').width() / 2))
-      //$(document).trigger('reveal.facebox').trigger('afterReveal.facebox')
-      
-    },
-
-    close: function() {
-      $(document).trigger('close.facebox')
-      return false
-    }
-  })
-
-  /*
+               $('#facebox .loading').remove();
+               $('#facebox .body').children().fadeIn('slow');
+               $('#facebox').css('left', $(window).width() / 2 - ($('#facebox').width() / 2));
+               $(document).trigger('reveal.facebox').trigger('afterReveal.facebox');
+               }, 100);
+
+       //$('#facebox .loading').remove()
+       //$('#facebox .body').children().fadeIn('slow')
+       //$('#facebox').css('left', $(window).width() / 2 - ($('#facebox').width() / 2))
+       //$(document).trigger('reveal.facebox').trigger('afterReveal.facebox')
+
+       },
+
+       close: function() {
+       $(document).trigger('close.facebox')
+       return false
+       }
+})
+
+/*
    * Public, $.fn methods
    */
-   
-   // Curverider addition
+
+// Curverider addition
 /*
        $.fn.wait = function(time, type) {
-           time = time || 3000;
-           type = type || "fx";
-           return this.queue(type, function() {
-               var self = this;
-               setTimeout(function() {
-                   //$(self).queue();
-                   $('#facebox .loading').remove();
-               }, time);
-           });
+               time = time || 3000;
+               type = type || "fx";
+               return this.queue(type, function() {
+                       var self = this;
+                       setTimeout(function() {
+                               //$(self).queue();
+                               $('#facebox .loading').remove();
+                       }, time);
+               });
        };
 */
 
-  $.fn.facebox = function(settings) {
-    init(settings)
+$.fn.facebox = function(settings) {
+       init(settings)
 
-    function clickHandler() {
-      $.facebox.loading(true)
+       function clickHandler() {
+       $.facebox.loading(true)
 
-      // support for rel="facebox.inline_popup" syntax, to add a class
-      // also supports deprecated "facebox[.inline_popup]" syntax
-      var klass = this.rel.match(/facebox\[?\.(\w+)\]?/)
-      if (klass) klass = klass[1]
+       // support for rel="facebox.inline_popup" syntax, to add a class
+       // also supports deprecated "facebox[.inline_popup]" syntax
+       var klass = this.rel.match(/facebox\[?\.(\w+)\]?/)
+       if (klass) klass = klass[1]
 
-      fillFaceboxFromHref(this.href, klass)
-      return false
-    }
+       fillFaceboxFromHref(this.href, klass)
+       return false
+       }
 
-    return this.click(clickHandler)
-  }
+       return this.click(clickHandler)
+}
 
-  /*
+/*
    * Private methods
    */
 
-  // called one time to setup facebox on this page
-  function init(settings) {
-    if ($.facebox.settings.inited) return true
-    else $.facebox.settings.inited = true
+// called one time to setup facebox on this page
+function init(settings) {
+       if ($.facebox.settings.inited) return true
+       else $.facebox.settings.inited = true
 
-    $(document).trigger('init.facebox')
-    /* makeCompatible() */
+       $(document).trigger('init.facebox')
+       /* makeCompatible() */
 
-    var imageTypes = $.facebox.settings.imageTypes.join('|')
-    $.facebox.settings.imageTypesRegexp = new RegExp('\.' + imageTypes + '$', 'i')
+       var imageTypes = $.facebox.settings.imageTypes.join('|')
+       $.facebox.settings.imageTypesRegexp = new RegExp('\.' + imageTypes + '$', 'i')
 
-    if (settings) $.extend($.facebox.settings, settings)
-    $('body').append($.facebox.settings.faceboxHtml)
+       if (settings) $.extend($.facebox.settings, settings)
+       $('body').append($.facebox.settings.faceboxHtml)
 
-    var preload = [ new Image(), new Image() ]
-    preload[0].src = $.facebox.settings.closeImage
-    preload[1].src = $.facebox.settings.loadingImage
+       var preload = [ new Image(), new Image() ]
+       preload[0].src = $.facebox.settings.closeImage
+       preload[1].src = $.facebox.settings.loadingImage
        preload.push(new Image())
 
 /*
-    $('#facebox').find('.b:first, .bl, .br, .tl, .tr').each(function() {
-      preload.push(new Image())
-      preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1')
-    })
+       $('#facebox').find('.b:first, .bl, .br, .tl, .tr').each(function() {
+       preload.push(new Image())
+       preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1')
+       })
 */
 
-    $('#facebox .close').click($.facebox.close)
-    $('#facebox .close_image').attr('src', $.facebox.settings.closeImage)
-  }
-  
-  // getPageScroll() by quirksmode.com
-  function getPageScroll() {
-    var xScroll, yScroll;
-    if (self.pageYOffset) {
-      yScroll = self.pageYOffset;
-      xScroll = self.pageXOffset;
-    } else if (document.documentElement && document.documentElement.scrollTop) {        // Explorer 6 Strict
-      yScroll = document.documentElement.scrollTop;
-      xScroll = document.documentElement.scrollLeft;
-    } else if (document.body) {// all other Explorers
-      yScroll = document.body.scrollTop;
-      xScroll = document.body.scrollLeft;      
-    }
-    return new Array(xScroll,yScroll) 
-  }
+       $('#facebox .close').click($.facebox.close)
+       $('#facebox .close_image').attr('src', $.facebox.settings.closeImage)
+}
+
+// getPageScroll() by quirksmode.com
+function getPageScroll() {
+       var xScroll, yScroll;
+       if (self.pageYOffset) {
+       yScroll = self.pageYOffset;
+       xScroll = self.pageXOffset;
+       } else if (document.documentElement && document.documentElement.scrollTop) {     // Explorer 6 Strict
+       yScroll = document.documentElement.scrollTop;
+       xScroll = document.documentElement.scrollLeft;
+       } else if (document.body) {// all other Explorers
+       yScroll = document.body.scrollTop;
+       xScroll = document.body.scrollLeft;
+       }
+       return new Array(xScroll,yScroll)
+}
 
        // Adapted from getPageSize() by quirksmode.com
        function getPageHeight() {
        var windowHeight
        if (self.innerHeight) { // all except Explorer
-         windowHeight = self.innerHeight;
+       windowHeight = self.innerHeight;
        } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
-         windowHeight = document.documentElement.clientHeight;
+       windowHeight = document.documentElement.clientHeight;
        } else if (document.body) { // other Explorers
-         windowHeight = document.body.clientHeight;
-       }       
+       windowHeight = document.body.clientHeight;
+       }
        return windowHeight
        }
 
        // Curverider addition
        function getPageWidth() {
-         var windowWidth;
-         if( typeof( window.innerWidth ) == 'number' ) {
-           windowWidth = window.innerWidth; //Non-IE
-         } else if( document.documentElement && ( document.documentElement.clientWidth ) ) {
-           windowWidth = document.documentElement.clientWidth; //IE 6+ in 'standards compliant mode'
-         } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
-           windowWidth = document.body.clientWidth; //IE 4 compatible
-         }
-         return windowWidth
-       } 
+       var windowWidth;
+       if( typeof( window.innerWidth ) == 'number' ) {
+               windowWidth = window.innerWidth; //Non-IE
+       } else if( document.documentElement && ( document.documentElement.clientWidth ) ) {
+               windowWidth = document.documentElement.clientWidth; //IE 6+ in 'standards compliant mode'
+       } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
+               windowWidth = document.body.clientWidth; //IE 4 compatible
+       }
+       return windowWidth
+       }
 
 
 
-  // Backwards compatibility
+// Backwards compatibility
 /*
-  function makeCompatible() {
-    var $s = $.facebox.settings
-
-    $s.loadingImage = $s.loading_image || $s.loadingImage
-    $s.closeImage = $s.close_image || $s.closeImage
-    $s.imageTypes = $s.image_types || $s.imageTypes
-    $s.faceboxHtml = $s.facebox_html || $s.faceboxHtml
-  }
+function makeCompatible() {
+       var $s = $.facebox.settings
+
+       $s.loadingImage = $s.loading_image || $s.loadingImage
+       $s.closeImage = $s.close_image || $s.closeImage
+       $s.imageTypes = $s.image_types || $s.imageTypes
+       $s.faceboxHtml = $s.facebox_html || $s.faceboxHtml
+}
 */
 
-  // Figures out what you want to display and displays it
-  // formats are:
-  //     div: #id
-  //   image: blah.extension
-  //    ajax: anything else
-  function fillFaceboxFromHref(href, klass) {
-    // div
-    if (href.match(/#/)) {
-      var url    = window.location.href.split('#')[0]
-      var target = href.replace(url,'')
-      $.facebox.reveal($(target).clone().show(), klass)
-
-    // image
-    } else if (href.match($.facebox.settings.imageTypesRegexp)) {
-      fillFaceboxFromImage(href, klass)
-    // ajax
-    } else {
-      fillFaceboxFromAjax(href, klass)
-    }
-  }
-
-  function fillFaceboxFromImage(href, klass) {
-    var image = new Image()
-    image.onload = function() {
-      $.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass)
-    }
-    image.src = href
-  }
-
-  function fillFaceboxFromAjax(href, klass) {
-    $.get(href, function(data) { $.facebox.reveal(data, klass) })
-  }
-
-  function skipOverlay() {
-    return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null 
-  }
-
-  function showOverlay() {
-    if (skipOverlay()) return
-
-    if ($('facebox_overlay').length == 0) 
-      $("body").append('<div id="facebox_overlay" class="facebox_hide"></div>')
-
-    $('#facebox_overlay').hide().addClass("facebox_overlayBG")
-      .css('opacity', $.facebox.settings.opacity)
-      /* .click(function() { $(document).trigger('close.facebox') }) */
-      .fadeIn(400)
-    return false
-  }
-
-  function hideOverlay() {
-    if (skipOverlay()) return
-
-    $('#facebox_overlay').fadeOut(400, function(){
-      $("#facebox_overlay").removeClass("facebox_overlayBG")
-      $("#facebox_overlay").addClass("facebox_hide") 
-      $("#facebox_overlay").remove()
-    })
-    
-    return false
-  }
-
-  /*
+// Figures out what you want to display and displays it
+// formats are:
+//     div: #id
+//   image: blah.extension
+//    ajax: anything else
+function fillFaceboxFromHref(href, klass) {
+       // div
+       if (href.match(/#/)) {
+       var url    = window.location.href.split('#')[0]
+       var target = href.replace(url,'')
+       $.facebox.reveal($(target).clone().show(), klass)
+
+       // image
+       } else if (href.match($.facebox.settings.imageTypesRegexp)) {
+       fillFaceboxFromImage(href, klass)
+       // ajax
+       } else {
+       fillFaceboxFromAjax(href, klass)
+       }
+}
+
+function fillFaceboxFromImage(href, klass) {
+       var image = new Image()
+       image.onload = function() {
+       $.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass)
+       }
+       image.src = href
+}
+
+function fillFaceboxFromAjax(href, klass) {
+       $.get(href, function(data) { $.facebox.reveal(data, klass) })
+}
+
+function skipOverlay() {
+       return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null
+}
+
+function showOverlay() {
+       if (skipOverlay()) return
+
+       if ($('facebox_overlay').length == 0)
+       $("body").append('<div id="facebox_overlay" class="facebox_hide"></div>')
+
+       $('#facebox_overlay').hide().addClass("facebox_overlayBG")
+       .css('opacity', $.facebox.settings.opacity)
+       /* .click(function() { $(document).trigger('close.facebox') }) */
+       .fadeIn(400)
+       return false
+}
+
+function hideOverlay() {
+       if (skipOverlay()) return
+
+       $('#facebox_overlay').fadeOut(400, function(){
+       $("#facebox_overlay").removeClass("facebox_overlayBG")
+       $("#facebox_overlay").addClass("facebox_hide")
+       $("#facebox_overlay").remove()
+       })
+
+       return false
+}
+
+/*
    * Bindings
    */
 
-  $(document).bind('close.facebox', function() {
-    $(document).unbind('keydown.facebox')
-    $('#facebox').fadeOut(function() {
-      $('#facebox .content').removeClass().addClass('content')
-      hideOverlay()
-      $('#facebox .loading').remove()
-    })
-  })
-  
-  
-  
-  
+$(document).bind('close.facebox', function() {
+       $(document).unbind('keydown.facebox')
+       $('#facebox').fadeOut(function() {
+       $('#facebox .content').removeClass().addClass('content')
+       hideOverlay()
+       $('#facebox .loading').remove()
+       })
+})
+
+
+
+
        // Curverider addition
        $(window).resize(function(){
-         //alert("resized");
-         
-    $('#facebox').css({
-        top:   getPageScroll()[1] + (getPageHeight() / 10),
-        left: ((getPageWidth() / 2) - 365)
-      })
-         
-         
+       //alert("resized");
+
+       $('#facebox').css({
+               top:    getPageScroll()[1] + (getPageHeight() / 10),
+               left: ((getPageWidth() / 2) - 365)
+       })
+
+
        });
 
 
diff --git a/mod/embed/views/default/embed/layouts/gallery.php b/mod/embed/views/default/embed/layouts/gallery.php
new file mode 100644 (file)
index 0000000..b3d9bbc
--- /dev/null
@@ -0,0 +1 @@
+<?php
diff --git a/mod/embed/views/default/embed/layouts/list.php b/mod/embed/views/default/embed/layouts/list.php
new file mode 100644 (file)
index 0000000..d62d354
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Embed - List items
+ *
+ * @todo Yes this is a lot of logic for a view.  The Javascript is faily complicated
+ * and pulling entity views out was making it worse.
+ * Once plugin deps are working, we'll remove the logic for that.
+ *
+ * @uses array $vars['items'] Array of ElggEntities
+ * @uses string $vars['section'] The section_id.
+ *
+ */
+
+$items = isset($vars['items']) ? $vars['items'] : array();
+$section = $vars['section'];
+
+// pull out some common tests
+// embed requires ECML, but until we have plugin deps working
+// we need to explicitly check and use a fallback.
+if ($ecml_enabled = is_plugin_enabled('ecml')){
+       $ecml_valid_keyword = ecml_is_valid_keyword($section);
+} else {
+       $ecml_valid_keyword = FALSE;
+}
+
+// check if we have an override for this section type.
+$view = "embed/$section/item/list";
+if (!elgg_view_exists($view)) {
+       $view = "embed/item/list";
+}
+
+$content = '';
+foreach ($items as $item) {
+       // sanity checking
+       if (!elgg_instanceof($item)) {
+               continue;
+       }
+
+       $params = array(
+               'section' => $section,
+               'item' => $item,
+               'ecml_enabled' => $ecml_enabled,
+               'ecml_keyword' => ($ecml_valid_keyword) ? $section : 'entity'
+       );
+
+       $content .= elgg_view($view, $params);
+}
+
+echo $content;
+
+?>
+
+<script type="text/javascript">
+$(document).ready(function() {
+       $('.embed_data').click(function() {
+               var embed_code = $(this).data('embed_code');
+               elggEmbedInsertContent(embed_code);
+       });
+});
+</script>
\ No newline at end of file
index 14b33d4c2ad164ef35ff16728af141f68b1a314a..bd500dfaf429c544647f72e862a422cf9faf0b74 100644 (file)
@@ -1 +1,6 @@
+<?php
+/**
+ * Displays an "Embed media" link in longtext inputs.
+ */
+?>
 <a class="longtext_control small link" href="<?php echo $vars['url'] . 'pg/embed/media'; ?>?internalname=<?php echo $vars['internalname']; ?>" rel="facebox"><?php echo elgg_echo('media:insert'); ?></a>
\ No newline at end of file
index ff05054663479f1b67de1e7b0ff59ca9b73bad6e..3817746183e6a3136f8033cf8a1d606465b9286d 100644 (file)
                                                                                                'limit' => $vars['limit'],
                                                                                                'count' => $vars['count']
                                                                                        ));
-       
+
        echo elgg_view('embed/simpletype',array(
                                                                                                'internalname' => $vars['internalname'],
                                                                                                'simpletypes' => $vars['simpletypes'],
                                                                                                'simpletype' => $vars['simpletype'],
                                                                                        ));
-                                                                                       
+
        $context = get_context();
        $entities = $vars['entities'];
        if (is_array($entities) && !empty($entities)) {
-               
+
                echo "<p class='embed_instructions'>" . elgg_echo('embed:instructions') . "</p>";
-               
+
                foreach($entities as $entity) {
                        if ($entity instanceof ElggEntity) {
 
-                               $mime = $entity->mimetype; 
-                               
+                               $mime = $entity->mimetype;
+
                                $enttype = $entity->getType();
                                $entsubtype = $entity->getSubtype();
-                               
+
                                if (elgg_view_exists($enttype . '/' . $entsubtype . '/embed')) {
                                        $content = elgg_view($enttype . '/' . $entsubtype . '/embed', array('entity' => $entity, 'full' => true));
                                } else {
                                        $content = elgg_view($enttype . '/default/embed', array('entity' => $entity, 'full' => true));
                                }
-                               
+
                                $content = str_replace("\n","", $content);
                                $content = str_replace("\r","", $content);
                                //$content = htmlentities($content,null,'utf-8');
                                $content = htmlentities($content, ENT_COMPAT, "UTF-8");
-                               
+
                                $link = "javascript:elggUpdateContent('{$content}','{$vars['internalname']}');";
                                if ($entity instanceof ElggObject) { $title = $entity->title; $mime = $entity->mimetype; } else { $title = $entity->name; $mime = ''; }
-                               
+
                                set_context('search');
-                               
+
                                if (elgg_view_exists("{$enttype}/{$entsubtype}/embedlist")) {
                                        $entview = elgg_view("{$enttype}/{$entsubtype}/embedlist",array('entity' => $entity));
                                } else {
@@ -55,9 +55,9 @@
                                }
                                $entview = str_replace($entity->getURL(),$link,$entview);
                                echo $entview;
-                               
-                               set_context($context);                          
-                       
+
+                               set_context($context);
+
                        }
                }
        }
index d995b4b2b476ab5be6b6cab41a328b16244fc421..5f249c0c720f02ea6bcfa8ec3fd476de73d1a0c9 100644 (file)
@@ -1,5 +1,6 @@
 <h2 class="media_modal_title">Embed / Upload Media</h2>
 <?php
+$internalname = get_input('internalname');
 
 echo elgg_view('embed/tabs',array('tab' => 'upload', 'internalname'=>get_input('internalname')));
 
@@ -7,7 +8,7 @@ if (!elgg_view_exists('file/upload')) {
        echo "<p>" . elgg_echo('embed:file:required') . "</p>";
 } else {
        $action = 'file/upload';
-       
+
 ?>
 <form id="media_upload" action="<?php echo $vars['url']; ?>action/file/upload" method="post" enctype="multipart/form-data">
        <p>
@@ -15,7 +16,7 @@ if (!elgg_view_exists('file/upload')) {
        <?php
                echo elgg_view('input/securitytoken');
                echo elgg_view("input/file",array('internalname' => 'upload', 'js' => 'id="upload"'));
-               
+
        ?>
        </label></p>
        <p>
@@ -26,7 +27,7 @@ if (!elgg_view_exists('file/upload')) {
                                                                "internalname" => "title",
                                                                "value" => $title,
                                                                                                ));
-               
+
                ?>
                </label>
        </p>
@@ -34,7 +35,7 @@ if (!elgg_view_exists('file/upload')) {
        <label for="filedescription"><?php echo elgg_echo("description"); ?><br />
        <textarea class="input_textarea" name="description" id="filedescription"></textarea>
        </label></p>
-       
+
        <p>
                <label><?php echo elgg_echo("tags"); ?><br />
                <?php
@@ -60,26 +61,26 @@ if (!elgg_view_exists('file/upload')) {
                                echo "<input type=\"hidden\" name=\"container_guid\" value=\"{$vars['container_guid']}\" />";
                        if (isset($vars['entity']))
                                echo "<input type=\"hidden\" name=\"file_guid\" value=\"{$vars['entity']->getGUID()}\" />";
-               
+
                ?>
                <input type="submit" value="<?php echo elgg_echo("save"); ?>" />
        </p>
 </form>
-<script type="text/javascript"> 
-        // bind 'myForm' and provide a simple callback function 
-        $('#media_upload').submit(function() { 
-            var options = {  
-                           success:    function() { 
-                               $('.popup .content').load('<?php echo $vars['url'] . 'pg/embed/media'; ?>?internalname=<?php echo $vars['internalname']; ?>'); 
-                           } 
-                       }; 
-               $(this).ajaxSubmit(options);
-            return false; 
-        }); 
-</script> 
+<script type="text/javascript">
+               // bind 'myForm' and provide a simple callback function
+               $('#media_upload').submit(function() {
+                       var options = {
+                               success:    function() {
+                                       $('.popup .content').load('<?php echo $vars['url'] . 'pg/embed/media'; ?>?internalname=<?php echo $internalname; ?>');
+                               }
+                       };
+                       $(this).ajaxSubmit(options);
+                       return false;
+               });
+</script>
 
 <?php
-       
+
 }
 
 ?>