commit 5ea3de3bd4a2f1d3590012e337bef969410c4a33 Author: Klaus-Uwe Mitterer Date: Thu May 15 18:49:45 2014 +0200 Check in voting advice app in new repo diff --git a/admin/add-candidate.php b/admin/add-candidate.php new file mode 100644 index 0000000..5283af3 --- /dev/null +++ b/admin/add-candidate.php @@ -0,0 +1,150 @@ + + + + +
+
+
+

Add Candidate

+
+
+
+ + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + + +
+ + +
+ + +
+
+
+
+
+
+ + \ No newline at end of file diff --git a/admin/add-question.php b/admin/add-question.php new file mode 100644 index 0000000..c5a3f7b --- /dev/null +++ b/admin/add-question.php @@ -0,0 +1,114 @@ + + + + +
+
+
+

Add Question

+
+
+
+ + + + + + + + + + +
+ + +
+ + + +
+ + +
+
+
+
+
+
+ + \ No newline at end of file diff --git a/admin/add-response.php b/admin/add-response.php new file mode 100644 index 0000000..8a5b8e1 --- /dev/null +++ b/admin/add-response.php @@ -0,0 +1,191 @@ +$box) + { + $insQry = "UPDATE tbl_party_response + SET + PriorityBit='1' + WHERE tbl_party_response.CandidateId='".$_POST['candidate']."' AND tbl_party_response.QuestionId='$key'"; + + mysql_query($insQry); + } + + } + $redirectUrl = 'index.php'; + $_SESSION['succesMessage'] = 4; + header("Location: $redirectUrl"); +} + +startHtml($title = "Add Question Response"); +tophead($title); +leftNav(); +?> + + + + +
+
+
+

Add Questions Response

+
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ + +
+ +

+ + +
    +
  • ".$row['Question'];?>
  • +
+
+ + Agree    + Neutral    + Disagree    + Priority + +

+ + +
+
+
+
+
+
+ + \ No newline at end of file diff --git a/admin/change-password.php b/admin/change-password.php new file mode 100644 index 0000000..04a54c3 --- /dev/null +++ b/admin/change-password.php @@ -0,0 +1,75 @@ + + + + +
+
+
+

Change Password

