From 4145e3b2651312b5949de3aae4f34c1be5332eb8 Mon Sep 17 00:00:00 2001 From: Thomas Schmidt Date: Wed, 1 Feb 2012 12:00:38 +0100 Subject: [PATCH 1/7] pre-select current language, sort available languages --- settings/personal.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/settings/personal.php b/settings/personal.php index 787957f246..3b90827ed9 100755 --- a/settings/personal.php +++ b/settings/personal.php @@ -23,8 +23,10 @@ $relative=round(($used/$total)*10000)/100; $email=OC_Preferences::getValue(OC_User::getUser(), 'settings','email',''); -$lang=OC_Preferences::getValue( OC_User::getUser(), 'core', 'lang', 'en' ); +$lang=OC_Preferences::getValue( OC_User::getUser(), 'core', 'lang', OC_L10N::findLanguage() ); $languageCodes=OC_L10N::findAvailableLanguages(); +sort ($languageCodes); + //put the current language in the front unset($languageCodes[array_search($lang,$languageCodes)]); array_unshift($languageCodes,$lang); From e229a6adecde57d919b6b1385729cbf8cd41fe89 Mon Sep 17 00:00:00 2001 From: David Iwanowitsch Date: Sun, 29 Jan 2012 19:32:33 +0100 Subject: [PATCH 2/7] Added searchprovider for bookmarks, initial l10n support for bookmark plugin moved some code from updateList.php to bookmarks.php, to make it reusable --- apps/bookmarks/ajax/updateList.php | 60 ++------------ apps/bookmarks/appinfo/app.php | 7 +- apps/bookmarks/js/bookmarksearch.js | 22 ++++++ apps/bookmarks/l10n/xgettextfiles | 5 ++ apps/bookmarks/lib/bookmarks.php | 117 ++++++++++++++++++++++++++++ apps/bookmarks/lib/search.php | 50 ++++++++++++ 6 files changed, 205 insertions(+), 56 deletions(-) create mode 100644 apps/bookmarks/js/bookmarksearch.js create mode 100644 apps/bookmarks/l10n/xgettextfiles create mode 100644 apps/bookmarks/lib/bookmarks.php create mode 100644 apps/bookmarks/lib/search.php diff --git a/apps/bookmarks/ajax/updateList.php b/apps/bookmarks/ajax/updateList.php index d2a5397452..487e0d290e 100644 --- a/apps/bookmarks/ajax/updateList.php +++ b/apps/bookmarks/ajax/updateList.php @@ -5,6 +5,7 @@ * * @author Arthur Schiwon * @copyright 2011 Arthur Schiwon blizzz@arthur-schiwon.de +* @copyright 2012 David Iwanowitsch * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE @@ -30,71 +31,20 @@ require_once('../../../lib/base.php'); OC_JSON::checkLoggedIn(); OC_JSON::checkAppEnabled('bookmarks'); -$params=array(OC_User::getUser()); -$CONFIG_DBTYPE = OC_Config::getValue( 'dbtype', 'sqlite' ); //Filter for tag? -$filterTag = isset($_GET['tag']) ? '%' . htmlspecialchars_decode($_GET['tag']) . '%' : false; -if($filterTag){ - $sqlFilterTag = 'HAVING tags LIKE ?'; - $params[] = $filterTag; - if($CONFIG_DBTYPE == 'pgsql' ) { - $sqlFilterTag = 'HAVING array_to_string(array_agg(tag), \' \') LIKE ?'; - } -} else { - $sqlFilterTag = ''; -} +$filterTag = isset($_GET['tag']) ? htmlspecialchars_decode($_GET['tag']) : false; $offset = isset($_GET['page']) ? intval($_GET['page']) * 10 : 0; $sort = isset($_GET['sort']) ? ($_GET['sort']) : 'bookmarks_sorting_recent'; if($sort == 'bookmarks_sorting_clicks') { - $sqlSort = 'clickcount DESC'; + $sqlSortColumn = 'clickcount'; } else { - $sqlSort = 'id DESC'; + $sqlSortColumn = 'id'; } -if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ){ - $_gc_separator = ', \' \''; -} else { - $_gc_separator = 'SEPARATOR \' \''; -} -if($CONFIG_DBTYPE == 'pgsql' ){ - $params[] = $offset; - $query = OC_DB::prepare(' - SELECT id, url, title, array_to_string(array_agg(tag), \' \') as tags - FROM *PREFIX*bookmarks - LEFT JOIN *PREFIX*bookmarks_tags ON *PREFIX*bookmarks.id = *PREFIX*bookmarks_tags.bookmark_id - WHERE - *PREFIX*bookmarks.user_id = ? - GROUP BY id, url, title - '.$sqlFilterTag.' - ORDER BY *PREFIX*bookmarks.'.$sqlSort.' - LIMIT 10 - OFFSET ?'); -} else { - $query = OC_DB::prepare(' - SELECT id, url, title, - CASE WHEN *PREFIX*bookmarks.id = *PREFIX*bookmarks_tags.bookmark_id - THEN GROUP_CONCAT( tag ' .$_gc_separator. ' ) - ELSE \' \' - END - AS tags - FROM *PREFIX*bookmarks - LEFT JOIN *PREFIX*bookmarks_tags ON 1=1 - WHERE (*PREFIX*bookmarks.id = *PREFIX*bookmarks_tags.bookmark_id - OR *PREFIX*bookmarks.id NOT IN ( - SELECT *PREFIX*bookmarks_tags.bookmark_id FROM *PREFIX*bookmarks_tags - ) - ) - AND *PREFIX*bookmarks.user_id = ? - GROUP BY url - '.$sqlFilterTag.' - ORDER BY *PREFIX*bookmarks.'.$sqlSort.' - LIMIT '.$offset.', 10'); -} - -$bookmarks = $query->execute($params)->fetchAll(); +$bookmarks = OC_Bookmarks_Bookmarks::findBookmarks($offset, $sqlSortColumn, $filterTag, true); OC_JSON::success(array('data' => $bookmarks)); diff --git a/apps/bookmarks/appinfo/app.php b/apps/bookmarks/appinfo/app.php index 44a1e47dff..479d8ed476 100644 --- a/apps/bookmarks/appinfo/app.php +++ b/apps/bookmarks/appinfo/app.php @@ -7,8 +7,13 @@ * See the COPYING-README file. */ +OC::$CLASSPATH['OC_Bookmarks_Bookmarks'] = 'apps/bookmarks/lib/bookmarks.php'; + OC_App::register( array( 'order' => 70, 'id' => 'bookmark', 'name' => 'Bookmarks' )); -OC_App::addNavigationEntry( array( 'id' => 'bookmarks_index', 'order' => 70, 'href' => OC_Helper::linkTo( 'bookmarks', 'index.php' ), 'icon' => OC_Helper::imagePath( 'bookmarks', 'bookmarks.png' ), 'name' => 'Bookmarks' )); +$l = new OC_l10n('bookmarks'); +OC_App::addNavigationEntry( array( 'id' => 'bookmarks_index', 'order' => 70, 'href' => OC_Helper::linkTo( 'bookmarks', 'index.php' ), 'icon' => OC_Helper::imagePath( 'bookmarks', 'bookmarks.png' ), 'name' => $l->t('Bookmarks'))); OC_App::registerPersonal('bookmarks', 'settings'); +require_once('apps/bookmarks/lib/search.php'); +OC_Util::addScript('bookmarks','bookmarksearch'); diff --git a/apps/bookmarks/js/bookmarksearch.js b/apps/bookmarks/js/bookmarksearch.js new file mode 100644 index 0000000000..39874aa0b2 --- /dev/null +++ b/apps/bookmarks/js/bookmarksearch.js @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2012 David Iwanowitsch + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +$(document).ready(function(){ + OC.search.customResults.Bookm.=function(row,item){ + var a=row.find('a'); + a.attr('target','_blank'); + a.click(recordClick); + } +}); + +function recordClick(event) { + var jsFileLocation = $('script[src*=bookmarksearch]').attr('src'); + jsFileLocation = jsFileLocation.replace('js/bookmarksearch.js', ''); + $.ajax({ + url: jsFileLocation + 'ajax/recordClick.php', + data: 'url=' + encodeURI($(this).attr('href')), + }); +} diff --git a/apps/bookmarks/l10n/xgettextfiles b/apps/bookmarks/l10n/xgettextfiles new file mode 100644 index 0000000000..cd55543239 --- /dev/null +++ b/apps/bookmarks/l10n/xgettextfiles @@ -0,0 +1,5 @@ +../appinfo/app.php +../lib/search.php +../templates/settings.php +../templates/addBm.php +../templates/list.php diff --git a/apps/bookmarks/lib/bookmarks.php b/apps/bookmarks/lib/bookmarks.php new file mode 100644 index 0000000000..81c1b03981 --- /dev/null +++ b/apps/bookmarks/lib/bookmarks.php @@ -0,0 +1,117 @@ +. + * + */ + +/** + * This class manages bookmarks + */ +class OC_Bookmarks_Bookmarks{ + + /** + * @brief Finds all bookmarks, matching the filter + * @param offset result offset + * @param sqlSortColumn sort result with this column + * @param filter can be: empty -> no filter, a string -> filter this, a string array -> filter for all strings + * @param filterTagOnly if true, filter affacts only tags, else filter affects url, title and tags + * @return void + */ + public static function findBookmarks($offset, $sqlSortColumn, $filter, $filterTagOnly){ + //OC_Log::write('bookmarks', 'findBookmarks ' .$offset. ' '.$sqlSortColumn.' '. $filter.' '. $filterTagOnly ,OC_Log::DEBUG); + $CONFIG_DBTYPE = OC_Config::getValue( 'dbtype', 'sqlite' ); + + $params=array(OC_User::getUser()); + + if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ){ + $_gc_separator = ', \' \''; + } else { + $_gc_separator = 'SEPARATOR \' \''; + } + + if($filter){ + if($CONFIG_DBTYPE == 'pgsql' ) + $tagString = 'array_to_string(array_agg(tag), \' \')'; + else + $tagString = 'tags'; + + $sqlFilterTag = 'HAVING '; + if(is_array($filter)){ + $first = true; + $filterstring = ''; + foreach ($filter as $singleFilter){ + $filterstring = $filterstring . ($first?'':' AND ') . $tagString.' LIKE ? '; + $params[] = '%'.$singleFilter.'%'; + $first=false; + } + $sqlFilterTag = $sqlFilterTag . $filterstring; + } else{ + $sqlFilterTag = $sqlFilterTag .$tagString.' LIKE ? '; + $params[] = '%'.$filter.'%'; + } + } else { + $sqlFilterTag = ''; + } + + if($CONFIG_DBTYPE == 'pgsql' ){ + $query = OC_DB::prepare(' + SELECT id, url, title, '.($filterTagOnly?'':'url || title ||').' array_to_string(array_agg(tag), \' \') as tags + FROM *PREFIX*bookmarks + LEFT JOIN *PREFIX*bookmarks_tags ON *PREFIX*bookmarks.id = *PREFIX*bookmarks_tags.bookmark_id + WHERE + *PREFIX*bookmarks.user_id = ? + GROUP BY id, url, title + '.$sqlFilterTag.' + ORDER BY *PREFIX*bookmarks.'.$sqlSortColumn.' DESC + LIMIT 10 + OFFSET '. $offset); + } else { + if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ) + $concatFunction = '(url || title || '; + else + $concatFunction = 'Concat(Concat( url, title), '; + + $query = OC_DB::prepare(' + SELECT id, url, title, ' + .($filterTagOnly?'':$concatFunction). + 'CASE WHEN *PREFIX*bookmarks.id = *PREFIX*bookmarks_tags.bookmark_id + THEN GROUP_CONCAT( tag ' .$_gc_separator. ' ) + ELSE \' \' + END ' + .($filterTagOnly?'':')').' + AS tags + FROM *PREFIX*bookmarks + LEFT JOIN *PREFIX*bookmarks_tags ON 1=1 + WHERE (*PREFIX*bookmarks.id = *PREFIX*bookmarks_tags.bookmark_id + OR *PREFIX*bookmarks.id NOT IN ( + SELECT *PREFIX*bookmarks_tags.bookmark_id FROM *PREFIX*bookmarks_tags + ) + ) + AND *PREFIX*bookmarks.user_id = ? + GROUP BY url + '.$sqlFilterTag.' + ORDER BY *PREFIX*bookmarks.'.$sqlSortColumn.' DESC + LIMIT '.$offset.', 10'); + } + + $bookmarks = $query->execute($params)->fetchAll(); + return $bookmarks; + } +} +?> diff --git a/apps/bookmarks/lib/search.php b/apps/bookmarks/lib/search.php new file mode 100644 index 0000000000..59495db82e --- /dev/null +++ b/apps/bookmarks/lib/search.php @@ -0,0 +1,50 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see . + * + */ + +class OC_Search_Provider_Bookmarks extends OC_Search_Provider{ + function search($query){ + $results=array(); + + $offset = 0; + $sqlSortColumn = 'id'; + + $searchquery=array(); + if(substr_count($query, ' ') > 0){ + $searchquery = explode(' ', $query); + }else{ + $searchquery = $query; + } + +// OC_Log::write('bookmarks', 'search ' .$query ,OC_Log::DEBUG); + $bookmarks = OC_Bookmarks_Bookmarks::findBookmarks($offset, $sqlSortColumn, $searchquery, false); +// OC_Log::write('bookmarks', 'found ' .count($bookmarks) ,OC_Log::DEBUG); + //$l = new OC_l10n('bookmarks'); //resulttype can't be localized, javascript relies on that type + foreach($bookmarks as $bookmark){ + $results[]=new OC_Search_Result($bookmark['title'],'', $bookmark['url'],'Bookm.'); + } + + return $results; + } +} +new OC_Search_Provider_Bookmarks(); + +?> From 6583d30e26d752c5ddccb1e350e075f59b7ba75d Mon Sep 17 00:00:00 2001 From: David Iwanowitsch Date: Mon, 30 Jan 2012 18:14:09 +0100 Subject: [PATCH 3/7] fix javascript --- apps/bookmarks/js/bookmarksearch.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bookmarks/js/bookmarksearch.js b/apps/bookmarks/js/bookmarksearch.js index 39874aa0b2..e7a4fb1839 100644 --- a/apps/bookmarks/js/bookmarksearch.js +++ b/apps/bookmarks/js/bookmarksearch.js @@ -5,7 +5,7 @@ * See the COPYING-README file. */ $(document).ready(function(){ - OC.search.customResults.Bookm.=function(row,item){ + OC.search.customResults['Bookm.'] = function(row,item){ var a=row.find('a'); a.attr('target','_blank'); a.click(recordClick); From e4faea8f9007667ee77ddd114440747539a0b843 Mon Sep 17 00:00:00 2001 From: Marvin Thomas Rabe Date: Wed, 1 Feb 2012 20:58:04 +0100 Subject: [PATCH 4/7] Fixed upload button display error --- files/css/files.css | 3 ++- files/templates/index.php | 7 ++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/files/css/files.css b/files/css/files.css index 6c4d603b4a..13ed7fb33e 100644 --- a/files/css/files.css +++ b/files/css/files.css @@ -27,7 +27,8 @@ .file_upload_start { opacity:0; filter:alpha(opacity=0); z-index:1; position:absolute; left:0; top:0; width:100%; cursor:pointer;} .file_upload_filename.active { border-bottom-right-radius:0 } -.file_upload_filename { z-index:100; cursor:pointer; border-top-left-radius:0; border-bottom-left-radius:0; padding:.3em; } +.file_upload_filename { position: relative; z-index:100; padding-left: 0.8em; padding-right: 0.8em; cursor:pointer; border-top-left-radius:0; border-bottom-left-radius:0; } +.file_upload_filename img { position: absolute; top: 0.4em; left: 0.4em; } .file_upload_form, .file_upload_wrapper, .file_upload_start, .file_upload_filename, #file_upload_submit { cursor:pointer; } diff --git a/files/templates/index.php b/files/templates/index.php index 9ebfa41cef..38a3274ff3 100644 --- a/files/templates/index.php +++ b/files/templates/index.php @@ -3,13 +3,10 @@
- - t('New');?> - + t('New');?>
@@ -17,7 +14,7 @@ - + From bbd10a3c94fdd0f8ac41d6d60651c7468360e487 Mon Sep 17 00:00:00 2001 From: Marvin Thomas Rabe Date: Wed, 1 Feb 2012 21:19:31 +0100 Subject: [PATCH 5/7] Bookmark layout updated --- apps/bookmarks/css/bookmarks.css | 33 ++++++++++++++------------------ apps/bookmarks/js/bookmarks.js | 4 ++-- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/apps/bookmarks/css/bookmarks.css b/apps/bookmarks/css/bookmarks.css index 233d4a0294..ef0ec68fcc 100644 --- a/apps/bookmarks/css/bookmarks.css +++ b/apps/bookmarks/css/bookmarks.css @@ -18,7 +18,7 @@ } .bookmarks_list { - margin-top: 45px; + margin-top: 2.8em; } .bookmarks_addBml { @@ -36,38 +36,33 @@ } .bookmark_actions { + position: absolute; + right: 1em; + top: 0.7em; display: none; - font-size: smaller; - color: #666; - padding-left: 4em; -} - -.bookmark_actions span:hover { - cursor: pointer; - text-decoration: underline; } +.bookmark_actions span { margin: 0 0.4em; } +.bookmark_actions img { opacity: 0.3; } +.bookmark_actions img:hover { opacity: 1; cursor: pointer; } .bookmark_single { + position: relative; padding: 0.5em 1em; + border-bottom: 1px solid #DDD; + -webkit-transition:background-color 500ms; -moz-transition:background-color 500ms; -o-transition:background-color 500ms; transition:background-color 500ms; } .bookmark_single:hover { - background-color: #EAEAEA; + background-color:#f8f8f8 } .bookmark_single:hover .bookmark_actions { display: block; } -.bookmark_title { - font-size: larger; - color: blue; - text-decoration: underline; -} - -.bookmark_url { - color: green; -} +.bookmark_title { font-weight: bold; display: inline-block; margin-right: 0.8em; } +.bookmark_url { display: none; color: #999; } +.bookmark_single:hover .bookmark_url { display: inline; } .bookmark_tag { color: #ff3333; diff --git a/apps/bookmarks/js/bookmarks.js b/apps/bookmarks/js/bookmarks.js index 51646e5382..86bb71ac72 100644 --- a/apps/bookmarks/js/bookmarks.js +++ b/apps/bookmarks/js/bookmarks.js @@ -85,10 +85,10 @@ function addOrEditBookmark(event) { $('.bookmarks_add').children('p').children('.bookmarks_input').val(''); $('.bookmarks_list').prepend( '
' + + '

 

' + '

' + title + '

' + '

' + url + '

' + '

' + tagshtml + '

' + - '

Delete Edit

' + '
' ); } @@ -153,10 +153,10 @@ function updateBookmarksList(bookmark) { } $('.bookmarks_list').append( '
' + + '

 

' + '

' + encodeEntities(bookmark.title) + '

' + '

' + encodeEntities(bookmark.url) + '

' + '

' + taglist + '

' + - '

Delete Edit

' + '
' ); } From f999fbf81a142b2695bf3fffcf66e430efb71c44 Mon Sep 17 00:00:00 2001 From: Marvin Thomas Rabe Date: Wed, 1 Feb 2012 22:02:06 +0100 Subject: [PATCH 6/7] Bookmark layout updated --- apps/bookmarks/css/bookmarks.css | 20 ++++++++++++++++---- apps/bookmarks/js/bookmarks.js | 10 ++++++---- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/apps/bookmarks/css/bookmarks.css b/apps/bookmarks/css/bookmarks.css index ef0ec68fcc..48f0bede11 100644 --- a/apps/bookmarks/css/bookmarks.css +++ b/apps/bookmarks/css/bookmarks.css @@ -18,7 +18,7 @@ } .bookmarks_list { - margin-top: 2.8em; + margin-top: 36px; } .bookmarks_addBml { @@ -63,10 +63,22 @@ .bookmark_title { font-weight: bold; display: inline-block; margin-right: 0.8em; } .bookmark_url { display: none; color: #999; } .bookmark_single:hover .bookmark_url { display: inline; } - -.bookmark_tag { - color: #ff3333; +.bookmark_tags { + position: absolute; + top: 0.5em; + right: 6em; + text-align: right; } +.bookmark_tag { + display: inline-block; + color: white; + margin: 0 0.2em; + padding: 0 0.4em; + background-color: #1D2D44; + border-radius: 0.4em; + opacity: 0.2; +} +.bookmark_tag:hover { opacity: 0.5; } .loading_meta { display: none; diff --git a/apps/bookmarks/js/bookmarks.js b/apps/bookmarks/js/bookmarks.js index 86bb71ac72..b43c3deb59 100644 --- a/apps/bookmarks/js/bookmarks.js +++ b/apps/bookmarks/js/bookmarks.js @@ -87,8 +87,8 @@ function addOrEditBookmark(event) { '
' + '

 

' + '

' + title + '

' + - '

' + url + '

' + '

' + tagshtml + '

' + + '

' + url + '

' + '
' ); } @@ -146,7 +146,8 @@ function updateBookmarksList(bookmark) { var tags = encodeEntities(bookmark.tags).split(' '); var taglist = ''; for ( var i=0, len=tags.length; i' + tags[i] + ' '; + if(tags[i] != '') + taglist = taglist + '' + tags[i] + ' '; } if(!hasProtocol(bookmark.url)) { bookmark.url = 'http://' + bookmark.url; @@ -156,9 +157,11 @@ function updateBookmarksList(bookmark) { '

 

' + '

' + encodeEntities(bookmark.title) + '

' + '

' + encodeEntities(bookmark.url) + '

' + - '

' + taglist + '

' + '
' ); + if(taglist != '') { + $('div[data-id="'+ bookmark.id +'"]').append('

' + taglist + '

'); + } } function updateOnBottom() { @@ -178,7 +181,6 @@ function recordClick(event) { function encodeEntities(s){ try { return $('
').text(s).html(); - } catch (ex) { return ""; } From f1982965769ac30f00bb36ab3c672815d1a0d09b Mon Sep 17 00:00:00 2001 From: Bartek Przybylski Date: Wed, 1 Feb 2012 22:15:01 +0100 Subject: [PATCH 7/7] gallery works in safari now --- apps/gallery/js/albums.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/gallery/js/albums.js b/apps/gallery/js/albums.js index 59efb5b565..d2b4d858b5 100644 --- a/apps/gallery/js/albums.js +++ b/apps/gallery/js/albums.js @@ -46,14 +46,14 @@ Albums={ var a = Albums.albums[i]; var local=$(displayTemplate); local.attr('data-album',a.name); - $(".gallery_album_decoration a.rename", local).click(function(name,event){ + $(".gallery_album_decoration a.rename", local).bind('click', {name: a.name},function(event){ event.preventDefault(); - galleryRename(name); - }.bind(null,a.name)); - $(".gallery_album_decoration a.remove", local).click(function(name,event){ + galleryRename(event.data.name); + }); + $(".gallery_album_decoration a.remove", local).bind('click', {name: a.name},function(event){ event.preventDefault(); - galleryRemove(name); - }.bind(null,a.name)); + galleryRemove(a.data.name); + }); $("a.view", local).attr('href','?view='+a.name); $('h1',local).text(a.name); $(".gallery_album_cover", local).attr('title',a.name);