diff options
-rw-r--r-- | boot.php | 6 | ||||
-rw-r--r-- | include/conversation.php | 7 | ||||
-rw-r--r-- | include/items.php | 2 | ||||
-rw-r--r-- | include/plugin.php | 11 | ||||
-rw-r--r-- | library/jquery_ac/friendica.complete.js | 395 | ||||
-rw-r--r-- | mod/acl.php | 7 | ||||
-rw-r--r-- | mod/message.php | 11 | ||||
-rw-r--r-- | util/messages.po | 168 | ||||
-rw-r--r-- | view/head.tpl | 2 | ||||
-rw-r--r-- | view/moderated_comment.tpl | 34 | ||||
-rw-r--r-- | view/theme/darkzero/style.css | 14 | ||||
-rwxr-xr-x | view/theme/diabook/communityhome.tpl | 21 | ||||
-rw-r--r-- | view/theme/diabook/config.php | 6 | ||||
-rw-r--r-- | view/theme/diabook/js/jquery-ui-1.8.20.custom.min.js | 62 | ||||
-rw-r--r-- | view/theme/diabook/js/jquery.mapquery.core.js | 655 | ||||
-rw-r--r-- | view/theme/diabook/js/jquery.mapquery.legend.js | 87 | ||||
-rw-r--r-- | view/theme/diabook/js/jquery.mapquery.mqLayerManager.js | 310 | ||||
-rw-r--r-- | view/theme/diabook/js/jquery.mapquery.mqMousePosition.js | 59 | ||||
-rw-r--r-- | view/theme/diabook/prv_message.tpl | 40 | ||||
-rwxr-xr-x | view/theme/diabook/theme.php | 98 | ||||
-rwxr-xr-x | view/theme/duepuntozero/moderated_comment.tpl | 61 | ||||
-rw-r--r-- | view/theme/duepuntozero/prv_message.tpl | 4 |
22 files changed, 1737 insertions, 323 deletions
@@ -9,7 +9,7 @@ require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1337' ); +define ( 'FRIENDICA_VERSION', '3.0.1338' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1143 ); @@ -123,6 +123,8 @@ define ( 'NETWORK_XMPP', 'xmpp'); // XMPP define ( 'NETWORK_MYSPACE', 'mysp'); // MySpace define ( 'NETWORK_GPLUS', 'goog'); // Google+ +define ( 'NETWORK_PHANTOM', 'unkn'); // Place holder + /** * These numbers are used in stored permissions * and existing allocations MUST NEVER BE CHANGED @@ -142,6 +144,8 @@ $netgroup_ids = array( NETWORK_XMPP => (-10), NETWORK_MYSPACE => (-11), NETWORK_GPLUS => (-12), + + NETWORK_PHANTOM => (-127), ); diff --git a/include/conversation.php b/include/conversation.php index e48a8e6d6..6bf673b97 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -278,6 +278,9 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { else $nickname = $a->user['nickname']; + // prevent private email from leaking. + if($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) + continue; $profile_name = ((strlen($item['author-name'])) ? $item['author-name'] : $item['name']); if($item['author-link'] && (! $item['author-name'])) @@ -447,8 +450,8 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { else { // prevent private email reply to public conversation from leaking. - if($item['private'] && ! $threads[$threadsid]['private']) - continue; + if($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) + continue; $comments_seen ++; $comment_lastcollapsed = false; diff --git a/include/items.php b/include/items.php index b1dc1708f..129499967 100644 --- a/include/items.php +++ b/include/items.php @@ -119,7 +119,7 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) $check_date = datetime_convert('UTC','UTC',$last_update,'Y-m-d H:i:s'); $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, - `contact`.`name`, `contact`.`photo`, `contact`.`url`, + `contact`.`name`, `contact`.`network`, `contact`.`photo`, `contact`.`url`, `contact`.`name-date`, `contact`.`uri-date`, `contact`.`avatar-date`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, `contact`.`id` AS `contact-id`, `contact`.`uid` AS `contact-uid`, diff --git a/include/plugin.php b/include/plugin.php index 4ff78a8b4..ae8eee78a 100644 --- a/include/plugin.php +++ b/include/plugin.php @@ -70,8 +70,10 @@ function reload_plugins() { $installed = array(); $parr = explode(',',$plugins); + if(count($parr)) { foreach($parr as $pl) { + $pl = trim($pl); $fname = 'addon/' . $pl . '/' . $pl . '.php'; @@ -101,6 +103,7 @@ function reload_plugins() { } } } + }} @@ -163,6 +166,14 @@ function call_hooks($name, &$data = null) { $func = $hook[HOOK_FUNCTION]; $func($a,$data); } + else { + // remove orphan hooks + q("delete from hook where hook = '%s' and file = '$s' and function = '%s' limit 1", + dbesc($hook[HOOK_HOOK]), + dbesc($hook[HOOK_FILE]), + dbesc($hook[HOOK_FUNCTION]) + ); + } } } } diff --git a/library/jquery_ac/friendica.complete.js b/library/jquery_ac/friendica.complete.js new file mode 100644 index 000000000..81eba564e --- /dev/null +++ b/library/jquery_ac/friendica.complete.js @@ -0,0 +1,395 @@ +/**
+* Ajax Autocomplete for jQuery, version 1.1.3
+* (c) 2010 Tomas Kirda
+*
+* Ajax Autocomplete for jQuery is freely distributable under the terms of an MIT-style license.
+* For details, see the web site: http://www.devbridge.com/projects/autocomplete/jquery/
+*
+* Last Review: 04/19/2010
+* Heavily modified for contact completion in Friendica (add photos, hover tips. etc.) 11-May-2012 mike@macgirvin.com
+*/
+
+/*jslint onevar: true, evil: true, nomen: true, eqeqeq: true, bitwise: true, regexp: true, newcap: true, immed: true */
+/*global window: true, document: true, clearInterval: true, setInterval: true, jQuery: true */
+
+(function($) {
+
+ var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
+
+ function fnFormatResult(value, data, currentValue) {
+ var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
+ return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
+ }
+
+ function Autocomplete(el, options) {
+ this.el = $(el);
+ this.el.attr('autocomplete', 'off');
+ this.suggestions = [];
+ this.data = [];
+ this.badQueries = [];
+ this.selectedIndex = -1;
+ this.currentValue = this.el.val();
+ this.intervalId = 0;
+ this.cachedResponse = [];
+ this.onChangeInterval = null;
+ this.ignoreValueChange = false;
+ this.serviceUrl = options.serviceUrl;
+ this.isLocal = false;
+ this.options = {
+ autoSubmit: false,
+ minChars: 1,
+ maxHeight: 300,
+ deferRequestBy: 0,
+ width: 0,
+ highlight: true,
+ params: {},
+ fnFormatResult: fnFormatResult,
+ delimiter: null,
+ zIndex: 9999
+ };
+ this.initialize();
+ this.setOptions(options);
+ }
+
+ $.fn.autocomplete = function(options) {
+ return new Autocomplete(this.get(0)||$('<input />'), options);
+ };
+
+
+ Autocomplete.prototype = {
+
+ killerFn: null,
+
+ initialize: function() {
+
+ var me, uid, autocompleteElId;
+ me = this;
+ uid = Math.floor(Math.random()*0x100000).toString(16);
+ autocompleteElId = 'Autocomplete_' + uid;
+
+ this.killerFn = function(e) {
+ if ($(e.target).parents('.autocomplete').size() === 0) {
+ me.killSuggestions();
+ me.disableKillerFn();
+ }
+ };
+
+ if (!this.options.width) { this.options.width = this.el.width(); }
+ this.mainContainerId = 'AutocompleteContainter_' + uid;
+
+ $('<div id="' + this.mainContainerId + '" style="position:absolute;z-index:9999;"><div class="autocomplete-w1"><div class="autocomplete" id="' + autocompleteElId + '" style="display:none; width:300px;"></div></div></div>').appendTo('body');
+
+ this.container = $('#' + autocompleteElId);
+ this.fixPosition();
+ if (window.opera) {
+ this.el.keypress(function(e) { me.onKeyPress(e); });
+ } else {
+ this.el.keydown(function(e) { me.onKeyPress(e); });
+ }
+ this.el.keyup(function(e) { me.onKeyUp(e); });
+ this.el.blur(function() { me.enableKillerFn(); });
+ this.el.focus(function() { me.fixPosition(); });
+ },
+
+ setOptions: function(options){
+ var o = this.options;
+ $.extend(o, options);
+ if(o.lookup){
+ this.isLocal = true;
+ if($.isArray(o.lookup)){ o.lookup = { suggestions:o.lookup, data:[] }; }
+ }
+ $('#'+this.mainContainerId).css({ zIndex:o.zIndex });
+ this.container.css({ maxHeight: o.maxHeight + 'px', width:o.width });
+ },
+
+ clearCache: function(){
+ this.cachedResponse = [];
+ this.badQueries = [];
+ },
+
+ disable: function(){
+ this.disabled = true;
+ },
+
+ enable: function(){
+ this.disabled = false;
+ },
+
+ fixPosition: function() {
+ var offset = this.el.offset();
+ $('#' + this.mainContainerId).css({ top: (offset.top + this.el.innerHeight()) + 'px', left: offset.left + 'px' });
+ },
+
+ enableKillerFn: function() {
+ var me = this;
+ $(document).bind('click', me.killerFn);
+ },
+
+ disableKillerFn: function() {
+ var me = this;
+ $(document).unbind('click', me.killerFn);
+ },
+
+ killSuggestions: function() {
+ var me = this;
+ this.stopKillSuggestions();
+ this.intervalId = window.setInterval(function() { me.hide(); me.stopKillSuggestions(); }, 300);
+ },
+
+ stopKillSuggestions: function() {
+ window.clearInterval(this.intervalId);
+ },
+
+ onKeyPress: function(e) {
+ if (this.disabled || !this.enabled) { return; }
+ // return will exit the function
+ // and event will not be prevented
+ switch (e.keyCode) {
+ case 27: //KEY_ESC:
+ this.el.val(this.currentValue);
+ this.hide();
+ break;
+ case 9: //KEY_TAB:
+ case 13: //KEY_RETURN:
+ if (this.selectedIndex === -1) {
+ this.hide();
+ return;
+ }
+ this.select(this.selectedIndex);
+ if(e.keyCode === 9){ return; }
+ break;
+ case 38: //KEY_UP:
+ this.moveUp();
+ break;
+ case 40: //KEY_DOWN:
+ this.moveDown();
+ break;
+ default:
+ return;
+ }
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ },
+
+ onKeyUp: function(e) {
+ if(this.disabled){ return; }
+ switch (e.keyCode) {
+ case 38: //KEY_UP:
+ case 40: //KEY_DOWN:
+ return;
+ }
+ clearInterval(this.onChangeInterval);
+ if (this.currentValue !== this.el.val()) {
+ if (this.options.deferRequestBy > 0) {
+ // Defer lookup in case when value changes very quickly:
+ var me = this;
+ this.onChangeInterval = setInterval(function() { me.onValueChange(); }, this.options.deferRequestBy);
+ } else {
+ this.onValueChange();
+ }
+ }
+ },
+
+ onValueChange: function() {
+ clearInterval(this.onChangeInterval);
+ this.currentValue = this.el.val();
+ var q = this.getQuery(this.currentValue);
+ this.selectedIndex = -1;
+ if (this.ignoreValueChange) {
+ this.ignoreValueChange = false;
+ return;
+ }
+ if (q === '' || q.length < this.options.minChars) {
+ this.hide();
+ } else {
+ this.getSuggestions(q);
+ }
+ },
+
+ getQuery: function(val) {
+ var d, arr;
+ d = this.options.delimiter;
+ if (!d) { return $.trim(val); }
+ arr = val.split(d);
+ return $.trim(arr[arr.length - 1]);
+ },
+
+ getSuggestionsLocal: function(q) {
+ var ret, arr, len, val, i;
+ arr = this.options.lookup;
+ len = arr.suggestions.length;
+ ret = { suggestions:[], data:[] };
+ q = q.toLowerCase();
+ for(i=0; i< len; i++){
+ val = arr.suggestions[i];
+ if(val.toLowerCase().indexOf(q) === 0){
+ ret.suggestions.push(val);
+ ret.data.push(arr.data[i]);
+ }
+ }
+ return ret;
+ },
+
+ getSuggestions: function(q) {
+ var cr, me;
+ cr = this.isLocal ? this.getSuggestionsLocal(q) : this.cachedResponse[q];
+ if (cr && $.isArray(cr.suggestions)) {
+ this.suggestions = cr.suggestions;
+ this.data = cr.data;
+ this.suggest();
+ } else if (!this.isBadQuery(q)) {
+ me = this;
+ me.options.params.query = q;
+ $.get(this.serviceUrl, me.options.params, function(txt) { me.processResponse(txt); }, 'text');
+ }
+ },
+
+ isBadQuery: function(q) {
+ var i = this.badQueries.length;
+ while (i--) {
+ if (q.indexOf(this.badQueries[i]) === 0) { return true; }
+ }
+ return false;
+ },
+
+ hide: function() {
+ this.enabled = false;
+ this.selectedIndex = -1;
+ this.container.hide();
+ },
+
+ suggest: function() {
+ if (this.suggestions.length === 0) {
+ this.hide();
+ return;
+ }
+
+ var me, len, div, f, v, i, s, mOver, mClick, l, img;
+ me = this;
+ len = this.suggestions.length;
+ f = this.options.fnFormatResult;
+ v = this.getQuery(this.currentValue);
+ mOver = function(xi) { return function() { me.activate(xi); }; };
+ mClick = function(xi) { return function() { me.select(xi); }; };
+ this.container.hide().empty();
+ for (i = 0; i < len; i++) {
+ s = this.suggestions[i];
+ l = this.links[i];
+ img = '<img height="24" width="24" src="' + this.photos[i] + '" alt="' + s + '" /> ';
+ div = $((me.selectedIndex === i ? '<div class="selected"' : '<div') + ' title="' + l + '">' + img + f(s, this.data[i], v) + '</div>');
+ div.mouseover(mOver(i));
+ div.click(mClick(i));
+ this.container.append(div);
+ }
+ this.enabled = true;
+ this.container.show();
+ },
+
+ processResponse: function(text) {
+ var response;
+ try {
+ response = eval('(' + text + ')');
+ } catch (err) { return; }
+ if (!$.isArray(response.data)) { response.data = []; }
+ if(!this.options.noCache){
+ this.cachedResponse[response.query] = response;
+ if (response.suggestions.length === 0) { this.badQueries.push(response.query); }
+ }
+ if (response.query === this.getQuery(this.currentValue)) {
+ this.photos = response.photos;
+ this.links = response.links;
+ this.suggestions = response.suggestions;
+ this.data = response.data;
+ this.suggest();
+ }
+ },
+
+ activate: function(index) {
+ var divs, activeItem;
+ divs = this.container.children();
+ // Clear previous selection:
+ if (this.selectedIndex !== -1 && divs.length > this.selectedIndex) {
+ $(divs.get(this.selectedIndex)).removeClass();
+ }
+ this.selectedIndex = index;
+ if (this.selectedIndex !== -1 && divs.length > this.selectedIndex) {
+ activeItem = divs.get(this.selectedIndex);
+ $(activeItem).addClass('selected');
+ }
+ return activeItem;
+ },
+
+ deactivate: function(div, index) {
+ div.className = '';
+ if (this.selectedIndex === index) { this.selectedIndex = -1; }
+ },
+
+ select: function(i) {
+ var selectedValue, f;
+ selectedValue = this.suggestions[i];
+ if (selectedValue) {
+ this.el.val(selectedValue);
+ if (this.options.autoSubmit) {
+ f = this.el.parents('form');
+ if (f.length > 0) { f.get(0).submit(); }
+ }
+ this.ignoreValueChange = true;
+ this.hide();
+ this.onSelect(i);
+ }
+ },
+
+ moveUp: function() {
+ if (this.selectedIndex === -1) { return; }
+ if (this.selectedIndex === 0) {
+ this.container.children().get(0).className = '';
+ this.selectedIndex = -1;
+ this.el.val(this.currentValue);
+ return;
+ }
+ this.adjustScroll(this.selectedIndex - 1);
+ },
+
+ moveDown: function() {
+ if (this.selectedIndex === (this.suggestions.length - 1)) { return; }
+ this.adjustScroll(this.selectedIndex + 1);
+ },
+
+ adjustScroll: function(i) {
+ var activeItem, offsetTop, upperBound, lowerBound;
+ activeItem = this.activate(i);
+ offsetTop = activeItem.offsetTop;
+ upperBound = this.container.scrollTop();
+ lowerBound = upperBound + this.options.maxHeight - 25;
+ if (offsetTop < upperBound) {
+ this.container.scrollTop(offsetTop);
+ } else if (offsetTop > lowerBound) {
+ this.container.scrollTop(offsetTop - this.options.maxHeight + 25);
+ }
+ this.el.val(this.getValue(this.suggestions[i]));
+ },
+
+ onSelect: function(i) {
+ var me, fn, s, d;
+ me = this;
+ fn = me.options.onSelect;
+ s = me.suggestions[i];
+ d = me.data[i];
+ me.el.val(me.getValue(s));
+ if ($.isFunction(fn)) { fn(s, d, me.el); }
+ },
+
+ getValue: function(value){
+ var del, currVal, arr, me;
+ me = this;
+ del = me.options.delimiter;
+ if (!del) { return value; }
+ currVal = me.currentValue;
+ arr = currVal.split(del);
+ if (arr.length === 1) { return value; }
+ return currVal.substr(0, currVal.length - arr[arr.length - 1].length) + value;
+ }
+
+ };
+
+}(jQuery));
diff --git a/mod/acl.php b/mod/acl.php index 402d37376..168b1f59f 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -127,12 +127,15 @@ function acl_init(&$a){ if($type == 'm') { $x = array(); $x['query'] = $search; + $x['photos'] = array(); + $x['links'] = array(); $x['suggestions'] = array(); $x['data'] = array(); if(count($r)) { foreach($r as $g) { - $x['suggestions'][] = sprintf( t('%s [%s]'),$g['name'],$g['url']); - // '<img src="' . $g['micro'] . ' height="16" width="16" alt="' . t('Image/photo') . '" />' . + $x['photos'][] = $g['micro']; + $x['links'][] = $g['url']; + $x['suggestions'][] = $g['name']; // sprintf( t('%s [%s]'),$g['name'],$g['url']); $x['data'][] = intval($g['id']); } } diff --git a/mod/message.php b/mod/message.php index 8cfa0256c..71f83b47a 100644 --- a/mod/message.php +++ b/mod/message.php @@ -18,7 +18,7 @@ function message_init(&$a) { )); $base = $a->get_baseurl(); - $a->page['htmlhead'] .= '<script src="' . $a->get_baseurl(true) . '/library/jquery_ac/jquery.autocomplete-min.js" ></script>'; + $a->page['htmlhead'] .= '<script src="' . $a->get_baseurl(true) . '/library/jquery_ac/friendica.complete.js" ></script>'; $a->page['htmlhead'] .= <<< EOT <script>$(document).ready(function() { @@ -172,7 +172,7 @@ function message_content(&$a) { )); $preselect = (isset($a->argv[2])?array($a->argv[2]):false); - + $prename = $preurl = $preid = ''; @@ -188,7 +188,7 @@ function message_content(&$a) { } } - $prefill = (($preselect) ? $prename . ' [' . $preurl . ']' : ''); + $prefill = (($preselect) ? $prename : ''); // the ugly select box @@ -198,6 +198,7 @@ function message_content(&$a) { $o .= replace_macros($tpl,array( '$header' => t('Send Private Message'), '$to' => t('To:'), + '$showinputs' => 'true', '$prefill' => $prefill, '$autocomp' => $autocomp, '$preid' => $preid, @@ -376,9 +377,10 @@ function message_content(&$a) { $seen = $message['seen']; } + + $select = $message['name'] . '<input type="hidden" name="messageto" value="' . $contact_id . '" />'; $parent = '<input type="hidden" name="replyto" value="' . $message['parent-uri'] . '" />'; - $tpl = get_markup_template('mail_display.tpl'); $o = replace_macros($tpl, array( @@ -393,6 +395,7 @@ function message_content(&$a) { // reply '$header' => t('Send Reply'), '$to' => t('To:'), + '$showinputs' => '', '$subject' => t('Subject:'), '$subjtxt' => template_escape($message['title']), '$readonly' => ' readonly="readonly" style="background: #BBBBBB;" ', diff --git a/util/messages.po b/util/messages.po index 37878d86a..485dfd7b7 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 2.3.1337\n" +"Project-Id-Version: 3.0.1338\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-05-09 10:00-0700\n" +"POT-Creation-Date: 2012-05-10 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -48,8 +48,8 @@ msgstr "" #: ../../mod/register.php:38 ../../mod/regmod.php:116 ../../mod/item.php:124 #: ../../mod/item.php:140 ../../mod/profile_photo.php:19 #: ../../mod/profile_photo.php:139 ../../mod/profile_photo.php:150 -#: ../../mod/profile_photo.php:163 ../../mod/message.php:40 -#: ../../mod/message.php:92 ../../mod/allfriends.php:9 +#: ../../mod/profile_photo.php:163 ../../mod/message.php:44 +#: ../../mod/message.php:96 ../../mod/allfriends.php:9 #: ../../mod/nogroup.php:25 ../../mod/wall_upload.php:53 #: ../../mod/follow.php:8 ../../mod/display.php:138 ../../mod/profiles.php:7 #: ../../mod/profiles.php:365 ../../mod/delegate.php:6 @@ -158,7 +158,7 @@ msgstr "" #: ../../addon/irc/irc.php:55 ../../addon/blogger/blogger.php:102 #: ../../addon/posterous/posterous.php:103 #: ../../view/theme/cleanzero/config.php:80 -#: ../../view/theme/diabook/theme.php:683 +#: ../../view/theme/diabook/theme.php:685 #: ../../view/theme/diabook/config.php:190 #: ../../view/theme/quattro/config.php:52 ../../view/theme/dispy/config.php:70 #: ../../include/conversation.php:555 @@ -532,8 +532,8 @@ msgid "Share" msgstr "" #: ../../mod/photos.php:1214 ../../mod/editpost.php:104 -#: ../../mod/wallmessage.php:145 ../../mod/message.php:206 -#: ../../mod/message.php:398 ../../include/conversation.php:361 +#: ../../mod/wallmessage.php:145 ../../mod/message.php:213 +#: ../../mod/message.php:405 ../../include/conversation.php:361 #: ../../include/conversation.php:706 ../../include/conversation.php:983 msgid "Please wait" msgstr "" @@ -631,7 +631,7 @@ msgid "Edit" msgstr "" #: ../../mod/editpost.php:96 ../../mod/wallmessage.php:143 -#: ../../mod/message.php:204 ../../mod/message.php:396 +#: ../../mod/message.php:211 ../../mod/message.php:403 #: ../../include/conversation.php:965 msgid "Upload photo" msgstr "" @@ -641,7 +641,7 @@ msgid "Attach file" msgstr "" #: ../../mod/editpost.php:98 ../../mod/wallmessage.php:144 -#: ../../mod/message.php:205 ../../mod/message.php:397 +#: ../../mod/message.php:212 ../../mod/message.php:404 #: ../../include/conversation.php:969 msgid "Insert web link" msgstr "" @@ -1775,8 +1775,8 @@ msgid "Remove account" msgstr "" #: ../../mod/settings.php:88 ../../mod/admin.php:735 ../../mod/admin.php:940 -#: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:700 -#: ../../include/nav.php:137 +#: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:571 +#: ../../view/theme/diabook/theme.php:701 ../../include/nav.php:137 msgid "Settings" msgstr "" @@ -2368,7 +2368,7 @@ msgstr "" msgid "Number of daily wall messages for %s exceeded. Message failed." msgstr "" -#: ../../mod/wallmessage.php:56 ../../mod/message.php:61 +#: ../../mod/wallmessage.php:56 ../../mod/message.php:65 msgid "No recipient selected." msgstr "" @@ -2376,15 +2376,15 @@ msgstr "" msgid "Unable to check your home location." msgstr "" -#: ../../mod/wallmessage.php:62 ../../mod/message.php:68 +#: ../../mod/wallmessage.php:62 ../../mod/message.php:72 msgid "Message could not be sent." msgstr "" -#: ../../mod/wallmessage.php:65 ../../mod/message.php:71 +#: ../../mod/wallmessage.php:65 ../../mod/message.php:75 msgid "Message collection failure." msgstr "" -#: ../../mod/wallmessage.php:68 ../../mod/message.php:74 +#: ../../mod/wallmessage.php:68 ../../mod/message.php:78 msgid "Message sent." msgstr "" @@ -2397,7 +2397,7 @@ msgstr "" msgid "Please enter a link URL:" msgstr "" -#: ../../mod/wallmessage.php:131 ../../mod/message.php:195 +#: ../../mod/wallmessage.php:131 ../../mod/message.php:199 msgid "Send Private Message" msgstr "" @@ -2408,18 +2408,18 @@ msgid "" "your site allow private mail from unknown senders." msgstr "" -#: ../../mod/wallmessage.php:133 ../../mod/message.php:196 -#: ../../mod/message.php:388 +#: ../../mod/wallmessage.php:133 ../../mod/message.php:200 +#: ../../mod/message.php:395 msgid "To:" msgstr "" -#: ../../mod/wallmessage.php:134 ../../mod/message.php:197 -#: ../../mod/message.php:389 +#: ../../mod/wallmessage.php:134 ../../mod/message.php:204 +#: ../../mod/message.php:396 msgid "Subject:" msgstr "" -#: ../../mod/wallmessage.php:140 ../../mod/message.php:201 -#: ../../mod/message.php:392 ../../mod/invite.php:113 +#: ../../mod/wallmessage.php:140 ../../mod/message.php:208 +#: ../../mod/message.php:399 ../../mod/invite.php:113 msgid "Your message:" msgstr "" @@ -2962,7 +2962,7 @@ msgstr "" msgid "New Message" msgstr "" -#: ../../mod/message.php:65 +#: ../../mod/message.php:69 msgid "Unable to locate contact information." msgstr "" @@ -2974,55 +2974,55 @@ msgstr "" msgid "Conversation removed." msgstr "" -#: ../../mod/message.php:237 +#: ../../mod/message.php:244 msgid "No messages." msgstr "" -#: ../../mod/message.php:244 +#: ../../mod/message.php:251 #, php-format msgid "Unknown sender - %s" msgstr "" -#: ../../mod/message.php:247 +#: ../../mod/message.php:254 #, php-format msgid "You and %s" msgstr "" -#: ../../mod/message.php:250 +#: ../../mod/message.php:257 #, php-format msgid "%s and You" msgstr "" -#: ../../mod/message.php:260 ../../mod/message.php:381 +#: ../../mod/message.php:267 ../../mod/message.php:388 msgid "Delete conversation" msgstr "" -#: ../../mod/message.php:263 +#: ../../mod/message.php:270 msgid "D, d M Y - g:i A" msgstr "" -#: ../../mod/message.php:265 +#: ../../mod/message.php:272 #, php-format msgid "%d message" msgid_plural "%d messages" msgstr[0] "" msgstr[1] "" -#: ../../mod/message.php:300 +#: ../../mod/message.php:307 msgid "Message not available." msgstr "" -#: ../../mod/message.php:365 +#: ../../mod/message.php:372 msgid "Delete message" msgstr "" -#: ../../mod/message.php:383 +#: ../../mod/message.php:390 msgid "" "No secure communications available. You <strong>may</strong> be able to " "respond from the sender's profile page." msgstr "" -#: ../../mod/message.php:387 +#: ../../mod/message.php:394 msgid "Send Reply" msgstr "" @@ -4683,10 +4683,6 @@ msgstr "" msgid "event" msgstr "" -#: ../../addon/hangman/hangman.php:19 -msgid "Hangman" -msgstr "" - #: ../../addon/uhremotestorage/uhremotestorage.php:84 #, php-format msgid "" @@ -5641,26 +5637,38 @@ msgstr "" #: ../../view/theme/diabook/theme.php:130 #: ../../view/theme/diabook/theme.php:571 +#: ../../view/theme/diabook/theme.php:675 +#: ../../view/theme/diabook/config.php:201 msgid "Community Pages" msgstr "" #: ../../view/theme/diabook/theme.php:418 +#: ../../view/theme/diabook/theme.php:677 +#: ../../view/theme/diabook/config.php:203 msgid "Community Profiles" msgstr "" #: ../../view/theme/diabook/theme.php:439 +#: ../../view/theme/diabook/theme.php:682 +#: ../../view/theme/diabook/config.php:208 msgid "Last users" msgstr "" #: ../../view/theme/diabook/theme.php:468 +#: ../../view/theme/diabook/theme.php:684 +#: ../../view/theme/diabook/config.php:210 msgid "Last likes" msgstr "" #: ../../view/theme/diabook/theme.php:513 +#: ../../view/theme/diabook/theme.php:683 +#: ../../view/theme/diabook/config.php:209 msgid "Last photos" msgstr "" #: ../../view/theme/diabook/theme.php:550 +#: ../../view/theme/diabook/theme.php:680 +#: ../../view/theme/diabook/config.php:206 msgid "Find Friends" msgstr "" @@ -5677,6 +5685,8 @@ msgid "Invite Friends" msgstr "" #: ../../view/theme/diabook/theme.php:606 +#: ../../view/theme/diabook/theme.php:676 +#: ../../view/theme/diabook/config.php:202 msgid "Earth Layers" msgstr "" @@ -5696,14 +5706,20 @@ msgid "Set latitude (Y) for Earth Layer" msgstr "" #: ../../view/theme/diabook/theme.php:626 +#: ../../view/theme/diabook/theme.php:678 +#: ../../view/theme/diabook/config.php:204 msgid "Help or @NewHere ?" msgstr "" #: ../../view/theme/diabook/theme.php:633 +#: ../../view/theme/diabook/theme.php:679 +#: ../../view/theme/diabook/config.php:205 msgid "Connect Services" msgstr "" #: ../../view/theme/diabook/theme.php:640 +#: ../../view/theme/diabook/theme.php:681 +#: ../../view/theme/diabook/config.php:207 msgid "Last Tweets" msgstr "" @@ -5712,54 +5728,34 @@ msgstr "" msgid "Set twitter search term" msgstr "" -#: ../../view/theme/diabook/theme.php:673 -#: ../../view/theme/diabook/config.php:201 -msgid "Show \"Cummunity Pages\" at right-hand coloumn?" -msgstr "" - -#: ../../view/theme/diabook/theme.php:674 -#: ../../view/theme/diabook/config.php:202 -msgid "Show \"Earth Layers\" at right-hand coloumn?" -msgstr "" - -#: ../../view/theme/diabook/theme.php:675 -#: ../../view/theme/diabook/config.php:203 -msgid "Show \"Cummunity Profiles\" at right-hand coloumn?" -msgstr "" - -#: ../../view/theme/diabook/theme.php:676 -#: ../../view/theme/diabook/config.php:204 -msgid "Show \"Help or @NewHere\" at right-hand coloumn?" -msgstr "" - -#: ../../view/theme/diabook/theme.php:677 -#: ../../view/theme/diabook/config.php:205 -msgid "Show \"Connect Services\" at right-hand coloumn?" -msgstr "" - -#: ../../view/theme/diabook/theme.php:678 -#: ../../view/theme/diabook/config.php:206 -msgid "Show \"Find Friends\" at right-hand coloumn?" -msgstr "" - -#: ../../view/theme/diabook/theme.php:679 -#: ../../view/theme/diabook/config.php:207 -msgid "Show \"Last Tweets\" at right-hand coloumn?" -msgstr "" - -#: ../../view/theme/diabook/theme.php:680 -#: ../../view/theme/diabook/config.php:208 -msgid "Show \"Last Users\" at right-hand coloumn?" +#: ../../view/theme/diabook/theme.php:663 +#: ../../view/theme/diabook/theme.php:664 +#: ../../view/theme/diabook/theme.php:665 +#: ../../view/theme/diabook/theme.php:666 +#: ../../view/theme/diabook/theme.php:667 +#: ../../view/theme/diabook/theme.php:668 +#: ../../view/theme/diabook/theme.php:669 +#: ../../view/theme/diabook/theme.php:670 +#: ../../view/theme/diabook/theme.php:671 +#: ../../view/theme/diabook/theme.php:672 ../../include/acl_selectors.php:288 +msgid "don't show" msgstr "" -#: ../../view/theme/diabook/theme.php:681 -#: ../../view/theme/diabook/config.php:209 -msgid "Show \"Last Photos\" at right-hand coloumn?" +#: ../../view/theme/diabook/theme.php:663 +#: ../../view/theme/diabook/theme.php:664 +#: ../../view/theme/diabook/theme.php:665 +#: ../../view/theme/diabook/theme.php:666 +#: ../../view/theme/diabook/theme.php:667 +#: ../../view/theme/diabook/theme.php:668 +#: ../../view/theme/diabook/theme.php:669 +#: ../../view/theme/diabook/theme.php:670 +#: ../../view/theme/diabook/theme.php:671 +#: ../../view/theme/diabook/theme.php:672 ../../include/acl_selectors.php:287 +msgid "show" msgstr "" -#: ../../view/theme/diabook/theme.php:682 -#: ../../view/theme/diabook/config.php:210 -msgid "Show \"Last Likes\" at right-hand coloumn?" +#: ../../view/theme/diabook/theme.php:673 +msgid "Show/hide boxes at right-hand coloumn:" msgstr "" #: ../../view/theme/diabook/config.php:194 @@ -6683,14 +6679,6 @@ msgstr "" msgid "Visible to everybody" msgstr "" -#: ../../include/acl_selectors.php:287 -msgid "show" -msgstr "" - -#: ../../include/acl_selectors.php:288 -msgid "don't show" -msgstr "" - #: ../../include/enotify.php:14 msgid "Friendica Notification" msgstr "" diff --git a/view/head.tpl b/view/head.tpl index 7638e56ca..dfb626ebc 100644 --- a/view/head.tpl +++ b/view/head.tpl @@ -36,6 +36,7 @@ obj.value = ''; $("#comment-edit-text-" + id).addClass("comment-edit-text-full"); $("#comment-edit-text-" + id).removeClass("comment-edit-text-empty"); + $("#mod-cmnt-wrap-" + id).show(); openMenu("comment-edit-submit-wrapper-" + id); } } @@ -44,6 +45,7 @@ obj.value = '$comment'; $("#comment-edit-text-" + id).removeClass("comment-edit-text-full"); $("#comment-edit-text-" + id).addClass("comment-edit-text-empty"); + $("#mod-cmnt-wrap-" + id).hide(); closeMenu("comment-edit-submit-wrapper-" + id); } } diff --git a/view/moderated_comment.tpl b/view/moderated_comment.tpl new file mode 100644 index 000000000..911c35f33 --- /dev/null +++ b/view/moderated_comment.tpl @@ -0,0 +1,34 @@ + <div class="comment-wwedit-wrapper" id="comment-edit-wrapper-$id" style="display: block;"> + <form class="comment-edit-form" id="comment-edit-form-$id" action="item" method="post" onsubmit="post_comment($id); return false;"> + <input type="hidden" name="type" value="$type" /> + <input type="hidden" name="profile_uid" value="$profile_uid" /> + <input type="hidden" name="parent" value="$parent" /> + <input type="hidden" name="return" value="$return_path" /> + <input type="hidden" name="jsreload" value="$jsreload" /> + <input type="hidden" name="preview" id="comment-preview-inp-$id" value="0" /> + + <div class="comment-edit-photo" id="comment-edit-photo-$id" > + <a class="comment-edit-photo-link" href="$mylink" title="$mytitle"><img class="my-comment-photo" src="$myphoto" alt="$mytitle" title="$mytitle" /></a> + </div> + <div class="comment-edit-photo-end"></div> + <div id="mod-cmnt-wrap-$id" class="mod-cmnt-wrap" style="display:none"> + <div id="mod-cmnt-name-lbl-$id" class="mod-cmnt-name-lbl">$lbl_modname</div> + <input type="text" id="mod-cmnt-name-$id" class="mod-cmnt-name" name="mod-cmnt-name" value="$modname" /> + <div id="mod-cmnt-email-lbl-$id" class="mod-cmnt-email-lbl">$lbl_modemail</div> + <input type="text" id="mod-cmnt-email-$id" class="mod-cmnt-email" name="mod-cmnt-email" value="$modemail" /> + <div id="mod-cmnt-url-lbl-$id" class="mod-cmnt-url-lbl">$lbl_modurl</div> + <input type="text" id="mod-cmnt-url-$id" class="mod-cmnt-url" name="mod-cmnt-url" value="$modurl" /> + </div> + <textarea id="comment-edit-text-$id" class="comment-edit-text-empty" name="body" onFocus="commentOpen(this,$id);" onBlur="commentClose(this,$id);" >$comment</textarea> + + <div class="comment-edit-text-end"></div> + <div class="comment-edit-submit-wrapper" id="comment-edit-submit-wrapper-$id" style="display: none;" > + <input type="submit" onclick="post_comment($id); return false;" id="comment-edit-submit-$id" class="comment-edit-submit" name="submit" value="$submit" /> + <span onclick="preview_comment($id);" id="comment-edit-preview-link-$id" class="fakelink">$preview</span> + <div id="comment-edit-preview-$id" class="comment-edit-preview" style="display:none;"></div> + </div> + + <div class="comment-edit-end"></div> + </form> + + </div> diff --git a/view/theme/darkzero/style.css b/view/theme/darkzero/style.css index 12c7d3c25..a3df740eb 100644 --- a/view/theme/darkzero/style.css +++ b/view/theme/darkzero/style.css @@ -105,3 +105,17 @@ blockquote { input#acl-search { background-color: #aaa; } + + + +.notify-seen { + background:#666; +} + +#nav-notifications-menu { + background: #2e2e2f; +} + +#nav-notifications-menu li:hover { + background: #444; +}
\ No newline at end of file diff --git a/view/theme/diabook/communityhome.tpl b/view/theme/diabook/communityhome.tpl index 17acc1eab..6fa330140 100755 --- a/view/theme/diabook/communityhome.tpl +++ b/view/theme/diabook/communityhome.tpl @@ -10,16 +10,7 @@ <div id="mapcontrol" style="display:none;"> <form id="mapform" action="network" method="post" > -<span style="width: 500px;position: relative;float: right;right:20px;"><p>this ist still under development. -the idea is to provide a map with different layers(e.g. earth population, atomic power plants, wheat growing acreages, sunrise or what you want) -and markers(events, demos, friends, anything, that is intersting for you). -These layer and markers should be importable and deletable by the user.</p> -<p>help on this feature is very appreciated. i am not that good in js so it's a start, but needs tweaks and further dev. -just contact me, if you are intesrested in joining</p> -<p>http://localhost/friendica/profile/thomas</p> -<p>this is build with <b>mapquery</b> http://mapquery.org/ and -<b>openlayers</b>http://openlayers.org/</p> -</span> +<div id="layermanager" style="width: 350px;position: relative;float: right;right:20px;"></div> <div id="map2" style="height:350px;width:350px;"></div> <div id="mouseposition" style="width: 350px;"></div> {{inc field_input.tpl with $field=$ELZoom}}{{endinc}} @@ -28,6 +19,16 @@ just contact me, if you are intesrested in joining</p> <div class="settings-submit-wrapper"> <input id="mapsub" type="submit" value="$sub" class="settings-submit" name="diabook-settings-map-sub"></input> </div> +<span style="width: 500px;"><p>this ist still under development. +the idea is to provide a map with different layers(e.g. earth population, atomic power plants, wheat growing acreages, sunrise or what you want) +and markers(events, demos, friends, anything, that is intersting for you). +These layer and markers should be importable and deletable by the user.</p> +<p>help on this feature is very appreciated. i am not that good in js so it's a start, but needs tweaks and further dev. +just contact me, if you are intesrested in joining</p> +<p>https://toktan.org/profile/thomas</p> +<p>this is build with <b>mapquery</b> http://mapquery.org/ and +<b>openlayers</b>http://openlayers.org/</p> +</span> </form> </div> diff --git a/view/theme/diabook/config.php b/view/theme/diabook/config.php index 2a418909b..cc7da1b00 100644 --- a/view/theme/diabook/config.php +++ b/view/theme/diabook/config.php @@ -196,15 +196,15 @@ function diabook_form(&$a, $font_size, $line_height, $resolution, $color, $TSear '$color' => array('diabook_color', t('Set color scheme'), $color, '', $colors), '$TSearchTerm' => array('diabook_TSearchTerm', t('Set twitter search term'), $TSearchTerm, '', $TSearchTerm), '$ELZoom' => array('diabook_ELZoom', t('Set zoomfactor for Earth Layer'), $ELZoom, '', $ELZoom), - '$ELPosX' => array('diabook_ELPosX', t('Set longitude (X) for Earth Layer'), $ELPosX, '', $ELPosX), - '$ELPosY' => array('diabook_ELPosY', t('Set latitude (Y) for Earth Layer'), $ELPosY, '', $ELPosY), + '$ELPosX' => array('diabook_ELPosX', t('Set longitude (X) for Earth Layers'), $ELPosX, '', $ELPosX), + '$ELPosY' => array('diabook_ELPosY', t('Set latitude (Y) for Earth Layers'), $ELPosY, '', $ELPosY), '$close_pages' => array('diabook_close_pages', t('Community Pages'), $close_pages, '', $close_pagesC), '$close_mapquery' => array('diabook_close_mapquery', t('Earth Layers'), $close_mapquery, '', $close_mapqueryC), '$close_profiles' => array('diabook_close_profiles', t('Community Profiles'), $close_profiles, '', $close_profilesC), '$close_helpers' => array('diabook_close_helpers', t('Help or @NewHere ?'), $close_helpers, '', $close_helpersC), '$close_services' => array('diabook_close_services', t('Connect Services'), $close_services, '', $close_servicesC), '$close_friends' => array('diabook_close_friends', t('Find Friends'), $close_friends, '', $close_friendsC), - '$close_twitter' => array('diabook_close_twitter', t('Last Tweets'), $close_twitter, '', $close_twitterC), + '$close_twitter' => array('diabook_close_twitter', t('Last tweets'), $close_twitter, '', $close_twitterC), '$close_lastusers' => array('diabook_close_lastusers', t('Last users'), $close_lastusers, '', $close_lastusersC), '$close_lastphotos' => array('diabook_close_lastphotos', t('Last photos'), $close_lastphotos, '', $close_lastphotosC), '$close_lastlikes' => array('diabook_close_lastlikes', t('Last likes'), $close_lastlikes, '', $close_lastlikesC), diff --git a/view/theme/diabook/js/jquery-ui-1.8.20.custom.min.js b/view/theme/diabook/js/jquery-ui-1.8.20.custom.min.js index 8b173d965..de1d7ec14 100644 --- a/view/theme/diabook/js/jquery-ui-1.8.20.custom.min.js +++ b/view/theme/diabook/js/jquery-ui-1.8.20.custom.min.js @@ -40,10 +40,6 @@ * Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ (function(a,b){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var b=this,c=b.options;b.running=0,b.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"),b.headers=b.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){if(c.disabled)return;a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){if(c.disabled)return;a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){if(c.disabled)return;a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){if(c.disabled)return;a(this).removeClass("ui-state-focus")}),b.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(c.navigation){var d=b.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var e=d.closest(".ui-accordion-header");e.length?b.active=e:b.active=d.closest(".ui-accordion-content").prev()}}b.active=b._findActive(b.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"),b.active.next().addClass("ui-accordion-content-active"),b._createIcons(),b.resize(),b.element.attr("role","tablist"),b.headers.attr("role","tab").bind("keydown.accordion",function(a){return b._keydown(a)}).next().attr("role","tabpanel"),b.headers.not(b.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide(),b.active.length?b.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):b.headers.eq(0).attr("tabIndex",0),a.browser.safari||b.headers.find("a").attr("tabIndex",-1),c.event&&b.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(a){b._clickHandler.call(b,a,this),a.preventDefault()})},_createIcons:function(){var b=this.options;b.icons&&(a("<span></span>").addClass("ui-icon "+b.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(b.icons.header).toggleClass(b.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove(),this.element.removeClass("ui-accordion-icons")},destroy:function(){var b=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"),this.headers.find("a").removeAttr("tabIndex"),this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");return(b.autoHeight||b.fillHeight)&&c.css("height",""),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b=="active"&&this.activate(c),b=="icons"&&(this._destroyIcons(),c&&this._createIcons()),b=="disabled"&&this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(b){if(this.options.disabled||b.altKey||b.ctrlKey)return;var c=a.ui.keyCode,d=this.headers.length,e=this.headers.index(b.target),f=!1;switch(b.keyCode){case c.RIGHT:case c.DOWN:f=this.headers[(e+1)%d];break;case c.LEFT:case c.UP:f=this.headers[(e-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:b.target},b.target),b.preventDefault()}return f?(a(b.target).attr("tabIndex",-1),a(f).attr("tabIndex",0),f.focus(),!1):!0},resize:function(){var b=this.options,c;if(b.fillSpace){if(a.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height(),a.browser.msie&&this.element.parent().css("overflow",d),this.headers.each(function(){c-=a(this).outerHeight(!0)}),this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else b.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c));return this},activate:function(a){this.options.active=a;var b=this._findActive(a)[0];return this._clickHandler({target:b},b),this},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===!1?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,c){var d=this.options;if(d.disabled)return;if(!b.target){if(!d.collapsible)return;this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),this.active.next().addClass("ui-accordion-content-active");var e=this.active.next(),f={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:e},g=this.active=a([]);this._toggle(g,e,f);return}var h=a(b.currentTarget||c),i=h[0]===this.active[0];d.active=d.collapsible&&i?!1:this.headers.index(h);if(this.running||!d.collapsible&&i)return;var j=this.active,g=h.next(),e=this.active.next(),f={options:d,newHeader:i&&d.collapsible?a([]):h,oldHeader:this.active,newContent:i&&d.collapsible?a([]):g,oldContent:e},k=this.headers.index(this.active[0])>this.headers.index(h[0]);this.active=i?a([]):h,this._toggle(g,e,f,i,k),j.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),i||(h.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),h.next().addClass("ui-accordion-content-active"));return},_toggle:function(b,c,d,e,f){var g=this,h=g.options;g.toShow=b,g.toHide=c,g.data=d;var i=function(){if(!g)return;return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data),g.running=c.size()===0?b.size():c.size();if(h.animated){var j={};h.collapsible&&e?j={toShow:a([]),toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace}:j={toShow:b,toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace},h.proxied||(h.proxied=h.animated),h.proxiedDuration||(h.proxiedDuration=h.duration),h.animated=a.isFunction(h.proxied)?h.proxied(j):h.proxied,h.duration=a.isFunction(h.proxiedDuration)?h.proxiedDuration(j):h.proxiedDuration;var k=a.ui.accordion.animations,l=h.duration,m=h.animated;m&&!k[m]&&!a.easing[m]&&(m="slide"),k[m]||(k[m]=function(a){this.slide(a,{easing:m,duration:l||700})}),k[m](j)}else h.collapsible&&e?b.toggle():(c.hide(),b.show()),i(!0);c.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur(),b.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(this.running)return;this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data)}}),a.extend(a.ui.accordion,{version:"1.8.20",animations:{slide:function(b,c){b=a.extend({easing:"swing",duration:300},b,c);if(!b.toHide.size()){b.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},b);return}if(!b.toShow.size()){b.toHide.animate({height:"hide",paddingTop:"hide",paddingBottom:"hide"},b);return}var d=b.toShow.css("overflow"),e=0,f={},g={},h=["height","paddingTop","paddingBottom"],i,j=b.toShow;i=j[0].style.width,j.width(j.parent().width()-parseFloat(j.css("paddingLeft"))-parseFloat(j.css("paddingRight"))-(parseFloat(j.css("borderLeftWidth"))||0)-(parseFloat(j.css("borderRightWidth"))||0)),a.each(h,function(c,d){g[d]="hide";var e=(""+a.css(b.toShow[0],d)).match(/^([\d+-.]+)(.*)$/);f[d]={value:e[1],unit:e[2]||"px"}}),b.toShow.css({height:0,overflow:"hidden"}).show(),b.toHide.filter(":hidden").each(b.complete).end().filter(":visible").animate(g,{step:function(a,c){c.prop=="height"&&(e=c.end-c.start===0?0:(c.now-c.start)/(c.end-c.start)),b.toShow[0].style[c.prop]=e*f[c.prop].value+f[c.prop].unit},duration:b.duration,easing:b.easing,complete:function(){b.autoHeight||b.toShow.css("height",""),b.toShow.css({width:i,overflow:d}),b.complete()}})},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1e3:200})}}})})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 * https://github.com/jquery/jquery-ui -* Includes: jquery.ui.autocomplete.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var b=this,c=this.element[0].ownerDocument,d;this.isMultiLine=this.element.is("textarea"),this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(b.options.disabled||b.element.propAttr("readOnly"))return;d=!1;var e=a.ui.keyCode;switch(c.keyCode){case e.PAGE_UP:b._move("previousPage",c);break;case e.PAGE_DOWN:b._move("nextPage",c);break;case e.UP:b._keyEvent("previous",c);break;case e.DOWN:b._keyEvent("next",c);break;case e.ENTER:case e.NUMPAD_ENTER:b.menu.active&&(d=!0,c.preventDefault());case e.TAB:if(!b.menu.active)return;b.menu.select(c);break;case e.ESCAPE:b.element.val(b.term),b.close(c);break;default:clearTimeout(b.searching),b.searching=setTimeout(function(){b.term!=b.element.val()&&(b.selectedItem=null,b.search(null,c))},b.options.delay)}}).bind("keypress.autocomplete",function(a){d&&(d=!1,a.preventDefault())}).bind("focus.autocomplete",function(){if(b.options.disabled)return;b.selectedItem=null,b.previous=b.element.val()}).bind("blur.autocomplete",function(a){if(b.options.disabled)return;clearTimeout(b.searching),b.closing=setTimeout(function(){b.close(a),b._change(a)},150)}),this._initSource(),this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",c)[0]).mousedown(function(c){var d=b.menu.element[0];a(c.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(c){c.target!==b.element[0]&&c.target!==d&&!a.ui.contains(d,c.target)&&b.close()})},1),setTimeout(function(){clearTimeout(b.closing)},13)}).menu({focus:function(a,c){var d=c.item.data("item.autocomplete");!1!==b._trigger("focus",a,{item:d})&&/^key/.test(a.originalEvent.type)&&b.element.val(d.value)},selected:function(a,d){var e=d.item.data("item.autocomplete"),f=b.previous;b.element[0]!==c.activeElement&&(b.element.focus(),b.previous=f,setTimeout(function(){b.previous=f,b.selectedItem=e},1)),!1!==b._trigger("select",a,{item:e})&&b.element.val(e.value),b.term=b.element.val(),b.close(a),b.selectedItem=e},blur:function(a,c){b.menu.element.is(":visible")&&b.element.val()!==b.term&&b.element.val(b.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"),a.fn.bgiframe&&this.menu.element.bgiframe(),b.beforeunloadHandler=function(){b.element.removeAttr("autocomplete")},a(window).bind("beforeunload",b.beforeunloadHandler)},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),this.menu.element.remove(),a(window).unbind("beforeunload",this.beforeunloadHandler),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b==="source"&&this._initSource(),b==="appendTo"&&this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]),b==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var b=this,c,d;a.isArray(this.options.source)?(c=this.options.source,this.source=function(b,d){d(a.ui.autocomplete.filter(c,b.term))}):typeof this.options.source=="string"?(d=this.options.source,this.source=function(c,e){b.xhr&&b.xhr.abort(),b.xhr=a.ajax({url:d,data:c,dataType:"json",success:function(a,b){e(a)},error:function(){e([])}})}):this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val(),this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)===!1)return;return this._search(a)},_search:function(a){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.source({term:a},this._response())},_response:function(){var a=this,b=++c;return function(d){b===c&&a.__response(d),a.pending--,a.pending||a.element.removeClass("ui-autocomplete-loading")}},__response:function(a){!this.options.disabled&&a&&a.length?(a=this._normalize(a),this._suggest(a),this._trigger("open")):this.close()},close:function(a){clearTimeout(this.closing),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.deactivate(),this._trigger("close",a))},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(b){return b.length&&b[0].label&&b[0].value?b:a.map(b,function(b){return typeof b=="string"?{label:b,value:b}:a.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(b){var c=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(c,b),this.menu.deactivate(),this.menu.refresh(),c.show(),this._resizeMenu(),c.position(a.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(b,c){var d=this;a.each(c,function(a,c){d._renderItem(b,c)})},_renderItem:function(b,c){return a("<li></li>").data("item.autocomplete",c).append(a("<a></a>").text(c.label)).appendTo(b)},_move:function(a,b){if(!this.menu.element.is(":visible")){this.search(null,b);return}if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term),this.menu.deactivate();return}this.menu[a](b)},widget:function(){return this.menu.element},_keyEvent:function(a,b){if(!this.isMultiLine||this.menu.element.is(":visible"))this._move(a,b),b.preventDefault()}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}})})(jQuery),function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(!a(c.target).closest(".ui-menu-item a").length)return;c.preventDefault(),b.select(c)}),this.refresh()},refresh:function(){var b=this,c=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");c.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(c){b.activate(c,a(this).parent())}).mouseleave(function(){b.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.scrollTop(),e=this.element.height();c<0?this.element.scrollTop(d+c):c>=e&&this.element.scrollTop(d+c-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end(),this._trigger("focus",a,{item:b})},deactivate:function(){if(!this.active)return;this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(!this.active){this.activate(c,this.element.children(b));return}var d=this.active[a+"All"](".ui-menu-item").eq(0);d.length?this.activate(c,d):this.activate(c,this.element.children(b))},nextPage:function(b){if(this.hasScroll()){if(!this.active||this.last()){this.activate(b,this.element.children(".ui-menu-item:first"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c-d+a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:last")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(b){if(this.hasScroll()){if(!this.active||this.first()){this.activate(b,this.element.children(".ui-menu-item:last"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c+d-a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:first")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})}(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui * Includes: jquery.ui.button.js * Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ (function(a,b){var c,d,e,f,g="ui-button ui-widget ui-state-default ui-corner-all",h="ui-state-hover ui-state-active ",i="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",j=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},k=function(b){var c=b.name,d=b.form,e=a([]);return c&&(d?e=a(d).find("[name='"+c+"']"):e=a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form})),e};a.widget("ui.button",{options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",j),typeof this.options.disabled!="boolean"?this.options.disabled=!!this.element.propAttr("disabled"):this.element.propAttr("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var b=this,h=this.options,i=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(i?"":" ui-state-active"),m="ui-state-focus";h.label===null&&(h.label=this.buttonElement.html()),this.buttonElement.addClass(g).attr("role","button").bind("mouseenter.button",function(){if(h.disabled)return;a(this).addClass("ui-state-hover"),this===c&&a(this).addClass("ui-state-active")}).bind("mouseleave.button",function(){if(h.disabled)return;a(this).removeClass(l)}).bind("click.button",function(a){h.disabled&&(a.preventDefault(),a.stopImmediatePropagation())}),this.element.bind("focus.button",function(){b.buttonElement.addClass(m)}).bind("blur.button",function(){b.buttonElement.removeClass(m)}),i&&(this.element.bind("change.button",function(){if(f)return;b.refresh()}),this.buttonElement.bind("mousedown.button",function(a){if(h.disabled)return;f=!1,d=a.pageX,e=a.pageY}).bind("mouseup.button",function(a){if(h.disabled)return;if(d!==a.pageX||e!==a.pageY)f=!0})),this.type==="checkbox"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).toggleClass("ui-state-active"),b.buttonElement.attr("aria-pressed",b.element[0].checked)}):this.type==="radio"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).addClass("ui-state-active"),b.buttonElement.attr("aria-pressed","true");var c=b.element[0];k(c).not(c).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown.button",function(){if(h.disabled)return!1;a(this).addClass("ui-state-active"),c=this,a(document).one("mouseup",function(){c=null})}).bind("mouseup.button",function(){if(h.disabled)return!1;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(b){if(h.disabled)return!1;(b.keyCode==a.ui.keyCode.SPACE||b.keyCode==a.ui.keyCode.ENTER)&&a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(b){b.keyCode===a.ui.keyCode.SPACE&&a(this).click()})),this._setOption("disabled",h.disabled),this._resetButton()},_determineButtonType:function(){this.element.is(":checkbox")?this.type="checkbox":this.element.is(":radio")?this.type="radio":this.element.is("input")?this.type="input":this.type="button";if(this.type==="checkbox"||this.type==="radio"){var a=this.element.parents().filter(":last"),b="label[for='"+this.element.attr("id")+"']";this.buttonElement=a.find(b),this.buttonElement.length||(a=a.length?a.siblings():this.element.siblings(),this.buttonElement=a.filter(b),this.buttonElement.length||(this.buttonElement=a.find(b))),this.element.addClass("ui-helper-hidden-accessible");var c=this.element.is(":checked");c&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.attr("aria-pressed",c)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(g+" "+h+" "+i).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title"),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled"){c?this.element.propAttr("disabled",!0):this.element.propAttr("disabled",!1);return}this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b),this.type==="radio"?k(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):this.type==="checkbox"&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if(this.type==="input"){this.options.label&&this.element.val(this.options.label);return}var b=this.buttonElement.removeClass(i),c=a("<span></span>",this.element[0].ownerDocument).addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary,f=[];d.primary||d.secondary?(this.options.text&&f.push("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary")),d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>"),d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>"),this.options.text||(f.push(e?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||b.attr("title",c))):f.push("ui-button-text-only"),b.addClass(f.join(" "))}}),a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c),a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")==="rtl";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(b?"ui-corner-left":"ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"),a.Widget.prototype.destroy.call(this)}})})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 @@ -66,60 +62,4 @@ * https://github.com/jquery/jquery-ui * Includes: jquery.ui.progressbar.js * Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){return a===b?this._value():(this._setOption("value",a),this)},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;return typeof a!="number"&&(a=0),Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.20"})})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.core.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -jQuery.effects||function(a,b){function c(b){var c;return b&&b.constructor==Array&&b.length==3?b:(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(b))?[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)]:(c=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(b))?[parseFloat(c[1])*2.55,parseFloat(c[2])*2.55,parseFloat(c[3])*2.55]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(b))?[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)]:(c=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(b))?[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)]:(c=/rgba\(0, 0, 0, 0\)/.exec(b))?e.transparent:e[a.trim(b).toLowerCase()]}function d(b,d){var e;do{e=a.curCSS(b,d);if(e!=""&&e!="transparent"||a.nodeName(b,"body"))break;d="backgroundColor"}while(b=b.parentNode);return c(e)}function h(){var a=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,b={},c,d;if(a&&a.length&&a[0]&&a[a[0]]){var e=a.length;while(e--)c=a[e],typeof a[c]=="string"&&(d=c.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()}),b[d]=a[c])}else for(c in a)typeof a[c]=="string"&&(b[c]=a[c]);return b}function i(b){var c,d;for(c in b)d=b[c],(d==null||a.isFunction(d)||c in g||/scrollbar/.test(c)||!/color/i.test(c)&&isNaN(parseFloat(d)))&&delete b[c];return b}function j(a,b){var c={_:0},d;for(d in b)a[d]!=b[d]&&(c[d]=b[d]);return c}function k(b,c,d,e){typeof b=="object"&&(e=c,d=null,c=b,b=c.effect),a.isFunction(c)&&(e=c,d=null,c={});if(typeof c=="number"||a.fx.speeds[c])e=d,d=c,c={};return a.isFunction(d)&&(e=d,d=null),c=c||{},d=d||c.duration,d=a.fx.off?0:typeof d=="number"?d:d in a.fx.speeds?a.fx.speeds[d]:a.fx.speeds._default,e=e||c.complete,[b,c,d,e]}function l(b){return!b||typeof b=="number"||a.fx.speeds[b]?!0:typeof b=="string"&&!a.effects[b]?!0:!1}a.effects={},a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","borderColor","color","outlineColor"],function(b,e){a.fx.step[e]=function(a){a.colorInit||(a.start=d(a.elem,e),a.end=c(a.end),a.colorInit=!0),a.elem.style[e]="rgb("+Math.max(Math.min(parseInt(a.pos*(a.end[0]-a.start[0])+a.start[0],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[1]-a.start[1])+a.start[1],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[2]-a.start[2])+a.start[2],10),255),0)+")"}});var e={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},f=["add","remove","toggle"],g={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(b,c,d,e){return a.isFunction(d)&&(e=d,d=null),this.queue(function(){var g=a(this),k=g.attr("style")||" ",l=i(h.call(this)),m,n=g.attr("class")||"";a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),m=i(h.call(this)),g.attr("class",n),g.animate(j(l,m),{queue:!1,duration:c,easing:d,complete:function(){a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),typeof g.attr("style")=="object"?(g.attr("style").cssText="",g.attr("style").cssText=k):g.attr("style",k),e&&e.apply(this,arguments),a.dequeue(this)}})})},a.fn.extend({_addClass:a.fn.addClass,addClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{add:b},c,d,e]):this._addClass(b)},_removeClass:a.fn.removeClass,removeClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{remove:b},c,d,e]):this._removeClass(b)},_toggleClass:a.fn.toggleClass,toggleClass:function(c,d,e,f,g){return typeof d=="boolean"||d===b?e?a.effects.animateClass.apply(this,[d?{add:c}:{remove:c},e,f,g]):this._toggleClass(c,d):a.effects.animateClass.apply(this,[{toggle:c},d,e,f])},switchClass:function(b,c,d,e,f){return a.effects.animateClass.apply(this,[{add:c,remove:b},d,e,f])}}),a.extend(a.effects,{version:"1.8.20",save:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.data("ec.storage."+b[c],a[0].style[b[c]])},restore:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.css(b[c],a.data("ec.storage."+b[c]))},setMode:function(a,b){return b=="toggle"&&(b=a.is(":hidden")?"show":"hide"),b},getBaseline:function(a,b){var c,d;switch(a[0]){case"top":c=0;break;case"middle":c=.5;break;case"bottom":c=1;break;default:c=a[0]/b.height}switch(a[1]){case"left":d=0;break;case"center":d=.5;break;case"right":d=1;break;default:d=a[1]/b.width}return{x:d,y:c}},createWrapper:function(b){if(b.parent().is(".ui-effects-wrapper"))return b.parent();var c={width:b.outerWidth(!0),height:b.outerHeight(!0),"float":b.css("float")},d=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e=document.activeElement;return b.wrap(d),(b[0]===e||a.contains(b[0],e))&&a(e).focus(),d=b.parent(),b.css("position")=="static"?(d.css({position:"relative"}),b.css({position:"relative"})):(a.extend(c,{position:b.css("position"),zIndex:b.css("z-index")}),a.each(["top","left","bottom","right"],function(a,d){c[d]=b.css(d),isNaN(parseInt(c[d],10))&&(c[d]="auto")}),b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),d.css(c).show()},removeWrapper:function(b){var c,d=document.activeElement;return b.parent().is(".ui-effects-wrapper")?(c=b.parent().replaceWith(b),(b[0]===d||a.contains(b[0],d))&&a(d).focus(),c):b},setTransition:function(b,c,d,e){return e=e||{},a.each(c,function(a,c){var f=b.cssUnit(c);f[0]>0&&(e[c]=f[0]*d+f[1])}),e}}),a.fn.extend({effect:function(b,c,d,e){var f=k.apply(this,arguments),g={options:f[1],duration:f[2],callback:f[3]},h=g.options.mode,i=a.effects[b];return a.fx.off||!i?h?this[h](g.duration,g.callback):this.each(function(){g.callback&&g.callback.call(this)}):i.call(this,g)},_show:a.fn.show,show:function(a){if(l(a))return this._show.apply(this,arguments);var b=k.apply(this,arguments);return b[1].mode="show",this.effect.apply(this,b)},_hide:a.fn.hide,hide:function(a){if(l(a))return this._hide.apply(this,arguments);var b=k.apply(this,arguments);return b[1].mode="hide",this.effect.apply(this,b)},__toggle:a.fn.toggle,toggle:function(b){if(l(b)||typeof b=="boolean"||a.isFunction(b))return this.__toggle.apply(this,arguments);var c=k.apply(this,arguments);return c[1].mode="toggle",this.effect.apply(this,c)},cssUnit:function(b){var c=this.css(b),d=[];return a.each(["em","px","%","pt"],function(a,b){c.indexOf(b)>0&&(d=[parseFloat(c),b])}),d}}),a.easing.jswing=a.easing.swing,a.extend(a.easing,{def:"easeOutQuad",swing:function(b,c,d,e,f){return a.easing[a.easing.def](b,c,d,e,f)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b+c:d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b+c:-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b*b+c:d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return b==0?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){return b==0?c:b==e?c+d:(b/=e/2)<1?d/2*Math.pow(2,10*(b-1))+c:d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*b)+c},easeInOutCirc:function(a,b,c,d,e){return(b/=e/2)<1?-d/2*(Math.sqrt(1-b*b)-1)+c:d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g))+c},easeOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*b)*Math.sin((b*e-f)*2*Math.PI/g)+d+c},easeInOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e/2)==2)return c+d;g||(g=e*.3*1.5);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return b<1?-0.5*h*Math.pow(2,10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g)+c:h*Math.pow(2,-10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g)*.5+d+c},easeInBack:function(a,c,d,e,f,g){return g==b&&(g=1.70158),e*(c/=f)*c*((g+1)*c-g)+d},easeOutBack:function(a,c,d,e,f,g){return g==b&&(g=1.70158),e*((c=c/f-1)*c*((g+1)*c+g)+1)+d},easeInOutBack:function(a,c,d,e,f,g){return g==b&&(g=1.70158),(c/=f/2)<1?e/2*c*c*(((g*=1.525)+1)*c-g)+d:e/2*((c-=2)*c*(((g*=1.525)+1)*c+g)+2)+d},easeInBounce:function(b,c,d,e,f){return e-a.easing.easeOutBounce(b,f-c,0,e,f)+d},easeOutBounce:function(a,b,c,d,e){return(b/=e)<1/2.75?d*7.5625*b*b+c:b<2/2.75?d*(7.5625*(b-=1.5/2.75)*b+.75)+c:b<2.5/2.75?d*(7.5625*(b-=2.25/2.75)*b+.9375)+c:d*(7.5625*(b-=2.625/2.75)*b+.984375)+c},easeInOutBounce:function(b,c,d,e,f){return c<f/2?a.easing.easeInBounce(b,c*2,0,e,f)*.5+d:a.easing.easeOutBounce(b,c*2-f,0,e,f)*.5+e*.5+d}})}(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.blind.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.effects.blind=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=f=="vertical"?"height":"width",i=f=="vertical"?g.height():g.width();e=="show"&&g.css(h,0);var j={};j[h]=e=="show"?i:0,g.animate(j,b.duration,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.bounce.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.effects.bounce=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"up",g=b.options.distance||20,h=b.options.times||5,i=b.duration||250;/show|hide/.test(e)&&d.push("opacity"),a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",g=b.options.distance||(j=="top"?c.outerHeight({margin:!0})/3:c.outerWidth({margin:!0})/3);e=="show"&&c.css("opacity",0).css(j,k=="pos"?-g:g),e=="hide"&&(g=g/(h*2)),e!="hide"&&h--;if(e=="show"){var l={opacity:1};l[j]=(k=="pos"?"+=":"-=")+g,c.animate(l,i/2,b.options.easing),g=g/2,h--}for(var m=0;m<h;m++){var n={},p={};n[j]=(k=="pos"?"-=":"+=")+g,p[j]=(k=="pos"?"+=":"-=")+g,c.animate(n,i/2,b.options.easing).animate(p,i/2,b.options.easing),g=e=="hide"?g*2:g/2}if(e=="hide"){var l={opacity:0};l[j]=(k=="pos"?"-=":"+=")+g,c.animate(l,i/2,b.options.easing,function(){c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)})}else{var n={},p={};n[j]=(k=="pos"?"-=":"+=")+g,p[j]=(k=="pos"?"+=":"-=")+g,c.animate(n,i/2,b.options.easing).animate(p,i/2,b.options.easing,function(){a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)})}c.queue("fx",function(){c.dequeue()}),c.dequeue()})}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.clip.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.effects.clip=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","height","width"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=c[0].tagName=="IMG"?g:c,i={size:f=="vertical"?"height":"width",position:f=="vertical"?"top":"left"},j=f=="vertical"?h.height():h.width();e=="show"&&(h.css(i.size,0),h.css(i.position,j/2));var k={};k[i.size]=e=="show"?j:0,k[i.position]=e=="show"?0:j/2,h.animate(k,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()}})})}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.drop.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.effects.drop=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","opacity"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight({margin:!0})/2:c.outerWidth({margin:!0})/2);e=="show"&&c.css("opacity",0).css(g,h=="pos"?-i:i);var j={opacity:e=="show"?1:0};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.explode.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.effects.explode=function(b){return this.queue(function(){var c=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3,d=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;b.options.mode=b.options.mode=="toggle"?a(this).is(":visible")?"hide":"show":b.options.mode;var e=a(this).show().css("visibility","hidden"),f=e.offset();f.top-=parseInt(e.css("marginTop"),10)||0,f.left-=parseInt(e.css("marginLeft"),10)||0;var g=e.outerWidth(!0),h=e.outerHeight(!0);for(var i=0;i<c;i++)for(var j=0;j<d;j++)e.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-j*(g/d),top:-i*(h/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/d,height:h/c,left:f.left+j*(g/d)+(b.options.mode=="show"?(j-Math.floor(d/2))*(g/d):0),top:f.top+i*(h/c)+(b.options.mode=="show"?(i-Math.floor(c/2))*(h/c):0),opacity:b.options.mode=="show"?0:1}).animate({left:f.left+j*(g/d)+(b.options.mode=="show"?0:(j-Math.floor(d/2))*(g/d)),top:f.top+i*(h/c)+(b.options.mode=="show"?0:(i-Math.floor(c/2))*(h/c)),opacity:b.options.mode=="show"?1:0},b.duration||500);setTimeout(function(){b.options.mode=="show"?e.css({visibility:"visible"}):e.css({visibility:"visible"}).hide(),b.callback&&b.callback.apply(e[0]),e.dequeue(),a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.fade.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.effects.fade=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide");c.animate({opacity:d},{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.fold.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.effects.fold=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.size||15,g=!!b.options.horizFirst,h=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(c,d),c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"}),j=e=="show"!=g,k=j?["width","height"]:["height","width"],l=j?[i.width(),i.height()]:[i.height(),i.width()],m=/([0-9]+)%/.exec(f);m&&(f=parseInt(m[1],10)/100*l[e=="hide"?0:1]),e=="show"&&i.css(g?{height:0,width:f}:{height:f,width:0});var n={},p={};n[k[0]]=e=="show"?l[0]:f,p[k[1]]=e=="show"?l[1]:0,i.animate(n,h,b.options.easing).animate(p,h,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.highlight.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.effects.highlight=function(b){return this.queue(function(){var c=a(this),d=["backgroundImage","backgroundColor","opacity"],e=a.effects.setMode(c,b.options.mode||"show"),f={backgroundColor:c.css("backgroundColor")};e=="hide"&&(f.opacity=0),a.effects.save(c,d),c.show().css({backgroundImage:"none",backgroundColor:b.options.color||"#ffff99"}).animate(f,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),e=="show"&&!a.support.opacity&&this.style.removeAttribute("filter"),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.pulsate.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.effects.pulsate=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"show"),e=(b.options.times||5)*2-1,f=b.duration?b.duration/2:a.fx.speeds._default/2,g=c.is(":visible"),h=0;g||(c.css("opacity",0).show(),h=1),(d=="hide"&&g||d=="show"&&!g)&&e--;for(var i=0;i<e;i++)c.animate({opacity:h},f,b.options.easing),h=(h+1)%2;c.animate({opacity:h},f,b.options.easing,function(){h==0&&c.hide(),b.callback&&b.callback.apply(this,arguments)}),c.queue("fx",function(){c.dequeue()}).dequeue()})}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.scale.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.effects.puff=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide"),e=parseInt(b.options.percent,10)||150,f=e/100,g={height:c.height(),width:c.width()};a.extend(b.options,{fade:!0,mode:d,percent:d=="hide"?e:100,from:d=="hide"?g:{height:g.height*f,width:g.width*f}}),c.effect("scale",b.options,b.duration,b.callback),c.dequeue()})},a.effects.scale=function(b){return this.queue(function(){var c=a(this),d=a.extend(!0,{},b.options),e=a.effects.setMode(c,b.options.mode||"effect"),f=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:e=="hide"?0:100),g=b.options.direction||"both",h=b.options.origin;e!="effect"&&(d.origin=h||["middle","center"],d.restore=!0);var i={height:c.height(),width:c.width()};c.from=b.options.from||(e=="show"?{height:0,width:0}:i);var j={y:g!="horizontal"?f/100:1,x:g!="vertical"?f/100:1};c.to={height:i.height*j.y,width:i.width*j.x},b.options.fade&&(e=="show"&&(c.from.opacity=0,c.to.opacity=1),e=="hide"&&(c.from.opacity=1,c.to.opacity=0)),d.from=c.from,d.to=c.to,d.mode=e,c.effect("size",d,b.duration,b.callback),c.dequeue()})},a.effects.size=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","width","height","overflow","opacity"],e=["position","top","bottom","left","right","overflow","opacity"],f=["width","height","overflow"],g=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],i=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],j=a.effects.setMode(c,b.options.mode||"effect"),k=b.options.restore||!1,l=b.options.scale||"both",m=b.options.origin,n={height:c.height(),width:c.width()};c.from=b.options.from||n,c.to=b.options.to||n;if(m){var p=a.effects.getBaseline(m,n);c.from.top=(n.height-c.from.height)*p.y,c.from.left=(n.width-c.from.width)*p.x,c.to.top=(n.height-c.to.height)*p.y,c.to.left=(n.width-c.to.width)*p.x}var q={from:{y:c.from.height/n.height,x:c.from.width/n.width},to:{y:c.to.height/n.height,x:c.to.width/n.width}};if(l=="box"||l=="both")q.from.y!=q.to.y&&(d=d.concat(h),c.from=a.effects.setTransition(c,h,q.from.y,c.from),c.to=a.effects.setTransition(c,h,q.to.y,c.to)),q.from.x!=q.to.x&&(d=d.concat(i),c.from=a.effects.setTransition(c,i,q.from.x,c.from),c.to=a.effects.setTransition(c,i,q.to.x,c.to));(l=="content"||l=="both")&&q.from.y!=q.to.y&&(d=d.concat(g),c.from=a.effects.setTransition(c,g,q.from.y,c.from),c.to=a.effects.setTransition(c,g,q.to.y,c.to)),a.effects.save(c,k?d:e),c.show(),a.effects.createWrapper(c),c.css("overflow","hidden").css(c.from);if(l=="content"||l=="both")h=h.concat(["marginTop","marginBottom"]).concat(g),i=i.concat(["marginLeft","marginRight"]),f=d.concat(h).concat(i),c.find("*[width]").each(function(){var c=a(this);k&&a.effects.save(c,f);var d={height:c.height(),width:c.width()};c.from={height:d.height*q.from.y,width:d.width*q.from.x},c.to={height:d.height*q.to.y,width:d.width*q.to.x},q.from.y!=q.to.y&&(c.from=a.effects.setTransition(c,h,q.from.y,c.from),c.to=a.effects.setTransition(c,h,q.to.y,c.to)),q.from.x!=q.to.x&&(c.from=a.effects.setTransition(c,i,q.from.x,c.from),c.to=a.effects.setTransition(c,i,q.to.x,c.to)),c.css(c.from),c.animate(c.to,b.duration,b.options.easing,function(){k&&a.effects.restore(c,f)})});c.animate(c.to,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){c.to.opacity===0&&c.css("opacity",c.from.opacity),j=="hide"&&c.hide(),a.effects.restore(c,k?d:e),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.shake.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.effects.shake=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"left",g=b.options.distance||20,h=b.options.times||3,i=b.duration||b.options.duration||140;a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",l={},m={},n={};l[j]=(k=="pos"?"-=":"+=")+g,m[j]=(k=="pos"?"+=":"-=")+g*2,n[j]=(k=="pos"?"-=":"+=")+g*2,c.animate(l,i,b.options.easing);for(var p=1;p<h;p++)c.animate(m,i,b.options.easing).animate(n,i,b.options.easing);c.animate(m,i,b.options.easing).animate(l,i/2,b.options.easing,function(){a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)}),c.queue("fx",function(){c.dequeue()}),c.dequeue()})}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.slide.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.effects.slide=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"show"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c).css({overflow:"hidden"});var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight({margin:!0}):c.outerWidth({margin:!0}));e=="show"&&c.css(g,h=="pos"?isNaN(i)?"-"+i:-i:i);var j={};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30 -* https://github.com/jquery/jquery-ui -* Includes: jquery.effects.transfer.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ -(function(a,b){a.effects.transfer=function(b){return this.queue(function(){var c=a(this),d=a(b.options.to),e=d.offset(),f={top:e.top,left:e.left,height:d.innerHeight(),width:d.innerWidth()},g=c.offset(),h=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:g.top,left:g.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(f,b.duration,b.options.easing,function(){h.remove(),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);;
\ No newline at end of file +(function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){return a===b?this._value():(this._setOption("value",a),this)},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;return typeof a!="number"&&(a=0),Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.20"})})(jQuery);;
\ No newline at end of file diff --git a/view/theme/diabook/js/jquery.mapquery.core.js b/view/theme/diabook/js/jquery.mapquery.core.js index 606a343f4..b9dd16c8b 100644 --- a/view/theme/diabook/js/jquery.mapquery.core.js +++ b/view/theme/diabook/js/jquery.mapquery.core.js @@ -17,11 +17,11 @@ the matched element **options** an object of key-value pairs with options for the map. Possible pairs are: - * **layers** (array of MapQuery.Layer *or* MapQuery.Layer): Either an array - * or a single layer that should be added to the map + * **layers** (array of MapQuery.Layer *or* MapQuery.Layer): Either an array + or a single layer that should be added to the map * **center** ({position: [x,y], zoom: z(int), box: [llx,lly,urx,ury]}): - * Initially go to a certain location. At least one layer (in the `layers` - * option) needs to be specified. + Initially go to a certain location. At least one layer (in the `layers` + option) needs to be specified. > Returns: $('selector') (jQuery object) @@ -68,6 +68,8 @@ $.MapQuery.Map = function(element, options) { delete this.olMapOptions.layers; delete this.olMapOptions.maxExtent; delete this.olMapOptions.zoomToMaxExtent; + delete this.olMapOptions.center; + //TODO SMO20110630 the maxExtent is in mapprojection, decide whether or //not we need to change it to displayProjection this.maxExtent = this.options.maxExtent; @@ -75,6 +77,9 @@ $.MapQuery.Map = function(element, options) { this.maxExtent[0],this.maxExtent[1],this.maxExtent[2],this.maxExtent[3]); + this.projection = this.options.projection; + this.displayProjection = this.options.displayProjection; + OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3; OpenLayers.Util.onImageLoadErrorColor = "transparent"; @@ -96,14 +101,46 @@ $.MapQuery.Map = function(element, options) { // To bind and trigger jQuery events this.events = $({}); - // create triggers for all OpenLayers map events - var events = {}; - $.each(this.olMap.EVENT_TYPES, function(i, evt) { - events[evt] = function() { - self.events.trigger(evt, arguments); - }; + + this.handlers = { + // Triggers the jQuery events, after the OpenLayers events + // happened without any further processing + simple: function(data) { + this.trigger(data.type); + } + }; + + // MapQuery doesn't bind all OpenLayers events automatically, + // but just the ones that make sense. + // Events that are left out intensionally are: + // - changebaselayer: MapQuery doesn't have the concept of base layers + // - mouseover, mouseout, mousemove: Handle those with jQuery on the + // DOM level + // Some events can be triggered by MapQuery without listening to the + // OpenLayers events. This only works for events that are triggered + // by functionality that MapQuery implements in some custom way, e.g. + // (pre)addlayer, (pre)removelayer, changelayer. + // TODO vmx 20120309: Proper docs for the events, here's some quickly + // written info: + // - generally spoken, the map events follow the OpeLayer events + // - preaddlayer, movestart, move, moveend, zoomend: no additional + // argument + // - addlayer, preremovelayer, removelayer: layer as additional argument + // - changelayer: layer and the property that changed as additional + // argument. Possible values for the property are: position (in + // the layer stack), opacity, visibility + // Currently this event is always fired, even if the property + // was only meant to be changed, but wasn't exctually changed. + // I.e. that the event is fired even if you call + // `layer.visible(true)` although the layer is already visible. + // I'm (vmx) not sure if we want to change that :) + this.olMap.events.on({ + scope: this, + movestart: this.handlers.simple, + move: this.handlers.simple, + moveend: this.handlers.simple, + zoomend: this.handlers.simple }); - this.olMap.events.on(events); // Add layers to the map if (this.options.layers!==undefined) { @@ -129,7 +166,7 @@ _version added 0.1_ **options** an object of key-value pairs with options to create one or more layers ->Returns: [layer] (array of MapQuery.Layer) +>Returns: [layer] (array of MapQuery.Layer) _or_ false The `.layers()` method allows us to attach layers to a mapQuery object. It takes @@ -138,6 +175,10 @@ layer options objects. If an options object is given, it will return the resulting layer(s). We can also use it to retrieve all layers currently attached to the map. +When adding layers, those are returned. If the creation is cancled by returning +`false` in the `preaddlayer` event, this function returns `false` to +intentionally break the chain instead of hiding errors subtly). + var osm = map.layers({type:'osm'}); //add an osm layer to the map var layers = map.layers(); //get all layers of the map @@ -156,7 +197,7 @@ to the map. else { return $.map(options, function(layer) { return self._addLayer(layer); - }); + }).reverse(); } break; default: @@ -182,27 +223,43 @@ to the map. _addLayer: function(options) { var id = this._createId(); var layer = new $.MapQuery.Layer(this, id, options); + // NOTE vmx 20120305: Not sure if this is a good idea, or if it would + // be better to include `options` with the preaddlayer event + if (this._triggerReturn('preaddlayer', [layer])===false) { + return false; + } + this.olMap.addLayer(layer.olLayer); + this.layersList[id] = layer; if (layer.isVector) { this.vectorLayers.push(id); } this._updateSelectFeatureControl(this.vectorLayers); - this.events.trigger('mqAddLayer',layer); + + layer.trigger('addlayer'); return layer; }, // Creates a new unique ID for a layer _createId: function() { - return 'mapquery' + this.idCounter++; + return 'mapquery_' + this.idCounter++; }, _removeLayer: function(id) { + var layer = this.layersList[id]; + if (this._triggerReturn('preremovelayer', [layer])===false) { + return false; + } + // remove id from vectorlayer if it is there list this.vectorLayers = $.grep(this.vectorLayers, function(elem) { return elem != id; }); this._updateSelectFeatureControl(this.vectorLayers); - this.events.trigger('mqRemoveLayer',id); - delete this.layersList[id]; + this.olMap.removeLayer(layer.olLayer); + // XXX vmx: shouldn't the layer be destroyed() properly? + delete this.layersList[id]; + + layer.trigger('removelayer'); return this; }, /** @@ -210,13 +267,13 @@ to the map. _version added 0.1_ ####**Description**: get/set the extent, zoom and position of the map -**position** the position as [x,y] in displayProjection (default EPSG:4326) + * **position** the position as [x,y] in displayProjection (default EPSG:4326) to center the map at -**zoom** the zoomlevel as integer to zoom the map to -**box** an array with the lower left x, lower left y, upper right x, + * **zoom** the zoomlevel as integer to zoom the map to + * **box** an array with the lower left x, lower left y, upper right x, upper right y to zoom the map to, this will take precedent when conflicting with any of the above values -**projection** the projection the coordinates are in, default is + * **projection** the projection the coordinates are in, default is the displayProjection >Returns: {position: [x,y], zoom: z(int), box: [llx,lly,urx,ury]} @@ -239,7 +296,7 @@ extent from the map. The coordinates are returned in displayProjection. */ center: function (options) { var position; - var mapProjection; + var mapProjection = new OpenLayers.Projection(this.projection); // Determine source projection var sourceProjection = null; var zoom; @@ -249,7 +306,7 @@ extent from the map. The coordinates are returned in displayProjection. 'OpenLayers.Projection' ? options.projection : new OpenLayers.Projection(options.projection); } else { - var displayProjection = this.olMap.displayProjection; + var displayProjection = this.displayProjection; if(!displayProjection) { // source == target sourceProjection = new OpenLayers.Projection('EPSG:4326'); @@ -265,8 +322,6 @@ extent from the map. The coordinates are returned in displayProjection. position = this.olMap.getCenter(); zoom = this.olMap.getZoom(); box = this.olMap.getExtent(); - mapProjection = this.olMap.getProjectionObject(); - if (!mapProjection.equals(sourceProjection)) { position.transform(mapProjection, sourceProjection); @@ -282,9 +337,8 @@ extent from the map. The coordinates are returned in displayProjection. // Zoom to the extent of the box if (options.box!==undefined) { - mapProjection = this.olMap.getProjectionObject(); box = new OpenLayers.Bounds( - options.box[0], options.box[1],options.box[2], options.box[3]); + options.box[0], options.box[1],options.box[2], options.box[3]); if (!mapProjection.equals(sourceProjection)) { box.transform(sourceProjection,mapProjection); } @@ -299,7 +353,6 @@ extent from the map. The coordinates are returned in displayProjection. else { position = new OpenLayers.LonLat(options.position[0], options.position[1]); - mapProjection = this.olMap.getProjectionObject(); if (!mapProjection.equals(sourceProjection)) { position.transform(sourceProjection, mapProjection); } @@ -323,11 +376,89 @@ extent from the map. The coordinates are returned in displayProjection. this.olMap.addControl(this.selectFeatureControl); this.selectFeatureControl.activate(); }, - bind: function() { - this.events.bind.apply(this.events, arguments); + // This function got a bit too clever. The reason is, that jQuery's + // bind() is overloaded with so many possible combinations of arguments. + // And, of course, MapQuery wants to support them all + // The essence of the function is to wrap the original callback into + // the correct scope + bind: function(types, data, fn) { + var self = this; + + // A map of event/handle pairs, wrap each of them + if(arguments.length===1) { + var wrapped = {}; + $.each(types, function(type, fn) { + wrapped[type] = function() { + return fn.apply(self, arguments); + }; + }); + this.events.bind.apply(this.events, [wrapped]); + } + else { + var args = [types]; + // Only callback given, but no data (types, fn), hence + // `data` is the function + if(arguments.length===2) { + fn = data; + } + else { + if (!$.isFunction(fn)) { + throw('bind: you might have a typo in the function name'); + } + // Callback and data given (types, data, fn), hence include + // the data in the argument list + args.push(data); + } + + args.push(function() { + return fn.apply(self, arguments); + }); + + this.events.bind.apply(this.events, args); + } + + //this.events.bind.call(this.events, types, function() { + // data.apply(self, arguments); + //}); + //this.events.bind.call(this.events, types, function() { + // data.apply(self, arguments); + //}); + + //this.events.bind.apply(this.events, arguments); + //this.events.bind.call(this.events, types, $.proxy(data, self)); + //this.events.bind.apply(this.events, arguments);//.bind(this); + //this.events.bind.apply(this.events, $.proxy(arguments));//.bind(this); + //this.events.bind.apply(this.events, $.proxy(arguments));//.bind(this); + //this.events.bind(types, data, fn);//.bind(this); + //this.events.bind.call(this.events, types, data, fn);//.bind(this); + return this; }, - one: function() { - this.events.one.apply(this.events, arguments); +/** +###*map*.`trigger(name [, parameters])` +_version added 0.2_ +####**Description**: triggers an event on the map + + * **name** the name of the event + * **parameters** additional parameters that will be passed on with the event + +>Returns: map (MapQuery.Map) + +To subscribe to the triggered events, you need to bind to the mapuuu. + + map.bind('myEvent', function(evt) { + console.log('the values are: ' + evt.data[0] + ' and ' + evt.data[1]) + }); + map.trigger('myEvent', 'some', 'values'); +*/ + trigger: function() { + // There is no point in using trigger() insted of triggerHandler(), as + // we don't fire native events + this.events.triggerHandler.apply(this.events, arguments); + return this; + }, + // Basically a trigger that returns the return value of the last listener + _triggerReturn: function() { + return this.events.triggerHandler.apply(this.events, arguments); }, destroy: function() { this.olMap.destroy(); @@ -363,6 +494,32 @@ $.MapQuery.Layer = function(map, id, options) { // to bind and trigger jQuery events this.events = $({}); + this.handlers = { + // Triggers the jQuery events, after the OpenLayers events + // happened without any further processing + simple: function(data) { + this.trigger(data.type); + }, + // All OpenLayers events that are triggered by user interaction, + // like clicking somewhere or selecting a feature, need to be + // handled in a special way. Those OpenLayers events will then be + // triggered by MapQuery as well + // In case of the "featureselected" event, this means that the + // logic of handling the event is completely within the event + // handler. When ".select()" on a feature is called, it will just + // trigger the OpenLayers "featureselected" event, whose handler + // will then trigger the corresponding jQuery event. + includeFeature: function(data) { + var feature = new $.MapQuery.Feature(this, {olFeature: + data.feature}); + this.trigger(data.type, [feature]); + }, + prependLayer: function(data) { + this.trigger('layer' + data.type); + } + }; + + // create the actual layer based on the options // Returns layer and final options for the layer (for later re-use, // e.g. zoomToMaxExtent). @@ -371,17 +528,26 @@ $.MapQuery.Layer = function(map, id, options) { this.olLayer = res.layer; this.options = res.options; - // create triggers for all OpenLayers layer events - var events = {}; - $.each(this.olLayer.EVENT_TYPES, function(i, evt) { - events[evt] = function() { - self.events.trigger(evt, arguments); - self.map.events.trigger(evt, arguments); - }; + // Some good documentation for the events is needed. Here is a short + // description on how the current events compare to the OpenLayer + // events on the layer: + // - added, remove: not needed, there's addlayer and removelayer + // - visibilitychanged: not needed, there's the changelayer event + // - move, moveend: not needed as you get them from the map, not the layer + // - loadstart, loadend: renamed to layerloadstart, layerloadend + this.olLayer.events.on({ + scope: this, + loadstart: this.handlers.prependLayer, + loadend: this.handlers.prependLayer, + featureselected: this.handlers.includeFeature, + featureunselected: this.handlers.includeFeature, + featureremoved: this.handlers.includeFeature }); - this.olLayer.events.on(events); - this.map.olMap.addLayer(this.olLayer); + // To be able to retreive the MapQuery layer, when we only have the + // OpenLayers layer available. For example on the layeradded event. + // NOTE vmx 2012-02-26: Any nicer solution is welcome + this.olLayer.mapQueryId = this.id; }; $.MapQuery.Layer.prototype = { @@ -390,7 +556,7 @@ $.MapQuery.Layer.prototype = { _version added 0.1_ ####**Description**: move the layer down in the layer stack of the map -**delta** the amount of layers the layer has to move down in the layer + * **delta** the amount of layers the layer has to move down in the layer stack (default 1) >Returns layer (MapQuery.Layer) @@ -421,22 +587,21 @@ will put the layer at the bottom. each: function () {}, /** ###*layer*.`remove()` -_version added 0.1_ +_version added 0.2_ ####**Description**: remove the layer from the map ->Returns: id (string) +>Returns: map (MapQuery.Map) or false The `.remove()` method allows us to remove a layer from the map. -It returns an id to allow widgets to remove their references to the -destroyed layer. +It returns the `map` object if the layer was removed, or `false` if the +removal was prevented in the preremovelayer event. var id = layer.remove(); //remove this layer */ remove: function() { - this.map.olMap.removeLayer(this.olLayer); // remove references to this layer that are stored in the // map object return this.map._removeLayer(this.id); @@ -447,9 +612,9 @@ _version added 0.1_ ####**Description**: get/set the `position` of the layer in the layer stack of the map -**position** an integer setting the new position of the layer in the layer stack + * **position** an integer setting the new position of the layer in the layer stack ->Returns: position (integer) +>Returns: position (integer) _or_ layer (MapQuery.Layer) The `.position()` method allows us to change the position of the layer in the @@ -467,7 +632,9 @@ return the current postion. return this.map.olMap.getLayerIndex(this.olLayer)-1; } else { - return this.map.olMap.setLayerIndex(this.olLayer, pos+1); + this.map.olMap.setLayerIndex(this.olLayer, pos+1); + this.trigger('changelayer', ['position']); + return this; } }, /** @@ -475,7 +642,7 @@ return the current postion. _version added 0.1_ ####**Description**: move the layer up in the layer stack of the map -**delta** the amount of layers the layer has to move up in the layer + * **delta** the amount of layers the layer has to move up in the layer stack (default 1) >Returns: layer (MapQuery.Layer) @@ -503,7 +670,7 @@ given. _version added 0.1_ ####**Description**: get/set the `visible` state of the layer -**visible** a boolean setting the visibiliyu of the layer + * **visible** a boolean setting the visibility of the layer >Returns: visible (boolean) @@ -522,6 +689,7 @@ If no visible is given, it will return the current visibility. } else { this.olLayer.setVisibility(vis); + this.trigger('changelayer', ['visibility']); return this; } }, @@ -530,9 +698,9 @@ If no visible is given, it will return the current visibility. _version added 0.1_ ####**Description**: get/set the `opacity` of the layer -**position** a float [0-1] setting the opacity of the layer + * **position** a float [0-1] setting the opacity of the layer ->Returns: opacity (float) +>Returns: opacity (float) _or_ layer (MapQuery.Layer) The `.opacity()` method allows us to change the opacity of the layer. @@ -544,24 +712,265 @@ If no opacity is given, it will return the current opacity. */ opacity: function(opac) { - if (opac===undefined) { + if (opac===undefined) { // this.olLayer.opacity can be null if never - // set so return the visibility + // set so return the visibility var value = this.olLayer.opacity ? this.olLayer.opacity : this.olLayer.getVisibility(); return value; } else { this.olLayer.setOpacity(opac); + this.trigger('changelayer', ['opacity']); return this; } }, // every event gets the layer passed in bind: function() { - this.events.bind.apply(this.events, arguments); + // Use the same bind function as for the map + this.map.bind.apply(this, arguments); + return this; + }, +/** +###*layer*.`trigger(name [, parameters])` +_version added 0.2_ +####**Description**: triggers an event on the layer and map + + * **name** the name of the event + * **parameters** additional parameters that will be passed on with the event + +>Returns: layer (MapQuery.Layer) + +The events get triggered on the layer as well as on the map. To subscribe to +the triggered events, you can either bind to the layer or the map. If bound +to the map, the second argument in the bind will be the layer the event +came from + + layer.bind('myEvent', function(evt) { + console.log('the values are: ' + evt.data[0] + ' and ' + evt.data[1]) + }); + map.bind('myEvent', function(evt, layer) { + console.log('the values are: ' + evt.data[0] + ' and ' + evt.data[1]) + }); + layer.trigger('myEvent', 'some', 'values'); +*/ + trigger: function() { + var args = Array.prototype.slice.call(arguments); + this.events.triggerHandler.apply(this.events, args); + + this._addLayerToArgs(args); + + this.map.events.triggerHandler.apply(this.map.events, args); + return this; + }, + // Basically a trigger that returns the return value of the last listener + _triggerReturn: function() { + var args = Array.prototype.slice.call(arguments); + var ret = this.events.triggerHandler.apply(this.events, args); + if (ret !== undefined) { + return ret; + } + + this._addLayerToArgs(args); + return this.events.triggerHandler.apply(this.map.events, args); + }, + // Adds the current layer to the event arguments, so that it is included + // in the event on the map + _addLayerToArgs: function(args) { + // Add layer for the map event + if (args.length===1) { + args.push([this]); + } + else { + args[1].unshift(this); + } + }, +/** +###*layer*.`features([options])` +_version added 0.2.0_ +####**Description**: get/set the features of a (vector) layer + +**options** an object of key-value pairs with options to create one or +more features + +>Returns: [features] (array of MapQuery.Feature) + + +The `.features()` method allows us to attach features to a mapQuery layer +object. It takes an options object with feature options. To add multiple +features, create an array of feature options objects. If an options object +is given, it will return the resulting feature(s). We can also use it to +retrieve all features currently attached to the layer. + + + // add an (vector) json layer to the map + var jsonlayer = map.layers({type:'json'}); + // add a feature to the layer + jsonlayer.features({geometry: {type: "Point", coordinates: [5.3, 7.4]}}); + // get all features of a layer (sorted with first added feature at the beginning + var features = jsonlayer.features(); +*/ + features: function(options) { + var self = this; + switch(arguments.length) { + // return all features + case 0: + return this._allFeatures(); + // add new feature(s) + case 1: + if (!$.isArray(options)) { + return this._addFeature(options); + } + else { + return $.map(options, function(feature) { + return self._addFeature(feature); + }); + } + break; + default: + throw('wrong argument number'); + } }, - one: function() { - this.events.one.apply(this.events, arguments); + _allFeatures: function() { + var layer = this; + return $.map(layer.olLayer.features, function(feature) { + return new $.MapQuery.Feature(layer, {olFeature: feature}); + }); + }, + _addFeature: function(options) { + var feature = new $.MapQuery.Feature(this, options); + // NOTE vmx 2012-04-19: Not sure if this is a good idea, or if it would + // be better to include `options` with the preaddfeature event + if (this._triggerReturn('preaddfeature', [feature])===false) { + return false; + } + this.olLayer.addFeatures(feature.olFeature); + this.trigger('addfeature', [feature]); + return feature; + } +}; + +/** +#MapQuery.Feature + +The MapQuery.Feature object. It is constructed with a feature options object +in the layer.`features([options])` function. The Feautre object is refered to +as _feature_ in the documentation. + +TODO vmx 20110905: Support other geometry types than GeoJSON +options: + * geometry: A GeoJSON geometry + * properties: Properties for the feature +*/ +// Not in the pulic API docs: You can pass in as options: +// * olFeature: This will wrap the olFeature in a MapQuery feature +$.MapQuery.Feature = function(layer, options) { + // The ID is the + this._id = layer.map._createId(); + this.layer = layer; + + // Feature already exists on the layer, it just needs to be wrapped + // to an MapQuery feature + if (options.olFeature) { + this.olFeature = options.olFeature; + } + else { + // XXX vmx 20110905: Different feature types might make sense: + // (Geo)JSON, KML, WKT + // vmx 2012-04-14: I changed my mind quite some time ago. We should onlu + // support GeoJSON and let the user easily transfrom their format + // (e.g. KML) to GeoJSON, before they add a feature to the layer + var GeoJSON = new OpenLayers.Format.GeoJSON(); + var geometry = GeoJSON.parseGeometry(options.geometry); + geometry.transform( + new OpenLayers.Projection(this.layer.map.displaProjection), + new OpenLayers.Projection(this.layer.map.projection)); + + this.olFeature = new OpenLayers.Feature.Vector(geometry, + options.properties); + } + + // Modify the features to be more practical + // e.g. copy properties that should be easily accessed from the + // outside, out of the olLayer and to the feature level + this.properties = $.extend(true, {}, this.olFeature.attributes); + this.geometry = $.parseJSON( + new OpenLayers.Format.GeoJSON().write(this.olFeature.geometry)); + + return this; +}; + +$.MapQuery.Feature.prototype = { +/** +###*feature*.`remove()` +_version added 0.2.0_ +####**Description**: remove the feature from the layer + +>Returns: layer (layer) or false + + +The `.remove()` method allows us to remove a feature from the layer. +It returns the `layer` object if the feature was removed, or `false` if the +removal was prevented in the preremovefeature event. + + // add a feature to a layer + var feature = layer.features({geometry: {type: "Point", coordinates: [5.3, 7.4]}}); + // remove the feature again + feature.remove(); +*/ + remove: function() { + if (this.layer._triggerReturn('preremovefeature', [this])===false) { + return false; + } + this.layer.olLayer.removeFeatures(this.olFeature); + // The `removefeature` event is triggered by an OpenLayes event handler + return this.layer; + }, +/** +###*feature*.`select(exclusive)` +_version added 0.2.0_ +####**Description**: select a feature + +**exclusive** (boolean, default: true) True means that all other features get +deselectd + +>Returns: layer (layer) + + +The `.select()` method allows us to select a feature from the layer. +A `featureselected` will be fired. + + // add a feature to a layer + var feature = layer.features({geometry: {type: "Point", coordinates: [5.3, 7.4]}}); + // select the feature again + feature.select(); +*/ + select: function(exclusive) { + if (exclusive===undefined || exclusive===true) { + this.layer.map.selectFeatureControl.unselectAll(); + } + this.layer.map.selectFeatureControl.select(this.olFeature); + }, +/** +###*feature*.`unselect()` +_version added 0.2.0_ +####**Description**: unselect a feature + +>Returns: layer (layer) + + +The `.unselect()` method allows us to unselect a feature from the layer. +A `featureunselected` will be fired. + + // add a feature to a layer + var feature = layer.features({geometry: {type: "Point", coordinates: [5.3, 7.4]}}); + // select the feature + feature.select(); + // unselect the feature again + feature.unselect(); +*/ + unselect: function() { + this.layer.map.selectFeatureControl.unselect(this.olFeature); } }; @@ -581,11 +990,11 @@ $.extend($.MapQuery.Layer, { _version added 0.1_ ####**Description**: create a Bing maps layer -**view** a string ['road','hybrid','satellite'] to define which Bing maps + * **view** a string ['road','hybrid','satellite'] to define which Bing maps layer to use (default road) -**key** Bing Maps API key for your application. Get you own at + * **key** Bing Maps API key for your application. Get you own at http://bingmapsportal.com/ -**label** string with the name of the layer + * **label** string with the name of the layer layers:[{ @@ -629,9 +1038,9 @@ http://bingmapsportal.com/ _version added 0.1_ ####**Description**: create a Google maps layer -**view** a string ['road','hybrid','satellite'] to define which Google maps + * **view** a string ['road','hybrid','satellite'] to define which Google maps layer to use (default road) -**label** string with the name of the layer + * **label** string with the name of the layer *Note* you need to include the google maps v3 API in your application by adding @@ -669,7 +1078,7 @@ layer to use (default road) _version added 0.1_ ####**Description**: create a vector layer -**label** string with the name of the layer + * **label** string with the name of the layer layers:[{ @@ -692,13 +1101,13 @@ _version added 0.1_ _version added 0.1_ ####**Description**: create a JSON layer -**url** a string pointing to the location of the JSON data -**strategies** a string ['bbox','cluster','filter','fixed','paging','refresh','save'] + * **url** a string pointing to the location of the JSON data + * **strategies** a string ['bbox','cluster','filter','fixed','paging','refresh','save'] stating which update strategy should be used (default fixed) (see also http://dev.openlayers.org/apidocs/files/OpenLayers/Strategy-js.html) -**projection** a string with the projection of the JSON data (default EPSG:4326) -**styleMap** {object} the style to be used to render the JSON data -**label** string with the name of the layer + * **projection** a string with the projection of the JSON data (default EPSG:4326) + * **styleMap** {object} the style to be used to render the JSON data + * **label** string with the name of the layer layers:[{ @@ -710,8 +1119,8 @@ stating which update strategy should be used (default fixed) */ json: function(options) { var o = $.extend(true, {}, $.fn.mapQuery.defaults.layer.all, - $.fn.mapQuery.defaults.layer.vector, - options); + $.fn.mapQuery.defaults.layer.vector, + options); this.isVector = true; var strategies = []; for (var i in o.strategies) { @@ -742,26 +1151,31 @@ stating which update strategy should be used (default fixed) } } var protocol; - // only use JSONP if we use http(s) - if (o.url.match(/^https?:\/\//)!==null && - !$.MapQuery.util.sameOrigin(o.url)) { - protocol = 'Script'; - } - else { - protocol = 'HTTP'; - } var params = { - protocol: new OpenLayers.Protocol[protocol]({ - url: o.url, - format: new OpenLayers.Format.GeoJSON() - }), strategies: strategies, projection: o.projection || 'EPSG:4326', styleMap: o.styleMap }; + + if (o.url) { + // only use JSONP if we use http(s) + if (o.url.match(/^https?:\/\//)!==null && + !$.MapQuery.util.sameOrigin(o.url)) { + protocol = 'Script'; + } + else { + protocol = 'HTTP'; + } + params.protocol = new OpenLayers.Protocol[protocol]({ + url: o.url, + format: new OpenLayers.Format.GeoJSON() + }); + }; + + var layer = new OpenLayers.Layer.Vector(o.label, params); return { - layer: new OpenLayers.Layer.Vector(o.label, params), + layer: layer, options: o }; }, @@ -771,10 +1185,10 @@ _version added 0.1_ ####**Description**: create an OpenStreetMap layer -**label** string with the name of the layer -**url** A single URL (string) or an array of URLs to OSM-like server like + * **label** string with the name of the layer + * **url** A single URL (string) or an array of URLs to OSM-like server like Cloudmade -**attribution** A string to put some attribution on the map + * **attribution** A string to put some attribution on the map layers:[{ type: 'osm', @@ -801,15 +1215,51 @@ Cloudmade }; }, /** +###*layer* `{type:tms}` +_version added 0.1_ +####**Description**: create an OpenStreetMap layer + + + * **label** string with the name of the layer + * **url** A single URL (string) or an array of URLs to the TMS end point + * **layer** The identifier for the <TileMap> as advertised by the service. + For example, if the service advertises a <TileMap> with ‘href=”http://tms.osgeo.org/1.0.0/vmap0”’, + the layer property would be set to “vmap0”. + * **format** The image format (default png) + + layers:[{ + type: 'tms', + url: 'http://tilecache.osgeo.org/wms-c/Basic.py/', + layer: 'basic' + }] + +*/ + tms: function(options) { + var o = $.extend(true, {}, $.fn.mapQuery.defaults.layer.all, + $.fn.mapQuery.defaults.layer.tms, + options); + var label = options.label || undefined; + var url = options.url || undefined; + var params = { + layername: o.layer, + type: o.format + }; + return { + layer: new OpenLayers.Layer.TMS(label, url, params), + options: o + }; + }, +/** ###*layer* `{type:wms}` _version added 0.1_ ####**Description**: create a WMS layer -**url** a string pointing to the location of the WMS service -**layers** a string with the name of the WMS layer(s) -**format** a string with format of the WMS image (default image/jpeg) -**transparent** a boolean for requesting images with transparency -**label** string with the name of the layer + * **url** a string pointing to the location of the WMS service + * **layers** a string with the name of the WMS layer(s) + * **format** a string with format of the WMS image (default image/jpeg) + * **transparent** a boolean for requesting images with transparency + * **label** string with the name of the layer + * **wms_parameters** an hashtable of extra GetMap query string parameters and parameter values layers:[{ @@ -828,6 +1278,9 @@ _version added 0.1_ transparent: o.transparent, format: o.format }; + if(typeof o.wms_parameters != "undefined"){ + params = $.extend(params, o.wms_parameters); + } return { layer: new OpenLayers.Layer.WMS(o.label, o.url, params, o), options: o @@ -839,11 +1292,11 @@ _version added 0.1_ _version added 0.1_ ####**Description**: create a WMTS (tiling) layer -**url** a string pointing to the location of the WMTS service -**layer** a string with the name of the WMTS layer -**matrixSet** a string with one of the advertised matrix set identifiers -**style** a string with one of the advertised layer styles -**label** string with the name of the layer + * **url** a string pointing to the location of the WMTS service + * **layer** a string with the name of the WMTS layer + * **matrixSet** a string with one of the advertised matrix set identifiers + * **style** a string with one of the advertised layer styles + * **label** string with the name of the layer layers:[{ @@ -953,13 +1406,17 @@ $.fn.mapQuery.defaults = { transitionEffect: 'resize', sphericalMercator: true }, + tms: { + transitionEffect: 'resize', + format: 'png' + }, raster: { // options for raster layers transparent: true }, vector: { // options for vector layers - strategies: ['fixed'] + strategies: ['bbox'] }, wmts: { format: 'image/jpeg', diff --git a/view/theme/diabook/js/jquery.mapquery.legend.js b/view/theme/diabook/js/jquery.mapquery.legend.js new file mode 100644 index 000000000..0a475408f --- /dev/null +++ b/view/theme/diabook/js/jquery.mapquery.legend.js @@ -0,0 +1,87 @@ +/* Copyright (c) 2011 by MapQuery Contributors (see AUTHORS for + * full list of contributors). Published under the MIT license. + * See https://github.com/mapquery/mapquery/blob/master/LICENSE for the + * full text of the license. */ + +/** +#jquery.mapquery.legend.js +A plugin on mapquery.core to add a legend to a layer. It will check if the layer +is within a valid extent and zoom range. And if not will return an error message. +*/ + +(function($, MQ) { +$.extend( $.fn.mapQuery.defaults.layer.all, { + legend: { + url: '', + msg: '' + } +}); +//possible error messages to display in the legend +LEGEND_ERRORS= ['E_ZOOMOUT', 'E_ZOOMIN', 'E_OUTSIDEBOX']; +$.extend(MQ.Layer.prototype, { +/** +###**layer**.`legend([options])` +_version added 0.1_ +####**Description**: get/set the legend of a layer + +**options** url:url the url to the legend image + +>Returns: {url:url, msg:'E\_ZOOMOUT' | 'E\_ZOOMIN' | 'E\_OUTSIDEBOX' | ''} + + +The `.legend()` function allows us to attach a legend image to a layer. It will +also check if the layer is not visible due to wrong extent or zoom level. +It will return an error message which can be used to notify the user. + + + var legend = layer.legend(); //get the current legend + //set the legend url to legendimage.png + layer.legend({url:'legendimage.png'}) + + */ + //get/set the legend object + legend: function(options) { + //get the legend object + var center = this.map.center(); + if (arguments.length===0) { + this._checkZoom(center); + //if zoom = ok, check box + if(this.options.legend.msg==''){ + this._checkBox(center); + } + return this.options.legend; + } + //set the legend url + if (options.url!==undefined) { + this.options.legend.url = options.url; + return this.options.legend; + } + }, + //Check if the layer has a maximum box set and if the current box + //is outside these settings, set the legend.msg accordingly + _checkBox: function(center){ + var maxExtent = this.options.maxExtent; + if(maxExtent!==undefined) { + var mapBounds = new OpenLayers.Bounds( + center.box[0],center.box[1],center.box[2],center.box[3]); + var layerBounds = new OpenLayers.Bounds( + maxExtent[0],maxExtent[1],maxExtent[2],maxExtent[3]); + var inside = layerBounds.containsBounds(mapBounds, true); + this.options.legend.msg = inside?'':LEGEND_ERRORS[2]; + } + }, + //Check if the layer has a minimum or maximum zoom set and if the + //current zoom is outside these settings, set the legend.msg accordingly + _checkZoom: function(center){ + var zoom = center.zoom; + var maxZoom = this.options.maxZoom; + var minZoom = this.options.minZoom; + this.options.legend.msg=( + maxZoom!==undefined&&maxZoom<zoom)? LEGEND_ERRORS[0]:''; + this.options.legend.msg=( + minZoom!==undefined&&minZoom>zoom)? LEGEND_ERRORS[1]:''; + } + +}); + +})(jQuery, $.MapQuery); diff --git a/view/theme/diabook/js/jquery.mapquery.mqLayerManager.js b/view/theme/diabook/js/jquery.mapquery.mqLayerManager.js new file mode 100644 index 000000000..885330cf1 --- /dev/null +++ b/view/theme/diabook/js/jquery.mapquery.mqLayerManager.js @@ -0,0 +1,310 @@ +/* Copyright (c) 2011 by MapQuery Contributors (see AUTHORS for + * full list of contributors). Published under the MIT license. + * See https://github.com/mapquery/mapquery/blob/master/LICENSE for the + * full text of the license. */ + +/** +#jquery.mapquery.mqLayerManager.js +The file containing the mqLayerManager Widget + +### *$('selector')*.`mqLayerManager([options])` +_version added 0.1_ +####**Description**: create a widget to manage layers + + + **options**: + - **map**: the mapquery instance + - **title**: Title that will be displayed at the top of the + layer manager (default: Layer Manager) + + +>Returns: widget + +>Requires: jquery.mapquery.legend.js + + +The mqLayerManager allows us to control the order, opacity and visibility +of layers. We can also remove layers. It also shows the legend of the layer if +available and the error messages provided by the legend plugin. It listens to +layerchange event for order, transparancy and opacity changes. It listens to +addlayer and removelayer events to keep track which layers are on the map. + + + $('#layermanager').mqLayerManager({map:'#map'}); + + + */ +(function($) { +$.template('mqLayerManager', + '<div class="mq-layermanager ui-widget-content ">'+ + '</div>'); + +$.template('mqLayerManagerElement', + '<div class="mq-layermanager-element ui-widget-content ui-corner-all" id="mq-layermanager-element-${id}">'+ + '<div class="mq-layermanager-element-header ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix">'+ + '<span class="mq-layermanager-label ui-dialog-title">${label}</span>'+ + '<a class="ui-dialog-titlebar-close ui-corner-all" href="#" role="button">'+ + '<span class="ui-icon ui-icon-closethick">close</span></a></div>'+ + '<div class="mq-layermanager-element-content">'+ + '<div class="mq-layermanager-element-visibility">'+ + '<input type="checkbox" class="mq-layermanager-element-vischeckbox" id="${id}-visibility" {{if visible}}checked="${visible}"{{/if}} />'+ + '<div class="mq-layermanager-element-slider-container">'+ + '<div class="mq-layermanager-element-slider"></div></div>'+ + '</div>'+ + '<div class="mq-layermanager-element-legend">'+ + '{{if imgUrl}}'+ + '<img src="${imgUrl}" style="opacity:${opacity}"/>'+ + '{{/if}}'+ + '{{if errMsg}}'+ + '${errMsg}'+ + '{{/if}}'+ + '</div>'+ + '</div>'+ + '</div>'); + +$.widget("mapQuery.mqLayerManager", { + options: { + // The MapQuery instance + map: undefined, + + // Title that will be displayed at the top of the popup + title: "Layer Manager" + }, + _create: function() { + var map; + var zoom; + var numzoomlevels; + var self = this; + var element = this.element; + + //get the mapquery object + map = $(this.options.map).data('mapQuery'); + + this.element.addClass('ui-widget ui-helper-clearfix ' + + 'ui-corner-all'); + + var lmElement = $.tmpl('mqLayerManager').appendTo(element); + element.find('.ui-icon-closethick').button(); + + lmElement.sortable({ + axis:'y', + handle: '.mq-layermanager-element-header', + update: function(event, ui) { + var layerNodes = ui.item.siblings().andSelf(); + var num = layerNodes.length-1; + layerNodes.each(function(i) { + var layer = $(this).data('layer'); + var pos = num-i; + self._position(layer, pos); + }); + } + }); + + //these layers are already added to the map as such won't trigger + //and event, we call the draw function directly + $.each(map.layers().reverse(), function(){ + self._layerAdded(lmElement, this); + }); + + element.delegate('.mq-layermanager-element-vischeckbox', + 'change',function() { + var checkbox = $(this); + var element = checkbox.parents('.mq-layermanager-element'); + var layer = element.data('layer'); + var self = element.data('self'); + self._visible(layer,checkbox.is(':checked')); + }); + + element.delegate('.ui-icon-closethick', 'click', function() { + var control = $(this).parents('.mq-layermanager-element'); + self._remove(control.data('layer')); + }); + + //binding events + map.bind("addlayer", + {widget:self,control:lmElement}, + self._onLayerAdd); + + map.bind("removelayer", + {widget:self,control:lmElement}, + self._onLayerRemove); + + map.bind("changelayer", + {widget:self,map:map,control:lmElement}, + self._onLayerChange); + + map.bind("moveend", + {widget:self,map:map,control:lmElement}, + self._onMoveEnd); + }, + _destroy: function() { + this.element.removeClass(' ui-widget ui-helper-clearfix ' + + 'ui-corner-all') + .empty(); + }, + //functions that actually change things on the map + //call these from within the widget to do stuff on the map + //their actions will trigger events on the map and in return + //will trigger the _layer* functions + _add: function(map,layer) { + map.layers(layer); + }, + + _remove: function(layer) { + layer.remove(); + }, + + _position: function(layer, pos) { + layer.position(pos); + }, + + _visible: function(layer, vis) { + layer.visible(vis); + }, + + _opacity: function(layer,opac) { + layer.opacity(opac); + }, + + //functions that change the widget + _layerAdded: function(widget, layer) { + var self = this; + var error = layer.legend().msg; + var url; + switch(error){ + case '': + url =layer.legend().url; + if(url==''){error='No legend for this layer';} + break; + case 'E_ZOOMOUT': + error = 'Please zoom out to see this layer'; + break; + case 'E_ZOOMIN': + error = 'Please zoom in to see this layer'; + break; + case 'E_OUTSIDEBOX': + error = 'This layer is outside the current view'; + break; + } + + var layerElement = $.tmpl('mqLayerManagerElement',{ + id: layer.id, + label: layer.label, + position: layer.position(), + visible: layer.visible(), + imgUrl: url, + opacity: layer.visible()?layer.opacity():0, + errMsg: error + }) + // save layer layer in the DOM, so we can easily + // hide/show/delete the layer with live events + .data('layer', layer) + .data('self',self) + .prependTo(widget); + + $(".mq-layermanager-element-slider", layerElement).slider({ + max: 100, + step: 1, + value: layer.visible()?layer.opacity()*100:0, + slide: function(event, ui) { + var layer = layerElement.data('layer'); + var self = layerElement.data('self'); + self._opacity(layer,ui.value/100); + }, + //using the slide event to check for the checkbox often gives errors. + change: function(event, ui) { + var layer = layerElement.data('layer'); + var self = layerElement.data('self'); + if(ui.value>=0.01) { + if(!layer.visible()){layer.visible(true);} + } + if(ui.value<0.01) { + if(layer.visible()){layer.visible(false);} + } + } + }); + }, + + _layerRemoved: function(widget, id) { + var control = $("#mq-layermanager-element-"+id); + control.fadeOut(function() { + $(this).remove(); + }); + }, + + _layerPosition: function(widget, layer) { + var layerNodes = widget.element.find('.mq-layermanager-element'); + var num = layerNodes.length-1; + var tmpNodes = []; + tmpNodes.length = layerNodes.length; + layerNodes.each(function() { + var layer = $(this).data('layer'); + var pos = num-layer.position(); + tmpNodes[pos]= this; + }); + for (i=0;i<tmpNodes.length;i++) { + layerNodes.parent().append(tmpNodes[i]); + } + }, + + _layerVisible: function(widget, layer) { + var layerElement = + widget.element.find('#mq-layermanager-element-'+layer.id); + var checkbox = + layerElement.find('.mq-layermanager-element-vischeckbox'); + checkbox[0].checked = layer.visible(); + //update the opacity slider as well + var slider = layerElement.find('.mq-layermanager-element-slider'); + var value = layer.visible()?layer.opacity()*100: 0; + slider.slider('value',value); + + //update legend image + layerElement.find('.mq-layermanager-element-legend img').css( + {visibility:layer.visible()?true:'hidden'}); + }, + + _layerOpacity: function(widget, layer) { + var layerElement = widget.element.find( + '#mq-layermanager-element-'+layer.id); + var slider = layerElement.find( + '.mq-layermanager-element-slider'); + slider.slider('value',layer.opacity()*100); + //update legend image + layerElement.find( + '.mq-layermanager-element-legend img').css( + {opacity:layer.opacity()}); + }, + + _moveEnd: function (widget,lmElement,map) { + lmElement.empty(); + $.each(map.layers().reverse(), function(){ + widget._layerAdded(lmElement, this); + }); + }, + + //functions bind to the map events + _onLayerAdd: function(evt, layer) { + evt.data.widget._layerAdded(evt.data.control,layer); + }, + + _onLayerRemove: function(evt, layer) { + evt.data.widget._layerRemoved(evt.data.control,layer.id); + }, + + _onLayerChange: function(evt, layer, property) { + switch(property) { + case 'opacity': + evt.data.widget._layerOpacity(evt.data.widget,layer); + break; + case 'position': + evt.data.widget._layerPosition(evt.data.widget,layer); + break; + case 'visibility': + evt.data.widget._layerVisible(evt.data.widget,layer); + break; + } + }, + _onMoveEnd: function(evt) { + evt.data.widget._moveEnd(evt.data.widget,evt.data.control,evt.data.map); + } +}); +})(jQuery); diff --git a/view/theme/diabook/js/jquery.mapquery.mqMousePosition.js b/view/theme/diabook/js/jquery.mapquery.mqMousePosition.js index d4370bfe4..9f7e151ff 100644 --- a/view/theme/diabook/js/jquery.mapquery.mqMousePosition.js +++ b/view/theme/diabook/js/jquery.mapquery.mqMousePosition.js @@ -44,8 +44,8 @@ $.widget("mapQuery.mqMousePosition", { // The number of decimals for the coordinates // default: 2 - // TODO: JCB20110630 use dynamic precision based on the pixel - // resolution, no need to configure precision + // TODO: JCB20110630 use dynamic precision based on the pixel + // resolution, no need to configure precision precision: 2, // The label of the x-value @@ -57,51 +57,36 @@ $.widget("mapQuery.mqMousePosition", { }, _create: function() { - var map; - var self = this; - var element = this.element; - var mousepos; - //get the mapquery object - map = $(this.options.map).data('mapQuery'); - - map.bind("mousemove", - {widget:self,map:map}, - self._onMouseMove); - + this.map = $(this.options.map).data('mapQuery'); - $.tmpl('mqMousePosition',{ - mouseposition:mousepos - }).appendTo(element); + this.map.element.bind('mousemove', {widget: this}, this._onMousemove); + $.tmpl('mqMousePosition', {}).appendTo(this.element); }, _destroy: function() { - this.element.removeClass(' ui-widget ui-helper-clearfix ' + + this.element.removeClass('ui-widget ui-helper-clearfix ' + 'ui-corner-all') .empty(); }, - _mouseMoved: function(data, element, map) { - var x = data.layerX; - var y = data.layerY; - var mapProjection = map.options.projection; - var displayProjection = map.options.projection; + _onMousemove: function(evt) { + var self = evt.data.widget; + var x = evt.pageX; + var y = evt.pageY; + var mapProjection = new OpenLayers.Projection(self.map.projection); + var displayProjection = new OpenLayers.Projection( + self.map.displayProjection); + var pos = self.map.olMap.getLonLatFromLayerPx( + new OpenLayers.Pixel(x, y)); //if the coordinates should be displayed in something else, - //set them via the map displayProjection option - var pos = map.olMap.getLonLatFromLayerPx(new OpenLayers.Pixel(x,y)); - if(map.options.displayProjection) { - displayProjection = map.options.displayProjection; - pos=pos.transform( - new OpenLayers.Projection(mapProjection), - new OpenLayers.Projection(displayProjection)); + //set them via the map displayProjection option + if(!mapProjection.equals(self.map.displayProjection)) { + pos = pos.transform(mapProjection, displayProjection); } - $("#id_diabook_ELPosX", element).val( - this.options.x+pos.lon.toFixed(this.options.precision)); - $("#id_diabook_ELPosY", element).val( - this.options.y+pos.lat.toFixed(this.options.precision)); - }, - - _onMouseMove: function(evt, data) { - evt.data.widget._mouseMoved(data,evt.data.control,evt.data.map); + $("#id_diabook_ELPosX", document.element).val( + self.options.x + pos.lon.toFixed(self.options.precision)); + $("#id_diabook_ELPosY", document.element).val( + self.options.y + pos.lat.toFixed(self.options.precision)); } }); })(jQuery); diff --git a/view/theme/diabook/prv_message.tpl b/view/theme/diabook/prv_message.tpl new file mode 100644 index 000000000..c59cc622f --- /dev/null +++ b/view/theme/diabook/prv_message.tpl @@ -0,0 +1,40 @@ + +<h3>$header</h3> + +<div id="prvmail-wrapper" > +<form id="prvmail-form" action="message" method="post" > + +$parent + +<div id="prvmail-to-label">$to</div> + +{{ if $showinputs }} +<input type="text" id="recip" style="background: none repeat scroll 0 0 white;border: 1px solid #CCC;border-radius: 5px 5px 5px 5px;height: 20px;margin: 0 0 5px; +vertical-align: middle;" name="messageto" value="$prefill" maxlength="255" size="64" tabindex="10" /> +<input type="hidden" id="recip-complete" name="messageto" value="$preid"> +{{ else }} +$select +{{ endif }} + +<div id="prvmail-subject-label">$subject</div> +<input type="text" size="64" maxlength="255" id="prvmail-subject" name="subject" value="$subjtxt" $readonly tabindex="11" /> + +<div id="prvmail-message-label">$yourmessage</div> +<textarea rows="8" cols="72" class="prvmail-text" id="prvmail-text" name="body" tabindex="12">$text</textarea> + + +<div id="prvmail-submit-wrapper" > + <input type="submit" id="prvmail-submit" name="submit" value="Submit" tabindex="13" /> + <div id="prvmail-upload-wrapper" > + <div id="prvmail-upload" class="icon border camera" title="$upload" ></div> + </div> + <div id="prvmail-link-wrapper" > + <div id="prvmail-link" class="icon border link" title="$insert" onclick="jotGetLink();" ></div> + </div> + <div id="prvmail-rotator-wrapper" > + <img id="prvmail-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" /> + </div> +</div> +<div id="prvmail-end"></div> +</form> +</div> diff --git a/view/theme/diabook/theme.php b/view/theme/diabook/theme.php index f1e4d0ba0..8a7bf19e9 100755 --- a/view/theme/diabook/theme.php +++ b/view/theme/diabook/theme.php @@ -170,7 +170,7 @@ if ($color=="dark") $color_path = "/diabook-dark/"; $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s"></script>', $cookieJS); //load jquery.ae.image.resize.js - $imageresizeJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.ae.image.resize.js"; + $imageresizeJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.ae.image.resize.min.js"; $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $imageresizeJS); //load jquery.ui.js @@ -198,6 +198,10 @@ if ($color=="dark") $color_path = "/diabook-dark/"; $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $mqmouseposJS); $mousewheelJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.mousewheel.js"; $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $mousewheelJS); + $mqlegendJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.mapquery.legend.js"; + $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $mqlegendJS); + $mqlayermanagerJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.mapquery.mqLayerManager.js"; + $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $mqlayermanagerJS); } @@ -248,9 +252,12 @@ if ($color=="dark") $color_path = "/diabook-dark/"; }); function open_mapcontrol() { - $("div#mapcontrol").attr("style","display: block;width:900px;height:600px;"); - $("#map2").mapQuery({layers:[{type:"osm"}], - center:({zoom:'.$ELZoom.',position:['.$ELPosX.','.$ELPosY.']})}); + $("div#mapcontrol").attr("style","display: block;width:900px;height:900px;"); + $("#map2").mapQuery({ + layers:[{type:"osm", label:"OpenStreetMap" }, + {type:"wms", label:"Population density 2010", legend:{url:"http://mapserver.edugis.nl/cgi-bin/mapserv?map=maps/edugis/cache/population.map&version=1.1.1&service=WMS&request=GetLegendGraphic&layer=Bevolkingsdichtheid_2010&format=image/png"}, url:"http://t1.edugis.nl/tiles/tilecache.py?map=maps/edugis/cache/population.map", + layers:"Bevolkingsdichtheid_2010" }], + center:({zoom:'.$ELZoom.',position:['.$ELPosX.','.$ELPosY.']})}); $("#mouseposition").mqMousePosition({ map: "#map2", @@ -259,13 +266,16 @@ if ($color=="dark") $color_path = "/diabook-dark/"; precision:4 }); - + $("#layermanager").mqLayerManager({map:"#map2"}); + map = $("#map2").mapQuery().data("mapQuery"); textarea = document.getElementById("id_diabook_ELZoom"); - + textarea.value = "'.$ELZoom.'"; $("#map2").bind("mousewheel", function(event, delta) { - if (delta > 0 || delta < 0){ - textarea.value = map.center().zoom; } + if (delta > 0 && textarea.value < 18){ + textarea.value = textarea.value - delta*-1; } + if (delta < 0 && textarea.value > "0"){ + textarea.value = textarea.value - delta*-1; } }); }; </script>'; @@ -413,6 +423,68 @@ if ($color=="dark") $color_path = "/diabook-dark/"; function diabook_community_info() { $a = get_app(); + + $close_pages = false; + $site_close_pages = get_config("diabook", "close_pages" ); + if (local_user()) {$close_pages = get_pconfig(local_user(), "diabook", "close_pages");} + if ($close_pages===false) $close_pages=$site_close_pages; + if ($close_pages===false) $close_pages="1"; + + $close_profiles = false; + $site_close_profiles = get_config("diabook", "close_profiles" ); + if (local_user()) {$close_profiles = get_pconfig(local_user(), "diabook", "close_profiles");} + if ($close_profiles===false) $close_profiles=$site_close_profiles; + if ($close_profiles===false) $close_profiles="0"; + + $close_helpers = false; + $site_close_helpers = get_config("diabook", "close_helpers" ); + if (local_user()) {$close_helpers = get_pconfig(local_user(), "diabook", "close_helpers");} + if ($close_helpers===false) $close_helpers=$site_close_helpers; + if ($close_helpers===false) $close_helpers="0"; + + $close_services = false; + $site_close_services = get_config("diabook", "close_services" ); + if (local_user()) {$close_services = get_pconfig(local_user(), "diabook", "close_services");} + if ($close_services===false) $close_services=$site_close_services; + if ($close_services===false) $close_services="0"; + + $close_friends = false; + $site_close_friends = get_config("diabook", "close_friends" ); + if (local_user()) {$close_friends = get_pconfig(local_user(), "diabook", "close_friends");} + if ($close_friends===false) $close_friends=$site_close_friends; + if ($close_friends===false) $close_friends="0"; + + $close_lastusers = false; + $site_close_lastusers = get_config("diabook", "close_lastusers" ); + if (local_user()) {$close_lastusers = get_pconfig(local_user(), "diabook", "close_lastusers");} + if ($close_lastusers===false) $close_lastusers=$site_close_lastusers; + if ($close_lastusers===false) $close_lastusers="0"; + + $close_lastphotos = false; + $site_close_lastphotos = get_config("diabook", "close_lastphotos" ); + if (local_user()) {$close_lastphotos = get_pconfig(local_user(), "diabook", "close_lastphotos");} + if ($close_lastphotos===false) $close_lastphotos=$site_close_lastphotos; + if ($close_lastphotos===false) $close_lastphotos="0"; + + $close_lastlikes = false; + $site_close_lastlikes = get_config("diabook", "close_lastlikes" ); + if (local_user()) {$close_lastlikes = get_pconfig(local_user(), "diabook", "close_lastlikes");} + if ($close_lastlikes===false) $close_lastlikes=$site_close_lastlikes; + if ($close_lastlikes===false) $close_lastlikes="0"; + + $close_twitter = false; + $site_close_twitter = get_config("diabook", "close_twitter" ); + if (local_user()) {$close_twitter = get_pconfig(local_user(), "diabook", "close_twitter");} + if ($close_twitter===false) $close_twitter=$site_close_twitter; + if ($close_twitter===false) $close_twitter="1"; + + $close_mapquery = false; + $site_close_mapquery = get_config("diabook", "close_mapquery" ); + if (local_user()) {$close_mapquery = get_pconfig(local_user(), "diabook", "close_mapquery");} + if ($close_mapquery===false) $close_mapquery=$site_close_mapquery; + if ($close_mapquery===false) $close_mapquery="1"; + + // comunity_profiles if($close_profiles != "1") { $aside['$comunity_profiles_title'] = t('Community Profiles'); @@ -509,7 +581,7 @@ if ($color=="dark") $color_path = "/diabook-dark/"; }} // last 12 photos - if($close_photos != "1") { + if($close_lastphotos != "1") { $aside['$photos_title'] = t('Last photos'); $aside['$photos_items'] = array(); $r = q("SELECT `photo`.`id`, `photo`.`resource-id`, `photo`.`scale`, `photo`.`desc`, `user`.`nickname`, `user`.`username` FROM @@ -608,9 +680,9 @@ if ($color=="dark") $color_path = "/diabook-dark/"; $ELZoom = get_pconfig(local_user(), 'diabook', 'ELZoom' ); $ELPosX = get_pconfig(local_user(), 'diabook', 'ELPosX' ); $ELPosY = get_pconfig(local_user(), 'diabook', 'ELPosY' ); - $aside['$ELZoom'] = array('diabook_ELZoom', t('Set zoomfactor for Earth Layer'), $ELZoom, '', $ELZoom); - $aside['$ELPosX'] = array('diabook_ELPosX', t('Set longitude (X) for Earth Layer'), $ELPosX, '', $ELPosX); - $aside['$ELPosY'] = array('diabook_ELPosY', t('Set latitude (Y) for Earth Layer'), $ELPosY, '', $ELPosY); + $aside['$ELZoom'] = array('diabook_ELZoom', t('Set zoomfactor for Earth Layers'), $ELZoom, '', $ELZoom); + $aside['$ELPosX'] = array('diabook_ELPosX', t('Set longitude (X) for Earth Layers'), $ELPosX, '', $ELPosX); + $aside['$ELPosY'] = array('diabook_ELPosY', t('Set latitude (Y) for Earth Layers'), $ELPosY, '', $ELPosY); if (isset($_POST['diabook-settings-map-sub']) && $_POST['diabook-settings-map-sub']!=''){ set_pconfig(local_user(), 'diabook', 'ELZoom', $_POST['diabook_ELZoom']); set_pconfig(local_user(), 'diabook', 'ELPosX', $_POST['diabook_ELPosX']); @@ -670,7 +742,7 @@ if ($color=="dark") $color_path = "/diabook-dark/"; $close_lastusersC = array('1'=>t("don't show"), '0'=>t("show"),); $close_lastphotosC = array('1'=>t("don't show"), '0'=>t("show"),); $close_lastlikesC = array('1'=>t("don't show"), '0'=>t("show"),); - $boxsettings['title'] = Array("", t('Show/hide boxes at right-hand coloumn:'), "", ""); + $boxsettings['title'] = Array("", t('Show/hide boxes at right-hand column:'), "", ""); $aside['$boxsettings'] = $boxsettings; $aside['$close_pages'] = array('diabook_close_pages', t('Community Pages'), $close_pages, '', $close_pagesC); $aside['$close_mapquery'] = array('diabook_close_mapquery', t('Earth Layers'), $close_mapquery, '', $close_mapqueryC); diff --git a/view/theme/duepuntozero/moderated_comment.tpl b/view/theme/duepuntozero/moderated_comment.tpl new file mode 100755 index 000000000..b0451c8c6 --- /dev/null +++ b/view/theme/duepuntozero/moderated_comment.tpl @@ -0,0 +1,61 @@ + <div class="comment-wwedit-wrapper" id="comment-edit-wrapper-$id" style="display: block;"> + <form class="comment-edit-form" id="comment-edit-form-$id" action="item" method="post" onsubmit="post_comment($id); return false;"> + <input type="hidden" name="type" value="$type" /> + <input type="hidden" name="profile_uid" value="$profile_uid" /> + <input type="hidden" name="parent" value="$parent" /> + <input type="hidden" name="return" value="$return_path" /> + <input type="hidden" name="jsreload" value="$jsreload" /> + <input type="hidden" name="preview" id="comment-preview-inp-$id" value="0" /> + + <div class="comment-edit-photo" id="comment-edit-photo-$id" > + <a class="comment-edit-photo-link" href="$mylink" title="$mytitle"><img class="my-comment-photo" src="$myphoto" alt="$mytitle" title="$mytitle" /></a> + </div> + <div class="comment-edit-photo-end"></div> + <div id="mod-cmnt-wrap-$id" class="mod-cmnt-wrap" style="display:none"> + <div id="mod-cmnt-name-lbl-$id" class="mod-cmnt-name-lbl">$lbl_modname</div> + <input type="text" id="mod-cmnt-name-$id" class="mod-cmnt-name" name="mod-cmnt-name" value="$modname" /> + <div id="mod-cmnt-email-lbl-$id" class="mod-cmnt-email-lbl">$lbl_modemail</div> + <input type="text" id="mod-cmnt-email-$id" class="mod-cmnt-email" name="mod-cmnt-email" value="$modemail" /> + <div id="mod-cmnt-url-lbl-$id" class="mod-cmnt-url-lbl">$lbl_modurl</div> + <input type="text" id="mod-cmnt-url-$id" class="mod-cmnt-url" name="mod-cmnt-url" value="$modurl" /> + </div> + <ul class="comment-edit-bb-$id"> + <li><a class="editicon boldbb shadow" + style="cursor: pointer;" title="$edbold" + onclick="insertFormatting('$comment','b', $id);"></a></li> + <li><a class="editicon italicbb shadow" + style="cursor: pointer;" title="$editalic" + onclick="insertFormatting('$comment','i', $id);"></a></li> + <li><a class="editicon underlinebb shadow" + style="cursor: pointer;" title="$eduline" + onclick="insertFormatting('$comment','u', $id);"></a></li> + <li><a class="editicon quotebb shadow" + style="cursor: pointer;" title="$edquote" + onclick="insertFormatting('$comment','quote', $id);"></a></li> + <li><a class="editicon codebb shadow" + style="cursor: pointer;" title="$edcode" + onclick="insertFormatting('$comment','code', $id);"></a></li> + <li><a class="editicon imagebb shadow" + style="cursor: pointer;" title="$edimg" + onclick="insertFormatting('$comment','img', $id);"></a></li> + <li><a class="editicon urlbb shadow" + style="cursor: pointer;" title="$edurl" + onclick="insertFormatting('$comment','url', $id);"></a></li> + <li><a class="editicon videobb shadow" + style="cursor: pointer;" title="$edvideo" + onclick="insertFormatting('$comment','video', $id);"></a></li> + </ul> + <div class="comment-edit-bb-end"></div> + <textarea id="comment-edit-text-$id" class="comment-edit-text-empty" name="body" onFocus="commentOpen(this,$id);cmtBbOpen($id);" onBlur="commentClose(this,$id);" >$comment</textarea> + + <div class="comment-edit-text-end"></div> + <div class="comment-edit-submit-wrapper" id="comment-edit-submit-wrapper-$id" style="display: none;" > + <input type="submit" onclick="post_comment($id); return false;" id="comment-edit-submit-$id" class="comment-edit-submit" name="submit" value="$submit" /> + <span onclick="preview_comment($id);" id="comment-edit-preview-link-$id" class="fakelink">$preview</span> + <div id="comment-edit-preview-$id" class="comment-edit-preview" style="display:none;"></div> + </div> + + <div class="comment-edit-end"></div> + </form> + + </div> diff --git a/view/theme/duepuntozero/prv_message.tpl b/view/theme/duepuntozero/prv_message.tpl index 5d884fe96..b5cda9c85 100644 --- a/view/theme/duepuntozero/prv_message.tpl +++ b/view/theme/duepuntozero/prv_message.tpl @@ -8,8 +8,12 @@ $parent <div id="prvmail-to-label">$to</div> +{{ if $showinputs }} <input type="text" id="recip" name="messageto" value="$prefill" maxlength="255" size="64" tabindex="10" /> <input type="hidden" id="recip-complete" name="messageto" value="$preid"> +{{ else }} +$select +{{ endif }} <div id="prvmail-subject-label">$subject</div> <input type="text" size="64" maxlength="255" id="prvmail-subject" name="subject" value="$subjtxt" $readonly tabindex="11" /> |