+
+
+
+ + + + + + + + + + + + + +
+ + +
+ + +
+ + + +
+ + +
+
+
+
+
+
+ \ No newline at end of file diff --git a/admin/css/datatable_jui.css b/admin/css/datatable_jui.css new file mode 100644 index 0000000..4d56324 --- /dev/null +++ b/admin/css/datatable_jui.css @@ -0,0 +1,551 @@ +/* + * File: demo_table_jui.css + * CVS: $Id$ + * Description: CSS descriptions for DataTables demo pages + * Author: Allan Jardine + * Created: Tue May 12 06:47:22 BST 2009 + * Modified: $Date$ by $Author$ + * Language: CSS + * Project: DataTables + * + * Copyright 2009 Allan Jardine. All Rights Reserved. + * + * *************************************************************************** + * DESCRIPTION + * + * The styles given here are suitable for the demos that are used with the standard DataTables + * distribution (see www.datatables.net). You will most likely wish to modify these styles to + * meet the layout requirements of your site. + * + * Common issues: + * 'full_numbers' pagination - I use an extra selector on the body tag to ensure that there is + * no conflict between the two pagination types. If you want to use full_numbers pagination + * ensure that you either have "example_alt_pagination" as a body class name, or better yet, + * modify that selector. + * Note that the path used for Images is relative. All images are by default located in + * ../images/ - relative to this CSS file. + */ + + +/* + * jQuery UI specific styling + */ + +.paging_two_button .ui-button { + float: left; + cursor: pointer; + * cursor: hand; +} + +.paging_full_numbers .ui-button { + padding: 2px 6px; + margin: 0; + cursor: pointer; + * cursor: hand; +} + +.dataTables_paginate .ui-button { + margin-right: -0.1em !important; +} + +.paging_full_numbers { + width: 350px !important; +} + +.dataTables_wrapper .ui-toolbar { + padding: 10px; +} +.dataTables_wrapper .ui-toolbar input, selectbox{ + margin:0px 7px;} + +.dataTables_paginate { + width: auto; +} + +.dataTables_info { + padding-top: 3px; +} + +table.display thead th { + padding: 3px 0px 3px 10px; + cursor: pointer; + * cursor: hand; +} + +div.dataTables_wrapper .ui-widget-header { + font-weight: normal; +} + + +/* + * Sort arrow icon positioning + */ +table.display thead th div.DataTables_sort_wrapper { + position: relative; + padding-right: 20px; + padding-right: 20px; +} + +table.display thead th div.DataTables_sort_wrapper span { + position: absolute; + top: 50%; + margin-top: -8px; + right: 0; +} + + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Everything below this line is the same as demo_table.css. This file is + * required for 'cleanliness' of the markup + * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables features + */ + +.dataTables_wrapper { + position: relative; + min-height: 302px; + _height: 302px; + clear: both; + border-top: 1px solid #ddd; +} + +.dataTables_processing { + position: absolute; + top: 0px; + left: 50%; + width: 250px; + margin-left: -125px; + border: 1px solid #ddd; + text-align: center; + color: #999; + font-size: 11px; + padding: 2px 0; +} + +.dataTables_length { + width: 40%; + float: left; +} + +.dataTables_filter { + width: 50%; + float: right; + text-align: right; +} + +.dataTables_info { + width: 50%; + float: left; +} + +.dataTables_paginate { + float: right; + text-align: right; +} + +/* Pagination nested */ +.paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next { + height: 19px; + width: 19px; + margin-left: 3px; + float: left; +} + +.paginate_disabled_previous { + background-image: url('../images/back_disabled.jpg'); +} + +.paginate_enabled_previous { + background-image: url('../images/back_enabled.jpg'); +} + +.paginate_disabled_next { + background-image: url('../images/forward_disabled.jpg'); +} + +.paginate_enabled_next { + background-image: url('../images/forward_enabled.jpg'); +} + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables display + */ +table.display { + margin: 0 auto; + width: 100%; + clear: both; + border-collapse: collapse; +} + +table.display tfoot th { + padding: 3px 0px 3px 10px; + font-weight: bold; + font-weight: normal; +} + +table.display tr.heading2 td { + border-bottom: 1px solid #aaa; +} + +table.display td { + padding: 8px 10px; + font-size:12px; +} + +table.display td.center { + text-align: center; +} + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables sorting + */ + +.sorting_asc { + background: url('../images/sort_asc.png') no-repeat center right; +} + +.sorting_desc { + background: url('../images/sort_desc.png') no-repeat center right; +} + +.sorting { + background: url('../images/sort_both.png') no-repeat center right; +} + +.sorting_asc_disabled { + background: url('../images/sort_asc_disabled.png') no-repeat center right; +} + +.sorting_desc_disabled { + background: url('../images/sort_desc_disabled.png') no-repeat center right; +} + + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables row classes + */ +table.display tr.odd.gradeA { + background-color: #F8F8F8; +} + +table.display tr.even.gradeA { + background-color: #FFFFFF; +} + + + + +table.display tr.odd.gradeA { + background-color: #F8F8F8; +} + +table.display tr.even.gradeA { + background-color: #FFFFFF; +} + +table.display tr.odd.gradeC { + background-color: #ddddff; +} + +table.display tr.even.gradeC { + background-color: #eeeeff; +} + +table.display tr.odd.gradeX { + background-color: #ffdddd; +} + +table.display tr.even.gradeX { + background-color: #ffeeee; +} + +table.display tr.odd.gradeU { + background-color: #ddd; +} + +table.display tr.even.gradeU { + background-color: #eee; +} + + +tr.odd { + background-color: #ECEDF1; +} + +tr.even { + background-color: white; +} + + + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Misc + */ +.dataTables_scroll { + clear: both; +} + +.top, .bottom { + padding: 15px; + background-color: #F5F5F5; + border: 1px solid #CCCCCC; +} + +.top .dataTables_info { + float: none; +} + +.clear { + clear: both; +} + +.dataTables_empty { + text-align: center; +} + +tfoot input { + margin: 0.5em 0; + width: 100%; + color: #444; +} + +tfoot input.search_init { + color: #999; +} + +td.group { + background-color: #d1cfd0; + border-bottom: 2px solid #A19B9E; + border-top: 2px solid #A19B9E; +} + +td.details { + background-color: #d1cfd0; + border: 2px solid #A19B9E; +} + + +.example_alt_pagination div.dataTables_info { + width: 40%; +} + +.paging_full_numbers span.paginate_button, + .paging_full_numbers span.paginate_active { + border: 1px solid #aaa; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + padding: 2px 5px; + margin: 0 3px; + cursor: pointer; + *cursor: hand; +} + +.paging_full_numbers span.paginate_button { + background-color: #ddd; +} + +.paging_full_numbers span.paginate_button:hover { + background-color: #ccc; +} + +.paging_full_numbers span.paginate_active { + background-color: #99B3FF; +} + +table.display tr.even.row_selected td { + background-color: #B0BED9; +} + +table.display tr.odd.row_selected td { + background-color: #9FAFD1; +} + + +/* + * Sorting classes for columns + */ +/* For the standard odd/even */ +tr.odd td.sorting_1 { + background-color: #ECEDF1; +} + +tr.odd td.sorting_2 { + background-color: #ECEDF1; +} + +tr.odd td.sorting_3 { + background-color: #ECEDF1; +} + +tr.even td.sorting_1 { + background-color: #ECEDF1; +} + +tr.even td.sorting_2 { + background-color: #ECEDF1; +} + +tr.even td.sorting_3 { + background-color: #ECEDF1; +} + + +/* For the Conditional-CSS grading rows */ +/* + Colour calculations (based off the main row colours) + Level 1: + dd > c4 + ee > d5 + Level 2: + dd > d1 + ee > e2 + */ +tr.odd.gradeA td.sorting_1 { + background-color: #F5F5F5; +} + +tr.odd.gradeA td.sorting_2 { + background-color: #d1ffd1; +} + +tr.odd.gradeA td.sorting_3 { + background-color: #d1ffd1; +} + +tr.even.gradeA td.sorting_1 { + background-color: #FBFBFB; +} + +tr.even.gradeA td.sorting_2 { + background-color: #e2ffe2; +} + +tr.even.gradeA td.sorting_3 { + background-color: #e2ffe2; +} + +tr.odd.gradeC td.sorting_1 { + background-color: #c4c4ff; +} + +tr.odd.gradeC td.sorting_2 { + background-color: #d1d1ff; +} + +tr.odd.gradeC td.sorting_3 { + background-color: #d1d1ff; +} + +tr.even.gradeC td.sorting_1 { + background-color: #d5d5ff; +} + +tr.even.gradeC td.sorting_2 { + background-color: #e2e2ff; +} + +tr.even.gradeC td.sorting_3 { + background-color: #e2e2ff; +} + +tr.odd.gradeX td.sorting_1 { + background-color: #ffc4c4; +} + +tr.odd.gradeX td.sorting_2 { + background-color: #ffd1d1; +} + +tr.odd.gradeX td.sorting_3 { + background-color: #ffd1d1; +} + +tr.even.gradeX td.sorting_1 { + background-color: #ffd5d5; +} + +tr.even.gradeX td.sorting_2 { + background-color: #ffe2e2; +} + +tr.even.gradeX td.sorting_3 { + background-color: #ffe2e2; +} + +tr.odd.gradeU td.sorting_1 { + background-color: #c4c4c4; +} + +tr.odd.gradeU td.sorting_2 { + background-color: #d1d1d1; +} + +tr.odd.gradeU td.sorting_3 { + background-color: #d1d1d1; +} + +tr.even.gradeU td.sorting_1 { + background-color: #d5d5d5; +} + +tr.even.gradeU td.sorting_2 { + background-color: #e2e2e2; +} + +tr.even.gradeU td.sorting_3 { + background-color: #e2e2e2; +} + + +/* + * Row highlighting example + */ +.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted { + background-color: #ECFFB3; +} + +.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted { + background-color: #E6FF99; +} + + .data-table td{ + border:1px solid #ccc;} +.data-table tbody{ + color:#555555; + border:1px solid #ccc;} +.data-table thead{ + border-top:none;} +.dataTables_wrapper .ui-toolbar .ui-state-default { + color:#666; + border:1px solid #ccc; + border-radius:3px; + background:#fff; + font-weight:bold; + padding:3px 8px; + box-shadow:0px 1px 1px #EDEDED; + margin-left:4px; + } + +.dataTables_wrapper .ui-toolbar{ + border:1px solid #ccc; + border-top:none;} +#myTable p{ + margin:0; + padding:0; +} \ No newline at end of file diff --git a/admin/css/ie.css b/admin/css/ie.css new file mode 100644 index 0000000..4ace05a --- /dev/null +++ b/admin/css/ie.css @@ -0,0 +1,29 @@ +.quick_search { +text-align: center; +padding: 14px 0 0px 0; +} + +.quick_search input[type=text] { +text-align: left; +height: 22px; +width: 88%; +color: #ccc; +padding-left: 2%; +padding-top: 5px; +background: #fff url(../images/icn_search.png) no-repeat; +background-position: 10px 6px; +} + +.toggleLink { +display: inline; +float: none; +margin-left: 2% +} + +html ul.tabs li.active, html ul.tabs li.active a:hover { +background: #ccc; +} + +input[type=submit].btn_post_message { +background: url(../images/post_message.png) no-repeat; +} \ No newline at end of file diff --git a/admin/css/images/Thumbs.db b/admin/css/images/Thumbs.db new file mode 100644 index 0000000..0326a98 Binary files /dev/null and b/admin/css/images/Thumbs.db differ diff --git a/admin/css/images/datepicker-bg.png b/admin/css/images/datepicker-bg.png new file mode 100644 index 0000000..26d1661 Binary files /dev/null and b/admin/css/images/datepicker-bg.png differ diff --git a/admin/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/admin/css/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000..5b5dab2 Binary files /dev/null and b/admin/css/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/admin/css/images/ui-bg_flat_75_ffffff_40x100.png b/admin/css/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000..ac8b229 Binary files /dev/null and b/admin/css/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/admin/css/images/ui-bg_glass_55_fbf9ee_1x400.png b/admin/css/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000..ad3d634 Binary files /dev/null and b/admin/css/images/ui-bg_glass_55_fbf9ee_1x400.png differ diff --git a/admin/css/images/ui-bg_glass_65_ffffff_1x400.png b/admin/css/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..42ccba2 Binary files /dev/null and b/admin/css/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/admin/css/images/ui-bg_glass_75_dadada_1x400.png b/admin/css/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000..5a46b47 Binary files /dev/null and b/admin/css/images/ui-bg_glass_75_dadada_1x400.png differ diff --git a/admin/css/images/ui-bg_glass_75_e6e6e6_1+ù4030.png b/admin/css/images/ui-bg_glass_75_e6e6e6_1+ù4030.png new file mode 100644 index 0000000..86c2baa Binary files /dev/null and b/admin/css/images/ui-bg_glass_75_e6e6e6_1+ù4030.png differ diff --git a/admin/css/images/ui-bg_glass_75_e6e6e6_1x400.png b/admin/css/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000..86c2baa Binary files /dev/null and b/admin/css/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/admin/css/images/ui-bg_glass_95_fef1ec_1x400.png b/admin/css/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000..4443fdc Binary files /dev/null and b/admin/css/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/admin/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/admin/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000..6baddb4 Binary files /dev/null and b/admin/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ diff --git a/admin/css/images/ui-icons_222222_256x240.png b/admin/css/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..ee039dc Binary files /dev/null and b/admin/css/images/ui-icons_222222_256x240.png differ diff --git a/admin/css/images/ui-icons_2e83ff_256x240.png b/admin/css/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000..45e8928 Binary files /dev/null and b/admin/css/images/ui-icons_2e83ff_256x240.png differ diff --git a/admin/css/images/ui-icons_454545_256x240.png b/admin/css/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000..7ec70d1 Binary files /dev/null and b/admin/css/images/ui-icons_454545_256x240.png differ diff --git a/admin/css/images/ui-icons_888888_256x240.png b/admin/css/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000..5ba708c Binary files /dev/null and b/admin/css/images/ui-icons_888888_256x240.png differ diff --git a/admin/css/images/ui-icons_cd0a0a_256x240.png b/admin/css/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000..7930a55 Binary files /dev/null and b/admin/css/images/ui-icons_cd0a0a_256x240.png differ diff --git a/admin/css/jquery-ui.css b/admin/css/jquery-ui.css new file mode 100644 index 0000000..716b693 --- /dev/null +++ b/admin/css/jquery-ui.css @@ -0,0 +1,11 @@ +/* + * jQuery UI CSS Framework 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming + */ +@import "jquery.ui/jquery.ui.base.css"; +@import "jquery.ui/jquery.ui.theme.css"; \ No newline at end of file diff --git a/admin/css/jquery.ui.core.css b/admin/css/jquery.ui.core.css new file mode 100644 index 0000000..bde176d --- /dev/null +++ b/admin/css/jquery.ui.core.css @@ -0,0 +1,38 @@ +/* + * jQuery UI CSS Framework 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { zoom: 1; } +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } diff --git a/admin/css/jquery.ui.datepicker.css b/admin/css/jquery.ui.datepicker.css new file mode 100644 index 0000000..981fa24 --- /dev/null +++ b/admin/css/jquery.ui.datepicker.css @@ -0,0 +1,68 @@ +/* + * jQuery UI Datepicker 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none;box-shadow:0px 2px 15px 1px #ccc; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0;background:#ccc; color:#333; border:1px solid #999;} +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .4em; text-align: right; text-decoration: none; border-radius:8px;} +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} \ No newline at end of file diff --git a/admin/css/jquery.ui.theme.css b/admin/css/jquery.ui.theme.css new file mode 100644 index 0000000..8aae782 --- /dev/null +++ b/admin/css/jquery.ui.theme.css @@ -0,0 +1,242 @@ +/* + * jQuery UI CSS Framework 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/ + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family:/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } +.ui-widget-content { border: 1px solid #ccc/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } +.ui-widget-content a { color: #222222/*{fcContent}*/; } +.ui-widget-header { border: 1px solid #CBDAE8/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; } +.ui-widget-header a { color: #222222/*{fcHeader}*/; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #ccc/*{borderColorDefault}*/; background: #fff/*{bgColorDefault}*/ /*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: bold/*{fwDefault}*/; color: #555555/*{fcDefault}*/; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; } +.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #999/*{borderColorHighlight}*/; background: #CCCCCC /*{bgColorHighlight}*/ /*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid red/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } +.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; } \ No newline at end of file diff --git a/admin/css/layout.css b/admin/css/layout.css new file mode 100644 index 0000000..496683c --- /dev/null +++ b/admin/css/layout.css @@ -0,0 +1,950 @@ +/* Essentials */ + +html, div, map, dt, isindex, form, header, aside, section, section, article, footer { + display: block; +} + +html, body { +height: 100%; +margin: 0; +padding: 0; +font-family: "Helvetica Neue", Helvetica, Arial, Verdana, sans-serif; +background: #F8F8F8; +font-size: 12px; +} + +.clear { +clear: both; +} + +.spacer { +height: 20px; +} + +a:link, a:visited { +color: #77BACE; +text-decoration: none; +} + +a:hover { +text-decoration: underline; +} + + +/* Header */ + +header#header { +height: 55px; +width: 100%; +background: #222222 url(../images/header_bg.png) repeat-x; +} + +header#header h1.site_title, header#header h2.section_title { +float: left; +margin: 0; +font-size: 22px; +display: block; +width: 23%; +height: 55px; +font-weight: normal; +text-align: left; +text-indent: 1.8%; +line-height: 55px; +color: #fff; +text-shadow: 0 -1px 0 #000; +} + +header#header h1.site_title a { +color: #fff; +text-decoration: none; +} + +header#header h2.section_title { +text-align: center; +text-indent: 4.5%; +width: 68%; +background: url(../images/header_shadow.png) no-repeat left top; +} + +.btn_view_site { +float: left; +width: 9%; +} + +.btn_view_site a { +display: block; +margin-top: 12px; +width: 91px; +height: 27px; +background: url(../images/btn_view_site.png) no-repeat; +text-align: center; +line-height: 29px; +color: #fff; +text-decoration: none; +text-shadow: 0 -1px 0 #000;} + +.btn_view_site a:hover { +background-position: 0 -27px; +} + +/* Secondary Header Bar */ + +section#secondary_bar { +height: 38px; +width: 100%; +background: #F1F1F4 url(../images/secondary_bar.png) repeat-x; +} + +section#secondary_bar .user { +float: left; +width: 23%; +height: 38px; +} + +.user p { +margin: 0; +padding: 0; +color: #666666; +font-weight: bold; +display: block; +float: left; +width: 85%; +height: 35px; +line-height: 35px; +text-indent: 25px; +text-shadow: 0 1px 0 #fff; +background: url(../images/icn_user.png) no-repeat center left; +margin-left: 6%; +} + +.user a { +text-decoration: none; +color: #666666} + +.user a:hover { +color: #77BACE; +} + +.user a.logout_user { +float: left; +display: block; +width: 16px; +height: 35px; +text-indent: -5000px; +background: url(../images/icn_logout.png) center no-repeat; +} + +/* Breadcrumbs */ + +section#secondary_bar .breadcrumbs_container { +float: left; +width: 77%; +background: url(../images/secondary_bar_shadow.png) no-repeat left top; +height: 38px; +} + +article.breadcrumbs { +float: left; +padding: 0 10px; +border: 1px solid #ccc; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +-webkit-box-shadow: 0 1px 0 #fff; +-moz-box-shadow: 0 1px 0 #fff; +box-shadow: 0 1px 0 #fff; +height: 23px; +margin: 4px 3%; +} + +.breadcrumbs a { +display: inline-block; +float: left; +height: 24px; +line-height: 23px; +} + +.breadcrumbs a.current, .breadcrumbs a.current:hover { +color: #9E9E9E; +font-weight: bold; +text-shadow: 0 1px 0 #fff; +text-decoration: none; +} + +.breadcrumbs a:link, .breadcrumbs a:visited { +color: #44474F; +text-decoration: none; +text-shadow: 0 1px 0 #fff; +font-weight: bold;} + +.breadcrumbs a:hover { +color: #222222; +} + +.breadcrumb_divider { +display: inline-block; +width: 12px; +height: 24px; +background: url(../images/breadcrumb_divider.png) no-repeat; +float: left; +margin: 0 5px; +} + +/* Sidebar */ + +aside#sidebar { +width: 23%; +background: #E0E0E3 url(../images/sidebar.png) repeat; +float: left; +min-height: 100%; +margin-top: -4px; +height:auto; +} + +#sidebar hr { +border: none; +outline: none; +background: url(../images/sidebar_divider.png) repeat-x; +display: block; +width: 100%; +height: 2px;} + + +/* Search */ + +.quick_search { +text-align: center; +padding: 14px 0 10px 0; +} + +.quick_search input[type=text] { +-webkit-border-radius: 20px; +-moz-border-radius: 20px; +border-radius: 20px; +border: 1px solid #bbb; +height: 26px; +width: 90%; +color: #ccc; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +text-indent: 30px; +background: #fff url(../images/icn_search.png) no-repeat; +background-position: 10px 6px; +} + +.quick_search input[type=text]:focus { +outline: none; +color: #666666; +border: 1px solid #77BACE; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +} + +/* Sidebar Menu */ + +#sidebar h3 { +background:url("../images/secondary_bar.png") repeat-x scroll 0 0 #F1F1F4; +color: #1F1F20; +text-transform: uppercase; +text-shadow: 0 1px 0 #fff; +width: 94%; +float: left; +font-size: 13px; +font-weight: bold; +height: 28px; +margin: 0 0 5px; +padding: 7px 0 0 15px; + +} + +#sidebar ul, .width_quarter ul{ +clear: both; +margin: 10px 0 10px 0; padding: 0; +} + +#sidebar li, .width_quarter li{ +list-style: none; +margin: 0 0 0 25px; padding: 0; +} + +#sidebar li a, .width_quarter li a{ +color: #666666; +padding-left: 25px; +text-decoration: none; +display: inline-block; +height: 17px; +line-height: 17px; +text-shadow: 0 1px 0 #fff; +margin: 2px 0; +} + +#sidebar li a:hover, .width_quarter li a:hover { +color: #444444; +} + +/* Sidebar Icons */ + +li.icn_new_article a { +background: url(../images/icn_new_article.png) no-repeat center left; +line-height:20px; +} +li.icn_edit_article a{ +background: url(../images/icn_edit_article.png) no-repeat center left; +} +li.icn_view a{ +background: url(../images/view.png) no-repeat center left; +} +li.icn_categories a { +background: url(../images/icn_categories.png) no-repeat center left; +} +li.icn_tags a { +background: url(../images/icn_tags.png) no-repeat center left; +} +li.icn_add_user a { +background: url(../images/icn_add_user.png) no-repeat center left; +} +li.icn_view_users a { +background: url(../images/icn_view_users.png) no-repeat center left; +} +li.icn_profile a { +background: url(../images/icn_profile.png) no-repeat center left; +} +li.icn_folder a { +background: url(../images/icn_folder.png) no-repeat center left; +} +li.icn_photo a { +background: url(../images/icn_photo.png) no-repeat center left; +} +li.icn_audio a { +background: url(../images/icn_audio.png) no-repeat center left; +} +li.icn_video a { +background: url(../images/icn_video.png) no-repeat center left; +} +li.icn_settings a { +background: url(../images/icn_settings.png) no-repeat center left; +} +li.icn_security a { +background: url(../images/icn_security.png) no-repeat center left; +} +li.icn_jump_back a { +background: url(../images/icn_jump_back.png) no-repeat center left; +} + +#sidebar p { +color: #666666; +padding-left: 6%; +text-shadow: 0 1px 0 #fff; +margin: 10px 0 0 0;} + +#sidebar a { +color: #666666; +text-decoration: none; +} + +#sidebar a:hover { +text-decoration: underline; +} + +#sidebar footer { +margin-top: 20%; +} + + +/* Main Content */ + + +section#main { +width: 77%; +min-height: 100%; +background: url(../images/sidebar_shadow.png) repeat-y left top; +float: left; +margin-top: -2px; +height:auto; +} + +#main h3 { +color: #1F1F20; +text-transform: uppercase; +text-shadow: 0 1px 0 #fff; +font-size: 13px; +margin: 8px 20px; +} + +/* Modules */ + +.module { +border: 1px solid #9BA0AF; +width: 100%; +margin: 20px 3% 0 3%; +margin-top: 20px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +background: #ffffff; +} + +#main .module header h3 { +display: block; +width: 90%; +float: left; +} + +.module header { +height: 38px; +width: 100%; +background: #F1F1F4 url(../images/secondary_bar.png) repeat-x; +-webkit-border-top-left-radius: 5px; -webkit-border-top-right-radius: 5px; +-moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px; +border-top-left-radius: 5px; border-top-right-radius: 5px; +} + +.module footer { +height: 32px; +width: 100%; +border-top: 1px solid #9CA1B0; +background: #F1F1F4 url(../images/module_footer_bg.png) repeat-x; +-webkit-border-bottom-left-radius: 5px; -webkit-border-bottom-right-radius: 5px; +-moz-border-radius-bottomleft: 5px; -moz-border-radius-bottomright: 5px; +-webkit-border-bottom-left-radius: 5px; -webkit-border-bottom-right-radius: 5px; +} + +.module_content { +margin: 10px 20px; +color: #666;} + +/* Module Widths */ + +.width_full { +width: 95%; +} + +.width_half { +width: 46%; +margin-right: 0; +float: left; +} + +.width_quarter { +width: 26%; +margin-right: 0; +float: left; +} + +.width_3_quarter { +width: 66%; +margin-right: 0; +float: left; +} + +/* Stats Module */ + +.stats_graph { +width: 64%; +float: left; +} + +.stats_overview { +background: #F6F6F6; +border: 1px solid #ccc; +float: right; +width: 26%; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +} + +.overview_today, .overview_previous { +width: 50%; +float: left;} + +.stats_overview p { +margin: 0; padding: 0; +text-align: center; +text-transform: uppercase; +text-shadow: 0 1px 0 #fff; +} + +.stats_overview p.overview_day { +font-size: 12px; +font-weight: bold; +margin: 6px 0; +} + +.stats_overview p.overview_count { +font-size: 26px; +font-weight: bold; +color: #333333;} + +.stats_overview p.overview_type { +font-size: 10px; +color: #999999; +margin-bottom: 8px} + +/* Content Manager */ + +.tablesorter { +width: 100%; +margin: -5px 0 0 0; +} + +.tablesorter td{ +margin: 0; +padding: 0; +border-bottom: 1px dotted #ccc; +} + +.tablesorter thead tr { +height: 34px; +background: url(../images/table_sorter_header.png) repeat-x; +text-align: left; +text-indent: 10px; +cursor: pointer; +} + +.tablesorter td { +padding: 15px 10px; +} + +.tablesorter input[type=image] { +margin-right: 10px;} + +ul.tabs { + margin: 3px 10px 0 0; + padding: 0; + float: right; + list-style: none; + height: 24px; /*--Set height of tabs--*/ + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: 0 1px 0 #fff; + -moz-box-shadow: 0 1px 0 #fff; + box-shadow: 0 1px 0 #fff; + border: 1px solid #ccc; + font-weight: bold; + text-shadow: 0 1px 0 #fff; +} +ul.tabs li { + float: left; + margin: 0; + padding: 0; + line-height: 24px; +} +ul.tabs li a { + text-decoration: none; + color: #999; + display: block; + padding: 0 10px; + height: 24px; +} + +ul.tabs li a:hover { + color: #44474F; +} + +html ul.tabs li.active a { + color: #44474F; + } + +html ul.tabs li.active, html ul.tabs li.active a:hover { + background: #F1F2F4; + -webkit-box-shadow: inset 0 2px 3px #818181; + -moz-box-shadow: inset 0 2px 3px #818181; + box-shadow: inset 0 2px 3px #818181; +} + +html ul.tabs li:first-child, html ul.tabs li:first-child a { + -webkit-border-top-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; + -moz-border-radius-topleft: 5px; -moz-border-radius-bottomleft: 5px; + border-top-left-radius: 5px; border-bottom-left-radius: 5px; +} + +html ul.tabs li:last-child, html ul.tabs li:last-child a { + -webkit-border-top-right-radius: 5px; -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-topright: 5px; -moz-border-radius-bottomright: 5px; + border-top-right-radius: 5px; border-bottom-right-radius: 5px; +} + +#main .module header h3.tabs_involved { +display: block; +width: 60%; +float: left; +} + +/* Messages */ + +.message { +border-bottom: 1px dotted #cccccc; +} + +input[type="submit"],input[type="button"] { + font-weight:bold; + background: #eee; /* Old browsers */ + background: -moz-linear-gradient(top, rgba(255,255,255,.2) 0%, rgba(0,0,0,.2) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.2)), color-stop(100%,rgba(0,0,0,.2))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Opera11.10+ */ + background: -ms-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* IE10+ */ + background: linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* W3C */ + border: 1px solid #aaa; + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; + padding: 4px 12px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + color: #444; + display: inline-block; + /*font-size: 11px; /* DISABLED FOR easydropdown */ + /*font-weight: bold; /* DISABLED FOR easydropdown */ + text-decoration: none; + text-shadow: 0 1px rgba(255, 255, 255, .75); + cursor: pointer; + line-height: 21px; + font-family: "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; + float:left; + margin:10px 0 0 10px; +} + +input[type="submit"]:hover, input[type="button"]:hover { + color: #222; + background: #ddd; /* Old browsers */ + background: -moz-linear-gradient(top, rgba(255,255,255,.3) 0%, rgba(0,0,0,.3) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.3)), color-stop(100%,rgba(0,0,0,.3))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Opera11.10+ */ + background: -ms-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* IE10+ */ + background: linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* W3C */ + border: 1px solid #888; + border-top: 1px solid #aaa; + border-left: 1px solid #aaa; +} + +input[type=submit].alt_btn { +background: #D0D1D4 url(../images/btn_submit_2.png) repeat-x; +border: 1px solid#30B0C8; +-webkit-box-shadow: 0 1px 0 #fff; +-moz-box-shadow: 0 1px 0 #fff; +box-shadow: 0 1px 0 #fff; +font-weight: bold; +height: 22px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +padding: 0 10px; +color: #003E49; +text-shadow: 0 1px 0 #6CDCF9; +cursor: pointer; +} + +input[type=submit].alt_btn:hover { +color: #001217; +} + +input[type=submit].btn_post_message { +background: #D0D1D4 url(../images/post_message.png) no-repeat; +display: block; +width: 37px; +border: none; +height: 24px; +cursor: pointer; +text-indent: -5000px; +} + +input[type=submit].btn_post_message:hover { +background-position: 0 -24px; +} + +.post_message { +text-align: left; +padding: 5px 0; +} + +.post_message input[type=text] { +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +border: 1px solid #bbb; +height: 20px; +width: 70%; +color: #ccc; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +text-indent: 10px; +background-position: 10px 6px; +float: left; +margin: 0 3.5%; +} + +.post_message input[type=text]:focus { +outline: none; +border: 1px solid #77BACE; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +color: #666666; +} + +.post_message input[type=image] { +float: left; +} + +.message_list { +height: 250px; +overflow-x:hidden; +overflow-y: scroll; +} + +/* New/Edit Article Module */ + +fieldset { +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +background: #F6F6F6; +border: 1px solid #ccc; +padding: 1% 0%; +margin: 10px 0; +} + +fieldset label { +display: block; +float: left; +width: 96%; +height: 25px; +line-height: 25px; +text-shadow: 0 1px 0 #fff; +font-weight: bold; +padding-left: 10px; +margin: 5px 0 5px 0; +text-transform: uppercase; +} + +fieldset input[type=text], fieldset input[type=password] { +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +border: 1px solid #BBBBBB; +height: 25px; +color: #666666; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +padding-left: 10px; +background-position: 10px 6px; +margin: 0; +display: block; +float: left; +width: 92%; +margin: 0 10px; +} +fieldset .datepicker-input { + background: url("images/datepicker-bg.png") repeat-x scroll right top #FFFFFF !important; +} + +fieldset input[type=file] { +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +color: #666666; +border: 1px solid #BBBBBB; +background-position: 10px 6px; +margin: 0; +display: block; +float: left; +margin: 0 10px; +height:25px; +} +fieldset input[type=text]:focus { +outline: none; +border: 1px solid #77BACE; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +} + +fieldset select { +width: 96%; +margin: 0 10px; +border: 1px solid #bbb; +height: 20px; +color: #666666; +} + +fieldset textarea { +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +border: 1px solid #BBBBBB; +color: #666666; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +padding-left: 10px; +background-position: 10px 6px; +margin: 0 0.5%; +display: block; +float: left; +width: 96%; +margin: 0 10px; +} + +fieldset textarea:focus { +outline: none; +border: 1px solid #77BACE; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +} + +.submit_link { +float: right; +margin-right: 3%; +padding: 5px 0; +} + +.submit_link select { +width: 150px; +border: 1px solid #bbb; +height: 20px; +color: #666666; +} + +#main .module_content h1 { +color: #333333; +text-transform: none; +text-shadow: 0 1px 0 #fff; +font-size: 22px; +margin: 8px 0px; +} + +#main .module_content h2 { +color: #444444; +text-transform: none; +text-shadow: 0 1px 0 #fff; +font-size: 18px; +margin: 8px 0px; +} + +#main .module_content h3 { +color: #666666; +text-transform: uppercase; +text-shadow: 0 1px 0 #fff; +font-size: 13px; +margin: 8px 0px; +} + +#main .module_content h4 { +color: #666666; +text-transform: none; +text-shadow: 0 1px 0 #fff; +font-size: 13px; +margin: 8px 0px; +} + +#main .module_content li { +line-height: 150%; +} + +/* Alerts */ + +#main h4.alert_info { +display: block; +width: 95%; +margin: 20px 3% 0 3%; +margin-top: 20px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +background: #B5E5EF url(../images/icn_alert_info.png) no-repeat; +background-position: 10px 10px; +border: 1px solid #77BACE; +color: #082B33; +padding: 10px 0; +text-indent: 40px; +font-size: 14px;} + +#main h4.alert_warning { +display: block; +width: 95%; +margin: 20px 3% 0 3%; +margin-top: 20px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +background: #F5F3BA url(../images/icn_alert_warning.png) no-repeat; +background-position: 10px 10px; +border: 1px solid #C7A20D; +color: #796616; +padding: 10px 0; +text-indent: 40px; +font-size: 14px;} + +#main h4.alert_error { +display: block; +width: 95%; +margin: 20px 3% 0 3%; +margin-top: 20px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +background: #F3D9D9 url(../images/icn_alert_error.png) no-repeat; +background-position: 10px 10px; +border: 1px solid #D20009; +color: #7B040F; +padding: 10px 0; +text-indent: 40px; +font-size: 14px;} + +#main h4.alert_success { +display: block; +width: 95%; +margin: 20px 3% 0 3%; +margin-top: 20px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +background: #E2F6C5 url(../images/icn_alert_success.png) no-repeat; +background-position: 10px 10px; +border: 1px solid #79C20D; +color: #32510F; +padding: 10px 0; +text-indent: 40px; +font-size: 14px; +} +.toggle{ + display:none; +} +.trigger{ + cursor:pointer; +} +.width_quarter li{ + line-height:230%; +} + +label.error { + display:block; + color:#B70000; + font-size:11px; + font-family:"Comic Sans MS", cursive; + font-weight:normal; + text-transform:capitalize; + margin-top:0; + margin-bottom:0; + width:100%; +} +input.error{ border: 1px solid #F00 !important;} +select.error{ border: 1px solid #F00 !important;} +textarea.error{ border: 1px solid #F00 !important;} +img { + border:0; +} +.tinyMCE{ + float:left; + width:99%; + padding-left:10px; +} \ No newline at end of file diff --git a/admin/css/login.css b/admin/css/login.css new file mode 100644 index 0000000..3a421da --- /dev/null +++ b/admin/css/login.css @@ -0,0 +1,102 @@ +/* ================= Login Form ================= */ +body{ + font-family:"Trebuchet MS","Myriad Pro",Arial,sans-serif; +} +.loginform{ + width:360px; + margin:0px auto; + margin-top: 140px; + box-shadow:0px 4px 90px #EEEEEE; +} +.title{ + background:url(../images/login-title.png) no-repeat; + text-align:center; + height:69px; +} +.form_wrapper{ + padding:23px 29px 40px 29px; + background:url(../images/login-form-body-bg.png) repeat-x bottom;} +#password{ + border:none; + font:19px Arial, Helvetica, sans-serif; + color:#ccc; + width:250px; + border:1px solid #CED3D8; + border-radius:3px; + border-top:1px solid #A0A4A9; + padding:10px; + padding-left:40px; + margin-bottom:19px; + background:url(../images/password-input.png) repeat-x top;} +.login-input-pass-active{ + border:none; + font:19px Arial, Helvetica, sans-serif; + color:#999; + width:250px; + border:1px solid #CED3D8; + border-radius:3px; + border-top:1px solid #A0A4A9; + padding:10px; + padding-left:40px; + margin-bottom:19px; + background:url(../images/password-input.png) repeat-x top;} +#username{ + border:none; + font:19px Arial, Helvetica, sans-serif; + color:#ccc; + width:250px; + border:1px solid #CED3D8; + border-radius:3px; + border-top:1px solid #A0A4A9; + padding:10px; + padding-left:40px; + margin-bottom:19px; + background:url(../images/username-input.png) repeat-x top;} +.login-input-user-active{ + border:none; + font:19px Arial, Helvetica, sans-serif; + color:#999; + width:250px; + border:1px solid #CED3D8; + border-radius:3px; + border-top:1px solid #A0A4A9; + padding:10px; + padding-left:40px; + margin-bottom:19px; + background:url(../images/username-input.png) repeat-x top;} + +.loginform .log-lab{ + color:#A4AAB2; + font-size:14px; + font-weight:bold; + display:block; + padding-bottom:11px;} +.button{ + width:300px; + height:49px; + font:bold 16px Arial, Helvetica, sans-serif; + color:#fff; + background:url(../images/login-button.png) no-repeat 0px 0px; + border:none; + cursor:pointer; +} +.button:hover{ + background:url(../images/login-button.png) no-repeat 0px -50px;} +.button:active{ + background:url(../images/login-button.png) no-repeat 0px -100px;} +.form_wrapper a.forgot { + color: #FFA800; + float: right; + font-style: italic; + line-height: 24px; + text-shadow: 1px 1px 1px #FFFFFF; + font-size:14px; + font-weight:bold; +} + +label.error { + display:inline; color:#B70000; font-size:11px; font-family:"Comic Sans MS", cursive; +} +input.error{ border: 1px solid #F00 !important;} +select.error{ border: 1px solid #F00 !important;} +textarea.error{ border: 1px solid #F00 !important;} \ No newline at end of file diff --git a/admin/edit-candidate.php b/admin/edit-candidate.php new file mode 100644 index 0000000..391e7d9 --- /dev/null +++ b/admin/edit-candidate.php @@ -0,0 +1,174 @@ + + + +
+
+
+

Edit Candidate

+
+
+
+ + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + + +
+ + + +
+ + +
+
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/admin/edit-question.php b/admin/edit-question.php new file mode 100644 index 0000000..61a3674 --- /dev/null +++ b/admin/edit-question.php @@ -0,0 +1,120 @@ + + + + +
+
+
+

Edit Question

+
+
+
+ + + + + + + + + + +
+ + +
+ + + +
+ + +
+
+
+
+
+
+ + diff --git a/admin/html/html.inc.php b/admin/html/html.inc.php new file mode 100644 index 0000000..9d26e34 --- /dev/null +++ b/admin/html/html.inc.php @@ -0,0 +1,130 @@ + + + + + + + <?php echo "Voting Advice Application :: ". $title; ?> + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Welcome

+ Logout +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/admin/images/Thumbs.db b/admin/images/Thumbs.db new file mode 100644 index 0000000..b9a512c Binary files /dev/null and b/admin/images/Thumbs.db differ diff --git a/admin/images/_btn_view_site.png b/admin/images/_btn_view_site.png new file mode 100644 index 0000000..02ffad8 Binary files /dev/null and b/admin/images/_btn_view_site.png differ diff --git a/admin/images/_header_bg.png b/admin/images/_header_bg.png new file mode 100644 index 0000000..5557df7 Binary files /dev/null and b/admin/images/_header_bg.png differ diff --git a/admin/images/_header_shadow.png b/admin/images/_header_shadow.png new file mode 100644 index 0000000..a1b8645 Binary files /dev/null and b/admin/images/_header_shadow.png differ diff --git a/admin/images/_login-button.png b/admin/images/_login-button.png new file mode 100644 index 0000000..bd39796 Binary files /dev/null and b/admin/images/_login-button.png differ diff --git a/admin/images/_login-title.png b/admin/images/_login-title.png new file mode 100644 index 0000000..1190e66 Binary files /dev/null and b/admin/images/_login-title.png differ diff --git a/admin/images/breadcrumb_divider.png b/admin/images/breadcrumb_divider.png new file mode 100644 index 0000000..af777f9 Binary files /dev/null and b/admin/images/breadcrumb_divider.png differ diff --git a/admin/images/btn_submit.png b/admin/images/btn_submit.png new file mode 100644 index 0000000..1266df5 Binary files /dev/null and b/admin/images/btn_submit.png differ diff --git a/admin/images/btn_submit_2.png b/admin/images/btn_submit_2.png new file mode 100644 index 0000000..3ca184b Binary files /dev/null and b/admin/images/btn_submit_2.png differ diff --git a/admin/images/btn_view_site.png b/admin/images/btn_view_site.png new file mode 100644 index 0000000..1bd71c8 Binary files /dev/null and b/admin/images/btn_view_site.png differ diff --git a/admin/images/header-bg.png b/admin/images/header-bg.png new file mode 100644 index 0000000..30d8e4b Binary files /dev/null and b/admin/images/header-bg.png differ diff --git a/admin/images/header_bg.png b/admin/images/header_bg.png new file mode 100644 index 0000000..a9e7877 Binary files /dev/null and b/admin/images/header_bg.png differ diff --git a/admin/images/header_shadow.png b/admin/images/header_shadow.png new file mode 100644 index 0000000..05e72ec Binary files /dev/null and b/admin/images/header_shadow.png differ diff --git a/admin/images/icn_add_user.png b/admin/images/icn_add_user.png new file mode 100644 index 0000000..ef0e209 Binary files /dev/null and b/admin/images/icn_add_user.png differ diff --git a/admin/images/icn_alert_error.png b/admin/images/icn_alert_error.png new file mode 100644 index 0000000..00461c8 Binary files /dev/null and b/admin/images/icn_alert_error.png differ diff --git a/admin/images/icn_alert_info.png b/admin/images/icn_alert_info.png new file mode 100644 index 0000000..1be971d Binary files /dev/null and b/admin/images/icn_alert_info.png differ diff --git a/admin/images/icn_alert_success.png b/admin/images/icn_alert_success.png new file mode 100644 index 0000000..d72f09e Binary files /dev/null and b/admin/images/icn_alert_success.png differ diff --git a/admin/images/icn_alert_warning.png b/admin/images/icn_alert_warning.png new file mode 100644 index 0000000..53f545a Binary files /dev/null and b/admin/images/icn_alert_warning.png differ diff --git a/admin/images/icn_audio.png b/admin/images/icn_audio.png new file mode 100644 index 0000000..0e1fd37 Binary files /dev/null and b/admin/images/icn_audio.png differ diff --git a/admin/images/icn_categories.png b/admin/images/icn_categories.png new file mode 100644 index 0000000..330e20f Binary files /dev/null and b/admin/images/icn_categories.png differ diff --git a/admin/images/icn_edit.png b/admin/images/icn_edit.png new file mode 100644 index 0000000..be8c68f Binary files /dev/null and b/admin/images/icn_edit.png differ diff --git a/admin/images/icn_edit_article.png b/admin/images/icn_edit_article.png new file mode 100644 index 0000000..5a7e2c2 Binary files /dev/null and b/admin/images/icn_edit_article.png differ diff --git a/admin/images/icn_folder.png b/admin/images/icn_folder.png new file mode 100644 index 0000000..03e4057 Binary files /dev/null and b/admin/images/icn_folder.png differ diff --git a/admin/images/icn_jump_back.png b/admin/images/icn_jump_back.png new file mode 100644 index 0000000..8cc4a68 Binary files /dev/null and b/admin/images/icn_jump_back.png differ diff --git a/admin/images/icn_logout.png b/admin/images/icn_logout.png new file mode 100644 index 0000000..ea274c5 Binary files /dev/null and b/admin/images/icn_logout.png differ diff --git a/admin/images/icn_new_article.png b/admin/images/icn_new_article.png new file mode 100644 index 0000000..23f57f7 Binary files /dev/null and b/admin/images/icn_new_article.png differ diff --git a/admin/images/icn_photo.png b/admin/images/icn_photo.png new file mode 100644 index 0000000..bf27b52 Binary files /dev/null and b/admin/images/icn_photo.png differ diff --git a/admin/images/icn_profile.png b/admin/images/icn_profile.png new file mode 100644 index 0000000..1821d29 Binary files /dev/null and b/admin/images/icn_profile.png differ diff --git a/admin/images/icn_search.png b/admin/images/icn_search.png new file mode 100644 index 0000000..f362e30 Binary files /dev/null and b/admin/images/icn_search.png differ diff --git a/admin/images/icn_security.png b/admin/images/icn_security.png new file mode 100644 index 0000000..ac0adbf Binary files /dev/null and b/admin/images/icn_security.png differ diff --git a/admin/images/icn_settings.png b/admin/images/icn_settings.png new file mode 100644 index 0000000..dfb5526 Binary files /dev/null and b/admin/images/icn_settings.png differ diff --git a/admin/images/icn_tags.png b/admin/images/icn_tags.png new file mode 100644 index 0000000..544a958 Binary files /dev/null and b/admin/images/icn_tags.png differ diff --git a/admin/images/icn_trash.png b/admin/images/icn_trash.png new file mode 100644 index 0000000..675820f Binary files /dev/null and b/admin/images/icn_trash.png differ diff --git a/admin/images/icn_user.png b/admin/images/icn_user.png new file mode 100644 index 0000000..955dce3 Binary files /dev/null and b/admin/images/icn_user.png differ diff --git a/admin/images/icn_video.png b/admin/images/icn_video.png new file mode 100644 index 0000000..2a06544 Binary files /dev/null and b/admin/images/icn_video.png differ diff --git a/admin/images/icn_view_users.png b/admin/images/icn_view_users.png new file mode 100644 index 0000000..46148d5 Binary files /dev/null and b/admin/images/icn_view_users.png differ diff --git a/admin/images/login-button.png b/admin/images/login-button.png new file mode 100644 index 0000000..21be7f7 Binary files /dev/null and b/admin/images/login-button.png differ diff --git a/admin/images/login-form-body-bg.png b/admin/images/login-form-body-bg.png new file mode 100644 index 0000000..bbd14ce Binary files /dev/null and b/admin/images/login-form-body-bg.png differ diff --git a/admin/images/login-title.png b/admin/images/login-title.png new file mode 100644 index 0000000..062c0e1 Binary files /dev/null and b/admin/images/login-title.png differ diff --git a/admin/images/logo.png b/admin/images/logo.png new file mode 100644 index 0000000..8cc5a23 Binary files /dev/null and b/admin/images/logo.png differ diff --git a/admin/images/module_footer_bg.png b/admin/images/module_footer_bg.png new file mode 100644 index 0000000..ace02f3 Binary files /dev/null and b/admin/images/module_footer_bg.png differ diff --git a/admin/images/password-input.png b/admin/images/password-input.png new file mode 100644 index 0000000..424045d Binary files /dev/null and b/admin/images/password-input.png differ diff --git a/admin/images/post_message.png b/admin/images/post_message.png new file mode 100644 index 0000000..add5480 Binary files /dev/null and b/admin/images/post_message.png differ diff --git a/admin/images/secondary_bar.png b/admin/images/secondary_bar.png new file mode 100644 index 0000000..42dbf1f Binary files /dev/null and b/admin/images/secondary_bar.png differ diff --git a/admin/images/secondary_bar_shadow.png b/admin/images/secondary_bar_shadow.png new file mode 100644 index 0000000..0f798df Binary files /dev/null and b/admin/images/secondary_bar_shadow.png differ diff --git a/admin/images/sidebar.png b/admin/images/sidebar.png new file mode 100644 index 0000000..7079be4 Binary files /dev/null and b/admin/images/sidebar.png differ diff --git a/admin/images/sidebar_divider.png b/admin/images/sidebar_divider.png new file mode 100644 index 0000000..e92be13 Binary files /dev/null and b/admin/images/sidebar_divider.png differ diff --git a/admin/images/sidebar_shadow.png b/admin/images/sidebar_shadow.png new file mode 100644 index 0000000..15226a8 Binary files /dev/null and b/admin/images/sidebar_shadow.png differ diff --git a/admin/images/table_sorter_header.png b/admin/images/table_sorter_header.png new file mode 100644 index 0000000..381778d Binary files /dev/null and b/admin/images/table_sorter_header.png differ diff --git a/admin/images/username-input.png b/admin/images/username-input.png new file mode 100644 index 0000000..4af8e64 Binary files /dev/null and b/admin/images/username-input.png differ diff --git a/admin/images/view.png b/admin/images/view.png new file mode 100644 index 0000000..2ec0b7e Binary files /dev/null and b/admin/images/view.png differ diff --git a/admin/images/vote.png b/admin/images/vote.png new file mode 100644 index 0000000..60dcb10 Binary files /dev/null and b/admin/images/vote.png differ diff --git a/admin/includes/functions.php b/admin/includes/functions.php new file mode 100644 index 0000000..748103b --- /dev/null +++ b/admin/includes/functions.php @@ -0,0 +1,156 @@ + $source_aspect_ratio ) + { + $thumbnail_image_width = ( int ) ( $thumbnail_image_height * $source_aspect_ratio ); + }else + { + $thumbnail_image_height = ( int ) ( $thumbnail_image_width / $source_aspect_ratio ); + } + + $thumbnail_gd_image = imagecreatetruecolor( $thumbnail_image_width, $thumbnail_image_height ); + /*var_export(imagecopyresampled( $thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height ) ); exit();*/ + imagecopyresampled( $thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height ); + + //var_export( imagejpeg( $thumbnail_gd_image, $thumbnail_image_path, 90 )); exit(); + imagejpeg( $thumbnail_gd_image, $thumbnail_image_path, 90 ); + + imagedestroy( $source_gd_image ); + + imagedestroy( $thumbnail_gd_image ); + + return true; +} + +/// Functions to display error messages +function successMsg($e) +{ + if($e == 1){ + $msg = "Password has been sent to your email."; + }if($e == 2){ + $msg = "Password has been updated."; + }if($e == 3){ + $msg = "Email has been updated."; + }if($e == 4){ + $msg = "Record has been added."; + }if($e == 5){ + $msg = "Record has been updated."; + }if($e == 6){ + $msg = "Record has been deleted."; + } + //echo "
$msg
"; + + ?> + + + + + + + + + \ No newline at end of file diff --git a/admin/index.php b/admin/index.php new file mode 100644 index 0000000..6cc4d55 --- /dev/null +++ b/admin/index.php @@ -0,0 +1,57 @@ + + +
+ + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/admin/js/accounts.js b/admin/js/accounts.js new file mode 100644 index 0000000..9ebbcc3 --- /dev/null +++ b/admin/js/accounts.js @@ -0,0 +1,60 @@ +// JavaScript Document +//login page javascript + +$(document).ready(function() { + // Change password form validation + $("#changePassForm").validate({ + rules: { + oldPassword: { + required: true, + equalTo: "#oldHidPass" + }, + newPassword: { + required: true, + minlength: 6 + }, + confirmPassword: { + required: true, + equalTo: "#newPassword" + } + }, + messages: { + oldPassword: { + required: "Enter old password.", + equalTo: "Wrong old password." + }, + newPassword: { + required: "Enter new password.", + minlength: "Enter at least 6 characters." + }, + confirmPassword: { + required: "Confirm new password.", + equalTo: "Enter same password as above." + } + } + }); + // Change Email form validation + $("#changeEmailForm").validate({ + rules: { + username: { + required: true, + equalTo: "#usernameHidd" + }, + newEmail: { + required: true, + email: true + } + }, + messages: { + username: { + required: "Enter old email.", + equalTo: "Old email did not match in the system." + }, + newEmail: { + required: "Enter new email address.", + email: "Invalid email address." + } + } + }); + +}); \ No newline at end of file diff --git a/admin/js/ddaccordion.js b/admin/js/ddaccordion.js new file mode 100644 index 0000000..8712cf8 --- /dev/null +++ b/admin/js/ddaccordion.js @@ -0,0 +1,209 @@ +//** Accordion Content script: By Dynamic Drive, at http://www.dynamicdrive.com +//** Created: Jan 7th, 08' + +//Version 1.3: April 3rd, 08': +//**1) Script now no longer conflicts with other JS frameworks +//**2) Adds custom oninit() and onopenclose() event handlers that fire when Accordion Content instance has initialized, plus whenever a header is opened/closed +//**3) Adds support for expanding header(s) using the URL parameter (ie: http://mysite.com/accordion.htm?headerclass=0,1) + +//April 9th, 08': Fixed "defaultexpanded" setting not working when page first loads + +//Version 1.4: June 4th, 08': +//**1) Added option to activate a header "mouseover" instead of the default "click" +//**2) Bug persistence not working when used with jquery 1.2.6 + +//Version 1.5: June 20th, 08': +//**1) Adds new "onemustopen:true/false" parameter, which lets you set whether at least one header should be open at all times (so never all closed). +//**2) Changed cookie path to site wide for persistence feature +//**3) Fixed bug so "expandedindices" parameter in oninit(headers, expandedindices) returns empty array [] instead of [-1] when no expanded headers found + +//**1) Version 1.5.1: June 27th, 08': Fixed "defaultexpanded" setting not working properly when used with jquery 1.2.6 + +//Version 1.6: Oct 3rd, 08': +//**1) Adds new "mouseoverdelay" param that sets delay before headers are activated when "revealtype" param is set to "mouseover" +//**2) Fixed bug with "onemustopen" param not working properly when "revealtype" is set to "click" + +//Version 1.7: March 24th, 09': Adds a 3rd revealtype setting "clickgo", which causes browser to navigate to URL specified inside the header after expanding its contents. + +//Version 1.7.1: May 28th, 09': Fixed issue that causes margins/paddings in accordion DIVs to be lost in IE8 + + +var ddaccordion={ + + contentclassname:{}, //object to store corresponding contentclass name based on headerclass + + expandone:function(headerclass, selected){ //PUBLIC function to expand a particular header + this.toggleone(headerclass, selected, "expand") + }, + + collapseone:function(headerclass, selected){ //PUBLIC function to collapse a particular header + this.toggleone(headerclass, selected, "collapse") + }, + + expandall:function(headerclass){ //PUBLIC function to expand all headers based on their shared CSS classname + var $=jQuery + var $headers=$('.'+headerclass) + $('.'+this.contentclassname[headerclass]+':hidden').each(function(){ + $headers.eq(parseInt($(this).attr('contentindex'))).trigger("evt_accordion") + }) + }, + + collapseall:function(headerclass){ //PUBLIC function to collapse all headers based on their shared CSS classname + var $=jQuery + var $headers=$('.'+headerclass) + $('.'+this.contentclassname[headerclass]+':visible').each(function(){ + $headers.eq(parseInt($(this).attr('contentindex'))).trigger("evt_accordion") + }) + }, + + toggleone:function(headerclass, selected, optstate){ //PUBLIC function to expand/ collapse a particular header + var $=jQuery + var $targetHeader=$('.'+headerclass).eq(selected) + var $subcontent=$('.'+this.contentclassname[headerclass]).eq(selected) + if (typeof optstate=="undefined" || optstate=="expand" && $subcontent.is(":hidden") || optstate=="collapse" && $subcontent.is(":visible")) + $targetHeader.trigger("evt_accordion") + }, + + expandit:function($targetHeader, $targetContent, config, useractivated, directclick){ + this.transformHeader($targetHeader, config, "expand") + $targetContent.slideDown(config.animatespeed, function(){ + config.onopenclose($targetHeader.get(0), parseInt($targetHeader.attr('headerindex')), $targetContent.css('display'), useractivated) + if (config.postreveal=="gotourl" && directclick){ //if revealtype is "Go to Header URL upon click", and this is a direct click on the header + var targetLink=($targetHeader.is("a"))? $targetHeader.get(0) : $targetHeader.find('a:eq(0)').get(0) + if (targetLink) //if this header is a link + setTimeout(function(){location=targetLink.href}, 200) //ignore link target, as window.open(targetLink, targetLink.target) doesn't work in FF if popup blocker enabled + } + }) + }, + + collapseit:function($targetHeader, $targetContent, config, isuseractivated){ + this.transformHeader($targetHeader, config, "collapse") + $targetContent.slideUp(config.animatespeed, function(){config.onopenclose($targetHeader.get(0), parseInt($targetHeader.attr('headerindex')), $targetContent.css('display'), isuseractivated)}) + }, + + transformHeader:function($targetHeader, config, state){ + $targetHeader.addClass((state=="expand")? config.cssclass.expand : config.cssclass.collapse) //alternate btw "expand" and "collapse" CSS classes + .removeClass((state=="expand")? config.cssclass.collapse : config.cssclass.expand) + if (config.htmlsetting.location=='src'){ //Change header image (assuming header is an image)? + $targetHeader=($targetHeader.is("img"))? $targetHeader : $targetHeader.find('img').eq(0) //Set target to either header itself, or first image within header + $targetHeader.attr('src', (state=="expand")? config.htmlsetting.expand : config.htmlsetting.collapse) //change header image + } + else if (config.htmlsetting.location=="prefix") //if change "prefix" HTML, locate dynamically added ".accordprefix" span tag and change it + $targetHeader.find('.accordprefix').html((state=="expand")? config.htmlsetting.expand : config.htmlsetting.collapse) + else if (config.htmlsetting.location=="suffix") + $targetHeader.find('.accordsuffix').html((state=="expand")? config.htmlsetting.expand : config.htmlsetting.collapse) + }, + + urlparamselect:function(headerclass){ + var result=window.location.search.match(new RegExp(headerclass+"=((\\d+)(,(\\d+))*)", "i")) //check for "?headerclass=2,3,4" in URL + if (result!=null) + result=RegExp.$1.split(',') + return result //returns null, [index], or [index1,index2,etc], where index are the desired selected header indices + }, + + getCookie:function(Name){ + var re=new RegExp(Name+"=[^;]+", "i") //construct RE to search for target name/value pair + if (document.cookie.match(re)) //if cookie found + return document.cookie.match(re)[0].split("=")[1] //return its value + return null + }, + + setCookie:function(name, value){ + document.cookie = name + "=" + value + "; path=/" + }, + + init:function(config){ + document.write(' + + +

