From 85e2ef2acb3c47c74c1dd26c41a3645a9000d5fe Mon Sep 17 00:00:00 2001 From: Alain Reguera Delgado Date: Nov 25 2011 01:43:34 +0000 Subject: Update file organization inside `trunk/Scripts/Python/Webenv' directory. --- diff --git a/Scripts/Python/Webenv/Apps/Home/__init__.py b/Scripts/Python/Webenv/Apps/Home/__init__.py deleted file mode 100755 index e69de29..0000000 --- a/Scripts/Python/Webenv/Apps/Home/__init__.py +++ /dev/null diff --git a/Scripts/Python/Webenv/Apps/Home/page.py b/Scripts/Python/Webenv/Apps/Home/page.py deleted file mode 100755 index 97e12eb..0000000 --- a/Scripts/Python/Webenv/Apps/Home/page.py +++ /dev/null @@ -1,91 +0,0 @@ -"""Support module for page layout inside `Home' web application. - -""" -from Apps import page - -app = page.Layout() - - -def page_navibar(): - """Returns application main pages. - - The application main pages are organized as tabs in the - application navigation bar. There is one tab for each main page - inside the application. - - """ - names = ['Page1', 'Page2', 'Page3'] - attrs = [] - - for i in names: - attrs.append({'href': '/webenv/?p=' + i.lower()}) - - if 'p' in page.qs.keys(): - focus = page.qs['p'][0].lower() - else: - focus = '' - - return app.page_navibar(names, attrs, focus) - - -def page_content(): - """Returns page content. - - The page content is determined from the query string, specifically - from the value of `p' variable. - - """ - if 'p' in page.qs.keys(): - p = page.qs['p'][0].lower() - else: - p = '' - - if p == 'page1': - output = app.tag_p('', [12, 1], 'Page Empty.') - elif p == 'page2': - output = app.tag_p('', [12, 1], 'Page Empty.') - elif p == 'page3': - output = app.tag_p({}, [12, 1], 'Page Empty' ) - elif p == 'entry': - output = app.content_details() - else: - output = app.content_list() - - return output - - -def main(): - """Returns final output.""" - - # Define page name. This value is used as reference to determine - # which application to load and what tab in the navigation bar to - # focus on. - app.name = 'Home' - - # Define page title. This value is dislayed on the browser's title - # bar. Notice that we concatenated the page class default value - # here. - app.title += ' :: Home' - - # Define page header. This is the information displayed - # between the page top and page content. - app.header = app.logo() - app.header += app.google_ad_example() - app.header += app.navibar() - app.header += app.releases() - app.header += app.page_links() - app.header += page_navibar() - - # Define page body. This is the information displayed between the - # page header and page footer. - app.body = page_content() - - # Define page footer. This is the information displayed between - # the page bottom and the page content, the last information - # displayed in the page. - app.footer = app.credits() - - # Define page final layout. - html = app.page() - - return html diff --git a/Scripts/Python/Webenv/Apps/Sponsors/__init__.py b/Scripts/Python/Webenv/Apps/Sponsors/__init__.py deleted file mode 100755 index e69de29..0000000 --- a/Scripts/Python/Webenv/Apps/Sponsors/__init__.py +++ /dev/null diff --git a/Scripts/Python/Webenv/Apps/Sponsors/page.py b/Scripts/Python/Webenv/Apps/Sponsors/page.py deleted file mode 100755 index 1791750..0000000 --- a/Scripts/Python/Webenv/Apps/Sponsors/page.py +++ /dev/null @@ -1,91 +0,0 @@ -"""Support module for page layout inside `Sponsors' web application. - -""" -from Apps import page - -app = page.Layout() - - -def page_navibar(): - """Returns application's main pages. - - The application's main pages are organized as tabs in the - application navigation bar. There is one tab for each main page - inside the application. - - """ - names = ['Hardware', 'Hosting', 'Others'] - attrs = [] - - for i in names: - if 'app' in page.qs.keys(): - attrs.append({'href': '/webenv/?app=' + page.qs['app'][0].lower() + '&p=' + i.lower()}) - else: - attrs.append({'href': '/webenv/?p=' + i.lower()}) - - if 'p' in page.qs.keys(): - focus = page.qs['p'][0].lower() - else: - focus = names[0].lower() - - return app.page_navibar(names, attrs, focus) - - -def page_content(): - """Returns page content. - - The page content to show is determined from the query string, - specifically from the value of `p' variable. - - """ - if 'p' in page.qs.keys(): - p = page.qs['p'][0].lower() - else: - p = 'hardware' - - if p == 'hardware': - output = app.tag_h1({'class': 'title'}, [12, 1], 'Hardware Sponsors' ) - elif p == 'hosting': - output = app.tag_h1({'class': 'title'}, [12, 1], 'Hosting Sponsors' ) - elif p == 'others': - output = app.tag_h1({'class': 'title'}, [12, 1], 'Other Sponsors' ) - else: - output = app.tag_p('', [12, 1], 'Page empty.') - - return output - - -def main(): - """Returns final output.""" - - # Define page name. This value is used as reference to determine - # which application to load and what tab in the navigation bar to - # focus on. - app.name = 'Sponsors' - - # Define page title. This value is dislayed on the browser's title - # bar. Notice that we concatenated the page class default value - # here. - app.title += ' :: Sponsors' - - # Define page header. This is the information displayed - # between the page top and the page content. - app.header = app.logo() - app.header += app.google_ad_example() - app.header += app.navibar() - app.header += app.page_links() - app.header += page_navibar() - - # Define page body. This is the information displayed between the - # page header and page footer. - app.body = page_content() - - # Define page footer. This is the information displayed between - # the page bottom and the page content, the last information - # displayed in the page. - app.footer = app.credits() - - # Define page final layout. - html = app.page() - - return html diff --git a/Scripts/Python/Webenv/Apps/Unknown/__init__.py b/Scripts/Python/Webenv/Apps/Unknown/__init__.py deleted file mode 100644 index e69de29..0000000 --- a/Scripts/Python/Webenv/Apps/Unknown/__init__.py +++ /dev/null diff --git a/Scripts/Python/Webenv/Apps/Unknown/page.py b/Scripts/Python/Webenv/Apps/Unknown/page.py deleted file mode 100755 index f7c564e..0000000 --- a/Scripts/Python/Webenv/Apps/Unknown/page.py +++ /dev/null @@ -1,54 +0,0 @@ -"""The `Unknown' web application. - -The Unknown web application is automatically triggered when the page -requested is not defined as valid in `webenv.cgi' script. The -Unknown web application is basically an admonition message describing -the `page not found' issue and where to find the correct links to -start all over. - -""" -from Apps import page - -app = page.Layout() - - -def page_content(): - """Returns page content.""" - output = app.tag_p('', [16,1], 'The page you tried to open was not found in this server. Try one of the links above to start over.') - output = app.admonition('Warning', 'Page not found.', output) - output = app.tag_div({'id':'content-unknown'}, [8,1], output, 1) - return output - - -def main(): - """Returns final output.""" - - # Define page name. This value is used as reference to determine - # which application to load and what tab in the navigation bar to - # focus on. - app.name = 'Unknown' - - # Define page title. This value is dislayed on the browser's title - # bar. Notice that we concatenated the page class default value - # here. - app.title += ' :: Page not found' - - # Define page header. This is the information displayed - # between the page top and the page content. - app.header = app.logo() - app.header += app.google_ad_example() - app.header += app.navibar() - - # Define page body. This is the information displayed between the - # page header and page footer. - app.body = page_content() - - # Define page footer. This is the information displayed between - # the page bottom and the page content, the last information - # displayed in the page. - app.footer = app.credits() - - # Define page final layout. - html = app.page() - - return html diff --git a/Scripts/Python/Webenv/Apps/__init__.py b/Scripts/Python/Webenv/Apps/__init__.py deleted file mode 100755 index e69de29..0000000 --- a/Scripts/Python/Webenv/Apps/__init__.py +++ /dev/null diff --git a/Scripts/Python/Webenv/Apps/page.py b/Scripts/Python/Webenv/Apps/page.py deleted file mode 100755 index 9a449b9..0000000 --- a/Scripts/Python/Webenv/Apps/page.py +++ /dev/null @@ -1,970 +0,0 @@ -# Copyright (C) 2011 The CentOS Project -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# ------------------------------------------------------------------ -# $Id$ -# ------------------------------------------------------------------ -"""Support page construction. - -The page construction is an XHTML document consisting of several -independent components that, when put together, provide organization -to content. Each of these components is set as a method of Layout -class that can be instantiated later from application specific modules. - -When you create a new application package, you need to create a page -module for it and instantiate the Layout class provided here inside -it. Later, the following functions must be created: page_content(), -page_navibar() and main(). These functions are used to define the -content and navigation bar of your application. Both application -content and application navigation are logically organized using -variables passed through the URL. - -Application -=========== - -URL variable: app - -This variable contains the application id. It is a unique numerical -value that starts at 0 and increments one for each new application -that might be added. The application identified by number 0 is the one -used as default when no other application is provided. The -application identified by number 0 is added to database the first time -it is created as part of the initial configuration process. - -Application is the highest level of organization inside -`webenv.cgi' script. Inside applications, there is content in form -of pages and entries. Content can be grouped by categories. - -Pages -===== - -URL variable: page - -This variable contains the page id. It is a unique numerical value -that starts at 0 and increments in one for each new page added to the -application. In contrast to applications, the page identified by -number 0 is not used as default page when no other page is provided. -This configuration is specific to each application and can be -customized inside each application individually, using string values -instead of numerical values when passing values to page variable. - -Generally, when a page variable isn't passed through the URL, the -application module uses the `content_list()' method from Layout class -to display a list of all available content entries while links to -content pages are displayed in the application navigation bar so users -can access them. The unique numerical value of content pages is -specific to each application, so there is one page 0 for each -application available. No page is added to database the first time the -database is created as part of the initial configuration process. - -Pages contain similar information to that described by contents with -few exceptions. Pages, in contrast to entries, can differentiate the -page title from the page name. The page title goes in the page content -itself and describes what the page is about with a phrase. On the -other hand, the page name is generaly one word describing the page -content and is used as link on the application navigation bar. When -no page name is explicitly provided, the first word of page title is -used instead. - -Pages are always accessible inside the same application while contents -aren't. Pages are permanently visible and linkend from each -application specific navigation bar. This kind of pages can be -managed by editors or administrators and can be marked as `draft' to -put it on a special state where it is possible for administrator, -editors and authors to work on it, but impossible for others to read -it until the page be marked as `published' by either the page author -or any members of editor's or administrator's groups. - -Pages can be converted to entires and the oposite. When convertion -occurs, unused information looses its meaning and is kept for -informative purpose, specially in situations when it might be needed -to realize a convertion back into the former state. Notice that in -order to realize such a back and forth convertion it is required that -both pages and entires share the same definition structure. In fact, -that they be the same thing, but able to differentiate themselves -either as page or entry (e.g., through a `type' field.). - -Pages content is under version control. When a page (or entry) is -changed, a verification is performed to determine whether the -information entered in edition matches the last record in the page -history table. When both the information coming from edition and the -last record in the page history table are the same (e.g., no change -happened) the edition action is cancelled and a message is printed out -to notify the action. Otherwise, when the information entered in -edition differs from the last record in the page history table, the -information comming from edition passes to be the last record in the -page history table. In case, a page be reverted to a revision -different to that one being currently the active page, the reverted -revision becomes the active page (e.g., by changing a `status' field -from `false' to `true' in the history table). - -Categories -========== - -Categories exists to organize contents. When an entry is created it is -automatically linked to a category. Categories are managed by -administrators and editors only. Categories can be nested one another -and provide another way of finding information inside the web -environment. Categories are specific to each web application, just as -contents and pages are. The `Unknown' category is created when the -categories table is created for first time, as part of the initial -configuration process so if no explicit category assignation is set by -the user, a default value (the `Unknown' category in this case) is -used to satisfy the connection between contents and categories. - -Referential integrity -===================== - -Referential integrity is not handle in the logic layer provided by -this module, but set inside the database system used to store the -information handled by this module. The most we do about it here, is -to display a confirmation message before committing such actions, so -you can be aware of them. - -""" - -import cgi -import cgitb; cgitb.enable() -from Apps import xhtml - -qs = cgi.parse() - - -def qs_args( names={}): - """Returns query string arguments. - - The query string arguments are used to build links dynamically - and, this way, to create a browsable and logically organized web - environment. Such a construction generally needs to retrive some - of the values previously passed to the query string and add new - ones to it. - - names: A dictionary containing the variable name and value pair - used to build a new query string. - - When a variable is provied without a value, then its value is - retrived from the current query string. If a value isn't found - there neither, then the variable is removed from the new query - string. - - When a variable is provided with its value, then its value is used - to build the new query string. - - """ - output = '' - - names_keys = names.keys() - names_keys.sort() - for key in names_keys: - if names[key] == '': - if key in qs: - names[key] = qs[key][0] - else: - continue - if output == '': - output = '?' - else: - output += '&' - output += key + '=' + str(names[key]) - - return '/webenv/' + output - - -class Layout(xhtml.Strict): - """The Page Layout. - - The page layout is made by combining XHTML tags in specific ways. - These specific combinations make the page components which in turn - can be also combined. Some of these components can be reused and - others don't. The goal of this class is to define what such - components are and describe them well in order to understand how - to use them from application modules when building XHTML documents - dynamically. - - The page layout is initialized with a functional layout that can - be used as reference inside application modules, to create - variations of it. Generally, inside application packages, this - class is instantiated in a module named `page', variables are - reset and functions created in order to satisfy that application - needs. When you need to output one of the page components then you - use this class instantiated methods. When the method you need - doesn't exist in this class, then it is a good time for it to be - created, here ;). - - Notice that most methods defined in this class make direct use of - methods defined by Strict class inside the `xhtml' module. The - Strict class inside xhtml module is inherited inside this class so - all the methods there are also available here. Methods which - doesn't make a direct use of Strict methods are dependencies of - those which do make direct use of Strict methods. - - """ - - - def __init__(self): - """Initialize page data.""" - self.name = 'Home' - self.title = 'The CentOS Project' - self.description = 'Community Enterprise Operating System' - self.keywords = 'centos, project, community, enterprise, operating system' - self.copyright = '2009-2011 The CentOS Project. All rights reserved.' - self.language = 'en' - - # Define page header. This is the information displayed - # between the page top and the page content. - self.header = self.logo() - self.header += self.google_ad() - self.header += self.navibar() - self.header += self.releases() - self.header += self.page_links() - self.header += self.page_navibar() - - # Define page body. This is the information displayed between - # the page header and page footer. - self.body = 'None' - - # Define page footer. This is the information displayed - # between the page bottom and the page content, the last - # information displayed in the page. - self.footer = self.credits() - - - def logo(self): - """Returns The CentOS Logo. - - The page logo is displayed on the top-left corner of the page. - We use this area to show The CentOS Logo, the main visual - representation of The CentOS Project. In order to print the - page logo correctly, the image related must be 78 pixels of - height. - - """ - attrs = [] - attrs.append({'id': 'logo'}) - attrs.append({'title': 'Community Enterprise Operating System', 'href': '/webenv/'}) - attrs.append({'src': '/public/Images/centos-logo.png', 'alt': 'CentOS'}) - - return self.tag_div(attrs[0], [8,1], self.tag_a(attrs[1], [12,1], self.tag_img(attrs[2], [0,0]), 0), 1) - - - def google_ad_example(self): - """Returns Google advertisement for offline testings.""" - title = 'Google Advertisement' - url = '/public/Images/ads-sample-468x60.png' - image = self.tag_img({'src': url, 'alt': title}, [0,0]) - link = self.tag_a({'href': url, 'title': title}, [12,1], image) - output = self.tag_div({'class':'google-ad'}, [8,1], link, 1) - output += self.separator({'class':'page-line'}, [8,1]) - - return output - - - def google_ad(self): - """Returns Google advertisement for online using.""" - - properties = {} - properties['google_ad_client'] = 'pub-6973128787810819' - properties['google_ad_width'] = '468' - properties['google_ad_height'] = '60' - properties['google_ad_format'] = '468x60_as' - properties['google_ad_type'] = 'text_image' - properties['google_ad_channel'] = '' - properties['google_color_border'] = '204c8d' - properties['google_color_bg'] = '345c97' - properties['google_color_link'] = '0000FF' - properties['google_color_text'] = 'FFFFFF' - properties['google_color_url'] = '008000' - - attrs = {} - attrs['type'] = "text/javascript" - - output = '\n' - - properties = self.tag_script(attrs, [12,1], output, 1) - - attrs['src'] = "http://pagead2.googlesyndication.com/pagead/show_ads.js" - - source = self.tag_script(attrs, [12,1], ' ', 0) - - output = self.tag_div({'class':'google-ad'}, [8,1], properties + source, 1) - output += self.separator({'class':'page-line'}, [8,1]) - - return output - - - def navibar(self): - """Returns webenv navigation bar. - - The webenv navigation bar organizes links to main web - applications The CentOS Project makes use of. Links to these - web applications stay always visible, no matter what web - application the user be visiting (e.g., Wiki, Lists, Forums, - Projects, Bugs, Docs, Downloads and Sponsors.). Notice that - some of these web applications are out of `webenv.cgi' - scope and they need to code their own webenv navigation bars - in a way that coincide the one set by `webenv.cgi'. - - """ - names = ['Home', 'Wiki', 'Lists', 'Forums', 'Projects', 'Bugs', 'Docs', 'Downloads', 'Sponsors'] - attrs = [] - focus = self.name - - for i in range(len(names)): - if names[i].lower() == 'home': - attrs.append({'href': '/webenv/'}) - else: - attrs.append({'href': '/webenv/?app=' + names[i].lower()}) - - tabs = self.navibar_tabs(names, attrs, focus) - tabs += self.separator() - - return tabs - - - def navibar_tabs(self, names, attrs, focus=''): - """Returns navigation tabs. - - The navigation tabs are the smaller components a navigation - bar like "top-level navigation bar" and "application - navigation bar" are made of. - - names: List containing link names of tabs. - - attrs: List containing a dictionary for each tab link name - inside the `names' list. Dictionaries inside attrs - argument contain the link attributes (e.g., accesskey, - title, and href) used by link names so they can be - linkable once rendered. - - focus: Name of the link marked as current. - - """ - navibar_tabs = '' - - for i in range(len(names)): - output = self.tag_span('', [0,0], str(names[i])) - output = self.tag_a(attrs[i], [16,1], output) - if str(names[i]).lower() == focus.lower(): - output = self.tag_span({'class': 'current'}, [12,1], output, 1) - else: - output = self.tag_span('', [12,1], output, 1) - navibar_tabs += output - - return self.tag_div({'class': 'tabs'}, [8,1], navibar_tabs, 1) - - - def releases(self): - """Returns The CentOS Distribution last releases. - - This method introduces the `releases' method by providing - links to it. - - names: List containing release numbers in the form M.N, where M - means major release and N minor release. - - attrs: List containing a dictionary for each release number - provided in `names' argument. These dictionaries provide - the link attributes required by release numbers in order - for them to be transformed into valid links once the page - be rendered. - - """ - releases = '' - - names = [] - names.append('6.0') - - attrs = [] - attrs.append({'href': qs_args({'p':'releases', 'id': 6.0})}) - - - title = self.tag_a({'href': qs_args({'p':'releases'})}, [0,0], 'Last Releases') + ':' - title = self.tag_span({'class': 'title'}, [16,1], title) - - for i in range(len(names)): - link = self.tag_a(attrs[i], [20,1], names[i]) - if i == len(names) - 1: - span = self.tag_span({'class': 'last release'}, [16,1], link, 1) - else: - span = self.tag_span({'class': 'release'}, [16,1], link, 1) - releases += span - releases = self.tag_div({'class': 'left'}, [12,1], title + releases, 1) - - rsslink = self.tag_span('', [0,0], 'RSS') - rsslink = self.tag_a({'href': qs_args({'rss':'releases'}), 'title': 'RSS'}, [20,1], rsslink) - rsslink = self.tag_span({'class': 'rss'}, [16,1], rsslink, 1) - rsslink = self.tag_div({'class': 'right'}, [12, 1], rsslink, 1) - - return self.tag_div({'id': 'last-releases'}, [8,1], releases + rsslink, 1) - - - def user_links_logs(self): - """Return links related to user's logs. - - This function introduces the `logs' module. The `logs' module - registers all user's activity, from login to logout. This link - must be display/accessible only after a user has successfully - login. - - """ - last_visit = self.tag_a({'href': qs_args({'app':'', 'p':'logs'})}, [0,0], 'Logs') - return self.tag_div({'class': 'logs'}, [12, 1], last_visit, 1) - - - def user_links_session(self): - """Returns links related to user's session. - - This function introduces the `session' module. The `session' - module provides state to user interactions so their action can - be registered individually. - - """ - names = [] - attrs = [] - session = '' - - names.append('Lost your password?') - attrs.append({'href': qs_args({'app':'', 'p':'lostpwd'})}) - names.append('Register') - attrs.append({'href': qs_args({'app':'', 'p':'register'})}) - names.append('Login') - attrs.append({'href': qs_args({'app':'', 'p':'login'})}) - - for i in range(len(names)): - output = self.tag_a(attrs[i], [20,1], str(names[i]), 0) - if i == len(names) - 1: - output = self.tag_span({'class': 'last'}, [16,1], output, 1) - else: - output = self.tag_span('', [16,1], output, 1) - session += output - - return self.tag_div({'class': 'session'}, [12,1], session, 1) - - - def user_links_trails(self, names=['None'], attrs=[{'href': '/webenv/'}]): - """Returns page trails (a.k.a. breadcrumbs). - - The page breadcrumbs record the last pages the user visited - inside the current web application. Notice that page - breadcrumbs are user-specific information, so it isn't - possible to implement them until a way to manage user sessions - be implemeneted inside `webenv.cgi' script. Until then, - keep the tag construction commented and return an empty value. - - names: List with trail link names. - - attrs: Dictionary with trail link attributes. - - """ - links = '' - - for i in range(len(names)): - if i == len(names) - 1: - output = self.tag_span({'class':'last'}, [16,1], self.tag_a(attrs[i], [20, 1], names[i]), 1) - else: - output = self.tag_span('', [16,1], self.tag_a(attrs[i], [20, 1], names[i], 0), 1) - links += output - - return self.tag_div({'class': 'trail'}, [12,1], links, 1) - - - def user_links(self): - """Returns user related links. - - The user links are specific to each web application. They are - shown over the application navigation bar. - - """ - userlinks = self.user_links_logs() - userlinks += self.user_links_session() - userlinks += self.user_links_trails() - - return self.tag_div({'class': 'userlinks'}, [8,1], userlinks, 1) - - - def page_navibar(self, names=['Welcome'], attrs=[{'href':'/webenv/?p=welcome'}], focus='Welcome'): - """Returns navigation bar for application main pages. - - names: List containing link names. - - attrs: List containing one dictionary for each link name in - `names' argument. Dictionaries here contain the link - attributes needed to make linkable tabs once the page is - rendered. - - """ - navibar_app = self.navibar_tabs(names, attrs, focus) - navibar_app += self.separator({'class': 'page-line white'}, [8,1]) - - return navibar_app - - - def separator(self, attrs={'class': 'page-line'}, indent=[16,1]): - """Returns separator. - - The separator construction is mainly used to clear both sides - inside the page, specially when floating elements are around. - - attrs: Dictionary containing hr's div attributes. - - indent: List containing hr's div indentation values. - - """ - line = self.tag_hr({'style': 'display:none;'}, [0,0]) - line = self.tag_div(attrs, indent, line) - - return line - - - def license(self): - """Retruns license link.""" - license = 'Creative Commons Attribution-Share Alike 3.0 Unported License' - license = self.tag_a({'href': 'http://creativecommons.org/licenses/by-sa/3.0/'}, [0,0], license) + '.' - - return license - - - def metadata(self): - """Returns metadata.""" - metadata = self.tag_meta({'http-equiv': 'content-type', 'content': 'text/html; charset=UTF-8'}, [4,1]) - metadata += self.tag_meta({'http-equiv': 'content-style-type', 'content': 'text/css'}, [4,0]) - metadata += self.tag_meta({'http-equiv': 'content-language', 'content': str(self.language)}, [4,1]) - metadata += self.tag_meta({'name': 'keywords', 'content': str(self.keywords)}, [4,0]) - metadata += self.tag_meta({'name': 'description', 'content': str(self.description)}, [4,1]) - metadata += self.tag_meta({'name': 'copyright', 'content': 'Copyright © ' + str(self.copyright)}, [4,0]) - metadata += self.tag_title('', [4,1], self.title) - metadata += self.tag_link({'href': '/public/stylesheet.css','rel': 'stylesheet', 'type': 'text/css'}, [4,0]) - metadata += self.tag_link({'href': '/public/centos-fav.png', 'rel': 'shortcut icon', 'type': 'image/png'}, [4,1]) - - return self.tag_head('', [0,1], metadata) - - - - - def searchform(self, size=15): - """Returns search form. - - The search form redirects user from the current page onto the - search page, where the keywords previously introduced in the - input field are processed then. - - size: A number discribing how large the search box is. - - """ - input = self.tag_input({'type':'text', 'value':'', 'size':size}, [0,0]) - - action = self.tag_dt({}, [20,1], 'Search') - action += self.tag_dd({}, [20,1], input) - action = self.tag_dl({'class':'search'}, [16,1], action, 1) - - return self.tag_form({'action': qs_args({'app':'', 'p':'search'}), - 'method':'post', 'title':'Search'}, - [12,1], action, 1) - - - def content_resumen(self, attrs, id, title, user_id, commit_date, - update_date, category_id, comments, abstract): - """Returns content resumen. - - The content resumen is used to build the list of contents, - output by `content_list()' method. The content resumen intends - to be concise and informative so the user can grab a general - idea about the related content and what it is about. - - attrs: A dictionary discribing the rows style. This is useful - to alternate the row background colors. - - id: A unique numerical value referring the content - identification. This is the value used on administrative - tasks like updating and deleting. - - title: A few words phrase describing the content, up to 255 - characters. - - author_id: A string referring the user email address, as - specified by RFC2822. The user email address is used as id - inside The CentOS User LDAP server, where user specific - information (e.g., surname, lastname, office, phone, etc.) - are stored in. This is the field that bonds the user with - the content he/she produces. - - commit_date: A string referring the timestamp the content - arrived to database for time. - - update_date: A string representing the timestamp the content - was updated/revised for last time. - - category_id: A number refering the category id the content is - attached to. - - abstract: One paragraphs describing the content. This - information is used to build the page metadata - information. When this value is not provided no abstract - information is displayed in the page, but the is built using article's first 255 - characters. - - comments: A number representing how many comments the content - has received since it is in the database. - - The content itself is not displayed in the resumen, but in - `content_details()'. - - """ - title = self.tag_a({'href': qs_args({'app':'', 'p':'entry', 'id':id})}, [0,0], title) - title = self.tag_h3({'class': 'title'}, [20,1], title, 0) - info = self.content_info(id, user_id, commit_date, - update_date, category_id, comments, - abstract) - return self.tag_div(attrs, [16,1], title + info, 1) - - - def pagination(self): - """Return content pagination.""" - previous = self.tag_a({'href':''}, [0,0], 'Previous') - previous = self.tag_span({'class':'previous'}, [20,1], previous) - next = self.tag_a({'href':''}, [0,0], 'Next') - next = self.tag_span({'class':'next'}, [20,1], next) - separator = self.separator({'class':'page-line'}, [20,1]) - return self.tag_div({'class':'pagination'}, [16,1], previous + - next + separator, 1) - - - def content_info(self, content_id, user_id, commit_date, - update_date, category_id, comments, abstract): - """Return content information. - - The content information provides a reduced view of content so - people can make themselves an idea of what the content talks - about. The content information displays content's title, - author, timestamp, related category, number of comments and an - abstract of the whole content. - - """ - categories = [] - categories.append('Unknown') - categories.append('Erratas') - categories.append('Articles') - categories.append('Events') - - if category_id <= len(categories): - category_name = categories[category_id].capitalize() - else: - category_id = 0 - category_name = categories[category_id].capitalize() - - category_name = self.tag_a({'href': qs_args({'app':'', 'p':'categories', 'id':category_id})}, [0,0], category_name) - category_name = self.tag_span({'class':'category'}, [24,1], category_name) - - users = {} - users['al@centos.org'] = 'Alain Reguera Delgado' - users['ana@centos.org'] = 'Ana Tamara Reguera Gattorno' - users['alina@centos.org'] = 'Alina Reguera Gattorno' - - if user_id in users.keys(): - user_name = self.tag_a({'href':'mailto:' + user_id}, [0,0], users[user_id]) - user_name = self.tag_span({'class':'author'}, [24,1], 'Written by ' + user_name) - - if update_date != commit_date: - date = self.tag_span({'class':'date'}, [24,1], update_date) - else: - date = self.tag_span({'class':'date'}, [24,1], commit_date) - - - comments_attrs = {'href': qs_args({'app':'', 'p':'entry', 'id':content_id}) + '#comments'} - if comments == 1: - comments = self.tag_a(comments_attrs, [0,0], str(comments) + ' comment') - elif comments > 1: - comments = self.tag_a(comments_attrs, [0,0], str(comments) + ' comments') - else: - comments = 'No comments' - comments = self.tag_span({'class':'comment'}, [24,1], comments) - - abstract = self.tag_p({'class':'abstract'}, [24,1], abstract) - - return self.tag_div({'class': 'info'}, [20,1], user_name + date + category_name + comments + abstract, 1) - - - def content_list(self): - """Return list of content. - - The list of content is used to explore the content available - inside specific pages of specific web applications. The - information is displayed through paginated rows of content - that can be filtered to reduce the search results based on - patterns. By default, the list of content displays 15 rows, - but this value can be changed in user's preferences. - - """ - output = '' - count = 0 - rows = [] - rows.append([0, 'Introduction to CentOS Web Environment', - 'al@centos.org', - '2011-8-30 12:33:11', - '2011-8-30 12:33:11', - 0, - 0, - 'This is the abstract paragrah of content. '*10]) - rows.append([1, 'Creating New Applications', - 'al@centos.org', - '2011-8-30 12:33:11', - '2011-8-30 12:33:11', - 2, - 1, - 'This is the abstract paragrah of content. '*5]) - rows.append([2, 'Texinfo Documentation Backend', - 'al@centos.org', - '2011-8-30 12:33:11', - '2011-8-30 12:33:11', - 1, - 5, - 'This is the abstract paragrah of content. '*8]) - - for row in rows: - if count == 0: - attrs = {'class': 'dark row'} - count += 1 - else: - attrs = {'class': 'light row'} - count = 0 - output += self.content_resumen(attrs, *row) - - list = output + self.pagination() + self.separator() - list = self.tag_div({'id':'content-list'}, [12,1], list, 1) - actions = self.searchform() + self.categories() + self.archives() - actions = self.tag_div({'id':'content-actions'}, [8,1], actions, 1) - - return actions + list - - - def content_details(self): - """Return content details. - - The content detail is shown for contents and pages. - """ - output = '' - rows = [] - rows.append([0, 'Introduction to CentOS Web Environment', - 'al@centos.org', - '2011-8-30 12:33:11', - '2011-8-30 12:33:11', - 0, - 0, - 'This is the abstract paragrah of content. '*10, - 'This is the first paragraph of content'*10 + "\n" - 'This is the second paragraph of content'*20 + - "\n" + 'This is the third paragraph of content.'*10 + "\n"]) - rows.append([1, 'Creating New Applications', - 'al@centos.org', - '2011-8-30 12:33:11', - '2011-8-30 12:33:11', - 2, - 1, - 'This is the abstract paragrah of content. '*5, - "This is the first paragraph of content\n\ - This is the second paragraph of content.\n\ - This is the third paragraph of content."]) - rows.append([2, 'Texinfo Documentation Backend', - 'al@centos.org', - '2011-8-30 12:33:11', - '2011-8-30 12:33:11', - 1, - 5, - 'This is the abstract paragrah of content. '*8, - "This is the first paragraph of content.\n\ - This is the second paragraph of content.\n\ - This is the third paragraph of content."]) - - if 'id' in qs: - id = int(qs['id'][0]) - title = rows[id][1] - email = rows[id][2] - commit_date = rows[id][3] - update_date = rows[id][4] - category = rows[id][5] - comments = rows[id][6] - abstract = self.tag_p({}, [0,0], rows[id][7]) - - output = self.tag_h1({'class':'title'}, [12,1], title) - output += self.content_info(id, email, commit_date, update_date, category, comments, abstract) - output += self.tag_p({}, [20,1], rows[id][8]) - output += self.comments() - - return self.tag_div({'id':'content-details'}, [12,1], output, 1) - - - def comments(self): - """Returns content specific list of comments. - - """ - output = self.tag_a({'name':'comments'}, [0,0], 'Comments') - output = self.tag_h2({'class':'title comments'}, [12,1], output, 0) - - return output - - - def categories(self): - """Returns list of categories. - - """ - categories = ['Unknown', 'Articles', 'Erratas', 'Events'] - dt = self.tag_dt({}, [16,1], 'Categories') - dd = '' - for id in range(len(categories)): - category_attrs = {'href': qs_args({'app':'', 'p':'categories', 'id':id})} - a = self.tag_a(category_attrs, [0,0], categories[id] + ' (0)') - dd += self.tag_dd({}, [16,1], a) - - return self.tag_dl({},[12,1], dt + dd, 1) - - - def archives(self): - """Returns archives.""" - archives = {} - archives['2011'] = ['January', 'February', 'March', 'April', 'May'] - archives['2010'] = ['January', 'February'] - - dt = self.tag_dt({}, [16,1], 'Archives') - year_dl = '' - year_dd = '' - - for key in archives.keys(): - year_dt = self.tag_dt({},[20,1], key) - for id in range(len(archives[key])): - a = self.tag_a({'href': qs_args({'app':'', 'p':'archives', 'year': key, 'month': id + 1})}, [0,0], archives[key][id] + ' (0)') - year_dd += self.tag_dd({}, [20,1], a) - year_dl += self.tag_dl({'class':'year'}, [16,1], year_dt + year_dd, 1) - year_dd = '' - - return self.tag_dl({},[12,1], dt + year_dl, 1) - - - def page_top(self): - """Returns page top anchor.""" - return self.tag_a({'name':'top'}, [0,1]) - - - def page_header(self): - """Returns page header. - - The page_header is common to all application modules and - """ - return self.tag_div({'id': 'page-header'}, [4,1], self.header, 1) - - - def page_body(self): - """Returns page body. - - The page_body is specific to each application module and is - there where it must be constructed. The construction itself - takes place through the `page_content()' function which does a - return through an instantiated `content_' prefixed method. - The `content_' prefixed method used depends on the kind of - content you want to print out (e.g., `content_list()' for a - content list, `detail()' for a detailed view of content, - etc.). Later, the `body' variable instantiated from this class - is reset in the `main()' function with the value returned from - `page_content()' so the desired content layout can be printed - out. - - """ - return self.tag_div({'id':'page-body'}, [4,1], self.body, 1) - - - def page_links(self): - """Returns page links.""" - page_links = self.user_links() - return self.tag_div({'id': 'pagelinks'}, [8,1], page_links, 1) - - - def page_footer(self): - """Retruns page footer.""" - return self.tag_div({'id': 'page-footer'}, [4,1], self.credits(), 1) - - - def page_wrap(self): - """Returns page wrap.""" - return self.tag_div({'id': 'wrap'}, [0,1], self.page_header() + self.page_body() + self.page_footer(), 1) - - - def admonition(self, title='Note', subtitle="", body=""): - """Returns page admonition. - - title: Admonition's title. - - subtitle: Admonition's subtitle. The value of this argument is - concatenated on the right side of title using a colon (:) - as separator. Notice that this value is expanded inside - the

