summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lightbox2.module9
-rw-r--r--lightbox2.views.inc47
-rw-r--r--lightbox2_handler_field_lightbox2.inc130
3 files changed, 186 insertions, 0 deletions
diff --git a/lightbox2.module b/lightbox2.module
index 3ac718c..2fd65ac 100644
--- a/lightbox2.module
+++ b/lightbox2.module
@@ -1375,3 +1375,12 @@ function lightbox2_link_alter(&$links, $node) {
}
}
}
+
+/**
+ * Implementation of hook_views_api().
+ */
+function lightbox2_views_api() {
+ return array(
+ 'api' => '2.0',
+ );
+}
diff --git a/lightbox2.views.inc b/lightbox2.views.inc
new file mode 100644
index 0000000..0c81529
--- /dev/null
+++ b/lightbox2.views.inc
@@ -0,0 +1,47 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * lightbox2.views.inc
+ */
+
+/**
+ * Implementation of hook_views_data()
+ */
+function lightbox2_views_data() {
+
+ $data['lightbox2']['table']['group'] = t('Lightbox');
+
+ $data['lightbox2']['table']['join'] = array(
+ '#global' => array(),
+ );
+
+ $data['lightbox2']['lightbox2'] = array(
+ 'group' => t('Lightbox'),
+ 'field' => array(
+ 'title' => t('Lightbox trigger'),
+ 'help' => t('Provide custom text or link.'),
+ 'handler' => 'lightbox2_handler_field_lightbox2',
+ ),
+ );
+
+ return $data;
+}
+
+/**
+ * Implementation of hook_views_handlers() to register all of the basic handlers
+ * views uses.
+ */
+function lightbox2_views_handlers() {
+ return array(
+ 'info' => array(
+ 'path' => drupal_get_path('module', 'lightbox2'),
+ ),
+ 'handlers' => array(
+ 'lightbox2_handler_field_lightbox2' => array(
+ 'parent' => 'views_handler_field',
+ ),
+ ),
+ );
+}
diff --git a/lightbox2_handler_field_lightbox2.inc b/lightbox2_handler_field_lightbox2.inc
new file mode 100644
index 0000000..36cc8eb
--- /dev/null
+++ b/lightbox2_handler_field_lightbox2.inc
@@ -0,0 +1,130 @@
+<?php
+// $Id$
+
+/**
+ * A handler to provide a field that is completely custom by the administrator.
+ *
+ * @ingroup views_field_handlers
+ */
+class lightbox2_handler_field_lightbox2 extends views_handler_field {
+ function query() {
+ // Do nothing, as this handler does not need to do anything to the query itself.
+ }
+
+ function option_definition() {
+ $options = parent::option_definition();
+
+ $options['trigger_field'] = array('default' => '');
+ $options['popup'] = array('default' => '');
+ $options['rel_group'] = array('default' => TRUE);
+ $options['height'] = array('default' => '400px');
+ $options['width'] = array('default' => '600px');
+
+ return $options;
+ }
+
+ function options_form(&$form, &$form_state) {
+ parent::options_form($form, $form_state);
+
+ $fields = array('trigger_field' => t('<None>'));
+ foreach ($this->view->display_handler->get_handlers('field') as $field => $handler) {
+ // We only use fields up to this one. Obviously we can't use this handler
+ // as the trigger handler.
+ if ($field == $this->options['id']) {
+ break;
+ }
+
+ $fields[$field] = $handler->definition['title'];
+ }
+
+ $form['trigger_field'] = array(
+ '#type' => 'select',
+ '#title' => t('Trigger field'),
+ '#description' => t('Select the field that should be turned into the trigger for the lightbox. Only fields that appear before this one in the field list may be used.'),
+ '#options' => $fields,
+ '#default_value' => $this->options['trigger_field'],
+ '#weight' => -10,
+ );
+
+ $form['popup'] = array(
+ '#type' => 'textarea',
+ '#title' => t('Popup'),
+ '#description' => t('Combine tokens from the "Replacement patterns" below and html to create what the lightbox popup will become.'),
+ '#default_value' => $this->options['popup'],
+ '#weight' => -9,
+ );
+
+ $form['rel_group'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Enable Lightbox grouping'),
+ '#default_value' => $this->options['rel_group'],
+ '#weight' => -8,
+ );
+
+ $form['height'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Height'),
+ '#description' => t('Specify the height of the lightbox2 popup window. Because the content is dynamic, we cannot detect this value automatically.'),
+ '#default_value' => $this->options['height'],
+ '#weight' => -7,
+ );
+
+ $form['width'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Width'),
+ '#description' => t('Specify the width of the lightbox2 popup window. Because the content is dynamic, we cannot detect this value automatically.'),
+ '#default_value' => $this->options['width'],
+ '#weight' => -6,
+ );
+
+
+
+ // Remove the checkboxs and other irrelevant controls.
+ unset($form['alter']['alter_text']);
+ unset($form['alter']['make_link']);
+ unset($form['alter']['text']);
+ unset($form['alter']['path']);
+ unset($form['alter']['alt']);
+ unset($form['alter']['prefix']);
+ unset($form['alter']['suffix']);
+ unset($form['alter']['text']['#dependency']);
+ unset($form['alter']['text']['#process']);
+ }
+
+ /**
+ * Render the trigger field and its linked popup information.
+ */
+ function render($values) {
+ // We need to have multiple unique IDs, one for each record.
+ static $i = 0;
+
+ static $link;
+
+ if (!empty($this->options['trigger_field'])) {
+
+ // We don't actually use the link, but we need it there for lightbox to function.
+ if (empty($link)) {
+ //Get the path name.
+ $path = isset($_GET['q']) ? $_GET['q'] : '<front>';
+ $link = url($path, array('absolute' => TRUE));
+ }
+
+ //Get the token information and generate the value for the popup.
+ $tokens = $this->get_render_tokens();
+ $popup = filter_xss_admin($this->options['popup']);
+ $popup = strtr($popup, $tokens);
+
+ $i++;
+
+ // The outside div is there to hide all of the divs because if the specific lightbox
+ // div is hidden it won't show up as a lightbox. We also specify a group
+ // in the rel attribute in order to link the whole View together for paging.
+ $group_name = ($this->options['rel_group'] ? 'lightbox-popup-{$this->view->name}' : '');
+ return "<a href='$link #lightbox-popup-{$i}' rel='lightmodal[{$group_name}|width:" . ($this->options['width'] ? $this->options['width'] : '600px') . ';height:' . ($this->options['height'] ? $this->options['height'] : '600px') . "]'>". $tokens["[{$this->options['trigger_field']}]"] ."</a>
+ <div style='display: none;'><div id='lightbox-popup-{$i}' class='lightbox-popup'>$popup</div></div>";
+ }
+ else {
+ return;
+ }
+ }
+}