+ FCKeditor Documentation

+

+ You can find the official documentation for FCKeditor online, at + http://docs.fckeditor.net/.

+ + diff --git a/admin/plugins/fckeditor/_upgrade.html b/admin/plugins/fckeditor/_upgrade.html new file mode 100644 index 0000000..54f7cce --- /dev/null +++ b/admin/plugins/fckeditor/_upgrade.html @@ -0,0 +1,39 @@ + + + + + FCKeditor - Upgrade + + + + +

+ FCKeditor Upgrade

+

+ Please check the following URL for notes regarding upgrade:
+ + http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Installation/Upgrading

+ + diff --git a/admin/plugins/fckeditor/_whatsnew.html b/admin/plugins/fckeditor/_whatsnew.html new file mode 100644 index 0000000..0f1d33d --- /dev/null +++ b/admin/plugins/fckeditor/_whatsnew.html @@ -0,0 +1,170 @@ + + + + + FCKeditor ChangeLog - What's New? + + + + +

+ FCKeditor ChangeLog - What's New?

+

+ Version 2.6.4

+

+ Fixed Bugs:

+ +

+ Version 2.6.4 Beta

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ See previous versions history

+ + diff --git a/admin/plugins/fckeditor/_whatsnew_history.html b/admin/plugins/fckeditor/_whatsnew_history.html new file mode 100644 index 0000000..1718d87 --- /dev/null +++ b/admin/plugins/fckeditor/_whatsnew_history.html @@ -0,0 +1,3916 @@ + + + + + FCKeditor ChangeLog - What's New? + + + + +