tag and there is no need to introduce extra tags - here. - - body: Admonition's body. The values passed through this - arguments needs to be XHTML code returned from - `self.tag()'. Preferably, paragraphs (p), tables (table), - lists (ul, ol, dl) and pre-formatted texts (pre). - - """ - if title == '': - return '' - else: - title = str(title.capitalize()) - - if subtitle != '': - subtitle = ': ' + str(subtitle.capitalize()) - - if body != '': - body = str(body) - - admonitions = ['Note', 'Tip', 'Important', 'Caution', 'Warning', 'Redirected', 'Success', 'Error'] - - if title in admonitions: - attrs = {'class': 'admonition ' + title.lower()} - image = self.tag_img({'src': '/public/Images/' + title.lower() + '.png', 'alt': title}, [16,1]) - title = self.tag_h3({'class': 'title'}, [16,1], title + subtitle, 0) - output = image + title + body + self.separator() - else: - attrs = {'class': 'admonition unknown'} - title = self.tag_h3({'class': 'title'}, [16,1], title + subtitle, 1) - output = title + body - - return self.tag_div(attrs, [12,1], output, 1) - - - def credits(self): - """Returns page credits.""" - copyright = self.tag_p({'class': 'copyright'}, [12,1], 'Copyright © ' + str(self.copyright)) - license = self.tag_p({'class': 'license'}, [12,1], 'This website is licensed under a ' + str(self.license())) - credits = self.tag_img({'src': '/public/Images/top.png', 'alt': 'Top'}, [0,0]) - credits = self.tag_a({'title': 'Top', 'href': '#top'}, [16,1], credits) - credits = self.tag_div({'class': 'top'}, [12,1], credits, 1) - credits = str(credits) + str(copyright) + str(license) - credits = self.tag_div({'class': 'credits'}, [8,1], credits, 1) - - return credits - - - def page(self): - """Returns page final output.""" - html = self.doctype() - html += self.tag_html({'xmlns': 'http://www.w3.org/1999/xhtml', 'dir': 'ltr', - 'lang': str(self.language), 'xml:lang': str(self.language)}, [0,1], - self.metadata() + self.page_top() + self.page_wrap()) - - return html diff --git a/Scripts/Python/Webenv/Apps/xhtml.py b/Scripts/Python/Webenv/Apps/xhtml.py deleted file mode 100755 index be646b5..0000000 --- a/Scripts/Python/Webenv/Apps/xhtml.py +++ /dev/null @@ -1,1451 +0,0 @@ -# Copyright (C) 2011 The CentOS Project -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# ------------------------------------------------------------------ -# $Id$ -# ------------------------------------------------------------------ -"""Support XHTML construction. - -XHTML construction, as set here, uses the Extensible HTML version 1.0 -DTDs (/usr/share/sgml/xhtml1/xhtml1-20020801/DTD/) as reference. XHTML -construction is required by page module. -""" - - -class Strict: - """Implements XHTML strict document type definition.""" - - - # Core attributes common to most elements. - coreattrs = ['id', # document-wide unique id - 'class', # space separated list of classes - 'style', # associated style info - 'title' # advisory title/amplification - ] - - # Internationalization attributes. - i18n = ['lang', # language code (backwards compatible) - 'xml:lang', # language code (as per XML 1.0 spec) - 'dir' # direction for weak/neutral text - ] - - # Attributes for common UI events. - events = ['onclick', # a pointer button was clicked - 'ondblclick', # a pointer button was double clicked - 'onmousedown', # a pointer button was pressed down - 'onmouseup', # a pointer button was released - 'onmousemove', # a pointer was moved onto the element - 'onmouseout', # a pointer was moved away from the element - 'onkeypress', # a key was pressed and released - 'onkeydown', # a key was pressed down - 'onkeyup' # a key was released - ] - - # Attributes for elements that can get the focus. - focus = ['accesskey', # accessibility key character - 'tabindex', # position in tabbing order - 'onfocus', # the element got the focus - 'onblur' # the element lost the focus - ] - - # Attributes generic format. - attrs = coreattrs + i18n + events - - - def __init__(self): - """Initialize class data.""" - pass - - - def tag(self, name, attrs, indent=[8,1], content="", has_child=0): - """Returns generic XHTML tag definition. - - Arguments: - - name: The XHTML tag's name. Notice that this function doesn't - verify nor validate the XHTML tags you provide. It is up - to you write them correctly considering the XHTML standard - definition. - - attrs: The XHTML tag's attribute. Notice that this function - doesn't verify the attributes assignation to tags. You - need to know what attributes are considered valid to the - tag you are creating in order to build a well-formed XHTML - document. Such verification can be achived inside firefox - browser through the `firebug' plugin. - - indent: The XHTML tag's indentation (Optional). This argument - is a list of two numerical values. The first value in the - list represents the amount of horizontal spaces between - the beginning of line and the opening tag. The second - value in the list represents the amount of vertical spaces - (new lines) between tags. - - content: The XHTML tag's content (Optional). This argument - provides the information the tag encloses. When this - argument is empty, tag is rendered without content. - - has_child: The XHTML tag has a child? (Optional). This - argument is specifies whether a tag has another tag inside - (1) or not (0). When a tag has not a child tag, - indentation is applied between the tag content and the - closing tag provoking an unecessary spaces to be shown. - Such kind of problems are prevented by setting this option - to `0'. On the other hand, when a tag has a child tag - inside, using the value `1' will keep the closing tag - indentation aligned with the opening one. - - This function encapsulates the construction of XHTML tags. - Use this function wherever you need to create XHTML tags. It - helps to standardize tag constructions and their final output - and. This function provides a consistent way of producing - output for XHTML documents. - """ - if indent[0] > 0: - h_indent = ' '*indent[0] - else: - h_indent = '' - - if indent[1] > 0: - v_indent = "\n"*indent[1] - else: - v_indent = '' - - output = v_indent + h_indent + '<' + str(name) - if len(attrs) > 0: - attr_names = attrs.keys() - attr_names.sort() - for attr_name in attr_names: - output += ' ' + str(attr_name) + '="' + str(attrs[attr_name]) + '"' - if content == '': - output += ' />' - else: - output += '>' - output += str(content) - if has_child == 1: - output += h_indent + '' - else: - output += '' - output += v_indent - - return output - - - # ------------------------------------------------------------------ - # Document Type Definition - # ------------------------------------------------------------------ - - def doctype(self): - """Return document type definition.""" - output = '' + "\n" - output += '' + "\n" - - return output - - - # ------------------------------------------------------------------ - # Document Structure - # ------------------------------------------------------------------ - - def tag_html(self, attrs, indent, content, has_child=1): - """Returns document structure definition. - - - - - The namespace URI designates the document profile. - - """ - return self.tag('html', attrs, indent, content, has_child=1) - - - # ------------------------------------------------------------------ - # Document Head - # ------------------------------------------------------------------ - - def tag_head(self, attrs, indent, content, has_child=1): - """Returns document head definition. - - - - - - - Content model is %head.misc; combined with a single title and - an optional base element in any order. - - """ - return self.tag('head', attrs, indent, content, has_child) - - - def tag_title(self, attrs, indent, content, has_child=0): - """Returns title definition. - - - - - The title element is not considered part of the flow of text. - It should be displayed, for example as the page header or - window title. Exactly one title is required per document. - - """ - return self.tag('title', attrs, indent, content, has_child) - - - def tag_base(self, attrs, indent): - """Returns document base URI. - - - - - """ - return self.tag('base', attrs, indent) - - - def tag_meta(self, attrs, indent): - """Returns generic metainformation. - - - - - """ - return self.tag('meta', attrs, indent) - - - def tag_link(self, attrs, indent): - """Returns relationship values. - - - - - Relationship values can be used in principle: - - a) for document specific toolbars/menus when used with the - link element in document head e.g. start, contents, - previous, next, index, end, help. - - b) to link to a separate style sheet (rel="stylesheet"). - - c) to make a link to a script (rel="script"). - - d) by stylesheets to control how collections of html nodes - are rendered into printed documents. - - e) to make a link to a printable version of this document - e.g. a PostScript or PDF version (rel="alternate" - media="print"). - - """ - return self.tag('link', attrs, indent) - - - def tag_style(self, attrs, indent, content, has_child=0): - """Returns style info. - - - - - """ - return self.tag('style', attrs, indent, content, has_child) - - - def tag_script(self, attrs, indent, content="", has_child=0): - """Returns script statement. - - - - - - """ - return self.tag('script', attrs, indent, content, has_child) - - - def tag_noscript(self, attrs, indent, content, has_child=1): - """Returns alternate content container for non script-based - rendering. - - - - - """ - return self.tag(self, attrs, indent, content, has_child) - - - # ------------------------------------------------------------------ - # Document Body - # ------------------------------------------------------------------ - - def tag_body(self, attrs, indent, content, has_child=1): - """Returns document body definition. - - - - - """ - return self.tag('body', attrs, indent, content, has_child) - - - def tag_div(self, attrs, indent, content, has_child=0): - """Returns generic language/style container. - - - - - """ - return self.tag('div', attrs, indent, content, has_child) - - - # ------------------------------------------------------------------ - # Paragraphs - # ------------------------------------------------------------------ - - def tag_p(self, attrs, indent, content, has_child=0): - """Returns paragraph definition. - - - - - When content is introduced inside the database, it goes - without any XHTML markup. This method transforms newline - separated strings into XHTML paragraphs. - - """ - output = '' - for line in content.splitlines(): - if line == '': continue - output += self.tag('p', attrs, indent, line.strip(), has_child) - return output - - - # ------------------------------------------------------------------ - # Headings - # ------------------------------------------------------------------ - # There are six levels of headings from h1 (the most important) to - # h6 (the least important). - # ------------------------------------------------------------------ - - def tag_h1(self, attrs, indent, content, has_child=0): - """Returns h1 definition. - - - - - """ - return self.tag('h1', attrs, indent, content, has_child) - - - def tag_h2(self, attrs, indent, content, has_child=0): - """Returns h2 definition. - - - - - """ - return self.tag('h2', attrs, indent, content, has_child) - - - def tag_h3(self, attrs, indent, content, has_child): - """Returns h3 definition. - - - - - """ - return self.tag('h3', attrs, indent, content, has_child) - - - def tag_h4(self, attrs, indent, content, has_child): - """Returns h4 definition. - - - - - """ - return self.tag('h4', attrs, indent, content, has_child) - - - def tag_h5(self, attrs, indent, content, has_child=0): - """Returns h5 definition. - - - - - """ - return self.tag('h5', attrs, indent, content, has_child) - - - def tag_h6(self, attrs, indent, content, has_child=0): - """Returns h6 definition. - - - - - """ - return self.tag('h6', attrs, indent, content, has_child) - - - # ------------------------------------------------------------------ - # Lists - # ------------------------------------------------------------------ - - def tag_ul(self, attrs, indent, content, has_child=1): - """Returns unordered list definition. - - - - - """ - return self.tag('ul', attrs, indent, content, has_child) - - - def tag_ol(self, attrs, indent, content, has_child=1): - """Returns ordered (numbered) list definition. - - - - - """ - return self.tag('ol', attrs, indent, content, has_child) - - - def tag_li(self, attrs, indent, content, has_child=0): - """Returns item definition for both ordered (ol) and unordered - (ul) lists. - - - - - """ - return self.tag('li', attrs, indent, content, has_child) - - - def tag_dl(self, attrs, indent, content, has_child=1): - """Returns definition list definition. - - - - - """ - return self.tag('dl', attrs, indent, content, has_child) - - - def tag_dt(self, attrs, indent, content, has_child=0): - """Returns term of definition lists. - - - - - """ - return self.tag('dt', attrs, indent, content, has_child) - - - def tag_dd(self, attrs, indent, content, has_child=0): - """Returns definition of definition lists. - - - - - """ - return self.tag('dd', attrs, indent, content, has_child) - - - # ------------------------------------------------------------------ - # Address - # ------------------------------------------------------------------ - - def tag_address(self, attrs, indent, content='', has_child=0): - """Returns information on author. - - - - - """ - return self.tag('address', attrs, indent, content) - - - # ------------------------------------------------------------------ - # Horizontal Rule - # ------------------------------------------------------------------ - - def tag_hr(self, attrs, indent): - """Returns horizontal rule. - - - - - """ - return self.tag('hr', attrs, indent) - - - # ------------------------------------------------------------------ - # Preformatted text - # ------------------------------------------------------------------ - - def tag_pre(self, attrs, indent, content): - """Returns preformatted text. - - - - - content is %Inline; excluding "img|object|big|small|sub|sup" - - """ - return self.tag('pre', attrs, indent, content) - - - # ------------------------------------------------------------------ - # Block-line Quotes - # ------------------------------------------------------------------ - - def tag_blockquote(self, attrs, indent, content): - """Returns block-line quote. - - - - - """ - return self.tag('blockquote', attrs, indent, content) - - - # ------------------------------------------------------------------ - # Inserted/Deleted Text - # ------------------------------------------------------------------ - - def tag_ins(self, attrs, indent, content): - """Returns inserted text. - - - - - Inserted texts are allowed in block and inline content, but - its inappropriate to include block content within an ins - element occurring in inline content. - - """ - return self.tag('ins', attrs, indent, content) - - - def tag_del(self, attrs, indent, content): - """Returns deleted text. - - - - - Deleted texts are allowed in block and inline content, but its - inappropriate to include block content within an ins element - occurring in inline content. - - """ - return self.tag('ins', attrs, indent, content) - - - # ------------------------------------------------------------------ - # The Anchor Element - # ------------------------------------------------------------------ - - def tag_a(self, attrs, indent, content='', has_child=0): - """Returns the anchor element. - - - - - content is %Inline; except that anchors shouldn't be nested. - """ - return self.tag('a', attrs, indent, content, has_child) - - - # ------------------------------------------------------------------ - # Inline Elements - # ------------------------------------------------------------------ - - def tag_span(self, attrs, indent, content, has_child=0): - """Returns span definition. - - - - - """ - return self.tag('span', attrs, indent, content, has_child) - - - def tag_dbo(self, attrs, indent, content, has_child=0): - """Returns dbo definition. - - - - - """ - return self.tag('dbo', attrs, indent, content, has_child) - - - def tag_br(self, attrs, indent): - """Returns break definition. - - - - - """ - return self.tag('br', attrs, indent) - - - def tag_em(self, attrs, indent, content, has_child=0): - """Returns emphasis definition. - - - - - """ - return self.tag('em', attrs, indent, content, has_child) - - - def tag_strong(self, attrs, indent, content, has_child=0): - """Returns strong emphasis definition. - - - - - """ - return self.tag('strong', attrs, indent, content, has_child) - - - def tag_dfn(self, attrs, indent, content, has_child=0): - """Returns definitional definition. - - - - - """ - return self.tag('dfn', attrs, indent, content, has_child) - - - def tag_code(self, attrs, indent, content, has_child=0): - """Returns program code definition. - - - - - """ - return self.tag('code', attrs, indent, content, has_child) - - - def tag_samp(self, attrs, indent, content, has_child=0): - """Returns sample definition. - - - - - """ - return self.tag('samp', attrs, indent, content, has_child) - - - def tag_kbd(self, attrs, indent, content, has_child=0): - """Returns definition for something user would type. - - - - - """ - return self.tag('kbd', attrs, indent, content, has_child) - - - def tag_var(self, attrs, indent, content, has_child=0): - """Returns variable definition. - - - - - """ - return self.tag('var', attrs, indent, content, has_child) - - - def tag_cite(self, attrs, indent, content, has_child=0): - """Returns citation definition. - - - - - """ - return self.tag('cite', attrs, indent, content, has_child) - - - def tag_abbr(self, attrs, indent, content, has_child=0): - """Returns abbreviation definition. - - - - - """ - return self.tag('abbr', attrs, indent, content, has_child) - - - def tag_acronym(self, attrs, indent, content, has_child=0): - """Returns the acronym definition. - - - - - """ - return self.tag('acronym', attrs, indent, content, has_child) - - - def tag_q(self, attrs, indent, content, has_child=0): - """Returns inline quote definition. - - - - - """ - return self.tag('q', attrs, indent, content, has_child) - - - def tag_sub(self, attrs, indent, content, has_child=0): - """Returns subscript definition. - - - - - """ - return self.tag('sub', attrs, indent, content, has_child) - - - def tag_sup(self, attrs, indent, content, has_child=0): - """Returns superscript definition. - - - - - """ - return self.tag('sup', attrs, indent, content, has_child) - - - def tag_tt(self, attrs, indent, content, has_child=0): - """Returns fixed pitch font definition. - - - - - """ - return self.tag('tt', attrs, indent, content, has_child) - - - def tag_i(self, attrs, indent, content, has_child=0): - """Returns italic font definition. - - - - - """ - return self.tag('i', attrs, indent, content, has_child) - - - def tag_b(self, attrs, indent, content, has_child=0): - """Returns bold font definition. - - - - - """ - return self.tag('b', attrs, indent, content, has_child) - - - def tag_big(self, attrs, indent, content, has_child=0): - """Returns bigger font definition. - - - - - """ - return self.tag('big', attrs, indent, content, has_child) - - - def tag_small(self, attrs, indent, content, has_child=0): - """Returns smaller font definition. - - - - - """ - return self.tag('small', attrs, indent, content, has_child) - - - # ------------------------------------------------------------------ - # Object - # ------------------------------------------------------------------ - - def tag_object(self, attrs, indent, content, has_child=1): - """Returns object definition. - - - - - The object definition is used to embed objects as part of HTML - pages. param elements should precede other content. - Parameters can also be expressed as attribute/value pairs on - the object element itself when brevity is desired. - - """ - return self.tag('object', attrs, indent, content, has_child) - - - def tag_param(self, attrs, indent): - """Returns param definition. - - - - - The param definition is used to supply a named property value. - In XML it would seem natural to follow RDF and support an - abbreviated syntax where the param elements are replaced by - attribute value pairs on the object start tag. - - """ - return self.tag('object', attrs, indent) - - - # ------------------------------------------------------------------ - # Images - # ------------------------------------------------------------------ - - def tag_img(self, attrs, indent): - """Returns image definition. - - - - - To avoid accessibility problems for people who aren't able to - see the image, you should provide a text description using the - alt and longdesc attributes. In addition, avoid the use of - server-side image maps. Note that in this DTD there is no - name attribute. That is only available in the transitional - and frameset DTD. - - usemap points to a map element which may be in this document - or an external document, although the latter is not widely - supported. - - """ - return self.tag('img', attrs, indent) - - - # ------------------------------------------------------------------ - # Client-side image maps - # ------------------------------------------------------------------ - - def tag_map(self, attrs, indent, content, has_child=1): - """Returns map definition. - - - - - This can be placed in the same document or grouped in a - separate document although this isn't yet widely supported. - - """ - return self.tag('map', attrs, indent, indent, content, has_child) - - - def tag_area(self, attrs, indent): - """Returns area definition. - - - - - This can be placed in the same document or grouped in a - separate document although this isn't yet widely supported. - - """ - return self.tag('area', attrs, indent) - - - # ------------------------------------------------------------------ - # Forms - # ------------------------------------------------------------------ - - def tag_form(self, attrs, indent, content, has_child=1): - """Returns form definition. - - - - - """ - return self.tag('form', attrs, indent, content, has_child) - - - def tag_label(self, attrs, indent, content, has_child=0): - """Returns label definition. - - - - - Each label must not contain more than ONE field Label elements - shouldn't be nested. - - """ - return self.tag('label', attrs, indent, content, has_child) - - - def tag_input(self, attrs, indent): - """Returns input definition for form control. - - - - - - - The name attribute is required for all but submit & reset. - - """ - return self.tag('input', attrs, indent) - - - def tag_select(self, attrs, indent, content, has_child=0): - """Returns select definition. - - - - - """ - return self.tag('select', attrs, indent, content, has_child) - - - def tag_optgroup(self, attrs, indent, content, has_child=1): - """Returns option group definition. - - - - - """ - return self.tag('optgroup', attrs, indent, content, has_child) - - - def tag_option(self, attrs, indent, content, has_child=0): - """Returns option definition. - - - - - """ - return self.tag('option', attrs, indent, content, has_child) - - - def tag_textarea(self, attrs, indent, content): - """Returns textarea definition. - - - - - """ - return self.textarea('textarea', attrs, indent, content) - - - def tag_fieldset(self, attrs, indent, content, has_child=1): - """Returns fieldset definition. - - - - - The fieldset element is used to group form fields. Only one - legend element should occur in the content and if present - should only be preceded by whitespace. - - """ - return self.tag('filedset', attrs, indent, content, has_child) - - - def tag_legend(self, attrs, indent, content): - """Retruns legend definition. - - - - - """ - return self.tag('legend', attrs, indent, content) - - - def tag_button(self, attrs, indent, content): - """Returns button definition. - - - - - content is %Flow; excluding a, form and form controls. - - """ - return self.tag('button', attrs, indent, content) - - - def tag_table(self, attrs, indent, content, has_child=1): - """Returns table definition. - - - - - - - - - - - Derived from IETF HTML table standard, see [RFC1942] - - The border attribute sets the thickness of the frame around - the table. The default units are screen pixels. The frame - attribute specifies which parts of the frame around the table - should be rendered. The values are not the same as CALS to - avoid a name clash with the valign attribute. The rules - attribute defines which rules to draw between cells: If rules - is absent then assume: "none" if border is absent or - border="0" otherwise "all". Horizontal alignment attributes - for cell contents: - char alignment char, e.g. char=':' - charoff offset for alignment char - - """ - return self.tag('table', attrs, indent, content, has_child) - - - def tag_caption(self, attrs, indent, content): - """Returns caption definition. - - - - - """ - return self.tag('caption', attrs, indent, content) - - - def tag_thead(self, attrs, indent, content, has_child=1): - """Returns thead definition. - - - - - Use thead to duplicate headers when breaking table across page - boundaries, or for static headers when tbody sections are - rendered in scrolling panel. - - """ - return self.tag('thead', attrs, indent, content, has_child) - - - def tag_tbody(self, attrs, indent, content, has_child=1): - """Returns tbody definition. - - - - - Use tbody to duplicate footers when breaking table across page - boundaries, or for static footers when tbody sections are - rendered in scrolling panel. - - """ - return self.tag('tbody', attrs, indent, content, has_child) - - - def tag_tbody(self, attrs, indent, content, has_child=1): - """Returns tbody definition. - - - - - Use multiple tbody sections when rules are needed between - groups of table rows. - - """ - return self.tag('tbody', attrs, indent, content, has_child) - - - def tag_colgroup(self, attrs, indent, content, has_child=1): - """Returns colgroup definition. - - - - - colgroup groups a set of col elements. It allows you to group - several semantically related columns together. - - """ - return self.tag('colgroup', attrs, indent, content, has_child) - - - def tag_col(self, attrs, indent): - """Returns col definition. - - - - - col elements define the alignment properties for cells in one - or more columns. The width attribute specifies the width of - the columns, e.g. - - width=64 width in screen pixels - width=0.5* relative width of 0.5 - - The span attribute causes the attributes of one col element to - apply to more than one column. - - """ - return self.tag('col', attrs, indent) - - - def tag_tr(self, attrs, indent, content, has_child=1): - """Returns table row definition. - - - - - """ - return self.tag('tr', attrs, indent, content, has_child) - - - def tag_th(self, attrs, indent, content, has_child): - """Returns table header definition. - - - - - - - Scope is simpler than headers attribute for common tables. th - is for headers, td for data and for cells acting as both. - - """ - return self.tab('th', attrs, indent, content, has_child) - - - def tag_td(self, attrs, indent, content, has_child=1): - """Returns table data definition. - - - - - """ - return self.tag('td', attrs, indent, content, has_child) diff --git a/Scripts/Python/Webenv/Public/Images/a-attach.png b/Scripts/Python/Webenv/Public/Images/a-attach.png deleted file mode 100644 index d6a41e7..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/a-attach.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/a-mail.png b/Scripts/Python/Webenv/Public/Images/a-mail.png deleted file mode 100644 index 355a998..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/a-mail.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/a-www.png b/Scripts/Python/Webenv/Public/Images/a-www.png deleted file mode 100644 index e5a0483..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/a-www.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/ads-sample-468x60.png b/Scripts/Python/Webenv/Public/Images/ads-sample-468x60.png deleted file mode 100644 index f634d10..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/ads-sample-468x60.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/ads-sample-728x90.png b/Scripts/Python/Webenv/Public/Images/ads-sample-728x90.png deleted file mode 100644 index 5401e60..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/ads-sample-728x90.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/caution.png b/Scripts/Python/Webenv/Public/Images/caution.png deleted file mode 100644 index efcec04..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/caution.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/centos-logo.png b/Scripts/Python/Webenv/Public/Images/centos-logo.png deleted file mode 100644 index 506c65d..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/centos-logo.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/convenction.png b/Scripts/Python/Webenv/Public/Images/convenction.png deleted file mode 100644 index e516c0e..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/convenction.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/error.png b/Scripts/Python/Webenv/Public/Images/error.png deleted file mode 100644 index 0f52b4d..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/error.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/h1-bg.png b/Scripts/Python/Webenv/Public/Images/h1-bg.png deleted file mode 100644 index e609c59..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/h1-bg.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/h2-bg.png b/Scripts/Python/Webenv/Public/Images/h2-bg.png deleted file mode 100644 index 826fbec..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/h2-bg.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/html-bg.png b/Scripts/Python/Webenv/Public/Images/html-bg.png deleted file mode 100644 index 0c6dca6..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/html-bg.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/important.png b/Scripts/Python/Webenv/Public/Images/important.png deleted file mode 100644 index 509ec86..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/important.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/msg-bg-blue.png b/Scripts/Python/Webenv/Public/Images/msg-bg-blue.png deleted file mode 100644 index 47bc405..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/msg-bg-blue.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/msg-bg-gray.png b/Scripts/Python/Webenv/Public/Images/msg-bg-gray.png deleted file mode 100644 index a8a9246..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/msg-bg-gray.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/msg-bg-green.png b/Scripts/Python/Webenv/Public/Images/msg-bg-green.png deleted file mode 100644 index f1bfe2b..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/msg-bg-green.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/msg-bg-orange.png b/Scripts/Python/Webenv/Public/Images/msg-bg-orange.png deleted file mode 100644 index 0866bb8..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/msg-bg-orange.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/msg-bg-red.png b/Scripts/Python/Webenv/Public/Images/msg-bg-red.png deleted file mode 100644 index 2dc3e70..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/msg-bg-red.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/msg-bg-violet.png b/Scripts/Python/Webenv/Public/Images/msg-bg-violet.png deleted file mode 100644 index 8b1075d..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/msg-bg-violet.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/note.png b/Scripts/Python/Webenv/Public/Images/note.png deleted file mode 100644 index b58a224..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/note.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/redirect.png b/Scripts/Python/Webenv/Public/Images/redirect.png deleted file mode 100644 index 16a8c41..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/redirect.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/success.png b/Scripts/Python/Webenv/Public/Images/success.png deleted file mode 100644 index 74cc874..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/success.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/tabs-bg-1.png b/Scripts/Python/Webenv/Public/Images/tabs-bg-1.png deleted file mode 100644 index 22cff37..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/tabs-bg-1.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/tabs-bg-2.png b/Scripts/Python/Webenv/Public/Images/tabs-bg-2.png deleted file mode 100644 index 5d8e178..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/tabs-bg-2.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/tip.png b/Scripts/Python/Webenv/Public/Images/tip.png deleted file mode 100644 index cfcf6db..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/tip.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/top.png b/Scripts/Python/Webenv/Public/Images/top.png deleted file mode 100644 index 1557422..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/top.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/ul.png b/Scripts/Python/Webenv/Public/Images/ul.png deleted file mode 100644 index efcf485..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/ul.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Images/warning.png b/Scripts/Python/Webenv/Public/Images/warning.png deleted file mode 100644 index e36c02a..0000000 Binary files a/Scripts/Python/Webenv/Public/Images/warning.png and /dev/null differ diff --git a/Scripts/Python/Webenv/Public/Stylesheet/admonition.css b/Scripts/Python/Webenv/Public/Stylesheet/admonition.css deleted file mode 100755 index a08eff5..0000000 --- a/Scripts/Python/Webenv/Public/Stylesheet/admonition.css +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Webenv -> Quotation - * - * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG - * - * This CSS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This CSS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * ---------------------------------------------------------------------- - * $Id$ - * ---------------------------------------------------------------------- - */ - -div#page-body div.admonition { - border: 1px solid; - border-left: 5px solid; - padding: 10px 20px 10px 10px; - margin: 1.5em 0 1.5em 0; - } - -div#page-body div.admonition pre { - border: none; - background-color: #333; - color: #FFFFFF; - } - -div#page-body div.admonition img { - float: left; - } - - -div#page-body div.admonition h3 { - margin-top: 10px; - line-height: 1.5em; - } - -div#page-body div.admonition h3, -div#page-body div.admonition p, -div#page-body div.admonition pre, -div#page-body div.admonition table { - margin-left: 60px; - } - -div#page-body div.admonition ul, -div#page-body div.admonition ol, -div#page-body div.admonition dl { - margin-left: 110px; - } - -div#page-body div.admonition ul dl, -div#page-body div.admonition ul ol, -div#page-body div.admonition ul ul, -div#page-body div.admonition ol dl, -div#page-body div.admonition ol ol, -div#page-body div.admonition ol ul, -div#page-body div.admonition dl dl, -div#page-body div.admonition dl ol, -div#page-body div.admonition dl ul { - margin-left: 2.5em; - } - -div#page-body div.admonition.unknown pre, -div#page-body div.admonition.unknown h3, -div#page-body div.admonition.unknown p, -div#page-body div.admonition.unknown table { - margin-left: 20px; - } - -div#page-body div.admonition.success, -div#page-body div.admonition.redirected, -div#page-body div.admonition.error { - border: none; - border-top: 5px solid; - border-bottom: 5px solid; - border-color: #CFCFCF; - } - -div#page-body div.admonition.unknown, -div#page-body div.admonition.redirected, -div#page-body div.admonition.note { - background-image: url("https://projects.centos.org/public/Images/msg-bg-blue.png"); - border-color: #D2E0F6; - background-color: #ECF4FF; - } - -div#page-body div.admonition.tip, -div#page-body div.admonition.important, -div#page-body div.admonition.caution, -div#page-body div.admonition.warning { - border-color: #F6E7D2; - background-color: #FFF8EC; - background-image: url("https://projects.centos.org/public/Images/msg-bg-orange.png"); - } - -div#page-body div.admonition.violet { - border-color: #F6D2F6; - background-color: #FFECFF; - background-image: url("https://projects.centos.org/public/Images/msg-bg-violet.png"); - } - -div#page-body div.admonition.error { - border-color: #E0B7B7; - background-color: #FFECEC; - background-image: url("https://projects.centos.org/public/Images/msg-bg-red.png"); - } - -div#page-body div.admonition.success { - border-color: #D6F6D2; - background-color: #EEFFEC; - background-image: url("https://projects.centos.org/public/Images/msg-bg-green.png"); - } diff --git a/Scripts/Python/Webenv/Public/Stylesheet/base.css b/Scripts/Python/Webenv/Public/Stylesheet/base.css deleted file mode 100755 index d062cdc..0000000 --- a/Scripts/Python/Webenv/Public/Stylesheet/base.css +++ /dev/null @@ -1,376 +0,0 @@ -/* - * Webenv -> Main Blocks - * - * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG - * - * This CSS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This CSS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * ---------------------------------------------------------------------- - * $Id$ - * ---------------------------------------------------------------------- - */ - -div#page-header, -div#wrap, -div#page-body, -div#page-footer { - min-width: 728px; - } - -/* Header ---------------------------------------------------------------------*/ -div#page-header { - background: #204C8D url("https://projects.centos.org/public/Images/h1-bg.png") 0 0 repeat; - min-height: 46px; - } - -/* Content ---------------------------------------------------------------------*/ - -div#wrap { - padding: 0 10px 0 10px; - background-color: #FFF; - } - -div#page-body { - clear: both; - background-color: #F8F8F8; - } - -div#page-body div#content-list { - padding: 10px; - padding-left: 0; - padding-top: 8px; - background-color: #FFF; - } - -/* Paragraphs ---------------------------------------------------------------------*/ - -/* Footer ---------------------------------------------------------------------*/ - -div#page-footer { - background: #204C8D url("https://projects.centos.org/public/Images/h1-bg.png") 0 0 repeat; - } - -div#page-footer div.credits { - padding: 8px; - } - -div#page-footer div.credits .copyright, -div#page-footer div.credits .license { - font-size: x-small; - color: #FFF; - margin: 3px; - } - -div#page-footer div.credits a { - color: #FFF; - font-style: italic; - } - -div#page-footer div.top { - float:right; - } - -/* Logo ---------------------------------------------------------------------*/ - -div#page-header div#logo img { - border: none; - float: left; - margin-left: 10px; - } - -/* Google advertisement (468x60px) ---------------------------------------------------------------------*/ - -div#page-header div.google-ad { - float: right; - margin: 5px; - } - -div#page-header div.google-ad img { - border: none; - } - -/* Last releases and related RSS link. ---------------------------------------------------------------------*/ - -div#page-header div#last-releases { - clear: both; - min-height: 35px; - border-top: 3px solid #FFF; - background: #3465A4; - } - -div#page-header div#last-releases a { - color: #fff; - } - -div#page-header div#last-releases div.left { - display: block; - float: left; - width: 450px; - margin-top: 10px; - margin-left: 10px; - font-size: small; - } - -div#page-header div#last-releases div.right { - float: right; - margin-top: 9px; - margin-right: 5px; - } - -div#page-header div#last-releases div.right span.rss span { - text-align: center; - font-weight: bold; - background: #729fcf; - padding: 4px 10px; - } - -div#page-header div#last-releases div span.title { - font-weight: bold; - color: #FFF; - } - -div#page-header div#last-releases div span.release { - border-right: 1px dotted #FFF; - padding-left: 10px; - padding-right: 10px; - font-weight: bold; - } - -div#page-header div#last-releases div span.last { - border-right: 0px; - } - -/* Application links ---------------------------------------------------------------------*/ - -div#page-header div#pagelinks { - border-top: 3px solid #FFF; - } - -/* User related links (e.g., last visit, session info and page trails) ---------------------------------------------------------------------*/ - -div#page-header div.userlinks { - padding: 10px; - text-align: right; - font-size: x-small; - clear: both; - } - -div#page-header div.userlinks a { - color: #fff; - } - -div#page-header div.userlinks div.logs { - width: 50%; - float: left; - text-align: left; - } - -div#page-header div.userlinks div.logs span { - border: none; - } - -div#page-header div.userlinks div.logs span.title { - color: #FFF; - } - -div#page-header div.userlinks div.logs span.datetime { - font-style: italic; - color: #FFF; - } - -div#page-header div.userlinks div.session { - width: 50%; - float: right; - } - -div#page-header div.userlinks div.session span { - border-right: 1px dotted #FFF; - } - -div#page-header div.userlinks div.session span a { - margin-right: 10px; - margin-left: 10px; - } - - -div#page-header div.userlinks div.session span.last { - border-right: none; - } - -div#page-header div.userlinks div.session span.last a { - margin-right: 0; - } - -div#page-header div.userlinks div.session span.last:after { - content: none; - } - -div#page-header div.userlinks div.trail { - text-align: right; - clear: both; - padding-top: 5px; - } - -div#page-header div.userlinks div.trail span { - display: inline; - } - -div#page-header div.userlinks div.trail span.last { - border-right: none; - padding-right: 0; - } - -div#page-header div.userlinks div.trail span:after { - content: "»"; - color: #FFF; - margin-left: 5px; - margin-right: 3px; - } - -div#page-header div.userlinks div.trail span.last:after { - content: none; - } - -/* Page lines. ---------------------------------------------------------------------*/ - -.page-line { - clear: both; - margin: 0; - padding: 0; - background-color: transparent; - } - -.page-line.white { - height: 3px; - background-color: #FFF; - } - -/* Page body ---------------------------------------------------------------------*/ - -div#page-body .info { - margin-top: 5px; - } - -div#page-body .info span { - font-size: small; - border-right: 1px dotted #AAA; - padding-right: 10px; - padding-left: 7px; - } - -div#page-body .info span.author { - padding-left: 0; - } - -div#page-body .info span.comment { - border-right: 0; - } - -/* Content Listing - One column ---------------------------------------------------------------------*/ - -div#page-body div#content-list { - margin-right: 200px; - border-right: 3px #EEE solid; - } - -div#page-body div#content-actions { - float:right; - width: 180px; - border-left: 3px #EEE solid; - padding: 10px; - font-size: small; - } - -div#page-body div#content-actions form input[type="text"] { - border: 1px solid #AAA; - } - -div#page-body div#content-list div.search { - } - -div#page-body div#content-list div.row { - padding: 10px 20px; - } - -div#page-body div#content-list div.dark { - background: #F8F8F8; - } - -div#page-body div#content-list div.light { - background: #FFF; - } - -div#page-body div#content-list h3.title { - margin-top: 0; - } - -div#page-body div#content-list .abstract { - margin-bottom: 1em; - } - -div#page-body div#content-list .pagination { - border-top: 1px solid #AAA; - font-size: small; - padding: 10px; - border-top: 1px #AAA solid; - margin-bottom: 0; - padding-bottom: 0; - } - -div#page-body div#content-list .pagination span.previous { - float: left; - } - -div#page-body div#content-list .pagination span.previous a:before { - content: "«"; - padding-right: 3px; - } - -div#page-body div#content-list .pagination span.next a:after { - content: "»"; - padding-left: 3px; - } - -div#page-body div#content-list .pagination span.next { - float: right; - } - -/* Content Details - One column ---------------------------------------------------------------------*/ - -div#page-body div#content-details { - padding: 30px 10% 30px 10%; - background: #FFF; - } - -/* Content Unkown - Not page found. ---------------------------------------------------------------------*/ - -div#page-body div#content-unknown { - padding: 0 15% 0 15%; - background: #FFF; - } diff --git a/Scripts/Python/Webenv/Public/Stylesheet/forms.css b/Scripts/Python/Webenv/Public/Stylesheet/forms.css deleted file mode 100755 index 9a39fc2..0000000 --- a/Scripts/Python/Webenv/Public/Stylesheet/forms.css +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Webenv -> Forms - * - * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG - * - * This CSS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This CSS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * ---------------------------------------------------------------------- - * $Id$ - * ---------------------------------------------------------------------- - */ - -div#page-body div.row1 { - clear: both; - background: #F8F8F8; - padding: 10px; - } - -div#page-body div.row2 { - clear: both; - background: #FFFFFF; - padding: 10px; - } - -div#page-body div.row3 { - clear: both; - border-top: 1px solid #CCC; - padding: 10px; - margin-top: 10px; - } - -div#page-body fieldset div.row1 span.descrip, -div#page-body fieldset div.row2 span.descrip { - float: left; - } - -div#page-body fieldset div.field { - display: block; - margin-left: 30%; - } - -div#page-body fieldset div.field div.column { - float: left; - margin-right: 1em; - padding-right: 1em; - border-right: 1px dotted #AAA; - } - -div#page-body fieldset div.row3 div.descrip { - display: block; - font-size: small; - color: #AAA; - font-style: italic; - width: 70% - } - -div#page-body fieldset span.submit { - float: right; - } - -/* */ - -div#page-body form div { - padding-bottom: 10px; - } - -div#page-body form div span { - display: inline; - margin: 0; - padding-right: 10px; - } - -div#page-body div span.results { - padding-left: 10px; - border-left: 1px dotted #AAA; - } - -/* */ - - -/* */ - -div#page-body div.records-list { - display: block; - } - -div#page-body div.records-list ul { - margin: 0; - padding: 0; - list-style: none; - } - -div#page-body div.records-list ul li { - padding: 0.5em; - } - -div#page-body div.records-list ul li.row1 { - background: #F8F8F8; - } - -div#page-body div.records-list ul li span.col0 { - display: block; - float:left; - text-align: center; - padding-right: 0.5em; - margin-right: 0.5em; - border-right: 1px solid #FFF; - } - -div#page-body div.records-list ul li span.col1 { - width: 250px; - display: block; - float:left; - } - -div#page-body div.records-list ul li span.col2 { - border-left: 1px solid #FFF; - padding-left: 0.5em; - } - -div#page-body div.records-list ul li.title { - font-weight: bold; - background: #eee; - border-bottom: 1px #AAA solid; - } diff --git a/Scripts/Python/Webenv/Public/Stylesheet/links.css b/Scripts/Python/Webenv/Public/Stylesheet/links.css deleted file mode 100755 index d0ae637..0000000 --- a/Scripts/Python/Webenv/Public/Stylesheet/links.css +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Webenv -> Links - * - * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG - * - * This CSS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This CSS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * ---------------------------------------------------------------------- - * $Id$ - * ---------------------------------------------------------------------- - */ - -/* Broken or nonexistent links. ---------------------------------------------------------------------*/ - -div#page-body a.nonexistent, -div#page-body a.nonexistent:hover { color: gray; } - -/* Special decoration for some links' classes ---------------------------------------------------------------------*/ - -div#page-body a.www:before { - white-space:nowrap; - content: url(/home/centos/artwork/trunk/Identity/Images/Webenv/a-www.png); - margin: 0 0.2em; - } - -div#page-body a.http:before { - white-space:nowrap; - content: url(/home/centos/artwork/trunk/Identity/Images/Webenv/a-www.png); - margin: 0 0.2em; - } - -div#page-body a.https:before { - white-space:nowrap; - content: url(/home/centos/artwork/trunk/Identity/Images/Webenv/a-www.png); - margin: 0 0.2em; - } - -div#page-body a.mailto:before { - white-space:nowrap; - content: url(/home/centos/artwork/trunk/Identity/Images/Webenv/a-mail.png); - margin: 0 0.2em; - } - -div#page-body a.attachment:before { - white-space:nowrap; - content: url(/home/centos/artwork/trunk/Identity/Images/Webenv/a-attach.png); - margin: 0 0.2em; - } diff --git a/Scripts/Python/Webenv/Public/Stylesheet/lists.css b/Scripts/Python/Webenv/Public/Stylesheet/lists.css deleted file mode 100755 index cdea058..0000000 --- a/Scripts/Python/Webenv/Public/Stylesheet/lists.css +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Webenv -> Lists - * - * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG - * - * This CSS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This CSS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * ---------------------------------------------------------------------- - * $Id$ - * ---------------------------------------------------------------------- - */ - -div#page-body ul { - /* - list-style: url("https://projects.centos.org/public/Images/ul.png") disc; - */ - } - -div#page-body ul, -div#page-body ol { - margin-left: 2.5em; - } - -div#page-body ul ol, -div#page-body ol ul, -div#page-body dl ul, -div#page-body dl ol { - margin-left: 1.5em; - } - -div#page-body div#links ul { - padding: 0.5em 0.5em 1em 1em; - margin: 0; - list-style: none; - border-top: 1px #EEE solid; - } - -div#page-body div#links ul.first { - border-top: none; - } - -div#page-body div#links ul li { - padding: 2px; - } - -/* Table of content (toc) ---------------------------------------------------------------------*/ - -div#page-body div.toc { - font-size: small; - text-align:left; - margin-bottom: 2em; - } - -div#page-body div.toc p { - font-weight: bold; - margin: 0.5em 0 0.5em 0; - } - -div#page-body div#content div.toc dl { - margin: 0; - } - -div#page-body div#content div.toc dl dl { - margin-left: 2.5em; - } - -/* Content actions links (e.g., categories and archives). ---------------------------------------------------------------------*/ - -div#page-body div#content-actions dl { - margin-top: 0; - margin-left: 0; - } - -div#page-body div#content-actions dl dt { - font-weight: bold; - border-bottom: 1px solid #EEE; - margin-bottom: 1em; - } - -div#page-body div#content-actions dl dd { - margin-left: 1.5em; - } - -div#page-body div#content-actions dl dl { - margin-left: 1.5em; - margin-top: 0px; - border-top: none; - padding-top: 0; - } - -div#page-body div#content-actions dl dl.year { - margin-bottom: 1em; - } - -div#page-body div#content-actions dl dl.year dd { - margin-left: 0; - } diff --git a/Scripts/Python/Webenv/Public/Stylesheet/reset.css b/Scripts/Python/Webenv/Public/Stylesheet/reset.css deleted file mode 100755 index 202310d..0000000 --- a/Scripts/Python/Webenv/Public/Stylesheet/reset.css +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Webenv (reset) -- This file resets the browser's default visual - * style and sets The CentOS Web Environment visual style as default - * visual style. This file sets default values to tags like `html', - * `body', as well as those controlling links, tables, paragrphs, - * headings, lists, forms and quotation. - * - * The CentOS Web Environment (Webenv) is specially conceived to - * achieve one unique visual style and easy navegation through all - * different web applications The CentOS Project uses to show its - * existence in the World Wide Web medium. - * - * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG - * - * This CSS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This CSS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * ------------------------------------------------------------------- - * $Id$ - * ------------------------------------------------------------------- - */ - - -/* Reset browsers default margins and paddings ------------------------------------------------*/ - -* { - margin: 0; - padding: 0; - } - -/* Define html ------------------------------------------------*/ - -html { - background-color: #FFF; - background-image: url("https://projects.centos.org/public/Images/html-bg.png"); - } - -/* Define body ------------------------------------------------*/ - -body { - font-family: "DejaVu Sans", "Liberation Sans", sans-serif; - font-size: 0.85em; - /* margin: 0; /* <- full screen */ - /* margin: 0 1% 0 1%; /* <- with 1% of left and right margin */ - /* margin: 0 2% 0 2%; /* <- with 2% of left and right margin */ - margin: 0 3% 0 3%; /* <- with 3% of left and right margin */ - /* margin: 0 10% 0 10%; /* <- with 10% of left and right margin */ - color: #333; - } - -/* Links ------------------------------------------------*/ - -a:link { text-decoration: none; color: #0044B3; } -a:hover { text-decoration: underline; color: green; } -a:active { text-decoration: underline; color: green; } -a:visited { text-decoration: none; color: #0044B3; } -a:visited:hover { text-decoration: underline; color: green; } - -.title, -.title a:link, -.title a:active, -.title a:hover, -.title a:visited, -.title a:visited:hover { - /* color: #072B61; */ - color: #000000; - } - -/* Headings ------------------------------------------------*/ - -h1 { - font-size: 2em; - line-height: 1.3em; - } - -h2 { - font-size: 1.5em; - line-height: 1.5em; - margin-top: 1.5em; - } - -h3 { - font-size: 1.4em; - line-height: 1.4em; - margin-top: 1.4em; - } - -h4 { - font-size: 1.2em; - line-height: 1.2em; - margin-top: 1.2em; - } - -h5 { - font-size: 1.1em; - line-height: 1.1em; - margin-top: 1.1em; - } - -h6 { - font-size: 1em; - line-height: 1em; - margin-top: 1em; - } - -/* Paragraphs ------------------------------------------------*/ - -p { - margin: 1em 0 1.5em 0; - line-height: 1.5em; - text-align: justify; - } - -/* Images ------------------------------------------------*/ - -img { - border: none; - } - -/* Quotations ------------------------------------------------*/ - -blockquote { - background: #fafafa; - border-color: #eeeeee; - border-width: 1px; - border-style: solid; - border-left-width: 4px; - margin-left: 1.5em; - padding: 0.5em; - margin-top: 1em; - margin-bottom: 1.3em; - } - -q:before { - content: " “"; - } - -q:after { - content: "” "; - } - -q q:before { - content: " ‘"; - } - -q q:after { - content: "’ "; - } - -address { - margin-left: 1.5em; - } - -/* Preformatted Texts ------------------------------------------------*/ - -pre { - font-family: "DejaVu Sans Mono", "Liberation Mono", monospace; - padding: 0.5em 1em 0.5em 1em; - margin: 1em 0 1em 0; - white-space: pre; - border-width: 1px; - border-style: solid; - border-color: #E5E5E5; - border-left-width: 4px; - background: #FFFAE9; - overflow: auto; - } - -/* Phrase Elements ------------------------------------------------*/ - -tt, -samp, -kbd, -code { - font-family: "DejaVu Sans Mono", "Liberation Mono", monospace; - } - -/* Page Lines ------------------------------------------------*/ - -hr { - clear: both; - height: 1px ! important; - border: none; - background-color: #DADADA; - } - -/* Lists ------------------------------------------------*/ - -ul, -ol, -dl { - margin: 1.5em 0 1.5em 2.5em; - } - -ul { - list-style: disc; - } - -ol { - list-style-image: none !important; - } - -ul li, -ol li { - line-height: 1.5em; - } - -ul ul, -ul ol, -ol ul, -ol ol { - margin-top: 0.3em; - margin-bottom: 0.3em; - } - -ul li p, -ol li p { - margin-bottom: 0.3em; - } - -dl dd { - margin-left: 2.5em; - } - -dl ol, -dl ul { - margin-left: 3.5em; - } - -/* Tables ------------------------------------------------*/ - -table { - border-collapse: collapse; - } - -table caption { - font-style: italic; - text-align: center; - } - -table tr th { - font-weight: bold; - } - -table tr td, -table tr th { - border: 1pt; - border-style: solid; - border-color: #CCC; - padding-top: 0.25em; - padding-right: 0.5em; - padding-bottom: 0.25em; - padding-left: 0.5em; - vertical-align: top; - } - -table tr td p, -table tr td pre { - margin: 0; - padding: 0; - } - -/* Forms ------------------------------------------------*/ - -form { - display: inline; - } - -input[type="submit"], -input[type="button"] { - padding: 1px; - display: inline; - text-decoration: none; - } - -input[type="text"], -input[type="password"], -textarea { - display: inline; - padding: 2px; - } - -select { - display: inline; - padding: 1px; - } - -form p { - display: inline; - margin-left: 5px; - margin-right: 5px; - } - -/* Select ----------------------------------------- */ - -select option { - padding-left: 3px; - padding-right: 3px; - } - -select optgroup { - font-style: normal; - font-weight: bold; - padding-left: 3px; - } - -select optgroup option { - margin-left: 1em; - } - -input[type="radio"], -input[type="checkbox"] { - vertical-align: middle; - } - -fieldset { - margin: 1em 0 1em 0; - padding: 1em; - padding-bottom: 5px; - border: 1px solid #AAA; - } - -fieldset legend { - font-weight: bold; - color: #AAA; - } diff --git a/Scripts/Python/Webenv/Public/Stylesheet/tabs.css b/Scripts/Python/Webenv/Public/Stylesheet/tabs.css deleted file mode 100755 index 158b539..0000000 --- a/Scripts/Python/Webenv/Public/Stylesheet/tabs.css +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Webenv -> Tabs (Style 2: Two Rounded Borders) - * - * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG - * - * This CSS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This CSS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * ---------------------------------------------------------------------- - * $Id$ - * ---------------------------------------------------------------------- - */ - -div#page-header div.tabs { - margin-left: 10px; - margin-right: 10px; - } - -div#page-header div.tabs a { - color: #FFF; - float: left; - font-weight: bold; - margin-right: 3px; - padding: 0px 8px 0 0px; - text-decoration: none; - } - -div#page-header div.tabs span.current a, -div#page-header div.tabs span.current a:hover, -div#page-header div.tabs span.current a span, -div#page-header div.tabs span.current a:hover span { - color: #204A87; - text-decoration: none; - } - -div#page-header div.tabs a span { - float: left; - padding: 5px 0px 3px 8px; - } - -/* */ - -div#page-header div.tabs a { - background: none; - } - -div#page-header div.tabs a span { - background: none; - } - -div#page-header div.tabs span.current a, -div#page-header div.tabs span.current a:hover { - background: url("https://projects.centos.org/public/Images/tabs-bg-1.png") 100% -50px no-repeat; - } - -div#page-header div.tabs span.current a span, -div#page-header div.tabs span.current a:hover span { - background: url("https://projects.centos.org/public/Images/tabs-bg-2.png") 0 -50px no-repeat; - } - -div#page-header div.tabs span:hover a { - background: url("https://projects.centos.org/public/Images/tabs-bg-1.png") 100% 0 no-repeat; - } - -div#page-header div.tabs span:hover a span { - background: url("https://projects.centos.org/public/Images/tabs-bg-2.png") 0 0; - } - -/* Application level navigation bar. ---------------------------------------------------------------------*/ -div#page-header div#appslinks div.tabs span:hover a span { - } diff --git a/Scripts/Python/Webenv/Public/stylesheet.css b/Scripts/Python/Webenv/Public/stylesheet.css deleted file mode 100755 index 00015ea..0000000 --- a/Scripts/Python/Webenv/Public/stylesheet.css +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Webenv - * - * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG - * - * This CSS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This CSS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * ---------------------------------------------------------------------- - * $Id$ - * ---------------------------------------------------------------------- - */ - -/* Reset browser's default definitions. ---------------------------------------------------------------------*/ -@import url("https://projects.centos.org/public/Stylesheet/reset.css"); - -/* Customize default definitions. ---------------------------------------------------------------------*/ -@import url("https://projects.centos.org/public/Stylesheet/base.css"); -@import url("https://projects.centos.org/public/Stylesheet/links.css"); -@import url("https://projects.centos.org/public/Stylesheet/lists.css"); -@import url("https://projects.centos.org/public/Stylesheet/admonition.css"); -@import url("https://projects.centos.org/public/Stylesheet/forms.css"); - -/* Miscellaneous definitions. ---------------------------------------------------------------------*/ -@import url("https://projects.centos.org/public/Stylesheet/tabs.css"); diff --git a/Scripts/Python/Webenv/cgi-bin/Apps/Home/__init__.py b/Scripts/Python/Webenv/cgi-bin/Apps/Home/__init__.py new file mode 100755 index 0000000..e69de29 --- /dev/null +++ b/Scripts/Python/Webenv/cgi-bin/Apps/Home/__init__.py diff --git a/Scripts/Python/Webenv/cgi-bin/Apps/Home/page.py b/Scripts/Python/Webenv/cgi-bin/Apps/Home/page.py new file mode 100755 index 0000000..97e12eb --- /dev/null +++ b/Scripts/Python/Webenv/cgi-bin/Apps/Home/page.py @@ -0,0 +1,91 @@ +"""Support module for page layout inside `Home' web application. + +""" +from Apps import page + +app = page.Layout() + + +def page_navibar(): + """Returns application main pages. + + The application main pages are organized as tabs in the + application navigation bar. There is one tab for each main page + inside the application. + + """ + names = ['Page1', 'Page2', 'Page3'] + attrs = [] + + for i in names: + attrs.append({'href': '/webenv/?p=' + i.lower()}) + + if 'p' in page.qs.keys(): + focus = page.qs['p'][0].lower() + else: + focus = '' + + return app.page_navibar(names, attrs, focus) + + +def page_content(): + """Returns page content. + + The page content is determined from the query string, specifically + from the value of `p' variable. + + """ + if 'p' in page.qs.keys(): + p = page.qs['p'][0].lower() + else: + p = '' + + if p == 'page1': + output = app.tag_p('', [12, 1], 'Page Empty.') + elif p == 'page2': + output = app.tag_p('', [12, 1], 'Page Empty.') + elif p == 'page3': + output = app.tag_p({}, [12, 1], 'Page Empty' ) + elif p == 'entry': + output = app.content_details() + else: + output = app.content_list() + + return output + + +def main(): + """Returns final output.""" + + # Define page name. This value is used as reference to determine + # which application to load and what tab in the navigation bar to + # focus on. + app.name = 'Home' + + # Define page title. This value is dislayed on the browser's title + # bar. Notice that we concatenated the page class default value + # here. + app.title += ' :: Home' + + # Define page header. This is the information displayed + # between the page top and page content. + app.header = app.logo() + app.header += app.google_ad_example() + app.header += app.navibar() + app.header += app.releases() + app.header += app.page_links() + app.header += page_navibar() + + # Define page body. This is the information displayed between the + # page header and page footer. + app.body = page_content() + + # Define page footer. This is the information displayed between + # the page bottom and the page content, the last information + # displayed in the page. + app.footer = app.credits() + + # Define page final layout. + html = app.page() + + return html diff --git a/Scripts/Python/Webenv/cgi-bin/Apps/Sponsors/__init__.py b/Scripts/Python/Webenv/cgi-bin/Apps/Sponsors/__init__.py new file mode 100755 index 0000000..e69de29 --- /dev/null +++ b/Scripts/Python/Webenv/cgi-bin/Apps/Sponsors/__init__.py diff --git a/Scripts/Python/Webenv/cgi-bin/Apps/Sponsors/page.py b/Scripts/Python/Webenv/cgi-bin/Apps/Sponsors/page.py new file mode 100755 index 0000000..1791750 --- /dev/null +++ b/Scripts/Python/Webenv/cgi-bin/Apps/Sponsors/page.py @@ -0,0 +1,91 @@ +"""Support module for page layout inside `Sponsors' web application. + +""" +from Apps import page + +app = page.Layout() + + +def page_navibar(): + """Returns application's main pages. + + The application's main pages are organized as tabs in the + application navigation bar. There is one tab for each main page + inside the application. + + """ + names = ['Hardware', 'Hosting', 'Others'] + attrs = [] + + for i in names: + if 'app' in page.qs.keys(): + attrs.append({'href': '/webenv/?app=' + page.qs['app'][0].lower() + '&p=' + i.lower()}) + else: + attrs.append({'href': '/webenv/?p=' + i.lower()}) + + if 'p' in page.qs.keys(): + focus = page.qs['p'][0].lower() + else: + focus = names[0].lower() + + return app.page_navibar(names, attrs, focus) + + +def page_content(): + """Returns page content. + + The page content to show is determined from the query string, + specifically from the value of `p' variable. + + """ + if 'p' in page.qs.keys(): + p = page.qs['p'][0].lower() + else: + p = 'hardware' + + if p == 'hardware': + output = app.tag_h1({'class': 'title'}, [12, 1], 'Hardware Sponsors' ) + elif p == 'hosting': + output = app.tag_h1({'class': 'title'}, [12, 1], 'Hosting Sponsors' ) + elif p == 'others': + output = app.tag_h1({'class': 'title'}, [12, 1], 'Other Sponsors' ) + else: + output = app.tag_p('', [12, 1], 'Page empty.') + + return output + + +def main(): + """Returns final output.""" + + # Define page name. This value is used as reference to determine + # which application to load and what tab in the navigation bar to + # focus on. + app.name = 'Sponsors' + + # Define page title. This value is dislayed on the browser's title + # bar. Notice that we concatenated the page class default value + # here. + app.title += ' :: Sponsors' + + # Define page header. This is the information displayed + # between the page top and the page content. + app.header = app.logo() + app.header += app.google_ad_example() + app.header += app.navibar() + app.header += app.page_links() + app.header += page_navibar() + + # Define page body. This is the information displayed between the + # page header and page footer. + app.body = page_content() + + # Define page footer. This is the information displayed between + # the page bottom and the page content, the last information + # displayed in the page. + app.footer = app.credits() + + # Define page final layout. + html = app.page() + + return html diff --git a/Scripts/Python/Webenv/cgi-bin/Apps/Unknown/__init__.py b/Scripts/Python/Webenv/cgi-bin/Apps/Unknown/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Scripts/Python/Webenv/cgi-bin/Apps/Unknown/__init__.py diff --git a/Scripts/Python/Webenv/cgi-bin/Apps/Unknown/page.py b/Scripts/Python/Webenv/cgi-bin/Apps/Unknown/page.py new file mode 100755 index 0000000..f7c564e --- /dev/null +++ b/Scripts/Python/Webenv/cgi-bin/Apps/Unknown/page.py @@ -0,0 +1,54 @@ +"""The `Unknown' web application. + +The Unknown web application is automatically triggered when the page +requested is not defined as valid in `webenv.cgi' script. The +Unknown web application is basically an admonition message describing +the `page not found' issue and where to find the correct links to +start all over. + +""" +from Apps import page + +app = page.Layout() + + +def page_content(): + """Returns page content.""" + output = app.tag_p('', [16,1], 'The page you tried to open was not found in this server. Try one of the links above to start over.') + output = app.admonition('Warning', 'Page not found.', output) + output = app.tag_div({'id':'content-unknown'}, [8,1], output, 1) + return output + + +def main(): + """Returns final output.""" + + # Define page name. This value is used as reference to determine + # which application to load and what tab in the navigation bar to + # focus on. + app.name = 'Unknown' + + # Define page title. This value is dislayed on the browser's title + # bar. Notice that we concatenated the page class default value + # here. + app.title += ' :: Page not found' + + # Define page header. This is the information displayed + # between the page top and the page content. + app.header = app.logo() + app.header += app.google_ad_example() + app.header += app.navibar() + + # Define page body. This is the information displayed between the + # page header and page footer. + app.body = page_content() + + # Define page footer. This is the information displayed between + # the page bottom and the page content, the last information + # displayed in the page. + app.footer = app.credits() + + # Define page final layout. + html = app.page() + + return html diff --git a/Scripts/Python/Webenv/cgi-bin/Apps/__init__.py b/Scripts/Python/Webenv/cgi-bin/Apps/__init__.py new file mode 100755 index 0000000..e69de29 --- /dev/null +++ b/Scripts/Python/Webenv/cgi-bin/Apps/__init__.py diff --git a/Scripts/Python/Webenv/cgi-bin/Apps/page.py b/Scripts/Python/Webenv/cgi-bin/Apps/page.py new file mode 100755 index 0000000..9a449b9 --- /dev/null +++ b/Scripts/Python/Webenv/cgi-bin/Apps/page.py @@ -0,0 +1,970 @@ +# Copyright (C) 2011 The CentOS Project +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# ------------------------------------------------------------------ +# $Id$ +# ------------------------------------------------------------------ +"""Support page construction. + +The page construction is an XHTML document consisting of several +independent components that, when put together, provide organization +to content. Each of these components is set as a method of Layout +class that can be instantiated later from application specific modules. + +When you create a new application package, you need to create a page +module for it and instantiate the Layout class provided here inside +it. Later, the following functions must be created: page_content(), +page_navibar() and main(). These functions are used to define the +content and navigation bar of your application. Both application +content and application navigation are logically organized using +variables passed through the URL. + +Application +=========== + +URL variable: app + +This variable contains the application id. It is a unique numerical +value that starts at 0 and increments one for each new application +that might be added. The application identified by number 0 is the one +used as default when no other application is provided. The +application identified by number 0 is added to database the first time +it is created as part of the initial configuration process. + +Application is the highest level of organization inside +`webenv.cgi' script. Inside applications, there is content in form +of pages and entries. Content can be grouped by categories. + +Pages +===== + +URL variable: page + +This variable contains the page id. It is a unique numerical value +that starts at 0 and increments in one for each new page added to the +application. In contrast to applications, the page identified by +number 0 is not used as default page when no other page is provided. +This configuration is specific to each application and can be +customized inside each application individually, using string values +instead of numerical values when passing values to page variable. + +Generally, when a page variable isn't passed through the URL, the +application module uses the `content_list()' method from Layout class +to display a list of all available content entries while links to +content pages are displayed in the application navigation bar so users +can access them. The unique numerical value of content pages is +specific to each application, so there is one page 0 for each +application available. No page is added to database the first time the +database is created as part of the initial configuration process. + +Pages contain similar information to that described by contents with +few exceptions. Pages, in contrast to entries, can differentiate the +page title from the page name. The page title goes in the page content +itself and describes what the page is about with a phrase. On the +other hand, the page name is generaly one word describing the page +content and is used as link on the application navigation bar. When +no page name is explicitly provided, the first word of page title is +used instead. + +Pages are always accessible inside the same application while contents +aren't. Pages are permanently visible and linkend from each +application specific navigation bar. This kind of pages can be +managed by editors or administrators and can be marked as `draft' to +put it on a special state where it is possible for administrator, +editors and authors to work on it, but impossible for others to read +it until the page be marked as `published' by either the page author +or any members of editor's or administrator's groups. + +Pages can be converted to entires and the oposite. When convertion +occurs, unused information looses its meaning and is kept for +informative purpose, specially in situations when it might be needed +to realize a convertion back into the former state. Notice that in +order to realize such a back and forth convertion it is required that +both pages and entires share the same definition structure. In fact, +that they be the same thing, but able to differentiate themselves +either as page or entry (e.g., through a `type' field.). + +Pages content is under version control. When a page (or entry) is +changed, a verification is performed to determine whether the +information entered in edition matches the last record in the page +history table. When both the information coming from edition and the +last record in the page history table are the same (e.g., no change +happened) the edition action is cancelled and a message is printed out +to notify the action. Otherwise, when the information entered in +edition differs from the last record in the page history table, the +information comming from edition passes to be the last record in the +page history table. In case, a page be reverted to a revision +different to that one being currently the active page, the reverted +revision becomes the active page (e.g., by changing a `status' field +from `false' to `true' in the history table). + +Categories +========== + +Categories exists to organize contents. When an entry is created it is +automatically linked to a category. Categories are managed by +administrators and editors only. Categories can be nested one another +and provide another way of finding information inside the web +environment. Categories are specific to each web application, just as +contents and pages are. The `Unknown' category is created when the +categories table is created for first time, as part of the initial +configuration process so if no explicit category assignation is set by +the user, a default value (the `Unknown' category in this case) is +used to satisfy the connection between contents and categories. + +Referential integrity +===================== + +Referential integrity is not handle in the logic layer provided by +this module, but set inside the database system used to store the +information handled by this module. The most we do about it here, is +to display a confirmation message before committing such actions, so +you can be aware of them. + +""" + +import cgi +import cgitb; cgitb.enable() +from Apps import xhtml + +qs = cgi.parse() + + +def qs_args( names={}): + """Returns query string arguments. + + The query string arguments are used to build links dynamically + and, this way, to create a browsable and logically organized web + environment. Such a construction generally needs to retrive some + of the values previously passed to the query string and add new + ones to it. + + names: A dictionary containing the variable name and value pair + used to build a new query string. + + When a variable is provied without a value, then its value is + retrived from the current query string. If a value isn't found + there neither, then the variable is removed from the new query + string. + + When a variable is provided with its value, then its value is used + to build the new query string. + + """ + output = '' + + names_keys = names.keys() + names_keys.sort() + for key in names_keys: + if names[key] == '': + if key in qs: + names[key] = qs[key][0] + else: + continue + if output == '': + output = '?' + else: + output += '&' + output += key + '=' + str(names[key]) + + return '/webenv/' + output + + +class Layout(xhtml.Strict): + """The Page Layout. + + The page layout is made by combining XHTML tags in specific ways. + These specific combinations make the page components which in turn + can be also combined. Some of these components can be reused and + others don't. The goal of this class is to define what such + components are and describe them well in order to understand how + to use them from application modules when building XHTML documents + dynamically. + + The page layout is initialized with a functional layout that can + be used as reference inside application modules, to create + variations of it. Generally, inside application packages, this + class is instantiated in a module named `page', variables are + reset and functions created in order to satisfy that application + needs. When you need to output one of the page components then you + use this class instantiated methods. When the method you need + doesn't exist in this class, then it is a good time for it to be + created, here ;). + + Notice that most methods defined in this class make direct use of + methods defined by Strict class inside the `xhtml' module. The + Strict class inside xhtml module is inherited inside this class so + all the methods there are also available here. Methods which + doesn't make a direct use of Strict methods are dependencies of + those which do make direct use of Strict methods. + + """ + + + def __init__(self): + """Initialize page data.""" + self.name = 'Home' + self.title = 'The CentOS Project' + self.description = 'Community Enterprise Operating System' + self.keywords = 'centos, project, community, enterprise, operating system' + self.copyright = '2009-2011 The CentOS Project. All rights reserved.' + self.language = 'en' + + # Define page header. This is the information displayed + # between the page top and the page content. + self.header = self.logo() + self.header += self.google_ad() + self.header += self.navibar() + self.header += self.releases() + self.header += self.page_links() + self.header += self.page_navibar() + + # Define page body. This is the information displayed between + # the page header and page footer. + self.body = 'None' + + # Define page footer. This is the information displayed + # between the page bottom and the page content, the last + # information displayed in the page. + self.footer = self.credits() + + + def logo(self): + """Returns The CentOS Logo. + + The page logo is displayed on the top-left corner of the page. + We use this area to show The CentOS Logo, the main visual + representation of The CentOS Project. In order to print the + page logo correctly, the image related must be 78 pixels of + height. + + """ + attrs = [] + attrs.append({'id': 'logo'}) + attrs.append({'title': 'Community Enterprise Operating System', 'href': '/webenv/'}) + attrs.append({'src': '/public/Images/centos-logo.png', 'alt': 'CentOS'}) + + return self.tag_div(attrs[0], [8,1], self.tag_a(attrs[1], [12,1], self.tag_img(attrs[2], [0,0]), 0), 1) + + + def google_ad_example(self): + """Returns Google advertisement for offline testings.""" + title = 'Google Advertisement' + url = '/public/Images/ads-sample-468x60.png' + image = self.tag_img({'src': url, 'alt': title}, [0,0]) + link = self.tag_a({'href': url, 'title': title}, [12,1], image) + output = self.tag_div({'class':'google-ad'}, [8,1], link, 1) + output += self.separator({'class':'page-line'}, [8,1]) + + return output + + + def google_ad(self): + """Returns Google advertisement for online using.""" + + properties = {} + properties['google_ad_client'] = 'pub-6973128787810819' + properties['google_ad_width'] = '468' + properties['google_ad_height'] = '60' + properties['google_ad_format'] = '468x60_as' + properties['google_ad_type'] = 'text_image' + properties['google_ad_channel'] = '' + properties['google_color_border'] = '204c8d' + properties['google_color_bg'] = '345c97' + properties['google_color_link'] = '0000FF' + properties['google_color_text'] = 'FFFFFF' + properties['google_color_url'] = '008000' + + attrs = {} + attrs['type'] = "text/javascript" + + output = '\n' + + properties = self.tag_script(attrs, [12,1], output, 1) + + attrs['src'] = "http://pagead2.googlesyndication.com/pagead/show_ads.js" + + source = self.tag_script(attrs, [12,1], ' ', 0) + + output = self.tag_div({'class':'google-ad'}, [8,1], properties + source, 1) + output += self.separator({'class':'page-line'}, [8,1]) + + return output + + + def navibar(self): + """Returns webenv navigation bar. + + The webenv navigation bar organizes links to main web + applications The CentOS Project makes use of. Links to these + web applications stay always visible, no matter what web + application the user be visiting (e.g., Wiki, Lists, Forums, + Projects, Bugs, Docs, Downloads and Sponsors.). Notice that + some of these web applications are out of `webenv.cgi' + scope and they need to code their own webenv navigation bars + in a way that coincide the one set by `webenv.cgi'. + + """ + names = ['Home', 'Wiki', 'Lists', 'Forums', 'Projects', 'Bugs', 'Docs', 'Downloads', 'Sponsors'] + attrs = [] + focus = self.name + + for i in range(len(names)): + if names[i].lower() == 'home': + attrs.append({'href': '/webenv/'}) + else: + attrs.append({'href': '/webenv/?app=' + names[i].lower()}) + + tabs = self.navibar_tabs(names, attrs, focus) + tabs += self.separator() + + return tabs + + + def navibar_tabs(self, names, attrs, focus=''): + """Returns navigation tabs. + + The navigation tabs are the smaller components a navigation + bar like "top-level navigation bar" and "application + navigation bar" are made of. + + names: List containing link names of tabs. + + attrs: List containing a dictionary for each tab link name + inside the `names' list. Dictionaries inside attrs + argument contain the link attributes (e.g., accesskey, + title, and href) used by link names so they can be + linkable once rendered. + + focus: Name of the link marked as current. + + """ + navibar_tabs = '' + + for i in range(len(names)): + output = self.tag_span('', [0,0], str(names[i])) + output = self.tag_a(attrs[i], [16,1], output) + if str(names[i]).lower() == focus.lower(): + output = self.tag_span({'class': 'current'}, [12,1], output, 1) + else: + output = self.tag_span('', [12,1], output, 1) + navibar_tabs += output + + return self.tag_div({'class': 'tabs'}, [8,1], navibar_tabs, 1) + + + def releases(self): + """Returns The CentOS Distribution last releases. + + This method introduces the `releases' method by providing + links to it. + + names: List containing release numbers in the form M.N, where M + means major release and N minor release. + + attrs: List containing a dictionary for each release number + provided in `names' argument. These dictionaries provide + the link attributes required by release numbers in order + for them to be transformed into valid links once the page + be rendered. + + """ + releases = '' + + names = [] + names.append('6.0') + + attrs = [] + attrs.append({'href': qs_args({'p':'releases', 'id': 6.0})}) + + + title = self.tag_a({'href': qs_args({'p':'releases'})}, [0,0], 'Last Releases') + ':' + title = self.tag_span({'class': 'title'}, [16,1], title) + + for i in range(len(names)): + link = self.tag_a(attrs[i], [20,1], names[i]) + if i == len(names) - 1: + span = self.tag_span({'class': 'last release'}, [16,1], link, 1) + else: + span = self.tag_span({'class': 'release'}, [16,1], link, 1) + releases += span + releases = self.tag_div({'class': 'left'}, [12,1], title + releases, 1) + + rsslink = self.tag_span('', [0,0], 'RSS') + rsslink = self.tag_a({'href': qs_args({'rss':'releases'}), 'title': 'RSS'}, [20,1], rsslink) + rsslink = self.tag_span({'class': 'rss'}, [16,1], rsslink, 1) + rsslink = self.tag_div({'class': 'right'}, [12, 1], rsslink, 1) + + return self.tag_div({'id': 'last-releases'}, [8,1], releases + rsslink, 1) + + + def user_links_logs(self): + """Return links related to user's logs. + + This function introduces the `logs' module. The `logs' module + registers all user's activity, from login to logout. This link + must be display/accessible only after a user has successfully + login. + + """ + last_visit = self.tag_a({'href': qs_args({'app':'', 'p':'logs'})}, [0,0], 'Logs') + return self.tag_div({'class': 'logs'}, [12, 1], last_visit, 1) + + + def user_links_session(self): + """Returns links related to user's session. + + This function introduces the `session' module. The `session' + module provides state to user interactions so their action can + be registered individually. + + """ + names = [] + attrs = [] + session = '' + + names.append('Lost your password?') + attrs.append({'href': qs_args({'app':'', 'p':'lostpwd'})}) + names.append('Register') + attrs.append({'href': qs_args({'app':'', 'p':'register'})}) + names.append('Login') + attrs.append({'href': qs_args({'app':'', 'p':'login'})}) + + for i in range(len(names)): + output = self.tag_a(attrs[i], [20,1], str(names[i]), 0) + if i == len(names) - 1: + output = self.tag_span({'class': 'last'}, [16,1], output, 1) + else: + output = self.tag_span('', [16,1], output, 1) + session += output + + return self.tag_div({'class': 'session'}, [12,1], session, 1) + + + def user_links_trails(self, names=['None'], attrs=[{'href': '/webenv/'}]): + """Returns page trails (a.k.a. breadcrumbs). + + The page breadcrumbs record the last pages the user visited + inside the current web application. Notice that page + breadcrumbs are user-specific information, so it isn't + possible to implement them until a way to manage user sessions + be implemeneted inside `webenv.cgi' script. Until then, + keep the tag construction commented and return an empty value. + + names: List with trail link names. + + attrs: Dictionary with trail link attributes. + + """ + links = '' + + for i in range(len(names)): + if i == len(names) - 1: + output = self.tag_span({'class':'last'}, [16,1], self.tag_a(attrs[i], [20, 1], names[i]), 1) + else: + output = self.tag_span('', [16,1], self.tag_a(attrs[i], [20, 1], names[i], 0), 1) + links += output + + return self.tag_div({'class': 'trail'}, [12,1], links, 1) + + + def user_links(self): + """Returns user related links. + + The user links are specific to each web application. They are + shown over the application navigation bar. + + """ + userlinks = self.user_links_logs() + userlinks += self.user_links_session() + userlinks += self.user_links_trails() + + return self.tag_div({'class': 'userlinks'}, [8,1], userlinks, 1) + + + def page_navibar(self, names=['Welcome'], attrs=[{'href':'/webenv/?p=welcome'}], focus='Welcome'): + """Returns navigation bar for application main pages. + + names: List containing link names. + + attrs: List containing one dictionary for each link name in + `names' argument. Dictionaries here contain the link + attributes needed to make linkable tabs once the page is + rendered. + + """ + navibar_app = self.navibar_tabs(names, attrs, focus) + navibar_app += self.separator({'class': 'page-line white'}, [8,1]) + + return navibar_app + + + def separator(self, attrs={'class': 'page-line'}, indent=[16,1]): + """Returns separator. + + The separator construction is mainly used to clear both sides + inside the page, specially when floating elements are around. + + attrs: Dictionary containing hr's div attributes. + + indent: List containing hr's div indentation values. + + """ + line = self.tag_hr({'style': 'display:none;'}, [0,0]) + line = self.tag_div(attrs, indent, line) + + return line + + + def license(self): + """Retruns license link.""" + license = 'Creative Commons Attribution-Share Alike 3.0 Unported License' + license = self.tag_a({'href': 'http://creativecommons.org/licenses/by-sa/3.0/'}, [0,0], license) + '.' + + return license + + + def metadata(self): + """Returns metadata.""" + metadata = self.tag_meta({'http-equiv': 'content-type', 'content': 'text/html; charset=UTF-8'}, [4,1]) + metadata += self.tag_meta({'http-equiv': 'content-style-type', 'content': 'text/css'}, [4,0]) + metadata += self.tag_meta({'http-equiv': 'content-language', 'content': str(self.language)}, [4,1]) + metadata += self.tag_meta({'name': 'keywords', 'content': str(self.keywords)}, [4,0]) + metadata += self.tag_meta({'name': 'description', 'content': str(self.description)}, [4,1]) + metadata += self.tag_meta({'name': 'copyright', 'content': 'Copyright © ' + str(self.copyright)}, [4,0]) + metadata += self.tag_title('', [4,1], self.title) + metadata += self.tag_link({'href': '/public/stylesheet.css','rel': 'stylesheet', 'type': 'text/css'}, [4,0]) + metadata += self.tag_link({'href': '/public/centos-fav.png', 'rel': 'shortcut icon', 'type': 'image/png'}, [4,1]) + + return self.tag_head('', [0,1], metadata) + + + + + def searchform(self, size=15): + """Returns search form. + + The search form redirects user from the current page onto the + search page, where the keywords previously introduced in the + input field are processed then. + + size: A number discribing how large the search box is. + + """ + input = self.tag_input({'type':'text', 'value':'', 'size':size}, [0,0]) + + action = self.tag_dt({}, [20,1], 'Search') + action += self.tag_dd({}, [20,1], input) + action = self.tag_dl({'class':'search'}, [16,1], action, 1) + + return self.tag_form({'action': qs_args({'app':'', 'p':'search'}), + 'method':'post', 'title':'Search'}, + [12,1], action, 1) + + + def content_resumen(self, attrs, id, title, user_id, commit_date, + update_date, category_id, comments, abstract): + """Returns content resumen. + + The content resumen is used to build the list of contents, + output by `content_list()' method. The content resumen intends + to be concise and informative so the user can grab a general + idea about the related content and what it is about. + + attrs: A dictionary discribing the rows style. This is useful + to alternate the row background colors. + + id: A unique numerical value referring the content + identification. This is the value used on administrative + tasks like updating and deleting. + + title: A few words phrase describing the content, up to 255 + characters. + + author_id: A string referring the user email address, as + specified by RFC2822. The user email address is used as id + inside The CentOS User LDAP server, where user specific + information (e.g., surname, lastname, office, phone, etc.) + are stored in. This is the field that bonds the user with + the content he/she produces. + + commit_date: A string referring the timestamp the content + arrived to database for time. + + update_date: A string representing the timestamp the content + was updated/revised for last time. + + category_id: A number refering the category id the content is + attached to. + + abstract: One paragraphs describing the content. This + information is used to build the page metadata + information. When this value is not provided no abstract + information is displayed in the page, but the is built using article's first 255 + characters. + + comments: A number representing how many comments the content + has received since it is in the database. + + The content itself is not displayed in the resumen, but in + `content_details()'. + + """ + title = self.tag_a({'href': qs_args({'app':'', 'p':'entry', 'id':id})}, [0,0], title) + title = self.tag_h3({'class': 'title'}, [20,1], title, 0) + info = self.content_info(id, user_id, commit_date, + update_date, category_id, comments, + abstract) + return self.tag_div(attrs, [16,1], title + info, 1) + + + def pagination(self): + """Return content pagination.""" + previous = self.tag_a({'href':''}, [0,0], 'Previous') + previous = self.tag_span({'class':'previous'}, [20,1], previous) + next = self.tag_a({'href':''}, [0,0], 'Next') + next = self.tag_span({'class':'next'}, [20,1], next) + separator = self.separator({'class':'page-line'}, [20,1]) + return self.tag_div({'class':'pagination'}, [16,1], previous + + next + separator, 1) + + + def content_info(self, content_id, user_id, commit_date, + update_date, category_id, comments, abstract): + """Return content information. + + The content information provides a reduced view of content so + people can make themselves an idea of what the content talks + about. The content information displays content's title, + author, timestamp, related category, number of comments and an + abstract of the whole content. + + """ + categories = [] + categories.append('Unknown') + categories.append('Erratas') + categories.append('Articles') + categories.append('Events') + + if category_id <= len(categories): + category_name = categories[category_id].capitalize() + else: + category_id = 0 + category_name = categories[category_id].capitalize() + + category_name = self.tag_a({'href': qs_args({'app':'', 'p':'categories', 'id':category_id})}, [0,0], category_name) + category_name = self.tag_span({'class':'category'}, [24,1], category_name) + + users = {} + users['al@centos.org'] = 'Alain Reguera Delgado' + users['ana@centos.org'] = 'Ana Tamara Reguera Gattorno' + users['alina@centos.org'] = 'Alina Reguera Gattorno' + + if user_id in users.keys(): + user_name = self.tag_a({'href':'mailto:' + user_id}, [0,0], users[user_id]) + user_name = self.tag_span({'class':'author'}, [24,1], 'Written by ' + user_name) + + if update_date != commit_date: + date = self.tag_span({'class':'date'}, [24,1], update_date) + else: + date = self.tag_span({'class':'date'}, [24,1], commit_date) + + + comments_attrs = {'href': qs_args({'app':'', 'p':'entry', 'id':content_id}) + '#comments'} + if comments == 1: + comments = self.tag_a(comments_attrs, [0,0], str(comments) + ' comment') + elif comments > 1: + comments = self.tag_a(comments_attrs, [0,0], str(comments) + ' comments') + else: + comments = 'No comments' + comments = self.tag_span({'class':'comment'}, [24,1], comments) + + abstract = self.tag_p({'class':'abstract'}, [24,1], abstract) + + return self.tag_div({'class': 'info'}, [20,1], user_name + date + category_name + comments + abstract, 1) + + + def content_list(self): + """Return list of content. + + The list of content is used to explore the content available + inside specific pages of specific web applications. The + information is displayed through paginated rows of content + that can be filtered to reduce the search results based on + patterns. By default, the list of content displays 15 rows, + but this value can be changed in user's preferences. + + """ + output = '' + count = 0 + rows = [] + rows.append([0, 'Introduction to CentOS Web Environment', + 'al@centos.org', + '2011-8-30 12:33:11', + '2011-8-30 12:33:11', + 0, + 0, + 'This is the abstract paragrah of content. '*10]) + rows.append([1, 'Creating New Applications', + 'al@centos.org', + '2011-8-30 12:33:11', + '2011-8-30 12:33:11', + 2, + 1, + 'This is the abstract paragrah of content. '*5]) + rows.append([2, 'Texinfo Documentation Backend', + 'al@centos.org', + '2011-8-30 12:33:11', + '2011-8-30 12:33:11', + 1, + 5, + 'This is the abstract paragrah of content. '*8]) + + for row in rows: + if count == 0: + attrs = {'class': 'dark row'} + count += 1 + else: + attrs = {'class': 'light row'} + count = 0 + output += self.content_resumen(attrs, *row) + + list = output + self.pagination() + self.separator() + list = self.tag_div({'id':'content-list'}, [12,1], list, 1) + actions = self.searchform() + self.categories() + self.archives() + actions = self.tag_div({'id':'content-actions'}, [8,1], actions, 1) + + return actions + list + + + def content_details(self): + """Return content details. + + The content detail is shown for contents and pages. + """ + output = '' + rows = [] + rows.append([0, 'Introduction to CentOS Web Environment', + 'al@centos.org', + '2011-8-30 12:33:11', + '2011-8-30 12:33:11', + 0, + 0, + 'This is the abstract paragrah of content. '*10, + 'This is the first paragraph of content'*10 + "\n" + 'This is the second paragraph of content'*20 + + "\n" + 'This is the third paragraph of content.'*10 + "\n"]) + rows.append([1, 'Creating New Applications', + 'al@centos.org', + '2011-8-30 12:33:11', + '2011-8-30 12:33:11', + 2, + 1, + 'This is the abstract paragrah of content. '*5, + "This is the first paragraph of content\n\ + This is the second paragraph of content.\n\ + This is the third paragraph of content."]) + rows.append([2, 'Texinfo Documentation Backend', + 'al@centos.org', + '2011-8-30 12:33:11', + '2011-8-30 12:33:11', + 1, + 5, + 'This is the abstract paragrah of content. '*8, + "This is the first paragraph of content.\n\ + This is the second paragraph of content.\n\ + This is the third paragraph of content."]) + + if 'id' in qs: + id = int(qs['id'][0]) + title = rows[id][1] + email = rows[id][2] + commit_date = rows[id][3] + update_date = rows[id][4] + category = rows[id][5] + comments = rows[id][6] + abstract = self.tag_p({}, [0,0], rows[id][7]) + + output = self.tag_h1({'class':'title'}, [12,1], title) + output += self.content_info(id, email, commit_date, update_date, category, comments, abstract) + output += self.tag_p({}, [20,1], rows[id][8]) + output += self.comments() + + return self.tag_div({'id':'content-details'}, [12,1], output, 1) + + + def comments(self): + """Returns content specific list of comments. + + """ + output = self.tag_a({'name':'comments'}, [0,0], 'Comments') + output = self.tag_h2({'class':'title comments'}, [12,1], output, 0) + + return output + + + def categories(self): + """Returns list of categories. + + """ + categories = ['Unknown', 'Articles', 'Erratas', 'Events'] + dt = self.tag_dt({}, [16,1], 'Categories') + dd = '' + for id in range(len(categories)): + category_attrs = {'href': qs_args({'app':'', 'p':'categories', 'id':id})} + a = self.tag_a(category_attrs, [0,0], categories[id] + ' (0)') + dd += self.tag_dd({}, [16,1], a) + + return self.tag_dl({},[12,1], dt + dd, 1) + + + def archives(self): + """Returns archives.""" + archives = {} + archives['2011'] = ['January', 'February', 'March', 'April', 'May'] + archives['2010'] = ['January', 'February'] + + dt = self.tag_dt({}, [16,1], 'Archives') + year_dl = '' + year_dd = '' + + for key in archives.keys(): + year_dt = self.tag_dt({},[20,1], key) + for id in range(len(archives[key])): + a = self.tag_a({'href': qs_args({'app':'', 'p':'archives', 'year': key, 'month': id + 1})}, [0,0], archives[key][id] + ' (0)') + year_dd += self.tag_dd({}, [20,1], a) + year_dl += self.tag_dl({'class':'year'}, [16,1], year_dt + year_dd, 1) + year_dd = '' + + return self.tag_dl({},[12,1], dt + year_dl, 1) + + + def page_top(self): + """Returns page top anchor.""" + return self.tag_a({'name':'top'}, [0,1]) + + + def page_header(self): + """Returns page header. + + The page_header is common to all application modules and + """ + return self.tag_div({'id': 'page-header'}, [4,1], self.header, 1) + + + def page_body(self): + """Returns page body. + + The page_body is specific to each application module and is + there where it must be constructed. The construction itself + takes place through the `page_content()' function which does a + return through an instantiated `content_' prefixed method. + The `content_' prefixed method used depends on the kind of + content you want to print out (e.g., `content_list()' for a + content list, `detail()' for a detailed view of content, + etc.). Later, the `body' variable instantiated from this class + is reset in the `main()' function with the value returned from + `page_content()' so the desired content layout can be printed + out. + + """ + return self.tag_div({'id':'page-body'}, [4,1], self.body, 1) + + + def page_links(self): + """Returns page links.""" + page_links = self.user_links() + return self.tag_div({'id': 'pagelinks'}, [8,1], page_links, 1) + + + def page_footer(self): + """Retruns page footer.""" + return self.tag_div({'id': 'page-footer'}, [4,1], self.credits(), 1) + + + def page_wrap(self): + """Returns page wrap.""" + return self.tag_div({'id': 'wrap'}, [0,1], self.page_header() + self.page_body() + self.page_footer(), 1) + + + def admonition(self, title='Note', subtitle="", body=""): + """Returns page admonition. + + title: Admonition's title. + + subtitle: Admonition's subtitle. The value of this argument is + concatenated on the right side of title using a colon (:) + as separator. Notice that this value is expanded inside + the

