From a27f593acea88d14199517dadf23b40dbc56ff2a Mon Sep 17 00:00:00 2001 From: Calin Burloiu Date: Fri, 26 Aug 2011 18:36:33 +0300 Subject: [PATCH] content added; look modifications; side box content --- .gitignore | 2 + .htaccess | 2 +- application/config/article.php | 10 ++++ application/config/routes.php | 3 +- application/controllers/article.php | 36 ++++++------ application/controllers/catalog.php | 22 ++++--- application/core/Article_Controller.php | 54 +++++++++++++++--- application/language/english/ui_lang.php | 3 +- application/views/article/english/about.php | 24 ++++---- application/views/article/english/contact.php | 10 ++++ .../views/article/english/install-plugins.php | 31 ++++++---- application/views/footer.php | 2 +- application/views/header.php | 3 + application/views/side_default.php | 25 ++++++++ css/default.css | 53 +++++++++++++---- img/SwarmPlayer-site.jpg | Bin 0 -> 11573 bytes img/email-icon.png | Bin 0 -> 3074 bytes 17 files changed, 206 insertions(+), 74 deletions(-) create mode 100644 application/config/article.php create mode 100644 application/views/article/english/contact.php create mode 100644 application/views/side_default.php create mode 100644 img/SwarmPlayer-site.jpg create mode 100644 img/email-icon.png diff --git a/.gitignore b/.gitignore index 51743a3..0923b67 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,8 @@ debug/* docs/tmp/* config.mk *~ +*.exe +*.dmg *.zip *.gz *.bz2 diff --git a/.htaccess b/.htaccess index 25b547b..619cfb5 100644 --- a/.htaccess +++ b/.htaccess @@ -20,5 +20,5 @@ RewriteEngine on -RewriteCond $1 !^(index\.php|img|css|js|data|robots\.txt) +RewriteCond $1 !^(index\.php|img|css|js|data|download|robots\.txt) RewriteRule ^(.*)$ index.php/$1 [L] diff --git a/application/config/article.php b/application/config/article.php new file mode 100644 index 0000000..8e6bc9f --- /dev/null +++ b/application/config/article.php @@ -0,0 +1,10 @@ +lang->load('article'); - $title = $this->lang->line("article_$method"); - if ($title == FALSE) - $title = $method; - $descr = $this->lang->line("article_${method}_description"); - if ($descr == FALSE) - $descr = ''; - $html_params = array( 'title' => - $title.' - '. $this->config->item('site_name'), + $html_params = array('title' => $this->title.' - ' + . $this->config->item('site_name'), 'css' => array( 'jquery-ui.css' - ), - //'js' => array(), - 'metas' => array('description'=>$descr) + ), + 'js' => array( + 'jquery.js', + 'jquery-ui.js' + ), + 'metas' => + array('description'=>$this->metaDescription) ); $this->load->library('html_head_params', $html_params); @@ -44,8 +45,7 @@ class Article extends Article_Controller { $this->load->view('header', array('selected_menu' => $method)); $main_params['content'] = $this->_load($method, $params); - // TODO side - $main_params['side'] = '

Side Box

TODO: Put side box content here

'; + $main_params['side'] = $this->load->view('side_default.php', NULL, TRUE); $this->load->view('main', $main_params); $this->load->view('footer'); diff --git a/application/controllers/catalog.php b/application/controllers/catalog.php index f3df836..087275d 100644 --- a/application/controllers/catalog.php +++ b/application/controllers/catalog.php @@ -45,8 +45,11 @@ class Catalog extends CI_Controller { 'css' => array( 'catalog.css', 'jquery-ui.css' - ), - //'js' => array(), + ), + 'js' => array( + 'jquery.js', + 'jquery-ui.js' + ), //'metas' => array('description'=>'','keywords'=>'') ); $this->load->library('html_head_params', $params); @@ -58,8 +61,7 @@ class Catalog extends CI_Controller { $this->load->view('header', array('selected_menu' => 'home')); $main_params['content'] = $this->load->view('catalog/index_view', $data, TRUE); - // TODO: side - $main_params['side'] = '

Side Box

TODO: Put side box content here

'; + $main_params['side'] = $this->load->view('side_default.php', NULL, TRUE); $this->load->view('main', $main_params); $this->load->view('footer'); @@ -72,7 +74,10 @@ class Catalog extends CI_Controller { 'css' => array( 'jquery-ui.css' ), - //'js' => array(), + 'js' => array( + 'jquery.js', + 'jquery-ui.js' + ), //'metas' => array('description'=>'','keywords'=>'') ); $this->load->library('html_head_params', $params); @@ -125,8 +130,11 @@ class Catalog extends CI_Controller { 'css' => array( 'catalog.css', 'jquery-ui.css' - ), - //'js' => array(), + ), + 'js' => array( + 'jquery.js', + 'jquery-ui.js' + ), //'metas' => array('description'=>'','keywords'=>'') ); $this->load->library('html_head_params', $params); diff --git a/application/core/Article_Controller.php b/application/core/Article_Controller.php index f98bb11..e6a50aa 100644 --- a/application/core/Article_Controller.php +++ b/application/core/Article_Controller.php @@ -3,30 +3,68 @@ * Library Article_Controller can be extended by a controller to be used for * content pages that depend on the language. * - * Several language specific parameters can be coded in language files. - * Non language specific parameters can be putted in config files. + * The page views are usually located in + * "application/views/article/$language/$method". + * Parameters: + * * - * @category Library + * @category Base Controller Library * @author Călin-Andrei Burloiu */ class Article_Controller extends CI_Controller { + protected $title = NULL; + protected $metaDescription = NULL; + protected $helpers = array(); + protected $libraries = array(); + function __construct() { parent::__construct(); + + // Language, title and description + $this->lang->load('article'); + + // Helpers and libraries. + $this->config->load('article'); } /** - * Override this with site specific information (header, menus...) and call + * Extend this with site specific information (header, menus...) and call * $this->_load which is a generic method that loads the article. * Both parameters must be passed to $this->_load. */ public function _remap($method, $params = array()) { - $this->load->view('echo', - array('output' => $this->_load($method, $params), - 'clear' => TRUE) - ); + // Title + $this->title = $this->lang->line("article_$method"); + if ($this->title === FALSE) + $this->title = $method; + + // Meta Description + $this->metaDescription = $this->lang->line("article_${method}_description"); + if ($this->metaDescription === FALSE) + $this->metaDescription = ''; + + // Helpers + $this->helpers = $this->config->item("article_${method}_helpers"); + if ($this->helpers !== FALSE) + $this->load->helper($this->helpers); + + // Libraries + $this->libraries = $this->config->item("article_${method}_library"); + if ($this->libraries !== FALSE) + $this->load->library($libraries); } /** diff --git a/application/language/english/ui_lang.php b/application/language/english/ui_lang.php index adbbb0c..af184ee 100644 --- a/application/language/english/ui_lang.php +++ b/application/language/english/ui_lang.php @@ -4,9 +4,10 @@ $lang['ui_nav_menu_home'] = 'Home'; $lang['ui_nav_menu_install_plugins'] = 'Install Plugins'; $lang['ui_nav_menu_about'] = 'About'; +$lang['ui_nav_menu_help'] = 'Help'; +$lang['ui_nav_menu_contact'] = 'Contact'; $lang['ui_nav_menu_log_in'] = 'Log In'; $lang['ui_nav_menu_register'] = 'Register'; -$lang['ui_nav_menu_help'] = 'Help'; $lang['ui_search'] = 'Search'; diff --git a/application/views/article/english/about.php b/application/views/article/english/about.php index af88507..9a9af2e 100644 --- a/application/views/article/english/about.php +++ b/application/views/article/english/about.php @@ -1,12 +1,12 @@

P2P-Next

-

P2P-Next is an integrated FP7 EU project involving more than 20 partners, including University Politehnica of Bucharest (UPB).

+

P2P-Next is an integrated FP7 EU project involving more than 20 partners, including University Politehnica of Bucharest (UPB).

P2P-Next aims to build the next generation Peer-to-Peer (P2P) content delivery platform.

This site provides information on UPB's contribution to the P2P-Next project activities. We are currently part of WP4 (Work Package 4 - IPvNext Networking Fabric) and WP8 (Work Package 8 - Living Lab Trials).

NextShare Video Plugins

NextSharePC
-
a media-player browser plugin which uses VLC libraries for video rendering and incorporates P2P technology for VideoOnDemand (VoD) and LiveStreaming content delivery. The plugin is currently working with Internet Explorer and Firefox on Windows.
+
a media-player browser plugin which uses VLC libraries for video rendering and incorporates P2P technology for VideoOnDemand (VoD) and LiveStreaming content delivery. The plugin is currently working with Internet Explorer and Firefox on Windows.
SwarmPlayer
@@ -25,15 +25,15 @@ NextSharePC - win VLC + win VLC

win Windows

win Mac OS X

-

win Mozilla Firefox 3.5 or greater

-

win Internet Explorer 7.0 or greater

+

win Mozilla Firefox 3.5 or greater

+

win Internet Explorer 7.0 or greater

@@ -41,7 +41,7 @@ SwarmPlayer - win HTML5 + win HTML5

win Windows

@@ -49,8 +49,8 @@

win Mac OS X

-

win Mozilla Firefox 3.5 or greater

-

win Internet Explorer 7.0 or greater

+

win Mozilla Firefox 3.5 or greater

+

win Internet Explorer 7.0 or greater

@@ -62,10 +62,6 @@
  • from feature films
  • from TechTalks technical presentations
  • or from various events from our faculty
  • -
  • from karaoke parties in Automatic Control and Computers Faculty
  • +
  • from karaoke parties in Automatic Control and Computers Faculty
  • -

    All available movies are currently seeded by 5 peers with high bandwidth (1Gbit) kindly provided by the NCIT-Cluster. Anyone that watches a movie will take part in the swarm and ensure greater availability to provided content.

    - - \ No newline at end of file +

    All available movies are currently seeded by 5 peers with high bandwidth (1Gbit) kindly provided by the NCIT-Cluster. Anyone that watches a movie will take part in the swarm and ensure greater availability to provided content.

    \ No newline at end of file diff --git a/application/views/article/english/contact.php b/application/views/article/english/contact.php new file mode 100644 index 0000000..7aad0db --- /dev/null +++ b/application/views/article/english/contact.php @@ -0,0 +1,10 @@ +

    Contact and support

    +

    In case there are issues getting NextShare plugins to work or for any other information or suggestion, please contact us: + +

    +
    email E-mail:
    +
    + + +
    +
    \ No newline at end of file diff --git a/application/views/article/english/install-plugins.php b/application/views/article/english/install-plugins.php index 1ef7494..a8550af 100644 --- a/application/views/article/english/install-plugins.php +++ b/application/views/article/english/install-plugins.php @@ -1,11 +1,20 @@ -

    Install Plugins

    -

    install plugins instructions

    -

    install plugins instructions

    -

    install plugins instructions

    -

    install plugins instructions

    -

    install plugins instructions

    -

    install plugins instructions

    -

    install plugins instructions

    -

    install plugins instructions

    -

    install plugins instructions

    -

    install plugins instructions

    \ No newline at end of file +

    NextShare Plugins

    +
      +
    1. SwarmPlayer (based on HTML5)
    2. +
    3. NextSharePC (based on VLC)
    4. +
    + +

    SwarmPlayer

    +

    To install SwarmPlayer video plugin which is based on HTML5 visit P2P-Next's SwarmPlayer Site. You should find a green button there labeled "Add Swarmplayer...", click it and follow the instructions.

    +SwarmPlayer Site + +

    NextSharePC

    +

    To install NextSharePC video plugin which is based on VLC do the following:

    +
      +
    1. If you are using: +

      win Windows run the Windows installer.

      win a Mac run the Mac OS X installer.

      +
    2. Restart your browser and revisit the page.
    3. +
    4. Enjoy! ;)
    5. +
    \ No newline at end of file diff --git a/application/views/footer.php b/application/views/footer.php index dc32852..42c4948 100644 --- a/application/views/footer.php +++ b/application/views/footer.php @@ -1,3 +1,3 @@ diff --git a/application/views/header.php b/application/views/header.php index 3ec4f1e..dccb112 100644 --- a/application/views/header.php +++ b/application/views/header.php @@ -14,6 +14,9 @@ endif ?> + + diff --git a/application/views/side_default.php b/application/views/side_default.php new file mode 100644 index 0000000..a6d0589 --- /dev/null +++ b/application/views/side_default.php @@ -0,0 +1,25 @@ + + + \ No newline at end of file diff --git a/css/default.css b/css/default.css index 900e049..7f7507e 100644 --- a/css/default.css +++ b/css/default.css @@ -3,7 +3,7 @@ body margin: 0; font-family: Arial, Helvetica, sans-serif; font-size: 75%; - background: white url('/devel/img/bg.png') repeat-x left 90px; + background: white url('/devel/img/bg.png') repeat-x left 88px; } a:link @@ -26,6 +26,19 @@ h1 margin-bottom: 8px; } +.inline +{ + vertical-align: middle; +} + +.container-install +{ + width: 192px; + margin: 0 auto; + margin-top: 8px; + margin-bottom: 8px; +} + #nav-menu {/* left: 0; @@ -49,7 +62,7 @@ h1 #nav-menu a:link, #nav-menu a:visited { display: block; - height: 14px; + height: 12px; color: white; text-align: center; line-height: 100%; @@ -58,18 +71,26 @@ h1 padding-bottom: 5px; padding-left: 16px; padding-right: 16px; + border: 1px solid transparent; text-decoration: none; } +#nav-menu a:hover +{ + background-color: rgb(90,148,216); + border: 1px outset rgb(0,90,192); +} +#nav-menu a:active +{ + background-color: rgb(90,148,216); + border: 1px inset rgb(60,128,208); +} #nav-menu a.selected { background-color: rgb(60,128,208); + border: 1px inset rgb(60,128,208); color: #FFE4B5; font-weight: bold; } -#nav-menu a:hover, #nav-menu a:active -{ - background-color: rgb(90,148,216); -} #header { @@ -78,9 +99,9 @@ h1 top: 24px; left: 0; width: 100%;*/ - height: 64px; + height: 62px; background: #e5ecf5; - border-bottom: 2px ridge rgb(60,128,208); + border: 1px outset #e5ecf5; } #logo @@ -123,8 +144,10 @@ h1 font-weight: bold; color: #000D60; text-align: left; - padding: 10px 0px 0px 10px; + padding: 0px 0px 0px 8px; + margin: 8px 0px 8px 0px; background: url(/devel/img/header.png) top repeat-x; + outline: 1px outset rgb(108,162,222); clear: both; } @@ -143,6 +166,11 @@ h1 vertical-align: middle; } +#main dt +{ + font-weight: bold; +} + #content { float: left; @@ -162,10 +190,11 @@ h1 #footer { clear: both; - border-top: 2px ridge rgb(60,128,208); - padding-top: 8px; - padding-bottom: 8px; + border: 1px outset #e5ecf5; + padding-top: 0.5em; + padding-bottom: 0.4em; background: #e5ecf5; + font-size: 0.9em; text-align: center; } diff --git a/img/SwarmPlayer-site.jpg b/img/SwarmPlayer-site.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4dc354c217263a2ebc3a281addcbc6cafb64bd0 GIT binary patch literal 11573 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 QIsgCw07*qoM6N<$g0z&#p#T5? literal 0 HcmV?d00001 -- 2.20.1