+ FCKeditor ChangeLog - What's New?

+

+ Version 2.6.3

+

+ Fixed Bugs:

+ +

+ This version has been sponsored by Data Illusion + survey software solutions.

+

+ Version 2.6.3 Beta

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ Version 2.6.2

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ Version 2.6.1

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ Version 2.6

+

+ No changes. The stabilization of the 2.6 RC was completed successfully, as expected.

+

+ Version 2.6 RC

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ Version 2.6 Beta 1

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ Version 2.5.1

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ Version 2.5

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ Version 2.5 Beta

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ # This version has been partially sponsored + by the Council of Europe. +

+

+ Version 2.4.3

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ Version 2.4.2

+

+ Fixed Bugs:

+ +

+ Version 2.4.1

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ Version 2.4

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ * This version has been partially sponsored by Medical + Media Lab.

+

+ Version 2.3.3

+

+ New Features and Improvements:

+ +

+ Version 2.3.2

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ Version 2.3.1

+

+ Fixed Bugs:

+ +

+ Version 2.3

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ * This version has been partially sponsored by Footsteps + and Kentico.

+

+ Version 2.3 Beta

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ * This version has been partially sponsored by Footsteps + and Kentico. +
+ ** This version has been partially sponsored by Nextide.

+

+ Version 2.2

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ Special thanks to + Alfonso Martinez, who have provided many patches and suggestions for the + following features / fixes present in this version. I encourage all you to + donate to Alfonso, as a way to say thanks for his nice open source approach. + Thanks Alfonso!. Check out his contributions:

