diff --git a/src/plugins/webreport/NarrativeWeb.py b/src/plugins/webreport/NarrativeWeb.py index 0938f34b2..8424623ef 100644 --- a/src/plugins/webreport/NarrativeWeb.py +++ b/src/plugins/webreport/NarrativeWeb.py @@ -60,10 +60,10 @@ from cStringIO import StringIO from textwrap import TextWrapper from unicodedata import normalize from collections import defaultdict -import re from xml.sax.saxutils import escape -import operator +from operator import itemgetter + from decimal import Decimal, getcontext getcontext().prec = 8 @@ -1540,15 +1540,8 @@ class BasePage(object): as part of the header title. """ - # Header constants - xmllang = Utils.xml_lang() - _META1 = 'name ="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=1"' - _META2 = 'name ="apple-mobile-web-app-capable" content="yes"' - _META3 = 'name="generator" content="%s %s %s"' % ( - const.PROGRAM_NAME, const.VERSION, const.URL_HOMEPAGE) - _META4 = 'name="author" content="%s"' % self.author - # begin each html page... + xmllang = Utils.xml_lang() page, head, body = Html.page('%s - %s' % (html_escape(self.title_str.strip()), html_escape(title)), @@ -1558,6 +1551,13 @@ class BasePage(object): if self.ext in [".php", ".php3", ".cgi"]: del page[0] + # Header constants + _META1 = 'name ="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=1"' + _META2 = 'name ="apple-mobile-web-app-capable" content="yes"' + _META3 = 'name="generator" content="%s %s %s"' % ( + const.PROGRAM_NAME, const.VERSION, const.URL_HOMEPAGE) + _META4 = 'name="author" content="%s"' % self.author + # create additional meta tags meta = Html("meta", attr = _META1) + ( Html("meta", attr = _META2, indent = False), @@ -1578,16 +1578,16 @@ class BasePage(object): url4 = self.report.build_url_image("favicon2.ico", "images", self.up) # create stylesheet and favicon links - links = Html("link", href = url4, type = "image/x-icon", rel = "shortcut icon") + ( - Html("link", href = url2, type = "text/css", media = "screen", rel = "stylesheet", indent = False), - Html("link", href = url3, type = "text/css", media = 'print', rel = "stylesheet", indent = False) + links = Html("link", type = "image/x-icon", href = url4, rel = "shortcut icon") + ( + Html("link", type = "text/css", href = url2, media = "screen", rel = "stylesheet", indent = False), + Html("link", type = "text/css", href = url3, media = 'print', rel = "stylesheet", indent = False) ) # Link to Navigation Menus stylesheet if CSS[self.report.css]["navigation"]: fname = "/".join(["css", "narrative-menus.css"]) url = self.report.build_url_fname(fname, None, self.up) - links += Html("link", href = url, type = "text/css", media = "screen", rel = "stylesheet", indent = False) + links += Html("link", type = "text/css", href = url, media = "screen", rel = "stylesheet", indent = False) # add additional meta and link tags head += meta @@ -3627,12 +3627,12 @@ class EventListPage(BasePage): prev_letter = "" # separate events by their type and then thier event handles - for (evt_type, data_list) in sort_event_types(self.dbase_, event_types, event_handle_list): + for (evt_type, data_list) in sort_event_types(self.dbase_, event_handle_list, event_types): first_letter = True _EVENT_DISPLAYED = [] # sort datalist by date of event and by event handle... - data_list = sorted(data_list, key = operator.itemgetter(0, 1)) + data_list = sorted(data_list, key = itemgetter(0, 1)) first_event = True for (sort_value, event_handle) in data_list: @@ -4431,24 +4431,23 @@ class SourceListPage(BasePage): # """ class SourcePage(BasePage): - def __init__(self, report, title, src_handle, src_list, ppl_handle_list, - database_handles_list): + def __init__(self, report, title, src_handle, src_list, database_handles_list): self.dbase_ = report.database source = self.dbase_.get_source_from_handle(src_handle) if not source: return - # for use in determining if a citation referent is in the report database? - (db_people_handles, db_family_handles, db_event_handles, db_place_handles, - db_repository_handles, db_media_handles) = database_handles_list - db_source_handles = src_list - self.page_title = source.get_title() BasePage.__init__(self, report, title, source.get_gramps_id()) + # for use in determining if a citation referent is in the report database? + (self.ind_list, db_family_handles, db_event_handles, db_place_handles, + db_media_handles) = database_handles_list + db_source_handles = src_list + inc_repositories = self.report.options["inc_repository"] - self.navigation = self.report.options["navigation"] + self.navigation = self.report.options['navigation'] of, sio = self.report.create_file(src_handle, "src") self.up = True @@ -4470,7 +4469,6 @@ class SourcePage(BasePage): # add section title sourcedetail += Html("h3", html_escape(source.get_title()), inline = True) - # begin sources table with Html("table", class_ = "infolist source") as table: sourcedetail += table @@ -4515,18 +4513,47 @@ class SourcePage(BasePage): if repo_list is not None: sourcedetail += repo_list - # get the Source and its Citation Referents too... + # get the Source and its Citation Referents... the_lists = Utils.get_source_and_citation_referents(src_handle, self.dbase_) if the_lists: (citation_list, citation_referents_list) = the_lists if citation_referents_list: + # Drop Down is being used, add Style sheet and javascript file... + if self.navigation == "DropDown": + + # link- in Animated Drop Down style sheet + fname = "/".join(["css", "narrative-dropdown.css"]) + url = self.report.build_url_fname(fname, None, self.up) + head += Html("link", type = "text/css", href = url, media = "screen", + rel = "stylesheet", inline = True) + + # javascript if the user's browser is IE6? + fname = "/".join(["scripts", "jquery-1.7.1.min.js"]) + url = self.report.build_url_fname(fname, None, self.up) + head += Html("script", type = "text/javascript", href = url, + language ="javascript", inline = True) + + with Html("script", type = "text/javascript", language = "javascript") as jsc: + head += jsc + + jsc += """ + if ($.browser.msie && $.browser.version.substr(0,1)< 7) + { + $('li').has('ul').mouseover(function(){ + $(this).children('ul').css('visibility','visible'); + }).mouseout(function(){ + $(this).children('ul').css('visibility','hidden'); + }) + } +});""" + # begin Source Citation Referents section with Html("div", class_ ="subsection", id = "SourceCitationReferents") as section: sourcedetail += section # add secion title - section += Html("h4", _("Citation References"), inline =True) + section += Html("h4", _("Citation Referents"), inline = True) ordered1 = Html("ol", class_ = "Col1", role = "Volume-n-Page") @@ -4534,65 +4561,41 @@ class SourcePage(BasePage): citation = self.dbase_.get_citation_from_handle(citation_handle) if citation: - # gets all citation referents no matter on the filters... + # gets all citation referents no matter on the filters being used... (people_list, family_list, event_list, place_list, source_list, media_list, repo_list) = refs - # remove people that are not in this report database... - people_list = [person_handle for person_handle in people_list if person_handle in db_people_handles] - - # Sort the person list by the individual's surname... - people_list = sort_people(self.dbase_, people_list) - - list1 = Html("li", citation.get_page()) + people_list = [person_handle for person_handle in people_list + if person_handle in self.ind_list] + list1 = Html("li") + list1.extend( + citation.get_page() + ) unordered2 = Html("ul", class_ = "Col2", id = "menu", role = "Object Type") # Citation Referents have Person objects... if people_list: - list2 = Html("li") + # sot people by surnames and first, then group by surnames and + # their associated handles + people_list = sort_people(self.dbase_, people_list) - list2.extend( - Html("a", _("People"), href = "#", title = _("People"), inline = True) - ) + people_dict = dict((surname, handle_list) for (surname, handle_list) in people_list) - unordered3 = Html("ul", class_ = "Col3", role = "Surname") - - for (surname, people_handle_list) in people_list: - list3 = Html("li") - - list3.extend( - Html("a", surname, href = "#", title = surname, inline = True) - ) - - unordered4 = Html("ul", class_ = "Col4", role = "Short Name") - - for person_handle in people_handle_list: - person = self.dbase_.get_person_from_handle(person_handle) - if person: - url = self.report.build_url_fname_html(person_handle, "ppl", up = self.up) - unordered4.extend( - Html("li", self.person_link(url, person, name_style = False), inline = True) - ) - - list3 += unordered4 - unordered3 += list3 - list2 += unordered3 - unordered2 += list2 + self.display_citation_refs_list(unordered2, people_dict, "People") # remove family handles if they are not in this report database? - family_list = [family_handle for family_handle in family_list if family_handle in db_family_handles] + family_list = [family_handle for family_handle in family_list + if family_handle in db_family_handles] # Citation Referents have Family Objects... if (self.inc_families and family_list): list2 = Html("li") - list2.extend( Html("a", _("Families"), href = "#", title = _("Families"), inline = True) ) - unordered3 = Html("ul", class_ = "Col3", role = "Husband-n-Spouse") for family_handle in family_list: @@ -4601,94 +4604,26 @@ class SourcePage(BasePage): unordered3.extend( Html("li", self.get_family_string(family)) ) - list2 += unordered3 unordered2 += list2 # remove event handles if they are not in this report database... - event_list = [event_handle for event_handle in event_list if event_handle in db_event_handles] + event_list = [event_handle for event_handle in event_list + if event_handle in db_event_handles] # Citation Referents have Event Objects... if (self.inc_events and event_list): - - list2 = Html("li") - - list2.extend( - Html("a", _("Events"), href = "#", title = _("Events"), inline = True) - ) - event_handle_list, event_types = build_event_data_by_events(self.dbase_, event_list) - unordered3 = Html("ul", class_ = "Col3", role = "Event Type") - - # separate events by their types and then thier event handles - for (event_type, event_list) in sort_event_types(self.dbase_, event_types, event_handle_list): - - # sort data_list by date of event and event handle... - event_list = sorted(event_list, key = operator.itemgetter(0, 1)) - - list3 = Html("li") - - list3.extend( - Html("a", event_type, href = "#", title = event_type, inline = True) - ) - - unordered4 = Html("ul", class_ = "Col4", role = "HyperLinked Event Date") - + events_dict = {} + for (event_type, event_list) in sort_event_types(self.dbase_, + event_handle_list, event_types): + event_handle_list = [] for (sort_value, event_handle) in event_list: - event = self.dbase_.get_event_from_handle(event_handle) - if event: - event_date = _dd.display(event.get_date_object()) + event_handle_list.append(event_handle) + events_dict[event_type] = event_handle_list - list4 = Html("li") - - list4.extend( - Html("a", event_date, href = "#", title = event_date, inline = True) - ) - - unordered5 = Html("ul", class_ = "Col5") - - # marriage or Divorce Event... - if event.get_type() in [gen.lib.EventType.MARRIAGE, gen.lib.EventType.DIVORCE]: - - for (classname, newhandle) in self.dbase_.find_backlink_handles(event_handle, ["Family"]): - family = self.dbase_.get_family_from_handle(newhandle) - if (family and newhandle in db_family_handles): - unordered5.extend( - Html("li", self.get_family_string(family)) - ) - - # any other event types... - else: - back_handle_list = self.dbase_.find_backlink_handles(event_handle, ["Person"]) - back_handle_list = [(classname, handle) for (classname, handle) in back_handle_list] - if back_handle_list: - if len(back_handle_list) == 1: - for (classname, newhandle) in back_handle_list: - obj = self.dbase_.get_person_from_handle(newhandle) - if obj: - unordered5.extend( - Html("li", self.event_link(event_handle, self.get_name(obj), - uplink = self.up), inline = True) - ) - - # this occurs when an event has multiple participants... - else: - - for (classname, newhandle) in back_handle_list: - obj = self.dbase_.get_person_from_handle(newhandle) - if obj: - unordered5.extend( - Html("li", self.event_link(event_handle, self.get_name(obj), - uplink = self.up), inline = True) - ) - - list4 += unordered5 - unordered4 += list4 - list3 += unordered4 - unordered3 += list3 - list2 += unordered3 - unordered2 += list2 +# self.display_citation_refs_list(unorered2, events_dict, "Events") # remove place handles if they are not in this report database... place_list = [place_handle for place_handle in place_list if place_handle in db_place_handles] @@ -4697,11 +4632,9 @@ class SourcePage(BasePage): if place_list: list2 = Html("li") - list2.extend( Html("a", _("Places"), href = "#", title = _("Places"), inline = True) ) - unordered3 = Html("ul", class_ = "Col3", role = "Place Title") for place_handle in place_list: @@ -4711,49 +4644,40 @@ class SourcePage(BasePage): Html("li", self.place_link(place_handle, place.get_title(), uplink = self.up), inline = True) ) - list2 += unordered3 unordered2 += list2 # remove sources if they are not in this report database... - source_list = [source_handle for source_handle in source_list if source_handle in db_source_handles] + source_list = [source_handle for source_handle in source_list + if source_handle in db_source_handles] # Citation Referents have Source Objects... if source_list: list2 = Html("li") - list2.extend( Html("a", _("Sources"), href = "#", title = _("Sources"), inline = True) ) - unordered3 = Html("ul", class_ = "Col3", role = "Source Title") for source_handle in source_list: source = self.dbase_.get_source_from_handle(source_handle) if source: unordered3.extend( - Html("li", self.source_link(source_handle, - source.get_title(), source.get_gramps_id(), + Html("li", self.source_link(source_handle, + source.get_title(), source.get_gramps_id(), uplink = self.up), inline = True) ) - list2 += unordered3 unordered2 += list2 - # remove repositories if they are not in this report database... - repo_list = [repo_handle for repo_handle in repo_list - if repo_handle in db_repository_handles] - # Citation Referents have Repository Objects... if (inc_repositories and repo_list): list2 = Html("li") - list2.extend( Html("a", _("Repositories"), href = "#", title = _("Repositories"), inline = True) ) - unordered3 = Html("ul", class_ = "Col3", role = "Repository Name") for repository_handle in repo_list: @@ -4763,12 +4687,12 @@ class SourcePage(BasePage): Html("li", self.repository_link(repository_handle, repository.get_name(), uplink = self.up), inline = True) ) - list2 += unordered3 unordered2 += list2 # remove media if they are not in this report database... - media_list = [media_handle for media_handle in media_list if media_handle in db_media_handles] + media_list = [media_handle for media_handle in media_list + if media_handle in db_media_handles] # Citation Referents has Media Objects... if (self.create_media and media_list): @@ -4819,6 +4743,85 @@ class SourcePage(BasePage): # and close the file self.XHTMLWriter(sourcepage, of, sio) + def get_citation_ref_link(self, obj_handle, citation_type): + """ + returns the hyper link for the handle that was passed to it + """ + hyper = None + + if citation_type == "People": + obj_ = self.dbase_.get_person_from_handle(obj_handle) + url = self.report.build_url_fname_html(obj_handle, "ppl", up = self.up) + hyper = self.person_link(url, obj_, name_style = False) + else: + obj_ = self.dbase_.get_event_from_handle(obj_handle) + event_date = _dd.display(obj_.get_date_object()) or ' ' + + hyper = self.event_link(obj_handle, event_date, uplink = self.up) + return hyper + + def display_citation_refs_list(self, unordered2, citations_dict, citation_type): + """ + displays the citations referents list + """ + + keys = sorted(citations_dict, key = locale.strxfrm) + max_per_column = 5 + + list2 = Html("li") + list2.extend( + Html("a", _(citation_type), href = "#", title = _(citation_type), inline = True) + ) + unordered3 = Html("ul", class_ = "Col3", role = "Surname/ Event Type") + + for key in keys: + + list3 = Html("li") + list3.extend( + Html("A", key, href = "#", title = key, inline = True) + ) + unordered4 = Html("ul", class_ = "Col4", role = "Name/ Date") + + # determine the length of the values for this key + value_len = len(citations_dict[key]) + + # if value is more than 5, then we have to make groups... + if value_len > max_per_column: + + num_of_cols = ((value_len // max_per_column) + 1) + for x in range(num_of_cols): + + list4 = Html("li") + list4.extend( + Html("a", key + str((x + 1)), href = "#", inline = True) + ) + unordered5 = Html("ul", class_ = "Col5", role = "Surname/ Type divide") + + for y in range(max_per_column): + if ((x * max_per_column + y) < value_len): + obj_handle = citations_dict[key][((x * max_per_column) + y)] + + list5 = Html("li") + list5.extend( + self.get_citation_ref_link(obj_handle, citation_type) + ) + unordered5 += list5 + list4 += unordered5 + # else, we are not required to make groups and we can loop through them as it is + else: + for x in range(value_len): + obj_handle = citations_dict[key][x] + + list4 = Html("li") + list4.extend( + self.get_citation_ref_link(obj_handle, citation_type) + ) + unordered4 += list4 + list3 += unordered4 + unordered3 += list3 + list2 += unordered3 + unordered2 += list2 + class MediaListPage(BasePage): def __init__(self, report, title, db_media_handles): self.dbase_ = report.database @@ -5503,7 +5506,7 @@ class IndividualPage(BasePage): # 0 = latitude, 1 = longitude, 2 = place title, 3 = handle, and 4 = date, 5 = event type... # being sorted by date, latitude, and longitude... - place_lat_long = sorted(place_lat_long, key =operator.itemgetter(4, 0, 1)) + place_lat_long = sorted(place_lat_long, key = itemgetter(4, 0, 1)) # for all plugins # if family_detail_page @@ -6991,6 +6994,9 @@ class NavWebReport(Report): place_list = {} source_list = {} + # copy all of the neccessary files for NarrativeWeb report... + self.copy_narrated_files() + self.base_pages() # for use with discovering biological, half, and step siblings for use in display_ind_parents()... @@ -7036,16 +7042,13 @@ class NavWebReport(Report): if self.inc_addressbook: self.addressbook_pages(ind_list) - database_handles_list = (ind_list, db_family_handles, db_event_handles, db_place_handles, - db_repository_handles, db_media_handles) + database_handles_list = (ind_list, db_family_handles, db_event_handles, + db_place_handles, db_media_handles) # build classes SourceListPage and SourcePage # has been moved so that all Sources can be found before processing... self.source_pages(source_list, ind_list, database_handles_list) - # copy all of the neccessary files - self.copy_narrated_files() - # if an archive is being used, close it? if self.archive: self.archive.close() @@ -7118,6 +7121,14 @@ class NavWebReport(Report): fname = CSS["NarrativeMaps"]["filename"] self.copy_file(fname, "narrative-maps.css", "css") + # if Drop Down Navigation is being used, copy its style sheet and its javascript file... + if self.navigation == "DropDown": + fname = CSS["Animated Dropdown"]["filename"] + self.copy_file(fname, "narrative-dropdown.css", "css") + + fname = CSS["Animated Dropdown"]["javascript"] + self.copy_file(fname, "jquery-1.7.1.min.js", "scripts") + # Copy the Creative Commons icon if the Creative Commons # license is requested if 0 < self.copyright <= len(_CC): @@ -7380,7 +7391,7 @@ class NavWebReport(Report): self.user.step_progress() self.user.end_progress() - def source_pages(self, source_list, ppl_handle_list, database_handles_list): + def source_pages(self, source_list, ind_list, database_handles_list): """ creates SourceListPage and SourcePage """ @@ -7390,7 +7401,7 @@ class NavWebReport(Report): SourceListPage(self, self.title, source_list.keys()) for source_handle in source_list: - SourcePage(self, self.title, source_handle, source_list, ppl_handle_list, database_handles_list) + SourcePage(self, self.title, source_handle, source_list, database_handles_list) self.user.step_progress() self.user.end_progress() @@ -8185,7 +8196,7 @@ def sort_people(dbase, handle_list): return sorted_lists -def sort_event_types(dbase, event_types, event_handle_list): +def sort_event_types(dbase, event_handle_list, event_types): """ sort a list of event types and their associated event handles @@ -8193,17 +8204,16 @@ def sort_event_types(dbase, event_types, event_handle_list): @param: event_types -- a dict of event types @param: event_handle_list -- all event handles in this database """ - event_dict = dict((evt_type, list()) for evt_type in event_types) for event_handle in event_handle_list: - event = dbase.get_event_from_handle(event_handle) - event_type = str(event.get_type()) + event_type = event.get_type() # add (gramps_id, date, handle) from this event if event_type in event_dict: sort_value = event.get_date_object().get_sort_value() + event_dict[event_type].append((sort_value, event_handle)) for tup_list in event_dict.values(): @@ -8211,7 +8221,7 @@ def sort_event_types(dbase, event_types, event_handle_list): # return a list of sorted tuples, one per event retval = [(event_type, event_list) for (event_type, event_list) in event_dict.iteritems()] - retval.sort(key=lambda item: str(item[0])) + retval.sort(key = lambda item: str(item[0])) return retval diff --git a/src/plugins/webstuff/css/Makefile.am b/src/plugins/webstuff/css/Makefile.am index f2bf7a06f..5070de056 100644 --- a/src/plugins/webstuff/css/Makefile.am +++ b/src/plugins/webstuff/css/Makefile.am @@ -9,6 +9,7 @@ DATAFILES = \ ancestortree.css \ behaviour.css \ narrative-maps.css \ + Web_Animated-Dropdown.css \ Web_Basic-Ash.css \ Web_Basic-Blue.css \ Web_Basic-Cypress.css \ diff --git a/src/plugins/webstuff/css/Web_Animated-Dropdown.css b/src/plugins/webstuff/css/Web_Animated-Dropdown.css new file mode 100644 index 000000000..48f20ef62 --- /dev/null +++ b/src/plugins/webstuff/css/Web_Animated-Dropdown.css @@ -0,0 +1,183 @@ +/* Main Element +------------------------------------------------------ */ +#menu, #menu ul { + margin: 0; + padding: 0; + list-style-type: none; +} + +/* Main Level +------------------------------------------------------ */ +#menu { + width: 100%; + margin: 6px auto; + border: 1px solid #222; + background-color: #111; + background-image: -moz-linear-gradient(#444, #111); + background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#111)); + background-image: -webkit-linear-gradient(#444, #111); + background-image: -o-linear-gradient(#444, #111); + background-image: -ms-linear-gradient(#444, #111); + background-image: linear-gradient(#444, #111); + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + border-radius: 6px; + -moz-box-shadow: 0 1px 1px #777; + -webkit-box-shadow: 0 1px 1px #777; + box-shadow: 0 1px 1px #777; +} + +/* Clear Floats +------------------------------------------------------ */ +#menu:before, +#menu:after { + content: ""; + display: table; +} +#menu:after { + clear: both +} +#menu { + zoom: 1 +} + +/* List Elements +------------------------------------------------------ */ +#menu li { + float: left; + border-right: 1px solid #222; + -moz-box-shadow: 1px 0 0 #444; + -webkit-box-shadow: 1px 0 0 #444; + box-shadow: 1px 0 0 #444; + position: relative; +} +#menu a { + float: left; + padding: 12px 30px; + color: #999; + text-transform: uppercase; + font: bold 12px Arial, Helvetica; + text-decoration: none; + text-shadow: 0 1px 0 #000; +} +#menu li:hover > a { + color: #fafafa +} +*html #menu li a:hover { /* IE6 only */ + color: #fafafa +} + +/* sub-menu +------------------------------------------------------ */ +#menu ul { + margin: 20px 0 0 0; + _margin: 0; /*IE6 only*/ + opacity: 0; + visibility: hidden; + position: absolute; + top: 38px; + left: 0; + z-index: 9999; + background: #444; + background: -moz-linear-gradient(#444, #111); + background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #111),color-stop(1, #444)); + background: -webkit-linear-gradient(#444, #111); + background: -o-linear-gradient(#444, #111); + background: -ms-linear-gradient(#444, #111); + background: linear-gradient(#444, #111); + -moz-box-shadow: 0 -1px rgba(255,255,255,.3); + -webkit-box-shadow: 0 -1px 0 rgba(255,255,255,.3); + box-shadow: 0 -1px 0 rgba(255,255,255,.3); + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-transition: all .2s ease-in-out; + -moz-transition: all .2s ease-in-out; + -ms-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +#menu li:hover > ul { + opacity: 1; + visibility: visible; + margin: 0; +} +#menu ul ul { + top: 0; + left: 150px; + margin: 0 0 0 20px; + _margin: 0; /*IE6 only*/ + -moz-box-shadow: -1px 0 0 rgba(255,255,255,.3); + -webkit-box-shadow: -1px 0 0 rgba(255,255,255,.3); + box-shadow: -1px 0 0 rgba(255,255,255,.3); +} +#menu ul li { + float: none; + display: block; + border: 0; + _line-height: 0; /*IE6 only*/ + -moz-box-shadow: 0 1px 0 #111, 0 2px 0 #666; + -webkit-box-shadow: 0 1px 0 #111, 0 2px 0 #666; + box-shadow: 0 1px 0 #111, 0 2px 0 #666; +} +#menu ul li:last-child { + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} +#menu ul a { + padding: 10px; + width: 130px; + _height: 10px; /*IE6 only*/ + display: block; + white-space: nowrap; + float: none; + text-transform: none; +} +#menu ul a:hover { + background-color: #0186ba; + background-image: -moz-linear-gradient(#04acec, #0186ba); + background-image: -webkit-gradient(linear, left top, left bottom, from(#04acec), to(#0186ba)); + background-image: -webkit-linear-gradient(#04acec, #0186ba); + background-image: -o-linear-gradient(#04acec, #0186ba); + background-image: -ms-linear-gradient(#04acec, #0186ba); + background-image: linear-gradient(#04acec, #0186ba); +} + +/* first and Last child elements +------------------------------------------------------ */ +#menu ul li:first-child > a { + -moz-border-radius: 3px 3px 0 0; + -webkit-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; +} +#menu ul li:first-child > a:after { + content: ''; + position: absolute; + left: 40px; + top: -6px; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #444; +} +#menu ul ul li:first-child a:after { + left: -6px; + top: 50%; + margin-top: -6px; + border-left: 0; + border-bottom: 6px solid transparent; + border-top: 6px solid transparent; + border-right: 6px solid #3b3b3b; +} +#menu ul li:first-child a:hover:after { + border-bottom-color: #04acec +} +#menu ul ul li:first-child a:hover:after { + border-right-color: #0299d3; + border-bottom-color: transparent; +} +#menu ul li:last-child > a { + -moz-border-radius: 0 0 3px 3px; + -webkit-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; +} diff --git a/src/plugins/webstuff/css/Web_Basic-Blue.css b/src/plugins/webstuff/css/Web_Basic-Blue.css index c81bd8c78..d5e0b9bee 100644 --- a/src/plugins/webstuff/css/Web_Basic-Blue.css +++ b/src/plugins/webstuff/css/Web_Basic-Blue.css @@ -775,21 +775,6 @@ div#SourceDetail { div#SourceDetail div#references ol li { padding-bottom: .5em; } -div#SourceCitationReferents ul.Col1 { - list-style-type: decimal -} -div#SourceCitationReferents ul.Col2 { - list-style-type: upper-alpha -} -div#SourceCitationReferents ul.Col3 { - list-style-type: lower-alpha -} -div#SourceCitationReferents ul.Col4 { - list-style-type: upper-roman -} -div#SourceCitationReferents ul.Col5 { - list-style-type: disc -} /* Repositories ------------------------------------------------------ */ diff --git a/src/plugins/webstuff/js/Makefile.am b/src/plugins/webstuff/js/Makefile.am index 9293b1976..a9d9aa5b8 100644 --- a/src/plugins/webstuff/js/Makefile.am +++ b/src/plugins/webstuff/js/Makefile.am @@ -8,7 +8,7 @@ DATAFILES = \ jquery-1.3.2.min.js \ jquery-ui-1.7.2.custom.min.js \ - jquery-1.7.min.js \ + jquery-1.7.1.min.js \ jquery-1.7.1.js diff --git a/src/plugins/webstuff/js/jquery-1.7.min.js b/src/plugins/webstuff/js/jquery-1.7.1.min.js similarity index 100% rename from src/plugins/webstuff/js/jquery-1.7.min.js rename to src/plugins/webstuff/js/jquery-1.7.1.min.js diff --git a/src/plugins/webstuff/webstuff.py b/src/plugins/webstuff/webstuff.py index ac2208cd3..18c062af3 100644 --- a/src/plugins/webstuff/webstuff.py +++ b/src/plugins/webstuff/webstuff.py @@ -130,6 +130,11 @@ def load_on_reg(dbstate, uistate, plugin): ["Fade-Menus", 0, "Fade In/ Out Menus", path_css('Web_Fade-Menus.css'), None, [], [] ], + # WebKit/ Html5/ CSS3 Animated Drop Down Style Sheet + ["Animated Dropdown", 0, "Animated Dropdown", + path_css("Web_Animated-Dropdown.css"), None, [], + path_js("jquery-1.7.1.min.js") ], + # WebKit/ Html5/ CSS3 Drop Down Navigation Menus Style Sheet ["DropDown-Menus", 0, "Drop Down Menus", path_css("Web_DropDown-Menus.css"), None, [], [] ],