commit | author | age
|
48e9c1
|
1 |
<?php |
T |
2 |
|
|
3 |
/** |
|
4 |
* jQuery UI |
|
5 |
* |
|
6 |
* Provide the jQuery UI library with according themes. |
|
7 |
* |
142e7c
|
8 |
* @version 1.10.4 |
48e9c1
|
9 |
* @author Cor Bosman <roundcube@wa.ter.net> |
T |
10 |
* @author Thomas Bruederli <roundcube@gmail.com> |
07c6c6
|
11 |
* @license GNU GPLv3+ |
48e9c1
|
12 |
*/ |
T |
13 |
class jqueryui extends rcube_plugin |
|
14 |
{ |
|
15 |
public $noajax = true; |
142e7c
|
16 |
public $version = '1.10.4'; |
48e9c1
|
17 |
|
8a73fd
|
18 |
private static $features = array(); |
AM |
19 |
private static $ui_theme; |
|
20 |
|
48e9c1
|
21 |
public function init() |
T |
22 |
{ |
|
23 |
$rcmail = rcmail::get_instance(); |
|
24 |
$this->load_config(); |
|
25 |
|
|
26 |
// include UI scripts |
142e7c
|
27 |
$this->include_script("js/jquery-ui-$this->version.custom.min.js"); |
48e9c1
|
28 |
|
T |
29 |
// include UI stylesheet |
8a73fd
|
30 |
$skin = $rcmail->config->get('skin'); |
AM |
31 |
$ui_map = $rcmail->config->get('jquery_ui_skin_map', array()); |
142e7c
|
32 |
$ui_theme = $ui_map[$skin] ?: $skin; |
8a73fd
|
33 |
|
AM |
34 |
self::$ui_theme = $ui_theme; |
48e9c1
|
35 |
|
142e7c
|
36 |
if (file_exists($this->home . "/themes/$ui_theme/jquery-ui-$this->version.custom.css")) { |
TB |
37 |
$this->include_stylesheet("themes/$ui_theme/jquery-ui-$this->version.custom.css"); |
48e9c1
|
38 |
} |
T |
39 |
else { |
142e7c
|
40 |
$this->include_stylesheet("themes/larry/jquery-ui-$this->version.custom.css"); |
48e9c1
|
41 |
} |
T |
42 |
|
f86ee5
|
43 |
if ($ui_theme == 'larry') { |
TB |
44 |
// patch dialog position function in order to fully fit the close button into the window |
|
45 |
$rcmail->output->add_script("jQuery.extend(jQuery.ui.dialog.prototype.options.position, { |
|
46 |
using: function(pos) { |
edd256
|
47 |
var me = jQuery(this), |
TB |
48 |
offset = me.css(pos).offset(), |
|
49 |
topOffset = offset.top - 12; |
|
50 |
if (topOffset < 0) |
|
51 |
me.css('top', pos.top - topOffset); |
|
52 |
if (offset.left + me.outerWidth() + 12 > jQuery(window).width()) |
|
53 |
me.css('left', pos.left - 12); |
f86ee5
|
54 |
} |
TB |
55 |
});", 'foot'); |
|
56 |
} |
|
57 |
|
48e9c1
|
58 |
// jquery UI localization |
T |
59 |
$jquery_ui_i18n = $rcmail->config->get('jquery_ui_i18n', array('datepicker')); |
|
60 |
if (count($jquery_ui_i18n) > 0) { |
|
61 |
$lang_l = str_replace('_', '-', substr($_SESSION['language'], 0, 5)); |
|
62 |
$lang_s = substr($_SESSION['language'], 0, 2); |
8a73fd
|
63 |
|
48e9c1
|
64 |
foreach ($jquery_ui_i18n as $package) { |
T |
65 |
if (file_exists($this->home . "/js/i18n/jquery.ui.$package-$lang_l.js")) { |
|
66 |
$this->include_script("js/i18n/jquery.ui.$package-$lang_l.js"); |
|
67 |
} |
|
68 |
else |
|
69 |
if (file_exists($this->home . "/js/i18n/jquery.ui.$package-$lang_s.js")) { |
|
70 |
$this->include_script("js/i18n/jquery.ui.$package-$lang_s.js"); |
|
71 |
} |
|
72 |
} |
|
73 |
} |
|
74 |
|
|
75 |
// Date format for datepicker |
|
76 |
$date_format = $rcmail->config->get('date_format', 'Y-m-d'); |
|
77 |
$date_format = strtr($date_format, array( |
|
78 |
'y' => 'y', |
|
79 |
'Y' => 'yy', |
|
80 |
'm' => 'mm', |
|
81 |
'n' => 'm', |
|
82 |
'd' => 'dd', |
|
83 |
'j' => 'd', |
|
84 |
)); |
|
85 |
$rcmail->output->set_env('date_format', $date_format); |
|
86 |
} |
|
87 |
|
8a73fd
|
88 |
public static function miniColors() |
AM |
89 |
{ |
|
90 |
if (in_array('miniColors', self::$features)) { |
|
91 |
return; |
|
92 |
} |
|
93 |
|
|
94 |
self::$features[] = 'miniColors'; |
|
95 |
|
|
96 |
$ui_theme = self::$ui_theme; |
|
97 |
$rcube = rcube::get_instance(); |
|
98 |
$script = 'plugins/jqueryui/js/jquery.miniColors.min.js'; |
|
99 |
$css = "plugins/jqueryui/themes/$ui_theme/jquery.miniColors.css"; |
|
100 |
|
|
101 |
if (!file_exists(INSTALL_PATH . $css)) { |
|
102 |
$css = "plugins/jqueryui/themes/larry/jquery.miniColors.css"; |
|
103 |
} |
|
104 |
|
|
105 |
$rcube->output->include_css($css); |
|
106 |
$rcube->output->add_header(html::tag('script', array('type' => "text/javascript", 'src' => $script))); |
|
107 |
$rcube->output->add_script('$("input.colors").miniColors({colorValues: rcmail.env.mscolors})', 'docready'); |
|
108 |
$rcube->output->set_env('mscolors', self::get_color_values()); |
|
109 |
} |
|
110 |
|
|
111 |
/** |
|
112 |
* Return a (limited) list of color values to be used for calendar and category coloring |
|
113 |
* |
|
114 |
* @return mixed List for colors as hex values or false if no presets should be shown |
|
115 |
*/ |
|
116 |
public static function get_color_values() |
|
117 |
{ |
|
118 |
// selection from http://msdn.microsoft.com/en-us/library/aa358802%28v=VS.85%29.aspx |
|
119 |
return array('000000','006400','2F4F4F','800000','808000','008000', |
|
120 |
'008080','000080','800080','4B0082','191970','8B0000','008B8B', |
|
121 |
'00008B','8B008B','556B2F','8B4513','228B22','6B8E23','2E8B57', |
|
122 |
'B8860B','483D8B','A0522D','0000CD','A52A2A','00CED1','696969', |
|
123 |
'20B2AA','9400D3','B22222','C71585','3CB371','D2691E','DC143C', |
|
124 |
'DAA520','00FA9A','4682B4','7CFC00','9932CC','FF0000','FF4500', |
|
125 |
'FF8C00','FFA500','FFD700','FFFF00','9ACD32','32CD32','00FF00', |
|
126 |
'00FF7F','00FFFF','5F9EA0','00BFFF','0000FF','FF00FF','808080', |
|
127 |
'708090','CD853F','8A2BE2','778899','FF1493','48D1CC','1E90FF', |
|
128 |
'40E0D0','4169E1','6A5ACD','BDB76B','BA55D3','CD5C5C','ADFF2F', |
|
129 |
'66CDAA','FF6347','8FBC8B','DA70D6','BC8F8F','9370DB','DB7093', |
|
130 |
'FF7F50','6495ED','A9A9A9','F4A460','7B68EE','D2B48C','E9967A', |
|
131 |
'DEB887','FF69B4','FA8072','F08080','EE82EE','87CEEB','FFA07A', |
|
132 |
'F0E68C','DDA0DD','90EE90','7FFFD4','C0C0C0','87CEFA','B0C4DE', |
|
133 |
'98FB98','ADD8E6','B0E0E6','D8BFD8','EEE8AA','AFEEEE','D3D3D3', |
|
134 |
'FFDEAD' |
|
135 |
); |
|
136 |
} |
48e9c1
|
137 |
} |