+ +

+ * This version has been partially sponsored by + Alkacon Software.

+

+ Version 2.1.1

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ * This version has been partially sponsored by + Acctive Software S.A..

+

+ Version 2.1

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ Version 2.0

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ * This version has been partially sponsored by + Infineon Technologies AG.
+ ** This version has been partially sponsored by + Visualsoft Web Solutions.
+ *** This version has been partially sponsored by + Web Crossing, Inc.

+

+ Version 2.0 FC (Final Candidate)

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ * This version has been partially sponsored by the + Hamilton College.
+ ** This version has been partially sponsored by + Infineon Technologies AG.

+

+ Version 2.0 RC3 (Release Candidate 3)

+

+ New Features and Improvements:

+ +

+ Fixed Bugs:

+ +

+ Version 2.0 RC2 (Release Candidate 2)

+ +

+ Version 2.0 RC1 (Release Candidate 1)

+ +

+ Version 2.0 Beta 2

+ +

+ Version 2.0 Beta 1

+

+ This is the first beta of the 2.x series. It brings a lot of new and important things. + Beta versions will be released until all features available on version 1.x will + be introduced in the 2.0.
+
+ Note: As it is a beta, it is not yet completely developed. Future + versions can bring new features that can break backward compatibility with this + version. +

+ +