tag and there is no need to introduce extra tags + here. + + body: Admonition's body. The values passed through this + arguments needs to be XHTML code returned from + `self.tag()'. Preferably, paragraphs (p), tables (table), + lists (ul, ol, dl) and pre-formatted texts (pre). + + """ + if title == '': + return '' + else: + title = str(title.capitalize()) + + if subtitle != '': + subtitle = ': ' + str(subtitle.capitalize()) + + if body != '': + body = str(body) + + admonitions = ['Note', 'Tip', 'Important', 'Caution', 'Warning', 'Redirected', 'Success', 'Error'] + + if title in admonitions: + attrs = {'class': 'admonition ' + title.lower()} + image = self.tag_img({'src': '/public/Images/' + title.lower() + '.png', 'alt': title}, [16,1]) + title = self.tag_h3({'class': 'title'}, [16,1], title + subtitle, 0) + output = image + title + body + self.separator() + else: + attrs = {'class': 'admonition unknown'} + title = self.tag_h3({'class': 'title'}, [16,1], title + subtitle, 1) + output = title + body + + return self.tag_div(attrs, [12,1], output, 1) + + + def credits(self): + """Returns page credits.""" + copyright = self.tag_p({'class': 'copyright'}, [12,1], 'Copyright © ' + str(self.copyright)) + license = self.tag_p({'class': 'license'}, [12,1], 'This website is licensed under a ' + str(self.license())) + credits = self.tag_img({'src': '/public/Images/top.png', 'alt': 'Top'}, [0,0]) + credits = self.tag_a({'title': 'Top', 'href': '#top'}, [16,1], credits) + credits = self.tag_div({'class': 'top'}, [12,1], credits, 1) + credits = str(credits) + str(copyright) + str(license) + credits = self.tag_div({'class': 'credits'}, [8,1], credits, 1) + + return credits + + + def page(self): + """Returns page final output.""" + html = self.doctype() + html += self.tag_html({'xmlns': 'http://www.w3.org/1999/xhtml', 'dir': 'ltr', + 'lang': str(self.language), 'xml:lang': str(self.language)}, [0,1], + self.metadata() + self.page_top() + self.page_wrap()) + + return html diff --git a/Scripts/Python/Webenv/cgi-bin/Apps/xhtml.py b/Scripts/Python/Webenv/cgi-bin/Apps/xhtml.py new file mode 100755 index 0000000..be646b5 --- /dev/null +++ b/Scripts/Python/Webenv/cgi-bin/Apps/xhtml.py @@ -0,0 +1,1451 @@ +# Copyright (C) 2011 The CentOS Project +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# ------------------------------------------------------------------ +# $Id$ +# ------------------------------------------------------------------ +"""Support XHTML construction. + +XHTML construction, as set here, uses the Extensible HTML version 1.0 +DTDs (/usr/share/sgml/xhtml1/xhtml1-20020801/DTD/) as reference. XHTML +construction is required by page module. +""" + + +class Strict: + """Implements XHTML strict document type definition.""" + + + # Core attributes common to most elements. + coreattrs = ['id', # document-wide unique id + 'class', # space separated list of classes + 'style', # associated style info + 'title' # advisory title/amplification + ] + + # Internationalization attributes. + i18n = ['lang', # language code (backwards compatible) + 'xml:lang', # language code (as per XML 1.0 spec) + 'dir' # direction for weak/neutral text + ] + + # Attributes for common UI events. + events = ['onclick', # a pointer button was clicked + 'ondblclick', # a pointer button was double clicked + 'onmousedown', # a pointer button was pressed down + 'onmouseup', # a pointer button was released + 'onmousemove', # a pointer was moved onto the element + 'onmouseout', # a pointer was moved away from the element + 'onkeypress', # a key was pressed and released + 'onkeydown', # a key was pressed down + 'onkeyup' # a key was released + ] + + # Attributes for elements that can get the focus. + focus = ['accesskey', # accessibility key character + 'tabindex', # position in tabbing order + 'onfocus', # the element got the focus + 'onblur' # the element lost the focus + ] + + # Attributes generic format. + attrs = coreattrs + i18n + events + + + def __init__(self): + """Initialize class data.""" + pass + + + def tag(self, name, attrs, indent=[8,1], content="", has_child=0): + """Returns generic XHTML tag definition. + + Arguments: + + name: The XHTML tag's name. Notice that this function doesn't + verify nor validate the XHTML tags you provide. It is up + to you write them correctly considering the XHTML standard + definition. + + attrs: The XHTML tag's attribute. Notice that this function + doesn't verify the attributes assignation to tags. You + need to know what attributes are considered valid to the + tag you are creating in order to build a well-formed XHTML + document. Such verification can be achived inside firefox + browser through the `firebug' plugin. + + indent: The XHTML tag's indentation (Optional). This argument + is a list of two numerical values. The first value in the + list represents the amount of horizontal spaces between + the beginning of line and the opening tag. The second + value in the list represents the amount of vertical spaces + (new lines) between tags. + + content: The XHTML tag's content (Optional). This argument + provides the information the tag encloses. When this + argument is empty, tag is rendered without content. + + has_child: The XHTML tag has a child? (Optional). This + argument is specifies whether a tag has another tag inside + (1) or not (0). When a tag has not a child tag, + indentation is applied between the tag content and the + closing tag provoking an unecessary spaces to be shown. + Such kind of problems are prevented by setting this option + to `0'. On the other hand, when a tag has a child tag + inside, using the value `1' will keep the closing tag + indentation aligned with the opening one. + + This function encapsulates the construction of XHTML tags. + Use this function wherever you need to create XHTML tags. It + helps to standardize tag constructions and their final output + and. This function provides a consistent way of producing + output for XHTML documents. + """ + if indent[0] > 0: + h_indent = ' '*indent[0] + else: + h_indent = '' + + if indent[1] > 0: + v_indent = "\n"*indent[1] + else: + v_indent = '' + + output = v_indent + h_indent + '<' + str(name) + if len(attrs) > 0: + attr_names = attrs.keys() + attr_names.sort() + for attr_name in attr_names: + output += ' ' + str(attr_name) + '="' + str(attrs[attr_name]) + '"' + if content == '': + output += ' />' + else: + output += '>' + output += str(content) + if has_child == 1: + output += h_indent + '' + else: + output += '' + output += v_indent + + return output + + + # ------------------------------------------------------------------ + # Document Type Definition + # ------------------------------------------------------------------ + + def doctype(self): + """Return document type definition.""" + output = '' + "\n" + output += '' + "\n" + + return output + + + # ------------------------------------------------------------------ + # Document Structure + # ------------------------------------------------------------------ + + def tag_html(self, attrs, indent, content, has_child=1): + """Returns document structure definition. + + + + + The namespace URI designates the document profile. + + """ + return self.tag('html', attrs, indent, content, has_child=1) + + + # ------------------------------------------------------------------ + # Document Head + # ------------------------------------------------------------------ + + def tag_head(self, attrs, indent, content, has_child=1): + """Returns document head definition. + + + + + + + Content model is %head.misc; combined with a single title and + an optional base element in any order. + + """ + return self.tag('head', attrs, indent, content, has_child) + + + def tag_title(self, attrs, indent, content, has_child=0): + """Returns title definition. + + + + + The title element is not considered part of the flow of text. + It should be displayed, for example as the page header or + window title. Exactly one title is required per document. + + """ + return self.tag('title', attrs, indent, content, has_child) + + + def tag_base(self, attrs, indent): + """Returns document base URI. + + + + + """ + return self.tag('base', attrs, indent) + + + def tag_meta(self, attrs, indent): + """Returns generic metainformation. + + + + + """ + return self.tag('meta', attrs, indent) + + + def tag_link(self, attrs, indent): + """Returns relationship values. + + + + + Relationship values can be used in principle: + + a) for document specific toolbars/menus when used with the + link element in document head e.g. start, contents, + previous, next, index, end, help. + + b) to link to a separate style sheet (rel="stylesheet"). + + c) to make a link to a script (rel="script"). + + d) by stylesheets to control how collections of html nodes + are rendered into printed documents. + + e) to make a link to a printable version of this document + e.g. a PostScript or PDF version (rel="alternate" + media="print"). + + """ + return self.tag('link', attrs, indent) + + + def tag_style(self, attrs, indent, content, has_child=0): + """Returns style info. + + + + + """ + return self.tag('style', attrs, indent, content, has_child) + + + def tag_script(self, attrs, indent, content="", has_child=0): + """Returns script statement. + + + + + + """ + return self.tag('script', attrs, indent, content, has_child) + + + def tag_noscript(self, attrs, indent, content, has_child=1): + """Returns alternate content container for non script-based + rendering. + + + + + """ + return self.tag(self, attrs, indent, content, has_child) + + + # ------------------------------------------------------------------ + # Document Body + # ------------------------------------------------------------------ + + def tag_body(self, attrs, indent, content, has_child=1): + """Returns document body definition. + + + + + """ + return self.tag('body', attrs, indent, content, has_child) + + + def tag_div(self, attrs, indent, content, has_child=0): + """Returns generic language/style container. + + + + + """ + return self.tag('div', attrs, indent, content, has_child) + + + # ------------------------------------------------------------------ + # Paragraphs + # ------------------------------------------------------------------ + + def tag_p(self, attrs, indent, content, has_child=0): + """Returns paragraph definition. + + + + + When content is introduced inside the database, it goes + without any XHTML markup. This method transforms newline + separated strings into XHTML paragraphs. + + """ + output = '' + for line in content.splitlines(): + if line == '': continue + output += self.tag('p', attrs, indent, line.strip(), has_child) + return output + + + # ------------------------------------------------------------------ + # Headings + # ------------------------------------------------------------------ + # There are six levels of headings from h1 (the most important) to + # h6 (the least important). + # ------------------------------------------------------------------ + + def tag_h1(self, attrs, indent, content, has_child=0): + """Returns h1 definition. + + + + + """ + return self.tag('h1', attrs, indent, content, has_child) + + + def tag_h2(self, attrs, indent, content, has_child=0): + """Returns h2 definition. + + + + + """ + return self.tag('h2', attrs, indent, content, has_child) + + + def tag_h3(self, attrs, indent, content, has_child): + """Returns h3 definition. + + + + + """ + return self.tag('h3', attrs, indent, content, has_child) + + + def tag_h4(self, attrs, indent, content, has_child): + """Returns h4 definition. + + + + + """ + return self.tag('h4', attrs, indent, content, has_child) + + + def tag_h5(self, attrs, indent, content, has_child=0): + """Returns h5 definition. + + + + + """ + return self.tag('h5', attrs, indent, content, has_child) + + + def tag_h6(self, attrs, indent, content, has_child=0): + """Returns h6 definition. + + + + + """ + return self.tag('h6', attrs, indent, content, has_child) + + + # ------------------------------------------------------------------ + # Lists + # ------------------------------------------------------------------ + + def tag_ul(self, attrs, indent, content, has_child=1): + """Returns unordered list definition. + + + + + """ + return self.tag('ul', attrs, indent, content, has_child) + + + def tag_ol(self, attrs, indent, content, has_child=1): + """Returns ordered (numbered) list definition. + + + + + """ + return self.tag('ol', attrs, indent, content, has_child) + + + def tag_li(self, attrs, indent, content, has_child=0): + """Returns item definition for both ordered (ol) and unordered + (ul) lists. + + + + + """ + return self.tag('li', attrs, indent, content, has_child) + + + def tag_dl(self, attrs, indent, content, has_child=1): + """Returns definition list definition. + + + + + """ + return self.tag('dl', attrs, indent, content, has_child) + + + def tag_dt(self, attrs, indent, content, has_child=0): + """Returns term of definition lists. + + + + + """ + return self.tag('dt', attrs, indent, content, has_child) + + + def tag_dd(self, attrs, indent, content, has_child=0): + """Returns definition of definition lists. + + + + + """ + return self.tag('dd', attrs, indent, content, has_child) + + + # ------------------------------------------------------------------ + # Address + # ------------------------------------------------------------------ + + def tag_address(self, attrs, indent, content='', has_child=0): + """Returns information on author. + + + + + """ + return self.tag('address', attrs, indent, content) + + + # ------------------------------------------------------------------ + # Horizontal Rule + # ------------------------------------------------------------------ + + def tag_hr(self, attrs, indent): + """Returns horizontal rule. + + + + + """ + return self.tag('hr', attrs, indent) + + + # ------------------------------------------------------------------ + # Preformatted text + # ------------------------------------------------------------------ + + def tag_pre(self, attrs, indent, content): + """Returns preformatted text. + + + + + content is %Inline; excluding "img|object|big|small|sub|sup" + + """ + return self.tag('pre', attrs, indent, content) + + + # ------------------------------------------------------------------ + # Block-line Quotes + # ------------------------------------------------------------------ + + def tag_blockquote(self, attrs, indent, content): + """Returns block-line quote. + + + + + """ + return self.tag('blockquote', attrs, indent, content) + + + # ------------------------------------------------------------------ + # Inserted/Deleted Text + # ------------------------------------------------------------------ + + def tag_ins(self, attrs, indent, content): + """Returns inserted text. + + + + + Inserted texts are allowed in block and inline content, but + its inappropriate to include block content within an ins + element occurring in inline content. + + """ + return self.tag('ins', attrs, indent, content) + + + def tag_del(self, attrs, indent, content): + """Returns deleted text. + + + + + Deleted texts are allowed in block and inline content, but its + inappropriate to include block content within an ins element + occurring in inline content. + + """ + return self.tag('ins', attrs, indent, content) + + + # ------------------------------------------------------------------ + # The Anchor Element + # ------------------------------------------------------------------ + + def tag_a(self, attrs, indent, content='', has_child=0): + """Returns the anchor element. + + + + + content is %Inline; except that anchors shouldn't be nested. + """ + return self.tag('a', attrs, indent, content, has_child) + + + # ------------------------------------------------------------------ + # Inline Elements + # ------------------------------------------------------------------ + + def tag_span(self, attrs, indent, content, has_child=0): + """Returns span definition. + + + + + """ + return self.tag('span', attrs, indent, content, has_child) + + + def tag_dbo(self, attrs, indent, content, has_child=0): + """Returns dbo definition. + + + + + """ + return self.tag('dbo', attrs, indent, content, has_child) + + + def tag_br(self, attrs, indent): + """Returns break definition. + + + + + """ + return self.tag('br', attrs, indent) + + + def tag_em(self, attrs, indent, content, has_child=0): + """Returns emphasis definition. + + + + + """ + return self.tag('em', attrs, indent, content, has_child) + + + def tag_strong(self, attrs, indent, content, has_child=0): + """Returns strong emphasis definition. + + + + + """ + return self.tag('strong', attrs, indent, content, has_child) + + + def tag_dfn(self, attrs, indent, content, has_child=0): + """Returns definitional definition. + + + + + """ + return self.tag('dfn', attrs, indent, content, has_child) + + + def tag_code(self, attrs, indent, content, has_child=0): + """Returns program code definition. + + + + + """ + return self.tag('code', attrs, indent, content, has_child) + + + def tag_samp(self, attrs, indent, content, has_child=0): + """Returns sample definition. + + + + + """ + return self.tag('samp', attrs, indent, content, has_child) + + + def tag_kbd(self, attrs, indent, content, has_child=0): + """Returns definition for something user would type. + + + + + """ + return self.tag('kbd', attrs, indent, content, has_child) + + + def tag_var(self, attrs, indent, content, has_child=0): + """Returns variable definition. + + + + + """ + return self.tag('var', attrs, indent, content, has_child) + + + def tag_cite(self, attrs, indent, content, has_child=0): + """Returns citation definition. + + + + + """ + return self.tag('cite', attrs, indent, content, has_child) + + + def tag_abbr(self, attrs, indent, content, has_child=0): + """Returns abbreviation definition. + + + + + """ + return self.tag('abbr', attrs, indent, content, has_child) + + + def tag_acronym(self, attrs, indent, content, has_child=0): + """Returns the acronym definition. + + + + + """ + return self.tag('acronym', attrs, indent, content, has_child) + + + def tag_q(self, attrs, indent, content, has_child=0): + """Returns inline quote definition. + + + + + """ + return self.tag('q', attrs, indent, content, has_child) + + + def tag_sub(self, attrs, indent, content, has_child=0): + """Returns subscript definition. + + + + + """ + return self.tag('sub', attrs, indent, content, has_child) + + + def tag_sup(self, attrs, indent, content, has_child=0): + """Returns superscript definition. + + + + + """ + return self.tag('sup', attrs, indent, content, has_child) + + + def tag_tt(self, attrs, indent, content, has_child=0): + """Returns fixed pitch font definition. + + + + + """ + return self.tag('tt', attrs, indent, content, has_child) + + + def tag_i(self, attrs, indent, content, has_child=0): + """Returns italic font definition. + + + + + """ + return self.tag('i', attrs, indent, content, has_child) + + + def tag_b(self, attrs, indent, content, has_child=0): + """Returns bold font definition. + + + + + """ + return self.tag('b', attrs, indent, content, has_child) + + + def tag_big(self, attrs, indent, content, has_child=0): + """Returns bigger font definition. + + + + + """ + return self.tag('big', attrs, indent, content, has_child) + + + def tag_small(self, attrs, indent, content, has_child=0): + """Returns smaller font definition. + + + + + """ + return self.tag('small', attrs, indent, content, has_child) + + + # ------------------------------------------------------------------ + # Object + # ------------------------------------------------------------------ + + def tag_object(self, attrs, indent, content, has_child=1): + """Returns object definition. + + + + + The object definition is used to embed objects as part of HTML + pages. param elements should precede other content. + Parameters can also be expressed as attribute/value pairs on + the object element itself when brevity is desired. + + """ + return self.tag('object', attrs, indent, content, has_child) + + + def tag_param(self, attrs, indent): + """Returns param definition. + + + + + The param definition is used to supply a named property value. + In XML it would seem natural to follow RDF and support an + abbreviated syntax where the param elements are replaced by + attribute value pairs on the object start tag. + + """ + return self.tag('object', attrs, indent) + + + # ------------------------------------------------------------------ + # Images + # ------------------------------------------------------------------ + + def tag_img(self, attrs, indent): + """Returns image definition. + + + + + To avoid accessibility problems for people who aren't able to + see the image, you should provide a text description using the + alt and longdesc attributes. In addition, avoid the use of + server-side image maps. Note that in this DTD there is no + name attribute. That is only available in the transitional + and frameset DTD. + + usemap points to a map element which may be in this document + or an external document, although the latter is not widely + supported. + + """ + return self.tag('img', attrs, indent) + + + # ------------------------------------------------------------------ + # Client-side image maps + # ------------------------------------------------------------------ + + def tag_map(self, attrs, indent, content, has_child=1): + """Returns map definition. + + + + + This can be placed in the same document or grouped in a + separate document although this isn't yet widely supported. + + """ + return self.tag('map', attrs, indent, indent, content, has_child) + + + def tag_area(self, attrs, indent): + """Returns area definition. + + + + + This can be placed in the same document or grouped in a + separate document although this isn't yet widely supported. + + """ + return self.tag('area', attrs, indent) + + + # ------------------------------------------------------------------ + # Forms + # ------------------------------------------------------------------ + + def tag_form(self, attrs, indent, content, has_child=1): + """Returns form definition. + + + + + """ + return self.tag('form', attrs, indent, content, has_child) + + + def tag_label(self, attrs, indent, content, has_child=0): + """Returns label definition. + + + + + Each label must not contain more than ONE field Label elements + shouldn't be nested. + + """ + return self.tag('label', attrs, indent, content, has_child) + + + def tag_input(self, attrs, indent): + """Returns input definition for form control. + + + + + + + The name attribute is required for all but submit & reset. + + """ + return self.tag('input', attrs, indent) + + + def tag_select(self, attrs, indent, content, has_child=0): + """Returns select definition. + + + + + """ + return self.tag('select', attrs, indent, content, has_child) + + + def tag_optgroup(self, attrs, indent, content, has_child=1): + """Returns option group definition. + + + + + """ + return self.tag('optgroup', attrs, indent, content, has_child) + + + def tag_option(self, attrs, indent, content, has_child=0): + """Returns option definition. + + + + + """ + return self.tag('option', attrs, indent, content, has_child) + + + def tag_textarea(self, attrs, indent, content): + """Returns textarea definition. + + + + + """ + return self.textarea('textarea', attrs, indent, content) + + + def tag_fieldset(self, attrs, indent, content, has_child=1): + """Returns fieldset definition. + + + + + The fieldset element is used to group form fields. Only one + legend element should occur in the content and if present + should only be preceded by whitespace. + + """ + return self.tag('filedset', attrs, indent, content, has_child) + + + def tag_legend(self, attrs, indent, content): + """Retruns legend definition. + + + + + """ + return self.tag('legend', attrs, indent, content) + + + def tag_button(self, attrs, indent, content): + """Returns button definition. + + + + + content is %Flow; excluding a, form and form controls. + + """ + return self.tag('button', attrs, indent, content) + + + def tag_table(self, attrs, indent, content, has_child=1): + """Returns table definition. + + + + + + + + + + + Derived from IETF HTML table standard, see [RFC1942] + + The border attribute sets the thickness of the frame around + the table. The default units are screen pixels. The frame + attribute specifies which parts of the frame around the table + should be rendered. The values are not the same as CALS to + avoid a name clash with the valign attribute. The rules + attribute defines which rules to draw between cells: If rules + is absent then assume: "none" if border is absent or + border="0" otherwise "all". Horizontal alignment attributes + for cell contents: + char alignment char, e.g. char=':' + charoff offset for alignment char + + """ + return self.tag('table', attrs, indent, content, has_child) + + + def tag_caption(self, attrs, indent, content): + """Returns caption definition. + + + + + """ + return self.tag('caption', attrs, indent, content) + + + def tag_thead(self, attrs, indent, content, has_child=1): + """Returns thead definition. + + + + + Use thead to duplicate headers when breaking table across page + boundaries, or for static headers when tbody sections are + rendered in scrolling panel. + + """ + return self.tag('thead', attrs, indent, content, has_child) + + + def tag_tbody(self, attrs, indent, content, has_child=1): + """Returns tbody definition. + + + + + Use tbody to duplicate footers when breaking table across page + boundaries, or for static footers when tbody sections are + rendered in scrolling panel. + + """ + return self.tag('tbody', attrs, indent, content, has_child) + + + def tag_tbody(self, attrs, indent, content, has_child=1): + """Returns tbody definition. + + + + + Use multiple tbody sections when rules are needed between + groups of table rows. + + """ + return self.tag('tbody', attrs, indent, content, has_child) + + + def tag_colgroup(self, attrs, indent, content, has_child=1): + """Returns colgroup definition. + + + + + colgroup groups a set of col elements. It allows you to group + several semantically related columns together. + + """ + return self.tag('colgroup', attrs, indent, content, has_child) + + + def tag_col(self, attrs, indent): + """Returns col definition. + + + + + col elements define the alignment properties for cells in one + or more columns. The width attribute specifies the width of + the columns, e.g. + + width=64 width in screen pixels + width=0.5* relative width of 0.5 + + The span attribute causes the attributes of one col element to + apply to more than one column. + + """ + return self.tag('col', attrs, indent) + + + def tag_tr(self, attrs, indent, content, has_child=1): + """Returns table row definition. + + + + + """ + return self.tag('tr', attrs, indent, content, has_child) + + + def tag_th(self, attrs, indent, content, has_child): + """Returns table header definition. + + + + + + + Scope is simpler than headers attribute for common tables. th + is for headers, td for data and for cells acting as both. + + """ + return self.tab('th', attrs, indent, content, has_child) + + + def tag_td(self, attrs, indent, content, has_child=1): + """Returns table data definition. + + + + + """ + return self.tag('td', attrs, indent, content, has_child) diff --git a/Scripts/Python/Webenv/cgi-bin/webenv.cgi b/Scripts/Python/Webenv/cgi-bin/webenv.cgi new file mode 100755 index 0000000..d137638 --- /dev/null +++ b/Scripts/Python/Webenv/cgi-bin/webenv.cgi @@ -0,0 +1,58 @@ +#!/usr/bin/python +# +# centos-web.cgi -- This script is an effort to organize The CentOS +# Project information in XHTML format for its publication on the +# Internet. The script is organized in a package named `Apps' which, +# in turn, is subdivided in other packages (e.g., `Home', `Sponsors', +# etc.) to cover each web application the organization demands. +# +# Notice that some of the web applications demanded (e.g., Wiki, +# Lists, Forums, Bugs, etc.) are not included in this script, but +# linked to their own locations. Moreover, in order to provide +# accessability among all different web applications, they need to be +# redesigned to share one unique visual style and one unique top-level +# navigation bar so the current web application can be remarked. +# +# Copyright (C) 2011 Alain Reguera Delgado +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# ------------------------------------------------------------------ +# $Id$ +# ------------------------------------------------------------------ + +import cgi +import cgitb; cgitb.enable() + +def main(): + + qs = cgi.parse() + + if 'app' in qs: + app = qs['app'][0].lower() + else: + app = 'home' + + if app == 'home': + from Apps.Home import page + elif app == 'sponsors': + from Apps.Sponsors import page + else: + from Apps.Unknown import page + + print 'Content-type: text/html' + "\n" + print page.main() + +if __name__ == '__main__': main() diff --git a/Scripts/Python/Webenv/public/Images/a-attach.png b/Scripts/Python/Webenv/public/Images/a-attach.png new file mode 100644 index 0000000..d6a41e7 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/a-attach.png differ diff --git a/Scripts/Python/Webenv/public/Images/a-mail.png b/Scripts/Python/Webenv/public/Images/a-mail.png new file mode 100644 index 0000000..355a998 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/a-mail.png differ diff --git a/Scripts/Python/Webenv/public/Images/a-www.png b/Scripts/Python/Webenv/public/Images/a-www.png new file mode 100644 index 0000000..e5a0483 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/a-www.png differ diff --git a/Scripts/Python/Webenv/public/Images/ads-sample-468x60.png b/Scripts/Python/Webenv/public/Images/ads-sample-468x60.png new file mode 100644 index 0000000..f634d10 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/ads-sample-468x60.png differ diff --git a/Scripts/Python/Webenv/public/Images/ads-sample-728x90.png b/Scripts/Python/Webenv/public/Images/ads-sample-728x90.png new file mode 100644 index 0000000..5401e60 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/ads-sample-728x90.png differ diff --git a/Scripts/Python/Webenv/public/Images/caution.png b/Scripts/Python/Webenv/public/Images/caution.png new file mode 100644 index 0000000..efcec04 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/caution.png differ diff --git a/Scripts/Python/Webenv/public/Images/centos-logo.png b/Scripts/Python/Webenv/public/Images/centos-logo.png new file mode 100644 index 0000000..506c65d Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/centos-logo.png differ diff --git a/Scripts/Python/Webenv/public/Images/convenction.png b/Scripts/Python/Webenv/public/Images/convenction.png new file mode 100644 index 0000000..e516c0e Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/convenction.png differ diff --git a/Scripts/Python/Webenv/public/Images/error.png b/Scripts/Python/Webenv/public/Images/error.png new file mode 100644 index 0000000..0f52b4d Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/error.png differ diff --git a/Scripts/Python/Webenv/public/Images/h1-bg.png b/Scripts/Python/Webenv/public/Images/h1-bg.png new file mode 100644 index 0000000..e609c59 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/h1-bg.png differ diff --git a/Scripts/Python/Webenv/public/Images/h2-bg.png b/Scripts/Python/Webenv/public/Images/h2-bg.png new file mode 100644 index 0000000..826fbec Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/h2-bg.png differ diff --git a/Scripts/Python/Webenv/public/Images/html-bg.png b/Scripts/Python/Webenv/public/Images/html-bg.png new file mode 100644 index 0000000..0c6dca6 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/html-bg.png differ diff --git a/Scripts/Python/Webenv/public/Images/important.png b/Scripts/Python/Webenv/public/Images/important.png new file mode 100644 index 0000000..509ec86 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/important.png differ diff --git a/Scripts/Python/Webenv/public/Images/msg-bg-blue.png b/Scripts/Python/Webenv/public/Images/msg-bg-blue.png new file mode 100644 index 0000000..47bc405 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/msg-bg-blue.png differ diff --git a/Scripts/Python/Webenv/public/Images/msg-bg-gray.png b/Scripts/Python/Webenv/public/Images/msg-bg-gray.png new file mode 100644 index 0000000..a8a9246 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/msg-bg-gray.png differ diff --git a/Scripts/Python/Webenv/public/Images/msg-bg-green.png b/Scripts/Python/Webenv/public/Images/msg-bg-green.png new file mode 100644 index 0000000..f1bfe2b Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/msg-bg-green.png differ diff --git a/Scripts/Python/Webenv/public/Images/msg-bg-orange.png b/Scripts/Python/Webenv/public/Images/msg-bg-orange.png new file mode 100644 index 0000000..0866bb8 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/msg-bg-orange.png differ diff --git a/Scripts/Python/Webenv/public/Images/msg-bg-red.png b/Scripts/Python/Webenv/public/Images/msg-bg-red.png new file mode 100644 index 0000000..2dc3e70 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/msg-bg-red.png differ diff --git a/Scripts/Python/Webenv/public/Images/msg-bg-violet.png b/Scripts/Python/Webenv/public/Images/msg-bg-violet.png new file mode 100644 index 0000000..8b1075d Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/msg-bg-violet.png differ diff --git a/Scripts/Python/Webenv/public/Images/note.png b/Scripts/Python/Webenv/public/Images/note.png new file mode 100644 index 0000000..b58a224 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/note.png differ diff --git a/Scripts/Python/Webenv/public/Images/redirect.png b/Scripts/Python/Webenv/public/Images/redirect.png new file mode 100644 index 0000000..16a8c41 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/redirect.png differ diff --git a/Scripts/Python/Webenv/public/Images/success.png b/Scripts/Python/Webenv/public/Images/success.png new file mode 100644 index 0000000..74cc874 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/success.png differ diff --git a/Scripts/Python/Webenv/public/Images/tabs-bg-1.png b/Scripts/Python/Webenv/public/Images/tabs-bg-1.png new file mode 100644 index 0000000..22cff37 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/tabs-bg-1.png differ diff --git a/Scripts/Python/Webenv/public/Images/tabs-bg-2.png b/Scripts/Python/Webenv/public/Images/tabs-bg-2.png new file mode 100644 index 0000000..5d8e178 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/tabs-bg-2.png differ diff --git a/Scripts/Python/Webenv/public/Images/tip.png b/Scripts/Python/Webenv/public/Images/tip.png new file mode 100644 index 0000000..cfcf6db Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/tip.png differ diff --git a/Scripts/Python/Webenv/public/Images/top.png b/Scripts/Python/Webenv/public/Images/top.png new file mode 100644 index 0000000..1557422 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/top.png differ diff --git a/Scripts/Python/Webenv/public/Images/ul.png b/Scripts/Python/Webenv/public/Images/ul.png new file mode 100644 index 0000000..efcf485 Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/ul.png differ diff --git a/Scripts/Python/Webenv/public/Images/warning.png b/Scripts/Python/Webenv/public/Images/warning.png new file mode 100644 index 0000000..e36c02a Binary files /dev/null and b/Scripts/Python/Webenv/public/Images/warning.png differ diff --git a/Scripts/Python/Webenv/public/Stylesheet/admonition.css b/Scripts/Python/Webenv/public/Stylesheet/admonition.css new file mode 100755 index 0000000..a08eff5 --- /dev/null +++ b/Scripts/Python/Webenv/public/Stylesheet/admonition.css @@ -0,0 +1,122 @@ +/* + * Webenv -> Quotation + * + * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG + * + * This CSS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This CSS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * ---------------------------------------------------------------------- + * $Id$ + * ---------------------------------------------------------------------- + */ + +div#page-body div.admonition { + border: 1px solid; + border-left: 5px solid; + padding: 10px 20px 10px 10px; + margin: 1.5em 0 1.5em 0; + } + +div#page-body div.admonition pre { + border: none; + background-color: #333; + color: #FFFFFF; + } + +div#page-body div.admonition img { + float: left; + } + + +div#page-body div.admonition h3 { + margin-top: 10px; + line-height: 1.5em; + } + +div#page-body div.admonition h3, +div#page-body div.admonition p, +div#page-body div.admonition pre, +div#page-body div.admonition table { + margin-left: 60px; + } + +div#page-body div.admonition ul, +div#page-body div.admonition ol, +div#page-body div.admonition dl { + margin-left: 110px; + } + +div#page-body div.admonition ul dl, +div#page-body div.admonition ul ol, +div#page-body div.admonition ul ul, +div#page-body div.admonition ol dl, +div#page-body div.admonition ol ol, +div#page-body div.admonition ol ul, +div#page-body div.admonition dl dl, +div#page-body div.admonition dl ol, +div#page-body div.admonition dl ul { + margin-left: 2.5em; + } + +div#page-body div.admonition.unknown pre, +div#page-body div.admonition.unknown h3, +div#page-body div.admonition.unknown p, +div#page-body div.admonition.unknown table { + margin-left: 20px; + } + +div#page-body div.admonition.success, +div#page-body div.admonition.redirected, +div#page-body div.admonition.error { + border: none; + border-top: 5px solid; + border-bottom: 5px solid; + border-color: #CFCFCF; + } + +div#page-body div.admonition.unknown, +div#page-body div.admonition.redirected, +div#page-body div.admonition.note { + background-image: url("https://projects.centos.org/public/Images/msg-bg-blue.png"); + border-color: #D2E0F6; + background-color: #ECF4FF; + } + +div#page-body div.admonition.tip, +div#page-body div.admonition.important, +div#page-body div.admonition.caution, +div#page-body div.admonition.warning { + border-color: #F6E7D2; + background-color: #FFF8EC; + background-image: url("https://projects.centos.org/public/Images/msg-bg-orange.png"); + } + +div#page-body div.admonition.violet { + border-color: #F6D2F6; + background-color: #FFECFF; + background-image: url("https://projects.centos.org/public/Images/msg-bg-violet.png"); + } + +div#page-body div.admonition.error { + border-color: #E0B7B7; + background-color: #FFECEC; + background-image: url("https://projects.centos.org/public/Images/msg-bg-red.png"); + } + +div#page-body div.admonition.success { + border-color: #D6F6D2; + background-color: #EEFFEC; + background-image: url("https://projects.centos.org/public/Images/msg-bg-green.png"); + } diff --git a/Scripts/Python/Webenv/public/Stylesheet/base.css b/Scripts/Python/Webenv/public/Stylesheet/base.css new file mode 100755 index 0000000..d062cdc --- /dev/null +++ b/Scripts/Python/Webenv/public/Stylesheet/base.css @@ -0,0 +1,376 @@ +/* + * Webenv -> Main Blocks + * + * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG + * + * This CSS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This CSS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * ---------------------------------------------------------------------- + * $Id$ + * ---------------------------------------------------------------------- + */ + +div#page-header, +div#wrap, +div#page-body, +div#page-footer { + min-width: 728px; + } + +/* Header +--------------------------------------------------------------------*/ +div#page-header { + background: #204C8D url("https://projects.centos.org/public/Images/h1-bg.png") 0 0 repeat; + min-height: 46px; + } + +/* Content +--------------------------------------------------------------------*/ + +div#wrap { + padding: 0 10px 0 10px; + background-color: #FFF; + } + +div#page-body { + clear: both; + background-color: #F8F8F8; + } + +div#page-body div#content-list { + padding: 10px; + padding-left: 0; + padding-top: 8px; + background-color: #FFF; + } + +/* Paragraphs +--------------------------------------------------------------------*/ + +/* Footer +--------------------------------------------------------------------*/ + +div#page-footer { + background: #204C8D url("https://projects.centos.org/public/Images/h1-bg.png") 0 0 repeat; + } + +div#page-footer div.credits { + padding: 8px; + } + +div#page-footer div.credits .copyright, +div#page-footer div.credits .license { + font-size: x-small; + color: #FFF; + margin: 3px; + } + +div#page-footer div.credits a { + color: #FFF; + font-style: italic; + } + +div#page-footer div.top { + float:right; + } + +/* Logo +--------------------------------------------------------------------*/ + +div#page-header div#logo img { + border: none; + float: left; + margin-left: 10px; + } + +/* Google advertisement (468x60px) +--------------------------------------------------------------------*/ + +div#page-header div.google-ad { + float: right; + margin: 5px; + } + +div#page-header div.google-ad img { + border: none; + } + +/* Last releases and related RSS link. +--------------------------------------------------------------------*/ + +div#page-header div#last-releases { + clear: both; + min-height: 35px; + border-top: 3px solid #FFF; + background: #3465A4; + } + +div#page-header div#last-releases a { + color: #fff; + } + +div#page-header div#last-releases div.left { + display: block; + float: left; + width: 450px; + margin-top: 10px; + margin-left: 10px; + font-size: small; + } + +div#page-header div#last-releases div.right { + float: right; + margin-top: 9px; + margin-right: 5px; + } + +div#page-header div#last-releases div.right span.rss span { + text-align: center; + font-weight: bold; + background: #729fcf; + padding: 4px 10px; + } + +div#page-header div#last-releases div span.title { + font-weight: bold; + color: #FFF; + } + +div#page-header div#last-releases div span.release { + border-right: 1px dotted #FFF; + padding-left: 10px; + padding-right: 10px; + font-weight: bold; + } + +div#page-header div#last-releases div span.last { + border-right: 0px; + } + +/* Application links +--------------------------------------------------------------------*/ + +div#page-header div#pagelinks { + border-top: 3px solid #FFF; + } + +/* User related links (e.g., last visit, session info and page trails) +--------------------------------------------------------------------*/ + +div#page-header div.userlinks { + padding: 10px; + text-align: right; + font-size: x-small; + clear: both; + } + +div#page-header div.userlinks a { + color: #fff; + } + +div#page-header div.userlinks div.logs { + width: 50%; + float: left; + text-align: left; + } + +div#page-header div.userlinks div.logs span { + border: none; + } + +div#page-header div.userlinks div.logs span.title { + color: #FFF; + } + +div#page-header div.userlinks div.logs span.datetime { + font-style: italic; + color: #FFF; + } + +div#page-header div.userlinks div.session { + width: 50%; + float: right; + } + +div#page-header div.userlinks div.session span { + border-right: 1px dotted #FFF; + } + +div#page-header div.userlinks div.session span a { + margin-right: 10px; + margin-left: 10px; + } + + +div#page-header div.userlinks div.session span.last { + border-right: none; + } + +div#page-header div.userlinks div.session span.last a { + margin-right: 0; + } + +div#page-header div.userlinks div.session span.last:after { + content: none; + } + +div#page-header div.userlinks div.trail { + text-align: right; + clear: both; + padding-top: 5px; + } + +div#page-header div.userlinks div.trail span { + display: inline; + } + +div#page-header div.userlinks div.trail span.last { + border-right: none; + padding-right: 0; + } + +div#page-header div.userlinks div.trail span:after { + content: "»"; + color: #FFF; + margin-left: 5px; + margin-right: 3px; + } + +div#page-header div.userlinks div.trail span.last:after { + content: none; + } + +/* Page lines. +--------------------------------------------------------------------*/ + +.page-line { + clear: both; + margin: 0; + padding: 0; + background-color: transparent; + } + +.page-line.white { + height: 3px; + background-color: #FFF; + } + +/* Page body +--------------------------------------------------------------------*/ + +div#page-body .info { + margin-top: 5px; + } + +div#page-body .info span { + font-size: small; + border-right: 1px dotted #AAA; + padding-right: 10px; + padding-left: 7px; + } + +div#page-body .info span.author { + padding-left: 0; + } + +div#page-body .info span.comment { + border-right: 0; + } + +/* Content Listing - One column +--------------------------------------------------------------------*/ + +div#page-body div#content-list { + margin-right: 200px; + border-right: 3px #EEE solid; + } + +div#page-body div#content-actions { + float:right; + width: 180px; + border-left: 3px #EEE solid; + padding: 10px; + font-size: small; + } + +div#page-body div#content-actions form input[type="text"] { + border: 1px solid #AAA; + } + +div#page-body div#content-list div.search { + } + +div#page-body div#content-list div.row { + padding: 10px 20px; + } + +div#page-body div#content-list div.dark { + background: #F8F8F8; + } + +div#page-body div#content-list div.light { + background: #FFF; + } + +div#page-body div#content-list h3.title { + margin-top: 0; + } + +div#page-body div#content-list .abstract { + margin-bottom: 1em; + } + +div#page-body div#content-list .pagination { + border-top: 1px solid #AAA; + font-size: small; + padding: 10px; + border-top: 1px #AAA solid; + margin-bottom: 0; + padding-bottom: 0; + } + +div#page-body div#content-list .pagination span.previous { + float: left; + } + +div#page-body div#content-list .pagination span.previous a:before { + content: "«"; + padding-right: 3px; + } + +div#page-body div#content-list .pagination span.next a:after { + content: "»"; + padding-left: 3px; + } + +div#page-body div#content-list .pagination span.next { + float: right; + } + +/* Content Details - One column +--------------------------------------------------------------------*/ + +div#page-body div#content-details { + padding: 30px 10% 30px 10%; + background: #FFF; + } + +/* Content Unkown - Not page found. +--------------------------------------------------------------------*/ + +div#page-body div#content-unknown { + padding: 0 15% 0 15%; + background: #FFF; + } diff --git a/Scripts/Python/Webenv/public/Stylesheet/forms.css b/Scripts/Python/Webenv/public/Stylesheet/forms.css new file mode 100755 index 0000000..9a39fc2 --- /dev/null +++ b/Scripts/Python/Webenv/public/Stylesheet/forms.css @@ -0,0 +1,137 @@ +/* + * Webenv -> Forms + * + * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG + * + * This CSS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This CSS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * ---------------------------------------------------------------------- + * $Id$ + * ---------------------------------------------------------------------- + */ + +div#page-body div.row1 { + clear: both; + background: #F8F8F8; + padding: 10px; + } + +div#page-body div.row2 { + clear: both; + background: #FFFFFF; + padding: 10px; + } + +div#page-body div.row3 { + clear: both; + border-top: 1px solid #CCC; + padding: 10px; + margin-top: 10px; + } + +div#page-body fieldset div.row1 span.descrip, +div#page-body fieldset div.row2 span.descrip { + float: left; + } + +div#page-body fieldset div.field { + display: block; + margin-left: 30%; + } + +div#page-body fieldset div.field div.column { + float: left; + margin-right: 1em; + padding-right: 1em; + border-right: 1px dotted #AAA; + } + +div#page-body fieldset div.row3 div.descrip { + display: block; + font-size: small; + color: #AAA; + font-style: italic; + width: 70% + } + +div#page-body fieldset span.submit { + float: right; + } + +/* */ + +div#page-body form div { + padding-bottom: 10px; + } + +div#page-body form div span { + display: inline; + margin: 0; + padding-right: 10px; + } + +div#page-body div span.results { + padding-left: 10px; + border-left: 1px dotted #AAA; + } + +/* */ + + +/* */ + +div#page-body div.records-list { + display: block; + } + +div#page-body div.records-list ul { + margin: 0; + padding: 0; + list-style: none; + } + +div#page-body div.records-list ul li { + padding: 0.5em; + } + +div#page-body div.records-list ul li.row1 { + background: #F8F8F8; + } + +div#page-body div.records-list ul li span.col0 { + display: block; + float:left; + text-align: center; + padding-right: 0.5em; + margin-right: 0.5em; + border-right: 1px solid #FFF; + } + +div#page-body div.records-list ul li span.col1 { + width: 250px; + display: block; + float:left; + } + +div#page-body div.records-list ul li span.col2 { + border-left: 1px solid #FFF; + padding-left: 0.5em; + } + +div#page-body div.records-list ul li.title { + font-weight: bold; + background: #eee; + border-bottom: 1px #AAA solid; + } diff --git a/Scripts/Python/Webenv/public/Stylesheet/links.css b/Scripts/Python/Webenv/public/Stylesheet/links.css new file mode 100755 index 0000000..d0ae637 --- /dev/null +++ b/Scripts/Python/Webenv/public/Stylesheet/links.css @@ -0,0 +1,62 @@ +/* + * Webenv -> Links + * + * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG + * + * This CSS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This CSS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * ---------------------------------------------------------------------- + * $Id$ + * ---------------------------------------------------------------------- + */ + +/* Broken or nonexistent links. +--------------------------------------------------------------------*/ + +div#page-body a.nonexistent, +div#page-body a.nonexistent:hover { color: gray; } + +/* Special decoration for some links' classes +--------------------------------------------------------------------*/ + +div#page-body a.www:before { + white-space:nowrap; + content: url(/home/centos/artwork/trunk/Identity/Images/Webenv/a-www.png); + margin: 0 0.2em; + } + +div#page-body a.http:before { + white-space:nowrap; + content: url(/home/centos/artwork/trunk/Identity/Images/Webenv/a-www.png); + margin: 0 0.2em; + } + +div#page-body a.https:before { + white-space:nowrap; + content: url(/home/centos/artwork/trunk/Identity/Images/Webenv/a-www.png); + margin: 0 0.2em; + } + +div#page-body a.mailto:before { + white-space:nowrap; + content: url(/home/centos/artwork/trunk/Identity/Images/Webenv/a-mail.png); + margin: 0 0.2em; + } + +div#page-body a.attachment:before { + white-space:nowrap; + content: url(/home/centos/artwork/trunk/Identity/Images/Webenv/a-attach.png); + margin: 0 0.2em; + } diff --git a/Scripts/Python/Webenv/public/Stylesheet/lists.css b/Scripts/Python/Webenv/public/Stylesheet/lists.css new file mode 100755 index 0000000..cdea058 --- /dev/null +++ b/Scripts/Python/Webenv/public/Stylesheet/lists.css @@ -0,0 +1,111 @@ +/* + * Webenv -> Lists + * + * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG + * + * This CSS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This CSS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * ---------------------------------------------------------------------- + * $Id$ + * ---------------------------------------------------------------------- + */ + +div#page-body ul { + /* + list-style: url("https://projects.centos.org/public/Images/ul.png") disc; + */ + } + +div#page-body ul, +div#page-body ol { + margin-left: 2.5em; + } + +div#page-body ul ol, +div#page-body ol ul, +div#page-body dl ul, +div#page-body dl ol { + margin-left: 1.5em; + } + +div#page-body div#links ul { + padding: 0.5em 0.5em 1em 1em; + margin: 0; + list-style: none; + border-top: 1px #EEE solid; + } + +div#page-body div#links ul.first { + border-top: none; + } + +div#page-body div#links ul li { + padding: 2px; + } + +/* Table of content (toc) +--------------------------------------------------------------------*/ + +div#page-body div.toc { + font-size: small; + text-align:left; + margin-bottom: 2em; + } + +div#page-body div.toc p { + font-weight: bold; + margin: 0.5em 0 0.5em 0; + } + +div#page-body div#content div.toc dl { + margin: 0; + } + +div#page-body div#content div.toc dl dl { + margin-left: 2.5em; + } + +/* Content actions links (e.g., categories and archives). +--------------------------------------------------------------------*/ + +div#page-body div#content-actions dl { + margin-top: 0; + margin-left: 0; + } + +div#page-body div#content-actions dl dt { + font-weight: bold; + border-bottom: 1px solid #EEE; + margin-bottom: 1em; + } + +div#page-body div#content-actions dl dd { + margin-left: 1.5em; + } + +div#page-body div#content-actions dl dl { + margin-left: 1.5em; + margin-top: 0px; + border-top: none; + padding-top: 0; + } + +div#page-body div#content-actions dl dl.year { + margin-bottom: 1em; + } + +div#page-body div#content-actions dl dl.year dd { + margin-left: 0; + } diff --git a/Scripts/Python/Webenv/public/Stylesheet/reset.css b/Scripts/Python/Webenv/public/Stylesheet/reset.css new file mode 100755 index 0000000..202310d --- /dev/null +++ b/Scripts/Python/Webenv/public/Stylesheet/reset.css @@ -0,0 +1,352 @@ +/* + * Webenv (reset) -- This file resets the browser's default visual + * style and sets The CentOS Web Environment visual style as default + * visual style. This file sets default values to tags like `html', + * `body', as well as those controlling links, tables, paragrphs, + * headings, lists, forms and quotation. + * + * The CentOS Web Environment (Webenv) is specially conceived to + * achieve one unique visual style and easy navegation through all + * different web applications The CentOS Project uses to show its + * existence in the World Wide Web medium. + * + * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG + * + * This CSS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This CSS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * ------------------------------------------------------------------- + * $Id$ + * ------------------------------------------------------------------- + */ + + +/* Reset browsers default margins and paddings +-----------------------------------------------*/ + +* { + margin: 0; + padding: 0; + } + +/* Define html +-----------------------------------------------*/ + +html { + background-color: #FFF; + background-image: url("https://projects.centos.org/public/Images/html-bg.png"); + } + +/* Define body +-----------------------------------------------*/ + +body { + font-family: "DejaVu Sans", "Liberation Sans", sans-serif; + font-size: 0.85em; + /* margin: 0; /* <- full screen */ + /* margin: 0 1% 0 1%; /* <- with 1% of left and right margin */ + /* margin: 0 2% 0 2%; /* <- with 2% of left and right margin */ + margin: 0 3% 0 3%; /* <- with 3% of left and right margin */ + /* margin: 0 10% 0 10%; /* <- with 10% of left and right margin */ + color: #333; + } + +/* Links +-----------------------------------------------*/ + +a:link { text-decoration: none; color: #0044B3; } +a:hover { text-decoration: underline; color: green; } +a:active { text-decoration: underline; color: green; } +a:visited { text-decoration: none; color: #0044B3; } +a:visited:hover { text-decoration: underline; color: green; } + +.title, +.title a:link, +.title a:active, +.title a:hover, +.title a:visited, +.title a:visited:hover { + /* color: #072B61; */ + color: #000000; + } + +/* Headings +-----------------------------------------------*/ + +h1 { + font-size: 2em; + line-height: 1.3em; + } + +h2 { + font-size: 1.5em; + line-height: 1.5em; + margin-top: 1.5em; + } + +h3 { + font-size: 1.4em; + line-height: 1.4em; + margin-top: 1.4em; + } + +h4 { + font-size: 1.2em; + line-height: 1.2em; + margin-top: 1.2em; + } + +h5 { + font-size: 1.1em; + line-height: 1.1em; + margin-top: 1.1em; + } + +h6 { + font-size: 1em; + line-height: 1em; + margin-top: 1em; + } + +/* Paragraphs +-----------------------------------------------*/ + +p { + margin: 1em 0 1.5em 0; + line-height: 1.5em; + text-align: justify; + } + +/* Images +-----------------------------------------------*/ + +img { + border: none; + } + +/* Quotations +-----------------------------------------------*/ + +blockquote { + background: #fafafa; + border-color: #eeeeee; + border-width: 1px; + border-style: solid; + border-left-width: 4px; + margin-left: 1.5em; + padding: 0.5em; + margin-top: 1em; + margin-bottom: 1.3em; + } + +q:before { + content: " “"; + } + +q:after { + content: "” "; + } + +q q:before { + content: " ‘"; + } + +q q:after { + content: "’ "; + } + +address { + margin-left: 1.5em; + } + +/* Preformatted Texts +-----------------------------------------------*/ + +pre { + font-family: "DejaVu Sans Mono", "Liberation Mono", monospace; + padding: 0.5em 1em 0.5em 1em; + margin: 1em 0 1em 0; + white-space: pre; + border-width: 1px; + border-style: solid; + border-color: #E5E5E5; + border-left-width: 4px; + background: #FFFAE9; + overflow: auto; + } + +/* Phrase Elements +-----------------------------------------------*/ + +tt, +samp, +kbd, +code { + font-family: "DejaVu Sans Mono", "Liberation Mono", monospace; + } + +/* Page Lines +-----------------------------------------------*/ + +hr { + clear: both; + height: 1px ! important; + border: none; + background-color: #DADADA; + } + +/* Lists +-----------------------------------------------*/ + +ul, +ol, +dl { + margin: 1.5em 0 1.5em 2.5em; + } + +ul { + list-style: disc; + } + +ol { + list-style-image: none !important; + } + +ul li, +ol li { + line-height: 1.5em; + } + +ul ul, +ul ol, +ol ul, +ol ol { + margin-top: 0.3em; + margin-bottom: 0.3em; + } + +ul li p, +ol li p { + margin-bottom: 0.3em; + } + +dl dd { + margin-left: 2.5em; + } + +dl ol, +dl ul { + margin-left: 3.5em; + } + +/* Tables +-----------------------------------------------*/ + +table { + border-collapse: collapse; + } + +table caption { + font-style: italic; + text-align: center; + } + +table tr th { + font-weight: bold; + } + +table tr td, +table tr th { + border: 1pt; + border-style: solid; + border-color: #CCC; + padding-top: 0.25em; + padding-right: 0.5em; + padding-bottom: 0.25em; + padding-left: 0.5em; + vertical-align: top; + } + +table tr td p, +table tr td pre { + margin: 0; + padding: 0; + } + +/* Forms +-----------------------------------------------*/ + +form { + display: inline; + } + +input[type="submit"], +input[type="button"] { + padding: 1px; + display: inline; + text-decoration: none; + } + +input[type="text"], +input[type="password"], +textarea { + display: inline; + padding: 2px; + } + +select { + display: inline; + padding: 1px; + } + +form p { + display: inline; + margin-left: 5px; + margin-right: 5px; + } + +/* Select +---------------------------------------- */ + +select option { + padding-left: 3px; + padding-right: 3px; + } + +select optgroup { + font-style: normal; + font-weight: bold; + padding-left: 3px; + } + +select optgroup option { + margin-left: 1em; + } + +input[type="radio"], +input[type="checkbox"] { + vertical-align: middle; + } + +fieldset { + margin: 1em 0 1em 0; + padding: 1em; + padding-bottom: 5px; + border: 1px solid #AAA; + } + +fieldset legend { + font-weight: bold; + color: #AAA; + } diff --git a/Scripts/Python/Webenv/public/Stylesheet/tabs.css b/Scripts/Python/Webenv/public/Stylesheet/tabs.css new file mode 100755 index 0000000..158b539 --- /dev/null +++ b/Scripts/Python/Webenv/public/Stylesheet/tabs.css @@ -0,0 +1,83 @@ +/* + * Webenv -> Tabs (Style 2: Two Rounded Borders) + * + * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG + * + * This CSS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This CSS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * ---------------------------------------------------------------------- + * $Id$ + * ---------------------------------------------------------------------- + */ + +div#page-header div.tabs { + margin-left: 10px; + margin-right: 10px; + } + +div#page-header div.tabs a { + color: #FFF; + float: left; + font-weight: bold; + margin-right: 3px; + padding: 0px 8px 0 0px; + text-decoration: none; + } + +div#page-header div.tabs span.current a, +div#page-header div.tabs span.current a:hover, +div#page-header div.tabs span.current a span, +div#page-header div.tabs span.current a:hover span { + color: #204A87; + text-decoration: none; + } + +div#page-header div.tabs a span { + float: left; + padding: 5px 0px 3px 8px; + } + +/* */ + +div#page-header div.tabs a { + background: none; + } + +div#page-header div.tabs a span { + background: none; + } + +div#page-header div.tabs span.current a, +div#page-header div.tabs span.current a:hover { + background: url("https://projects.centos.org/public/Images/tabs-bg-1.png") 100% -50px no-repeat; + } + +div#page-header div.tabs span.current a span, +div#page-header div.tabs span.current a:hover span { + background: url("https://projects.centos.org/public/Images/tabs-bg-2.png") 0 -50px no-repeat; + } + +div#page-header div.tabs span:hover a { + background: url("https://projects.centos.org/public/Images/tabs-bg-1.png") 100% 0 no-repeat; + } + +div#page-header div.tabs span:hover a span { + background: url("https://projects.centos.org/public/Images/tabs-bg-2.png") 0 0; + } + +/* Application level navigation bar. +--------------------------------------------------------------------*/ +div#page-header div#appslinks div.tabs span:hover a span { + } diff --git a/Scripts/Python/Webenv/public/stylesheet.css b/Scripts/Python/Webenv/public/stylesheet.css new file mode 100755 index 0000000..00015ea --- /dev/null +++ b/Scripts/Python/Webenv/public/stylesheet.css @@ -0,0 +1,39 @@ +/* + * Webenv + * + * Copyright (C) 2009, 2010, 2011 The CentOS Artwork SIG + * + * This CSS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This CSS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * ---------------------------------------------------------------------- + * $Id$ + * ---------------------------------------------------------------------- + */ + +/* Reset browser's default definitions. +--------------------------------------------------------------------*/ +@import url("https://projects.centos.org/public/Stylesheet/reset.css"); + +/* Customize default definitions. +--------------------------------------------------------------------*/ +@import url("https://projects.centos.org/public/Stylesheet/base.css"); +@import url("https://projects.centos.org/public/Stylesheet/links.css"); +@import url("https://projects.centos.org/public/Stylesheet/lists.css"); +@import url("https://projects.centos.org/public/Stylesheet/admonition.css"); +@import url("https://projects.centos.org/public/Stylesheet/forms.css"); + +/* Miscellaneous definitions. +--------------------------------------------------------------------*/ +@import url("https://projects.centos.org/public/Stylesheet/tabs.css"); diff --git a/Scripts/Python/Webenv/webenv.cgi b/Scripts/Python/Webenv/webenv.cgi deleted file mode 100755 index d137638..0000000 --- a/Scripts/Python/Webenv/webenv.cgi +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/python -# -# centos-web.cgi -- This script is an effort to organize The CentOS -# Project information in XHTML format for its publication on the -# Internet. The script is organized in a package named `Apps' which, -# in turn, is subdivided in other packages (e.g., `Home', `Sponsors', -# etc.) to cover each web application the organization demands. -# -# Notice that some of the web applications demanded (e.g., Wiki, -# Lists, Forums, Bugs, etc.) are not included in this script, but -# linked to their own locations. Moreover, in order to provide -# accessability among all different web applications, they need to be -# redesigned to share one unique visual style and one unique top-level -# navigation bar so the current web application can be remarked. -# -# Copyright (C) 2011 Alain Reguera Delgado -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# ------------------------------------------------------------------ -# $Id$ -# ------------------------------------------------------------------ - -import cgi -import cgitb; cgitb.enable() - -def main(): - - qs = cgi.parse() - - if 'app' in qs: - app = qs['app'][0].lower() - else: - app = 'home' - - if app == 'home': - from Apps.Home import page - elif app == 'sponsors': - from Apps.Sponsors import page - else: - from Apps.Unknown import page - - print 'Content-type: text/html' + "\n" - print page.main() - -if __name__ == '__main__': main()