From 325c7e9562ac271857d7490f978e3ce3c23952d1 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Wed, 18 May 2011 14:28:13 +0300 Subject: Ukrainian language update --- lib/plugins/popularity/lang/uk/submitted.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 lib/plugins/popularity/lang/uk/submitted.txt (limited to 'lib') diff --git a/lib/plugins/popularity/lang/uk/submitted.txt b/lib/plugins/popularity/lang/uk/submitted.txt new file mode 100644 index 000000000..90213858d --- /dev/null +++ b/lib/plugins/popularity/lang/uk/submitted.txt @@ -0,0 +1,2 @@ +====== Відгук популярності ====== +Дані були успішно відправлені. \ No newline at end of file -- cgit v1.2.3 From fc4aefb978d8bb0aba588ef2ae2734619ff75ee5 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Sat, 4 Jun 2011 19:16:24 +0300 Subject: fetch.php with rev parameter --- lib/exe/fetch.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/exe/fetch.php b/lib/exe/fetch.php index 3ad4f1937..143d40f22 100644 --- a/lib/exe/fetch.php +++ b/lib/exe/fetch.php @@ -20,6 +20,10 @@ $CACHE = calc_cache($_REQUEST['cache']); $WIDTH = (int) $_REQUEST['w']; $HEIGHT = (int) $_REQUEST['h']; + $REV = (int) @$_REQUEST['rev']; + //sanitize revision + $REV = preg_replace('/[^0-9]/','',$REV); + list($EXT,$MIME,$DL) = mimetype($MEDIA,false); if($EXT === false){ $EXT = 'unknown'; @@ -28,7 +32,7 @@ } // check for permissions, preconditions and cache external files - list($STATUS, $STATUSMESSAGE) = checkFileStatus($MEDIA, $FILE); + list($STATUS, $STATUSMESSAGE) = checkFileStatus($MEDIA, $FILE, $REV); // prepare data for plugin events $data = array('media' => $MEDIA, @@ -147,7 +151,7 @@ function sendFile($file,$mime,$dl,$cache){ * @param $file reference to the file variable * @returns array(STATUS, STATUSMESSAGE) */ -function checkFileStatus(&$media, &$file) { +function checkFileStatus(&$media, &$file, $rev='') { global $MIME, $EXT, $CACHE; //media to local file @@ -172,7 +176,7 @@ function checkFileStatus(&$media, &$file) { if(auth_quickaclcheck(getNS($media).':X') < AUTH_READ){ return array( 403, 'Forbidden' ); } - $file = mediaFN($media); + $file = mediaFN($media, $rev); } //check file existance -- cgit v1.2.3 From 8d40b4b6e74029367996c169aa3e67507a4cdfe1 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Sun, 5 Jun 2011 21:05:23 +0300 Subject: type of recent changes selection --- lib/tpl/default/design.css | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'lib') diff --git a/lib/tpl/default/design.css b/lib/tpl/default/design.css index 1fdf2bfac..029a5525c 100644 --- a/lib/tpl/default/design.css +++ b/lib/tpl/default/design.css @@ -246,6 +246,18 @@ div.dokuwiki div.pagenav-next { width: 49% } +/* ----------- type of recent changes ------------- */ + +div.dokuwiki div.changestypenav { + border-bottom: 1px solid #8CACBB; + padding-bottom: 10px; + margin-bottom: 10px; +} + +div.dokuwiki div.changestypenav label { + padding-right: 10px; +} + /* --------------- Links ------------------ */ div.dokuwiki a:link, -- cgit v1.2.3 From d9162c6cd87643d7e7af8e37cd93aa48b8aecb96 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Thu, 9 Jun 2011 14:04:50 +0300 Subject: fullscreen media manager --- lib/exe/mediamanager.php | 14 ++++++++++---- lib/tpl/default/style.ini | 1 + 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php index 02fde5a8d..d4ebc2d38 100644 --- a/lib/exe/mediamanager.php +++ b/lib/exe/mediamanager.php @@ -76,7 +76,11 @@ } // handle meta saving - if($IMG && $_REQUEST['do']['save']){ + if($IMG && @array_key_exists('save', $_REQUEST['do'])){ + $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']); + } + + if($IMG && @array_key_exists('save', $_REQUEST['mediado'])){ $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']); } @@ -102,9 +106,11 @@ msg(sprintf($lang['deletefail'],noNS($DEL)),-1); } } - // finished - start output - header('Content-Type: text/html; charset=utf-8'); - include(template('mediamanager.php')); + + if (!($_REQUEST['do'] == 'media')) { + header('Content-Type: text/html; charset=utf-8'); + include(template('mediamanager.php')); + } /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ diff --git a/lib/tpl/default/style.ini b/lib/tpl/default/style.ini index c5b2c31a5..bc28d1bbc 100644 --- a/lib/tpl/default/style.ini +++ b/lib/tpl/default/style.ini @@ -15,6 +15,7 @@ _mediaoptions.css = screen _admin.css = screen _linkwiz.css = screen _subscription.css = screen +mediamanager.css = screen rtl.css = rtl print.css = print -- cgit v1.2.3 From 8e69fd30702f1101a9c70dbe6eac6f45f9af3970 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Mon, 13 Jun 2011 20:23:18 +0300 Subject: media manager --- lib/tpl/default/mediamanager.css | 155 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 lib/tpl/default/mediamanager.css (limited to 'lib') diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css new file mode 100644 index 000000000..2001bc5f9 --- /dev/null +++ b/lib/tpl/default/mediamanager.css @@ -0,0 +1,155 @@ +.float-image { + float: left; + margin-right: 10px; + margin-bottom: 10px; + width: 100px; + height: 180px; + background-color: #DEE7EC; + padding: 10px; + text-align: center; +} + +.float-image:hover { + background-color: #dadada; +} + +/* --- Tree formatting --- */ + +#media-menu img { + float: left; + padding: 0.5em 0.3em 0 0; +} + +#media-menu ul { + list-style-type: none; + list-style-image: none; + margin-left: 1.5em; +} + +#media-menu li { + clear: left; + list-style-type: none; + list-style-image: none; +} + +/* -------------- */ + +.mediamanager { + width: 100%; + overflow-y: auto; +} + +.mediamanager .mediamanager-slider { + width: auto; +} + +.mediamanager .mediamanager-slider .layout { + float: left; + margin-left: 5px; + margin-right: 5px; +} + +.mediamanager .scroll-container { + /*height: 0px;*/ + overflow-y: auto; + overflow-x: hidden; + padding: 0; + margin: 0; +} + +.background-container { + background-color: #DEE7EC; + margin-bottom: 10px; + padding: 10px; + text-align: left; +} + +.mediamanager-link-thumbnails { + background: url('icon-thumb.png') 0 -4px no-repeat; + padding-left: 30px; + display: block; + float: left; + /*width: 0;*/ + /*overflow: hidden;*/ +} + +.mediamanager-link-list { + background: url('icon-list.png') 0 -4px no-repeat; + padding-left: 30px; + display: block; + float: left; + /*width: 0;*/ + /*overflow: hidden;*/ +} + +.mediamanager-block-sort { + background: url('icon-sort.png') 0 -4px no-repeat; + padding-left: 30px; + display: block; + float: right; +} + +.mediamanager-link-thumbnails:hover, +.mediamanager-link-list:hover { + width: auto; + margin-right: 10px; +} + +.mediamanager-clear { + clear: both; + line-height: 0; + font-size: 0; +} + +.mediamanager-link-upload { + background: url('icon-upload.png') 0 -4px no-repeat; + padding-left: 30px; +} + +.mediamanager-link-search { + background: url('icon-search.png') 0 -4px no-repeat; + padding-left: 30px; +} + +.mediamanager-tabs a { + font-weight: bold; + display: block; + float: left; + padding: 10px; + padding-bottom: 5px; + padding-top: 5px; + + margin-right: 2px; + + -moz-border-radius-topright: 10px; + -webkit-border-top-right-radius: 10px; + -moz-border-radius-topleft: 10px; + -webkit-border-top-left-radius: 10px; + border-top-right-radius: 10px; + border-top-left-radius: 10px; +} + +.mediamanager-tabs .selected { + background-color: #DEE7EC; +} + +.mediamanager-tabs a:hover { + background-color: #DEE7EC; + opacity: 0.5; +} + +.mediamanager-table td { + padding: 5px; +} + +.mediamanager-table tr:nth-child(2n+1){ + background-color: #f5f5f5; +} + +.mediamanager-table { + background: expression(this.rowIndex % 2 == 0 ? "#ffffff" : "#f5f5f5"); +} + +.mediamanager-table tr:hover { + background-color: #DEE7EC; +} \ No newline at end of file -- cgit v1.2.3 From 1eeeced2339756132a78e5f1893cb3677c0f6529 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Wed, 15 Jun 2011 18:09:26 +0300 Subject: media manager fixes --- lib/tpl/default/mediamanager.css | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index 2001bc5f9..bf4513f0c 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -152,4 +152,11 @@ .mediamanager-table tr:hover { background-color: #DEE7EC; -} \ No newline at end of file +} + +form.meta textarea.edit { + height: 8em; + width: 95%; + min-width: 95%; + max-width: 95%; +} -- cgit v1.2.3 From b9eb2e61ea959c1f8b3a5c58ad50a0f9c8c855ad Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Mon, 20 Jun 2011 10:51:48 +0300 Subject: media manager button --- lib/tpl/default/main.php | 1 + 1 file changed, 1 insertion(+) (limited to 'lib') diff --git a/lib/tpl/default/main.php b/lib/tpl/default/main.php index 94c2322aa..698793ecd 100644 --- a/lib/tpl/default/main.php +++ b/lib/tpl/default/main.php @@ -117,6 +117,7 @@ if (!defined('DOKU_INC')) die();
+ -- cgit v1.2.3 From 030dd1d963bb7a0ab824b823d777a58fc105b1e5 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Mon, 20 Jun 2011 19:16:09 +0300 Subject: thumbnails and list view --- lib/images/icon-list.png | Bin 0 -> 3342 bytes lib/images/icon-sort.png | Bin 0 -> 316 bytes lib/images/icon-thumb.png | Bin 0 -> 969 bytes lib/tpl/default/design.css | 2 +- lib/tpl/default/mediamanager.css | 110 ++++++++++++++++++++++++--------------- 5 files changed, 68 insertions(+), 44 deletions(-) create mode 100644 lib/images/icon-list.png create mode 100644 lib/images/icon-sort.png create mode 100644 lib/images/icon-thumb.png (limited to 'lib') diff --git a/lib/images/icon-list.png b/lib/images/icon-list.png new file mode 100644 index 000000000..ecfeed92d Binary files /dev/null and b/lib/images/icon-list.png differ diff --git a/lib/images/icon-sort.png b/lib/images/icon-sort.png new file mode 100644 index 000000000..c6403dd3c Binary files /dev/null and b/lib/images/icon-sort.png differ diff --git a/lib/images/icon-thumb.png b/lib/images/icon-thumb.png new file mode 100644 index 000000000..ccc7a101d Binary files /dev/null and b/lib/images/icon-thumb.png differ diff --git a/lib/tpl/default/design.css b/lib/tpl/default/design.css index 029a5525c..1dee4dc69 100644 --- a/lib/tpl/default/design.css +++ b/lib/tpl/default/design.css @@ -249,7 +249,7 @@ div.dokuwiki div.pagenav-next { /* ----------- type of recent changes ------------- */ div.dokuwiki div.changestypenav { - border-bottom: 1px solid #8CACBB; + border-bottom: 1px solid __border__; padding-bottom: 10px; margin-bottom: 10px; } diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index bf4513f0c..25816e273 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -1,18 +1,3 @@ -.float-image { - float: left; - margin-right: 10px; - margin-bottom: 10px; - width: 100px; - height: 180px; - background-color: #DEE7EC; - padding: 10px; - text-align: center; -} - -.float-image:hover { - background-color: #dadada; -} - /* --- Tree formatting --- */ #media-menu img { @@ -55,35 +40,36 @@ overflow-x: hidden; padding: 0; margin: 0; + text-align: left; } .background-container { - background-color: #DEE7EC; + background-color: __background_alt__; margin-bottom: 10px; padding: 10px; text-align: left; } .mediamanager-link-thumbnails { - background: url('icon-thumb.png') 0 -4px no-repeat; + background: url('/lib/images/icon-thumb.png') 0 -4px no-repeat; padding-left: 30px; display: block; float: left; - /*width: 0;*/ - /*overflow: hidden;*/ + width: 0; + overflow: hidden; } .mediamanager-link-list { - background: url('icon-list.png') 0 -4px no-repeat; + background: url('/lib/images/icon-list.png') 0 -4px no-repeat; padding-left: 30px; display: block; float: left; - /*width: 0;*/ - /*overflow: hidden;*/ + width: 0; + overflow: hidden; } .mediamanager-block-sort { - background: url('icon-sort.png') 0 -4px no-repeat; + background: url('/lib/images/icon-sort.png') 0 -4px no-repeat; padding-left: 30px; display: block; float: right; @@ -95,22 +81,6 @@ margin-right: 10px; } -.mediamanager-clear { - clear: both; - line-height: 0; - font-size: 0; -} - -.mediamanager-link-upload { - background: url('icon-upload.png') 0 -4px no-repeat; - padding-left: 30px; -} - -.mediamanager-link-search { - background: url('icon-search.png') 0 -4px no-repeat; - padding-left: 30px; -} - .mediamanager-tabs a { font-weight: bold; display: block; @@ -130,11 +100,11 @@ } .mediamanager-tabs .selected { - background-color: #DEE7EC; + background-color: __background_alt__; } .mediamanager-tabs a:hover { - background-color: #DEE7EC; + background-color: __background_alt__; opacity: 0.5; } @@ -143,7 +113,7 @@ } .mediamanager-table tr:nth-child(2n+1){ - background-color: #f5f5f5; + background-color: __background_neu__; } .mediamanager-table { @@ -151,7 +121,7 @@ } .mediamanager-table tr:hover { - background-color: #DEE7EC; + background-color: __background_alt__; } form.meta textarea.edit { @@ -160,3 +130,57 @@ form.meta textarea.edit { min-width: 95%; max-width: 95%; } + +.mediamanager-file-list { + padding: 0; + margin: 0 !important; +} + +.mediamanager-thumbs li { + width: 100px; + min-height: 130px; + display: inline-block; + margin: 0; + margin-right: 10px; + margin-bottom: 10px; + background-color: __background_alt__; + padding: 10px; + vertical-align: top; + display: -moz-inline-stack; + text-align: center; +} + +.mediamanager-thumbs li .info { + display: block; +} + +.mediamanager-list li { + display: block; + margin-bottom: 3px; +} + +.mediamanager-list li:nth-child(2n+1) { + background-color: __background_neu__; +} + +.mediamanager-list li .image { + width: 50px; + height: 50px; + overflow: hidden; + float: left; +} + +.mediamanager-list li .image img { + width: 100%; +} + +.mediamanager-list li .info { + overflow: hidden; + float: left; + margin-left: 5px; + width: 20%; +} + +.mediamanager-file-list li:hover { + background-color: #dadada; +} -- cgit v1.2.3 From 6b467722ce67ad489326798250cc5312efa70dcd Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Wed, 22 Jun 2011 23:16:31 +0300 Subject: mediamanager fixes --- lib/images/icon-file.png | Bin 0 -> 3363 bytes lib/tpl/default/mediamanager.css | 79 +++++++++++++++++++++++++++++++++++---- 2 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 lib/images/icon-file.png (limited to 'lib') diff --git a/lib/images/icon-file.png b/lib/images/icon-file.png new file mode 100644 index 000000000..d350c8c31 Binary files /dev/null and b/lib/images/icon-file.png differ diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index 25816e273..e7c78dbcf 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -24,6 +24,11 @@ overflow-y: auto; } +.mediamanager .clearer { + font-size: 0; + line-height: 0; +} + .mediamanager .mediamanager-slider { width: auto; } @@ -51,7 +56,7 @@ } .mediamanager-link-thumbnails { - background: url('/lib/images/icon-thumb.png') 0 -4px no-repeat; + background: url('../../images/icon-thumb.png') 0 -4px no-repeat; padding-left: 30px; display: block; float: left; @@ -60,7 +65,7 @@ } .mediamanager-link-list { - background: url('/lib/images/icon-list.png') 0 -4px no-repeat; + background: url('../../images/icon-list.png') 0 -4px no-repeat; padding-left: 30px; display: block; float: left; @@ -69,7 +74,7 @@ } .mediamanager-block-sort { - background: url('/lib/images/icon-sort.png') 0 -4px no-repeat; + background: url('../../images/icon-sort.png') 0 -4px no-repeat; padding-left: 30px; display: block; float: right; @@ -148,14 +153,44 @@ form.meta textarea.edit { vertical-align: top; display: -moz-inline-stack; text-align: center; + zoom: 1; + *display: inline; + _height: 130px; + position: relative; +} + +.mediamanager-thumbs li .image { + width: 100%; + height: 90px; + display: block; + overflow: hidden; } .mediamanager-thumbs li .info { display: block; + overflow: hidden; +} + +.mediamanager-thumbs li input[type=checkbox] { + /*position: absolute; + left: 100%; + top: 100%; + margin-left: -20px; + margin-top: -20px;*/ + display: none; +} + +.mediamanager-thumbs li:hover input[type=checkbox], +.mediamanager-thumbs li input[type=checkbox]:checked { + display: inline; } .mediamanager-list li { + list-style: none; display: block; + position: relative; + max-height: 50px; + margin: 0; margin-bottom: 3px; } @@ -164,10 +199,11 @@ form.meta textarea.edit { } .mediamanager-list li .image { - width: 50px; - height: 50px; + width: 10%; + display: block; overflow: hidden; float: left; + height: 40px; } .mediamanager-list li .image img { @@ -177,10 +213,39 @@ form.meta textarea.edit { .mediamanager-list li .info { overflow: hidden; float: left; - margin-left: 5px; - width: 20%; + width: 19%; + margin-left: 1%; +} + +.mediamanager-list li input[type=checkbox] { + position: absolute; + left: 100%; + margin-left: -20px; + margin-top: 3px; + display: none; +} + +.mediamanager-list li:hover input[type=checkbox], +.mediamanager-list li input[type=checkbox]:checked { + display: block; } .mediamanager-file-list li:hover { background-color: #dadada; } + +.mediamanager-table-50 { + padding: 0; + margin: 0 !important; +} + +.mediamanager-table-50 li { + width: 48%; + display: inline-block; + margin: 0; + margin-bottom: 10px; + padding: 2px; + vertical-align: top; + zoom: 1; + *display: inline; +} \ No newline at end of file -- cgit v1.2.3 From 532850ed047e0f35268eb1a5d4cf85c80f228dc5 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Thu, 23 Jun 2011 13:13:34 +0300 Subject: media getting metadata fix --- lib/tpl/default/detail.php | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) (limited to 'lib') diff --git a/lib/tpl/default/detail.php b/lib/tpl/default/detail.php index 4f42b116e..f61ede043 100644 --- a/lib/tpl/default/detail.php +++ b/lib/tpl/default/detail.php @@ -52,30 +52,28 @@ if (!defined('DOKU_INC')) die();
'.$lang['img_date'].':
'.dformat($t).'
'; - - $t = tpl_img_getTag('File.Name'); - if($t) print '
'.$lang['img_fname'].':
'.hsc($t).'
'; - - $t = tpl_img_getTag(array('Iptc.Byline','Exif.TIFFArtist','Exif.Artist','Iptc.Credit')); - if($t) print '
'.$lang['img_artist'].':
'.hsc($t).'
'; - - $t = tpl_img_getTag(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright')); - if($t) print '
'.$lang['img_copyr'].':
'.hsc($t).'
'; - - $t = tpl_img_getTag('File.Format'); - if($t) print '
'.$lang['img_format'].':
'.hsc($t).'
'; - - $t = tpl_img_getTag('File.NiceSize'); - if($t) print '
'.$lang['img_fsize'].':
'.hsc($t).'
'; - - $t = tpl_img_getTag('Simple.Camera'); - if($t) print '
'.$lang['img_camera'].':
'.hsc($t).'
'; - - $t = tpl_img_getTag(array('IPTC.Keywords','IPTC.Category','xmp.dc:subject')); - if($t) print '
'.$lang['img_keywords'].':
'.hsc($t).'
'; - + static $tags = null; + if(is_null($tags)){ + foreach (array('default','local') as $config_group) { + if (empty($config_cascade['mediameta'][$config_group])) continue; + foreach ($config_cascade['mediameta'][$config_group] as $config_file) { + if(@file_exists($config_file)){ + include($config_file); + } + } + } + } + foreach($tags as $key => $tag){ + $t = $tag[0]; + if (!is_array($t)) $t = array($tag[0]); + $value = tpl_img_getTag($t); + if ($value) { + echo '
'.$lang[$tag[1]].':
'; + if ($tag[2] == 'text') echo hsc($value); + if ($tag[2] == 'date') echo dformat($value); + echo '
'; + } + } ?>
-- cgit v1.2.3 From 88a71175e3de9e3ad8b20ca9eb710aaf773cb788 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Thu, 23 Jun 2011 14:16:15 +0300 Subject: media manager auth fix --- lib/exe/mediamanager.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php index d4ebc2d38..24dd5f911 100644 --- a/lib/exe/mediamanager.php +++ b/lib/exe/mediamanager.php @@ -35,7 +35,7 @@ $AUTH = auth_quickaclcheck("$NS:*"); // do not display the manager if user does not have read access - if($AUTH < AUTH_READ) { + if($AUTH < AUTH_READ && !$fullscreen) { header('HTTP/1.0 403 Forbidden'); die($lang['accessdenied']); } @@ -108,7 +108,7 @@ } // finished - start output - if (!($_REQUEST['do'] == 'media')) { + if (!$fullscreen) { header('Content-Type: text/html; charset=utf-8'); include(template('mediamanager.php')); } -- cgit v1.2.3 From 70c3cc9a17d47d8986cba0805d943c1a68af1740 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Fri, 24 Jun 2011 00:41:47 +0300 Subject: media action buttons --- lib/tpl/default/mediamanager.css | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'lib') diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index e7c78dbcf..7a85f3c8b 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -248,4 +248,8 @@ form.meta textarea.edit { vertical-align: top; zoom: 1; *display: inline; +} + +.mediamanager-preview { + margin-bottom: 5px; } \ No newline at end of file -- cgit v1.2.3 From 322111f0870d88a59b71258ce8410ae378441533 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Tue, 28 Jun 2011 15:52:02 +0300 Subject: css fix --- lib/tpl/default/mediamanager.css | 48 +++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 20 deletions(-) (limited to 'lib') diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index 7a85f3c8b..cceecf7fe 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -24,11 +24,6 @@ overflow-y: auto; } -.mediamanager .clearer { - font-size: 0; - line-height: 0; -} - .mediamanager .mediamanager-slider { width: auto; } @@ -154,10 +149,15 @@ form.meta textarea.edit { display: -moz-inline-stack; text-align: center; zoom: 1; - *display: inline; - _height: 130px; position: relative; } +* html .mediamanager-thumbs li { + display: inline; +} +*+html .mediamanager-thumbs li { + display: inline; + _height: 130px; +} .mediamanager-thumbs li .image { width: 100%; @@ -166,23 +166,23 @@ form.meta textarea.edit { overflow: hidden; } -.mediamanager-thumbs li .info { +.mediamanager-thumbs li .name, +.mediamanager-thumbs li .size, +.mediamanager-thumbs li .filesize, +.mediamanager-thumbs li .date { display: block; overflow: hidden; } .mediamanager-thumbs li input[type=checkbox] { - /*position: absolute; - left: 100%; - top: 100%; - margin-left: -20px; - margin-top: -20px;*/ display: none; + float: left; + margin: 3px; } .mediamanager-thumbs li:hover input[type=checkbox], .mediamanager-thumbs li input[type=checkbox]:checked { - display: inline; + display: block; } .mediamanager-list li { @@ -210,19 +210,25 @@ form.meta textarea.edit { width: 100%; } -.mediamanager-list li .info { +.mediamanager-list li .name, +.mediamanager-list li .size, +.mediamanager-list li .filesize +.mediamanager-list li .date { overflow: hidden; float: left; width: 19%; margin-left: 1%; } +.mediamanager-list li .date, +.mediamanager-thumbs li .date { + font-style: italic; +} + .mediamanager-list li input[type=checkbox] { - position: absolute; - left: 100%; - margin-left: -20px; - margin-top: 3px; display: none; + float: left; + margin: 3px; } .mediamanager-list li:hover input[type=checkbox], @@ -247,7 +253,9 @@ form.meta textarea.edit { padding: 2px; vertical-align: top; zoom: 1; - *display: inline; +} +* html .mediamanager-table-50 li { + display: inline; } .mediamanager-preview { -- cgit v1.2.3 From 3e98e6857f2c48127d4169d02e341d1013c00bac Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Wed, 29 Jun 2011 16:59:18 +0300 Subject: media getting metadata fix --- lib/tpl/default/detail.php | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) (limited to 'lib') diff --git a/lib/tpl/default/detail.php b/lib/tpl/default/detail.php index f61ede043..f7bb37a25 100644 --- a/lib/tpl/default/detail.php +++ b/lib/tpl/default/detail.php @@ -52,25 +52,20 @@ if (!defined('DOKU_INC')) die();
$tag){ - $t = $tag[0]; - if (!is_array($t)) $t = array($tag[0]); + + foreach($fields as $key => $tag){ + $t = array(); + if (!empty($tag[0])) $t = array($tag[0]); + if(is_array($tag[3])) $t = array_merge($t,$tag[3]); $value = tpl_img_getTag($t); if ($value) { echo '
'.$lang[$tag[1]].':
'; - if ($tag[2] == 'text') echo hsc($value); if ($tag[2] == 'date') echo dformat($value); + else echo hsc($value); echo '
'; } } -- cgit v1.2.3 From 9c1bd4bc9aa4b9ac3b9981543a14508091cd639a Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Thu, 30 Jun 2011 19:44:31 +0300 Subject: restoring old media revisions --- lib/exe/mediamanager.php | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'lib') diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php index 24dd5f911..46257a9a7 100644 --- a/lib/exe/mediamanager.php +++ b/lib/exe/mediamanager.php @@ -84,6 +84,12 @@ $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']); } + if ($_REQUEST['rev']) $REV = (int) $_REQUEST['rev']; + + if($_REQUEST['mediado'] == 'restore'){ + $JUMPTO = media_restore($_REQUEST['image'], $REV, $AUTH); + } + // handle deletion if($DEL) { $res = 0; -- cgit v1.2.3 From 23846a98488bec2aaade6d983b4c0b0db13af80c Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Sun, 3 Jul 2011 19:00:54 +0300 Subject: ajax mediamanager --- lib/exe/ajax.php | 25 ++++++++++- lib/scripts/media.js | 90 +++++++++++++++++++++++++++++++++++++++- lib/tpl/default/mediamanager.css | 23 +--------- 3 files changed, 114 insertions(+), 24 deletions(-) (limited to 'lib') diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php index 1056a05f8..16efd9ac7 100644 --- a/lib/exe/ajax.php +++ b/lib/exe/ajax.php @@ -210,7 +210,30 @@ function ajax_medialist(){ global $NS; $NS = $_POST['ns']; - tpl_mediaContent(true); + if ($_POST['do'] == 'media') { + tpl_fileList(true); + } else { + tpl_mediaContent(true); + } +} + +/** + * Return the content of the right column + * (image details) for the Mediamanager + * + * @author Kate Arzamastseva + */ +function ajax_mediadetails(){ + global $conf; + global $NS; + + $NS = $_POST['ns']; + $image = $_POST['image']; + if (isset($_POST['full'])) { + tpl_fileDetails($image, false); + } else { + tpl_fileDetails($image, false, true); + } } /** diff --git a/lib/scripts/media.js b/lib/scripts/media.js index ebbee5a78..e03d1cf7b 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -328,7 +328,17 @@ jQuery('div.success, div.info, div.error, div.notify').remove(); - content = $('#media__content'); + if (document.getElementById('media__content')) { + content = $('#media__content'); + } else { + content = $('#mediamanager__files'); + if (link.hasClass('idx_dir')) { + change_tab($('.files'), '#mediamanager__tabs_files'); + $('#mediamanager__layout_detail').empty(); + } else { + change_tab(link, '#mediamanager__tabs_files'); + } + } content.html('...'); // fetch the subtree @@ -345,6 +355,77 @@ }; + /** + * Changes selected tab + * + * @author Kate Arzamastseva + */ + change_tab = function (tab, tab_menu_id) { + $(tab_menu_id + ' a').each(function (i) { + $(this).removeClass('selected'); + }); + tab.addClass('selected'); + }; + + /** + * Changes view of media files list + * + * @author Kate Arzamastseva + */ + list_view = function (event) { + var link, content; + link = $(this); + + event.preventDefault(); + + content = $('#mediamanager__file_list'); + if (link.hasClass('mediamanager-link-thumbnails')) { + content.removeClass('mediamanager-list'); + content.addClass('mediamanager-thumbs'); + } else if (link.hasClass('mediamanager-link-list')) { + content.removeClass('mediamanager-thumbs'); + content.addClass('mediamanager-list'); + } + }; + + /** + * Lists the content of the right column (image details) using AJAX + * + * @author Kate Arzamastseva + */ + details = function (event) { + var link, content, call, full; + link = $(this); + + event.preventDefault(); + + jQuery('div.success, div.info, div.error, div.notify').remove(); + + full=''; + if (document.getElementById('mediamanager__details')) { + content = $('#mediamanager__details'); + } else { + content = $('#mediamanager__layout_detail'); + full = '&full=true'; + } + + if (link.hasClass('name')) { + change_tab($('.view'), '#mediamanager__tabs_details'); + } else { + change_tab(link, '#mediamanager__tabs_details'); + } + content.html('...'); + + $.post( + DOKU_BASE + 'lib/exe/ajax.php', + link[0].search.substr(1)+'&call=mediadetails'+full, + function (data) { + content.html(data); + }, + 'html' + ); + }; + prepare_content = function (content) { // hide syntax example content.find('div.example:visible').hide(); @@ -748,5 +829,12 @@ $('#media__tree').delegate('img', 'click', toggle) .delegate('a', 'click', list); + + $('#mediamanager__tabs_files').delegate('a', 'click', list); + + $('#mediamanager__files').delegate('#mediamanager__tabs_list a', 'click', list_view) + .delegate('#mediamanager__file_list a', 'click', details); + + $('#mediamanager__layout_detail').delegate('#mediamanager__tabs_details a', 'click', details); }); }(jQuery)); diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index cceecf7fe..88e00d8fc 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -1,24 +1,3 @@ -/* --- Tree formatting --- */ - -#media-menu img { - float: left; - padding: 0.5em 0.3em 0 0; -} - -#media-menu ul { - list-style-type: none; - list-style-image: none; - margin-left: 1.5em; -} - -#media-menu li { - clear: left; - list-style-type: none; - list-style-image: none; -} - -/* -------------- */ - .mediamanager { width: 100%; overflow-y: auto; @@ -212,7 +191,7 @@ form.meta textarea.edit { .mediamanager-list li .name, .mediamanager-list li .size, -.mediamanager-list li .filesize +.mediamanager-list li .filesize, .mediamanager-list li .date { overflow: hidden; float: left; -- cgit v1.2.3 From ed69a2ae06c0707fdd5634e18d569c25f0cda6d5 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Sun, 3 Jul 2011 23:56:26 +0300 Subject: ajax mediamanager fix --- lib/exe/ajax.php | 8 ++----- lib/scripts/media.js | 68 ++++++++++++++++++++++++++-------------------------- 2 files changed, 36 insertions(+), 40 deletions(-) (limited to 'lib') diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php index 16efd9ac7..8ff0f8eda 100644 --- a/lib/exe/ajax.php +++ b/lib/exe/ajax.php @@ -211,7 +211,7 @@ function ajax_medialist(){ $NS = $_POST['ns']; if ($_POST['do'] == 'media') { - tpl_fileList(true); + tpl_fileList(); } else { tpl_mediaContent(true); } @@ -229,11 +229,7 @@ function ajax_mediadetails(){ $NS = $_POST['ns']; $image = $_POST['image']; - if (isset($_POST['full'])) { - tpl_fileDetails($image, false); - } else { - tpl_fileDetails($image, false, true); - } + tpl_fileDetails($image, false); } /** diff --git a/lib/scripts/media.js b/lib/scripts/media.js index e03d1cf7b..a7574b804 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -11,7 +11,7 @@ * @author Pierre Spring */ (function ($) { - var toggle, list, prepare_content, insert, confirmattach, attachoptions, initpopup, updatehide, setalign, setsize, inSet, outSet, media_manager, hasFlash; + var toggle, list, prepare_content, insert, confirmattach, attachoptions, initpopup, updatehide, setalign, setsize, inSet, outSet, media_manager, hasFlash, form_params, list_view, details; var media_manager = { keepopen: false, @@ -321,7 +321,7 @@ * @author Pierre Spring */ list = function (event) { - var link, content; + var link, content, params; link = $(this); event.preventDefault(); @@ -329,22 +329,33 @@ jQuery('div.success, div.info, div.error, div.notify').remove(); if (document.getElementById('media__content')) { + //popup content = $('#media__content'); + } else { - content = $('#mediamanager__files'); + //fullscreen media manager + content = $('#mediamanager__layout_list'); + if (link.hasClass('idx_dir')) { - change_tab($('.files'), '#mediamanager__tabs_files'); + //changing namespace $('#mediamanager__layout_detail').empty(); - } else { - change_tab(link, '#mediamanager__tabs_files'); } } - content.html('...'); + + params = ''; + + if (link[0].search) { + params = link[0].search.substr(1)+'&call=medialist'; + } else if (link[0].action) { + params = form_params(link)+'&call=medialist'; + } + + $('.scroll-container', content).html('...'); // fetch the subtree $.post( DOKU_BASE + 'lib/exe/ajax.php', - link[0].search.substr(1)+'&call=medialist', + params, function (data) { content.html(data); prepare_content(content); @@ -356,15 +367,16 @@ }; /** - * Changes selected tab + * Returns form parameters * * @author Kate Arzamastseva */ - change_tab = function (tab, tab_menu_id) { - $(tab_menu_id + ' a').each(function (i) { - $(this).removeClass('selected'); - }); - tab.addClass('selected'); + form_params = function (form) { + var elements = form.serialize(); + var action = ''; + var i = form[0].action.indexOf('?'); + if (i >= 0) action = form[0].action.substr(i+1); + return elements+'&'+action; }; /** @@ -394,31 +406,19 @@ * @author Kate Arzamastseva */ details = function (event) { - var link, content, call, full; + var link, content; link = $(this); event.preventDefault(); jQuery('div.success, div.info, div.error, div.notify').remove(); - full=''; - if (document.getElementById('mediamanager__details')) { - content = $('#mediamanager__details'); - } else { - content = $('#mediamanager__layout_detail'); - full = '&full=true'; - } - - if (link.hasClass('name')) { - change_tab($('.view'), '#mediamanager__tabs_details'); - } else { - change_tab(link, '#mediamanager__tabs_details'); - } - content.html('...'); + content = $('#mediamanager__layout_detail'); + $('.scroll-container', content).html('...'); $.post( DOKU_BASE + 'lib/exe/ajax.php', - link[0].search.substr(1)+'&call=mediadetails'+full, + link[0].search.substr(1)+'&call=mediadetails', function (data) { content.html(data); }, @@ -830,11 +830,11 @@ $('#media__tree').delegate('img', 'click', toggle) .delegate('a', 'click', list); - $('#mediamanager__tabs_files').delegate('a', 'click', list); - - $('#mediamanager__files').delegate('#mediamanager__tabs_list a', 'click', list_view) + $('#mediamanager__layout_list').delegate('#mediamanager__tabs_files a', 'click', list) + .delegate('#mediamanager__tabs_list a', 'click', list_view) .delegate('#mediamanager__file_list a', 'click', details); - $('#mediamanager__layout_detail').delegate('#mediamanager__tabs_details a', 'click', details); + $('#mediamanager__layout_detail').delegate('#mediamanager__tabs_details a', 'click', details) + .delegate('#mediamanager__btn_update', 'submit', list); }); }(jQuery)); -- cgit v1.2.3 From 7d7ab775ac0252d50835987b276a95b790cd1434 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Mon, 4 Jul 2011 22:35:44 +0300 Subject: mediamanager ajax forms --- lib/exe/ajax.php | 15 ++++++++----- lib/exe/mediamanager.php | 4 ++-- lib/scripts/media.js | 55 +++++++++++++++++++++++++++++++++--------------- 3 files changed, 50 insertions(+), 24 deletions(-) (limited to 'lib') diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php index 8ff0f8eda..59953ddc3 100644 --- a/lib/exe/ajax.php +++ b/lib/exe/ajax.php @@ -224,12 +224,17 @@ function ajax_medialist(){ * @author Kate Arzamastseva */ function ajax_mediadetails(){ - global $conf; - global $NS; + global $DEL, $NS, $IMG, $AUTH, $JUMPTO, $REV, $lang, $fullscreen; + $fullscreen = true; + require_once(DOKU_INC.'lib/exe/mediamanager.php'); - $NS = $_POST['ns']; - $image = $_POST['image']; - tpl_fileDetails($image, false); + if ($_REQUEST['image']) $image = cleanID($_REQUEST['image']); + if (isset($IMG)) $image = $IMG; + if (isset($JUMPTO)) $image = $JUMPTO; + if (isset($REV) && !$JUMPTO) $rev = $REV; + + html_msgarea(); + tpl_fileDetails($image, $rev); } /** diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php index 46257a9a7..77eb2facb 100644 --- a/lib/exe/mediamanager.php +++ b/lib/exe/mediamanager.php @@ -80,7 +80,7 @@ $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']); } - if($IMG && @array_key_exists('save', $_REQUEST['mediado'])){ + if($IMG && $_REQUEST['mediado'] == 'save') { $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']); } @@ -98,7 +98,7 @@ } if ($res & DOKU_MEDIA_DELETED) { $msg = sprintf($lang['deletesucc'], noNS($DEL)); - if ($res & DOKU_MEDIA_EMPTY_NS) { + if ($res & DOKU_MEDIA_EMPTY_NS && !$fullscreen) { // current namespace was removed. redirecting to root ns passing msg along send_redirect(DOKU_URL.'lib/exe/mediamanager.php?msg1='. rawurlencode($msg).'&edid='.$_REQUEST['edid']); diff --git a/lib/scripts/media.js b/lib/scripts/media.js index a7574b804..245519cbc 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -11,7 +11,7 @@ * @author Pierre Spring */ (function ($) { - var toggle, list, prepare_content, insert, confirmattach, attachoptions, initpopup, updatehide, setalign, setsize, inSet, outSet, media_manager, hasFlash, form_params, list_view, details; + var toggle, list, prepare_content, insert, confirmattach, attachoptions, initpopup, updatehide, setalign, setsize, inSet, outSet, media_manager, hasFlash, form_params, list_view, details, update_content; var media_manager = { keepopen: false, @@ -331,6 +331,7 @@ if (document.getElementById('media__content')) { //popup content = $('#media__content'); + content.html('...'); } else { //fullscreen media manager @@ -340,6 +341,8 @@ //changing namespace $('#mediamanager__layout_detail').empty(); } + + $('.scroll-container', content).html('...'); } params = ''; @@ -350,19 +353,8 @@ params = form_params(link)+'&call=medialist'; } - $('.scroll-container', content).html('...'); - // fetch the subtree - $.post( - DOKU_BASE + 'lib/exe/ajax.php', - params, - function (data) { - content.html(data); - prepare_content(content); - updatehide(); - }, - 'html' - ); + update_content(content, params); }; @@ -406,7 +398,7 @@ * @author Kate Arzamastseva */ details = function (event) { - var link, content; + var link, content, params, update_list; link = $(this); event.preventDefault(); @@ -416,9 +408,32 @@ content = $('#mediamanager__layout_detail'); $('.scroll-container', content).html('...'); + params = ''; + + if (link[0].search) { + params = link[0].search.substr(1)+'&call=mediadetails'; + } else { + params = form_params(link)+'&call=mediadetails'; + } + + update_content(content, params); + + update_list = (link[0].id == 'mediamanager__btn_delete' || link[0].id == 'mediamanager__btn_restore'); + if (update_list) { + var link1, content1, params1; + link1 = $('a.files'); + params1 = link1[0].search.substr(1)+'&call=medialist'; + content1 = $('#mediamanager__layout_list'); + $('.scroll-container', content1).html('...'); + + update_content(content1, params1); + } + }; + + update_content = function (content, params) { $.post( DOKU_BASE + 'lib/exe/ajax.php', - link[0].search.substr(1)+'&call=mediadetails', + params, function (data) { content.html(data); }, @@ -832,9 +847,15 @@ $('#mediamanager__layout_list').delegate('#mediamanager__tabs_files a', 'click', list) .delegate('#mediamanager__tabs_list a', 'click', list_view) - .delegate('#mediamanager__file_list a', 'click', details); + .delegate('#mediamanager__file_list a', 'click', details) + .delegate('#dw__mediasearch', 'submit', list); $('#mediamanager__layout_detail').delegate('#mediamanager__tabs_details a', 'click', details) - .delegate('#mediamanager__btn_update', 'submit', list); + .delegate('#mediamanager__btn_update', 'submit', list) + .delegate('#page__revisions', 'submit', details) + .delegate('#page__revisions a', 'click', details) + .delegate('#mediamanager__save_meta', 'submit', details) + .delegate('#mediamanager__btn_delete', 'submit', details) + .delegate('#mediamanager__btn_restore', 'submit', details); }); }(jQuery)); -- cgit v1.2.3 From 6183fb05112cd318d9a6885d9405cff9917ee82f Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Fri, 8 Jul 2011 13:54:15 +0300 Subject: mediamanager fix --- lib/exe/mediamanager.php | 2 +- lib/scripts/media.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php index 77eb2facb..939b5a053 100644 --- a/lib/exe/mediamanager.php +++ b/lib/exe/mediamanager.php @@ -80,7 +80,7 @@ $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']); } - if($IMG && $_REQUEST['mediado'] == 'save') { + if($IMG && ($_REQUEST['mediado'] == 'save' || @array_key_exists('save', $_REQUEST['mediado']))) { $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']); } diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 245519cbc..4eb1e7b63 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -405,6 +405,9 @@ jQuery('div.success, div.info, div.error, div.notify').remove(); + if (link[0].id == 'mediamanager__btn_delete' && !confirm(LANG['del_confirm'])) return false; + if (link[0].id == 'mediamanager__btn_restore' && !confirm(LANG['restore_confirm'])) return false; + content = $('#mediamanager__layout_detail'); $('.scroll-container', content).html('...'); -- cgit v1.2.3 From f6f771ca288974ca7d259cf35f0d416fef44ef6e Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Sat, 9 Jul 2011 21:04:18 +0300 Subject: media.js fix --- lib/scripts/media.js | 102 +++++++++++++++++++++++++-------------------------- 1 file changed, 51 insertions(+), 51 deletions(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 4eb1e7b63..8c68fa569 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -321,8 +321,8 @@ * @author Pierre Spring */ list = function (event) { - var link, content, params; - link = $(this); + var $link, $content, params; + $link = jQuery(this); event.preventDefault(); @@ -330,31 +330,31 @@ if (document.getElementById('media__content')) { //popup - content = $('#media__content'); - content.html('...'); + $content = jQuery('#media__content'); + $content.html('...'); } else { //fullscreen media manager - content = $('#mediamanager__layout_list'); + $content = jQuery('#mediamanager__layout_list'); - if (link.hasClass('idx_dir')) { + if ($link.hasClass('idx_dir')) { //changing namespace - $('#mediamanager__layout_detail').empty(); + jQuery('#mediamanager__layout_detail').empty(); } - $('.scroll-container', content).html('...'); + jQuery('.scroll-container', $content).html('...'); } params = ''; - if (link[0].search) { - params = link[0].search.substr(1)+'&call=medialist'; - } else if (link[0].action) { - params = form_params(link)+'&call=medialist'; + if ($link[0].search) { + params = $link[0].search.substr(1)+'&call=medialist'; + } else if ($link[0].action) { + params = form_params($link)+'&call=medialist'; } // fetch the subtree - update_content(content, params); + update_content($content, params); }; @@ -363,11 +363,11 @@ * * @author Kate Arzamastseva */ - form_params = function (form) { - var elements = form.serialize(); + form_params = function ($form) { + var elements = $form.serialize(); var action = ''; - var i = form[0].action.indexOf('?'); - if (i >= 0) action = form[0].action.substr(i+1); + var i = $form[0].action.indexOf('?'); + if (i >= 0) action = $form[0].action.substr(i+1); return elements+'&'+action; }; @@ -377,18 +377,18 @@ * @author Kate Arzamastseva */ list_view = function (event) { - var link, content; - link = $(this); + var $link, $content; + $link = jQuery(this); event.preventDefault(); - content = $('#mediamanager__file_list'); - if (link.hasClass('mediamanager-link-thumbnails')) { - content.removeClass('mediamanager-list'); - content.addClass('mediamanager-thumbs'); - } else if (link.hasClass('mediamanager-link-list')) { - content.removeClass('mediamanager-thumbs'); - content.addClass('mediamanager-list'); + $content = jQuery('#mediamanager__file_list'); + if ($link.hasClass('mediamanager-link-thumbnails')) { + $content.removeClass('mediamanager-list'); + $content.addClass('mediamanager-thumbs'); + } else if ($link.hasClass('mediamanager-link-list')) { + $content.removeClass('mediamanager-thumbs'); + $content.addClass('mediamanager-list'); } }; @@ -398,43 +398,43 @@ * @author Kate Arzamastseva */ details = function (event) { - var link, content, params, update_list; - link = $(this); + var $link, $content, params, update_list; + $link = jQuery(this); event.preventDefault(); jQuery('div.success, div.info, div.error, div.notify').remove(); - if (link[0].id == 'mediamanager__btn_delete' && !confirm(LANG['del_confirm'])) return false; - if (link[0].id == 'mediamanager__btn_restore' && !confirm(LANG['restore_confirm'])) return false; + if ($link[0].id == 'mediamanager__btn_delete' && !confirm(LANG['del_confirm'])) return false; + if ($link[0].id == 'mediamanager__btn_restore' && !confirm(LANG['restore_confirm'])) return false; - content = $('#mediamanager__layout_detail'); - $('.scroll-container', content).html('...'); + $content = $('#mediamanager__layout_detail'); + jQuery('.scroll-container', $content).html('...'); params = ''; - if (link[0].search) { - params = link[0].search.substr(1)+'&call=mediadetails'; + if ($link[0].search) { + params = $link[0].search.substr(1)+'&call=mediadetails'; } else { - params = form_params(link)+'&call=mediadetails'; + params = form_params($link)+'&call=mediadetails'; } - update_content(content, params); + update_content($content, params); - update_list = (link[0].id == 'mediamanager__btn_delete' || link[0].id == 'mediamanager__btn_restore'); + update_list = ($link[0].id == 'mediamanager__btn_delete' || $link[0].id == 'mediamanager__btn_restore'); if (update_list) { - var link1, content1, params1; - link1 = $('a.files'); - params1 = link1[0].search.substr(1)+'&call=medialist'; - content1 = $('#mediamanager__layout_list'); - $('.scroll-container', content1).html('...'); + var $link1, $content1, params1; + $link1 = jQuery('a.files'); + params1 = $link1[0].search.substr(1)+'&call=medialist'; + $content1 = jQuery('#mediamanager__layout_list'); + jQuery('.scroll-container', $content1).html('...'); - update_content(content1, params1); + update_content($content1, params1); } }; - update_content = function (content, params) { - $.post( + update_content = function ($content, params) { + jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', params, function (data) { @@ -831,29 +831,29 @@ }; $(function () { - var content = $('#media__content'); - prepare_content(content); + var $content = jQuery('#media__content'); + prepare_content($content); attachoptions(); initpopup(); // add the action to autofill the "upload as" field - content.delegate('#upload__file', 'change', suggest) + $content.delegate('#upload__file', 'change', suggest) // Attach the image selector action to all links .delegate('a.select', 'click', select) // Attach deletion confirmation dialog to the delete buttons .delegate('#media__content a.btn_media_delete', 'click', confirmattach); - $('#media__tree').delegate('img', 'click', toggle) + jQuery('#media__tree').delegate('img', 'click', toggle) .delegate('a', 'click', list); - $('#mediamanager__layout_list').delegate('#mediamanager__tabs_files a', 'click', list) + jQuery('#mediamanager__layout_list').delegate('#mediamanager__tabs_files a', 'click', list) .delegate('#mediamanager__tabs_list a', 'click', list_view) .delegate('#mediamanager__file_list a', 'click', details) .delegate('#dw__mediasearch', 'submit', list); - $('#mediamanager__layout_detail').delegate('#mediamanager__tabs_details a', 'click', details) + jQuery('#mediamanager__layout_detail').delegate('#mediamanager__tabs_details a', 'click', details) .delegate('#mediamanager__btn_update', 'submit', list) .delegate('#page__revisions', 'submit', details) .delegate('#page__revisions a', 'click', details) -- cgit v1.2.3 From de11c42f80968ac41dc4164829845c1e5dae25c2 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Sat, 9 Jul 2011 23:21:50 +0300 Subject: media-manager fixes --- lib/scripts/media.js | 4 ++++ lib/tpl/default/mediamanager.css | 5 +++++ 2 files changed, 9 insertions(+) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 8c68fa569..f261bd2d5 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -340,6 +340,10 @@ if ($link.hasClass('idx_dir')) { //changing namespace jQuery('#mediamanager__layout_detail').empty(); + jQuery('#media__tree .selected').each(function(){ + $(this).removeClass('selected'); + }); + $link.addClass('selected'); } jQuery('.scroll-container', $content).html('...'); diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index 88e00d8fc..eea62ea46 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -232,6 +232,7 @@ form.meta textarea.edit { padding: 2px; vertical-align: top; zoom: 1; + color: black !important; } * html .mediamanager-table-50 li { display: inline; @@ -239,4 +240,8 @@ form.meta textarea.edit { .mediamanager-preview { margin-bottom: 5px; +} + +.idx .selected { + color: red !important; } \ No newline at end of file -- cgit v1.2.3 From e1dc10a4aab705171d34c7bde642ed77032c95c7 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Sun, 10 Jul 2011 15:36:01 +0300 Subject: media.js fixes --- lib/scripts/media.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 3f263f42a..36c06a3aa 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -253,7 +253,7 @@ var dw_mediamanager = { //changing namespace jQuery('#mediamanager__layout_detail').empty(); jQuery('#media__tree .selected').each(function(){ - $(this).removeClass('selected'); + jQuery(this).removeClass('selected'); }); $link.addClass('selected'); } @@ -272,7 +272,7 @@ var dw_mediamanager = { // fetch the subtree dw_mediamanager.update_content($content, params); - }; + }, /** * Returns form parameters @@ -324,7 +324,7 @@ var dw_mediamanager = { if ($link[0].id == 'mediamanager__btn_delete' && !confirm(LANG['del_confirm'])) return false; if ($link[0].id == 'mediamanager__btn_restore' && !confirm(LANG['restore_confirm'])) return false; - $content = $('#mediamanager__layout_detail'); + $content = jQuery('#mediamanager__layout_detail'); jQuery('.scroll-container', $content).html('...'); params = ''; @@ -354,7 +354,7 @@ var dw_mediamanager = { DOKU_BASE + 'lib/exe/ajax.php', params, function (data) { - content.html(data); + $content.html(data); dw_mediamanager.prepare_content($content); dw_mediamanager.updatehide(); }, @@ -604,7 +604,7 @@ var dw_mediamanager = { var allowed = bind(dw_mediamanager.allowedOpt, opt); // Current value - if (dw_mediamanager[opt] !== false && allowed(dw_mediamanager[opt]) { + if (dw_mediamanager[opt] !== false && allowed(dw_mediamanager[opt])) { return dw_mediamanager[opt]; } -- cgit v1.2.3 From 4928b6eb7137cb1e8727ca7a7fc99db614b0df88 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Sun, 10 Jul 2011 16:38:04 +0300 Subject: mediamanager resizable --- lib/scripts/media.js | 33 +++++++++++++++++++++++++++++++++ lib/tpl/default/mediamanager.css | 19 +++++++++++-------- 2 files changed, 44 insertions(+), 8 deletions(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 36c06a3aa..af5346cbe 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -354,14 +354,43 @@ var dw_mediamanager = { DOKU_BASE + 'lib/exe/ajax.php', params, function (data) { + jQuery('.ui-resizable').each(function(){ + jQuery(this).resizable('destroy'); + }); + $content.html(data); dw_mediamanager.prepare_content($content); dw_mediamanager.updatehide(); + dw_mediamanager.update_resizable(0); }, 'html' ); }, + update_resizable: function (count_width) { + jQuery(".layout").resizable({ handles: 'e' }); + jQuery(".layout").bind("resize", function(event, ui) { + var w = 0; + jQuery(".layout").each(function() { + w += jQuery(this).width(); + }); + jQuery('#id-mediamanager-layout').width(w+30); + }); + + var w = 0; + jQuery(".layout").each(function() { + if (count_width) jQuery(this).width(jQuery(this).width()); + w += jQuery(this).width(); + }); + jQuery('#id-mediamanager-layout').width(w+30); + + var windowHeight = jQuery(window).height(); + var height = windowHeight - 300; + jQuery('.scroll-container').each(function (i) { + jQuery(this).height(height); + }); + }, + prepare_content: function ($content) { // hide syntax example $content.find('div.example:visible').hide(); @@ -642,4 +671,8 @@ function hasFlash(version){ return ver >= version; } +jQuery(document).ready(function() { + dw_mediamanager.update_resizable(1); +}); + jQuery(dw_mediamanager.init); diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index eea62ea46..55ac39fd2 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -1,20 +1,19 @@ .mediamanager { width: 100%; - overflow-y: auto; + overflow-x: auto; } .mediamanager .mediamanager-slider { - width: auto; + } .mediamanager .mediamanager-slider .layout { - float: left; margin-left: 5px; margin-right: 5px; + float: left; } .mediamanager .scroll-container { - /*height: 0px;*/ overflow-y: auto; overflow-x: hidden; padding: 0; @@ -32,17 +31,17 @@ .mediamanager-link-thumbnails { background: url('../../images/icon-thumb.png') 0 -4px no-repeat; padding-left: 30px; - display: block; - float: left; + display: inline-block; width: 0; overflow: hidden; + + margin-left: 10px; } .mediamanager-link-list { background: url('../../images/icon-list.png') 0 -4px no-repeat; padding-left: 30px; - display: block; - float: left; + display: inline-block; width: 0; overflow: hidden; } @@ -242,6 +241,10 @@ form.meta textarea.edit { margin-bottom: 5px; } +.ui-resizable-e:hover { + background-color: #dadada; +} + .idx .selected { color: red !important; } \ No newline at end of file -- cgit v1.2.3 From dd9ba38e965cfc3c06fbb80fed65556dbfbfda1c Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Thu, 14 Jul 2011 11:36:48 +0300 Subject: mediamanager tabs, upload form fix --- lib/scripts/media.js | 6 +++++- lib/tpl/default/mediamanager.css | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index af5346cbe..de3d03dfe 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -64,7 +64,8 @@ var dw_mediamanager = { jQuery('#mediamanager__layout_list').delegate('#mediamanager__tabs_files a', 'click', dw_mediamanager.list) .delegate('#mediamanager__tabs_list a', 'click', dw_mediamanager.list_view) .delegate('#mediamanager__file_list a', 'click', dw_mediamanager.details) - .delegate('#dw__mediasearch', 'submit', dw_mediamanager.list); + .delegate('#dw__mediasearch', 'submit', dw_mediamanager.list) + .delegate('#upload__file', 'change', dw_mediamanager.suggest); jQuery('#mediamanager__layout_detail').delegate('#mediamanager__tabs_details a', 'click', dw_mediamanager.details) .delegate('#mediamanager__btn_update', 'submit', dw_mediamanager.list) @@ -216,6 +217,9 @@ var dw_mediamanager = { $file = jQuery(this); $name = jQuery('#upload__name'); + + if ($name.val() != '') return; + if(!$file.length || !$name.length) { return; } diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index 55ac39fd2..e87473687 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -246,5 +246,10 @@ form.meta textarea.edit { } .idx .selected { - color: red !important; + background-color: __highlight__; + font-weight: bold; +} + +.mediamanager div.upload { + padding-bottom: 0.5em; } \ No newline at end of file -- cgit v1.2.3 From 23786fd7ff0ff9c41ba627bc43ba6a45d3b779cc Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Thu, 14 Jul 2011 23:37:38 +0300 Subject: mediamanager icons --- lib/scripts/media.js | 6 +++++- lib/tpl/default/mediamanager.css | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index de3d03dfe..62cc1e7bb 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -329,7 +329,11 @@ var dw_mediamanager = { if ($link[0].id == 'mediamanager__btn_restore' && !confirm(LANG['restore_confirm'])) return false; $content = jQuery('#mediamanager__layout_detail'); - jQuery('.scroll-container', $content).html('...'); + if (jQuery('.scroll-container', $content).length) { + jQuery('.scroll-container', $content).html('...'); + } else { + jQuery($content).html('...'); + } params = ''; diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index e87473687..df2b961b6 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -134,7 +134,7 @@ form.meta textarea.edit { } *+html .mediamanager-thumbs li { display: inline; - _height: 130px; + height: 130px; } .mediamanager-thumbs li .image { @@ -144,12 +144,20 @@ form.meta textarea.edit { overflow: hidden; } +.mediamanager-thumbs li .image div { + vertical-align: middle; + display: table-cell; + width: 100px; + height: 90px; +} + .mediamanager-thumbs li .name, .mediamanager-thumbs li .size, .mediamanager-thumbs li .filesize, .mediamanager-thumbs li .date { display: block; overflow: hidden; + white-space: nowrap; } .mediamanager-thumbs li input[type=checkbox] { @@ -186,6 +194,7 @@ form.meta textarea.edit { .mediamanager-list li .image img { width: 100%; + vertical-align: middle; } .mediamanager-list li .name, @@ -196,11 +205,26 @@ form.meta textarea.edit { float: left; width: 19%; margin-left: 1%; + white-space: nowrap; } .mediamanager-list li .date, .mediamanager-thumbs li .date { font-style: italic; + white-space: normal; +} + +.mediamanager-list .icon { + max-width: 16px; + max-height: 16px; +} + +.mediamanager-list li .image div { + vertical-align: middle; + text-align: center; + display: table-cell; + width: 100px; + height: 40px; } .mediamanager-list li input[type=checkbox] { @@ -231,8 +255,9 @@ form.meta textarea.edit { padding: 2px; vertical-align: top; zoom: 1; - color: black !important; + color: black; } + * html .mediamanager-table-50 li { display: inline; } @@ -252,4 +277,8 @@ form.meta textarea.edit { .mediamanager div.upload { padding-bottom: 0.5em; -} \ No newline at end of file +} + +.background-container .icon { + margin-right: 5px; +} -- cgit v1.2.3 From e136d6cc09a2c32050ecc37d7b0deebd0979c15d Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Sat, 16 Jul 2011 23:48:48 +0300 Subject: mediamanager image diff --- lib/scripts/media.js | 29 +++++++++++++++++++++++++++++ lib/tpl/default/mediamanager.css | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 777eb4825..8500166dc 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -369,6 +369,9 @@ var dw_mediamanager = { dw_mediamanager.prepare_content($content); dw_mediamanager.updatehide(); dw_mediamanager.update_resizable(0); + dw_mediamanager.opacity_slider(); + dw_mediamanager.portions_slider(); + }, 'html' ); @@ -398,6 +401,30 @@ var dw_mediamanager = { }); }, + opacity_slider: function () { + var $slider = jQuery( "#mediamanager__opacity_slider" ); + $slider.slider(); + $slider.slider("option", "min", 0); + $slider.slider("option", "max", 0.999); + $slider.slider("option", "step", 0.001); + $slider.slider("option", "value", 0.5); + $slider.bind("slide", function(event, ui) { + jQuery('#mediamanager__diff_opacity_image2').css({ opacity: $slider.slider("option", "value")}); + }); + }, + + portions_slider: function () { + var $slider = jQuery( "#mediamanager__portions_slider" ); + $slider.slider(); + $slider.slider("option", "min", 0); + $slider.slider("option", "max", 100); + $slider.slider("option", "step", 1); + $slider.slider("option", "value", 50); + $slider.bind("slide", function(event, ui) { + jQuery('#mediamanager__diff_portions_image2').css({ width: $slider.slider("option", "value")+'%'}); + }); + }, + prepare_content: function ($content) { // hide syntax example $content.find('div.example:visible').hide(); @@ -680,6 +707,8 @@ function hasFlash(version){ jQuery(document).ready(function() { dw_mediamanager.update_resizable(1); + dw_mediamanager.opacity_slider(); + dw_mediamanager.portions_slider(); }); jQuery(dw_mediamanager.init); diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index df2b961b6..6c4b64d3e 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -263,6 +263,7 @@ form.meta textarea.edit { } .mediamanager-preview { + text-align: center; margin-bottom: 5px; } @@ -282,3 +283,35 @@ form.meta textarea.edit { .background-container .icon { margin-right: 5px; } + +.mediamanager dl.img_tags dd.highlighted{ + background-color: __highlight__; +} + +#mediamanager__diff_opacity_image1, +#mediamanager__diff_portions_image1 { + width: 99%; + position: relative; +} + +#mediamanager__diff_opacity_image2 { + width: 100%; + position: absolute; + top: 0; + left: 0; + opacity: 0.5; +} + +#mediamanager__diff_portions_image2 { + width: 50%; + position: absolute; + top: 0; + left: 0; + border-right: 1px solid red; +} + +#mediamanager__opacity_slider, +#mediamanager__portions_slider { + margin: 10px; + width: 99%; +} -- cgit v1.2.3 From fa8e5c7713944541c907aea2b81c6a44382a15f0 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Sun, 17 Jul 2011 18:42:43 +0300 Subject: mediamanager html, css reworking --- lib/scripts/media.js | 6 +- lib/tpl/default/mediamanager.css | 184 ++++++++++++++++++++++----------------- 2 files changed, 109 insertions(+), 81 deletions(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 8500166dc..c5e6afc9b 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -302,10 +302,12 @@ var dw_mediamanager = { event.preventDefault(); $content = jQuery('#mediamanager__file_list'); - if ($link.hasClass('mediamanager-link-thumbnails')) { + + if ($link[0].id == 'mediamanager__link_thumbs') { $content.removeClass('mediamanager-list'); $content.addClass('mediamanager-thumbs'); - } else if ($link.hasClass('mediamanager-link-list')) { + + } else if ($link[0].id == 'mediamanager__link_list') { $content.removeClass('mediamanager-thumbs'); $content.addClass('mediamanager-list'); } diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index 6c4b64d3e..02c732ce7 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -1,19 +1,17 @@ +/* Layout */ + .mediamanager { width: 100%; overflow-x: auto; } -.mediamanager .mediamanager-slider { - -} - -.mediamanager .mediamanager-slider .layout { +#mediamanager__layout .layout { margin-left: 5px; margin-right: 5px; float: left; } -.mediamanager .scroll-container { +#mediamanager__layout .scroll-container { overflow-y: auto; overflow-x: hidden; padding: 0; @@ -21,44 +19,45 @@ text-align: left; } -.background-container { +#mediamanager__layout .background-container { background-color: __background_alt__; margin-bottom: 10px; padding: 10px; text-align: left; } -.mediamanager-link-thumbnails { - background: url('../../images/icon-thumb.png') 0 -4px no-repeat; - padding-left: 30px; - display: inline-block; - width: 0; - overflow: hidden; +#mediamanager__layout .background-container .icon { + margin-right: 5px; +} - margin-left: 10px; +#mediamanager__layout_namespaces { + width: 25%; + min-width: 125px; } -.mediamanager-link-list { - background: url('../../images/icon-list.png') 0 -4px no-repeat; - padding-left: 30px; - display: inline-block; - width: 0; - overflow: hidden; +#mediamanager__layout_list { + width: 40%; + min-width: 375px; } -.mediamanager-block-sort { - background: url('../../images/icon-sort.png') 0 -4px no-repeat; - padding-left: 30px; - display: block; - float: right; +#mediamanager__layout_detail { + width: 30%; + min-width: 200px; } -.mediamanager-link-thumbnails:hover, -.mediamanager-link-list:hover { - width: auto; - margin-right: 10px; +.ui-resizable-e:hover { + background-color: #dadada; } +/* Namespaces tree */ + +.idx .selected { + background-color: __highlight__; + font-weight: bold; +} + +/* Tabs */ + .mediamanager-tabs a { font-weight: bold; display: block; @@ -66,13 +65,7 @@ padding: 10px; padding-bottom: 5px; padding-top: 5px; - margin-right: 2px; - - -moz-border-radius-topright: 10px; - -webkit-border-top-right-radius: 10px; - -moz-border-radius-topleft: 10px; - -webkit-border-top-left-radius: 10px; border-top-right-radius: 10px; border-top-left-radius: 10px; } @@ -86,34 +79,55 @@ opacity: 0.5; } -.mediamanager-table td { - padding: 5px; +/* Title links */ + +#mediamanager__tabs_list { + display: inline; } -.mediamanager-table tr:nth-child(2n+1){ - background-color: __background_neu__; +#mediamanager__link_thumbs { + background: url('../../images/icon-thumb.png') 0 -4px no-repeat; + padding-left: 30px; + display: inline-block; + width: 0; + overflow: hidden; + margin-left: 10px; } -.mediamanager-table { - background: expression(this.rowIndex % 2 == 0 ? "#ffffff" : "#f5f5f5"); +#mediamanager__link_list { + background: url('../../images/icon-list.png') 0 -4px no-repeat; + padding-left: 30px; + display: inline-block; + width: 0; + overflow: hidden; } -.mediamanager-table tr:hover { - background-color: __background_alt__; +#mediamanager__link_thumbs:hover, +#mediamanager__link_list:hover { + width: auto; + margin-right: 10px; } -form.meta textarea.edit { - height: 8em; - width: 95%; - min-width: 95%; - max-width: 95%; +#mediamanager__sort { + background: url('../../images/icon-sort.png') 0 -4px no-repeat; + padding-left: 30px; + display: block; + float: right; } -.mediamanager-file-list { +/* File list */ + +#mediamanager__file_list { padding: 0; margin: 0 !important; } +#mediamanager__file_list li:hover { + background-color: #dadada; +} + +/* Files thumbs view */ + .mediamanager-thumbs li { width: 100px; min-height: 130px; @@ -129,9 +143,11 @@ form.meta textarea.edit { zoom: 1; position: relative; } + * html .mediamanager-thumbs li { display: inline; } + *+html .mediamanager-thumbs li { display: inline; height: 130px; @@ -160,6 +176,11 @@ form.meta textarea.edit { white-space: nowrap; } +.mediamanager-thumbs li .date { + font-style: italic; + white-space: normal; +} + .mediamanager-thumbs li input[type=checkbox] { display: none; float: left; @@ -171,6 +192,8 @@ form.meta textarea.edit { display: block; } +/* Files list view */ + .mediamanager-list li { list-style: none; display: block; @@ -194,7 +217,6 @@ form.meta textarea.edit { .mediamanager-list li .image img { width: 100%; - vertical-align: middle; } .mediamanager-list li .name, @@ -208,8 +230,7 @@ form.meta textarea.edit { white-space: nowrap; } -.mediamanager-list li .date, -.mediamanager-thumbs li .date { +.mediamanager-list li .date { font-style: italic; white-space: normal; } @@ -238,16 +259,41 @@ form.meta textarea.edit { display: block; } -.mediamanager-file-list li:hover { - background-color: #dadada; +/* Upload panel */ + +#mediamanager__layout div.upload { + padding-bottom: 0.5em; } -.mediamanager-table-50 { +/* File preview */ + +#mediamanager__preview, +#mediamanager__preview_buttons { + text-align: center; + margin-bottom: 5px; +} + +#mediamanager__preview img { + width: 99%; +} + +/* Meta data edit form */ + +form.meta textarea.edit { + height: 8em; + width: 95%; + min-width: 95%; + max-width: 95%; +} + +/* File diff */ + +#mediamanager__diff_table { padding: 0; margin: 0 !important; } -.mediamanager-table-50 li { +#mediamanager__diff_table li { width: 48%; display: inline-block; margin: 0; @@ -258,33 +304,13 @@ form.meta textarea.edit { color: black; } -* html .mediamanager-table-50 li { +* html #mediamanager__diff_table li { display: inline; } -.mediamanager-preview { - text-align: center; - margin-bottom: 5px; -} - -.ui-resizable-e:hover { - background-color: #dadada; -} - -.idx .selected { - background-color: __highlight__; - font-weight: bold; -} - -.mediamanager div.upload { - padding-bottom: 0.5em; -} - -.background-container .icon { - margin-right: 5px; -} +/* Image diff */ -.mediamanager dl.img_tags dd.highlighted{ +#mediamanager__layout dl.img_tags dd.highlighted{ background-color: __highlight__; } -- cgit v1.2.3 From 80291f9e4256d8bd01f0b0a0589aab2ea402ab64 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Mon, 18 Jul 2011 16:51:47 +0300 Subject: mediamanager resize --- lib/scripts/media.js | 40 ++++++++++++++++++++++++++-------------- lib/tpl/default/mediamanager.css | 14 +++++++------- 2 files changed, 33 insertions(+), 21 deletions(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index c5e6afc9b..00a4821d0 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -380,27 +380,38 @@ var dw_mediamanager = { }, update_resizable: function (count_width) { - jQuery(".layout").resizable({ handles: 'e' }); - jQuery(".layout").bind("resize", function(event, ui) { - var w = 0; - jQuery(".layout").each(function() { - w += jQuery(this).width(); - }); - jQuery('#id-mediamanager-layout').width(w+30); - }); + $resizable = jQuery("#mediamanager__layout .layout-resizable"); + + $resizable.resizable({ handles: 'e' , + resize: function(event, ui){ + var w = 0; + $resizable.each(function() { + w += jQuery(this).width(); + }); + wSum = w + parseFloat(jQuery('#mediamanager__layout_detail').css("min-width")); - var w = 0; - jQuery(".layout").each(function() { - if (count_width) jQuery(this).width(jQuery(this).width()); - w += jQuery(this).width(); + // max width of resizable column + var maxWidth = 0.95 * jQuery('#mediamanager__layout').width() - wSum + jQuery(this).width() - 30; + $resizable.resizable( "option", "maxWidth", maxWidth ); + + // percentage width of the first two columns + var wLeft = ( 100*(w+30) / jQuery('#mediamanager__layout').width() ); + + // width of the third column + var wRight = 95-wLeft; + wRight += "%"; + jQuery('#mediamanager__layout_detail').width(wRight); + } }); - jQuery('#id-mediamanager-layout').width(w+30); var windowHeight = jQuery(window).height(); var height = windowHeight - 300; - jQuery('.scroll-container').each(function (i) { + jQuery('#mediamanager__layout .scroll-container').each(function (i) { jQuery(this).height(height); }); + $resizable.each(function() { + jQuery(this).height(height+100); + }); }, opacity_slider: function () { @@ -711,6 +722,7 @@ jQuery(document).ready(function() { dw_mediamanager.update_resizable(1); dw_mediamanager.opacity_slider(); dw_mediamanager.portions_slider(); + jQuery(window).resize(dw_mediamanager.update_resizable); }); jQuery(dw_mediamanager.init); diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index 02c732ce7..dc12dcbec 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -1,11 +1,11 @@ /* Layout */ -.mediamanager { +#mediamanager__page { width: 100%; - overflow-x: auto; } -#mediamanager__layout .layout { +#mediamanager__layout .layout, +#mediamanager__layout .layout-resizable { margin-left: 5px; margin-right: 5px; float: left; @@ -31,18 +31,18 @@ } #mediamanager__layout_namespaces { - width: 25%; + width: 15%; min-width: 125px; } #mediamanager__layout_list { - width: 40%; + width: 47%; min-width: 375px; } #mediamanager__layout_detail { - width: 30%; - min-width: 200px; + width: 33%; + min-width: 265px; } .ui-resizable-e:hover { -- cgit v1.2.3 From 6316bc7147a7ef1e90e2040d46bd40d034a09f13 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Tue, 19 Jul 2011 18:32:21 +0300 Subject: mediamanager list view thumbnails --- lib/tpl/default/mediamanager.css | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'lib') diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index dc12dcbec..25cfe07e9 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -36,13 +36,13 @@ } #mediamanager__layout_list { - width: 47%; + width: 45%; min-width: 375px; } #mediamanager__layout_detail { - width: 33%; - min-width: 265px; + width: 35%; + min-width: 300px; } .ui-resizable-e:hover { @@ -66,6 +66,10 @@ padding-bottom: 5px; padding-top: 5px; margin-right: 2px; + -moz-border-radius-topright: 10px; + -webkit-border-top-right-radius: 10px; + -moz-border-radius-topleft: 10px; + -webkit-border-top-left-radius: 10px; border-top-right-radius: 10px; border-top-left-radius: 10px; } @@ -153,14 +157,20 @@ height: 130px; } -.mediamanager-thumbs li .image { +.mediamanager-thumbs li .image, +.mediamanager-thumbs li .image0 { width: 100%; height: 90px; display: block; overflow: hidden; } -.mediamanager-thumbs li .image div { +.mediamanager-thumbs li .image1 { + display: none; +} + +.mediamanager-thumbs li .image div, +.mediamanager-thumbs li .image0 div { vertical-align: middle; display: table-cell; width: 100px; @@ -207,16 +217,18 @@ background-color: __background_neu__; } -.mediamanager-list li .image { +.mediamanager-list li .image, +.mediamanager-list li .image1 { width: 10%; display: block; overflow: hidden; float: left; height: 40px; + text-align: center; } -.mediamanager-list li .image img { - width: 100%; +.mediamanager-list li .image0 { + display: none; } .mediamanager-list li .name, @@ -240,7 +252,8 @@ max-height: 16px; } -.mediamanager-list li .image div { +.mediamanager-list li .image div, +.mediamanager-list li .image1 div { vertical-align: middle; text-align: center; display: table-cell; @@ -325,6 +338,8 @@ form.meta textarea.edit { position: absolute; top: 0; left: 0; + -moz-opacity: 0.5; + -khtml-opacity: 0.5; opacity: 0.5; } -- cgit v1.2.3 From 67c8cda19c0bf26a746d5c5cf9c82ee7ae5f23ca Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Tue, 19 Jul 2011 18:36:15 +0300 Subject: mediamanager revisions form --- lib/scripts/media.js | 2 +- lib/scripts/script.js | 17 ++++++++++------- lib/tpl/default/mediamanager.css | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+), 8 deletions(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 00a4821d0..a6f6c25d4 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -373,7 +373,7 @@ var dw_mediamanager = { dw_mediamanager.update_resizable(0); dw_mediamanager.opacity_slider(); dw_mediamanager.portions_slider(); - + addInitEvent(revisionsForm); }, 'html' ); diff --git a/lib/scripts/script.js b/lib/scripts/script.js index b44d95d6f..33916a92e 100644 --- a/lib/scripts/script.js +++ b/lib/scripts/script.js @@ -285,12 +285,7 @@ function closePopups(){ jQuery('div.JSpopup').hide(); } -/** - * disable multiple revisions checkboxes if two are checked - * - * @author Anika Henke - */ -addInitEvent(function(){ +function revisionsForm(){ var revForm = $('page__revisions'); if (!revForm) return; var elems = revForm.elements; @@ -312,7 +307,15 @@ addInitEvent(function(){ input1.disabled = true; } } -}); +} + + +/** + * disable multiple revisions checkboxes if two are checked + * + * @author Anika Henke + */ +addInitEvent(revisionsForm); /** diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index 25cfe07e9..490d90c62 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -299,6 +299,24 @@ form.meta textarea.edit { max-width: 95%; } +/* Revisions form */ + +#mediamanager__details #page__revisions ul { + margin-left: 10px; + list-style-type: none; +} + +#mediamanager__details #page__revisions ul li div.li div { + font-size: 12px; + color: gray; + padding-left: 18px; +} + +#mediamanager__details #page__revisions ul li div.li input { + position: relative; + top: 1px; +} + /* File diff */ #mediamanager__diff_table { -- cgit v1.2.3 From b5941dfab8516bd445afebc91d6a4942cab4d5f0 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Mon, 25 Jul 2011 14:06:25 +0300 Subject: Recent Changes integration of media changes --- lib/scripts/behaviour.js | 4 +++- lib/tpl/default/design.css | 10 ++-------- 2 files changed, 5 insertions(+), 9 deletions(-) (limited to 'lib') diff --git a/lib/scripts/behaviour.js b/lib/scripts/behaviour.js index dd7676432..24704565a 100644 --- a/lib/scripts/behaviour.js +++ b/lib/scripts/behaviour.js @@ -73,7 +73,9 @@ var dw_behaviour = { quickSelect: function(){ jQuery('select.quickselect') .change(function(e){ e.target.form.submit(); }) - .parents('form').find('input[type=submit]').hide(); + .parents('form').find('input[type=submit]').each(function(){ + if (!jQuery(this).hasClass('not_hide')) jQuery(this).hide(); + }); }, /** diff --git a/lib/tpl/default/design.css b/lib/tpl/default/design.css index 1dee4dc69..a94f814aa 100644 --- a/lib/tpl/default/design.css +++ b/lib/tpl/default/design.css @@ -246,18 +246,12 @@ div.dokuwiki div.pagenav-next { width: 49% } -/* ----------- type of recent changes ------------- */ +/* ----------- type of recent changes select -------- */ -div.dokuwiki div.changestypenav { - border-bottom: 1px solid __border__; - padding-bottom: 10px; +div.dokuwiki form#dw__recent select { margin-bottom: 10px; } -div.dokuwiki div.changestypenav label { - padding-right: 10px; -} - /* --------------- Links ------------------ */ div.dokuwiki a:link, -- cgit v1.2.3 From abc306f45f2ace038967bf7c51abd6ea53f56170 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Mon, 25 Jul 2011 16:23:24 +0300 Subject: mediamanager sort button --- lib/scripts/media.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index a6f6c25d4..44928417f 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -60,18 +60,33 @@ var dw_mediamanager = { }}); $tree.delegate('a', 'click', dw_mediamanager.list); + jQuery('#mediamanager__form_sort').find('input[type=submit]').hide(); + + // changing opened tab in the file list panel jQuery('#mediamanager__layout_list').delegate('#mediamanager__tabs_files a', 'click', dw_mediamanager.list) + // changing type of the file list view .delegate('#mediamanager__tabs_list a', 'click', dw_mediamanager.list_view) + // loading file details .delegate('#mediamanager__file_list a', 'click', dw_mediamanager.details) + // search form .delegate('#dw__mediasearch', 'submit', dw_mediamanager.list) - .delegate('#upload__file', 'change', dw_mediamanager.suggest); + // "upload as" field autofill + .delegate('#upload__file', 'change', dw_mediamanager.suggest) + // sort type selection + .delegate('#mediamanager__form_sort select', 'change', dw_mediamanager.list); + // changing opened tab in the file details panel jQuery('#mediamanager__layout_detail').delegate('#mediamanager__tabs_details a', 'click', dw_mediamanager.details) + // "update new version" button .delegate('#mediamanager__btn_update', 'submit', dw_mediamanager.list) + // revisions form .delegate('#page__revisions', 'submit', dw_mediamanager.details) .delegate('#page__revisions a', 'click', dw_mediamanager.details) + // meta edit form .delegate('#mediamanager__save_meta', 'submit', dw_mediamanager.details) + // delete button .delegate('#mediamanager__btn_delete', 'submit', dw_mediamanager.details) + // "restore this version" button .delegate('#mediamanager__btn_restore', 'submit', dw_mediamanager.details); }, @@ -270,6 +285,8 @@ var dw_mediamanager = { params = $link[0].search.substr(1)+'&call=medialist'; } else if ($link[0].action) { params = dw_mediamanager.form_params($link)+'&call=medialist'; + } else if ($link.parents('form')) { + params = dw_mediamanager.form_params($link.parents('form'))+'&call=medialist'; } // fetch the subtree -- cgit v1.2.3 From 4ee1558545059fa73700709a9ef4c0ab22ce8f92 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Tue, 26 Jul 2011 11:55:38 +0300 Subject: image diffs fixes --- lib/exe/ajax.php | 13 ++++++++ lib/scripts/media.js | 72 +++++++++++++++++++++++++++++++++++++--- lib/tpl/default/mediamanager.css | 10 ++++-- 3 files changed, 88 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php index 483d65cff..300fb8acb 100644 --- a/lib/exe/ajax.php +++ b/lib/exe/ajax.php @@ -235,6 +235,19 @@ function ajax_mediadetails(){ tpl_fileDetails($image, $rev); } +/** + * Returns image diff representation for mediamanager + * @author Kate Arzamastseva + */ +function ajax_mediadiff(){ + global $NS; + + if ($_REQUEST['image']) $image = cleanID($_REQUEST['image']); + $NS = $_POST['ns']; + $auth = auth_quickaclcheck("$ns:*"); + media_diff($image, $NS, $auth); +} + /** * Return sub index for index view * diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 44928417f..42035a595 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -61,6 +61,7 @@ var dw_mediamanager = { $tree.delegate('a', 'click', dw_mediamanager.list); jQuery('#mediamanager__form_sort').find('input[type=submit]').hide(); + dw_mediamanager.image_diff(); // changing opened tab in the file list panel jQuery('#mediamanager__layout_list').delegate('#mediamanager__tabs_files a', 'click', dw_mediamanager.list) @@ -357,8 +358,10 @@ var dw_mediamanager = { if ($link[0].search) { params = $link[0].search.substr(1)+'&call=mediadetails'; - } else { + } else if ($link[0].action) { params = dw_mediamanager.form_params($link)+'&call=mediadetails'; + } else if ($link.parents('form')) { + params = dw_mediamanager.form_params($link.parents('form'))+'&call=mediadetails'; } dw_mediamanager.update_content($content, params); @@ -385,17 +388,24 @@ var dw_mediamanager = { }); $content.html(data); + dw_mediamanager.prepare_content($content); dw_mediamanager.updatehide(); + dw_mediamanager.update_resizable(0); - dw_mediamanager.opacity_slider(); - dw_mediamanager.portions_slider(); addInitEvent(revisionsForm); + jQuery('#mediamanager__form_sort').find('input[type=submit]').hide(); + dw_mediamanager.image_diff(); }, 'html' ); }, + /** + * Updates mediamanager layout + * + * @author Kate Arzamastseva + */ update_resizable: function (count_width) { $resizable = jQuery("#mediamanager__layout .layout-resizable"); @@ -431,6 +441,55 @@ var dw_mediamanager = { }); }, + /** + * Prints 'select' for image difference representation type + * + * @author Kate Arzamastseva + */ + image_diff: function () { + if (jQuery('#mediamanager__difftype').length) return; + + $form = jQuery('#mediamanager__form_diffview'); + $label = jQuery(document.createElement('label')); + $label.append(''+LANG.media_diff+''); + $select = jQuery(document.createElement('select')) + .attr('id', 'mediamanager__difftype') + .attr('name', 'difftype') + .change(dw_mediamanager.change_diff_type); + $select.append(new Option(LANG.media_diff_both, "both")); + $select.append(new Option(LANG.media_diff_opacity, "opacity")); + $select.append(new Option(LANG.media_diff_portions, "portions")); + $label.append($select); + $form.append($label); + }, + + /** + * Handles selection of image difference representation type + * + * @author Kate Arzamastseva + */ + change_diff_type: function () { + $select = jQuery('#mediamanager__difftype'); + $content = jQuery('#mediamanager__diff'); + + params = dw_mediamanager.form_params($select.parents('form'))+'&call=mediadiff'; + jQuery.post( + DOKU_BASE + 'lib/exe/ajax.php', + params, + function (data) { + $content.html(data); + dw_mediamanager.opacity_slider(); + dw_mediamanager.portions_slider(); + }, + 'html' + ); + }, + + /** + * Sets options for opacity diff slider + * + * @author Kate Arzamastseva + */ opacity_slider: function () { var $slider = jQuery( "#mediamanager__opacity_slider" ); $slider.slider(); @@ -443,6 +502,11 @@ var dw_mediamanager = { }); }, + /** + * Sets options for red line diff slider + * + * @author Kate Arzamastseva + */ portions_slider: function () { var $slider = jQuery( "#mediamanager__portions_slider" ); $slider.slider(); @@ -737,8 +801,6 @@ function hasFlash(version){ jQuery(document).ready(function() { dw_mediamanager.update_resizable(1); - dw_mediamanager.opacity_slider(); - dw_mediamanager.portions_slider(); jQuery(window).resize(dw_mediamanager.update_resizable); }); diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index 490d90c62..431b61d6e 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -321,7 +321,8 @@ form.meta textarea.edit { #mediamanager__diff_table { padding: 0; - margin: 0 !important; + margin: 0; + margin-top: 10px; } #mediamanager__diff_table li { @@ -345,10 +346,15 @@ form.meta textarea.edit { background-color: __highlight__; } +#mediamanager__form_diffview { + margin-bottom: 10px; +} + #mediamanager__diff_opacity_image1, #mediamanager__diff_portions_image1 { width: 99%; position: relative; + margin-top: 10px; } #mediamanager__diff_opacity_image2 { @@ -372,5 +378,5 @@ form.meta textarea.edit { #mediamanager__opacity_slider, #mediamanager__portions_slider { margin: 10px; - width: 99%; + width: 95%; } -- cgit v1.2.3 From 676706d3b056c9ad075c09b3bed23a4c2b248f52 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Tue, 26 Jul 2011 11:59:39 +0300 Subject: mediamanager files view state persisted --- lib/scripts/media.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 42035a595..ebd9da2f8 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -22,6 +22,9 @@ var dw_mediamanager = { size: false, forbidden_opts: {}, + // File list view type + view: false, + init: function () { var $content, $tree; $content = jQuery('#media__content'); @@ -60,6 +63,7 @@ var dw_mediamanager = { }}); $tree.delegate('a', 'click', dw_mediamanager.list); + dw_mediamanager.set_filelist_view(dw_mediamanager.view, false); jQuery('#mediamanager__form_sort').find('input[type=submit]').hide(); dw_mediamanager.image_diff(); @@ -322,12 +326,28 @@ var dw_mediamanager = { $content = jQuery('#mediamanager__file_list'); if ($link[0].id == 'mediamanager__link_thumbs') { + dw_mediamanager.set_filelist_view('thumbs', true); + + } else if ($link[0].id == 'mediamanager__link_list') { + dw_mediamanager.set_filelist_view('list', true); + } + }, + + set_filelist_view: function (type, cookies) { + var $content = jQuery('#mediamanager__file_list'); + if (!type) type = DokuCookie.getValue('view'); + + if (type == 'thumbs') { $content.removeClass('mediamanager-list'); $content.addClass('mediamanager-thumbs'); + if (cookies) DokuCookie.setValue('view', 'thumbs'); + dw_mediamanager.view = 'thumbs'; - } else if ($link[0].id == 'mediamanager__link_list') { + } else if (type == 'list') { $content.removeClass('mediamanager-thumbs'); $content.addClass('mediamanager-list'); + if (cookies) DokuCookie.setValue('view', 'list'); + dw_mediamanager.view = 'list'; } }, @@ -395,6 +415,7 @@ var dw_mediamanager = { dw_mediamanager.update_resizable(0); addInitEvent(revisionsForm); jQuery('#mediamanager__form_sort').find('input[type=submit]').hide(); + dw_mediamanager.set_filelist_view(dw_mediamanager.view, false); dw_mediamanager.image_diff(); }, 'html' -- cgit v1.2.3 From d971ea8b02ccca4dd879a5db966670e0f3b4f102 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Sat, 30 Jul 2011 20:50:49 +0300 Subject: issue #39 sort by date desc, saved in cookie --- lib/scripts/media.js | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index ebd9da2f8..ff87299cf 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -292,6 +292,10 @@ var dw_mediamanager = { params = dw_mediamanager.form_params($link)+'&call=medialist'; } else if ($link.parents('form')) { params = dw_mediamanager.form_params($link.parents('form'))+'&call=medialist'; + + if ($link.parents('form')[0].id == 'mediamanager__form_sort') { + DokuCookie.setValue('sort', $link[0].value); + } } // fetch the subtree @@ -305,6 +309,7 @@ var dw_mediamanager = { * @author Kate Arzamastseva */ form_params: function ($form) { + if (!$form.length) return; var elements = $form.serialize(); var action = ''; var i = $form[0].action.indexOf('?'); @@ -471,6 +476,8 @@ var dw_mediamanager = { if (jQuery('#mediamanager__difftype').length) return; $form = jQuery('#mediamanager__form_diffview'); + if (!$form.length) return; + $label = jQuery(document.createElement('label')); $label.append(''+LANG.media_diff+''); $select = jQuery(document.createElement('select')) -- cgit v1.2.3 From 9bd9c4373f31bb381fd80564decd8671d942fdc8 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Sun, 31 Jul 2011 22:47:47 +0300 Subject: issue #32 calculation of the panels width is redone when browser window is resized --- lib/scripts/media.js | 59 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index ff87299cf..17006e289 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -25,6 +25,8 @@ var dw_mediamanager = { // File list view type view: false, + layout_width: 0, + init: function () { var $content, $tree; $content = jQuery('#media__content'); @@ -417,7 +419,7 @@ var dw_mediamanager = { dw_mediamanager.prepare_content($content); dw_mediamanager.updatehide(); - dw_mediamanager.update_resizable(0); + dw_mediamanager.update_resizable(); addInitEvent(revisionsForm); jQuery('#mediamanager__form_sort').find('input[type=submit]').hide(); dw_mediamanager.set_filelist_view(dw_mediamanager.view, false); @@ -427,12 +429,53 @@ var dw_mediamanager = { ); }, + window_resize: function () { + if (jQuery('#mediamanager__layout').width() == dw_mediamanager.layout_width) { + return; + } + + dw_mediamanager.layout_width = jQuery('#mediamanager__layout').width(); + + $r = jQuery("#mediamanager__layout .layout-resizable, #mediamanager__layout .layout"); + + var w = 0, wSum = 0, mCount = 0, mArray = []; + $r.each(function() { + w = jQuery(this).width(); + if (w == parseFloat(jQuery(this).css("min-width"))) { + wSum += w; + } else { + mArray[mCount] = jQuery(this); + mCount++; + } + }); + + if (mCount > 0) { + var width = (0.95 * jQuery('#mediamanager__layout').width() - wSum - 30); + wSum = 0; + for(var i = 0; i < mArray.length; i++) { + wSum += mArray[i].width(); + } + for(var i = 0; i < mArray.length; i++) { + w = mArray[i].width(); + w = 100*w / wSum; + mArray[i].width(width*w/100); + } + } + + $r.each(function() { + w = jQuery(this).width(); + w = (100 * w / jQuery('#mediamanager__layout').width()); + w += "%"; + jQuery(this).width(w); + }); + }, + /** * Updates mediamanager layout * * @author Kate Arzamastseva */ - update_resizable: function (count_width) { + update_resizable: function () { $resizable = jQuery("#mediamanager__layout .layout-resizable"); $resizable.resizable({ handles: 'e' , @@ -454,6 +497,13 @@ var dw_mediamanager = { var wRight = 95-wLeft; wRight += "%"; jQuery('#mediamanager__layout_detail').width(wRight); + + $resizable.each(function() { + w = jQuery(this).width(); + w = (100 * w / jQuery('#mediamanager__layout').width()); + w += "%"; + jQuery(this).width(w); + }); } }); @@ -828,8 +878,9 @@ function hasFlash(version){ } jQuery(document).ready(function() { - dw_mediamanager.update_resizable(1); - jQuery(window).resize(dw_mediamanager.update_resizable); + dw_mediamanager.update_resizable(); + dw_mediamanager.layout_width = jQuery("#mediamanager__layout").width(); + jQuery(window).resize(dw_mediamanager.window_resize); }); jQuery(dw_mediamanager.init); -- cgit v1.2.3 From c17d1d0ed0fcdb8f0d4663a47bad8df069760b49 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Mon, 1 Aug 2011 01:16:20 +0300 Subject: issue #32 mediamanager layout css fix --- lib/tpl/default/mediamanager.css | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index 431b61d6e..353230cc6 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -2,6 +2,11 @@ #mediamanager__page { width: 100%; + overflow-x: auto; +} + +#mediamanager__layout { + min-width: 840px; } #mediamanager__layout .layout, @@ -42,7 +47,7 @@ #mediamanager__layout_detail { width: 35%; - min-width: 300px; + min-width: 290px; } .ui-resizable-e:hover { -- cgit v1.2.3 From 69143ff27bdf2a979818367613e604f8ee4aef88 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Mon, 1 Aug 2011 01:21:21 +0300 Subject: issue #40 image resized in all diff views --- lib/scripts/media.js | 46 ++++++++++++++++++++++++++++++++-------- lib/tpl/default/mediamanager.css | 20 +++++++++-------- 2 files changed, 48 insertions(+), 18 deletions(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 17006e289..e8c492f5f 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -436,6 +436,10 @@ var dw_mediamanager = { dw_mediamanager.layout_width = jQuery('#mediamanager__layout').width(); + // rebuild sliders if exists + dw_mediamanager.opacity_slider(); + dw_mediamanager.portions_slider(); + $r = jQuery("#mediamanager__layout .layout-resizable, #mediamanager__layout .layout"); var w = 0, wSum = 0, mCount = 0, mArray = []; @@ -586,15 +590,39 @@ var dw_mediamanager = { * @author Kate Arzamastseva */ portions_slider: function () { - var $slider = jQuery( "#mediamanager__portions_slider" ); - $slider.slider(); - $slider.slider("option", "min", 0); - $slider.slider("option", "max", 100); - $slider.slider("option", "step", 1); - $slider.slider("option", "value", 50); - $slider.bind("slide", function(event, ui) { - jQuery('#mediamanager__diff_portions_image2').css({ width: $slider.slider("option", "value")+'%'}); - }); + var $image2 = jQuery('#mediamanager__diff_portions_image2 img'); + if ($image2) { + $image2 = jQuery($image2[0]); + + $image2.parent().css({ + width: '100%' + }); + + $image2.css({ + width: '100%', + height: 'auto' + }); + + $image2.css({ + width: $image2.width() + 'px', + height: $image2.height() + 'px' + }); + + var $div = jQuery("#mediamanager__diff_layout"); + if ($image2.width() < $div.width()) { + $div.width($image2.width()); + } + + var $slider = jQuery("#mediamanager__portions_slider"); + $slider.slider(); + $slider.slider("option", "min", 0); + $slider.slider("option", "max", 100); + $slider.slider("option", "step", 1); + $slider.slider("option", "value", 50); + $slider.bind("slide", function(event, ui) { + jQuery('#mediamanager__diff_portions_image2').css({ width: $slider.slider("option", "value")+'%'}); + }); + } }, prepare_content: function ($content) { diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index 353230cc6..a2fd35a47 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -355,18 +355,22 @@ form.meta textarea.edit { margin-bottom: 10px; } -#mediamanager__diff_opacity_image1, -#mediamanager__diff_portions_image1 { - width: 99%; +#mediamanager__diff_layout { position: relative; - margin-top: 10px; } -#mediamanager__diff_opacity_image2 { - width: 100%; +#mediamanager__diff_layout div { position: absolute; top: 0; left: 0; + width: 100%; +} + +#mediamanager__diff_layout div img { + width: 100%; +} + +#mediamanager__diff_opacity_image2 { -moz-opacity: 0.5; -khtml-opacity: 0.5; opacity: 0.5; @@ -374,10 +378,8 @@ form.meta textarea.edit { #mediamanager__diff_portions_image2 { width: 50%; - position: absolute; - top: 0; - left: 0; border-right: 1px solid red; + overflow: hidden; } #mediamanager__opacity_slider, -- cgit v1.2.3 From d5daba103cb1ed14fd07618ef936ca8d5cffb50c Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Mon, 1 Aug 2011 01:39:36 +0300 Subject: css class name fix --- lib/scripts/behaviour.js | 2 +- lib/tpl/default/mediamanager.css | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/scripts/behaviour.js b/lib/scripts/behaviour.js index 24704565a..f3fcccdfe 100644 --- a/lib/scripts/behaviour.js +++ b/lib/scripts/behaviour.js @@ -74,7 +74,7 @@ var dw_behaviour = { jQuery('select.quickselect') .change(function(e){ e.target.form.submit(); }) .parents('form').find('input[type=submit]').each(function(){ - if (!jQuery(this).hasClass('not_hide')) jQuery(this).hide(); + if (!jQuery(this).hasClass('show')) jQuery(this).hide(); }); }, diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index a2fd35a47..8d351cd95 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -313,7 +313,7 @@ form.meta textarea.edit { #mediamanager__details #page__revisions ul li div.li div { font-size: 12px; - color: gray; + color: __text_neu__; padding-left: 18px; } @@ -338,7 +338,7 @@ form.meta textarea.edit { padding: 2px; vertical-align: top; zoom: 1; - color: black; + color: __text__; } * html #mediamanager__diff_table li { -- cgit v1.2.3 From e5d185e17e613b7a9737fc76310f1e78008f71ec Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Tue, 2 Aug 2011 20:25:17 +0300 Subject: issue #9 config option to disable media revisions, auth --- lib/exe/mediamanager.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php index 939b5a053..5f09fe1f8 100644 --- a/lib/exe/mediamanager.php +++ b/lib/exe/mediamanager.php @@ -84,9 +84,9 @@ $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']); } - if ($_REQUEST['rev']) $REV = (int) $_REQUEST['rev']; + if ($_REQUEST['rev'] && $conf['mediarevisions']) $REV = (int) $_REQUEST['rev']; - if($_REQUEST['mediado'] == 'restore'){ + if($_REQUEST['mediado'] == 'restore' && $conf['mediarevisions']){ $JUMPTO = media_restore($_REQUEST['image'], $REV, $AUTH); } -- cgit v1.2.3 From 92cac9a97ee63d9c3c9bb8b0da1e3eb0604ba04f Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Wed, 3 Aug 2011 15:19:52 +0300 Subject: issue #38 diff links only if diff available; deleted files --- lib/exe/ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php index 300fb8acb..20fc99de4 100644 --- a/lib/exe/ajax.php +++ b/lib/exe/ajax.php @@ -222,7 +222,7 @@ function ajax_medialist(){ * @author Kate Arzamastseva */ function ajax_mediadetails(){ - global $DEL, $NS, $IMG, $AUTH, $JUMPTO, $REV, $lang, $fullscreen; + global $DEL, $NS, $IMG, $AUTH, $JUMPTO, $REV, $lang, $fullscreen, $conf; $fullscreen = true; require_once(DOKU_INC.'lib/exe/mediamanager.php'); -- cgit v1.2.3 From a1a02ef6d327f2de7ffc7db57a7907465761b407 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Wed, 3 Aug 2011 19:10:16 +0300 Subject: issue #43 diff slider --- lib/scripts/media.js | 49 +++++++++++++++++----------------------- lib/tpl/default/mediamanager.css | 8 ++++--- 2 files changed, 26 insertions(+), 31 deletions(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index e8c492f5f..f0c4c679c 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -560,8 +560,8 @@ var dw_mediamanager = { params, function (data) { $content.html(data); - dw_mediamanager.opacity_slider(); dw_mediamanager.portions_slider(); + dw_mediamanager.opacity_slider(); }, 'html' ); @@ -574,6 +574,7 @@ var dw_mediamanager = { */ opacity_slider: function () { var $slider = jQuery( "#mediamanager__opacity_slider" ); + if (!$slider.length) return; $slider.slider(); $slider.slider("option", "min", 0); $slider.slider("option", "max", 0.999); @@ -590,39 +591,31 @@ var dw_mediamanager = { * @author Kate Arzamastseva */ portions_slider: function () { + var $image1 = jQuery('#mediamanager__diff_portions_image1 img'); var $image2 = jQuery('#mediamanager__diff_portions_image2 img'); - if ($image2) { - $image2 = jQuery($image2[0]); + if (!$image1.length || !$image2.length) return; - $image2.parent().css({ - width: '100%' - }); + var $div = jQuery("#mediamanager__diff_layout"); + if (!$div.length) return; - $image2.css({ - width: '100%', - height: 'auto' - }); + if ($image1.width() < $div.width()) { + $div.width($image1.width()); + } - $image2.css({ - width: $image2.width() + 'px', - height: $image2.height() + 'px' - }); + $image2.parent().width('50%'); + $image2.width($image1.width()); - var $div = jQuery("#mediamanager__diff_layout"); - if ($image2.width() < $div.width()) { - $div.width($image2.width()); - } + var $slider = jQuery("#mediamanager__portions_slider"); + if (!$slider.length) return; + $slider.slider(); + $slider.slider("option", "min", 0); + $slider.slider("option", "max", 100); + $slider.slider("option", "step", 1); + $slider.slider("option", "value", 50); + $slider.bind("slide", function(event, ui) { + jQuery('#mediamanager__diff_portions_image2').css({ width: $slider.slider("option", "value")+'%'}); + }); - var $slider = jQuery("#mediamanager__portions_slider"); - $slider.slider(); - $slider.slider("option", "min", 0); - $slider.slider("option", "max", 100); - $slider.slider("option", "step", 1); - $slider.slider("option", "value", 50); - $slider.bind("slide", function(event, ui) { - jQuery('#mediamanager__diff_portions_image2').css({ width: $slider.slider("option", "value")+'%'}); - }); - } }, prepare_content: function ($content) { diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css index 8d351cd95..49f2901e2 100644 --- a/lib/tpl/default/mediamanager.css +++ b/lib/tpl/default/mediamanager.css @@ -363,21 +363,23 @@ form.meta textarea.edit { position: absolute; top: 0; left: 0; - width: 100%; } -#mediamanager__diff_layout div img { +#mediamanager__diff_layout div img, +#mediamanager__diff_opacity_image1, +#mediamanager__diff_portions_image1 { width: 100%; } #mediamanager__diff_opacity_image2 { + width: 100%; -moz-opacity: 0.5; -khtml-opacity: 0.5; opacity: 0.5; } #mediamanager__diff_portions_image2 { - width: 50%; + width: 100%; border-right: 1px solid red; overflow: hidden; } -- cgit v1.2.3 From 09063cc66339d6e5daa12af4896a2457c03cfaf3 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Thu, 4 Aug 2011 20:32:16 +0300 Subject: issue #44 multi file uploader --- lib/exe/ajax.php | 82 +++ lib/exe/js.php | 1 + lib/scripts/fileuploader.js | 1247 ++++++++++++++++++++++++++++++++++++++ lib/scripts/media.js | 45 ++ lib/tpl/default/fileuploader.css | 31 + lib/tpl/default/style.ini | 1 + 6 files changed, 1407 insertions(+) create mode 100644 lib/scripts/fileuploader.js create mode 100644 lib/tpl/default/fileuploader.css (limited to 'lib') diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php index 20fc99de4..391e951e5 100644 --- a/lib/exe/ajax.php +++ b/lib/exe/ajax.php @@ -248,6 +248,88 @@ function ajax_mediadiff(){ media_diff($image, $NS, $auth); } +function ajax_mediaupload(){ + global $NS; + $NS = $_REQUEST['ns']; + $AUTH = auth_quickaclcheck("$NS:*"); + if($AUTH >= AUTH_UPLOAD) { io_createNamespace("$NS:xxx", 'media'); } + + if($_FILES['qqfile']['error']){ + unset($_FILES['qqfile']); + } + + if($_FILES['qqfile']['tmp_name']){ + $id = $_FILES['qqfile']['name']; + $file = $_FILES['qqfile']['tmp_name']; + list($ext,$mime,$dl) = mimetype($id); + + $res = media_save( + array('name' => $file, + 'mime' => $mime, + 'ext' => $ext), + $NS.':'.$id, + false, + $AUTH, + 'move_uploaded_file' + ); + if (!is_array($res)) { + $result = array('success'=>true); + } + } + + if (isset($_GET['qqfile'])) { + $id = $_GET['qqfile']; + list($ext,$mime,$dl) = mimetype($id); + $input = fopen("php://input", "r"); + $temp = tmpfile(); + $realSize = stream_copy_to_stream($input, $temp); + fclose($input); + if ($realSize != (int)$_SERVER["CONTENT_LENGTH"]) return false; + if (!($tmp = io_mktmpdir())) return false; + $path = $tmp.'/'.$id; + $target = fopen($path, "w"); + fseek($temp, 0, SEEK_SET); + stream_copy_to_stream($temp, $target); + fclose($target); + $res = media_save( + array('name' => $path, + 'mime' => $mime, + 'ext' => $ext), + $NS.':'.$id, + false, + $AUTH, + 'copy' + ); + unlink($path); + if ($tmp) dir_delete($tmp); + if (!is_array($res)) { + $result = array('success'=>true); + } + } + if (!$result) $result = array('error'=> 'Could not save uploaded file.'); + echo htmlspecialchars(json_encode($result), ENT_NOQUOTES); +} + +function dir_delete($path) { + if (!is_string($path) || $path == "") return false; + + if (is_dir($path) && !is_link($path)) { + if (!$dh = @opendir($path)) return false; + + while ($f = readdir($dh)) { + if ($f == '..' || $f == '.') continue; + dir_delete("$path/$f"); + } + + closedir($dh); + return @rmdir($path); + } else { + return @unlink($path); + } + + return false; +} + /** * Return sub index for index view * diff --git a/lib/exe/js.php b/lib/exe/js.php index 44ab2d5ca..fd8b74947 100644 --- a/lib/exe/js.php +++ b/lib/exe/js.php @@ -43,6 +43,7 @@ function js_out(){ DOKU_INC."lib/scripts/jquery/jquery$min.js", DOKU_INC.'lib/scripts/jquery/jquery.cookie.js', DOKU_INC."lib/scripts/jquery/jquery-ui$min.js", + DOKU_INC."lib/scripts/fileuploader.js", DOKU_INC.'lib/scripts/helpers.js', DOKU_INC.'lib/scripts/events.js', DOKU_INC.'lib/scripts/delay.js', diff --git a/lib/scripts/fileuploader.js b/lib/scripts/fileuploader.js new file mode 100644 index 000000000..5368d9739 --- /dev/null +++ b/lib/scripts/fileuploader.js @@ -0,0 +1,1247 @@ +/** + * http://github.com/valums/file-uploader + * + * Multiple file upload component with progress-bar, drag-and-drop. + * © 2010 Andrew Valums ( andrew(at)valums.com ) + * + * Licensed under GNU GPL 2 or later and GNU LGPL 2 or later, see license.txt. + */ + +// +// Helper functions +// + +var qq = qq || {}; + +/** + * Adds all missing properties from second obj to first obj + */ +qq.extend = function(first, second){ + for (var prop in second){ + first[prop] = second[prop]; + } +}; + +/** + * Searches for a given element in the array, returns -1 if it is not present. + * @param {Number} [from] The index at which to begin the search + */ +qq.indexOf = function(arr, elt, from){ + if (arr.indexOf) return arr.indexOf(elt, from); + + from = from || 0; + var len = arr.length; + + if (from < 0) from += len; + + for (; from < len; from++){ + if (from in arr && arr[from] === elt){ + return from; + } + } + return -1; +}; + +qq.getUniqueId = (function(){ + var id = 0; + return function(){ return id++; }; +})(); + +// +// Events + +qq.attach = function(element, type, fn){ + if (element.addEventListener){ + element.addEventListener(type, fn, false); + } else if (element.attachEvent){ + element.attachEvent('on' + type, fn); + } +}; +qq.detach = function(element, type, fn){ + if (element.removeEventListener){ + element.removeEventListener(type, fn, false); + } else if (element.attachEvent){ + element.detachEvent('on' + type, fn); + } +}; + +qq.preventDefault = function(e){ + if (e.preventDefault){ + e.preventDefault(); + } else{ + e.returnValue = false; + } +}; + +// +// Node manipulations + +/** + * Insert node a before node b. + */ +qq.insertBefore = function(a, b){ + b.parentNode.insertBefore(a, b); +}; +qq.remove = function(element){ + element.parentNode.removeChild(element); +}; + +qq.contains = function(parent, descendant){ + // compareposition returns false in this case + if (parent == descendant) return true; + + if (parent.contains){ + return parent.contains(descendant); + } else { + return !!(descendant.compareDocumentPosition(parent) & 8); + } +}; + +/** + * Creates and returns element from html string + * Uses innerHTML to create an element + */ +qq.toElement = (function(){ + var div = document.createElement('div'); + return function(html){ + div.innerHTML = html; + var element = div.firstChild; + div.removeChild(element); + return element; + }; +})(); + +// +// Node properties and attributes + +/** + * Sets styles for an element. + * Fixes opacity in IE6-8. + */ +qq.css = function(element, styles){ + if (styles.opacity != null){ + if (typeof element.style.opacity != 'string' && typeof(element.filters) != 'undefined'){ + styles.filter = 'alpha(opacity=' + Math.round(100 * styles.opacity) + ')'; + } + } + qq.extend(element.style, styles); +}; +qq.hasClass = function(element, name){ + var re = new RegExp('(^| )' + name + '( |$)'); + return re.test(element.className); +}; +qq.addClass = function(element, name){ + if (!qq.hasClass(element, name)){ + element.className += ' ' + name; + } +}; +qq.removeClass = function(element, name){ + var re = new RegExp('(^| )' + name + '( |$)'); + element.className = element.className.replace(re, ' ').replace(/^\s+|\s+$/g, ""); +}; +qq.setText = function(element, text){ + element.innerText = text; + element.textContent = text; +}; + +// +// Selecting elements + +qq.children = function(element){ + var children = [], + child = element.firstChild; + + while (child){ + if (child.nodeType == 1){ + children.push(child); + } + child = child.nextSibling; + } + + return children; +}; + +qq.getByClass = function(element, className){ + if (element.querySelectorAll){ + return element.querySelectorAll('.' + className); + } + + var result = []; + var candidates = element.getElementsByTagName("*"); + var len = candidates.length; + + for (var i = 0; i < len; i++){ + if (qq.hasClass(candidates[i], className)){ + result.push(candidates[i]); + } + } + return result; +}; + +/** + * obj2url() takes a json-object as argument and generates + * a querystring. pretty much like jQuery.param() + * + * how to use: + * + * `qq.obj2url({a:'b',c:'d'},'http://any.url/upload?otherParam=value');` + * + * will result in: + * + * `http://any.url/upload?otherParam=value&a=b&c=d` + * + * @param Object JSON-Object + * @param String current querystring-part + * @return String encoded querystring + */ +qq.obj2url = function(obj, temp, prefixDone){ + var uristrings = [], + prefix = '&', + add = function(nextObj, i){ + var nextTemp = temp + ? (/\[\]$/.test(temp)) // prevent double-encoding + ? temp + : temp+'['+i+']' + : i; + if ((nextTemp != 'undefined') && (i != 'undefined')) { + uristrings.push( + (typeof nextObj === 'object') + ? qq.obj2url(nextObj, nextTemp, true) + : (Object.prototype.toString.call(nextObj) === '[object Function]') + ? encodeURIComponent(nextTemp) + '=' + encodeURIComponent(nextObj()) + : encodeURIComponent(nextTemp) + '=' + encodeURIComponent(nextObj) + ); + } + }; + + if (!prefixDone && temp) { + prefix = (/\?/.test(temp)) ? (/\?$/.test(temp)) ? '' : '&' : '?'; + uristrings.push(temp); + uristrings.push(qq.obj2url(obj)); + } else if ((Object.prototype.toString.call(obj) === '[object Array]') && (typeof obj != 'undefined') ) { + // we wont use a for-in-loop on an array (performance) + for (var i = 0, len = obj.length; i < len; ++i){ + add(obj[i], i); + } + } else if ((typeof obj != 'undefined') && (obj !== null) && (typeof obj === "object")){ + // for anything else but a scalar, we will use for-in-loop + for (var i in obj){ + add(obj[i], i); + } + } else { + uristrings.push(encodeURIComponent(temp) + '=' + encodeURIComponent(obj)); + } + + return uristrings.join(prefix) + .replace(/^&/, '') + .replace(/%20/g, '+'); +}; + +// +// +// Uploader Classes +// +// + +var qq = qq || {}; + +/** + * Creates upload button, validates upload, but doesn't create file list or dd. + */ +qq.FileUploaderBasic = function(o){ + this._options = { + // set to true to see the server response + debug: false, + action: '/server/upload', + params: {}, + button: null, + multiple: true, + maxConnections: 3, + // validation + allowedExtensions: [], + sizeLimit: 0, + minSizeLimit: 0, + // events + // return false to cancel submit + onSubmit: function(id, fileName){}, + onProgress: function(id, fileName, loaded, total){}, + onComplete: function(id, fileName, responseJSON){}, + onCancel: function(id, fileName){}, + // messages + messages: { + typeError: "{file} has invalid extension. Only {extensions} are allowed.", + sizeError: "{file} is too large, maximum file size is {sizeLimit}.", + minSizeError: "{file} is too small, minimum file size is {minSizeLimit}.", + emptyError: "{file} is empty, please select files again without it.", + onLeave: "The files are being uploaded, if you leave now the upload will be cancelled." + }, + showMessage: function(message){ + alert(message); + } + }; + qq.extend(this._options, o); + + // number of files being uploaded + this._filesInProgress = 0; + this._handler = this._createUploadHandler(); + + if (this._options.button){ + this._button = this._createUploadButton(this._options.button); + } + + this._preventLeaveInProgress(); +}; + +qq.FileUploaderBasic.prototype = { + setParams: function(params){ + this._options.params = params; + }, + getInProgress: function(){ + return this._filesInProgress; + }, + _createUploadButton: function(element){ + var self = this; + + return new qq.UploadButton({ + element: element, + multiple: this._options.multiple && qq.UploadHandlerXhr.isSupported(), + onChange: function(input){ + self._onInputChange(input); + } + }); + }, + _createUploadHandler: function(){ + var self = this, + handlerClass; + + if(qq.UploadHandlerXhr.isSupported()){ + handlerClass = 'UploadHandlerXhr'; + } else { + handlerClass = 'UploadHandlerForm'; + } + + var handler = new qq[handlerClass]({ + debug: this._options.debug, + action: this._options.action, + maxConnections: this._options.maxConnections, + onProgress: function(id, fileName, loaded, total){ + self._onProgress(id, fileName, loaded, total); + self._options.onProgress(id, fileName, loaded, total); + }, + onComplete: function(id, fileName, result){ + self._onComplete(id, fileName, result); + self._options.onComplete(id, fileName, result); + }, + onCancel: function(id, fileName){ + self._onCancel(id, fileName); + self._options.onCancel(id, fileName); + } + }); + + return handler; + }, + _preventLeaveInProgress: function(){ + var self = this; + + qq.attach(window, 'beforeunload', function(e){ + if (!self._filesInProgress){return;} + + var e = e || window.event; + // for ie, ff + e.returnValue = self._options.messages.onLeave; + // for webkit + return self._options.messages.onLeave; + }); + }, + _onSubmit: function(id, fileName){ + this._filesInProgress++; + }, + _onProgress: function(id, fileName, loaded, total){ + }, + _onComplete: function(id, fileName, result){ + this._filesInProgress--; + if (result.error){ + this._options.showMessage(result.error); + } + }, + _onCancel: function(id, fileName){ + this._filesInProgress--; + }, + _onInputChange: function(input){ + if (this._handler instanceof qq.UploadHandlerXhr){ + this._uploadFileList(input.files); + } else { + if (this._validateFile(input)){ + this._uploadFile(input); + } + } + this._button.reset(); + }, + _uploadFileList: function(files){ + for (var i=0; i this._options.sizeLimit){ + this._error('sizeError', name); + return false; + + } else if (size && size < this._options.minSizeLimit){ + this._error('minSizeError', name); + return false; + } + + return true; + }, + _error: function(code, fileName){ + var message = this._options.messages[code]; + function r(name, replacement){ message = message.replace(name, replacement); } + + r('{file}', this._formatFileName(fileName)); + r('{extensions}', this._options.allowedExtensions.join(', ')); + r('{sizeLimit}', this._formatSize(this._options.sizeLimit)); + r('{minSizeLimit}', this._formatSize(this._options.minSizeLimit)); + + this._options.showMessage(message); + }, + _formatFileName: function(name){ + if (name.length > 33){ + name = name.slice(0, 19) + '...' + name.slice(-13); + } + return name; + }, + _isAllowedExtension: function(fileName){ + var ext = (-1 !== fileName.indexOf('.')) ? fileName.replace(/.*[.]/, '').toLowerCase() : ''; + var allowed = this._options.allowedExtensions; + + if (!allowed.length){return true;} + + for (var i=0; i 99); + + return Math.max(bytes, 0.1).toFixed(1) + ['kB', 'MB', 'GB', 'TB', 'PB', 'EB'][i]; + } +}; + + +/** + * Class that creates upload widget with drag-and-drop and file list + * @inherits qq.FileUploaderBasic + */ +qq.FileUploader = function(o){ + // call parent constructor + qq.FileUploaderBasic.apply(this, arguments); + + // additional options + qq.extend(this._options, { + element: null, + // if set, will be used instead of qq-upload-list in template + listElement: null, + + template: '
' + + '
Drop files here to upload
' + + '
Upload a file
' + + '
    ' + + '
    ', + + // template for one item in file list + fileTemplate: '
  • ' + + '' + + '' + + '' + + 'Cancel' + + 'Failed' + + '
  • ', + + classes: { + // used to get elements from templates + button: 'qq-upload-button', + drop: 'qq-upload-drop-area', + dropActive: 'qq-upload-drop-area-active', + list: 'qq-upload-list', + + file: 'qq-upload-file', + spinner: 'qq-upload-spinner', + size: 'qq-upload-size', + cancel: 'qq-upload-cancel', + + // added to list item when upload completes + // used in css to hide progress spinner + success: 'qq-upload-success', + fail: 'qq-upload-fail' + } + }); + // overwrite options with user supplied + qq.extend(this._options, o); + + this._element = this._options.element; + this._element.innerHTML = this._options.template; + this._listElement = this._options.listElement || this._find(this._element, 'list'); + + this._classes = this._options.classes; + + this._button = this._createUploadButton(this._find(this._element, 'button')); + + this._bindCancelEvent(); + this._setupDragDrop(); +}; + +// inherit from Basic Uploader +qq.extend(qq.FileUploader.prototype, qq.FileUploaderBasic.prototype); + +qq.extend(qq.FileUploader.prototype, { + /** + * Gets one of the elements listed in this._options.classes + **/ + _find: function(parent, type){ + var element = qq.getByClass(parent, this._options.classes[type])[0]; + if (!element){ + throw new Error('element not found ' + type); + } + + return element; + }, + _setupDragDrop: function(){ + var self = this, + dropArea = this._find(this._element, 'drop'); + + var dz = new qq.UploadDropZone({ + element: dropArea, + onEnter: function(e){ + qq.addClass(dropArea, self._classes.dropActive); + e.stopPropagation(); + }, + onLeave: function(e){ + e.stopPropagation(); + }, + onLeaveNotDescendants: function(e){ + qq.removeClass(dropArea, self._classes.dropActive); + }, + onDrop: function(e){ + dropArea.style.display = 'none'; + qq.removeClass(dropArea, self._classes.dropActive); + self._uploadFileList(e.dataTransfer.files); + } + }); + + dropArea.style.display = 'none'; + + qq.attach(document, 'dragenter', function(e){ + if (!dz._isValidFileDrag(e)) return; + + dropArea.style.display = 'block'; + }); + qq.attach(document, 'dragleave', function(e){ + if (!dz._isValidFileDrag(e)) return; + + var relatedTarget = document.elementFromPoint(e.clientX, e.clientY); + // only fire when leaving document out + if ( ! relatedTarget || relatedTarget.nodeName == "HTML"){ + dropArea.style.display = 'none'; + } + }); + }, + _onSubmit: function(id, fileName){ + qq.FileUploaderBasic.prototype._onSubmit.apply(this, arguments); + this._addToList(id, fileName); + }, + _onProgress: function(id, fileName, loaded, total){ + qq.FileUploaderBasic.prototype._onProgress.apply(this, arguments); + + var item = this._getItemByFileId(id); + var size = this._find(item, 'size'); + size.style.display = 'inline'; + + var text; + if (loaded != total){ + text = Math.round(loaded / total * 100) + '% from ' + this._formatSize(total); + } else { + text = this._formatSize(total); + } + + qq.setText(size, text); + }, + _onComplete: function(id, fileName, result){ + qq.FileUploaderBasic.prototype._onComplete.apply(this, arguments); + + // mark completed + var item = this._getItemByFileId(id); + qq.remove(this._find(item, 'cancel')); + qq.remove(this._find(item, 'spinner')); + + if (result.success){ + qq.addClass(item, this._classes.success); + } else { + qq.addClass(item, this._classes.fail); + } + }, + _addToList: function(id, fileName){ + var item = qq.toElement(this._options.fileTemplate); + item.qqFileId = id; + + var fileElement = this._find(item, 'file'); + qq.setText(fileElement, this._formatFileName(fileName)); + this._find(item, 'size').style.display = 'none'; + + this._listElement.appendChild(item); + }, + _getItemByFileId: function(id){ + var item = this._listElement.firstChild; + + // there can't be txt nodes in dynamically created list + // and we can use nextSibling + while (item){ + if (item.qqFileId == id) return item; + item = item.nextSibling; + } + }, + /** + * delegate click event for cancel link + **/ + _bindCancelEvent: function(){ + var self = this, + list = this._listElement; + + qq.attach(list, 'click', function(e){ + e = e || window.event; + var target = e.target || e.srcElement; + + if (qq.hasClass(target, self._classes.cancel)){ + qq.preventDefault(e); + + var item = target.parentNode; + self._handler.cancel(item.qqFileId); + qq.remove(item); + } + }); + } +}); + +qq.UploadDropZone = function(o){ + this._options = { + element: null, + onEnter: function(e){}, + onLeave: function(e){}, + // is not fired when leaving element by hovering descendants + onLeaveNotDescendants: function(e){}, + onDrop: function(e){} + }; + qq.extend(this._options, o); + + this._element = this._options.element; + + this._disableDropOutside(); + this._attachEvents(); +}; + +qq.UploadDropZone.prototype = { + _disableDropOutside: function(e){ + // run only once for all instances + if (!qq.UploadDropZone.dropOutsideDisabled ){ + + qq.attach(document, 'dragover', function(e){ + if (e.dataTransfer){ + e.dataTransfer.dropEffect = 'none'; + e.preventDefault(); + } + }); + + qq.UploadDropZone.dropOutsideDisabled = true; + } + }, + _attachEvents: function(){ + var self = this; + + qq.attach(self._element, 'dragover', function(e){ + if (!self._isValidFileDrag(e)) return; + + var effect = e.dataTransfer.effectAllowed; + if (effect == 'move' || effect == 'linkMove'){ + e.dataTransfer.dropEffect = 'move'; // for FF (only move allowed) + } else { + e.dataTransfer.dropEffect = 'copy'; // for Chrome + } + + e.stopPropagation(); + e.preventDefault(); + }); + + qq.attach(self._element, 'dragenter', function(e){ + if (!self._isValidFileDrag(e)) return; + + self._options.onEnter(e); + }); + + qq.attach(self._element, 'dragleave', function(e){ + if (!self._isValidFileDrag(e)) return; + + self._options.onLeave(e); + + var relatedTarget = document.elementFromPoint(e.clientX, e.clientY); + // do not fire when moving a mouse over a descendant + if (qq.contains(this, relatedTarget)) return; + + self._options.onLeaveNotDescendants(e); + }); + + qq.attach(self._element, 'drop', function(e){ + if (!self._isValidFileDrag(e)) return; + + e.preventDefault(); + self._options.onDrop(e); + }); + }, + _isValidFileDrag: function(e){ + var dt = e.dataTransfer, + // do not check dt.types.contains in webkit, because it crashes safari 4 + isWebkit = navigator.userAgent.indexOf("AppleWebKit") > -1; + + // dt.effectAllowed is none in Safari 5 + // dt.types.contains check is for firefox + return dt && dt.effectAllowed != 'none' && + (dt.files || (!isWebkit && dt.types.contains && dt.types.contains('Files'))); + + } +}; + +qq.UploadButton = function(o){ + this._options = { + element: null, + // if set to true adds multiple attribute to file input + multiple: false, + // name attribute of file input + name: 'file', + onChange: function(input){}, + hoverClass: 'qq-upload-button-hover', + focusClass: 'qq-upload-button-focus' + }; + + qq.extend(this._options, o); + + this._element = this._options.element; + + // make button suitable container for input + qq.css(this._element, { + position: 'relative', + overflow: 'hidden', + // Make sure browse button is in the right side + // in Internet Explorer + direction: 'ltr' + }); + + this._input = this._createInput(); +}; + +qq.UploadButton.prototype = { + /* returns file input element */ + getInput: function(){ + return this._input; + }, + /* cleans/recreates the file input */ + reset: function(){ + if (this._input.parentNode){ + qq.remove(this._input); + } + + qq.removeClass(this._element, this._options.focusClass); + this._input = this._createInput(); + }, + _createInput: function(){ + var input = document.createElement("input"); + + if (this._options.multiple){ + input.setAttribute("multiple", "multiple"); + } + + input.setAttribute("type", "file"); + input.setAttribute("name", this._options.name); + + qq.css(input, { + position: 'absolute', + // in Opera only 'browse' button + // is clickable and it is located at + // the right side of the input + right: 0, + top: 0, + fontFamily: 'Arial', + // 4 persons reported this, the max values that worked for them were 243, 236, 236, 118 + fontSize: '118px', + margin: 0, + padding: 0, + cursor: 'pointer', + opacity: 0 + }); + + this._element.appendChild(input); + + var self = this; + qq.attach(input, 'change', function(){ + self._options.onChange(input); + }); + + qq.attach(input, 'mouseover', function(){ + qq.addClass(self._element, self._options.hoverClass); + }); + qq.attach(input, 'mouseout', function(){ + qq.removeClass(self._element, self._options.hoverClass); + }); + qq.attach(input, 'focus', function(){ + qq.addClass(self._element, self._options.focusClass); + }); + qq.attach(input, 'blur', function(){ + qq.removeClass(self._element, self._options.focusClass); + }); + + // IE and Opera, unfortunately have 2 tab stops on file input + // which is unacceptable in our case, disable keyboard access + if (window.attachEvent){ + // it is IE or Opera + input.setAttribute('tabIndex', "-1"); + } + + return input; + } +}; + +/** + * Class for uploading files, uploading itself is handled by child classes + */ +qq.UploadHandlerAbstract = function(o){ + this._options = { + debug: false, + action: '/upload.php', + // maximum number of concurrent uploads + maxConnections: 999, + onProgress: function(id, fileName, loaded, total){}, + onComplete: function(id, fileName, response){}, + onCancel: function(id, fileName){} + }; + qq.extend(this._options, o); + + this._queue = []; + // params for files in queue + this._params = []; +}; +qq.UploadHandlerAbstract.prototype = { + log: function(str){ + if (this._options.debug && window.console) console.log('[uploader] ' + str); + }, + /** + * Adds file or file input to the queue + * @returns id + **/ + add: function(file){}, + /** + * Sends the file identified by id and additional query params to the server + */ + upload: function(id, params){ + var len = this._queue.push(id); + + var copy = {}; + qq.extend(copy, params); + this._params[id] = copy; + + // if too many active uploads, wait... + if (len <= this._options.maxConnections){ + this._upload(id, this._params[id]); + } + }, + /** + * Cancels file upload by id + */ + cancel: function(id){ + this._cancel(id); + this._dequeue(id); + }, + /** + * Cancells all uploads + */ + cancelAll: function(){ + for (var i=0; i= max && i < max){ + var nextId = this._queue[max-1]; + this._upload(nextId, this._params[nextId]); + } + } +}; + +/** + * Class for uploading files using form and iframe + * @inherits qq.UploadHandlerAbstract + */ +qq.UploadHandlerForm = function(o){ + qq.UploadHandlerAbstract.apply(this, arguments); + + this._inputs = {}; +}; +// @inherits qq.UploadHandlerAbstract +qq.extend(qq.UploadHandlerForm.prototype, qq.UploadHandlerAbstract.prototype); + +qq.extend(qq.UploadHandlerForm.prototype, { + add: function(fileInput){ + fileInput.setAttribute('name', 'qqfile'); + var id = 'qq-upload-handler-iframe' + qq.getUniqueId(); + + this._inputs[id] = fileInput; + + // remove file input from DOM + if (fileInput.parentNode){ + qq.remove(fileInput); + } + + return id; + }, + getName: function(id){ + // get input value and remove path to normalize + return this._inputs[id].value.replace(/.*(\/|\\)/, ""); + }, + _cancel: function(id){ + this._options.onCancel(id, this.getName(id)); + + delete this._inputs[id]; + + var iframe = document.getElementById(id); + if (iframe){ + // to cancel request set src to something else + // we use src="javascript:false;" because it doesn't + // trigger ie6 prompt on https + iframe.setAttribute('src', 'javascript:false;'); + + qq.remove(iframe); + } + }, + _upload: function(id, params){ + var input = this._inputs[id]; + + if (!input){ + throw new Error('file with passed id was not added, or already uploaded or cancelled'); + } + + var fileName = this.getName(id); + + var iframe = this._createIframe(id); + var form = this._createForm(iframe, params); + form.appendChild(input); + + var self = this; + this._attachLoadEvent(iframe, function(){ + self.log('iframe loaded'); + + var response = self._getIframeContentJSON(iframe); + + self._options.onComplete(id, fileName, response); + self._dequeue(id); + + delete self._inputs[id]; + // timeout added to fix busy state in FF3.6 + setTimeout(function(){ + qq.remove(iframe); + }, 1); + }); + + form.submit(); + qq.remove(form); + + return id; + }, + _attachLoadEvent: function(iframe, callback){ + qq.attach(iframe, 'load', function(){ + // when we remove iframe from dom + // the request stops, but in IE load + // event fires + if (!iframe.parentNode){ + return; + } + + // fixing Opera 10.53 + if (iframe.contentDocument && + iframe.contentDocument.body && + iframe.contentDocument.body.innerHTML == "false"){ + // In Opera event is fired second time + // when body.innerHTML changed from false + // to server response approx. after 1 sec + // when we upload file with iframe + return; + } + + callback(); + }); + }, + /** + * Returns json object received by iframe from server. + */ + _getIframeContentJSON: function(iframe){ + // iframe.contentWindow.document - for IE<7 + var doc = iframe.contentDocument ? iframe.contentDocument: iframe.contentWindow.document, + response; + + this.log("converting iframe's innerHTML to JSON"); + this.log("innerHTML = " + doc.body.innerHTML); + + try { + response = eval("(" + doc.body.innerHTML + ")"); + } catch(err){ + response = {}; + } + + return response; + }, + /** + * Creates iframe with unique name + */ + _createIframe: function(id){ + // We can't use following code as the name attribute + // won't be properly registered in IE6, and new window + // on form submit will open + // var iframe = document.createElement('iframe'); + // iframe.setAttribute('name', id); + + var iframe = qq.toElement('