+ Version 1.6.1

+ +

+ * This version has been partially sponsored by Genuitec, + LLC.

+

+ Version 1.6

+ +

+ * This version has been partially sponsored by Genuitec, + LLC.

+

+ Version 1.5

+ +

+ Version 1.4

+ +

+ Version 1.3.1

+ +

+ Version 1.3

+ +

+ Version 1.2.4

+ +

+ Version 1.2.2

+ +

+ Version 1.2

+ +

+ Version 1.1

+ +

+ Version 1.0

+ +

+ Version 1.0 Final Candidate

+ +

+ Version 1.0 Release Candidate 1 (RC1)

+ +

+ Version 0.9.5 beta

+ +

+ Version 0.9.4 beta

+ + + diff --git a/admin/plugins/fckeditor/custom_config.js b/admin/plugins/fckeditor/custom_config.js new file mode 100644 index 0000000..4546590 --- /dev/null +++ b/admin/plugins/fckeditor/custom_config.js @@ -0,0 +1,64 @@ +/* + * Custom Configuration file + * + */ + + +// Allow QuickEdit style tags +FCKConfig.ProtectedSource.Add( /(]+>[\s|\S]*?<\/quickedit:[^\>]+>)|(]+\/>)/gi ); +// For snippet calls, uncomment the next two lines if you wish to hide snippet calls from FCK visual editing mode (only show in source mode) +// FCKConfig.ProtectedSource.Add( /\[\[[\s\S]*?\]\]/gi ); +// FCKConfig.ProtectedSource.Add( /\[\![\s\S]*?\!\]/gi ); + +/* * + * Language settings + * + */ +FCKConfig.AutoDetectLanguage = parent.FCKAutoLanguage; +FCKConfig.DefaultLanguage = parent.FCKDefaultLanguage; + +/* * + * Other Settings + * + */ +FCKConfig.FormatSource = false ; + +/* * + * setup toolbar sets + * + */ +// basic +FCKConfig.ToolbarSets["basic"] = [ + ['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','Image'] +]; +// standard +FCKConfig.ToolbarSets["standard"] = [ + ['Source','-','Preview','-','Templates'], + ['Cut','Copy','Paste','PasteText','PasteWord'], + ['Undo','Redo','-','Find','Replace','-','RemoveFormat'], + ['Bold','Italic','Underline'], + ['OrderedList','UnorderedList','-','Outdent','Indent'], + ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'], + ['Link','Anchor'], + ['Image','Flash','Table','Rule','SpecialChar'], + ['Style'],['FontFormat'],['FontName'],['FontSize'], + ['TextColor','BGColor'],['FitWindow','-','About'] +]; +// advanced +FCKConfig.ToolbarSets["advanced"] = [ + ['Source','DocProps','-','NewPage','Preview','-','Templates'], + ['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'], + ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'], + ['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'], + ['OrderedList','UnorderedList','-','Outdent','Indent'], + ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'], + ['Link','Unlink','Anchor'], + ['Image','Flash','Table','Rule','Smiley','SpecialChar'], + ['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'], + '/', + ['Style'],['FontFormat'],['FontName'],['FontSize'], + ['TextColor','BGColor'],['FitWindow','-','About'] +]; +// custom +FCKConfig.ToolbarSets["custom"] = parent.FCKCustomToolbarSet; + diff --git a/admin/plugins/fckeditor/editor/_source/classes/fckcontextmenu.js b/admin/plugins/fckeditor/editor/_source/classes/fckcontextmenu.js new file mode 100644 index 0000000..56027dc --- /dev/null +++ b/admin/plugins/fckeditor/editor/_source/classes/fckcontextmenu.js @@ -0,0 +1,223 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2009 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * FCKContextMenu Class: renders an control a context menu. + */ + +var FCKContextMenu = function( parentWindow, langDir ) +{ + this.CtrlDisable = false ; + + var oPanel = this._Panel = new FCKPanel( parentWindow ) ; + oPanel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ; + oPanel.IsContextMenu = true ; + + // The FCKTools.DisableSelection doesn't seems to work to avoid dragging of the icons in Mozilla + // so we stop the start of the dragging + if ( FCKBrowserInfo.IsGecko ) + oPanel.Document.addEventListener( 'draggesture', function(e) {e.preventDefault(); return false;}, true ) ; + + var oMenuBlock = this._MenuBlock = new FCKMenuBlock() ; + oMenuBlock.Panel = oPanel ; + oMenuBlock.OnClick = FCKTools.CreateEventListener( FCKContextMenu_MenuBlock_OnClick, this ) ; + + this._Redraw = true ; +} + + +FCKContextMenu.prototype.SetMouseClickWindow = function( mouseClickWindow ) +{ + if ( !FCKBrowserInfo.IsIE ) + { + this._Document = mouseClickWindow.document ; + if ( FCKBrowserInfo.IsOpera && !( 'oncontextmenu' in document.createElement('foo') ) ) + { + this._Document.addEventListener( 'mousedown', FCKContextMenu_Document_OnMouseDown, false ) ; + this._Document.addEventListener( 'mouseup', FCKContextMenu_Document_OnMouseUp, false ) ; + } + this._Document.addEventListener( 'contextmenu', FCKContextMenu_Document_OnContextMenu, false ) ; + } +} + +/** + The customData parameter is just a value that will be send to the command that is executed, + so it's possible to reuse the same command for several items just by assigning different data for each one. +*/ +FCKContextMenu.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) +{ + var oItem = this._MenuBlock.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ; + this._Redraw = true ; + return oItem ; +} + +FCKContextMenu.prototype.AddSeparator = function() +{ + this._MenuBlock.AddSeparator() ; + this._Redraw = true ; +} + +FCKContextMenu.prototype.RemoveAllItems = function() +{ + this._MenuBlock.RemoveAllItems() ; + this._Redraw = true ; +} + +FCKContextMenu.prototype.AttachToElement = function( element ) +{ + if ( FCKBrowserInfo.IsIE ) + FCKTools.AddEventListenerEx( element, 'contextmenu', FCKContextMenu_AttachedElement_OnContextMenu, this ) ; + else + element._FCKContextMenu = this ; +} + +function FCKContextMenu_Document_OnContextMenu( e ) +{ + if ( FCKConfig.BrowserContextMenu ) + return true ; + + var el = e.target ; + + while ( el ) + { + if ( el._FCKContextMenu ) + { + if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) ) + return true ; + + FCKTools.CancelEvent( e ) ; + FCKContextMenu_AttachedElement_OnContextMenu( e, el._FCKContextMenu, el ) ; + return false ; + } + el = el.parentNode ; + } + return true ; +} + +var FCKContextMenu_OverrideButton ; + +function FCKContextMenu_Document_OnMouseDown( e ) +{ + if( !e || e.button != 2 ) + return false ; + + if ( FCKConfig.BrowserContextMenu ) + return true ; + + var el = e.target ; + + while ( el ) + { + if ( el._FCKContextMenu ) + { + if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) ) + return true ; + + var overrideButton = FCKContextMenu_OverrideButton ; + if( !overrideButton ) + { + var doc = FCKTools.GetElementDocument( e.target ) ; + overrideButton = FCKContextMenu_OverrideButton = doc.createElement('input') ; + overrideButton.type = 'button' ; + var buttonHolder = doc.createElement('p') ; + doc.body.appendChild( buttonHolder ) ; + buttonHolder.appendChild( overrideButton ) ; + } + + overrideButton.style.cssText = 'position:absolute;top:' + ( e.clientY - 2 ) + + 'px;left:' + ( e.clientX - 2 ) + + 'px;width:5px;height:5px;opacity:0.01' ; + } + el = el.parentNode ; + } + return false ; +} + +function FCKContextMenu_Document_OnMouseUp( e ) +{ + if ( FCKConfig.BrowserContextMenu ) + return true ; + + var overrideButton = FCKContextMenu_OverrideButton ; + + if ( overrideButton ) + { + var parent = overrideButton.parentNode ; + parent.parentNode.removeChild( parent ) ; + FCKContextMenu_OverrideButton = undefined ; + + if( e && e.button == 2 ) + { + FCKContextMenu_Document_OnContextMenu( e ) ; + return false ; + } + } + return true ; +} + +function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el ) +{ + if ( ( fckContextMenu.CtrlDisable && ( ev.ctrlKey || ev.metaKey ) ) || FCKConfig.BrowserContextMenu ) + return true ; + + var eTarget = el || this ; + + if ( fckContextMenu.OnBeforeOpen ) + fckContextMenu.OnBeforeOpen.call( fckContextMenu, eTarget ) ; + + if ( fckContextMenu._MenuBlock.Count() == 0 ) + return false ; + + if ( fckContextMenu._Redraw ) + { + fckContextMenu._MenuBlock.Create( fckContextMenu._Panel.MainNode ) ; + fckContextMenu._Redraw = false ; + } + + // This will avoid that the content of the context menu can be dragged in IE + // as the content of the panel is recreated we need to do it every time + FCKTools.DisableSelection( fckContextMenu._Panel.Document.body ) ; + + var x = 0 ; + var y = 0 ; + if ( FCKBrowserInfo.IsIE ) + { + x = ev.screenX ; + y = ev.screenY ; + } + else if ( FCKBrowserInfo.IsSafari ) + { + x = ev.clientX ; + y = ev.clientY ; + } + else + { + x = ev.pageX ; + y = ev.pageY ; + } + fckContextMenu._Panel.Show( x, y, ev.currentTarget || null ) ; + + return false ; +} + +function FCKContextMenu_MenuBlock_OnClick( menuItem, contextMenu ) +{ + contextMenu._Panel.Hide() ; + FCKTools.RunFunction( contextMenu.OnItemClick, contextMenu, menuItem ) ; +} diff --git a/admin/plugins/fckeditor/editor/_source/classes/fckdataprocessor.js b/admin/plugins/fckeditor/editor/_source/classes/fckdataprocessor.js new file mode 100644 index 0000000..f0ac79d --- /dev/null +++ b/admin/plugins/fckeditor/editor/_source/classes/fckdataprocessor.js @@ -0,0 +1,119 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2009 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * The Data Processor is responsible for transforming the input and output data + * in the editor. For more info: + * http://dev.fckeditor.net/wiki/Components/DataProcessor + * + * The default implementation offers the base XHTML compatibility features of + * FCKeditor. Further Data Processors may be implemented for other purposes. + * + */ + +var FCKDataProcessor = function() +{} + +FCKDataProcessor.prototype = +{ + /* + * Returns a string representing the HTML format of "data". The returned + * value will be loaded in the editor. + * The HTML must be from to , including , and + * eventually the DOCTYPE. + * Note: HTML comments may already be part of the data because of the + * pre-processing made with ProtectedSource. + * @param {String} data The data to be converted in the + * DataProcessor specific format. + */ + ConvertToHtml : function( data ) + { + // The default data processor must handle two different cases depending + // on the FullPage setting. Custom Data Processors will not be + // compatible with FullPage, much probably. + if ( FCKConfig.FullPage ) + { + // Save the DOCTYPE. + FCK.DocTypeDeclaration = data.match( FCKRegexLib.DocTypeTag ) ; + + // Check if the tag is available. + if ( !FCKRegexLib.HasBodyTag.test( data ) ) + data = '' + data + '' ; + + // Check if the tag is available. + if ( !FCKRegexLib.HtmlOpener.test( data ) ) + data = '' + data + '' ; + + // Check if the tag is available. + if ( !FCKRegexLib.HeadOpener.test( data ) ) + data = data.replace( FCKRegexLib.HtmlOpener, '$&' ) ; + + return data ; + } + else + { + var html = + FCKConfig.DocType + + ' 0 && !FCKRegexLib.Html4DocType.test( FCKConfig.DocType ) ) + html += ' style="overflow-y: scroll"' ; + + html += '>' + + '' + + data + + '' ; + + return html ; + } + }, + + /* + * Converts a DOM (sub-)tree to a string in the data format. + * @param {Object} rootNode The node that contains the DOM tree to be + * converted to the data format. + * @param {Boolean} excludeRoot Indicates that the root node must not + * be included in the conversion, only its children. + * @param {Boolean} format Indicates that the data must be formatted + * for human reading. Not all Data Processors may provide it. + */ + ConvertToDataFormat : function( rootNode, excludeRoot, ignoreIfEmptyParagraph, format ) + { + var data = FCKXHtml.GetXHTML( rootNode, !excludeRoot, format ) ; + + if ( ignoreIfEmptyParagraph && FCKRegexLib.EmptyOutParagraph.test( data ) ) + return '' ; + + return data ; + }, + + /* + * Makes any necessary changes to a piece of HTML for insertion in the + * editor selection position. + * @param {String} html The HTML to be fixed. + */ + FixHtml : function( html ) + { + return html ; + } +} ; diff --git a/admin/plugins/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js b/admin/plugins/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js new file mode 100644 index 0000000..04a3099 --- /dev/null +++ b/admin/plugins/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js @@ -0,0 +1,53 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2009 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This is a generic Document Fragment object. It is not intended to provide + * the W3C implementation, but is a way to fix the missing of a real Document + * Fragment in IE (where document.createDocumentFragment() returns a normal + * document instead), giving a standard interface for it. + * (IE Implementation) + */ + +var FCKDocumentFragment = function( parentDocument, baseDocFrag ) +{ + this.RootNode = baseDocFrag || parentDocument.createDocumentFragment() ; +} + +FCKDocumentFragment.prototype = +{ + + // Append the contents of this Document Fragment to another element. + AppendTo : function( targetNode ) + { + targetNode.appendChild( this.RootNode ) ; + }, + + AppendHtml : function( html ) + { + var eTmpDiv = this.RootNode.ownerDocument.createElement( 'div' ) ; + eTmpDiv.innerHTML = html ; + FCKDomTools.MoveChildren( eTmpDiv, this.RootNode ) ; + }, + + InsertAfterNode : function( existingNode ) + { + FCKDomTools.InsertAfterNode( existingNode, this.RootNode ) ; + } +} diff --git a/admin/plugins/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js b/admin/plugins/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js new file mode 100644 index 0000000..d9e4b3d --- /dev/null +++ b/admin/plugins/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js @@ -0,0 +1,58 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2009 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This is a generic Document Fragment object. It is not intended to provide + * the W3C implementation, but is a way to fix the missing of a real Document + * Fragment in IE (where document.createDocumentFragment() returns a normal + * document instead), giving a standard interface for it. + * (IE Implementation) + */ + +var FCKDocumentFragment = function( parentDocument ) +{ + this._Document = parentDocument ; + this.RootNode = parentDocument.createElement( 'div' ) ; +} + +// Append the contents of this Document Fragment to another node. +FCKDocumentFragment.prototype = +{ + + AppendTo : function( targetNode ) + { + FCKDomTools.MoveChildren( this.RootNode, targetNode ) ; + }, + + AppendHtml : function( html ) + { + var eTmpDiv = this._Document.createElement( 'div' ) ; + eTmpDiv.innerHTML = html ; + FCKDomTools.MoveChildren( eTmpDiv, this.RootNode ) ; + }, + + InsertAfterNode : function( existingNode ) + { + var eRoot = this.RootNode ; + var eLast ; + + while( ( eLast = eRoot.lastChild ) ) + FCKDomTools.InsertAfterNode( existingNode, eRoot.removeChild( eLast ) ) ; + } +} ; diff --git a/admin/plugins/fckeditor/editor/_source/classes/fckdomrange.js b/admin/plugins/fckeditor/editor/_source/classes/fckdomrange.js new file mode 100644 index 0000000..b0912eb --- /dev/null +++ b/admin/plugins/fckeditor/editor/_source/classes/fckdomrange.js @@ -0,0 +1,935 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2009 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Class for working with a selection range, much like the W3C DOM Range, but + * it is not intended to be an implementation of the W3C interface. + */ + +var FCKDomRange = function( sourceWindow ) +{ + this.Window = sourceWindow ; + this._Cache = {} ; +} + +FCKDomRange.prototype = +{ + + _UpdateElementInfo : function() + { + var innerRange = this._Range ; + + if ( !innerRange ) + this.Release( true ) ; + else + { + // For text nodes, the node itself is the StartNode. + var eStart = innerRange.startContainer ; + + var oElementPath = new FCKElementPath( eStart ) ; + this.StartNode = eStart.nodeType == 3 ? eStart : eStart.childNodes[ innerRange.startOffset ] ; + this.StartContainer = eStart ; + this.StartBlock = oElementPath.Block ; + this.StartBlockLimit = oElementPath.BlockLimit ; + + if ( innerRange.collapsed ) + { + this.EndNode = this.StartNode ; + this.EndContainer = this.StartContainer ; + this.EndBlock = this.StartBlock ; + this.EndBlockLimit = this.StartBlockLimit ; + } + else + { + var eEnd = innerRange.endContainer ; + + if ( eStart != eEnd ) + oElementPath = new FCKElementPath( eEnd ) ; + + // The innerRange.endContainer[ innerRange.endOffset ] is not + // usually part of the range, but the marker for the range end. So, + // let's get the previous available node as the real end. + var eEndNode = eEnd ; + if ( innerRange.endOffset == 0 ) + { + while ( eEndNode && !eEndNode.previousSibling ) + eEndNode = eEndNode.parentNode ; + + if ( eEndNode ) + eEndNode = eEndNode.previousSibling ; + } + else if ( eEndNode.nodeType == 1 ) + eEndNode = eEndNode.childNodes[ innerRange.endOffset - 1 ] ; + + this.EndNode = eEndNode ; + this.EndContainer = eEnd ; + this.EndBlock = oElementPath.Block ; + this.EndBlockLimit = oElementPath.BlockLimit ; + } + } + + this._Cache = {} ; + }, + + CreateRange : function() + { + return new FCKW3CRange( this.Window.document ) ; + }, + + DeleteContents : function() + { + if ( this._Range ) + { + this._Range.deleteContents() ; + this._UpdateElementInfo() ; + } + }, + + ExtractContents : function() + { + if ( this._Range ) + { + var docFrag = this._Range.extractContents() ; + this._UpdateElementInfo() ; + return docFrag ; + } + return null ; + }, + + CheckIsCollapsed : function() + { + if ( this._Range ) + return this._Range.collapsed ; + + return false ; + }, + + Collapse : function( toStart ) + { + if ( this._Range ) + this._Range.collapse( toStart ) ; + + this._UpdateElementInfo() ; + }, + + Clone : function() + { + var oClone = FCKTools.CloneObject( this ) ; + + if ( this._Range ) + oClone._Range = this._Range.cloneRange() ; + + return oClone ; + }, + + MoveToNodeContents : function( targetNode ) + { + if ( !this._Range ) + this._Range = this.CreateRange() ; + + this._Range.selectNodeContents( targetNode ) ; + + this._UpdateElementInfo() ; + }, + + MoveToElementStart : function( targetElement ) + { + this.SetStart(targetElement,1) ; + this.SetEnd(targetElement,1) ; + }, + + // Moves to the first editing point inside a element. For example, in a + // element tree like "

