From ac1c9d52cb8ef0b034837ece1edcdbcd4574e0a9 Mon Sep 17 00:00:00 2001 From: GRiker Date: Sat, 9 Oct 2010 06:04:48 -0700 Subject: [PATCH 01/59] GwR patch adding get_all_user_metadata() --- src/calibre/ebooks/metadata/opf2.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index 5c2477c3dc..dadca610ae 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -529,6 +529,14 @@ class OPF(object): # {{{ self.find_toc() self.read_user_metadata() + def get_all_user_metadata(self, make_copy): + ''' + return a dict containing all the custom field metadata associated with + the book. + ''' + self.read_user_metadata() + return self._user_metadata_ + def read_user_metadata(self): self._user_metadata_ = {} temp = Metadata('x', ['x']) From cd4950b98e572215e58da8cea39cee2ab63f4fce Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 10 Oct 2010 16:17:39 -0600 Subject: [PATCH 02/59] ... --- resources/content_server/{ => browse}/browse.css | 0 resources/content_server/{ => browse}/browse.html | 4 ++-- resources/content_server/{ => browse}/browse.js | 0 src/calibre/library/server/browse.py | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename resources/content_server/{ => browse}/browse.css (100%) rename resources/content_server/{ => browse}/browse.html (93%) rename resources/content_server/{ => browse}/browse.js (100%) diff --git a/resources/content_server/browse.css b/resources/content_server/browse/browse.css similarity index 100% rename from resources/content_server/browse.css rename to resources/content_server/browse/browse.css diff --git a/resources/content_server/browse.html b/resources/content_server/browse/browse.html similarity index 93% rename from resources/content_server/browse.html rename to resources/content_server/browse/browse.html index a71fff9e22..e278c20e39 100644 --- a/resources/content_server/browse.html +++ b/resources/content_server/browse/browse.html @@ -10,14 +10,14 @@ - + - + - + - + + + diff --git a/resources/content_server/browse/browse.js b/resources/content_server/browse/browse.js index e2a8dc934a..d534ea15c1 100644 --- a/resources/content_server/browse/browse.js +++ b/resources/content_server/browse/browse.js @@ -127,3 +127,16 @@ function toplevel() { }); } // }}} + +// Category feed {{{ +function category() { + $(".category li").corner("15px"); + + $(".category li").click(function() { + var href = $(this).children("span.href").html(); + window.location = href; + }); +} +// }}} + + diff --git a/resources/content_server/star-half.png b/resources/content_server/star-half.png new file mode 100644 index 0000000000000000000000000000000000000000..3c19e90a8a755e004424db205c8433f0f63048b4 GIT binary patch literal 667 zcmV;M0%ZM(P)5kxfVxVHn4M^Ulocu4}uCxq(JO)+Y9GD5Jat zbqNy5lR|3Ugd)g`R}H!Z-82#+xHAej^Uvb`)a1J$lTNk&_XNAE zBfTQ9v_v8Sa5IxmRs3@SYh=d-l+~gM@B>A4P0dc=P9~jd$fQ$sTUl-3B9(2Y;#Z9F ziv79~Bz4_Q3b9eCYwPF+d^xg&l#+bj;nT_rzOS%t8z2j`7`B7!=X2+jXB|TV=B8-| z5I_(F*tU&nN^1AkB4vn~=}AV%Mjv-|U3#ej40jVdS&P?6I*kPtxhy74l2*jJNmZ458vW9PWLT-hGu|=LysO@uBuA(2q79M zrYCoMu8-X7>n;ia!^1;Yo0`tX3%(WvK`H*P`T^?|->M&U?OXr=002ovPDHLkV1gTF BCtCmj literal 0 HcmV?d00001 diff --git a/resources/content_server/star-off.png b/resources/content_server/star-off.png new file mode 100644 index 0000000000000000000000000000000000000000..956fa7c637cddb4db6a091556cc63a0f6a186264 GIT binary patch literal 685 zcmV;e0#f~nP)R5*>Dl0QrnVHn1Ly)Enp;##exZh7()Uk zR1!C3adKe*!lVgta&se2n3x!5BLe|s!Nt*~X-#y7B3eoUik5~%+lD(Tz0ZL^0YjVU zv%Pu#yl=keg9gZ?Q_Q(|Z0g_5!WIoz~V%6X6SCq;x5j%6#A6o&%l(m4W2o+DSkrok{@j zfS9fu_%t7u6-EyR*{?cCDbX|y$Ei}>*}-*d*tQMu1GuLQBnNZ({Kj-B6r%H5Cv9zQ z1OftQ-v&TRiEZ1cs+abw?R0hbV45b`)$HqmfpE80>NxE=6Ci}>F?0hV0tABwPH{}X=zm$k-d TM0>cp00000NkvXXu0mjfLk}+u0K@`S+@BV*_sWrqlwFo8}(kQkaqzD;A z=u{lE-2?}_II1YR)S)U)E*26HCl}q?MW=Ld6)l=U=ui@ZMFoe7jcsaT?tgaXnG9{0ZQ-FLi$F8Gk$pICVsN_6A+-I}LP#xf!zP`KEQ*A|86(eYX?Vrxqg`*m?> zyc17#YQ&Emm{YDS9%UIE2;KXq0p(YRuVBj4qCoke?8ek~ZfK?*SF$toUz&(q^LzVF zc)m+{o=z$CtKX9fo)4nH88Gx=Z0LtIJw+2pF{o}Aa&I@D_|-bv)_zWzpnQfNU|%D| z2ONlib6`yct1JCRlQx>P4J2Q!lkr}!P)`rD5RWn;!ch^BrauSPHXPUh?BDz@Ut;od zmQ4>}ahc!a2^JEAoD+yQ#m?=B%^vZad=f}S8X&Tqm1m)@;e`m!IcA(C>>M0F#2E0tt%Gn#jhcX3%^aLBZN-xDTU?LbBKJ1?Kz|Loh!06cE>#5u?R;17H*+`wdH ROO^lt002ovPDHLkV1mP{6ITEL literal 0 HcmV?d00001 diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index e058ccd4f3..fc49a92025 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -5,12 +5,122 @@ __license__ = 'GPL v3' __copyright__ = '2010, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import operator, os +import operator, os, sys +from urllib import quote +from binascii import hexlify import cherrypy from calibre.constants import filesystem_encoding from calibre import isbytestring, force_unicode, prepare_string_for_xml as xml +from calibre.library.server.utils import Offsets + +def paginate(offsets, content, base_url, up_url=None): + 'Create markup for pagination' + + if '?' not in base_url: + base_url += '?' + + if base_url[-1] != '?': + base_url += '&' + + def navlink(decoration, name, cls, offset): + label = xml(name) + if cls in ('next', 'last'): + label += ' ' + decoration + else: + label = decoration + ' ' + label + return (u'' + u'{label}').format(cls=cls, decoration=decoration, + name=xml(name, True), offset=offset, + base_url=xml(base_url, True), label=label) + left = '' + if offsets.offset > 0 and offsets.previous_offset > 0: + left += navlink(u'\u219e', _('First'), 'first', 0) + if offsets.offset > 0: + left += ' ' + navlink('←', _('Previous'), 'previous', + offsets.previous_offset) + + middle = '' + if up_url: + middle = '[{1} ↑]'.format(xml(up_url, True), + xml(_('Up'))) + + right = '' + if offsets.next_offset > -1: + right += navlink('&rarr', _('Next'), 'next', offsets.next_offset) + if offsets.last_offset > offsets.next_offset and offsets.last_offset > 0: + right += ' ' + navlink(u'\u21A0', _('Last'), 'last', offsets.last_offset) + + navbar = u''' + + + + + + + + '''.format(left=left, right=right, middle=middle) + + templ = u''' +
+ {navbar} +
+ {content} +
+ {navbar} +
+ ''' + return templ.format(navbar=navbar, content=content) + +def utf8(x): + if isinstance(x, unicode): + x = x.encode('utf-8') + return x + +def render_rating(rating, container='span'): + if rating < 0.1: + return '', '' + added = 0 + rstring = xml(_('Average rating: %.1f stars')% (rating if rating else 0.0), + True) + ans = ['<%s class="rating">' % (container)] + for i in range(5): + n = rating - added + x = 'half' + if n <= 0.1: + x = 'off' + elif n >= 0.9: + x = 'on' + ans.append( + u'{0}'.format( + rstring, x)) + added += 1 + ans.append(''%container) + return u''.join(ans), rstring + +def get_category_items(category, items, offsets, db): + + def item(i): + templ = (u'
  • ' + '

    {0}  {1}

      {2}' + '{3}
  • ') + rating, rstring = render_rating(i.avg_rating) + name = xml(i.name) + id_ = i.id + if id_ is None: + id_ = hexlify(force_unicode(name).encode('utf-8')) + id_ = xml(str(id_)) + desc = '' + if i.count > 0: + desc += '[' + _('%d items')%i.count + ']' + href = '/browse/matches/%s/%s'%(category, id_) + return templ.format(xml(name), rating, + xml(desc), xml(quote(href)), rstring) + + items = list(map(item, items[offsets.offset:offsets.slice_upper_bound])) + return '\n'.join(['
      '] + items + ['
    ']) + class BrowseServer(object): @@ -23,7 +133,6 @@ class BrowseServer(object): connect('browse_search', base_href+'/search/{query}', self.browse_search) connect('browse_book', base_href+'/book/{uuid}', self.browse_book) - connect('browse_json', base_href+'/json/{query}', self.browse_json) def browse_template(self, category=True): @@ -36,7 +145,8 @@ class BrowseServer(object): sort_opts = [(x, fm[x]['name']) for x in fm.sortable_field_keys() if fm[x]['name']] prefix = 'category' if category else 'book' - ans = P('content_server/browse/browse.html', data=True) + ans = P('content_server/browse/browse.html', + data=True).decode('utf-8') ans = ans.replace('{sort_select_label}', xml(_('Sort by')+':')) opts = ['' % (prefix, xml(k), xml(n)) for k, n in @@ -61,50 +171,102 @@ class BrowseServer(object): # Catalogs {{{ - def browse_catalog(self, category=None): - if category == None: - categories = self.categories_cache() - category_meta = self.db.field_metadata - cats = [ - (_('Newest'), 'newest'), - ] - def getter(x): - return category_meta[x]['name'].lower() - for category in sorted(categories, - cmp=lambda x,y: cmp(getter(x), getter(y))): - if len(categories[category]) == 0: - continue - if category == 'formats': - continue - meta = category_meta.get(category, None) - if meta is None: - continue - cats.append((meta['name'], category)) - cats = ['
  • {0}/browse/category/{1}
  • '.format(xml(x, True), - xml(y), xml(_('Browse books by'))) for x, y in cats] + def browse_toplevel(self): + categories = self.categories_cache() + category_meta = self.db.field_metadata + cats = [ + (_('Newest'), 'newest'), + ] - main = '

    {0}

      {1}
    '\ - .format(_('Choose a category to browse by:'), '\n\n'.join(cats)) - ans = self.browse_template().format(title='', - script='toplevel();', main=main) - else: + def getter(x): + return category_meta[x]['name'].lower() + + for category in sorted(categories, + cmp=lambda x,y: cmp(getter(x), getter(y))): + if len(categories[category]) == 0: + continue + if category == 'formats': + continue + meta = category_meta.get(category, None) + if meta is None: + continue + cats.append((meta['name'], category)) + cats = ['
  • {0}/browse/category/{1}
  • '\ + .format(xml(x, True), xml(quote(y)), xml(_('Browse books by'))) + for x, y in cats] + + main = '

    {0}

      {1}
    '\ + .format(_('Choose a category to browse by:'), '\n\n'.join(cats)) + return self.browse_template().format(title='', + script='toplevel();', main=main) + + def browse_category(self, category, offset, sort, subcategory=None): + categories = self.categories_cache() + category_meta = self.db.field_metadata + category_name = category_meta[category]['name'] + + if category not in categories: + raise cherrypy.HTTPError(404, 'category not found') + + items = categories[category] + + base_url='/browse/category/'+category+'?' + if subcategory is not None: + base_url += 'subcategory='+quote(subcategory) + if sort is not None: + base_url += 'sort='+quote(sort) + + script = 'category();' + + max_items = sys.maxint + offsets = Offsets(offset, max_items, len(items)) + items = list(items)[offsets.offset:offsets.offset+max_items] + items = get_category_items(category, items, offsets, self.db) + main = u''' +
    +

    {0}

    +

    [{2} ↑] +

    + {1} +
    + '''.format( + xml(_('Browsing by')+': ' + category_name), items, + xml(_('Up'), True)) + + return self.browse_template().format(title=category_name, + script=script, main=main) + + + + def browse_catalog(self, category=None, offset=0, sort=None, + subcategory=None): + 'Entry point for top-level, categories and sub-categories' + try: + offset = int(offset) + except: raise cherrypy.HTTPError(404, 'Not found') + if category == None: + ans = self.browse_toplevel() + else: + ans = self.browse_category(category, offset, sort) + cherrypy.response.headers['Content-Type'] = 'text/html' updated = self.db.last_modified() cherrypy.response.headers['Last-Modified'] = \ self.last_modified(max(updated, self.build_time)) - return ans + return utf8(ans) # }}} # Book Lists {{{ - def browse_list(self, query=None): + def browse_list(self, query=None, offset=0, sort=None): raise NotImplementedError() # }}} # Search {{{ - def browse_search(self, query=None): + def browse_search(self, query=None, offset=0, sort=None): raise NotImplementedError() # }}} @@ -113,8 +275,4 @@ class BrowseServer(object): raise NotImplementedError() # }}} - # JSON {{{ - def browse_json(self, query=None): - raise NotImplementedError() - # }}} diff --git a/src/calibre/library/server/utils.py b/src/calibre/library/server/utils.py index 4c286b555b..35c92f7ae2 100644 --- a/src/calibre/library/server/utils.py +++ b/src/calibre/library/server/utils.py @@ -23,6 +23,7 @@ class Offsets(object): raise cherrypy.HTTPError(404, 'Invalid offset: %r'%offset) last_allowed_index = total - 1 last_current_index = offset + delta - 1 + self.slice_upper_bound = offset+delta self.offset = offset self.next_offset = last_current_index + 1 if self.next_offset > last_allowed_index: From a5f2c1fbb1f429acbd11ca56eb1d3025914e10da Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 13 Oct 2010 15:11:06 -0600 Subject: [PATCH 41/59] Fix #7168 (unhandled exception when changing cover picture) --- src/calibre/gui2/convert/metadata.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/calibre/gui2/convert/metadata.py b/src/calibre/gui2/convert/metadata.py index b206bf68a6..7a02cf4429 100644 --- a/src/calibre/gui2/convert/metadata.py +++ b/src/calibre/gui2/convert/metadata.py @@ -172,7 +172,7 @@ class MetadataWidget(Widget, Ui_Form): if _file: _file = os.path.abspath(_file) if not os.access(_file, os.R_OK): - d = error_dialog(self.window, _('Cannot read'), + d = error_dialog(self.parent(), _('Cannot read'), _('You do not have permission to read the file: ') + _file) d.exec_() return @@ -181,14 +181,14 @@ class MetadataWidget(Widget, Ui_Form): cf = open(_file, "rb") cover = cf.read() except IOError, e: - d = error_dialog(self.window, _('Error reading file'), + d = error_dialog(self.parent(), _('Error reading file'), _("

    There was an error reading from file:
    ") + _file + "


    "+str(e)) d.exec_() if cover: pix = QPixmap() pix.loadFromData(cover) if pix.isNull(): - d = error_dialog(self.window, _('Error reading file'), + d = error_dialog(self.parent(), _('Error reading file'), _file + _(" is not a valid picture")) d.exec_() else: From 4f031e05dd23223a9f7bbfead2a4dd7cac20e4d2 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 13 Oct 2010 18:47:46 -0600 Subject: [PATCH 42/59] Sorting for CS category views --- resources/content_server/browse/browse.html | 7 +- resources/content_server/browse/browse.js | 146 +++++++----------- .../content_server/jquery.multiselect.css | 21 +++ .../content_server/jquery.multiselect.min.js | 16 ++ src/calibre/library/server/browse.py | 118 +++++++++----- 5 files changed, 173 insertions(+), 135 deletions(-) create mode 100644 resources/content_server/jquery.multiselect.css create mode 100644 resources/content_server/jquery.multiselect.min.js diff --git a/resources/content_server/browse/browse.html b/resources/content_server/browse/browse.html index 1258088741..b5c208fd46 100644 --- a/resources/content_server/browse/browse.html +++ b/resources/content_server/browse/browse.html @@ -12,17 +12,22 @@ + + diff --git a/resources/content_server/browse/browse.js b/resources/content_server/browse/browse.js index 905b600322..c2d942efab 100644 --- a/resources/content_server/browse/browse.js +++ b/resources/content_server/browse/browse.js @@ -95,7 +95,7 @@ function category() { window.location = href; }); - $(".category a.navlink").button({ primary: 'ui-icon-arrow-1-n'}); + $(".category a.navlink").button(); } // }}} diff --git a/resources/content_server/jquery_ui/css/humanity-custom/images/ui-bg_flat_75_aaaaaa_40x100.png b/resources/content_server/jquery_ui/css/humanity-custom/images/ui-bg_flat_75_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/resources/content_server/jquery_ui/css/humanity-custom/images/ui-bg_glass_100_f5f0e5_1x400.png b/resources/content_server/jquery_ui/css/humanity-custom/images/ui-bg_glass_100_f5f0e5_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..688c2f3e8806f3afcc0b659d397d142ee4a0bb1c GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAGVZ#9R3S1yVd+978O6-(EE2I&2`|a&dor zn8LpQws$p8OzfO3V%e~f#q0BpwPkHfr@d8n;J+1T@Kk-4oVon+?9YosV?K4Y1e?D1 zs@@-9Jjqz`Hmt(*75f0D)F-JJVxa8Kd#rie_?PKtC^>bP0 Hl+XkK#L_u` literal 0 HcmV?d00001 diff --git a/resources/content_server/jquery_ui/css/humanity-custom/images/ui-bg_glass_25_cb842e_1x400.png b/resources/content_server/jquery_ui/css/humanity-custom/images/ui-bg_glass_25_cb842e_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..cabc6a964db6f3249e44f544e7970b295b492183 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq&z)c978O6-=0_GYj6;7zIfl> z{Bes+Z?i(7w%Aq;8&1j3la`r2y|G=>;j+p8)EIRq15P2qqe~3LCLIb%eAIQmB}H`p e{LER;dZjns;J6a8{m*5fp$wj`elF{r5}E*dLM)pA literal 0 HcmV?d00001 diff --git a/resources/content_server/jquery_ui/css/humanity-custom/images/ui-bg_glass_70_ede4d4_1x400.png b/resources/content_server/jquery_ui/css/humanity-custom/images/ui-bg_glass_70_ede4d4_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..779ef0d0e24ce761cdbf952b5f1db4c80face3fe GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq+C2*978O6-=0_GI$$8u{Lp^q zf7$AWm7QHq4}Ei%X4Un~=od&jRJp~-f#c!!GZza*BQ7zQe>!w*!){Z@V@~lu1f43L ZGQIlG{q(*7ZyC@$22WQ%mvv4FO#pkXEp7k+ literal 0 HcmV?d00001 diff --git a/resources/content_server/jquery_ui/css/humanity-custom/images/ui-bg_highlight-hard_100_f4f0ec_1x100.png b/resources/content_server/jquery_ui/css/humanity-custom/images/ui-bg_highlight-hard_100_f4f0ec_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..8766f00183abc559eeaa61766dc0401ba19de22c GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l%A)HV~E7m5FH&+JoXP|@hd!f^Go?6iA_FS-MDGI+ZBxvXMZJAC$8GnU0<<-ano)i%lSMBf^9780g&YfV$*X+Qi{M=B2PZvC@% qQ`Wu?mFM1dqC1Ot*w3`iJS6V%TOd*5`~fGR`3#<}elF{r5}E)^Gc&~i literal 0 HcmV?d00001 diff --git a/resources/content_server/jquery_ui/css/pepper-grinder/images/ui-icons_8c291d_256x240.png b/resources/content_server/jquery_ui/css/humanity-custom/images/ui-icons_c47a23_256x240.png similarity index 94% rename from resources/content_server/jquery_ui/css/pepper-grinder/images/ui-icons_8c291d_256x240.png rename to resources/content_server/jquery_ui/css/humanity-custom/images/ui-icons_c47a23_256x240.png index 961c8fea3bd431af0918d53a6ff55f8f8bfd014e..2e77966d429388240068a60115c22c288b4336cc 100644 GIT binary patch delta 267 tcmaE@`C4;=X8n;Wm4QU{^tJx6UEwnZ1_r;9AirP+2>~OP&FYLtgaND-cUu4e delta 267 tcmaE@`C4;=W_^#A%s`@g`dYsx?r9kV1A|{lkY6x^gn$vtW_89R!T<>SO4tAZ diff --git a/resources/content_server/jquery_ui/css/pepper-grinder/images/ui-icons_3572ac_256x240.png b/resources/content_server/jquery_ui/css/humanity-custom/images/ui-icons_cb672b_256x240.png similarity index 92% rename from resources/content_server/jquery_ui/css/pepper-grinder/images/ui-icons_3572ac_256x240.png rename to resources/content_server/jquery_ui/css/humanity-custom/images/ui-icons_cb672b_256x240.png index 6127bb0c84991c92d688df5e5d65e4fd9f67ee64..b75ecdabd116ba5934db42fc78595081d146fe84 100644 GIT binary patch delta 267 ucmbQJG*M}SX8oBooq8`fx)jN$S;^dLcoY+vpVAuVE`p{RCfRX diff --git a/resources/content_server/jquery_ui/css/pepper-grinder/images/ui-icons_222222_256x240.png b/resources/content_server/jquery_ui/css/humanity-custom/images/ui-icons_f35f07_256x240.png similarity index 92% rename from resources/content_server/jquery_ui/css/pepper-grinder/images/ui-icons_222222_256x240.png rename to resources/content_server/jquery_ui/css/humanity-custom/images/ui-icons_f35f07_256x240.png index b273ff111d219c9b9a8b96d57683d0075fb7871a..3ecc7d27eca0698af2545242426498322f5b1bd8 100644 GIT binary patch delta 267 tcmbQJG*M}SX8o5qmVrd|^tJwWoM`|91A|{lkY6x^gn$vtW_89_`~cyMa!mjL delta 267 tcmbQJG*M}SX1$7%%0Qxe`da_taEAy31A|{lkY6x^gn$vtW_89_`~Y0{DhdDq diff --git a/resources/content_server/jquery_ui/css/pepper-grinder/images/ui-icons_fbdb93_256x240.png b/resources/content_server/jquery_ui/css/humanity-custom/images/ui-icons_ff7519_256x240.png similarity index 92% rename from resources/content_server/jquery_ui/css/pepper-grinder/images/ui-icons_fbdb93_256x240.png rename to resources/content_server/jquery_ui/css/humanity-custom/images/ui-icons_ff7519_256x240.png index 95c4a66f6679511ccf8a96c5af8521308cd276f7..544517142205f1adfc22b44eda10028e10abd42c 100644 GIT binary patch delta 267 ucmbQJG*M}SR(+YwpMga6bhVyYbLmzF1_r;9AirP+2>~M(j?Eg3FZluEhJtDU delta 267 vcmbQJG*M}SR{gChe+ClO)7AQ|C-ZX|7#RFYg8YIRBm|6DI5ulAzT^i0pf4C3?CzhDc0JKJ$6{&+`X>Kwab5 zhnIh~*(4mEedg>kG!R_;;_~ls9v=g?`3ods6n81H0fCwXbFAU6l{!2g43UOyR}J{| z7`98zK74U*<0H3{`O4bIq-pk)l6u6{1-oD!Mf4d3(AzhDc29op6x%fB^@yf9%QM z{Re#BDR+hhPC9UU0W&iLo6bq^=QXdyQl_0K2;A-SD=K|QRt1B~#_kS@M@irBe=PC& gIq&W2D1jfWR=PQ7Y?df{1C3?yboFyt=akR{0BZLyAOHXW diff --git a/resources/content_server/jquery_ui/css/pepper-grinder/images/ui-bg_fine-grain_10_eceadf_60x60.png b/resources/content_server/jquery_ui/css/pepper-grinder/images/ui-bg_fine-grain_10_eceadf_60x60.png deleted file mode 100644 index 46567420785a91503f30de00eec3a331cd4a969e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4429 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 ncXnGA{OfOX&WZaj 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 b8Sj4sJ%r;G6~R8400000NkvXXu0mjfnlArE diff --git a/resources/content_server/jquery_ui/css/pepper-grinder/images/ui-bg_fine-grain_15_ffffff_60x60.png b/resources/content_server/jquery_ui/css/pepper-grinder/images/ui-bg_fine-grain_15_ffffff_60x60.png deleted file mode 100644 index 19ab46c3f875f352230abdd8a2a651003b8b83b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3716 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 Qe{7QJJu=d+)_fWIKRK1dSpWb4 diff --git a/resources/content_server/jquery_ui/css/pepper-grinder/images/ui-bg_fine-grain_68_b83400_60x60.png b/resources/content_server/jquery_ui/css/pepper-grinder/images/ui-bg_fine-grain_68_b83400_60x60.png deleted file mode 100644 index 3f3639b490c47377b4a7bf6f57d52883ddda9cce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8306 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

    ! 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 R#}izLrLL?4d#h+0@gK7EGZp{< diff --git a/resources/content_server/jquery_ui/js/jquery-ui-1.8.5.custom.min.js b/resources/content_server/jquery_ui/js/jquery-ui-1.8.5.custom.min.js index 827b5f05ba..b63fe5cf60 100644 --- a/resources/content_server/jquery_ui/js/jquery-ui-1.8.5.custom.min.js +++ b/resources/content_server/jquery_ui/js/jquery-ui-1.8.5.custom.min.js @@ -63,210 +63,6 @@ a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_ b.left=d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0]; b.left+=a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d= c(b),g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); -;/* - * jQuery UI Draggable 1.8.5 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Draggables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== -"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= -this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top- -this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions(); -d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis|| -this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode)return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element, -b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this== -a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]|| -0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0], -this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top- -(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment== -"parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&& -a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"), -10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0], -this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft(): -f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.leftthis.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])?g:!(g-this.offset.click.topthis.containment[2])?e:!(e-this.offset.click.left').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})},stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options; -if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!= -"HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e=j&&f<=l||h>=j&&h<=l||fl)&&(e>= -i&&e<=k||g>=i&&g<=k||ek);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), -top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= -this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", -nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== -String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection(); -this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){e(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()}; -if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(), -d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset= -this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio: -this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize", -b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height; -f={width:c.size.width-(f?0:c.sizeDiff.width),height:c.size.height-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop", -b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top= -a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidthb.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height, -k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+ -a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this, -arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable, -{version:"1.8.5"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize, -function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n= -(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition= -false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left- -a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize", -b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top", -"Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset, -f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left= -a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+ -a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&& -e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative", -height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width= -d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery); -;/* - * jQuery UI Selectable 1.8.5 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Selectables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"), -selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("

    ")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, -c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting", -c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d= -this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){this.containerCache={};this.element.addClass("ui-sortable"); -this.refresh();this.floating=this.items.length?/left|right/.test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a==="disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this, -arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem= -c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset, -{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment(); -if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start", -a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute"); -if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a, -c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]== -document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp();this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate", -null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem): -d(this.domPosition.parent).prepend(this.currentItem);return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute|| -"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+jg&&b+la[this.floating?"width":"height"]?j:g0?"down":"up")}, -_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!= -this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a= -this.currentItem.find(":data(sortable-item)"),b=0;b=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable"); -if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h= -0;b--){var c=this.items[b],e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width= -this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f}, -update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b= -null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this)); -this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-f)this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])? -g:!(g-this.offset.click.topthis.containment[2])?f:!(f-this.offset.click.left=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive", -g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over= -0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",a,this._uiHash());for(e=0;e").addClass("ui-autocomplete").appendTo(e(this.options.appendTo||"body",b)[0]).mousedown(function(c){var d=a.menu.element[0]; -c.target===d&&setTimeout(function(){e(document).one("mousedown",function(f){f.target!==a.element[0]&&f.target!==d&&!e.ui.contains(d,f.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,d){d=d.item.data("item.autocomplete");false!==a._trigger("focus",null,{item:d})&&/^key/.test(c.originalEvent.type)&&a.element.val(d.value)},selected:function(c,d){d=d.item.data("item.autocomplete");var f=a.previous;if(a.element[0]!==b.activeElement){a.element.focus(); -a.previous=f}if(false!==a._trigger("select",c,{item:d})){a.term=d.value;a.element.val(d.value)}a.close(c);a.selectedItem=d},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");e.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"); -this.menu.element.remove();e.Widget.prototype.destroy.call(this)},_setOption:function(a,b){e.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(e(b||"body",this.element[0].ownerDocument)[0])},_initSource:function(){var a=this,b,c;if(e.isArray(this.options.source)){b=this.options.source;this.source=function(d,f){f(e.ui.autocomplete.filter(b,d.term))}}else if(typeof this.options.source==="string"){c=this.options.source;this.source= -function(d,f){a.xhr&&a.xhr.abort();a.xhr=e.getJSON(c,d,function(g,i,h){h===a.xhr&&f(g);a.xhr=null})}}else this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length").data("item.autocomplete",b).append(e("
    ").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});e.extend(e.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}, -filter:function(a,b){var c=new RegExp(e.ui.autocomplete.escapeRegex(b),"i");return e.grep(a,function(d){return c.test(d.label||d.value||d)})}})})(jQuery); -(function(e){e.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(b){if(e(b.target).closest(".ui-menu-item a").length){b.preventDefault();a.select(b)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", --1).mouseenter(function(b){a.activate(b,e(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.attr("scrollTop"),f=this.element.height();if(c<0)this.element.attr("scrollTop",d+c);else c>=f&&this.element.attr("scrollTop",d+c-f+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:b})}, -deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0); -a.length?this.activate(c,a):this.activate(c,this.element.children(b))}else this.activate(c,this.element.children(b))},nextPage:function(a){if(this.hasScroll())if(!this.active||this.last())this.activate(a,this.element.children(":first"));else{var b=this.active.offset().top,c=this.element.height(),d=this.element.children("li").filter(function(){var f=e(this).offset().top-b-c+e(this).height();return f<10&&f>-10});d.length||(d=this.element.children(":last"));this.activate(a,d)}else this.activate(a,this.element.children(!this.active|| -this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(":last"));else{var b=this.active.offset().top,c=this.element.height();result=this.element.children("li").filter(function(){var d=e(this).offset().top-b+c-e(this).height();return d<10&&d>-10});result.length||(result=this.element.children(":first"));this.activate(a,result)}else this.activate(a,this.element.children(!this.active||this.first()?":last":":first"))}, -hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("");d.secondary&&b.append("");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary"); this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}});a.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset");this._init()},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":visible").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end().end()}, destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery); -;/* - * jQuery UI Dialog 1.8.5 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function(c,j){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title"); -if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",f=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
    ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog", -"aria-labelledby":f}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var e=(a.uiDialogTitlebar=c("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i); -return false}).appendTo(e);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id",f).html(d).prependTo(e);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;e.find("*").add(e).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&& -g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog"); -b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,f=d.options;if(f.modal&&!a||!f.stack&&!f.modal)return d._trigger("focus",b);if(f.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ= -f.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show); -a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(f){if(f.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),e=g.filter(":first");g=g.filter(":last");if(f.target===g[0]&&!f.shiftKey){e.focus(1);return false}else if(f.target===e[0]&&f.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false, -f=c("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
    ").addClass("ui-dialog-buttonset").appendTo(f);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(e,h){h=c.isFunction(h)?{click:h,text:e}:h;e=c("",h).unbind("click").click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&e.button()});f.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(e){return{position:e.position, -offset:e.offset}}var b=this,d=b.options,f=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(e,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",e,a(h))},drag:function(e,h){b._trigger("drag",e,a(h))},stop:function(e,h){d.position=[h.position.left-f.scrollLeft(),h.position.top-f.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g); -b._trigger("dragStop",e,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}a=a===j?this.options.resizable:a;var d=this,f=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:d._minHeight(), -handles:a,start:function(e,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",e,b(h))},resize:function(e,h){d._trigger("resize",e,b(h))},stop:function(e,h){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();d._trigger("resizeStop",e,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight, -a.height)},_position:function(a){var b=[],d=[0,0],f;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,e){if(+b[g]===b[g]){d[g]=b[g];b[g]=e}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a); -f||this.uiDialog.hide()},_setOption:function(a,b){var d=this,f=d.uiDialog,g=f.is(":data(resizable)"),e=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);e=true;break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":f.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case "draggable":b? -d._makeDraggable():f.draggable("destroy");break;case "height":e=true;break;case "maxHeight":g&&f.resizable("option","maxHeight",b);e=true;break;case "maxWidth":g&&f.resizable("option","maxWidth",b);e=true;break;case "minHeight":g&&f.resizable("option","minHeight",b);e=true;break;case "minWidth":g&&f.resizable("option","minWidth",b);e=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&f.resizable("destroy");g&&typeof b==="string"&&f.resizable("option","handles",b);!g&&b!==false&& -d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break;case "width":e=true;break}c.Widget.prototype._setOption.apply(d,arguments);e&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:c.support.minHeight?"auto":Math.max(a.minHeight- -b,0)}:{minHeight:0,height:Math.max(a.height-b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.5",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","), -function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a, -b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a");if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}else this.range=d("
    ");this.range.appendTo(this.element).addClass("ui-slider-range");if(b.range==="min"||b.range==="max")this.range.addClass("ui-slider-range-"+b.range);this.range.addClass("ui-widget-header")}d(".ui-slider-handle",this.element).length===0&&d("").appendTo(this.element).addClass("ui-slider-handle"); -if(b.values&&b.values.length)for(;d(".ui-slider-handle",this.element).length").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur(); -else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),h,g,i;if(!a.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e= -false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");h=a._start(c,f);if(h===false)return}break}i=a.options.step;h=a.options.values&&a.options.values.length?(g=a.values(f)):(g=a.value());switch(c.keyCode){case d.ui.keyCode.HOME:g=a._valueMin();break;case d.ui.keyCode.END:g=a._valueMax();break;case d.ui.keyCode.PAGE_UP:g=a._trimAlignValue(h+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:g=a._trimAlignValue(h-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(h=== -a._valueMax())return;g=a._trimAlignValue(h+i);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(h===a._valueMin())return;g=a._trimAlignValue(h-i);break}a._slide(c,f,g);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(c,e);a._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"); -this._mouseDestroy();return this},_mouseCapture:function(a){var b=this.options,c,e,f,h,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});e=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(i){var j=Math.abs(c-h.values(i));if(e>j){e=j;f=d(this);g=i}});if(b.range===true&&this.values(1)===b.min){g+=1;f=d(this.handles[g])}if(this._start(a, -g)===false)return false;this._mouseSliding=true;h._handleIndex=g;f.addClass("ui-state-active").focus();b=f.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-f.width()/2,top:a.pageY-b.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b= -this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b= -this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b); -c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var e;if(this.options.values&&this.options.values.length){e=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>e||b===1&&c1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;fthis._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=a%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a= -this.options.range,b=this.options,c=this,e=!this._animateOff?b.animate:false,f,h={},g,i,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(k){f=(c.values(k)-c._valueMin())/(c._valueMax()-c._valueMin())*100;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](h,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(k===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},b.animate);if(k===1)c.range[e?"animate":"css"]({width:f- -g+"%"},{queue:false,duration:b.animate})}else{if(k===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},b.animate);if(k===1)c.range[e?"animate":"css"]({height:f-g+"%"},{queue:false,duration:b.animate})}g=f});else{i=this.value();j=this._valueMin();l=this._valueMax();f=l!==j?(i-j)/(l-j)*100:0;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](h,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"}, -b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.5"})})(jQuery); -;/* - * jQuery UI Tabs 1.8.5 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Tabs - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
    ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
  • #{label}
  • "},_create:function(){this._tabify(true)},_setOption:function(a,e){if(a=="selected")this.options.collapsible&& -e==this.options.selected||this.select(e);else{this.options[a]=e;this._tabify()}},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var a=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[a].concat(d.makeArray(arguments)))},_ui:function(a,e){return{tab:a,panel:e,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var a= -d(this);a.html(a.data("label.tabs")).removeData("label.tabs")})},_tabify:function(a){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var b=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]|| -(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))b.panels=b.panels.add(b._sanitizeSelector(i));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=b._tabId(f);f.href="#"+i;f=d("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(b.panels[g-1]||b.list);f.data("destroy.tabs",true)}b.panels=b.panels.add(f)}else c.disabled.push(g)});if(a){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); -this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(b._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected= -this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return b.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); -if(c.selected>=0&&this.anchors.length){this.panels.eq(c.selected).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");b.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[c.selected],b.panels[c.selected]))});this.load(c.selected)}d(window).bind("unload",function(){b.lis.add(b.anchors).unbind(".tabs");b.lis=b.anchors=b.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[c.collapsible?"addClass": -"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);a=0;for(var j;j=this.lis[a];a++)d(j)[d.inArray(a,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs", -function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);b._trigger("show", -null,b._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");b._trigger("show",null,b._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){b.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);b.element.dequeue("tabs")})}:function(g,f){b.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");b.element.dequeue("tabs")};this.anchors.bind(c.event+".tabs", -function(){var g=this,f=d(g).closest("li"),i=b.panels.filter(":not(.ui-tabs-hide)"),l=d(b._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||b.panels.filter(":animated").length||b._trigger("select",null,b._ui(this,l[0]))===false){this.blur();return false}c.selected=b.anchors.index(this);b.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=-1;c.cookie&&b._cookie(c.selected,c.cookie);b.element.queue("tabs", -function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&b._cookie(c.selected,c.cookie);b.element.queue("tabs",function(){r(g,l)});b.load(b.anchors.index(this));this.blur();return false}c.cookie&&b._cookie(c.selected,c.cookie);if(l.length){i.length&&b.element.queue("tabs",function(){s(g,i)});b.element.queue("tabs",function(){r(g,l)});b.load(b.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs", -function(){return false})},_getIndex:function(a){if(typeof a=="string")a=this.anchors.index(this.anchors.filter("[href$="+a+"]"));return a},destroy:function(){var a=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=d.data(this,"href.tabs");if(e)this.href= -e;var b=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){b.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});a.cookie&&this._cookie(null,a.cookie);return this},add:function(a,e,b){if(b===p)b=this.anchors.length; -var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,a).replace(/#\{label\}/g,e));a=!a.indexOf("#")?a.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=d("#"+a);j.length||(j=d(h.panelTemplate).attr("id",a).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(b>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[b]); -j.insertBefore(this.panels[b])}h.disabled=d.map(h.disabled,function(k){return k>=b?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[b],this.panels[b]));return this},remove:function(a){a=this._getIndex(a);var e=this.options,b=this.lis.eq(a).remove(),c=this.panels.eq(a).remove(); -if(b.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(a+(a+1=a?--h:h});this._tabify();this._trigger("remove",null,this._ui(b.find("a")[0],c[0]));return this},enable:function(a){a=this._getIndex(a);var e=this.options;if(d.inArray(a,e.disabled)!=-1){this.lis.eq(a).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(b){return b!=a});this._trigger("enable",null, -this._ui(this.anchors[a],this.panels[a]));return this}},disable:function(a){a=this._getIndex(a);var e=this.options;if(a!=e.selected){this.lis.eq(a).addClass("ui-state-disabled");e.disabled.push(a);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a]))}return this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;this.anchors.eq(a).trigger(this.options.event+".tabs");return this}, -load:function(a){a=this._getIndex(a);var e=this,b=this.options,c=this.anchors.eq(a)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(a).addClass("ui-state-processing");if(b.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(b.spinner)}this.xhr=d.ajax(d.extend({},b.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(c.hash)).html(k);e._cleanup();b.cache&&d.data(c,"cache.tabs", -true);e._trigger("load",null,e._ui(e.anchors[a],e.panels[a]));try{b.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[a],e.panels[a]));try{b.ajaxOptions.error(k,n,a,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(a, -e){this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.5"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(a,e){var b=this,c=this.options,h=b._rotate||(b._rotate=function(j){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var k=c.selected;b.select(++k')}function E(a,b){d.extend(a, -b);for(var c in b)if(b[c]==null||b[c]==G)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.5"}});var y=(new Date).getTime();d.extend(L.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){E(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]= -f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('
    ')}}, -_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&& -b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f== -""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a, -c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b), -true);this._updateDatepicker(b);this._updateAlternate(b)}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}E(a.settings,e||{});b=b&&b.constructor== -Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]); -d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}}, -_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b= -d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false; -for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target|| -a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");E(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a); -d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&& -d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=d.datepicker._getBorders(b.dpDiv);b.dpDiv.find("iframe.ui-datepicker-cover").css({left:-i[0],top:-i[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f, -h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a)).find("iframe.ui-datepicker-cover").css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){d(this).removeClass("ui-state-hover"); -this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover"); -this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);var e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"); -a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input.focus()},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(), -k=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>k&&k>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1);)a=a[b?"previousSibling":"nextSibling"]; -a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val(): -"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&& -!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth; -b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b= -this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a= -d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a, -"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b== -"object"?b.toString():b+"";if(b=="")return null;for(var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff,f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,k=c=-1,l=-1,u=-1,j=false,o=function(p){(p=z+1 --1){k=1;l=u;do{e=this._getDaysInMonth(c,k-1);if(l<=e)break;k++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,k-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=k||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24* -60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=j+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e? -"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),k= -this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),j=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=j&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a, -"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-k,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+ -n+"";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,g+k,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+r+"":f?"":''+r+"";k=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&a.currentDay?u:b;k=!h?k:this.formatDate(k,r,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
    '+(c?h:"")+(this._isInRange(a,r)?'":"")+(c?"":h)+"
    ":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;k=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),w=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var M=this._getDefaultDate(a),I="",C=0;C1)switch(D){case 0:x+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:x+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:x+=" ui-datepicker-group-middle";t="";break}x+='">'}x+='
    '+(/all|left/.test(t)&&C==0?c? -f:n:"")+(/all|right/.test(t)&&C==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,j,o,C>0||D>0,z,v)+'
    ';var A=k?'":"";for(t=0;t<7;t++){var q=(t+h)%7;A+="=5?' class="ui-datepicker-week-end"':"")+'>'+s[q]+""}x+=A+"";A=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay, -A);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;A=l?6:Math.ceil((t+A)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var O=0;O";var P=!k?"":'";for(t=0;t<7;t++){var F=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],B=q.getMonth()!=g,K=B&&!H||!F[0]||j&&qo;P+='";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+=P+""}g++;if(g>11){g=0;m++}x+="
    '+this._get(a,"weekHeader")+"
    '+this._get(a,"calculateWeek")(q)+""+(B&&!w?" ":K?''+q.getDate()+ -"":''+q.getDate()+"")+"
    "+(l?""+(i[0]>0&&D==i[1]-1?'
    ':""):"");N+=x}I+=N}I+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'': -"");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var k=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),j='
    ',o="";if(h||!k)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(j+=o+(h||!(k&&l)?" ":""));if(h||!l)j+=''+c+"";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b, -i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(j+='"}j+=this._get(a,"yearSuffix");if(u)j+=(h||!(k&&l)?" ":"")+o;j+="
    ";return j},_adjustInstDate:function(a,b,c){var e= -a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a, -"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a); -c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a, -"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker= -function(a){if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b)); -return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new L;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.5";window["DP_jQuery_"+y]=d})(jQuery); -;/* - * jQuery UI Progressbar 1.8.5 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Progressbar - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function(b,c){b.widget("ui.progressbar",{options:{value:0},min:0,max:100,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":this._value()});this.valueDiv=b("
    ").appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); -this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===c)return this._value();this._setOption("value",a);return this},_setOption:function(a,d){if(a==="value"){this.options.value=d;this._refreshValue();this._trigger("change")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.max,Math.max(this.min,a))},_refreshValue:function(){var a=this.value();this.valueDiv.toggleClass("ui-corner-right", -a===this.max).width(a+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.5"})})(jQuery); ;/* * jQuery UI Effects 1.8.5 * diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index cf848b4ced..a292db309c 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -129,7 +129,7 @@ def get_category_items(category, items, db): # {{{ class Endpoint(object): # {{{ 'Manage encoding, mime-type, last modified, cookies, etc.' - def __init__(self, mimetype='text/html', sort_type='category'): + def __init__(self, mimetype='text/html; charset=utf-8', sort_type='category'): self.mimetype = mimetype self.sort_type = sort_type self.sort_kwarg = sort_type + '_sort' @@ -272,7 +272,8 @@ class BrowseServer(object): main = u'''

    {0}

    - {2} + {2} ↑ {1}
    '''.format( From 29b91f532e89f32ec18a88cdf275533d4515d605 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 13 Oct 2010 21:59:32 -0600 Subject: [PATCH 45/59] Fix average rating calculation for rating datatype in Tag Browser incorrect --- src/calibre/library/database2.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 5bec43ab28..e9b90f37e3 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -10,6 +10,7 @@ import os, sys, shutil, cStringIO, glob, time, functools, traceback, re from itertools import repeat from math import floor from Queue import Queue +from operator import itemgetter from PyQt4.QtGui import QImage @@ -1102,20 +1103,21 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): tooltip = self.custom_column_label_map[label]['name'] datatype = cat['datatype'] + avgr = itemgetter(3) + item_not_zero_func = lambda x: x[2] > 0 if datatype == 'rating': # eliminate the zero ratings line as well as count == 0 item_not_zero_func = (lambda x: x[1] > 0 and x[2] > 0) formatter = (lambda x:u'\u2605'*int(x/2)) + avgr = itemgetter(1) elif category == 'authors': - item_not_zero_func = (lambda x: x[2] > 0) # Clean up the authors strings to human-readable form formatter = (lambda x: x.replace('|', ',')) else: - item_not_zero_func = (lambda x: x[2] > 0) formatter = (lambda x:unicode(x)) categories[category] = [Tag(formatter(r[1]), count=r[2], id=r[0], - avg=r[3], sort=r[4], + avg=avgr(r), sort=r[4], icon=icon, tooltip=tooltip) for r in data if item_not_zero_func(r)] From 31cde51c11a4fcc47657068b7009f5ae9d1da912 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 13 Oct 2010 23:54:47 -0600 Subject: [PATCH 46/59] Grouping for category views --- resources/content_server/browse/browse.css | 33 +++----- resources/content_server/browse/browse.js | 37 +++++++++ src/calibre/library/server/browse.py | 97 ++++++++++++++++++---- 3 files changed, 130 insertions(+), 37 deletions(-) diff --git a/resources/content_server/browse/browse.css b/resources/content_server/browse/browse.css index 438e9ebb8e..aa3d3be0ef 100644 --- a/resources/content_server/browse/browse.css +++ b/resources/content_server/browse/browse.css @@ -148,19 +148,6 @@ h2.library_name { padding-top: 40px; } -/* }}} */ - -/* Widgets {{{ */ - -#content .ui-widget { font-size: medium; font-family: monospace; } - -#content .ui-button, #content .ui-button-text { - padding: 0.2em 0.5em; - font-family: monospace; - line-height: 1 -} - - /* }}} */ /* Sort select {{{ */ @@ -179,7 +166,6 @@ h2.library_name { /* }}} */ - /* Search bar {{{ */ #search_box { @@ -192,7 +178,6 @@ h2.library_name { /* }}} */ - /* Top level {{{ */ .toplevel ul { list-style-type: none; @@ -220,7 +205,6 @@ h2.library_name { /* }}} */ - /* Category {{{ */ .category ul { list-style-type: none; @@ -247,16 +231,19 @@ h2.library_name { .category li.category-item h4 { display: inline } .category li.category-item span.href { display: none } -/* -.category a.navlink { - text-decoration: none; - color: inherit; +#groups span.load_href { display: none } + +#groups h3 { + font-weight: bold; + margin-top: 1ex; + padding-left: 2em; + padding-top: 0.5ex; + padding-bottom: 0.5ex; } -.category a.navlink:hover { - color: red; +#groups h3 span { + font-weight: normal } -*/ /* }}} */ diff --git a/resources/content_server/browse/browse.js b/resources/content_server/browse/browse.js index c2d942efab..692dd5e630 100644 --- a/resources/content_server/browse/browse.js +++ b/resources/content_server/browse/browse.js @@ -86,6 +86,10 @@ function toplevel() { } // }}} +function render_error(msg) { + return '

     Error: '+msg+"

    " +} + // Category feed {{{ function category() { $(".category li").corner("15px"); @@ -96,6 +100,39 @@ function category() { }); $(".category a.navlink").button(); + + $("#groups").accordion({ + collapsible: true, + active: false, + autoHeight: false, + clearStyle: true, + header: "h3", + + change: function(event, ui) { + if (ui.newContent) { + var href = ui.newContent.children("span.load_href").html(); + ui.newContent.children(".loading").show(); + if (href) { + $.ajax({ + url:href, + success: function(data) { + this.children(".loaded").html(data); + this.children(".loaded").show(); + this.children(".loading").hide(); + }, + context: ui.newContent, + dataType: "json", + timeout: 600000, //milliseconds (10 minutes) + error: function(xhr, stat, err) { + this.children(".loaded").html(render_error(stat)); + this.children(".loaded").show(); + this.children(".loading").hide(); + } + }); + } + } + } + }); } // }}} diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index a292db309c..87a6f6a9cf 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -5,7 +5,7 @@ __license__ = 'GPL v3' __copyright__ = '2010, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import operator, os +import operator, os, json from urllib import quote from binascii import hexlify @@ -13,6 +13,7 @@ import cherrypy from calibre.constants import filesystem_encoding from calibre import isbytestring, force_unicode, prepare_string_for_xml as xml +from calibre.utils.ordered_dict import OrderedDict def paginate(offsets, content, base_url, up_url=None): # {{{ 'Create markup for pagination' @@ -102,7 +103,7 @@ def render_rating(rating, container='span'): # {{{ # }}} -def get_category_items(category, items, db): # {{{ +def get_category_items(category, items, db, datatype): # {{{ def item(i): templ = (u'
  • ' @@ -110,6 +111,8 @@ def get_category_items(category, items, db): # {{{ '{3}
  • ') rating, rstring = render_rating(i.avg_rating) name = xml(i.name) + if datatype == 'rating': + name = xml(_('%d stars')%int(i.avg_rating)) id_ = i.id if id_ is None: id_ = hexlify(force_unicode(name).encode('utf-8')) @@ -164,6 +167,9 @@ class BrowseServer(object): connect('browse', base_href, self.browse_catalog) connect('browse_catalog', base_href+'/category/{category}', self.browse_catalog) + connect('browse_category_group', + base_href+'/category_group/{category}/{group}', + self.browse_category_group) connect('browse_list', base_href+'/list/{query}', self.browse_list) connect('browse_search', base_href+'/search/{query}', self.browse_search) @@ -243,32 +249,66 @@ class BrowseServer(object): return self.browse_template('name').format(title='', script='toplevel();', main=main) - def browse_category(self, category, sort): + def browse_sort_categories(self, items, sort): if sort not in ('rating', 'name', 'popularity'): sort = 'name' + def sorter(x): + ans = getattr(x, 'sort', x.name) + if hasattr(ans, 'upper'): + ans = ans.upper() + return ans + items.sort(key=sorter) + if sort == 'popularity': + items.sort(key=operator.attrgetter('count'), reverse=True) + elif sort == 'rating': + items.sort(key=operator.attrgetter('avg_rating'), reverse=True) + return sort + + def browse_category(self, category, sort): categories = self.categories_cache() category_meta = self.db.field_metadata category_name = category_meta[category]['name'] + datatype = category_meta[category]['datatype'] if category not in categories: raise cherrypy.HTTPError(404, 'category not found') items = categories[category] + sort = self.browse_sort_categories(items, sort) - name_keyg = lambda x: getattr(x, 'sort', x.name).lower() - items.sort(key=name_keyg) - if sort == 'popularity': - items.sort(key=operator.attrgetter('count'), reverse=True) - elif sort == 'rating': - items.sort(key=operator.attrgetter('avg_rating'), reverse=True) + script = 'true' - base_url='/browse/category/'+category - if sort is not None: - base_url += '?sort='+quote(sort) + if len(items) <= self.opts.max_opds_ungrouped_items: + script = 'false' + items = get_category_items(category, items, self.db, datatype) + else: + getter = lambda x: unicode(getattr(x, 'sort', x.name)) + starts = set([]) + for x in items: + val = getter(x) + if not val: + val = u'A' + starts.add(val[0].upper()) + category_groups = OrderedDict() + for x in sorted(starts): + category_groups[x] = len([y for y in items if + getter(y).upper().startswith(x)]) + items = [(u'

    {0} [{2}]

    ' + u'' + u'
    {1}
    ' + u'{3}
    ').format( + xml(s, True), + xml(_('Loading, please wait'))+'…', + unicode(c), + xml(u'/browse/category_group/%s/%s'%(category, s))) + for s, c in category_groups.items()] + items = '\n\n'.join(items) + items = u'
    \n{0}
    '.format(items) - script = 'category();' - items = get_category_items(category, items, self.db) + + script = 'category(%s);'%script + main = u'''

    {0}

    @@ -283,6 +323,35 @@ class BrowseServer(object): return self.browse_template(sort).format(title=category_name, script=script, main=main) + @Endpoint(mimetype='application/json; charset=utf-8') + def browse_category_group(self, category=None, group=None, + category_sort=None): + sort = category_sort + if sort not in ('rating', 'name', 'popularity'): + sort = 'name' + categories = self.categories_cache() + category_meta = self.db.field_metadata + datatype = category_meta[category]['datatype'] + + if category not in categories: + raise cherrypy.HTTPError(404, 'category not found') + if not group: + raise cherrypy.HTTPError(404, 'invalid group') + + items = categories[category] + entries = [] + getter = lambda x: unicode(getattr(x, 'sort', x.name)) + for x in items: + val = getter(x) + if not val: + val = u'A' + if val.upper().startswith(group): + entries.append(x) + + sort = self.browse_sort_categories(entries, sort) + entries = get_category_items(category, entries, self.db, datatype) + return json.dumps(entries, ensure_ascii=False) + @Endpoint() From e216d698783b52da452b15f52929f0bb15ec30b4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 14 Oct 2010 00:14:39 -0600 Subject: [PATCH 47/59] ... --- resources/content_server/browse/browse.css | 2 +- src/calibre/library/server/browse.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/content_server/browse/browse.css b/resources/content_server/browse/browse.css index aa3d3be0ef..824c1c5e09 100644 --- a/resources/content_server/browse/browse.css +++ b/resources/content_server/browse/browse.css @@ -236,7 +236,7 @@ h2.library_name { #groups h3 { font-weight: bold; margin-top: 1ex; - padding-left: 2em; + padding-left: 30px; padding-top: 0.5ex; padding-bottom: 0.5ex; } diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index 87a6f6a9cf..28fa7b4772 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -295,7 +295,7 @@ class BrowseServer(object): getter(y).upper().startswith(x)]) items = [(u'

    {0} [{2}]

    ' u'' - u'
    {1}
    ' + u'
    {1}{1}
    ' u'{3}
    ').format( xml(s, True), xml(_('Loading, please wait'))+'…', From 8ecad1b0d750673d9b1fe65ac10f56a1067a022f Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 14 Oct 2010 10:21:38 +0100 Subject: [PATCH 48/59] Enhancement #7172: drop on items in user categories. Also fixed a bug where the interface indicated that one could drop on a format, when you can't. --- src/calibre/gui2/tag_view.py | 46 +++++++++++++++++--------------- src/calibre/library/database2.py | 16 ++++++----- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index 8732aec63d..a71230c984 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -434,25 +434,24 @@ class TagsModel(QAbstractItemModel): # {{{ action != Qt.CopyAction: return False idx = parent - p = self.parent(idx) - if idx.isValid() and p.isValid(): - item = self.data(p, Qt.UserRole) - fm = self.db.metadata_for_field(item.category_key) - if item.category_key in \ - ('tags', 'series', 'authors', 'rating', 'publisher') or \ - (fm['is_custom'] and \ - fm['datatype'] in ['text', 'rating', 'series']): - child = self.data(idx, Qt.UserRole) - mime = 'application/calibre+from_library' - ids = list(map(int, str(md.data(mime)).split())) - self.handle_drop(item, child, ids) - return True + if idx.isValid(): + node = self.data(idx, Qt.UserRole) + if node.type == TagTreeItem.TAG: + fm = self.db.metadata_for_field(node.tag.category) + if node.tag.category in \ + ('tags', 'series', 'authors', 'rating', 'publisher') or \ + (fm['is_custom'] and \ + fm['datatype'] in ['text', 'rating', 'series']): + mime = 'application/calibre+from_library' + ids = list(map(int, str(md.data(mime)).split())) + self.handle_drop(node, ids) + return True return False - def handle_drop(self, parent, child, ids): - # print 'Dropped ids:', ids, parent.category_key, child.tag.name - key = parent.category_key + def handle_drop(self, on_node, ids): + #print 'Dropped ids:', ids, on_node.tag + key = on_node.tag.category if (key == 'authors' and len(ids) >= 5): if not confirm('

    '+_('Changing the authors for several books can ' 'take a while. Are you sure?') @@ -466,7 +465,7 @@ class TagsModel(QAbstractItemModel): # {{{ fm = self.db.metadata_for_field(key) is_multiple = fm['is_multiple'] - val = child.tag.name + val = on_node.tag.name for id in ids: mi = self.db.get_metadata(id, index_is_id=True) @@ -500,8 +499,6 @@ class TagsModel(QAbstractItemModel): # {{{ self.db.commit() self.drag_drop_finished.emit(ids) - - def set_search_restriction(self, s): self.search_restriction = s @@ -633,8 +630,15 @@ class TagsModel(QAbstractItemModel): # {{{ def flags(self, index, *args): ans = Qt.ItemIsEnabled|Qt.ItemIsSelectable|Qt.ItemIsEditable - if index.isValid() and self.parent(index).isValid(): - ans |= Qt.ItemIsDropEnabled + if index.isValid(): + node = self.data(index, Qt.UserRole) + if node.type == TagTreeItem.TAG: + fm = self.db.metadata_for_field(node.tag.category) + if node.tag.category in \ + ('tags', 'series', 'authors', 'rating', 'publisher') or \ + (fm['is_custom'] and \ + fm['datatype'] in ['text', 'rating', 'series']): + ans |= Qt.ItemIsDropEnabled return ans def supportedDropActions(self): diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 5bec43ab28..3c949fcf78 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -68,7 +68,7 @@ copyfile = os.link if hasattr(os, 'link') else shutil.copyfile class Tag(object): def __init__(self, name, id=None, count=0, state=0, avg=0, sort=None, - tooltip=None, icon=None): + tooltip=None, icon=None, category=None): self.name = name self.id = id self.count = count @@ -81,9 +81,11 @@ class Tag(object): tooltip = _('%sAverage rating is %3.1f')%(tooltip, self.avg_rating) self.tooltip = tooltip self.icon = icon + self.category = category def __unicode__(self): - return u'%s:%s:%s:%s:%s'%(self.name, self.count, self.id, self.state, self.tooltip) + return u'%s:%s:%s:%s:%s:%s'%(self.name, self.count, self.id, self.state, + self.category, self.tooltip) def __str__(self): return unicode(self).encode('utf-8') @@ -1115,8 +1117,8 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): formatter = (lambda x:unicode(x)) categories[category] = [Tag(formatter(r[1]), count=r[2], id=r[0], - avg=r[3], sort=r[4], - icon=icon, tooltip=tooltip) + avg=r[3], sort=r[4], icon=icon, + tooltip=tooltip, category=category) for r in data if item_not_zero_func(r)] # Needed for legacy databases that have multiple ratings that @@ -1148,7 +1150,8 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): WHERE format="%s"'''%fmt, all=False) if count > 0: - categories['formats'].append(Tag(fmt, count=count, icon=icon)) + categories['formats'].append(Tag(fmt, count=count, icon=icon, + category='formats')) if sort == 'popularity': categories['formats'].sort(key=lambda x: x.count, reverse=True) @@ -1194,7 +1197,8 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): if icon_map and 'search' in icon_map: icon = icon_map['search'] for srch in saved_searches().names(): - items.append(Tag(srch, tooltip=saved_searches().lookup(srch), icon=icon)) + items.append(Tag(srch, tooltip=saved_searches().lookup(srch), + icon=icon, category='search')) if len(items): if icon_map is not None: icon_map['search'] = icon_map['search'] From 082ffba6cf575a16279e90c6fb242beae073d468 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 14 Oct 2010 10:37:24 +0100 Subject: [PATCH 49/59] Restore average rating display in the icon. --- src/calibre/gui2/tag_view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index a71230c984..36d78838d3 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -29,7 +29,7 @@ class TagDelegate(QItemDelegate): # {{{ def paint(self, painter, option, index): item = index.internalPointer() - if True or item.type != TagTreeItem.TAG: + if item.type != TagTreeItem.TAG: QItemDelegate.paint(self, painter, option, index) return r = option.rect From 05cda6b7f95dcecd832827f8c6c661f8db23e8de Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 14 Oct 2010 08:24:47 -0600 Subject: [PATCH 50/59] ... --- src/calibre/gui2/viewer/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/viewer/main.py b/src/calibre/gui2/viewer/main.py index a1d3b9bea4..f0f29a67e6 100644 --- a/src/calibre/gui2/viewer/main.py +++ b/src/calibre/gui2/viewer/main.py @@ -731,8 +731,8 @@ def main(args=sys.argv): main.raise_() if opts.full_screen: main.action_full_screen.trigger() - with main: - return app.exec_() + with main: + return app.exec_() return 0 if __name__ == '__main__': From 5523da3dde513d82e6a1dbd1fd791d8671f6febe Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 14 Oct 2010 08:36:10 -0600 Subject: [PATCH 51/59] Auto expand when dropping onto Tag Browser. Only seems to work for Searches node and I dont have the time to figure out why --- src/calibre/gui2/tag_view.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index 36d78838d3..3505cc7344 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -84,6 +84,7 @@ class TagsView(QTreeView): # {{{ self.setAcceptDrops(True) self.setDragDropMode(self.DropOnly) self.setDropIndicatorShown(True) + self.setAutoExpandDelay(500) def set_database(self, db, tag_match, sort_by): self.hidden_categories = config['tag_browser_hidden_categories'] From f468fd5cf3a7feffbbb86f5363761d700591e0b4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 14 Oct 2010 09:08:42 -0600 Subject: [PATCH 52/59] Try using a table to layout category view --- resources/content_server/browse/browse.css | 15 +++++++-------- resources/content_server/browse/browse.js | 6 ++---- src/calibre/library/server/browse.py | 9 +++++---- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/resources/content_server/browse/browse.css b/resources/content_server/browse/browse.css index 824c1c5e09..7af4aeb5f4 100644 --- a/resources/content_server/browse/browse.css +++ b/resources/content_server/browse/browse.css @@ -206,30 +206,29 @@ h2.library_name { /* }}} */ /* Category {{{ */ -.category ul { - list-style-type: none; +.category table { margin: 0; padding: 0; + width: 100%; + border-collapse: collapse; } -.category li.category-item { - margin: 0.75em; +.category tr.category-item td { padding: 0.75em; text-align: center; cursor: pointer; } -.category li.category-item:hover { +.category tr.category-item:hover { background-color: #d6d3c9; - font-weight: bold; -moz-box-shadow: 5px 5px 5px #ccc; -webkit-box-shadow: 5px 5px 5px #ccc; box-shadow: 5px 5px 5px #ccc; } -.category li.category-item h4 { display: inline } -.category li.category-item span.href { display: none } +.category tr.category-item h4 { display: inline } +.category tr.category-item span.href { display: none } #groups span.load_href { display: none } diff --git a/resources/content_server/browse/browse.js b/resources/content_server/browse/browse.js index 692dd5e630..a841fb5e5d 100644 --- a/resources/content_server/browse/browse.js +++ b/resources/content_server/browse/browse.js @@ -92,10 +92,8 @@ function render_error(msg) { // Category feed {{{ function category() { - $(".category li").corner("15px"); - - $(".category li").click(function() { - var href = $(this).children("span.href").html(); + $(".category tr").click(function() { + var href = $(this).find("span.href").html(); window.location = href; }); diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index 28fa7b4772..4d860b2d0d 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -106,9 +106,10 @@ def render_rating(rating, container='span'): # {{{ def get_category_items(category, items, db, datatype): # {{{ def item(i): - templ = (u'

  • ' - '

    {0}  {1}

      {2}' - '{3}
  • ') + templ = (u'' + '

    {0}

    {1}' + '{2}' + '{3}') rating, rstring = render_rating(i.avg_rating) name = xml(i.name) if datatype == 'rating': @@ -125,7 +126,7 @@ def get_category_items(category, items, db, datatype): # {{{ xml(desc), xml(quote(href)), rstring) items = list(map(item, items)) - return '\n'.join(['
      '] + items + ['
    ']) + return '\n'.join([''] + items + ['
    ']) # }}} From dbcf47468bd88bed0938596f90ed95bfca4ab5ac Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 14 Oct 2010 09:38:52 -0600 Subject: [PATCH 53/59] More semantic table markup. --- resources/content_server/browse/browse.css | 25 +++++++++++++++------- resources/content_server/browse/browse.js | 4 +--- src/calibre/library/server/browse.py | 10 ++++----- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/resources/content_server/browse/browse.css b/resources/content_server/browse/browse.css index 7af4aeb5f4..0222aefdb4 100644 --- a/resources/content_server/browse/browse.css +++ b/resources/content_server/browse/browse.css @@ -206,29 +206,38 @@ h2.library_name { /* }}} */ /* Category {{{ */ -.category table { - margin: 0; - padding: 0; +.category > div.category-container { width: 100%; - border-collapse: collapse; + margin-top: 1ex; + margin-bottom: 1ex; + display: table; } -.category tr.category-item td { +.category div.category-item { + display: table-row; +} + +.category div.category-item > div { padding: 0.75em; text-align: center; cursor: pointer; + display: table-cell; } -.category tr.category-item:hover { +.category div.category-name { font-weight: bold } + +.category div.category-item:hover > div { background-color: #d6d3c9; -moz-box-shadow: 5px 5px 5px #ccc; -webkit-box-shadow: 5px 5px 5px #ccc; box-shadow: 5px 5px 5px #ccc; + border-radius: 15px; + -moz-border-radius: 15px; + -webkit-border-radius: 15px; } -.category tr.category-item h4 { display: inline } -.category tr.category-item span.href { display: none } +.category div.category-item span.href { display: none } #groups span.load_href { display: none } diff --git a/resources/content_server/browse/browse.js b/resources/content_server/browse/browse.js index a841fb5e5d..f3f278fc48 100644 --- a/resources/content_server/browse/browse.js +++ b/resources/content_server/browse/browse.js @@ -77,8 +77,6 @@ function init() { function toplevel() { $(".sort_select").hide(); - $(".toplevel li").corner("15px"); - $(".toplevel li").click(function() { var href = $(this).children("span").html(); window.location = href; @@ -92,7 +90,7 @@ function render_error(msg) { // Category feed {{{ function category() { - $(".category tr").click(function() { + $(".category .category-item").click(function() { var href = $(this).find("span.href").html(); window.location = href; }); diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index 4d860b2d0d..6a557e423a 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -106,10 +106,10 @@ def render_rating(rating, container='span'): # {{{ def get_category_items(category, items, db, datatype): # {{{ def item(i): - templ = (u'' - '

    {0}

    {1}' - '{2}' - '{3}') + templ = (u'
    ' + '
    {0}
    {1}
    ' + '
    {2}' + '{3}
    ') rating, rstring = render_rating(i.avg_rating) name = xml(i.name) if datatype == 'rating': @@ -126,7 +126,7 @@ def get_category_items(category, items, db, datatype): # {{{ xml(desc), xml(quote(href)), rstring) items = list(map(item, items)) - return '\n'.join([''] + items + ['
    ']) + return '\n'.join(['
    '] + items + ['
    ']) # }}} From 6f2742500d22445132dcdecb2f8663d538fd9029 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 14 Oct 2010 09:42:59 -0600 Subject: [PATCH 54/59] ... --- resources/content_server/browse/browse.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/content_server/browse/browse.css b/resources/content_server/browse/browse.css index 0222aefdb4..07cf22f1cc 100644 --- a/resources/content_server/browse/browse.css +++ b/resources/content_server/browse/browse.css @@ -190,6 +190,10 @@ h2.library_name { padding: 0.75em; text-align: center; cursor: pointer; + border-radius: 15px; + -moz-border-radius: 15px; + -webkit-border-radius: 15px; + } .toplevel li:hover { From 8f82dc37138053327bb3244c362328e49d0c6cf0 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 14 Oct 2010 15:56:38 -0600 Subject: [PATCH 55/59] Orsai by DM. Fixes #7176 (New recipe for famous blog in Spanish - Orsai) --- resources/images/news/orsai.png | Bin 0 -> 684 bytes resources/recipes/orsai.recipe | 37 ++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 resources/images/news/orsai.png create mode 100644 resources/recipes/orsai.recipe diff --git a/resources/images/news/orsai.png b/resources/images/news/orsai.png new file mode 100644 index 0000000000000000000000000000000000000000..e65f02206c19fed25f1632ff43531bd8609df8e6 GIT binary patch literal 684 zcmV;d0#p5oP)=e}8EFYAp^0E59e7=nZX1&9IxDN=+c zX{hKBk?4|$f|8DObkr27k}8UnKY%U>2^tIW(NKVGA+XrUVEncF-kcQkO!A6(Q`|Ya z_nhCAvyCX90cA{pLCQb?8FE16wk|+5kO-7%0NbDp4n%ou0+X=?LHQF!!xb13Kn0+N zxH*rzePTEP-2uOTKgX4?`u{bj1_+Fhgo|9ONW#5o4xBv7zT;Em-E&<1eSyCgmrG~c zH5QTq5RfQ$B%o1ubG z>WtCx7?W;zI2f|OT12Vwf*L3@rOKFgHnj+EhZTlwL|x!> zA|!(nI9QlB|J>VFFGox5C+8gn;BA&=+n-u;F+~4gYd~(w%DHSZ)F_K4D*gqvYY`M! Sit~H`0000 Date: Thu, 14 Oct 2010 15:59:54 -0600 Subject: [PATCH 56/59] ... --- resources/content_server/browse/browse.css | 11 ++ src/calibre/library/server/browse.py | 164 ++++++++++++--------- 2 files changed, 109 insertions(+), 66 deletions(-) diff --git a/resources/content_server/browse/browse.css b/resources/content_server/browse/browse.css index 07cf22f1cc..d66ae744cf 100644 --- a/resources/content_server/browse/browse.css +++ b/resources/content_server/browse/browse.css @@ -259,4 +259,15 @@ h2.library_name { /* }}} */ +/* Booklist {{{ */ + +#booklist .page { + display: none; +} + +.loading img { + vertical-align: middle; +} + +/* }}} */ diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index 6a557e423a..ffbd958688 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -7,7 +7,7 @@ __docformat__ = 'restructuredtext en' import operator, os, json from urllib import quote -from binascii import hexlify +from binascii import hexlify, unhexlify import cherrypy @@ -15,64 +15,33 @@ from calibre.constants import filesystem_encoding from calibre import isbytestring, force_unicode, prepare_string_for_xml as xml from calibre.utils.ordered_dict import OrderedDict -def paginate(offsets, content, base_url, up_url=None): # {{{ - 'Create markup for pagination' - - if '?' not in base_url: - base_url += '?' - - if base_url[-1] != '?': - base_url += '&' - - def navlink(decoration, name, cls, offset): - label = xml(name) - if cls in ('next', 'last'): - label += ' ' + decoration - else: - label = decoration + ' ' + label - return (u'' - u'{label}').format(cls=cls, decoration=decoration, - name=xml(name, True), offset=offset, - base_url=xml(base_url, True), label=label) - left = '' - if offsets.offset > 0 and offsets.previous_offset > 0: - left += navlink(u'\u219e', _('First'), 'first', 0) - if offsets.offset > 0: - left += ' ' + navlink('←', _('Previous'), 'previous', - offsets.previous_offset) - - middle = '' - if up_url: - middle = '[{1} ↑]'.format(xml(up_url, True), - xml(_('Up'))) - - right = '' - if offsets.next_offset > -1: - right += navlink('&rarr', _('Next'), 'next', offsets.next_offset) - if offsets.last_offset > offsets.next_offset and offsets.last_offset > 0: - right += ' ' + navlink(u'\u21A0', _('Last'), 'last', offsets.last_offset) - - navbar = u''' - - - - - - - - '''.format(left=left, right=right, middle=middle) - - templ = u''' -
    - {navbar} -
    - {content} +def render_book_list(ids): + pages = [] + while ids: + page = list(ids[:25]) + pages.append(page) + ids = ids[25:] + page_template = u'''\ +
    +
    +
    {2}
    +
    - {navbar} -
    - ''' - return templ.format(navbar=navbar, content=content) -# }}} + ''' + rpages = [] + for i, pg in enumerate(pages): + ld = xml(json.dumps(pg), True) + rpages.append(page_template.format(i, ld, + xml(_('Loading, please wait')) + '…')) + rpages = u'\n\n'.join(rpages) + + templ = u'''\ +

    {0}

    +
    + {pages} +
    + ''' + return templ.format(_('Browsing %d books')%len(ids), pages=rpages) def utf8(x): # {{{ if isinstance(x, unicode): @@ -171,10 +140,15 @@ class BrowseServer(object): connect('browse_category_group', base_href+'/category_group/{category}/{group}', self.browse_category_group) - connect('browse_list', base_href+'/list/{query}', self.browse_list) + connect('browse_matches', + base_href+'/matches/{category}/{cid}', + self.browse_matches) + connect('browse_booklist_page', + base_href+'/booklist_page', + self.browse_booklist_page) + connect('browse_search', base_href+'/search/{query}', self.browse_search) - connect('browse_book', base_href+'/book/{uuid}', self.browse_book) def browse_template(self, sort, category=True): @@ -267,12 +241,12 @@ class BrowseServer(object): def browse_category(self, category, sort): categories = self.categories_cache() + if category not in categories: + raise cherrypy.HTTPError(404, 'category not found') category_meta = self.db.field_metadata category_name = category_meta[category]['name'] datatype = category_meta[category]['datatype'] - if category not in categories: - raise cherrypy.HTTPError(404, 'category not found') items = categories[category] sort = self.browse_sort_categories(items, sort) @@ -331,11 +305,12 @@ class BrowseServer(object): if sort not in ('rating', 'name', 'popularity'): sort = 'name' categories = self.categories_cache() + if category not in categories: + raise cherrypy.HTTPError(404, 'category not found') + category_meta = self.db.field_metadata datatype = category_meta[category]['datatype'] - if category not in categories: - raise cherrypy.HTTPError(404, 'category not found') if not group: raise cherrypy.HTTPError(404, 'invalid group') @@ -360,6 +335,8 @@ class BrowseServer(object): 'Entry point for top-level, categories and sub-categories' if category == None: ans = self.browse_toplevel() + elif category == 'newest': + raise cherrypy.InternalRedirect('/browse/matches/newest/dummy') else: ans = self.browse_category(category, category_sort) @@ -368,8 +345,63 @@ class BrowseServer(object): # }}} # Book Lists {{{ - def browse_list(self, query=None, offset=0, sort=None): - raise NotImplementedError() + + def browse_sort_book_list(self, items, sort): + fm = self.db.field_metadata + keys = frozenset(fm.sortable_field_keys()) + if sort not in keys: + sort = 'title' + self.sort(items, 'title', True) + if sort != 'title': + ascending = fm[sort]['datatype'] not in ('rating', 'datetime') + self.sort(items, sort, ascending) + return sort + + @Endpoint(sort_type='list') + def browse_matches(self, category=None, cid=None, list_sort=None): + if not cid: + raise cherrypy.HTTPError(404, 'invalid category id: %r'%cid) + categories = self.categories_cache() + + if category not in categories and category != 'newest': + raise cherrypy.HTTPError(404, 'category not found') + try: + category_name = self.db.field_metadata[category]['name'] + except: + if category != 'newest': + raise + category_name = _('Newest') + + if category == 'search': + which = unhexlify(cid) + try: + ids = self.search_cache('search:"%s"'%which) + except: + raise cherrypy.HTTPError(404, 'Search: %r not understood'%which) + elif category == 'newest': + ids = list(self.db.data.iterallids()) + else: + ids = self.db.get_books_for_category(category, cid) + + items = [self.db.data._data[x] for x in ids] + if category == 'newest': + list_sort = 'timestamp' + sort = self.browse_sort_book_list(items, list_sort) + ids = [x[0] for x in items] + html = render_book_list(ids) + return self.browse_template(sort).format( + title=_('Books in') + " " +category_name, + script='booklist();', main=html) + + @Endpoint(mimetype='application/json; charset=utf-8', sort_type='list') + def browse_booklist_page(self, ids=None, list_sort=None): + if ids is None: + ids = json.dumps('[]') + try: + ids = json.loads(ids) + except: + raise cherrypy.HTTPError(404, 'invalid ids') + # }}} # Search {{{ From d5462c8d0063c844f5e8370a17e8da382d80dd37 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 14 Oct 2010 17:39:00 -0600 Subject: [PATCH 57/59] Update Globe and Mail. Fix #405 (New news feed) --- resources/recipes/globe_and_mail.recipe | 31 ++++---------------- resources/recipes/volksrant.recipe | 39 ++++++++++++++----------- 2 files changed, 28 insertions(+), 42 deletions(-) diff --git a/resources/recipes/globe_and_mail.recipe b/resources/recipes/globe_and_mail.recipe index b2a9915250..b6e6b5c25b 100644 --- a/resources/recipes/globe_and_mail.recipe +++ b/resources/recipes/globe_and_mail.recipe @@ -26,31 +26,12 @@ class GlobeAndMail(BasicNewsRecipe): #credit {margin-top:0px;} .tag {font-size: 22pt;}''' description = 'Canada\'s national newspaper' - remove_tags_before = dict(id="article-top") - remove_tags = [ - {'id':['util', 'article-tabs', 'comments', 'article-relations', - 'gallery-controls', 'video', 'galleryLoading','deck','header', - 'toolsBottom'] }, - {'class':['credit','inline-img-caption','tab-pointer'] }, - dict(name='div', attrs={'id':['lead-photo', 'most-popular-story']}), - dict(name='div', attrs={'class':'right'}), - dict(name='div', attrs={'id':'footer'}), - dict(name='div', attrs={'id':'beta-msg'}), - dict(name='img', attrs={'class':'headshot'}), - dict(name='div', attrs={'class':'brand'}), - dict(name='div', attrs={'id':'nav-wrap'}), - dict(name='div', attrs={'id':'featureTopics'}), - dict(name='div', attrs={'id':'videoNav'}), - dict(name='div', attrs={'id':'blog-header'}), - dict(name='div', attrs={'id':'right-rail'}), - dict(name='div', attrs={'id':'group-footer-container'}), - dict(name=['iframe', 'style']) - ] - remove_attributes = ['style'] - remove_tags_after = [{'id':['article-content']}, - {'class':['pull','inline-img'] }, - dict(name='img', attrs={'class':'inline-media-embed'}), - ] + keep_only_tags = [dict(name='article')] + remove_tags = [dict(name='aside'), + dict(name='footer'), + dict(name='div', attrs={'class':(lambda x: isinstance(x, (str,unicode)) and 'articlecommentcountholder' in x.split(' '))}), + dict(name='ul', attrs={'class':(lambda x: isinstance(x, (str,unicode)) and 'articletoolbar' in x.split(' '))}), + ] feeds = [ (u'Latest headlines', u'http://www.theglobeandmail.com/?service=rss'), (u'Top stories', u'http://www.theglobeandmail.com/?service=rss&feed=topstories'), diff --git a/resources/recipes/volksrant.recipe b/resources/recipes/volksrant.recipe index dcc8c042ee..6f3ec4ce0d 100644 --- a/resources/recipes/volksrant.recipe +++ b/resources/recipes/volksrant.recipe @@ -11,6 +11,7 @@ __docformat__ = 'restructuredtext en' on 10/10/10 to include function to grab print version of articles ''' +from datetime import date from calibre.web.feeds.news import BasicNewsRecipe ''' added by Tony Stegall @@ -27,7 +28,6 @@ class AdvancedUserRecipe1249039563(BasicNewsRecipe): no_stylesheets = True language = 'nl' - extra_css = ''' body{font-family:Arial,Helvetica,sans-serif; font-size:small;} h1{font-size:large;} @@ -43,14 +43,16 @@ class AdvancedUserRecipe1249039563(BasicNewsRecipe): def get_obfuscated_article(self, url): br = self.get_browser() + print 'THE CURRENT URL IS: ', url br.open(url) + year = date.today().year try: - response = br.follow_link(url_regex='.*?(2010)(\\/)(article)(\\/)(print)(\\/)', nr = 0) - html = response.read() + response = br.follow_link(url_regex='.*?(%d)(\\/)(article)(\\/)(print)(\\/)'%year, nr = 0) + html = response.read() except: - response = br.open(url) - html = response.read() + response = br.open(url) + html = response.read() self.temp_files.append(PersistentTemporaryFile('_fa.html')) self.temp_files[-1].write(html) @@ -59,19 +61,22 @@ class AdvancedUserRecipe1249039563(BasicNewsRecipe): ############################################################################################################### - feeds = [ - (u'Laatste Nieuws', u'http://volkskrant.nl/rss/laatstenieuws.rss'), - (u'Binnenlands nieuws', u'http://volkskrant.nl/rss/nederland.rss'), - (u'Buitenlands nieuws', u'http://volkskrant.nl/rss/internationaal.rss'), - (u'Economisch nieuws', u'http://volkskrant.nl/rss/economie.rss'), - (u'Sportnieuws', u'http://volkskrant.nl/rss/sport.rss'), - (u'Kunstnieuws', u'http://volkskrant.nl/rss/kunst.rss'), + ''' + Change Log: + Date: 10/15/2010 + Feeds updated by Martin Tarenskeen + ''' + + feeds = [ + (u'Laatste Nieuws', u'http://www.volkskrant.nl/rss/laatstenieuws.rss'), + (u'Binnenland', u'http://www.volkskrant.nl/rss/nederland.rss'), + (u'Buitenland', u'http://www.volkskrant.nl/rss/internationaal.rss'), + (u'Economie', u'http://www.volkskrant.nl/rss/economie.rss'), + (u'Sport', u'http://www.volkskrant.nl/rss/sport.rss'), + (u'Cultuur', u'http://www.volkskrant.nl/rss/kunst.rss'), + (u'Gezondheid & Wetenschap', u'http://www.volkskrant.nl/rss/wetenschap.rss'), + (u'Internet & Media', u'http://www.volkskrant.nl/rss/media.rss') ] - #both of these rss feeds link back to the main volksrant.nl url a.k.a Broken - #If someone happens to know the correct paths then they can put them in here - #(u'Wetenschapsnieuws', u'http://feeds.feedburner.com/DeVolkskrantWetenschap'), - #(u'Technologienieuws', u'http://feeds.feedburner.com/vkmedia') - ] ''' example for formating From 4fc74bdcd0e6403b8d46884a42d6767b0488be3d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 14 Oct 2010 19:41:55 -0600 Subject: [PATCH 58/59] Content server: Allow variable sized thumbnails and replace use of PIL with ImageMagick --- src/calibre/library/server/content.py | 66 ++++++++++++++------------- src/calibre/utils/magick/draw.py | 8 +++- 2 files changed, 41 insertions(+), 33 deletions(-) diff --git a/src/calibre/library/server/content.py b/src/calibre/library/server/content.py index 59fed03fbd..8c5fef4ee1 100644 --- a/src/calibre/library/server/content.py +++ b/src/calibre/library/server/content.py @@ -5,18 +5,15 @@ __license__ = 'GPL v3' __copyright__ = '2010, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import re, os, cStringIO +import re, os import cherrypy -try: - from PIL import Image as PILImage - PILImage -except ImportError: - import Image as PILImage from calibre import fit_image, guess_type from calibre.utils.date import fromtimestamp from calibre.library.caches import SortKeyGenerator +from calibre.utils.magick.draw import save_cover_data_to, Image, \ + thumbnail as generate_thumbnail class CSSortKeyGenerator(SortKeyGenerator): @@ -77,8 +74,13 @@ class ContentServer(object): id = int(match.group()) if not self.db.has_id(id): raise cherrypy.HTTPError(400, 'id:%d does not exist in database'%id) - if what == 'thumb': - return self.get_cover(id, thumbnail=True) + if what == 'thumb' or what.startswith('thumb_'): + try: + width, height = map(int, what.split('_')[1:]) + except: + width, height = 60, 80 + return self.get_cover(id, thumbnail=True, thumb_width=width, + thumb_height=height) if what == 'cover': return self.get_cover(id) return self.get_format(id, what) @@ -128,37 +130,39 @@ class ContentServer(object): return self.static('index.html') # Actually get content from the database {{{ - def get_cover(self, id, thumbnail=False): - cover = self.db.cover(id, index_is_id=True, as_file=False) - if cover is None: - cover = self.default_cover - cherrypy.response.headers['Content-Type'] = 'image/jpeg' - cherrypy.response.timeout = 3600 - path = getattr(cover, 'name', False) - updated = fromtimestamp(os.stat(path).st_mtime) if path and \ - os.access(path, os.R_OK) else self.build_time - cherrypy.response.headers['Last-Modified'] = self.last_modified(updated) + def get_cover(self, id, thumbnail=False, thumb_width=60, thumb_height=80): try: - f = cStringIO.StringIO(cover) - try: - im = PILImage.open(f) - except IOError: - raise cherrypy.HTTPError(404, 'No valid cover found') - width, height = im.size + cherrypy.response.headers['Content-Type'] = 'image/jpeg' + cherrypy.response.timeout = 3600 + cover = self.db.cover(id, index_is_id=True, as_file=True) + if cover is None: + cover = self.default_cover + updated = self.build_time + else: + with cover as f: + updated = fromtimestamp(os.stat(f.name).st_mtime) + cover = f.read() + cherrypy.response.headers['Last-Modified'] = self.last_modified(updated) + + if thumbnail: + return generate_thumbnail(cover, + width=thumb_width, height=thumb_height)[-1] + + img = Image() + img.load(cover) + width, height = img.size scaled, width, height = fit_image(width, height, - 60 if thumbnail else self.max_cover_width, - 80 if thumbnail else self.max_cover_height) + thumb_width if thumbnail else self.max_cover_width, + thumb_height if thumbnail else self.max_cover_height) if not scaled: return cover - im = im.resize((int(width), int(height)), PILImage.ANTIALIAS) - of = cStringIO.StringIO() - im.convert('RGB').save(of, 'JPEG') - return of.getvalue() + return save_cover_data_to(img, 'img.jpg', return_data=True, + resize_to=(width, height)) except Exception, err: import traceback cherrypy.log.error('Failed to generate cover:') cherrypy.log.error(traceback.print_exc()) - raise cherrypy.HTTPError(404, 'Failed to generate cover: %s'%err) + raise cherrypy.HTTPError(404, 'Failed to generate cover: %r'%err) def get_format(self, id, format): format = format.upper() diff --git a/src/calibre/utils/magick/draw.py b/src/calibre/utils/magick/draw.py index 6808215554..5c978a27e0 100644 --- a/src/calibre/utils/magick/draw.py +++ b/src/calibre/utils/magick/draw.py @@ -25,6 +25,7 @@ def save_cover_data_to(data, path, bgcolor='#ffffff', resize_to=None, resize and the input and output image formats are the same, no changes are made. + :param data: Image data as bytestring or Image object :param compression_quality: The quality of the image after compression. Number between 1 and 100. 1 means highest compression, 100 means no compression (lossless). @@ -33,8 +34,11 @@ def save_cover_data_to(data, path, bgcolor='#ffffff', resize_to=None, ''' changed = False - img = Image() - img.load(data) + if isinstance(data, Image): + img = data + else: + img = Image() + img.load(data) orig_fmt = normalize_format_name(img.format) fmt = os.path.splitext(path)[1] fmt = normalize_format_name(fmt[1:]) From 217eedf8feaa443819b3467fc90acedc6566ca04 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 14 Oct 2010 19:42:12 -0600 Subject: [PATCH 59/59] ... --- src/calibre/manual/faq.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/calibre/manual/faq.rst b/src/calibre/manual/faq.rst index 51660d2620..359cc4755f 100644 --- a/src/calibre/manual/faq.rst +++ b/src/calibre/manual/faq.rst @@ -387,6 +387,12 @@ solve it, look for a corrupted font file on your system, in ~/Library/Fonts or t check for corrupted fonts in OS X is to start the "Font Book" application, select all fonts and then in the File menu, choose "Validate fonts". + +I downloaded the installer, but it is not working? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Downloading from the internet can sometimes result in a corrupted download. If the |app| installer you downloaded is not opening, try downloading it again. If re-downloading it does not work, download it from `an alternate location `_. If the installer still doesn't work, then something on your computer is preventing it from running. Best place to ask for more help is in the `forums `_. + My antivirus program claims |app| is a virus/trojan? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~