Text

", the start editing point + // is "

^ Text

" (inside ). + MoveToElementEditStart : function( targetElement ) + { + var editableElement ; + + while ( targetElement && targetElement.nodeType == 1 ) + { + if ( FCKDomTools.CheckIsEditable( targetElement ) ) + editableElement = targetElement ; + else if ( editableElement ) + break ; // If we already found an editable element, stop the loop. + + targetElement = targetElement.firstChild ; + } + + if ( editableElement ) + this.MoveToElementStart( editableElement ) ; + }, + + InsertNode : function( node ) + { + if ( this._Range ) + this._Range.insertNode( node ) ; + }, + + CheckIsEmpty : function() + { + if ( this.CheckIsCollapsed() ) + return true ; + + // Inserts the contents of the range in a div tag. + var eToolDiv = this.Window.document.createElement( 'div' ) ; + this._Range.cloneContents().AppendTo( eToolDiv ) ; + + FCKDomTools.TrimNode( eToolDiv ) ; + + return ( eToolDiv.innerHTML.length == 0 ) ; + }, + + /** + * Checks if the start boundary of the current range is "visually" (like a + * selection caret) at the beginning of the block. It means that some + * things could be brefore the range, like spaces or empty inline elements, + * but it would still be considered at the beginning of the block. + */ + CheckStartOfBlock : function() + { + var cache = this._Cache ; + var bIsStartOfBlock = cache.IsStartOfBlock ; + + if ( bIsStartOfBlock != undefined ) + return bIsStartOfBlock ; + + // Take the block reference. + var block = this.StartBlock || this.StartBlockLimit ; + + var container = this._Range.startContainer ; + var offset = this._Range.startOffset ; + var currentNode ; + + if ( offset > 0 ) + { + // First, check the start container. If it is a text node, get the + // substring of the node value before the range offset. + if ( container.nodeType == 3 ) + { + var textValue = container.nodeValue.substr( 0, offset ).Trim() ; + + // If we have some text left in the container, we are not at + // the end for the block. + if ( textValue.length != 0 ) + return cache.IsStartOfBlock = false ; + } + else + currentNode = container.childNodes[ offset - 1 ] ; + } + + // We'll not have a currentNode if the container was a text node, or + // the offset is zero. + if ( !currentNode ) + currentNode = FCKDomTools.GetPreviousSourceNode( container, true, null, block ) ; + + while ( currentNode ) + { + switch ( currentNode.nodeType ) + { + case 1 : + // It's not an inline element. + if ( !FCKListsLib.InlineChildReqElements[ currentNode.nodeName.toLowerCase() ] ) + return cache.IsStartOfBlock = false ; + + break ; + + case 3 : + // It's a text node with real text. + if ( currentNode.nodeValue.Trim().length > 0 ) + return cache.IsStartOfBlock = false ; + } + + currentNode = FCKDomTools.GetPreviousSourceNode( currentNode, false, null, block ) ; + } + + return cache.IsStartOfBlock = true ; + }, + + /** + * Checks if the end boundary of the current range is "visually" (like a + * selection caret) at the end of the block. It means that some things + * could be after the range, like spaces, empty inline elements, or a + * single
, but it would still be considered at the end of the block. + */ + CheckEndOfBlock : function( refreshSelection ) + { + var isEndOfBlock = this._Cache.IsEndOfBlock ; + + if ( isEndOfBlock != undefined ) + return isEndOfBlock ; + + // Take the block reference. + var block = this.EndBlock || this.EndBlockLimit ; + + var container = this._Range.endContainer ; + var offset = this._Range.endOffset ; + var currentNode ; + + // First, check the end container. If it is a text node, get the + // substring of the node value after the range offset. + if ( container.nodeType == 3 ) + { + var textValue = container.nodeValue ; + if ( offset < textValue.length ) + { + textValue = textValue.substr( offset ) ; + + // If we have some text left in the container, we are not at + // the end for the block. + if ( textValue.Trim().length != 0 ) + return this._Cache.IsEndOfBlock = false ; + } + } + else + currentNode = container.childNodes[ offset ] ; + + // We'll not have a currentNode if the container was a text node, of + // the offset is out the container children limits (after it probably). + if ( !currentNode ) + currentNode = FCKDomTools.GetNextSourceNode( container, true, null, block ) ; + + var hadBr = false ; + + while ( currentNode ) + { + switch ( currentNode.nodeType ) + { + case 1 : + var nodeName = currentNode.nodeName.toLowerCase() ; + + // It's an inline element. + if ( FCKListsLib.InlineChildReqElements[ nodeName ] ) + break ; + + // It is the first
found. + if ( nodeName == 'br' && !hadBr ) + { + hadBr = true ; + break ; + } + + return this._Cache.IsEndOfBlock = false ; + + case 3 : + // It's a text node with real text. + if ( currentNode.nodeValue.Trim().length > 0 ) + return this._Cache.IsEndOfBlock = false ; + } + + currentNode = FCKDomTools.GetNextSourceNode( currentNode, false, null, block ) ; + } + + if ( refreshSelection ) + this.Select() ; + + return this._Cache.IsEndOfBlock = true ; + }, + + // This is an "intrusive" way to create a bookmark. It includes tags + // in the range boundaries. The advantage of it is that it is possible to + // handle DOM mutations when moving back to the bookmark. + // Attention: the inclusion of nodes in the DOM is a design choice and + // should not be changed as there are other points in the code that may be + // using those nodes to perform operations. See GetBookmarkNode. + // For performance, includeNodes=true if intended to SelectBookmark. + CreateBookmark : function( includeNodes ) + { + // Create the bookmark info (random IDs). + var oBookmark = + { + StartId : (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'S', + EndId : (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'E' + } ; + + var oDoc = this.Window.document ; + var eStartSpan ; + var eEndSpan ; + var oClone ; + + // For collapsed ranges, add just the start marker. + if ( !this.CheckIsCollapsed() ) + { + eEndSpan = oDoc.createElement( 'span' ) ; + eEndSpan.style.display = 'none' ; + eEndSpan.id = oBookmark.EndId ; + eEndSpan.setAttribute( '_fck_bookmark', true ) ; + + // For IE, it must have something inside, otherwise it may be + // removed during DOM operations. +// if ( FCKBrowserInfo.IsIE ) + eEndSpan.innerHTML = ' ' ; + + oClone = this.Clone() ; + oClone.Collapse( false ) ; + oClone.InsertNode( eEndSpan ) ; + } + + eStartSpan = oDoc.createElement( 'span' ) ; + eStartSpan.style.display = 'none' ; + eStartSpan.id = oBookmark.StartId ; + eStartSpan.setAttribute( '_fck_bookmark', true ) ; + + // For IE, it must have something inside, otherwise it may be removed + // during DOM operations. +// if ( FCKBrowserInfo.IsIE ) + eStartSpan.innerHTML = ' ' ; + + oClone = this.Clone() ; + oClone.Collapse( true ) ; + oClone.InsertNode( eStartSpan ) ; + + if ( includeNodes ) + { + oBookmark.StartNode = eStartSpan ; + oBookmark.EndNode = eEndSpan ; + } + + // Update the range position. + if ( eEndSpan ) + { + this.SetStart( eStartSpan, 4 ) ; + this.SetEnd( eEndSpan, 3 ) ; + } + else + this.MoveToPosition( eStartSpan, 4 ) ; + + return oBookmark ; + }, + + // This one should be a part of a hypothetic "bookmark" object. + GetBookmarkNode : function( bookmark, start ) + { + var doc = this.Window.document ; + + if ( start ) + return bookmark.StartNode || doc.getElementById( bookmark.StartId ) ; + else + return bookmark.EndNode || doc.getElementById( bookmark.EndId ) ; + }, + + MoveToBookmark : function( bookmark, preserveBookmark ) + { + var eStartSpan = this.GetBookmarkNode( bookmark, true ) ; + var eEndSpan = this.GetBookmarkNode( bookmark, false ) ; + + this.SetStart( eStartSpan, 3 ) ; + + if ( !preserveBookmark ) + FCKDomTools.RemoveNode( eStartSpan ) ; + + // If collapsed, the end span will not be available. + if ( eEndSpan ) + { + this.SetEnd( eEndSpan, 3 ) ; + + if ( !preserveBookmark ) + FCKDomTools.RemoveNode( eEndSpan ) ; + } + else + this.Collapse( true ) ; + + this._UpdateElementInfo() ; + }, + + // Non-intrusive bookmark algorithm + CreateBookmark2 : function() + { + // If there is no range then get out of here. + // It happens on initial load in Safari #962 and if the editor it's hidden also in Firefox + if ( ! this._Range ) + return { "Start" : 0, "End" : 0 } ; + + // First, we record down the offset values + var bookmark = + { + "Start" : [ this._Range.startOffset ], + "End" : [ this._Range.endOffset ] + } ; + // Since we're treating the document tree as normalized, we need to backtrack the text lengths + // of previous text nodes into the offset value. + var curStart = this._Range.startContainer.previousSibling ; + var curEnd = this._Range.endContainer.previousSibling ; + + // Also note that the node that we use for "address base" would change during backtracking. + var addrStart = this._Range.startContainer ; + var addrEnd = this._Range.endContainer ; + while ( curStart && curStart.nodeType == 3 && addrStart.nodeType == 3 ) + { + bookmark.Start[0] += curStart.length ; + addrStart = curStart ; + curStart = curStart.previousSibling ; + } + while ( curEnd && curEnd.nodeType == 3 && addrEnd.nodeType == 3 ) + { + bookmark.End[0] += curEnd.length ; + addrEnd = curEnd ; + curEnd = curEnd.previousSibling ; + } + + // If the object pointed to by the startOffset and endOffset are text nodes, we need + // to backtrack and add in the text offset to the bookmark addresses. + if ( addrStart.nodeType == 1 && addrStart.childNodes[bookmark.Start[0]] && addrStart.childNodes[bookmark.Start[0]].nodeType == 3 ) + { + var curNode = addrStart.childNodes[bookmark.Start[0]] ; + var offset = 0 ; + while ( curNode.previousSibling && curNode.previousSibling.nodeType == 3 ) + { + curNode = curNode.previousSibling ; + offset += curNode.length ; + } + addrStart = curNode ; + bookmark.Start[0] = offset ; + } + if ( addrEnd.nodeType == 1 && addrEnd.childNodes[bookmark.End[0]] && addrEnd.childNodes[bookmark.End[0]].nodeType == 3 ) + { + var curNode = addrEnd.childNodes[bookmark.End[0]] ; + var offset = 0 ; + while ( curNode.previousSibling && curNode.previousSibling.nodeType == 3 ) + { + curNode = curNode.previousSibling ; + offset += curNode.length ; + } + addrEnd = curNode ; + bookmark.End[0] = offset ; + } + + // Then, we record down the precise position of the container nodes + // by walking up the DOM tree and counting their childNode index + bookmark.Start = FCKDomTools.GetNodeAddress( addrStart, true ).concat( bookmark.Start ) ; + bookmark.End = FCKDomTools.GetNodeAddress( addrEnd, true ).concat( bookmark.End ) ; + return bookmark; + }, + + MoveToBookmark2 : function( bookmark ) + { + // Reverse the childNode counting algorithm in CreateBookmark2() + var curStart = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.Start.slice( 0, -1 ), true ) ; + var curEnd = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.End.slice( 0, -1 ), true ) ; + + // Generate the W3C Range object and update relevant data + this.Release( true ) ; + this._Range = new FCKW3CRange( this.Window.document ) ; + var startOffset = bookmark.Start[ bookmark.Start.length - 1 ] ; + var endOffset = bookmark.End[ bookmark.End.length - 1 ] ; + while ( curStart.nodeType == 3 && startOffset > curStart.length ) + { + if ( ! curStart.nextSibling || curStart.nextSibling.nodeType != 3 ) + break ; + startOffset -= curStart.length ; + curStart = curStart.nextSibling ; + } + while ( curEnd.nodeType == 3 && endOffset > curEnd.length ) + { + if ( ! curEnd.nextSibling || curEnd.nextSibling.nodeType != 3 ) + break ; + endOffset -= curEnd.length ; + curEnd = curEnd.nextSibling ; + } + this._Range.setStart( curStart, startOffset ) ; + this._Range.setEnd( curEnd, endOffset ) ; + this._UpdateElementInfo() ; + }, + + MoveToPosition : function( targetElement, position ) + { + this.SetStart( targetElement, position ) ; + this.Collapse( true ) ; + }, + + /* + * Moves the position of the start boundary of the range to a specific position + * relatively to a element. + * @position: + * 1 = After Start ^contents + * 2 = Before End contents^ + * 3 = Before Start ^contents + * 4 = After End contents^ + */ + SetStart : function( targetElement, position, noInfoUpdate ) + { + var oRange = this._Range ; + if ( !oRange ) + oRange = this._Range = this.CreateRange() ; + + switch( position ) + { + case 1 : // After Start ^contents + oRange.setStart( targetElement, 0 ) ; + break ; + + case 2 : // Before End contents^ + oRange.setStart( targetElement, targetElement.childNodes.length ) ; + break ; + + case 3 : // Before Start ^contents + oRange.setStartBefore( targetElement ) ; + break ; + + case 4 : // After End contents^ + oRange.setStartAfter( targetElement ) ; + } + + if ( !noInfoUpdate ) + this._UpdateElementInfo() ; + }, + + /* + * Moves the position of the start boundary of the range to a specific position + * relatively to a element. + * @position: + * 1 = After Start ^contents + * 2 = Before End contents^ + * 3 = Before Start ^contents + * 4 = After End contents^ + */ + SetEnd : function( targetElement, position, noInfoUpdate ) + { + var oRange = this._Range ; + if ( !oRange ) + oRange = this._Range = this.CreateRange() ; + + switch( position ) + { + case 1 : // After Start ^contents + oRange.setEnd( targetElement, 0 ) ; + break ; + + case 2 : // Before End contents^ + oRange.setEnd( targetElement, targetElement.childNodes.length ) ; + break ; + + case 3 : // Before Start ^contents + oRange.setEndBefore( targetElement ) ; + break ; + + case 4 : // After End contents^ + oRange.setEndAfter( targetElement ) ; + } + + if ( !noInfoUpdate ) + this._UpdateElementInfo() ; + }, + + Expand : function( unit ) + { + var oNode, oSibling ; + + switch ( unit ) + { + // Expand the range to include all inline parent elements if we are + // are in their boundary limits. + // For example (where [ ] are the range limits): + // Before => Some [Some sample text]. + // After => Some [Some sample text]. + case 'inline_elements' : + // Expand the start boundary. + if ( this._Range.startOffset == 0 ) + { + oNode = this._Range.startContainer ; + + if ( oNode.nodeType != 1 ) + oNode = oNode.previousSibling ? null : oNode.parentNode ; + + if ( oNode ) + { + while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] ) + { + this._Range.setStartBefore( oNode ) ; + + if ( oNode != oNode.parentNode.firstChild ) + break ; + + oNode = oNode.parentNode ; + } + } + } + + // Expand the end boundary. + oNode = this._Range.endContainer ; + var offset = this._Range.endOffset ; + + if ( ( oNode.nodeType == 3 && offset >= oNode.nodeValue.length ) || ( oNode.nodeType == 1 && offset >= oNode.childNodes.length ) || ( oNode.nodeType != 1 && oNode.nodeType != 3 ) ) + { + if ( oNode.nodeType != 1 ) + oNode = oNode.nextSibling ? null : oNode.parentNode ; + + if ( oNode ) + { + while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] ) + { + this._Range.setEndAfter( oNode ) ; + + if ( oNode != oNode.parentNode.lastChild ) + break ; + + oNode = oNode.parentNode ; + } + } + } + + break ; + + case 'block_contents' : + case 'list_contents' : + var boundarySet = FCKListsLib.BlockBoundaries ; + if ( unit == 'list_contents' || FCKConfig.EnterMode == 'br' ) + boundarySet = FCKListsLib.ListBoundaries ; + + if ( this.StartBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' ) + this.SetStart( this.StartBlock, 1 ) ; + else + { + // Get the start node for the current range. + oNode = this._Range.startContainer ; + + // If it is an element, get the node right before of it (in source order). + if ( oNode.nodeType == 1 ) + { + var lastNode = oNode.childNodes[ this._Range.startOffset ] ; + if ( lastNode ) + oNode = FCKDomTools.GetPreviousSourceNode( lastNode, true ) ; + else + oNode = oNode.lastChild || oNode ; + } + + // We must look for the left boundary, relative to the range + // start, which is limited by a block element. + while ( oNode + && ( oNode.nodeType != 1 + || ( oNode != this.StartBlockLimit + && !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) ) + { + this._Range.setStartBefore( oNode ) ; + oNode = oNode.previousSibling || oNode.parentNode ; + } + } + + if ( this.EndBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' && this.EndBlock.nodeName.toLowerCase() != 'li' ) + this.SetEnd( this.EndBlock, 2 ) ; + else + { + oNode = this._Range.endContainer ; + if ( oNode.nodeType == 1 ) + oNode = oNode.childNodes[ this._Range.endOffset ] || oNode.lastChild ; + + // We must look for the right boundary, relative to the range + // end, which is limited by a block element. + while ( oNode + && ( oNode.nodeType != 1 + || ( oNode != this.StartBlockLimit + && !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) ) + { + this._Range.setEndAfter( oNode ) ; + oNode = oNode.nextSibling || oNode.parentNode ; + } + + // In EnterMode='br', the end
boundary element must + // be included in the expanded range. + if ( oNode && oNode.nodeName.toLowerCase() == 'br' ) + this._Range.setEndAfter( oNode ) ; + } + + this._UpdateElementInfo() ; + } + }, + + /** + * Split the block element for the current range. It deletes the contents + * of the range and splits the block in the collapsed position, resulting + * in two sucessive blocks. The range is then positioned in the middle of + * them. + * + * It returns and object with the following properties: + * - PreviousBlock : a reference to the block element that preceeds + * the range after the split. + * - NextBlock : a reference to the block element that follows the + * range after the split. + * - WasStartOfBlock : a boolean indicating that the range was + * originaly at the start of the block. + * - WasEndOfBlock : a boolean indicating that the range was originaly + * at the end of the block. + * + * If the range was originaly at the start of the block, no split will happen + * and the PreviousBlock value will be null. The same is valid for the + * NextBlock value if the range was at the end of the block. + */ + SplitBlock : function( forceBlockTag ) + { + var blockTag = forceBlockTag || FCKConfig.EnterMode ; + + if ( !this._Range ) + this.MoveToSelection() ; + + // The range boundaries must be in the same "block limit" element. + if ( this.StartBlockLimit == this.EndBlockLimit ) + { + // Get the current blocks. + var eStartBlock = this.StartBlock ; + var eEndBlock = this.EndBlock ; + var oElementPath = null ; + + if ( blockTag != 'br' ) + { + if ( !eStartBlock ) + { + eStartBlock = this.FixBlock( true, blockTag ) ; + eEndBlock = this.EndBlock ; // FixBlock may have fixed the EndBlock too. + } + + if ( !eEndBlock ) + eEndBlock = this.FixBlock( false, blockTag ) ; + } + + // Get the range position. + var bIsStartOfBlock = ( eStartBlock != null && this.CheckStartOfBlock() ) ; + var bIsEndOfBlock = ( eEndBlock != null && this.CheckEndOfBlock() ) ; + + // Delete the current contents. + if ( !this.CheckIsEmpty() ) + this.DeleteContents() ; + + if ( eStartBlock && eEndBlock && eStartBlock == eEndBlock ) + { + if ( bIsEndOfBlock ) + { + oElementPath = new FCKElementPath( this.StartContainer ) ; + this.MoveToPosition( eEndBlock, 4 ) ; + eEndBlock = null ; + } + else if ( bIsStartOfBlock ) + { + oElementPath = new FCKElementPath( this.StartContainer ) ; + this.MoveToPosition( eStartBlock, 3 ) ; + eStartBlock = null ; + } + else + { + // Extract the contents of the block from the selection point to the end of its contents. + this.SetEnd( eStartBlock, 2 ) ; + var eDocFrag = this.ExtractContents() ; + + // Duplicate the block element after it. + eEndBlock = eStartBlock.cloneNode( false ) ; + eEndBlock.removeAttribute( 'id', false ) ; + + // Place the extracted contents in the duplicated block. + eDocFrag.AppendTo( eEndBlock ) ; + + FCKDomTools.InsertAfterNode( eStartBlock, eEndBlock ) ; + + this.MoveToPosition( eStartBlock, 4 ) ; + + // In Gecko, the last child node must be a bogus
. + // Note: bogus
added under