diff --git a/README.md b/README.md index 769f3bf..80e9939 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,5 @@ # IRS IRS for Querisma ----------------- -* Application 資料夾存放前後控制端 -* Recourse 存放所使用的資源 -版本號:6.2
- -新增變動: CkFinder -1. recource/js/Ckeditor.js 更新
- 1.新增Auto方法
- 2.新增編輯器對編輯器輸出方法
-2. application/library/“ckeditor”、“ckfinder”
兩個函式庫,轉去/recource/內部 -3. application/view/Example新增範例
-4. Ckfinder使用方法見index.html -5. /IRS/User請給他+777,此為預設上傳路徑 -6. /recource/ckfinder/config.php請調整63行“BackEnd”內部的路徑 +www_v6 +新增見注意 diff --git a/Startquiz.php b/Startquiz.php new file mode 100644 index 0000000..a29dd1d --- /dev/null +++ b/Startquiz.php @@ -0,0 +1,195 @@ +checkMethod_teacher(); + $this->load->view('FOUNDCLASS/QuizPage.html'); + } + public function quizpageforstu(){ + //$this->checkMethod_teacher(); + $this->load->view('FOUNDCLASS/Popquiz.html'); + } + + public function getQuizinfo(){ + if($_SESSION['user']['user_Identity']==0){ + $this->load->library('MP_Cache'); + $data=array( + 'quiz_Id'=>(int)$_SESSION['course']['quiz_Id'], + ); + $data_return=$this->getquestion($data); + $cdata_set=array(); + $cdata_ans_set=array(); + for($i=0;$imp_cache->set_name($cdata_name)->get(); + if ($cdata === false){ + $cdata = $cdata_set; + $this->mp_cache->write($cdata,$cdata_name,7200); + } + + $cdata_name=$_SESSION['course']['class_Id'].'_'.$data['quiz_Id'].'_'.'ans'; + $cdata = $this->mp_cache->set_name($cdata_name)->get(); + if ($cdata === false){ + $cdata = $cdata_ans_set; + $this->mp_cache->write($cdata,$cdata_name,7200); + } + + echo json_encode($data_return); + + + }else if($_SESSION['user']['user_Identity']==1){ + $this->load->library('MP_Cache'); + $cdata_name=$_SESSION['classandquiz']['class_Id'].'_'.$_SESSION['classandquiz']['quiz_Id']; + $cdata = $this->mp_cache->get($cdata_name); + echo json_encode($cdata); + } + + } + public function getquestion($data){ + $this->load->model('Quiz_model','quiz'); + $this->load->model('Question_model','question'); + $res=$this->quiz->findknowedquiz($data); + $question_array=explode('_',$res[0]['irs_Quiz_Question_Id']); + $data_question=array(); + foreach($question_array as $a){ + if($a!='') + array_push($data_question,$a); + } + $result=$this->question->findselectQuestion($data_question); + $data_return=array(); + foreach($result as $b){ + array_push($data_return,$b["question_Content"],$b["question_Optiona"],$b["question_Optionb"],$b["question_Optionc"],$b["question_Optiond"],$b["question_Answer"],$b["question_Time"]); + } + return $data_return; + } + public function endquiz(){ + $this->load->library('MP_Cache'); + + $cdata = array( + 'endclass'=> 1 + ); + $cdata_name=$cdata_name=$_SESSION['course']['class_Id'].'_endclass'; + $this->mp_cache->write($cdata, $cdata_name,7200); + } + public function finishaction(){ + $this->load->model('This_class_model','this_class'); + $cdata_name=$_SESSION['course']['class_Id'].'_'.$_SESSION['course']['quiz_Id']; + $this->load->library('MP_Cache'); + $cdata_quiz = $this->mp_cache->set_name($cdata_name)->get(); + if ($cdata_quiz!== false){ + $this->mp_cache->delete($cdata_name); + } + $cdata=$_SESSION['course']['pin']; + $cdata_pin= $this->mp_cache->set_name($cdata)->get(); + if ($cdata_pin!== false){ + $this->mp_cache->delete($cdata); + } + $cdata=$_SESSION['course']['class_Id'].'_endclass'; + $cdata_endclss= $this->mp_cache->set_name($cdata)->get(); + if ($cdata_endclss!== false){ + $this->mp_cache->delete($cdata); + } + $this->load->model('Shadow_quiz_model','shadow_quiz'); + $data=array( + 'quiz_Id'=>$_SESSION['course']['quiz_Id'], + 'class_Id'=>$_SESSION['course']['class_Id'], + 'quiz_Score_List'=>'jason@100@',//需從前端皆值 + ); + $this->shadow_quiz->createShadow_quiz($data); + $this->load->model('Rollcall_model','rollcall'); + $roll_list=array( + 'class_Id'=>$_SESSION['course']['class_Id'], + 'rollcall_Name'=>$_SESSION['course']['course_Name'], + 'rollcall_Allmember'=>'jason'//需從前端皆值 + ); + $this->rollcall->createRollcall($roll_list); + $this->deletequestiontime(); + echo json_encode('OK'); + } + + public function setopinion(){//設置評價和刪除答案快取 + $cdata_name=$_SESSION['course']['class_Id'].'_'.$_SESSION['course']['quiz_Id'].'_'.'ans'; + $this->load->library('MP_Cache'); + $cdata_quiz_ans = $this->mp_cache->set_name($cdata_name)->get(); + if ($cdata_quiz_ans!== false){ + $this->mp_cache->delete($cdata_name); + } + $this->load->model('Shadow_quiz_model','shadow_quiz'); + $data=array( + 'quiz_Id'=>$_SESSION['course']['quiz_Id'], + 'class_Id'=>$_SESSION['course']['class_Id'], + ); + $opinion=array( + 'shadow_Quiz_opinion'=>'',//需從前端皆值 + ); + $this->shadow_quiz->updateShadow_quiz($data,$opinion); + } + + public function checkans(){//學生交卷並閱卷//單題適用 + $cdata_name=$_SESSION['classandquiz']['class_Id'].'_'.$_SESSION['classandquiz']['quiz_Id'].'_'.'ans'; + $this->load->library('MP_Cache'); + $cdata_quiz_ans = $this->mp_cache->set_name($cdata_name)->get(); + $cdata_name=$_SESSION['classandquiz']['class_Id'].'_time'; + $cdata_time = $this->mp_cache->set_name($cdata_name)->get(); + $anspoint = null; + $date=date_create(); + $checktime=date_timestamp_get($date); + if ($cdata_quiz_ans!== false){ + $anstime=$checktime-$cdata_time['time'];//學生答題時間 + $ansalltime=$_POST['ansalltime'];//題目總花時間 + $ans=$_POST['ans']; + $question_num=$_POST['question_num']; + if($ans==$cdata_quiz_ans[$question_num]){ + $anspoint=(1000/$ansalltime)*($anstime); + $anspoint=1000-(int)$anspoint; + } + else{ + $anspoint=0; + } + $this->load->model('Student_quiz_model','student_quiz'); + $data=array( + 'user_Id'=>$_SESSION['user']['user_Id'], + 'quiz_Id'=>$_SESSION['classandquiz']['quiz_Id'], + 'class_Id'=>$_SESSION['classandquiz']['class_Id'], + 'answer_List'=>$ans, + 'score_List'=>$anspoint, + 'student_Quiz_Total_Score'=>$anspoint, + ); + $this->student_quiz->createStudent_quiz($data); + } + echo json_encode($anspoint); + } + + public function setquestiontime(){//設置題目開始時間 + $this->load->library('MP_Cache'); + $date=date_create(); + $date=date_timestamp_get($date); + $cdata_name=$_SESSION['course']['class_Id'].'_time'; + $cdata = $this->mp_cache->set_name($cdata_name)->get(); + if ($cdata === false){ + $cdata = array( + 'time'=>$date, + ); + $this->mp_cache->write($cdata,$cdata_name,7200); + } + echo json_encode(True); + } + + public function deletequestiontime(){//刪除題目開始時間_教師用 + $this->load->library('MP_Cache'); + $cdata_name=$_SESSION['course']['class_Id'].'_time'; + $cdata_time = $this->mp_cache->set_name($cdata_name)->get(); + if ($cdata_time!== false){ + $this->mp_cache->delete($cdata_name); + } + } + + + + } diff --git a/UsersFiles/.ckfinder/cache/.htaccess b/UsersFiles/.ckfinder/cache/.htaccess new file mode 100644 index 0000000..c3c2d19 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/.htaccess @@ -0,0 +1,2 @@ +Order Deny,Allow +Deny from all diff --git a/UsersFiles/.ckfinder/cache/data/Files/537787532_377296(1).jpg.cache b/UsersFiles/.ckfinder/cache/data/Files/537787532_377296(1).jpg.cache new file mode 100644 index 0000000..3d34cc1 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Files/537787532_377296(1).jpg.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:2304;s:6:"height";i:4096;s:4:"size";i:2327276;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Files/537787532_377296.jpg.cache b/UsersFiles/.ckfinder/cache/data/Files/537787532_377296.jpg.cache new file mode 100644 index 0000000..3d34cc1 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Files/537787532_377296.jpg.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:2304;s:6:"height";i:4096;s:4:"size";i:2327276;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Files/59530998_p1(1).jpg.cache b/UsersFiles/.ckfinder/cache/data/Files/59530998_p1(1).jpg.cache new file mode 100644 index 0000000..ba37433 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Files/59530998_p1(1).jpg.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:500;s:6:"height";i:94;s:4:"size";i:11717;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Files/59530998_p1.jpg.cache b/UsersFiles/.ckfinder/cache/data/Files/59530998_p1.jpg.cache new file mode 100644 index 0000000..5531881 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Files/59530998_p1.jpg.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:4096;s:6:"height";i:768;s:4:"size";i:289390;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Files/IMG_0003.PNG.cache b/UsersFiles/.ckfinder/cache/data/Files/IMG_0003.PNG.cache new file mode 100644 index 0000000..8f8a03b --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Files/IMG_0003.PNG.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:500;s:6:"height";i:375;s:4:"size";i:95454;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Files/IMG_0009.JPG.cache b/UsersFiles/.ckfinder/cache/data/Files/IMG_0009.JPG.cache new file mode 100644 index 0000000..d788541 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Files/IMG_0009.JPG.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:291;s:6:"height";i:400;s:4:"size";i:34923;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Files/IMG_0055(1).PNG.cache b/UsersFiles/.ckfinder/cache/data/Files/IMG_0055(1).PNG.cache new file mode 100644 index 0000000..df039b5 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Files/IMG_0055(1).PNG.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:500;s:6:"height";i:281;s:4:"size";i:243083;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Files/IMG_0055.PNG.cache b/UsersFiles/.ckfinder/cache/data/Files/IMG_0055.PNG.cache new file mode 100644 index 0000000..df039b5 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Files/IMG_0055.PNG.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:500;s:6:"height";i:281;s:4:"size";i:243083;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Images/59530998_p1.jpg.cache b/UsersFiles/.ckfinder/cache/data/Images/59530998_p1.jpg.cache new file mode 100644 index 0000000..ba37433 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Images/59530998_p1.jpg.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:500;s:6:"height";i:94;s:4:"size";i:11717;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Images/IMG_0003(1).PNG.cache b/UsersFiles/.ckfinder/cache/data/Images/IMG_0003(1).PNG.cache new file mode 100644 index 0000000..8f8a03b --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Images/IMG_0003(1).PNG.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:500;s:6:"height";i:375;s:4:"size";i:95454;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Images/IMG_0003.PNG.cache b/UsersFiles/.ckfinder/cache/data/Images/IMG_0003.PNG.cache new file mode 100644 index 0000000..c7f514f --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Images/IMG_0003.PNG.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:1600;s:6:"height";i:1200;s:4:"size";i:803525;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Images/IMG_0004.JPG.cache b/UsersFiles/.ckfinder/cache/data/Images/IMG_0004.JPG.cache new file mode 100644 index 0000000..beafd03 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Images/IMG_0004.JPG.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:400;s:6:"height";i:400;s:4:"size";i:27790;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Images/IMG_0006.JPG.cache b/UsersFiles/.ckfinder/cache/data/Images/IMG_0006.JPG.cache new file mode 100644 index 0000000..50a84a2 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Images/IMG_0006.JPG.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:848;s:6:"height";i:1200;s:4:"size";i:170162;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Images/IMG_0018.JPG.cache b/UsersFiles/.ckfinder/cache/data/Images/IMG_0018.JPG.cache new file mode 100644 index 0000000..2a7b74e --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Images/IMG_0018.JPG.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:676;s:6:"height";i:492;s:4:"size";i:91147;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Images/IMG_0051.jpg.cache b/UsersFiles/.ckfinder/cache/data/Images/IMG_0051.jpg.cache new file mode 100644 index 0000000..8f77862 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Images/IMG_0051.jpg.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:500;s:6:"height";i:375;s:4:"size";i:6886;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/data/Images/image.jpg.cache b/UsersFiles/.ckfinder/cache/data/Images/image.jpg.cache new file mode 100644 index 0000000..4b982c1 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/data/Images/image.jpg.cache @@ -0,0 +1 @@ +a:3:{s:5:"width";i:1600;s:6:"height";i:1200;s:4:"size";i:122856;} \ No newline at end of file diff --git a/UsersFiles/.ckfinder/cache/thumbs/.htaccess b/UsersFiles/.ckfinder/cache/thumbs/.htaccess new file mode 100644 index 0000000..c3c2d19 --- /dev/null +++ b/UsersFiles/.ckfinder/cache/thumbs/.htaccess @@ -0,0 +1,2 @@ +Order Deny,Allow +Deny from all diff --git a/UsersFiles/.ckfinder/cache/thumbs/Files/537787532_377296(1).jpg/537787532_377296(1)__150x150.jpg b/UsersFiles/.ckfinder/cache/thumbs/Files/537787532_377296(1).jpg/537787532_377296(1)__150x150.jpg new file mode 100644 index 0000000..af039eb Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Files/537787532_377296(1).jpg/537787532_377296(1)__150x150.jpg differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Files/537787532_377296.jpg/537787532_377296__150x150.jpg b/UsersFiles/.ckfinder/cache/thumbs/Files/537787532_377296.jpg/537787532_377296__150x150.jpg new file mode 100644 index 0000000..af039eb Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Files/537787532_377296.jpg/537787532_377296__150x150.jpg differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Files/59530998_p1.jpg/59530998_p1__150x150.jpg b/UsersFiles/.ckfinder/cache/thumbs/Files/59530998_p1.jpg/59530998_p1__150x150.jpg new file mode 100644 index 0000000..c4f2933 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Files/59530998_p1.jpg/59530998_p1__150x150.jpg differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Files/59530998_p1.jpg/59530998_p1__300x300.jpg b/UsersFiles/.ckfinder/cache/thumbs/Files/59530998_p1.jpg/59530998_p1__300x300.jpg new file mode 100644 index 0000000..222041a Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Files/59530998_p1.jpg/59530998_p1__300x300.jpg differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0003.PNG/IMG_0003__150x150.PNG b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0003.PNG/IMG_0003__150x150.PNG new file mode 100644 index 0000000..39208f7 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0003.PNG/IMG_0003__150x150.PNG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0003.PNG/IMG_0003__300x300.PNG b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0003.PNG/IMG_0003__300x300.PNG new file mode 100644 index 0000000..33ddff0 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0003.PNG/IMG_0003__300x300.PNG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0003.PNG/IMG_0003__500x500.PNG b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0003.PNG/IMG_0003__500x500.PNG new file mode 100644 index 0000000..b590da0 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0003.PNG/IMG_0003__500x500.PNG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0009.JPG/IMG_0009__150x150.JPG b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0009.JPG/IMG_0009__150x150.JPG new file mode 100644 index 0000000..7481a93 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0009.JPG/IMG_0009__150x150.JPG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0009.JPG/IMG_0009__300x300.JPG b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0009.JPG/IMG_0009__300x300.JPG new file mode 100644 index 0000000..f1ec9a2 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0009.JPG/IMG_0009__300x300.JPG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0009.JPG/IMG_0009__500x500.JPG b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0009.JPG/IMG_0009__500x500.JPG new file mode 100644 index 0000000..c297862 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0009.JPG/IMG_0009__500x500.JPG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0055(1).PNG/IMG_0055(1)__300x300.PNG b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0055(1).PNG/IMG_0055(1)__300x300.PNG new file mode 100644 index 0000000..60f6e2a Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0055(1).PNG/IMG_0055(1)__300x300.PNG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0055.PNG/IMG_0055__300x300.PNG b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0055.PNG/IMG_0055__300x300.PNG new file mode 100644 index 0000000..60f6e2a Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Files/IMG_0055.PNG/IMG_0055__300x300.PNG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/59530998_p1.jpg/59530998_p1__150x150.jpg b/UsersFiles/.ckfinder/cache/thumbs/Images/59530998_p1.jpg/59530998_p1__150x150.jpg new file mode 100644 index 0000000..9b26602 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/59530998_p1.jpg/59530998_p1__150x150.jpg differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0003(1).PNG/IMG_0003(1)__300x300.PNG b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0003(1).PNG/IMG_0003(1)__300x300.PNG new file mode 100644 index 0000000..33ddff0 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0003(1).PNG/IMG_0003(1)__300x300.PNG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0003.PNG/IMG_0003__150x150.PNG b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0003.PNG/IMG_0003__150x150.PNG new file mode 100644 index 0000000..8927b4d Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0003.PNG/IMG_0003__150x150.PNG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0003.PNG/IMG_0003__300x300.PNG b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0003.PNG/IMG_0003__300x300.PNG new file mode 100644 index 0000000..81c14a2 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0003.PNG/IMG_0003__300x300.PNG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0003.PNG/IMG_0003__500x500.PNG b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0003.PNG/IMG_0003__500x500.PNG new file mode 100644 index 0000000..d946bd6 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0003.PNG/IMG_0003__500x500.PNG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0004.JPG/IMG_0004__300x300.JPG b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0004.JPG/IMG_0004__300x300.JPG new file mode 100644 index 0000000..5599db5 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0004.JPG/IMG_0004__300x300.JPG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0006.JPG/IMG_0006__150x150.JPG b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0006.JPG/IMG_0006__150x150.JPG new file mode 100644 index 0000000..9fb22e6 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0006.JPG/IMG_0006__150x150.JPG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0006.JPG/IMG_0006__300x300.JPG b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0006.JPG/IMG_0006__300x300.JPG new file mode 100644 index 0000000..006981c Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0006.JPG/IMG_0006__300x300.JPG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0006.JPG/IMG_0006__500x500.JPG b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0006.JPG/IMG_0006__500x500.JPG new file mode 100644 index 0000000..61b9984 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0006.JPG/IMG_0006__500x500.JPG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0018.JPG/IMG_0018__150x150.JPG b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0018.JPG/IMG_0018__150x150.JPG new file mode 100644 index 0000000..9416693 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0018.JPG/IMG_0018__150x150.JPG differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0051.jpg/IMG_0051__300x300.jpg b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0051.jpg/IMG_0051__300x300.jpg new file mode 100644 index 0000000..ea036d5 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/IMG_0051.jpg/IMG_0051__300x300.jpg differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/image.jpg/image__150x150.jpg b/UsersFiles/.ckfinder/cache/thumbs/Images/image.jpg/image__150x150.jpg new file mode 100644 index 0000000..34b33c0 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/image.jpg/image__150x150.jpg differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/image.jpg/image__300x300.jpg b/UsersFiles/.ckfinder/cache/thumbs/Images/image.jpg/image__300x300.jpg new file mode 100644 index 0000000..02106c8 Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/image.jpg/image__300x300.jpg differ diff --git a/UsersFiles/.ckfinder/cache/thumbs/Images/image.jpg/image__500x500.jpg b/UsersFiles/.ckfinder/cache/thumbs/Images/image.jpg/image__500x500.jpg new file mode 100644 index 0000000..d7727bc Binary files /dev/null and b/UsersFiles/.ckfinder/cache/thumbs/Images/image.jpg/image__500x500.jpg differ diff --git a/UsersFiles/.ckfinder/logs/.htaccess b/UsersFiles/.ckfinder/logs/.htaccess new file mode 100644 index 0000000..c3c2d19 --- /dev/null +++ b/UsersFiles/.ckfinder/logs/.htaccess @@ -0,0 +1,2 @@ +Order Deny,Allow +Deny from all diff --git a/UsersFiles/.ckfinder/logs/error.log b/UsersFiles/.ckfinder/logs/error.log new file mode 100644 index 0000000..cd5a338 --- /dev/null +++ b/UsersFiles/.ckfinder/logs/error.log @@ -0,0 +1,13 @@ +[2018-01-18 15:36:25] CKFinder.ERROR: CKSource\CKFinder\Exception\InvalidCsrfTokenException: Invalid CSRF token. in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php:241 Stack trace: #0 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(509): CKSource\CKFinder\CKFinder->checkCsrfToken(Object(Symfony\Component\HttpFoundation\Request)) #1 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(567): CKSource\CKFinder\CKFinder->boot(Object(Symfony\Component\HttpFoundation\Request)) #2 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #4 {main} [] [] +[2018-01-18 15:36:39] CKFinder.ERROR: CKSource\CKFinder\Exception\InvalidCsrfTokenException: Invalid CSRF token. in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php:241 Stack trace: #0 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(509): CKSource\CKFinder\CKFinder->checkCsrfToken(Object(Symfony\Component\HttpFoundation\Request)) #1 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(567): CKSource\CKFinder\CKFinder->boot(Object(Symfony\Component\HttpFoundation\Request)) #2 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #4 {main} [] [] +[2018-01-18 15:36:49] CKFinder.ERROR: Symfony\Component\HttpFoundation\File\Exception\FileException: The file "IMG_0050.jpg" exceeds your upload_max_filesize ini directive (limit is 2048 KiB). in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-foundation/File/UploadedFile.php:235 Stack trace: #0 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/UploadedFile.php(78): Symfony\Component\HttpFoundation\File\UploadedFile->move('/tmp', 'ckfaB9I5n') #1 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/FileUpload.php(67): CKSource\CKFinder\Filesystem\File\UploadedFile->__construct(Object(Symfony\Component\HttpFoundation\File\UploadedFile), Object(CKSource\CKFinder\CKFinder)) #2 [internal function]: CKSource\CKFinder\Command\FileUpload->execute(Object(Symfony\Component\HttpFoundation\Request), Object(CKSource\CKFinder\Filesystem\Folder\WorkingFolder), Object(Symfony\Component\EventDispatcher\EventDispatcher), Object(CKSource\CKFinder\Config), Object(CKSource\CKFinder\Cache\CacheManager), Object(CKSource\CKFinder\Thumbnail\ThumbnailRepository)) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(144): call_user_func_array(Array, Array) #4 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(64): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #5 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(575): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #6 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #7 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #8 {main} Next CKSource\CKFinder\Exception\InvalidUploadException: The file "IMG_0050.jpg" exceeds your upload_max_filesize ini directive (limit is 2048 KiB). in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/UploadedFile.php:84 Stack trace: #0 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/FileUpload.php(67): CKSource\CKFinder\Filesystem\File\UploadedFile->__construct(Object(Symfony\Component\HttpFoundation\File\UploadedFile), Object(CKSource\CKFinder\CKFinder)) #1 [internal function]: CKSource\CKFinder\Command\FileUpload->execute(Object(Symfony\Component\HttpFoundation\Request), Object(CKSource\CKFinder\Filesystem\Folder\WorkingFolder), Object(Symfony\Component\EventDispatcher\EventDispatcher), Object(CKSource\CKFinder\Config), Object(CKSource\CKFinder\Cache\CacheManager), Object(CKSource\CKFinder\Thumbnail\ThumbnailRepository)) #2 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(144): call_user_func_array(Array, Array) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(64): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #4 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(575): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #5 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #6 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #7 {main} [] [] +[2018-01-18 15:37:23] CKFinder.ERROR: CKSource\CKFinder\Exception\InvalidCsrfTokenException: Invalid CSRF token. in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php:241 Stack trace: #0 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(509): CKSource\CKFinder\CKFinder->checkCsrfToken(Object(Symfony\Component\HttpFoundation\Request)) #1 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(567): CKSource\CKFinder\CKFinder->boot(Object(Symfony\Component\HttpFoundation\Request)) #2 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #4 {main} [] [] +[2018-01-18 15:37:51] CKFinder.ERROR: CKSource\CKFinder\Exception\MethodNotAllowedException: CKFinder command FileUpload expects to be called with POST HTTP request. Actual method: GET in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CommandResolver.php:143 Stack trace: #0 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(132): CKSource\CKFinder\CommandResolver->getController(Object(Symfony\Component\HttpFoundation\Request)) #1 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(64): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #2 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(575): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #4 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #5 {main} [] [] +[2018-01-18 15:44:23] CKFinder.ERROR: CKSource\CKFinder\Exception\InvalidCsrfTokenException: Invalid CSRF token. in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php:241 Stack trace: #0 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(509): CKSource\CKFinder\CKFinder->checkCsrfToken(Object(Symfony\Component\HttpFoundation\Request)) #1 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(567): CKSource\CKFinder\CKFinder->boot(Object(Symfony\Component\HttpFoundation\Request)) #2 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #4 {main} [] [] +[2018-01-18 15:53:06] CKFinder.ERROR: Symfony\Component\HttpFoundation\File\Exception\FileException: The file "IMG_0050.jpg" exceeds your upload_max_filesize ini directive (limit is 2048 KiB). in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-foundation/File/UploadedFile.php:235 Stack trace: #0 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/UploadedFile.php(78): Symfony\Component\HttpFoundation\File\UploadedFile->move('/tmp', 'ckfiFVHCL') #1 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/FileUpload.php(67): CKSource\CKFinder\Filesystem\File\UploadedFile->__construct(Object(Symfony\Component\HttpFoundation\File\UploadedFile), Object(CKSource\CKFinder\CKFinder)) #2 [internal function]: CKSource\CKFinder\Command\FileUpload->execute(Object(Symfony\Component\HttpFoundation\Request), Object(CKSource\CKFinder\Filesystem\Folder\WorkingFolder), Object(Symfony\Component\EventDispatcher\EventDispatcher), Object(CKSource\CKFinder\Config), Object(CKSource\CKFinder\Cache\CacheManager), Object(CKSource\CKFinder\Thumbnail\ThumbnailRepository)) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(144): call_user_func_array(Array, Array) #4 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(64): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #5 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(575): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #6 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #7 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #8 {main} Next CKSource\CKFinder\Exception\InvalidUploadException: The file "IMG_0050.jpg" exceeds your upload_max_filesize ini directive (limit is 2048 KiB). in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/UploadedFile.php:84 Stack trace: #0 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/FileUpload.php(67): CKSource\CKFinder\Filesystem\File\UploadedFile->__construct(Object(Symfony\Component\HttpFoundation\File\UploadedFile), Object(CKSource\CKFinder\CKFinder)) #1 [internal function]: CKSource\CKFinder\Command\FileUpload->execute(Object(Symfony\Component\HttpFoundation\Request), Object(CKSource\CKFinder\Filesystem\Folder\WorkingFolder), Object(Symfony\Component\EventDispatcher\EventDispatcher), Object(CKSource\CKFinder\Config), Object(CKSource\CKFinder\Cache\CacheManager), Object(CKSource\CKFinder\Thumbnail\ThumbnailRepository)) #2 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(144): call_user_func_array(Array, Array) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(64): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #4 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(575): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #5 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #6 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #7 {main} [] [] +[2018-01-18 15:53:16] CKFinder.ERROR: CKSource\CKFinder\Exception\InvalidCsrfTokenException: Invalid CSRF token. in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php:241 Stack trace: #0 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(509): CKSource\CKFinder\CKFinder->checkCsrfToken(Object(Symfony\Component\HttpFoundation\Request)) #1 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(567): CKSource\CKFinder\CKFinder->boot(Object(Symfony\Component\HttpFoundation\Request)) #2 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #4 {main} [] [] +[2018-01-18 16:02:51] CKFinder.ERROR: CKSource\CKFinder\Exception\InvalidUploadException: Uploaded file is too big in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/FileUpload.php:133 Stack trace: #0 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/QuickUpload.php(43): CKSource\CKFinder\Command\FileUpload->execute(Object(Symfony\Component\HttpFoundation\Request), Object(CKSource\CKFinder\Filesystem\Folder\WorkingFolder), Object(Symfony\Component\EventDispatcher\EventDispatcher), Object(CKSource\CKFinder\Config), Object(CKSource\CKFinder\Cache\CacheManager), Object(CKSource\CKFinder\Thumbnail\ThumbnailRepository)) #1 [internal function]: CKSource\CKFinder\Command\QuickUpload->execute(Object(Symfony\Component\HttpFoundation\Request), Object(CKSource\CKFinder\Filesystem\Folder\WorkingFolder), Object(Symfony\Component\EventDispatcher\EventDispatcher), Object(CKSource\CKFinder\Config), Object(CKSource\CKFinder\Cache\CacheManager), Object(CKSource\CKFinder\Thumbnail\ThumbnailRepository)) #2 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(144): call_user_func_array(Array, Array) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(64): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #4 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(575): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #5 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #6 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #7 {main} [] [] +[2018-01-18 16:03:04] CKFinder.ERROR: CKSource\CKFinder\Exception\InvalidUploadException: Uploaded file is too big in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/FileUpload.php:133 Stack trace: #0 [internal function]: CKSource\CKFinder\Command\FileUpload->execute(Object(Symfony\Component\HttpFoundation\Request), Object(CKSource\CKFinder\Filesystem\Folder\WorkingFolder), Object(Symfony\Component\EventDispatcher\EventDispatcher), Object(CKSource\CKFinder\Config), Object(CKSource\CKFinder\Cache\CacheManager), Object(CKSource\CKFinder\Thumbnail\ThumbnailRepository)) #1 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(144): call_user_func_array(Array, Array) #2 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(64): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(575): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #4 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #5 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #6 {main} [] [] +[2018-01-18 16:04:05] CKFinder.ERROR: CKSource\CKFinder\Exception\InvalidUploadException: Uploaded file is too big in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/FileUpload.php:133 Stack trace: #0 [internal function]: CKSource\CKFinder\Command\FileUpload->execute(Object(Symfony\Component\HttpFoundation\Request), Object(CKSource\CKFinder\Filesystem\Folder\WorkingFolder), Object(Symfony\Component\EventDispatcher\EventDispatcher), Object(CKSource\CKFinder\Config), Object(CKSource\CKFinder\Cache\CacheManager), Object(CKSource\CKFinder\Thumbnail\ThumbnailRepository)) #1 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(144): call_user_func_array(Array, Array) #2 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(64): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(575): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #4 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #5 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #6 {main} [] [] +[2018-01-18 16:04:17] CKFinder.ERROR: CKSource\CKFinder\Exception\InvalidUploadException: Uploaded file is too big in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/FileUpload.php:133 Stack trace: #0 [internal function]: CKSource\CKFinder\Command\FileUpload->execute(Object(Symfony\Component\HttpFoundation\Request), Object(CKSource\CKFinder\Filesystem\Folder\WorkingFolder), Object(Symfony\Component\EventDispatcher\EventDispatcher), Object(CKSource\CKFinder\Config), Object(CKSource\CKFinder\Cache\CacheManager), Object(CKSource\CKFinder\Thumbnail\ThumbnailRepository)) #1 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(144): call_user_func_array(Array, Array) #2 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(64): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(575): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #4 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #5 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #6 {main} [] [] +[2018-01-18 16:04:25] CKFinder.ERROR: CKSource\CKFinder\Exception\InvalidUploadException: Uploaded file is too big in /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/FileUpload.php:133 Stack trace: #0 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/QuickUpload.php(43): CKSource\CKFinder\Command\FileUpload->execute(Object(Symfony\Component\HttpFoundation\Request), Object(CKSource\CKFinder\Filesystem\Folder\WorkingFolder), Object(Symfony\Component\EventDispatcher\EventDispatcher), Object(CKSource\CKFinder\Config), Object(CKSource\CKFinder\Cache\CacheManager), Object(CKSource\CKFinder\Thumbnail\ThumbnailRepository)) #1 [internal function]: CKSource\CKFinder\Command\QuickUpload->execute(Object(Symfony\Component\HttpFoundation\Request), Object(CKSource\CKFinder\Filesystem\Folder\WorkingFolder), Object(Symfony\Component\EventDispatcher\EventDispatcher), Object(CKSource\CKFinder\Config), Object(CKSource\CKFinder\Cache\CacheManager), Object(CKSource\CKFinder\Thumbnail\ThumbnailRepository)) #2 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(144): call_user_func_array(Array, Array) #3 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/symfony/http-kernel/HttpKernel.php(64): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #4 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(575): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #5 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php(313): CKSource\CKFinder\CKFinder->handle(Object(Symfony\Component\HttpFoundation\Request)) #6 /home/tlogben0709/public_html/www/Example/lib/ckfinder/core/connector/php/connector.php(20): CKSource\CKFinder\CKFinder->run() #7 {main} [] [] diff --git a/UsersFiles/.htaccess b/UsersFiles/.htaccess new file mode 100644 index 0000000..48dd490 --- /dev/null +++ b/UsersFiles/.htaccess @@ -0,0 +1,21 @@ + + php_flag engine Off + + + php_flag engine Off + + + php_flag engine Off + + + Options -ExecCGI + + +RemoveHandler .cgi .pl .py .pyc .pyo .phtml .php .php3 .php4 .php5 .php6 .pcgi .pcgi3 .pcgi4 .pcgi5 .pchi6 .inc +RemoveType .cgi .pl .py .pyc .pyo .phtml .php .php3 .php4 .php5 .php6 .pcgi .pcgi3 .pcgi4 .pcgi5 .pchi6 .inc +SetHandler None +SetHandler default-handler + +# Remove both lines below if you want to render HTML files from the upload folder +AddType text/plain .html +AddType text/plain .htm diff --git a/UsersFiles/.thumbs/images/59530998_p1.jpg b/UsersFiles/.thumbs/images/59530998_p1.jpg new file mode 100644 index 0000000..3e254fc Binary files /dev/null and b/UsersFiles/.thumbs/images/59530998_p1.jpg differ diff --git a/UsersFiles/.thumbs/images/IMG_0018.JPG b/UsersFiles/.thumbs/images/IMG_0018.JPG new file mode 100644 index 0000000..c1871b1 Binary files /dev/null and b/UsersFiles/.thumbs/images/IMG_0018.JPG differ diff --git "a/UsersFiles/.thumbs/images/IMG_0058 (\345\267\262\347\267\250\350\274\257).PNG" "b/UsersFiles/.thumbs/images/IMG_0058 (\345\267\262\347\267\250\350\274\257).PNG" new file mode 100644 index 0000000..07a3efb Binary files /dev/null and "b/UsersFiles/.thumbs/images/IMG_0058 (\345\267\262\347\267\250\350\274\257).PNG" differ diff --git "a/UsersFiles/files/\346\226\260\345\242\236\345\225\217\351\241\214.png" "b/UsersFiles/files/\346\226\260\345\242\236\345\225\217\351\241\214.png" new file mode 100644 index 0000000..52fc0a1 Binary files /dev/null and "b/UsersFiles/files/\346\226\260\345\242\236\345\225\217\351\241\214.png" differ diff --git "a/UsersFiles/images/IMG_0058 (\345\267\262\347\267\250\350\274\257).PNG" "b/UsersFiles/images/IMG_0058 (\345\267\262\347\267\250\350\274\257).PNG" new file mode 100644 index 0000000..4da90fd Binary files /dev/null and "b/UsersFiles/images/IMG_0058 (\345\267\262\347\267\250\350\274\257).PNG" differ diff --git a/additions/ckeditor/CHANGES.md b/additions/ckeditor/CHANGES.md new file mode 100644 index 0000000..ec90893 --- /dev/null +++ b/additions/ckeditor/CHANGES.md @@ -0,0 +1,1414 @@ +CKEditor 4 Changelog +==================== + +## CKEditor 4.8 + +**Important Notes:** + +* [#1249](https://github.com/ckeditor/ckeditor-dev/issues/1249): Enabled the [Upload Image](https://ckeditor.com/cke4/addon/uploadimage) plugin by default in standard and full presets. Also, it will no longer log an error in case of missing [`config.imageUploadUrl`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-imageUploadUrl) property. + +New Features: + +* [#933](https://github.com/ckeditor/ckeditor-dev/issues/933): Introduced [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) plugin. +* [#662](https://github.com/ckeditor/ckeditor-dev/issues/662): Introduced image inlining for the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#468](https://github.com/ckeditor/ckeditor-dev/issues/468): [Edge] Introduced support for the Clipboard API. +* [#607](https://github.com/ckeditor/ckeditor-dev/issues/607): Manually inserted Hex color is prefixed with a hash character (`#`) if needed. It ensures a valid Hex color value is used when setting the table cell border or background color with the [Color Dialog](https://ckeditor.com/cke4/addon/colordialog) window. +* [#584](https://github.com/ckeditor/ckeditor-dev/issues/584): [Font size and Family](https://ckeditor.com/cke4/addon/font) and [Format](https://ckeditor.com/cke4/addon/format) drop-downs are not toggleable anymore. Default option to reset styles added. +* [#856](https://github.com/ckeditor/ckeditor-dev/issues/856): Introduced the [`CKEDITOR.tools.keystrokeToArray`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.tools-method-keystrokeToArray) method. It converts a keystroke into its string representation, returning every key name as a separate array element. +* [#1053](https://github.com/ckeditor/ckeditor-dev/issues/1053): Introduced the [`CKEDITOR.tools.object.merge`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.tools.object-method-merge) method. It allows to merge two objects, returning the new object with all properties from both objects deeply cloned. +* [#1073](https://github.com/ckeditor/ckeditor-dev/issues/1073): Introduced the [`CKEDITOR.tools.array.every`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.tools.array-method-every) method. It invokes a given test function on every array element and returns `true` if all elements pass the test. + +Fixed Issues: + +* [#796](https://github.com/ckeditor/ckeditor-dev/issues/796): Fixed: A list is pasted from OneNote in the reversed order. +* [#834](https://github.com/ckeditor/ckeditor-dev/issues/834): [IE9-11] Fixed: The editor does not save the selected state of radio buttons inserted by the [Form Elements](https://ckeditor.com/cke4/addon/forms) plugin. +* [#704](https://github.com/ckeditor/ckeditor-dev/issues/704): [Edge] Fixed: Using Ctrl/Cmd + Z breaks widget structure. +* [#591](https://github.com/ckeditor/ckeditor-dev/issues/591): Fixed: A column is inserted in a wrong order inside the table if any cell has a vertical split. +* [#787](https://github.com/ckeditor/ckeditor-dev/issues/787): Fixed: Using Cut inside a nested table does not cut the selected content. +* [#842](https://github.com/ckeditor/ckeditor-dev/issues/842): Fixed: List style not restored when toggling list indent level in the [Indent List](https://ckeditor.com/cke4/addon/indentlist) plugin. +* [#711](https://github.com/ckeditor/ckeditor-dev/issues/711): Fixed: Dragging widgets should only work with the left mouse button. +* [#862](https://github.com/ckeditor/ckeditor-dev/issues/862): Fixed: The "Object Styles" group in the [Styles Combo](https://ckeditor.com/cke4/addon/stylescombo) plugin is visible only if the whole element is selected. +* [#994](https://github.com/ckeditor/ckeditor-dev/pull/994): Fixed: Typo in the [`CKEDITOR.focusManager.focus`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.focusManager-method-focus) API documentation. Thanks to [benjy](https://github.com/benjy)! +* [#1014](https://github.com/ckeditor/ckeditor-dev/issues/1014): Fixed: The [Table Tools](https://ckeditor.com/cke4/addon/tabletools) Cell Properties dialog is now [Advanced Content Filter](https://docs.ckeditor.com/ckeditor4/docs/#!/guide/dev_acf) aware — it is not possible to change the cell width or height if corresponding styles are disabled. +* [#877](https://github.com/ckeditor/ckeditor-dev/issues/877): Fixed: A list with custom bullets with exotic characters crashes the editor when [pasted from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#605](https://github.com/ckeditor/ckeditor-dev/issues/605): Fixed: Inline widgets do not preserve trailing spaces. +* [#1008](https://github.com/ckeditor/ckeditor-dev/issues/1008): Fixed: Shorthand Hex colors from the [`config.colorButton_colors`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-colorButton_colors) option are not correctly highlighted in the [Color Button](https://ckeditor.com/cke4/addon/colorbutton) Text Color or Background Color panel. +* [#1094](https://github.com/ckeditor/ckeditor-dev/issues/1094): Fixed: Widget definition [`upcast`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.plugins.widget.definition-property-upcasts) methods are called for every element. +* [#1057](https://github.com/ckeditor/ckeditor-dev/issues/1057): Fixed: The [Notification](https://ckeditor.com/addon/notification) plugin overwrites Web Notifications API due to leakage to the global scope. +* [#1068](https://github.com/ckeditor/ckeditor-dev/issues/1068): Fixed: Upload widget paste listener ignores changes to the [`uploadWidgetDefinition`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition). +* [#921](https://github.com/ckeditor/ckeditor-dev/issues/921): Fixed: [Edge] CKEditor erroneously perceives internal copy and paste as type "external". +* [#1213](https://github.com/ckeditor/ckeditor-dev/issues/1213): Fixed: Multiple images uploaded using [Upload Image](https://ckeditor.com/cke4/addon/uploadimage) plugin are randomly duplicated or mangled. +* [#532](https://github.com/ckeditor/ckeditor-dev/issues/532): Fixed: Removed an outdated user guide link from the [About](https://ckeditor.com/cke4/addon/about) dialog. +* [#1221](https://github.com/ckeditor/ckeditor-dev/issues/1221): Fixed: Invalid CSS loaded by [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) plugin when [`config.skin`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-skin) is loaded using a custom path. +* [#522](https://github.com/ckeditor/ckeditor-dev/issues/522): Fixed: Widget selection is not removed when widget is inside table cell with [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin enabled. +* [#1027](https://github.com/ckeditor/ckeditor-dev/issues/1027): Fixed: Cannot add multiple images to the table with [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin in certain situations. +* [#1069](https://github.com/ckeditor/ckeditor-dev/issues/1069): Fixed: Wrong shape processing by [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#995](https://github.com/ckeditor/ckeditor-dev/issues/995): Fixed: Hyperlinked image gets inserted twice by [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#1287](https://github.com/ckeditor/ckeditor-dev/issues/1287): Fixed: [Widget](https://ckeditor.com/cke4/addon/widget) plugin throws exception if included in editor build but not loaded into editor's instance. + +API Changes: + +* [#1097](https://github.com/ckeditor/ckeditor-dev/issues/1097): Widget [`upcast`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.plugins.widget.definition-property-upcast) methods are now called in the [widget definition's](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.plugins.widget-property-definition) context. +* [#1118](https://github.com/ckeditor/ckeditor-dev/issues/1118): Added the `show` option in the [`balloonPanel.attach`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.ui.balloonPanel-method-attach) method, allowing to attach a hidden [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) instance. +* [#1145](https://github.com/ckeditor/ckeditor-dev/issues/1145): Added the [`skipNotifications`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition-property-skipNotifications) option to the [`CKEDITOR.fileTools.uploadWidgetDefinition`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition), allowing to switch off default notifications displayed by upload widgets. + +Other Changes: + +* [#815](https://github.com/ckeditor/ckeditor-dev/issues/815): Removed Node.js dependency from the CKEditor build script. +* [#1041](https://github.com/ckeditor/ckeditor-dev/pull/1041), [#1131](https://github.com/ckeditor/ckeditor-dev/issues/1131): Updated URLs pointing to [CKSource](https://cksource.com/) and [CKEditor](https://ckeditor.com/) resources after the launch of new websites. + +## CKEditor 4.7.3 + +New Features: + +* [#568](https://github.com/ckeditor/ckeditor-dev/issues/568): Added possibility to adjust nested editables' filters using the [`CKEDITOR.filter.disallowedContent`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.filter-property-disallowedContent) property. + +Fixed Issues: + +* [#554](https://github.com/ckeditor/ckeditor-dev/issues/554): Fixed: [`change`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.editor-event-change) event not fired when typing the first character after pasting into the editor. Thanks to [Daniel Miller](https://github.com/millerdev)! +* [#566](https://github.com/ckeditor/ckeditor-dev/issues/566): Fixed: The CSS `border` shorthand property with zero width (`border: 0px solid #000;`) causes the table to have the border attribute set to 1. +* [#779](https://github.com/ckeditor/ckeditor-dev/issues/779): Fixed: The [Remove Format](https://ckeditor.com/cke4/addon/removeformat) plugin removes elements with language definition inserted by the [Language](https://ckeditor.com/cke4/addon/language) plugin. +* [#423](https://github.com/ckeditor/ckeditor-dev/issues/423): Fixed: The [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin pastes paragraphs into the editor even if [`CKEDITOR.config.enterMode`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-enterMode) is set to `CKEDITOR.ENTER_BR`. +* [#719](https://github.com/ckeditor/ckeditor-dev/issues/719): Fixed: Image inserted using the [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugin can be resized when the editor is in [read-only mode](https://docs.ckeditor.com/ckeditor4/docs/#!/guide/dev_readonly). +* [#577](https://github.com/ckeditor/ckeditor-dev/issues/577): Fixed: The "Delete Columns" command provided by the [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin throws an error when trying to delete columns. +* [#867](https://github.com/ckeditor/ckeditor-dev/issues/867): Fixed: Typing into a selected table throws an error. +* [#817](https://github.com/ckeditor/ckeditor-dev/issues/817): Fixed: The [Save](https://ckeditor.com/cke4/addon/save) plugin does not work in [Source Mode](https://ckeditor.com/cke4/addon/sourcearea). + +Other Changes: + +* Updated the [WebSpellChecker](https://ckeditor.com/cke4/addon/wsc) plugin: + * [#40](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/40): Fixed: IE10 throws an error when spell checking is started. +* [#800](https://github.com/ckeditor/ckeditor-dev/issues/800): Added the [`CKEDITOR.dom.selection.isCollapsed`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.selection-method-isCollapsed) method which is a simpler way to check if the selection is collapsed. +* [#830](https://github.com/ckeditor/ckeditor-dev/issues/830): Added an option to define which dialog tab should be shown by default when creating [`CKEDITOR.dialogCommand`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dialogCommand). + +## CKEditor 4.7.2 + +New Features: + +* [#455](https://github.com/ckeditor/ckeditor-dev/issues/455): Added [Advanced Content Filter](https://docs.ckeditor.com/ckeditor4/docs/#!/guide/dev_acf) integration with the [Justify](https://ckeditor.com/cke4/addon/justify) plugin. + +Fixed Issues: + +* [#663](https://github.com/ckeditor/ckeditor-dev/issues/663): [Chrome] Fixed: Clicking the scrollbar throws an `Uncaught TypeError: element.is is not a function` error. +* [#694](https://github.com/ckeditor/ckeditor-dev/pull/694): Refactoring in the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin: + * [#520](https://github.com/ckeditor/ckeditor-dev/issues/520): Fixed: Widgets cannot be properly pasted into a table cell. + * [#460](https://github.com/ckeditor/ckeditor-dev/issues/460): Fixed: Editor gone after pasting into an editor within a table. +* [#579](https://github.com/ckeditor/ckeditor-dev/issues/579): Fixed: Internal `cke_table-faked-selection-table` class is visible in the Stylesheet Classes field of the [Table Properties](https://ckeditor.com/cke4/addon/table) dialog. +* [#545](https://github.com/ckeditor/ckeditor-dev/issues/545): [Edge] Fixed: Error thrown when pressing the [Select All](https://ckeditor.com/cke4/addon/selectall) button in [Source Mode](https://ckeditor.com/cke4/addon/sourcearea). +* [#582](https://github.com/ckeditor/ckeditor-dev/issues/582): Fixed: Double slash in the path to stylesheet needed by the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin. Thanks to [Marius Dumitru Florea](https://github.com/mflorea)! +* [#491](https://github.com/ckeditor/ckeditor-dev/issues/491): Fixed: Unnecessary dependency on the [Editor Toolbar](https://ckeditor.com/cke4/addon/toolbar) plugin inside the [Notification](https://ckeditor.com/cke4/addon/notification) plugin. +* [#646](https://github.com/ckeditor/ckeditor-dev/issues/646): Fixed: Error thrown into the browser console after opening the [Styles Combo](https://ckeditor.com/cke4/addon/stylescombo) plugin menu in the editor without any selection. +* [#501](https://github.com/ckeditor/ckeditor-dev/issues/501): Fixed: Double click does not open the dialog for modifying anchors inserted via the [Link](https://ckeditor.com/cke4/addon/link) plugin. +* [#9780](https://dev.ckeditor.com/ticket/9780): [IE8-9] Fixed: Clicking inside an empty [read-only](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.editor-property-readOnly) editor throws an error. +* [#16820](https://dev.ckeditor.com/ticket/16820): [IE10] Fixed: Clicking below a single horizontal rule throws an error. +* [#426](https://github.com/ckeditor/ckeditor-dev/issues/426): Fixed: The [`range.cloneContents`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.range-method-cloneContents) method selects the whole element when the selection starts at the beginning of that element. +* [#644](https://github.com/ckeditor/ckeditor-dev/issues/644): Fixed: The [`range.extractContents`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.range-method-extractContents) method returns an incorrect result when multiple nodes are selected. +* [#684](https://github.com/ckeditor/ckeditor-dev/issues/684): Fixed: The [`elementPath.contains`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.elementPath-method-contains) method incorrectly excludes the last element instead of root when the `fromTop` parameter is set to `true`. + +Other Changes: + +* Updated the [SCAYT](https://ckeditor.com/cke4/addon/scayt) (Spell Check As You Type) plugin: + * [#148](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/148): Fixed: SCAYT leaves underlined word after the CKEditor Replace dialog corrects it. +* [#751](https://github.com/ckeditor/ckeditor-dev/issues/751): Added the [`CKEDITOR.dom.nodeList.toArray`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.nodeList-method-toArray) method which returns an array representation of a [node list](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.nodeList). + +## CKEditor 4.7.1 + +New Features: + +* Added a new Mexican Spanish localization. Thanks to [David Alexandro Rodriguez](https://www.transifex.com/user/profile/darsco16/)! +* [#413](https://github.com/ckeditor/ckeditor-dev/issues/413): Added Paste as Plain Text keyboard shortcut to the [Accessibility Help](https://ckeditor.com/cke4/addon/a11yhelp) instructions. + +Fixed Issues: + +* [#515](https://github.com/ckeditor/ckeditor-dev/issues/515): [Chrome] Fixed: Mouse actions on CKEditor scrollbar throw an exception when the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is loaded. +* [#493](https://github.com/ckeditor/ckeditor-dev/issues/493): Fixed: Selection started from a nested table causes an error in the browser while scrolling down. +* [#415](https://github.com/ckeditor/ckeditor-dev/issues/415): [Firefox] Fixed: Enter key breaks the table structure when pressed in a table selection. +* [#457](https://github.com/ckeditor/ckeditor-dev/issues/457): Fixed: Error thrown when deleting content from the editor with no selection. +* [#478](https://github.com/ckeditor/ckeditor-dev/issues/478): [Chrome] Fixed: Error thrown by the [Enter Key](https://ckeditor.com/cke4/addon/enterkey) plugin when pressing Enter with no selection. +* [#424](https://github.com/ckeditor/ckeditor-dev/issues/424): Fixed: Error thrown by [Tab Key Handling](https://ckeditor.com/cke4/addon/tab) and [Indent List](https://ckeditor.com/cke4/addon/indentlist) plugins when pressing Tab with no selection in inline editor. +* [#476](https://github.com/ckeditor/ckeditor-dev/issues/476): Fixed: Anchors inserted with the [Link](https://ckeditor.com/cke4/addon/link) plugin on collapsed selection cannot be edited. +* [#417](https://github.com/ckeditor/ckeditor-dev/issues/417): Fixed: The [Table Resize](https://ckeditor.com/cke4/addon/tableresize) plugin throws an error when used with a table with only header or footer rows. +* [#523](https://github.com/ckeditor/ckeditor-dev/issues/523): Fixed: The [`editor.getCommandKeystroke`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.editor-method-getCommandKeystroke) method does not obtain the correct keystroke. +* [#534](https://github.com/ckeditor/ckeditor-dev/issues/534): [IE] Fixed: [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) does not work in Quirks Mode. +* [#450](https://github.com/ckeditor/ckeditor-dev/issues/450): Fixed: [`CKEDITOR.filter`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.filter) incorrectly transforms the `margin` CSS property. + +## CKEditor 4.7 + +**Important Notes:** + +* [#13793](https://dev.ckeditor.com/ticket/13793): The [`embed_provider`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-embed_provider) configuration option for the [Media Embed](https://ckeditor.com/cke4/addon/embed) and [Semantic Media Embed](https://ckeditor.com/cke4/addon/embedsemantic) plugins is no longer preset by default. +* The [UI Color](https://ckeditor.com/cke4/addon/uicolor) plugin now uses a custom color picker instead of the `YUI 2.7.0` library which has some known vulnerabilities (it's a security precaution, there was no security issue in CKEditor due to the way it was used). + +New Features: + +* [#16755](https://dev.ckeditor.com/ticket/16755): Added the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin that lets you select and manipulate an arbitrary rectangular table fragment (a few cells, a row or a column). +* [#16961](https://dev.ckeditor.com/ticket/16961): Added support for pasting from Microsoft Excel. +* [#13381](https://dev.ckeditor.com/ticket/13381): Dynamic code evaluation call in [`CKEDITOR.template`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.template) removed. CKEditor can now be used without the `unsafe-eval` Content Security Policy. Thanks to [Caridy Patiño](http://caridy.name)! +* [#16971](https://dev.ckeditor.com/ticket/16971): Added support for color in the `background` property containing also other styles for table cells in the [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin. +* [#16847](https://dev.ckeditor.com/ticket/16847): Added support for parsing and inlining any formatting created using the Microsoft Word style system to the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#16818](https://dev.ckeditor.com/ticket/16818): Added table cell height parsing in the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#16850](https://dev.ckeditor.com/ticket/16850): Added a new [`config.enableContextMenu`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-enableContextMenu) configuration option for enabling and disabling the [context menu](https://ckeditor.com/cke4/addon/contextmenu). +* [#16937](https://dev.ckeditor.com/ticket/16937): The `command` parameter in [CKEDITOR.editor.getCommandKeystroke](http://docs.ckeditor.dev/#!/api/CKEDITOR.editor-method-getCommandKeystroke) now also accepts a command name as an argument. +* [#17010](https://dev.ckeditor.com/ticket/17010): The [`CKEDITOR.dom.range.shrink`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.range-method-shrink) method now allows for skipping bogus `
` elements. + +Fixed Issues: + +* [#16935](https://dev.ckeditor.com/ticket/16935): [Chrome] Fixed: Blurring the editor in [Source Mode](https://ckeditor.com/cke4/addon/sourcearea) throws an error. +* [#16825](https://dev.ckeditor.com/ticket/16825): [Chrome] Fixed: Error thrown when destroying a focused inline editor. +* [#16857](https://dev.ckeditor.com/ticket/16857): Fixed: Ctrl+Shift+V blocked by [Copy Formatting](https://ckeditor.com/cke4/addon/copyformatting). +* [#16845](https://dev.ckeditor.com/ticket/16845): [IE] Fixed: Cursor jumps to the top of the scrolled editor after focusing it when the [Copy Formatting](https://ckeditor.com/cke4/addon/copyformatting) plugin is enabled. +* [#16786](https://dev.ckeditor.com/ticket/16786): Fixed: Added missing translations for the [Copy Formatting](https://ckeditor.com/cke4/addon/copyformatting) plugin. +* [#14714](https://dev.ckeditor.com/ticket/14714): [WebKit/Blink] Fixed: Exception thrown on refocusing a blurred inline editor. +* [#16913](https://dev.ckeditor.com/ticket/16913): [Firefox, IE] Fixed: [Paste as Plain Text](https://ckeditor.com/cke4/addon/pastetext) keystroke does not work. +* [#16968](https://dev.ckeditor.com/ticket/16968): Fixed: [Safari] [Paste as Plain Text](https://ckeditor.com/cke4/addon/pastetext) is not handled by the editor. +* [#16912](https://dev.ckeditor.com/ticket/16912): Fixed: Exception thrown when a single image is pasted using [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16821](https://dev.ckeditor.com/ticket/16821): Fixed: Extraneous `` elements with `height` style stacked when [pasting from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16866](https://dev.ckeditor.com/ticket/16866): [IE, Edge] Fixed: Whitespaces not preserved when [pasting from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16860](https://dev.ckeditor.com/ticket/16860): Fixed: Paragraphs which only look like lists incorrectly transformed into them when [pasting from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16817](https://dev.ckeditor.com/ticket/16817): Fixed: When [pasting from Word](https://ckeditor.com/cke4/addon/pastefromword), paragraphs are transformed into lists with some corrupted data. +* [#16833](https://dev.ckeditor.com/ticket/16833): [IE11] Fixed: Malformed list with headers [pasted from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16826](https://dev.ckeditor.com/ticket/16826): [IE] Fixed: Superfluous paragraphs within lists [pasted from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#12465](https://dev.ckeditor.com/ticket/12465): Fixed: Cannot change the state of checkboxes or radio buttons if the properties dialog was invoked with a double-click. +* [#13062](https://dev.ckeditor.com/ticket/13062): Fixed: Impossible to unlink when the caret is at the edge of the link. +* [#13585](https://dev.ckeditor.com/ticket/13585): Fixed: Error when wrapping two adjacent `
` elements with a `
`. +* [#16811](https://dev.ckeditor.com/ticket/16811): Fixed: Table alignment is not preserved by the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#16810](https://dev.ckeditor.com/ticket/16810): Fixed: Vertical align in tables is not supported by the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#11956](https://dev.ckeditor.com/ticket/11956): [Blink, IE] Fixed: [Link](https://ckeditor.com/cke4/addon/link) dialog does not open on a double click on the second word of the link with a background color or other styles. +* [#10472](https://dev.ckeditor.com/ticket/10472): Fixed: Unable to use [Table Resize](https://ckeditor.com/cke4/addon/tableresize) on table header and footer. +* [#14762](https://dev.ckeditor.com/ticket/14762): Fixed: Hovering over an empty table (without rows or cells) throws an error when the [Table Resize](https://ckeditor.com/cke4/addon/tableresize) plugin is active. +* [#16777](https://dev.ckeditor.com/ticket/16777): [Edge] Fixed: The [Clipboard](https://ckeditor.com/cke4/addon/clipboard) plugin does not allow to drop widgets into the editor. +* [#14894](https://dev.ckeditor.com/ticket/14894): [Chrome] Fixed: The editor scrolls to the top after focusing or when a dialog is opened. +* [#14769](https://dev.ckeditor.com/ticket/14769): Fixed: URLs with '-' in host are not detected by the [Auto Link](https://ckeditor.com/cke4/addon/autolink) plugin. +* [#16804](https://dev.ckeditor.com/ticket/16804): Fixed: Focus is not on the first menu item when the user opens a context menu or a drop-down list from the editor toolbar. +* [#14407](https://dev.ckeditor.com/ticket/14407): [IE] Fixed: Non-editable widgets can be edited. +* [#16927](https://dev.ckeditor.com/ticket/16927): Fixed: An error thrown if a bundle containing the [Color Button](https://ckeditor.com/cke4/addon/colorbutton) plugin is run in ES5 strict mode. Thanks to [Igor Rubinovich](https://github.com/IgorRubinovich)! +* [#16920](https://dev.ckeditor.com/ticket/16920): Fixed: Several plugins not using the [Dialog](https://ckeditor.com/cke4/addon/dialog) plugin as a direct dependency. +* [PR#336](https://github.com/ckeditor/ckeditor-dev/pull/336): Fixed: Typo in [`CKEDITOR.getCss`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR-method-getCss) API documentation. Thanks to [knusperpixel](https://github.com/knusperpixel)! +* [#17027](https://dev.ckeditor.com/ticket/17027): Fixed: Command event data should be initialized as an empty object. +* Fixed the behavior of HTML parser when parsing `src`/`srcdoc` attributes of the `').prependTo(document.body);$("#loading").html(_.label("Uploading file...")).show();a.submit();$("#uploadResponse").load(function(){var b=$(this).contents().find("body").text();$("#loading").hide();b=b.split("\n");var c=[],d=[];$.each(b,function(e,f){if(f.substr(0,1)=="/"){c[c.length]=f.substr(1,f.length-1)}else{d[d.length]=f}});if(d.length){d=d.join("\n");if(d.replace(/^\s+/g,"").replace(/\s+$/g,"").length){_.alert(d)}}if(!c.length){c=null}_.refresh(c);$("#upload").detach();setTimeout(function(){$("#uploadResponse").detach()},1);_.initUploadButton()})};_.maximize=function(b){if(_.opener.name=="tinymce"){var e=window.parent.document,h=$('iframe[src*="browse.php?opener=tinymce&"]',e),g=parseInt(h.attr("id").replace(/^mce_(\d+)_ifr$/,"$1")),f=$("#mce_"+g,e);if($(b).hasClass("selected")){$(b).removeClass("selected");f.css({left:_.maximizeMCE.left,top:_.maximizeMCE.top,width:_.maximizeMCE.width,height:_.maximizeMCE.height});h.css({width:_.maximizeMCE.width-_.maximizeMCE.Hspace,height:_.maximizeMCE.height-_.maximizeMCE.Vspace})}else{$(b).addClass("selected");_.maximizeMCE={width:parseInt(f.css("width")),height:parseInt(f.css("height")),left:f.position().left,top:f.position().top,Hspace:parseInt(f.css("width"))-parseInt(h.css("width")),Vspace:parseInt(f.css("height"))-parseInt(h.css("height"))};var d=$(window.top).width(),a=$(window.top).height();f.css({left:$(window.parent).scrollLeft(),top:$(window.parent).scrollTop(),width:d,height:a});h.css({width:d-_.maximizeMCE.Hspace,height:a-_.maximizeMCE.Vspace})}}else{if(_.opener.name=="tinymce4"){var e=window.parent.document,h=$('iframe[src*="browse.php?opener=tinymce4&"]',e).parent(),f=h.parent();if($(b).hasClass("selected")){$(b).removeClass("selected");f.css({left:_.maximizeMCE4.left,top:_.maximizeMCE4.top,width:_.maximizeMCE4.width,height:_.maximizeMCE4.height});h.css({width:_.maximizeMCE4.width,height:_.maximizeMCE4.height-_.maximizeMCE4.Vspace})}else{$(b).addClass("selected");_.maximizeMCE4={width:parseInt(f.css("width")),height:parseInt(f.css("height")),left:f.position().left,top:f.position().top,Vspace:f.outerHeight(true)-h.outerHeight(true)-1};var d=$(window.top).width(),a=$(window.top).height();f.css({left:0,top:0,width:d,height:a});h.css({width:d,height:a-_.maximizeMCE4.Vspace})}}else{if(window.opener){window.moveTo(0,0);d=screen.availWidth;a=screen.availHeight;if($.agent.opera){a-=50}window.resizeTo(d,a)}else{if(window.parent){var c=null;$(window.parent.document).find("iframe").each(function(){if(this.src.replace("/?","?")==window.location.href.replace("/?","?")){c=this;return false}});if(c!==null){$(c).toggleFullscreen(window.parent.document)}else{$("body").toggleFullscreen()}}else{$("body").toggleFullscreen()}}}}};_.refresh=function(a){_.fadeFiles();$.ajax({type:"post",dataType:"json",url:_.getURL("chDir"),data:{dir:_.dir},async:false,success:function(b){if(_.check4errors(b)){$("#files > div").css({opacity:"",filter:""});return}_.dirWritable=b.dirWritable;_.files=b.files?b.files:[];_.orderFiles(null,a);_.statusDir()},error:function(){$("#files > div").css({opacity:"",filter:""});$("#files").html(_.label("Unknown error."))}})};_.initSettings=function(){$("#settings").disableTextSelect();$("#settings fieldset, #settings input, #settings label").uniform();if(!_.shows.length){$('#show input[type="checkbox"]').each(function(c){_.shows[c]=this.name})}var a=_.shows;if(!$.$.kuki.isSet("showname")){$.$.kuki.set("showname","on");$.each(a,function(c,d){if(d!="name"){$.$.kuki.set("show"+d,"off")}})}$('#show input[type="checkbox"]').click(function(){$.$.kuki.set("show"+this.name,this.checked?"on":"off");$("#files .file div."+this.name).css("display",this.checked?"block":"none")});$.each(a,function(c,d){$('#show input[name="'+d+'"]').get(0).checked=($.$.kuki.get("show"+d)=="on")?"checked":""});if(!_.orders.length){$('#order input[type="radio"]').each(function(c){_.orders[c]=this.value})}var b=_.orders;if(!$.$.kuki.isSet("order")){$.$.kuki.set("order","name")}if(!$.$.kuki.isSet("orderDesc")){$.$.kuki.set("orderDesc","off")}$('#order input[value="'+$.$.kuki.get("order")+'"]').get(0).checked=true;$('#order input[name="desc"]').get(0).checked=($.$.kuki.get("orderDesc")=="on");$('#order input[type="radio"]').click(function(){$.$.kuki.set("order",this.value);_.orderFiles()});$('#order input[name="desc"]').click(function(){$.$.kuki.set("orderDesc",this.checked?"on":"off");_.orderFiles()});if(!$.$.kuki.isSet("view")){$.$.kuki.set("view","thumbs")}if($.$.kuki.get("view")=="list"){$("#show").parent().hide()}$('#view input[value="'+$.$.kuki.get("view")+'"]').get(0).checked=true;$("#view input").click(function(){var c=this.value;if($.$.kuki.get("view")!=c){$.$.kuki.set("view",c);if(c=="list"){$("#show").parent().hide()}else{$("#show").parent().show()}}_.fixFilesHeight();_.refresh()})};_.initFiles=function(){$(document).unbind("keydown").keydown(function(a){return !_.selectAll(a)});$("#files").unbind().scroll(function(){_.menu.hide()}).disableTextSelect();$(".file").unbind().click(function(a){_.selectFile($(this),a)}).rightClick(function(a,b){_.menuFile($(a),b)}).dblclick(function(){_.returnFile($(this))});if($.mobile){$(".file").on("taphold",function(){_.menuFile($(this),{pageX:$(this).offset().left,pageY:$(this).offset().top+$(this).outerHeight()})})}$.each(_.shows,function(a,b){$("#files .file div."+b).css("display",($.$.kuki.get("show"+b)=="off")?"none":"block")});_.statusDir()};_.showFiles=function(b,a){_.fadeFiles();setTimeout(function(){var d=$("
");$.each(_.files,function(g,e){var j,h,c=e.size+"|"+e.mtime;if($.$.kuki.get("view")=="list"){if(!g){d.html("
")}h=$.$.getFileExtension(e.name);if(e.thumb){h=".image"}else{if(!h.length||!e.smallIcon){h="."}}h="themes/"+_.theme+"/img/files/small/"+h+".png";j=$('');j.appendTo(d.find("table"))}else{if(e.thumb){h=_.getURL("thumb")+"&file="+encodeURIComponent(e.name)+"&dir="+encodeURIComponent(_.dir)+"&stamp="+c}else{if(e.smallThumb){h=_.uploadURL+"/"+_.dir+"/"+encodeURIComponent(e.name);h=$.$.escapeDirs(h).replace(/\'/g,"%27")}else{h=e.bigIcon?$.$.getFileExtension(e.name):".";if(!h.length){h="."}h="themes/"+_.theme+"/img/files/big/"+h+".png"}}j=$('
');j.appendTo(d)}j.find(".thumb").css({backgroundImage:'url("'+h+'")'});j.find(".name").html($.$.htmlData(e.name));j.find(".time").html(e.date);j.find(".size").html(_.humanSize(e.size));j.data(e);if((e.name===a)||$.$.inArray(e.name,a)){j.addClass("selected")}});d.css({opacity:"",filter:""});$("#files").html(d);if(b){b()}_.initFiles()},200)};_.selectFile=function(b,h){if(h.ctrlKey||h.metaKey||h.shiftKey){if(h.shiftKey&&!b.hasClass("selected")){var g=b.prev();while(g.get(0)&&!g.hasClass("selected")){g.addClass("selected");g=g.prev()}}b.toggleClass("selected");var c=$(".file.selected").get(),a=0,d;if(!c.length){_.statusDir()}else{$.each(c,function(f,e){a+=$(e).data("size")});a=_.humanSize(a);if(c.length>1){$("#fileinfo").html(c.length+" "+_.label("selected files")+" ("+a+")")}else{d=$(c[0]).data();$("#fileinfo").html($.$.htmlData(d.name)+" ("+_.humanSize(d.size)+", "+d.date+")")}}}else{d=b.data();$(".file").removeClass("selected");b.addClass("selected");$("#fileinfo").html($.$.htmlData(d.name)+" ("+_.humanSize(d.size)+", "+d.date+")")}};_.selectAll=function(c){if((!c.ctrlKey&&!c.metaKey)||((c.keyCode!=65)&&(c.keyCode!=97))){return false}var b=$(".file"),a=0;if(b.length){b.addClass("selected").each(function(){a+=$(this).data("size")});$("#fileinfo").html(b.length+" "+_.label("selected files")+" ("+_.humanSize(a)+")")}return true};_.returnFile=function(c){var b,d,a=c.substr?c:_.uploadURL+"/"+_.dir+"/"+c.data("name");a=$.$.escapeDirs(a);if(_.opener.name=="ckeditor"){_.opener.CKEditor.object.tools.callFunction(_.opener.CKEditor.funcNum,a,"");window.close()}else{if(_.opener.name=="fckeditor"){window.opener.SetUrl(a);window.close()}else{if(_.opener.name=="tinymce"){d=tinyMCEPopup.getWindowArg("window");d.document.getElementById(tinyMCEPopup.getWindowArg("input")).value=a;if(d.getImageData){d.getImageData()}if(typeof(d.ImageDialog)!="undefined"){if(d.ImageDialog.getImageData){d.ImageDialog.getImageData()}if(d.ImageDialog.showPreviewImage){d.ImageDialog.showPreviewImage(a)}}tinyMCEPopup.close()}else{if(_.opener.name=="tinymce4"){d=(window.opener?window.opener:window.parent);$(d.document).find("#"+_.opener.TinyMCE.field).val(a);d.tinyMCE.activeEditor.windowManager.close()}else{if(_.opener.callBack){if(window.opener&&window.opener.KCFinder){_.opener.callBack(a);window.close()}if(window.parent&&window.parent.KCFinder){b=$('#toolbar a[href="kcact:maximize"]');if(b.hasClass("selected")){_.maximize(b)}_.opener.callBack(a)}}else{if(_.opener.callBackMultiple){if(window.opener&&window.opener.KCFinder){_.opener.callBackMultiple([a]);window.close()}if(window.parent&&window.parent.KCFinder){b=$('#toolbar a[href="kcact:maximize"]');if(b.hasClass("selected")){_.maximize(b)}_.opener.callBackMultiple([a])}}}}}}}};_.returnFiles=function(b){if(_.opener.callBackMultiple&&b.length){var a=[];$.each(b,function(d,c){a[d]=_.uploadURL+"/"+_.dir+"/"+$(c).data("name");a[d]=$.$.escapeDirs(a[d])});_.opener.callBackMultiple(a);if(window.opener){window.close()}}};_.returnThumbnails=function(c){if(_.opener.callBackMultiple){var b=[],a=0;$.each(c,function(e,d){if($(d).data("thumb")){b[a]=_.thumbsURL+"/"+_.dir+"/"+$(d).data("name");b[a]=$.$.escapeDirs(b[a++])}});_.opener.callBackMultiple(b);if(window.opener){window.close()}}};_.initFolders=function(){$("#folders").scroll(function(){_.menu.hide()}).disableTextSelect();$("div.folder > a").unbind().click(function(){_.menu.hide();return false});$("div.folder > a > span.brace").unbind().click(function(){if($(this).hasClass("opened")||$(this).hasClass("closed")){_.expandDir($(this).parent())}});$("div.folder > a > span.folder").unbind().click(function(){_.changeDir($(this).parent())}).rightClick(function(a,b){_.menuDir($(a).parent(),b)});if($.mobile){$("div.folder > a > span.folder").on("taphold",function(){_.menuDir($(this).parent(),{pageX:$(this).offset().left+1,pageY:$(this).offset().top+$(this).outerHeight()})})}};_.setTreeData=function(b,c){if(!c){c=""}else{if(c.length&&(c.substr(c.length-1,1)!="/")){c+="/"}}c+=b.name;var a='#folders a[href="kcdir:/'+$.$.escapeDirs(c)+'"]';$(a).data({name:b.name,path:c,readable:b.readable,writable:b.writable,removable:b.removable,hasDirs:b.hasDirs});$(a+" span.folder").addClass(b.current?"current":"regular");if(b.dirs&&b.dirs.length){$(a+" span.brace").addClass("opened");$.each(b.dirs,function(e,d){_.setTreeData(d,c+"/")})}else{if(b.hasDirs){$(a+" span.brace").addClass("closed")}}};_.buildTree=function(a,e){if(!e){e=""}e+=a.name;var b,d='
 '+$.$.htmlData(a.name)+"";if(a.dirs){d+='
';for(var c=0;c'+_.label("Loading folders...")+"
");$("#loadingDirs").hide().show(200,function(){$.ajax({type:"post",dataType:"json",url:_.getURL("expand"),data:{dir:b},async:false,success:function(e){$("#loadingDirs").hide(200,function(){$("#loadingDirs").detach()});if(_.check4errors(e)){return}var d="";$.each(e.dirs,function(g,f){d+='"});if(d.length){a.parent().append('
'+d+"
");var c=$(a.parent().children(".folders").first());c.hide();$(c).show(500);$.each(e.dirs,function(g,f){_.setTreeData(f,b)})}if(e.dirs.length){a.children(".brace").removeClass("closed").addClass("opened")}else{a.children(".brace").removeClass("opened closed")}_.initFolders();_.initDropUpload()},error:function(){$("#loadingDirs").detach();_.alert(_.label("Unknown error."))}})})}}}};_.changeDir=function(a){if(a.children("span.folder").hasClass("regular")){$("div.folder > a > span.folder").removeClass("current regular").addClass("regular");a.children("span.folder").removeClass("regular").addClass("current");$("#files").html(_.label("Loading files..."));$.ajax({type:"post",dataType:"json",url:_.getURL("chDir"),data:{dir:a.data("path")},async:false,success:function(b){if(_.check4errors(b)){return}_.files=b.files;_.orderFiles();_.dir=a.data("path");_.dirWritable=b.dirWritable;_.setTitle("KCFinder: /"+_.dir);_.statusDir()},error:function(){$("#files").html(_.label("Unknown error."))}})}};_.statusDir=function(){var b=0,a=0;for(;b<_.files.length;b++){a+=_.files[b].size}a=_.humanSize(a);$("#fileinfo").html(_.files.length+" "+_.label("files")+" ("+a+")")};_.refreshDir=function(a){var b=a.data("path");if(a.children(".brace").hasClass("opened")||a.children(".brace").hasClass("closed")){a.children(".brace").removeClass("opened").addClass("closed")}a.parent().children(".folders").first().detach();if(b==_.dir.substr(0,b.length)){_.changeDir(a)}_.expandDir(a);return true};_.menu={init:function(){$("#menu").html("
    ").css("display","none")},addItem:function(b,c,d,a){if(typeof a=="undefined"){a=false}$("#menu ul").append('
  • "+c+"
  • ");if(!a&&$.isFunction(d)){$('#menu a[href="'+b+'"]').click(function(){_.menu.hide();return d()})}},addDivider:function(){if($("#menu ul").html().length){$("#menu ul").append("
  • -
  • ")}},show:function(f){var g=$("#menu"),a=$("#menu ul");if(a.html().length){g.find("ul").first().menu();if(typeof f!="undefined"){var d=f.pageX,c=f.pageY,b=$(window);if((g.outerWidth()+d)>b.width()){d=b.width()-g.outerWidth()}if((g.outerHeight()+c)>b.height()){c=b.height()-g.outerHeight()}g.hide().css({left:d,top:c,width:""}).fadeIn("fast")}else{g.fadeIn("fast")}}else{a.detach()}},hide:function(){$("#clipboard").removeClass("selected");$("div.folder > a > span.folder").removeClass("context");$("#menu").hide().css("width","").html("").data("title",null).unbind().click(function(){return false});$(document).unbind("keydown").keydown(function(a){return !_.selectAll(a)})}};_.menuFile=function(b,g){_.menu.init();var f=b.data(),c=$(".file.selected").get();if(b.hasClass("selected")&&c.length&&(c.length>1)){var a=false,h=0,d;$.each(c,function(j,e){d=$(e).data();if(d.thumb){a=true}if(!f.writable){h++}});if(_.opener.callBackMultiple){_.menu.addItem("kcact:pick",_.label("Select"),function(){_.returnFiles(c);return false});if(a){_.menu.addItem("kcact:pick_thumb",_.label("Select Thumbnails"),function(){_.returnThumbnails(c);return false})}}if(f.thumb||f.smallThumb||_.support.zip){_.menu.addDivider();if(f.thumb||f.smallThumb){_.menu.addItem("kcact:view",_.label("View"),function(){_.viewImage(f)})}if(_.support.zip){_.menu.addItem("kcact:download",_.label("Download"),function(){var e=[];$.each(c,function(k,j){e[k]=$(j).data("name")});_.post(_.getURL("downloadSelected"),{dir:_.dir,files:e});return false})}}if(_.access.files.copy||_.access.files.move){_.menu.addDivider();_.menu.addItem("kcact:clpbrdadd",_.label("Add to Clipboard"),function(){var e="";$.each(c,function(l,k){var m=$(k).data(),j=false;for(l=0;l<_.clipboard.length;l++){if((_.clipboard[l].name==m.name)&&(_.clipboard[l].dir==_.dir)){j=true;e+=m.name+": "+_.label("This file is already added to the Clipboard.")+"\n";break}}if(!j){m.dir=_.dir;_.clipboard[_.clipboard.length]=m}});_.initClipboard();if(e.length){_.alert(e.substr(0,e.length-1))}return false})}if(_.access.files["delete"]){_.menu.addDivider();_.menu.addItem("kcact:rm",_.label("Delete"),function(){if($(this).hasClass("denied")){return false}var e=0,k=[];$.each(c,function(m,l){var n=$(l).data();if(!n.writable){e++}else{k[k.length]=_.dir+"/"+n.name}});if(e==c.length){_.alert(_.label("The selected files are not removable."));return false}var j=function(l){_.fadeFiles();$.ajax({type:"post",dataType:"json",url:_.getURL("rm_cbd"),data:{files:k},async:false,success:function(m){if(l){l()}_.check4errors(m);_.refresh()},error:function(){if(l){l()}$("#files > div").css({opacity:"",filter:""});_.alert(_.label("Unknown error."))}})};if(e){_.confirm(_.label("{count} selected files are not removable. Do you want to delete the rest?",{count:e}),j)}else{_.confirm(_.label("Are you sure you want to delete all selected files?"),j)}return false},(h==c.length))}_.menu.show(g)}else{$(".file").removeClass("selected");b.addClass("selected");$("#fileinfo").html($.$.htmlData(f.name)+" ("+_.humanSize(f.size)+", "+f.date+")");if(_.opener.callBack||_.opener.callBackMultiple){_.menu.addItem("kcact:pick",_.label("Select"),function(){_.returnFile(b);return false});if(f.thumb){_.menu.addItem("kcact:pick_thumb",_.label("Select Thumbnail"),function(){_.returnFile(_.thumbsURL+"/"+_.dir+"/"+f.name);return false})}_.menu.addDivider()}if(f.thumb||f.smallThumb){_.menu.addItem("kcact:view",_.label("View"),function(){_.viewImage(f)})}_.menu.addItem("kcact:download",_.label("Download"),function(){$("#menu").html('
    ');$("#downloadForm input").get(0).value=_.dir;$("#downloadForm input").get(1).value=f.name;$("#downloadForm").submit();return false});if(_.access.files.copy||_.access.files.move){_.menu.addDivider();_.menu.addItem("kcact:clpbrdadd",_.label("Add to Clipboard"),function(){for(i=0;i<_.clipboard.length;i++){if((_.clipboard[i].name==f.name)&&(_.clipboard[i].dir==_.dir)){_.alert(_.label("This file is already added to the Clipboard."));return false}}var e=f;e.dir=_.dir;_.clipboard[_.clipboard.length]=e;_.initClipboard();return false})}if(_.access.files.rename||_.access.files["delete"]){_.menu.addDivider()}if(_.access.files.rename){_.menu.addItem("kcact:mv",_.label("Rename..."),function(){if(!f.writable){return false}_.fileNameDialog({dir:_.dir,file:f.name},"newName",f.name,_.getURL("rename"),{title:"New file name:",errEmpty:"Please enter new file name.",errSlash:"Unallowable characters in file name.",errDot:"File name shouldn't begins with '.'"},_.refresh);return false},!f.writable)}if(_.access.files["delete"]){_.menu.addItem("kcact:rm",_.label("Delete"),function(){if(!f.writable){return false}_.confirm(_.label("Are you sure you want to delete this file?"),function(e){$.ajax({type:"post",dataType:"json",url:_.getURL("delete"),data:{dir:_.dir,file:f.name},async:false,success:function(j){if(e){e()}_.clearClipboard();if(_.check4errors(j)){return}_.refresh()},error:function(){if(e){e()}_.alert(_.label("Unknown error."))}})});return false},!f.writable)}_.menu.show(g)}};_.menuDir=function(a,d){_.menu.init();var c=a.data(),b="
      ";if(_.clipboard&&_.clipboard.length){if(_.access.files.copy){_.menu.addItem("kcact:cpcbd",_.label("Copy {count} files",{count:_.clipboard.length}),function(){_.copyClipboard(c.path);return false},!c.writable)}if(_.access.files.move){_.menu.addItem("kcact:mvcbd",_.label("Move {count} files",{count:_.clipboard.length}),function(){_.moveClipboard(c.path);return false},!c.writable)}if(_.access.files.copy||_.access.files.move){_.menu.addDivider()}}_.menu.addItem("kcact:refresh",_.label("Refresh"),function(){_.refreshDir(a);return false});if(_.support.zip){_.menu.addDivider();_.menu.addItem("kcact:download",_.label("Download"),function(){_.post(_.getURL("downloadDir"),{dir:c.path});return false})}if(_.access.dirs.create||_.access.dirs.rename||_.access.dirs["delete"]){_.menu.addDivider()}if(_.access.dirs.create){_.menu.addItem("kcact:mkdir",_.label("New Subfolder..."),function(f){if(!c.writable){return false}_.fileNameDialog({dir:c.path},"newDir","",_.getURL("newDir"),{title:"New folder name:",errEmpty:"Please enter new folder name.",errSlash:"Unallowable characters in folder name.",errDot:"Folder name shouldn't begins with '.'"},function(){_.refreshDir(a);_.initDropUpload();if(!c.hasDirs){a.data("hasDirs",true);a.children("span.brace").addClass("closed")}});return false},!c.writable)}if(_.access.dirs.rename){_.menu.addItem("kcact:mvdir",_.label("Rename..."),function(f){if(!c.removable){return false}_.fileNameDialog({dir:c.path},"newName",c.name,_.getURL("renameDir"),{title:"New folder name:",errEmpty:"Please enter new folder name.",errSlash:"Unallowable characters in folder name.",errDot:"Folder name shouldn't begins with '.'"},function(e){if(!e.name){_.alert(_.label("Unknown error."));return}var g=(c.path==_.dir);a.children("span.folder").html($.$.htmlData(e.name));a.data("name",e.name);a.data("path",$.$.dirname(c.path)+"/"+e.name);if(g){_.dir=a.data("path")}_.initDropUpload()},true);return false},!c.removable)}if(_.access.dirs["delete"]){_.menu.addItem("kcact:rmdir",_.label("Delete"),function(){if(!c.removable){return false}_.confirm(_.label("Are you sure you want to delete this folder and all its content?"),function(e){$.ajax({type:"post",dataType:"json",url:_.getURL("deleteDir"),data:{dir:c.path},async:false,success:function(f){if(e){e()}if(_.check4errors(f)){return}a.parent().hide(500,function(){var h=a.parent().parent();var g=h.parent().children("a").first();a.parent().detach();if(!h.children("div.folder").get(0)){g.children("span.brace").first().removeClass("opened closed");g.parent().children(".folders").detach();g.data("hasDirs",false)}if(g.data("path")==_.dir.substr(0,g.data("path").length)){_.changeDir(g)}_.initDropUpload()})},error:function(){if(e){e()}_.alert(_.label("Unknown error."))}})});return false},!c.removable)}_.menu.show(d);$("div.folder > a > span.folder").removeClass("context");if(a.children("span.folder").hasClass("regular")){a.children("span.folder").addClass("context")}};_.openClipboard=function(){if(!_.clipboard||!_.clipboard.length){return}if($('#menu a[href="kcact:clrcbd"]').html()){$("#clipboard").removeClass("selected");_.menu.hide();return}setTimeout(function(){_.menu.init();var k=$("#menu"),e=$("#status"),f='
    • ';$.each(_.clipboard,function(a,l){var b=$.$.getFileExtension(l.name);if(l.thumb){b=".image"}else{if(!l.smallIcon||!b.length){b="."}}b="themes/"+_.theme+"/img/files/small/"+b+".png";f+=''+$.$.htmlData($.$.basename(l.name))+""});f+='
    • -
    • ';$("#menu ul").append(f);if(_.support.zip){_.menu.addItem("kcact:download",_.label("Download files"),function(){_.downloadClipboard();return false})}if(_.access.files.copy||_.access.files.move||_.access.files["delete"]){_.menu.addDivider()}if(_.access.files.copy){_.menu.addItem("kcact:cpcbd",_.label("Copy files here"),function(){if(!_.dirWritable){return false}_.copyClipboard(_.dir);return false},!_.dirWritable)}if(_.access.files.move){_.menu.addItem("kcact:mvcbd",_.label("Move files here"),function(){if(!_.dirWritable){return false}_.moveClipboard(_.dir);return false},!_.dirWritable)}if(_.access.files["delete"]){_.menu.addItem("kcact:rmcbd",_.label("Delete files"),function(){_.confirm(_.label("Are you sure you want to delete all files in the Clipboard?"),function(a){if(a){a()}_.deleteClipboard()});return false})}_.menu.addDivider();_.menu.addItem("kcact:clrcbd",_.label("Clear the Clipboard"),function(){_.clearClipboard();return false});$("#clipboard").addClass("selected");_.menu.show();var h=$(window).width()-k.css({width:""}).outerWidth(),g=$(window).height()-k.outerHeight()-e.outerHeight(),j=g+k.outerTopSpace();k.find(".list").css({"max-height":j,"overflow-y":"auto","overflow-x":"hidden",width:""});g=$(window).height()-k.outerHeight(true)-e.outerHeight(true);k.css({left:h-5,top:g}).fadeIn("fast");var d=k.find(".list").outerHeight(),c=k.find(".list div").outerHeight();if(c-d>10){k.css({left:parseInt(k.css("left"))-_.scrollbarWidth}).width(k.width()+_.scrollbarWidth)}},1)};_.viewImage=function(d){var c=new Date().getTime(),e=false,a=[],b=function(k){_.lock=true;$("#loading").html(_.label("Loading image...")).show();var h=$.$.escapeDirs(_.uploadURL+"/"+_.dir+"/"+k.name)+"?ts="+c,g=new Image(),j=$(g),f=$(window),l=$(document);onImgLoad=function(){_.lock=false;$("#files .file").each(function(){if($(this).data("name")==k.name){_.ssImage=this;return false}});j.hide().appendTo("body");var w=j.width(),s=j.height(),u=w,o=s,n=function(y){if(!_.lock){var t=a[y];_.currImg=y;b(t)}},p=function(){n((_.currImg>=a.length-1)?0:(_.currImg+1))},i=function(){n((_.currImg?_.currImg:a.length)-1)},x=$("
      ");j.detach().appendTo(x);x.addClass("img");if(!e){var q=f.width()-60,v=function(){l.unbind("keydown").keydown(function(t){return !_.selectAll(t)});e.dialog("destroy").detach()};if((q%2)){q++}e=_.dialog($.$.htmlData(k.name),x.get(0),{width:q,height:f.height()-36,position:[30,30],draggable:false,nopadding:true,close:v,show:false,hide:false,buttons:[{text:_.label("Previous"),icons:{primary:"ui-icon-triangle-1-w"},click:i},{text:_.label("Next"),icons:{secondary:"ui-icon-triangle-1-e"},click:p},{text:_.label("Select"),icons:{primary:"ui-icon-check"},click:function(t){l.unbind("keydown").keydown(function(y){return !_.selectAll(y)});if(_.ssImage){_.selectFile($(_.ssImage),t)}e.dialog("destroy").detach()}},{text:_.label("Close"),icons:{primary:"ui-icon-closethick"},click:v}]});e.addClass("kcfImageViewer").css("overflow","hidden").parent().find(".ui-dialog-buttonpane button").get(2).focus()}else{e.prev().find(".ui-dialog-title").html($.$.htmlData(k.name));e.html(x.get(0))}e.unbind("click").click(p).disableTextSelect();var r=e.innerWidth(),m=e.innerHeight();if((w>r)||(s>m)){u=r;o=m;if((r/m)>(w/s)){u=parseInt((w*m)/s)}else{if((r/m)<(w/s)){o=parseInt((s*r)/w)}}}j.css({width:u,height:o}).show().parent().css({display:"block",margin:"0 auto",width:u,height:o,marginTop:parseInt((m-o)/2)});$("#loading").hide();l.unbind("keydown").keydown(function(y){if(!_.lock){var t=y.keyCode;if((t==37)){i()}if((t==39)){p()}}})};g.src=h;if(g.complete){onImgLoad()}else{g.onload=onImgLoad;g.onerror=function(){_.lock=false;$("#loading").hide();_.alert(_.label("Unknown error."));l.unbind("keydown").keydown(function(i){return !_.selectAll(i)});_.refresh()}}};$.each(_.files,function(g,f){var g=a.length;if(f.thumb||f.smallThumb){a[g]=f}if(f.name==d.name){_.currImg=g}});b(d);return false};_.initClipboard=function(){if(!_.clipboard||!_.clipboard.length){return}var b=0,c=$("#clipboard");$.each(_.clipboard,function(d,e){b+=e.size});b=_.humanSize(b);c.disableTextSelect().html('
      ');var a=function(){c.css({left:$(window).width()-c.outerWidth(),top:$(window).height()-c.outerHeight()})};a();c.show();$(window).unbind().resize(function(){_.resize();a()})};_.removeFromClipboard=function(a){if(!_.clipboard||!_.clipboard[a]){return false}if(_.clipboard.length==1){_.clearClipboard();_.menu.hide();return}if(a<_.clipboard.length-1){var b=_.clipboard.slice(a+1);_.clipboard=_.clipboard.slice(0,a);_.clipboard=_.clipboard.concat(b)}else{_.clipboard.pop()}_.initClipboard();_.menu.hide();_.openClipboard();return true};_.copyClipboard=function(b){if(!_.clipboard||!_.clipboard.length){return}var d=[],a=0;for(i=0;i<_.clipboard.length;i++){if(_.clipboard[i].readable){d[i]=_.clipboard[i].dir+"/"+_.clipboard[i].name}else{a++}}if(_.clipboard.length==a){_.alert(_.label("The files in the Clipboard are not readable."));return}var c=function(e){if(b==_.dir){_.fadeFiles()}$.ajax({type:"post",dataType:"json",url:_.getURL("cp_cbd"),data:{dir:b,files:d},async:false,success:function(f){if(e){e()}_.check4errors(f);_.clearClipboard();if(b==_.dir){_.refresh()}},error:function(){if(e){e()}$("#files > div").css({opacity:"",filter:""});_.alert(_.label("Unknown error."))}})};if(a){_.confirm(_.label("{count} files in the Clipboard are not readable. Do you want to copy the rest?",{count:a}),c)}else{c()}};_.moveClipboard=function(b){if(!_.clipboard||!_.clipboard.length){return}var d=[],a=0;for(i=0;i<_.clipboard.length;i++){if(_.clipboard[i].readable&&_.clipboard[i].writable){d[i]=_.clipboard[i].dir+"/"+_.clipboard[i].name}else{a++}}if(_.clipboard.length==a){_.alert(_.label("The files in the Clipboard are not movable."));return}var c=function(e){_.fadeFiles();$.ajax({type:"post",dataType:"json",url:_.getURL("mv_cbd"),data:{dir:b,files:d},async:false,success:function(f){if(e){e()}_.check4errors(f);_.clearClipboard();_.refresh()},error:function(){if(e){e()}$("#files > div").css({opacity:"",filter:""});_.alert(_.label("Unknown error."))}})};if(a){_.confirm(_.label("{count} files in the Clipboard are not movable. Do you want to move the rest?",{count:a}),c)}else{c()}};_.deleteClipboard=function(){if(!_.clipboard||!_.clipboard.length){return}var c=[],a=0;for(i=0;i<_.clipboard.length;i++){if(_.clipboard[i].readable&&_.clipboard[i].writable){c[i]=_.clipboard[i].dir+"/"+_.clipboard[i].name}else{a++}}if(_.clipboard.length==a){_.alert(_.label("The files in the Clipboard are not removable."));return}var b=function(d){_.fadeFiles();$.ajax({type:"post",dataType:"json",url:_.getURL("rm_cbd"),data:{files:c},async:false,success:function(e){if(d){d()}_.check4errors(e);_.clearClipboard();_.refresh()},error:function(){if(d){d()}$("#files > div").css({opacity:"",filter:""});_.alert(_.label("Unknown error."))}})};if(a){_.confirm(_.label("{count} files in the Clipboard are not removable. Do you want to delete the rest?",{count:a}),b)}else{b()}};_.downloadClipboard=function(){if(!_.clipboard||!_.clipboard.length){return}var a=[];for(i=0;i<_.clipboard.length;i++){if(_.clipboard[i].readable){a[i]=_.clipboard[i].dir+"/"+_.clipboard[i].name}}if(a.length){_.post(_.getURL("downloadClipboard"),{files:a})}};_.clearClipboard=function(){$("#clipboard").html("");_.clipboard=[]};_.initDropUpload=function(){if((typeof XMLHttpRequest=="undefined")||(typeof document.addEventListener=="undefined")||(typeof File=="undefined")||(typeof FileReader=="undefined")){return}if(!XMLHttpRequest.prototype.sendAsBinary){XMLHttpRequest.prototype.sendAsBinary=function(r){var s=Array.prototype.map.call(r,function(t){return t.charCodeAt(0)&255}),q=new Uint8Array(s);this.send(q.buffer)}}var n=[],a=false,l=0,o=[],b=$("#files"),f=$("div.folder > a"),e="------multipartdropuploadboundary"+(new Date).getTime(),d,k=function(q){if(q.preventDefault){q.preventDefault()}$("#files").addClass("drag");return false},p=function(q){if(q.preventDefault){q.preventDefault()}return false},h=function(q){if(q.preventDefault){q.preventDefault()}$("#files").removeClass("drag");return false},j=function(s){if(s.preventDefault){s.preventDefault()}if(s.stopPropagation){s.stopPropagation()}$("#files").removeClass("drag");if(!$("#folders span.current").first().parent().data("writable")){_.alert("Cannot write to upload folder.");return false}l+=s.dataTransfer.files.length;for(var r=0;rd){return g?-1:1}}if(c==d){c=i.name.toLowerCase();d=h.name.toLowerCase();a=[c,d];a=a.sort();return(a[0]==c)?-1:1}a=[c,d];a=a.sort();if(a[0]==c){return g?1:-1}return g?-1:1});_.showFiles(f,e);_.initFiles()};_.humanSize=function(a){if(a<1024){a=a.toString()+" B"}else{if(a<1048576){a/=1024;a=parseInt(a).toString()+" KB"}else{if(a<1073741824){a/=1048576;a=parseInt(a).toString()+" MB"}else{if(a<1099511627776){a/=1073741824;a=parseInt(a).toString()+" GB"}else{a/=1099511627776;a=parseInt(a).toString()+" TB"}}}}return a};_.getURL=function(a){var b="browse.php?type="+encodeURIComponent(_.type)+"&lng="+encodeURIComponent(_.lang);if(_.opener.name){b+="&opener="+encodeURIComponent(_.opener.name)}if(a){b+="&act="+encodeURIComponent(a)}if(_.cms){b+="&cms="+encodeURIComponent(_.cms)}return b};_.label=function(b,c){var a=_.labels[b]?_.labels[b]:b;if(c){$.each(c,function(d,e){a=a.replace("{"+d+"}",e)})}return a};_.check4errors=function(a){if(!a.error){return false}var b=a.error.join?a.error.join("\n"):a.error;_.alert(b);return true};_.post=function(a,c){var b='
      ';$.each(c,function(d,e){if($.isArray(e)){$.each(e,function(g,f){b+=''})}else{b+=''}});b+="
      ";$("#menu").html(b).show();$("#postForm").get(0).submit()};_.fadeFiles=function(){$("#files > div").css({opacity:"0.4",filter:"alpha(opacity=40)"})}; \ No newline at end of file diff --git a/additions/kcfinder/cache/theme_dark.css b/additions/kcfinder/cache/theme_dark.css new file mode 100644 index 0000000..6191df3 --- /dev/null +++ b/additions/kcfinder/cache/theme_dark.css @@ -0,0 +1 @@ +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width: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;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:alpha(opacity=0)}.ui-front{z-index:100}.ui-widget .ui-widget,.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-size:1em}.ui-widget-content{border:1px solid #888;background:#000;color:#aaa}.ui-widget-content a{color:#aaa}.ui-widget-header{border:1px solid #4685b3;color:#fff;font-weight:bold;background:#184977;background:-webkit-linear-gradient(top,#184977,#4685b3);background:-moz-linear-gradient(top,#184977,#4685b3);background:-ms-linear-gradient(top,#184977,#4685b3);background:-o-linear-gradient(top,#184977,#4685b3);background:linear-gradient(to bottom,#184977,#4685b3)}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-widget.ui-state-disabled{transition:.2s;border:1px solid #555;background:#333;background:-webkit-linear-gradient(top,#555,#111);background:-moz-linear-gradient(top,#555,#111);background:-ms-linear-gradient(top,#555,#111);background:-o-linear-gradient(top,#555,#111);background:linear-gradient(to bottom,#555,#111);font-weight:bold;color:#aaa}.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{transition:.2s;background:-webkit-linear-gradient(top,#111,#555);background:-moz-linear-gradient(top,#111,#555);background:-ms-linear-gradient(top,#111,#555);background:-o-linear-gradient(top,#111,#555);background:linear-gradient(to bottom,#111,#555)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,.ui-menu .ui-state-focus{transition:.2s;border:1px solid #184977;background:#4685b3;background:-webkit-linear-gradient(top,#184977,#4685b3);background:-moz-linear-gradient(top,#184977,#4685b3);background:-ms-linear-gradient(top,#184977,#4685b3);background:-o-linear-gradient(top,#184977,#4685b3);background:linear-gradient(to bottom,#184977,#4685b3);font-weight:bold;color:#fff}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{transition:.2s;color:#fff;text-decoration:none}.ui-menu .ui-state-active{transition:.2s;border-color:#6b6b6b;background:#6b6b6b;background:-webkit-linear-gradient(top,#6b6b6b,#ababab);background:-moz-linear-gradient(top,#6b6b6b,#ababab);background:-ms-linear-gradient(top,#6b6b6b,#ababab);background:-o-linear-gradient(top,#6b6b6b,#ababab);background:linear-gradient(to bottom,#6b6b6b,#ababab)}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #d5bc2c;box-shadow:inset 0 0 5px #d5bc2c;background:#fff6bf;color:#aaa}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cf7f7f;box-shadow:inset 0 0 5px #cf7f7f;background:#fac4c4;color:#aaa}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a,.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a,.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#aaa}.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:.5;filter:alpha(opacity=50);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.50;filter:alpha(opacity=50);background-image:none}.ui-state-disabled .ui-icon{filter:alpha(opacity=50)}.ui-state-disabled{cursor:default !important}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:6px;min-height:0}.ui-accordion .ui-accordion-icons,.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:24px}.ui-accordion .ui-accordion-noicons{padding-left:5px}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:5px;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:pointer}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:36px}.ui-button-icons-only{width:50px}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:6px 10px}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:6px;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:6px 10px 6px 28px}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:6px 28px 6px 10px}.ui-button-text-icons .ui-button-text{padding-left:28px;padding-right:28px}input.ui-button{padding:6px 10px}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:7px}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:7px}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-buttonset{margin:0;overflow:auto}.ui-buttonset .ui-button{margin:0;float:left}.ui-datepicker{width:19em;display:none;padding:10px}.ui-datepicker .ui-datepicker-header{position:relative;padding:2px 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:4px;width:20px;height:20px}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:3px}.ui-datepicker .ui-datepicker-prev{left:4px}.ui-datepicker .ui-datepicker-next{right:4px}.ui-datepicker .ui-datepicker-prev-hover{left:3px}.ui-datepicker .ui-datepicker-next-hover{right:3px}.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 10px;padding:4px 0;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:-2px 2px;padding:0;outline:0}.ui-datepicker table{width:100%;border-collapse:collapse;margin:0;font-size:1em}.ui-datepicker th{padding:3px;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:2px 3px;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:10px -11px -11px -11px;padding:10px;border:1px solid #184977;background:#e4f5ff;overflow:auto}.ui-datepicker .ui-datepicker-buttonpane button{float:right;cursor:pointer;width:auto;overflow:visible;margin:0;padding:6px 10px;font-weight:bold;opacity:1;filter:alpha(opacity=100)}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto;padding:10px}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group .ui-datepicker-header{margin:0}.ui-datepicker-multi .ui-datepicker-group.ui-datepicker-group-last{margin-right:0}.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,.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;font-size:0;width:100px}th.ui-datepicker-week-col{color:#215b82}td.ui-datepicker-week-col{text-align:right;padding-right:7px;color:#215b82}td.ui-datepicker-other-month a.ui-state-default{font-weight:bold}th.ui-datepicker-week-end{color:#f44}.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,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:4px;outline:0;box-shadow:0 0 10px #000}.ui-dialog .ui-dialog-titlebar{padding:5px 10px;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:0;padding:1px 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:1em;margin:0 -4px;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;padding:10px}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:0 0 0 5px;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:1px 10px 1px 10px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0;border-color:#777}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:5px 10px;line-height:1.5;min-height:0;font-weight:normal;border-radius:0}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px;transition:none}.ui-menu .ui-state-disabled{font-weight:normal;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu.ui-corner-all.sh-menu{border-radius:4px}.ui-menu.ui-corner-all,.ui-menu.sh-menu.ui-autocomplete.ui-corner-all{border-radius:0}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2.1em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left;margin:0 13px;border-radius:15px}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:18px;height:18px;border-radius:9px;cursor:default;box-shadow:0 0 3px #aaa,inset 0 0 7px #fff,inset 0 0 3px #fff}.ui-slider .ui-slider-handle.ui-state-active{box-shadow:0 0 3px #4685b3,inset 0 0 7px #fff,inset 0 0 3px #fff}.ui-slider .ui-slider-range{position:absolute;z-index:1;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:10px}.ui-slider-horizontal .ui-slider-handle{top:-5px;margin-left:-9px}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:10px;height:150px}.ui-slider-vertical .ui-slider-handle{left:-5px;margin-left:0;margin-bottom:-9px}.ui-slider-vertical .ui-slider-range{left:-1px;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner.ui-widget{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle;background:#fff;background:-webkit-linear-gradient(top,#f0f0f0,#fff);background:-moz-linear-gradient(top,#f0f0f0,#fff);background:-ms-linear-gradient(top,#f0f0f0,#fff);background:-o-linear-gradient(top,#f0f0f0,#fff);background:linear-gradient(to bottom,#f0f0f0,#fff)}.ui-spinner-input{border:0;color:inherit;padding:0;margin:6px 24px 6px 10px;vertical-align:middle;outline:0;background:transparent}.ui-spinner-input{color:#aaa}.ui-spinner-input:focus{color:#000}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative}.ui-tabs .ui-tabs-nav{margin:0;padding:3px 3px 0 3px}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px 3px 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:6px 10px;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em;background:0}body .ui-tooltip{padding:6px 10px;position:absolute;z-index:9999;max-width:300px;color:gray;border-color:#a5a5a5;box-shadow:inset 0 0 4px #a5a5a5,0 0 4px #a5a5a5;background:-webkit-linear-gradient(top,#ddd,#fff);background:-moz-linear-gradient(top,#ddd,#fff);background:-ms-linear-gradient(top,#ddd,#fff);background:-o-linear-gradient(top,#ddd,#fff);background:linear-gradient(to bottom,#ddd,#fff)}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;width:16px;height:16px}.ui-icon,.ui-button.ui-state-active .ui-icon,.ui-dialog .ui-dialog-titlebar-close .ui-icon{background-image:url(img/ui-icons_white.png)}.ui-button .ui-icon{background-image:url(img/ui-icons_grey.png)}.ui-icon-blank{background-position:16px 16px}.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-on{background-position:-96px -144px}.ui-icon-radio-off{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{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}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl,.ui-menu .ui-menu-item.ui-menu-item-first a{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr,.ui-menu .ui-menu-item.ui-menu-item-first a{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl,.ui-menu .ui-menu-item.ui-menu-item-last a,.ui-dialog-buttonpane,.ui-datepicker-multi .ui-datepicker-group-first .ui-datepicker-header,.ui-datepicker .ui-datepicker-buttonpane{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br,.ui-menu .ui-menu-item.ui-menu-item-last a,.ui-dialog-buttonpane,.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker .ui-datepicker-buttonpane{border-bottom-right-radius:4px}.ui-widget-overlay{background:rgba(255,255,255,.5)}.ui-widget-shadow{margin:-7px 0 0 -7px;padding:7px;background:rgba(0,0,0,.3);border-radius:8px}.ui-accordion-content-active,.ui-tabs,.ui-slider-range,.ui-datepicker,.ui-dialog{border-color:#4d637c}.ui-slider .ui-slider-range{border:1px solid #4685b3;top:-1px}.ui-progressbar{overflow:visible}.ui-progressbar-value{border:1px solid #4685b3;margin-top:-1px}.ui-button{box-shadow:inset 0 0 3px #555,inset 0 0 6px #555,0 0 3px #000,0 0 2px #000}.ui-button.ui-state-active{box-shadow:inset 0 0 3px #88b9da,0 0 3px #000,0 0 2px #000}.ui-widget-header,.ui-menu-item .ui-state-focus{box-shadow:inset 0 0 3px #88b9da}.ui-state-default,.ui-state-focus,.ui-state-active,.ui-widget-header,fieldset.sh-uniform label,fieldset.sh-uniform legend{text-shadow:1px 0 rgba(0,0,0,.2),-1px 0 rgba(0,0,0,.2),0 -1px rgba(0,0,0,.2),0 1px rgba(0,0,0,.2),1px 1px rgba(0,0,0,.2),-1px -1px rgba(0,0,0,.2),1px -1px rgba(0,0,0,.2),-1px 1px rgba(0,0,0,.2)}.ui-tabs .ui-state-active,.ui-datepicker .ui-state-highlight{text-shadow:none}.ui-datepicker .ui-state-highlight{color:#215b82;border-color:#4685b3;box-shadow:inset 0 0 4px #4685b3;background:#fff;background:-webkit-linear-gradient(top,#dfeef8,#fff);background:-moz-linear-gradient(top,#dfeef8,#fff);background:-ms-linear-gradient(top,#dfeef8,#fff);background:-o-linear-gradient(top,#dfeef8,#fff);background:linear-gradient(to bottom,#dfeef8,#fff)}.ui-progressbar,.ui-slider,.ui-menu{box-shadow:inset 0 0 4px #666,0 0 3px #000,0 0 6px #000;background:#000;background:-webkit-linear-gradient(top,#111,#444);background:-moz-linear-gradient(top,#111,#444);background:-ms-linear-gradient(top,#111,#444);background:-o-linear-gradient(top,#111,#444);background:linear-gradient(to bottom,#111,#444)}.ui-slider,.ui-spinner,.ui-progressbar,.ui-menu{border-color:#555}.ui-datepicker-calendar .ui-state-default{border-radius:3px}.ui-tabs .ui-tabs-nav{margin:-1px;border-bottom-right-radius:0;border-bottom-left-radius:0;padding-left:3px}.ui-tabs-active.ui-state-active{background:#fff;background:-webkit-linear-gradient(top,#ccc,#ddd,#eee,#fff,#fff,#fff);background:-moz-linear-gradient(top,#ccc,#ddd,#eee,#fff,#fff,#fff);background:-ms-linear-gradient(top,#ccc,#ddd,#eee,#fff,#fff,#fff);background:-o-linear-gradient(top,#ccc,#ddd,#eee,#fff,#fff,#fff);background:linear-gradient(to bottom,#ccc,#ddd,#eee,#fff,#fff,#fff);box-shadow:inset 0 0 5px #fff,inset 0 0 5px #fff,inset 0 0 5px #fff}.ui-tabs-active.ui-state-active a{color:#215b82}.ui-state-default,.ui-state-default a{outline:0}.ui-datepicker-header,.ui-dialog-titlebar{border-bottom-right-radius:0;border-bottom-left-radius:0;margin:-5px -5px 0 -5px}.ui-datepicker-header{margin:-11px -11px 5px -11px}.ui-datepicker-header a:hover{cursor:pointer}.ui-dialog-titlebar-close.ui-state-default{border-color:transparent;background:0;box-shadow:none}.ui-dialog-titlebar-close.ui-state-default.ui-state-hover{transition:.2s;border:1px solid #555;background:#333;background:-webkit-linear-gradient(top,#555,#111);background:-moz-linear-gradient(top,#555,#111);background:-ms-linear-gradient(top,#555,#111);background:-o-linear-gradient(top,#555,#111);background:linear-gradient(to bottom,#555,#111);box-shadow:inset 0 0 3px #555,inset 0 0 6px #555,0 0 3px #000,0 0 2px #000}.ui-dialog-buttonpane{background:#202d3e;box-shadow:inset 0 0 3px #000,inset 0 0 2px #000;border-top-color:#4d637c;margin:0 -4px -4px -4px;padding:0}div.checker input,input[type="search"],input[type="search"]:active{-moz-appearance:none;-webkit-appearance:none}div.selector,div.selector span,div.checker span,div.radio span,div.uploader,div.uploader span.action,div.button,div.button span{-webkit-font-smoothing:antialiased}div.selector,div.checker,div.button,div.radio,div.uploader{display:-moz-inline-box;display:inline-block;zoom:1;vertical-align:middle}div.checker span,div.checker input,div.radio span,div.radio input,div.button span{display:-moz-inline-box;display:inline-block;zoom:1;text-align:center}div.selector select,div.checker input,div.button button,div.button input,div.button a,div.radio input,div.uploader input,input.uniform-input,select.uniform-multiselect,textarea.uniform{outline:0}div.selector,div.selector *,div.radio,div.radio *,div.checker,div.checker *,div.uploader,div.uploader *,div.button,div.button *{margin:0;padding:0}div.selector{padding:0 1.9em 0 0;position:relative;overflow:hidden;border:1px solid;border-radius:4px}div.selector span{text-overflow:ellipsis;display:block;overflow:hidden;white-space:nowrap;padding:6px 0 6px 10px;cursor:pointer;width:100%;border-right:1px solid;border-top-left-radius:4px;border-bottom-left-radius:4px}div.selector .ui-icon{background:url(img/ui-icons_grey.png) -65px -16px}div.selector select{opacity:0;filter:alpha(opacity=0);border:0;background:0;position:absolute;height:50px;bottom:0;width:100%;cursor:pointer}div.checker{position:relative;border:1px solid;padding:1px;border-radius:4px}div.checker,div.checker span,div.checker input{width:15px;height:15px}div.checker span.checked{background:url(img/ui-icons_grey.png) -64px -145px}div.checker input{opacity:0;filter:alpha(opacity=0);border:0;background:0;cursor:pointer}div.radio{position:relative;border:1px solid;padding:1px;border-radius:9px}div.radio,div.radio span,div.radio input{width:15px;height:15px}div.radio span.checked{background:url(img/ui-icons_grey.png) -80px -145px}div.radio input{opacity:0;border:0;background:0;cursor:pointer}div.uploader{cursor:pointer;position:relative;overflow:hidden;border-radius:4px}div.uploader span.action{text-align:center;float:left;display:inline;overflow:hidden;cursor:pointer;padding:6px 10px;border-top-right-radius:4px;border-bottom-right-radius:4px}div.uploader span.filename{text-overflow:ellipsis;display:block;overflow:hidden;white-space:nowrap;float:left;padding:6px 10px;border-right:1px solid;border-top-left-radius:4px;border-bottom-left-radius:4px}div.uploader input{opacity:0;filter:alpha(opacity=0);border:0;background:0;position:absolute;top:0;right:0;float:right;cursor:pointer;font-size:100px}div.uploader input::-webkit-file-upload-button{cursor:pointer}div.uploader.active span.filename,div.uploader.focus span.filename{border-right:1px solid}div.button{cursor:pointer;position:relative;overflow:hidden;border:1px solid;border-radius:4px}div.button a,div.button button,div.button input{opacity:0;filter:alpha(opacity=0);display:block;left:0;top:0;position:absolute;margin:0;padding:0;font-size:1000px;cursor:pointer}div.button span{padding:0;margin:6px 10px}input.uniform-input,select.uniform-multiselect,textarea.uniform{margin:0;border:1px solid;border-radius:4px}input.uniform-input,textarea.uniform{padding:6px 10px}textarea.uniform{overflow:auto}select.uniform-multiselect{padding:5px}div.uploader{border:1px solid #aaa}div.uploader.active,div.uploader.focus{border-color:#184977}input.uniform-input,select.uniform-multiselect,textarea.uniform,div.uploader span.filename,div.selector span{border-color:#666;box-shadow:inset 0 0 4px #555;background:#000;background:-webkit-linear-gradient(top,#111,#333);background:-moz-linear-gradient(top,#111,#333);background:-ms-linear-gradient(top,#111,#333);background:-o-linear-gradient(top,#111,#333);background:linear-gradient(to bottom,#111,#333);color:#aaa}select.uniform-multiselect option{color:#aaa}select.uniform-multiselect.focus option{color:#000}input.uniform-input.focus,select.uniform-multiselect.focus,textarea.uniform.focus,div.uploader.active span.filename,div.uploader.focus span.filename,div.selector.active span,div.selector.focus span{border-color:#4d637c;box-shadow:inset 0 0 4px #4d637c;color:#fff;background:#202d3e;background:-webkit-linear-gradient(top,#131427,#273446);background:-moz-linear-gradient(top,#131427,#273446);background:-ms-linear-gradient(top,#131427,#273446);background:-o-linear-gradient(top,#131427,#273446);background:linear-gradient(to bottom,#131427,#273446)}input.uniform-input[readonly],textarea.uniform[readonly],input.uniform-input[readonly]:focus,textarea.uniform[readonly]:focus{color:gray;border-color:#a5a5a5;box-shadow:inset 0 0 4px #a5a5a5;background:-webkit-linear-gradient(top,#ddd,#fff);background:-moz-linear-gradient(top,#ddd,#fff);background:-ms-linear-gradient(top,#ddd,#fff);background:-o-linear-gradient(top,#ddd,#fff);background:linear-gradient(to bottom,#ddd,#fff)}div.selector,div.button,div.uploader span.action,div.radio,div.checker{border-color:#555;background:#333;background:-webkit-linear-gradient(top,#555,#111);background:-moz-linear-gradient(top,#555,#111);background:-ms-linear-gradient(top,#555,#111);background:-o-linear-gradient(top,#555,#111);background:linear-gradient(to bottom,#555,#111);box-shadow:inset 0 0 7px #555,inset 0 0 3px #555,0 0 3px #000,0 0 6px #000}div.selector.hover,div.button.hover,div.uploader.hover span.action,div.radio.hover,div.checker.hover{background:#333;background:-webkit-linear-gradient(top,#111,#555);background:-moz-linear-gradient(top,#111,#555);background:-ms-linear-gradient(top,#111,#555);background:-o-linear-gradient(top,#111,#555);background:linear-gradient(to bottom,#111,#555)}div.selector.focus,div.button.focus,div.uploader.focus span.action,div.radio.focus,div.checker.focus{color:#fff;border-color:#4685b3;background:#4685b3;background:-webkit-linear-gradient(top,#4685b3,#184977);background:-moz-linear-gradient(top,#4685b3,#184977);background:-ms-linear-gradient(top,#4685b3,#184977);background:-o-linear-gradient(top,#4685b3,#184977);background:linear-gradient(to bottom,#4685b3,#184977);box-shadow:inset 0 0 7px #4e9ed4,inset 0 0 3px #4e9ed4,0 0 3px #000,0 0 6px #000}div.button.active,div.button.active.hover,div.button.focus.hover,div.uploader.active span.action,div.uploader.active.hover span.action,div.uploader.focus.hover span.action,div.radio.active,div.radio.active.hover,div.radio.focus.hover,div.checker.active,div.checker.active.hover,div.checker.focus.hover,div.selector.active,div.selector.active.hover{color:#fff;border-color:#4685b3;background:#184977;background:-webkit-linear-gradient(top,#184977,#4685b3);background:-moz-linear-gradient(top,#184977,#4685b3);background:-ms-linear-gradient(top,#184977,#4685b3);background:-o-linear-gradient(top,#184977,#4685b3);background:linear-gradient(to bottom,#184977,#4685b3);box-shadow:inset 0 0 7px #4e9ed4,inset 0 0 3px #4e9ed4,0 0 3px #000,0 0 6px #000}div.selector.focus .ui-icon,div.checker.focus span.checked,div.radio.focus span.checked,div.selector.active .ui-icon,div.checker.active span.checked,div.radio.active span.checked{background-image:url(img/ui-icons_white.png)}input.uniform-input[disabled],select.uniform-multiselect[disabled],textarea.uniform[disabled],div.button.disabled,div.uploader.disabled,div.radio.disabled,div.checker.disabled,div.selector.disabled,div.selector.disabled.active{opacity:.5;filter:alpha(opacity=50);cursor:default}div.selector.disabled select,div.uploader.disabled input,div.button.disabled input,div.button.disabled button,div.button.disabled a,div.radio.disabled input,div.checker.disabled input{cursor:default}div.button span,div.uploader span.action{font-weight:bold;color:#aaa;text-shadow:1px 0 rgba(0,0,0,.2),-1px 0 rgba(0,0,0,.2),0 -1px rgba(0,0,0,.2),0 1px rgba(0,0,0,.2),1px 1px rgba(0,0,0,.2),-1px -1px rgba(0,0,0,.2),1px -1px rgba(0,0,0,.2),-1px 1px rgba(0,0,0,.2)}input.uniform-input::-webkit-input-placeholder,textarea.uniform::-webkit-input-placeholder{color:#ababab}input.uniform-input:-moz-placeholder,textarea.uniform::-moz-placeholder{color:#aaa}input.uniform-input::-moz-placeholder,textarea.uniform::-moz-placeholder{color:#aaa}input.uniform-input:-ms-input-placeholder,textarea.uniform:-ms-input-placeholder{color:#ababab}input.uniform-input:focus::-webkit-input-placeholder,textarea.uniform:focus::-webkit-input-placeholder{color:#184977}input.uniform-input:focus:-moz-placeholder,textarea.uniform:focus:-moz-placeholder{color:#184977}input.uniform-input:focus::-moz-placeholder,textarea.uniform:focus::-moz-placeholder{color:#184977}input.uniform-input:focus:-ms-input-placeholder,textarea.uniform:focus:-ms-input-placeholder{color:#184977}fieldset.sh-uniform{color:#aaa;border:1px solid #425064;border-radius:4px;background:#202d3e;box-shadow:inset 0 0 3px #000,inset 0 0 6px #000,0 0 3px #425064,0 0 2px #425064;margin:0 10px 10px 0;padding:10px}fieldset.sh-uniform legend{font-weight:bold;color:#aaa}label.sh-uniform{color:#aaa}.shcs{margin:0}.shcs>div{border:1px solid;border-top:0;padding:5px;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.shcs>input,.shcs>input:focus,.shcs>input:hover{border-bottom-left-radius:0;border-bottom-right-radius:0;margin:0}.shcs label{padding:2px 5px 2px 2px;border:1px solid transparent;border-radius:4px;color:#aaa}.shcs>div,.shcs label:hover{border-color:#aaa;box-shadow:inset 0 0 4px #aaa;background:#fff;background:-webkit-linear-gradient(top,#f0f0f0,#fff);background:-moz-linear-gradient(top,#f0f0f0,#fff);background:-ms-linear-gradient(top,#f0f0f0,#fff);background:-o-linear-gradient(top,#f0f0f0,#fff);background:linear-gradient(to bottom,#f0f0f0,#fff)}.shcs label:hover{color:#aaa;cursor:pointer}.shcs>div.focus,.shcs label.checked{border-color:#184977;box-shadow:inset 0 0 4px #4685b3;color:#000;background:#fff;background:-webkit-linear-gradient(top,#dfeef8,#fff);background:-moz-linear-gradient(top,#dfeef8,#fff);background:-ms-linear-gradient(top,#dfeef8,#fff);background:-o-linear-gradient(top,#dfeef8,#fff);background:linear-gradient(to bottom,#dfeef8,#fff)}.shcs label.checked div.checker{border-color:#4685b3;background:#4685b3;background:-webkit-linear-gradient(top,#4685b3,#184977);background:-moz-linear-gradient(top,#4685b3,#184977);background:-ms-linear-gradient(top,#4685b3,#184977);background:-o-linear-gradient(top,#4685b3,#184977);background:linear-gradient(to bottom,#4685b3,#184977)}.shcs label.checked div.checker.hover{border-color:#4685b3;background:#184977;background:-webkit-linear-gradient(top,#184977,#4685b3);background:-moz-linear-gradient(top,#184977,#4685b3);background:-ms-linear-gradient(top,#184977,#4685b3);background:-o-linear-gradient(top,#184977,#4685b3);background:linear-gradient(to bottom,#184977,#4685b3)}.shcs div.checker.focus{border-color:#aaa;background:#aaa;background:-webkit-linear-gradient(top,#ababab,#aaa);background:-moz-linear-gradient(top,#ababab,#aaa);background:-ms-linear-gradient(top,#ababab,#aaa);background:-o-linear-gradient(top,#ababab,#aaa);background:linear-gradient(to bottom,#ababab,#aaa);box-shadow:inset 0 0 7px #fff,inset 0 0 3px #fff}.shcs div.checker.focus.hover{border-color:#aaa;background:#aaa;background:-webkit-linear-gradient(top,#aaa,#ababab);background:-moz-linear-gradient(top,#aaa,#ababab);background:-ms-linear-gradient(top,#aaa,#ababab);background:-o-linear-gradient(top,#aaa,#ababab);background:linear-gradient(to bottom,#aaa,#ababab)}.shcs label>span{position:relative;margin-left:5px;top:1px}*{font-size:13px}body{background:#000;color:#aaa}fieldset td{white-space:nowrap}#folders{margin:5px 5px 0 5px}#files{margin-right:5px}#toolbar a:hover,#toolbar a.hover,span.current,span.regular:hover,span.context,#clipboard div:hover,div.file:hover,#files div.selected,#files div.selected:hover,tr.selected>td,tr.selected:hover>td,#menu .list div a:hover,#toolbar a.selected{color:#fff;text-shadow:1px 0 rgba(0,0,0,.2),-1px 0 rgba(0,0,0,.2),0 -1px rgba(0,0,0,.2),0 1px rgba(0,0,0,.2),1px 1px rgba(0,0,0,.2),-1px -1px rgba(0,0,0,.2),1px -1px rgba(0,0,0,.2),-1px 1px rgba(0,0,0,.2)}#files div{text-shadow:1px 0 rgba(0,0,0,.2),-1px 0 rgba(0,0,0,.2),0 -1px rgba(0,0,0,.2),0 1px rgba(0,0,0,.2),1px 1px rgba(0,0,0,.2),-1px -1px rgba(0,0,0,.2),1px -1px rgba(0,0,0,.2),-1px 1px rgba(0,0,0,.2)}#files,#folders,#toolbar a.selected{color:#aaa;border:1px solid #425064;border-radius:4px;background:#202d3e;box-shadow:inset 0 0 3px #000,inset 0 0 6px #000,0 0 3px #425064,0 0 2px #425064}#toolbar{padding:5px 0}#toolbar a{color:#949494;margin-right:5px;border:1px solid transparent;outline:0;display:block;float:left;border-radius:4px;transition:.3s;padding:0}#toolbar a>span{padding:6px 10px 6px 26px;diaplay:block;float:left;background:no-repeat 6px center}#toolbar a:hover,#toolbar a.hover{color:#fff;border-color:#184977;background:#4685b3;background:-webkit-linear-gradient(top,#4685b3,#184977);background:-moz-linear-gradient(top,#4685b3,#184977);background:-ms-linear-gradient(top,#4685b3,#184977);background:-o-linear-gradient(top,#4685b3,#184977);background:linear-gradient(to bottom,#4685b3,#184977);box-shadow:inset 0 0 3px #88b9da;transition:.3s}#toolbar a[href="kcact:upload"] span{background-image:url(img/icons/upload.png)}#toolbar a[href="kcact:refresh"] span{background-image:url(img/icons/refresh.png)}#toolbar a[href="kcact:settings"] span{background-image:url(img/icons/settings.png)}#toolbar a[href="kcact:about"] span{background-image:url(img/icons/about.png)}#toolbar a[href="kcact:maximize"] span{background-image:url(img/icons/maximize.png)}#settings label{cursor:pointer}#settings fieldset{margin-right:5px;margin-bottom:6px;margin-top:-5px;padding:6px}div.folder{padding-top:2px;margin-top:5px;white-space:nowrap}div.folder a{text-decoration:none;cursor:default;outline:0;color:#aaa}span.folder{padding:2px 3px 2px 23px;outline:0;background:no-repeat 3px center;cursor:pointer;border-radius:3px;border:1px solid transparent}span.brace{width:16px;height:16px;outline:0}span.current{transition:.3s;background-image:url(img/tree/folder.png);background-color:#306999;border-color:#306999;box-shadow:inset 0 0 7px #8fd6ea,inset 0 0 3px #8fd6ea,0 0 2px #000,0 0 1px #000}span.regular{transition:.3s;background-image:url(img/tree/folder.png);background-color:transparent}span.regular:hover,span.context,#clipboard div:hover{transition:.3s;background-color:#333;border-color:#777;box-shadow:inset 0 0 7px #777,inset 0 0 3px #777,0 0 2px #000,0 0 1px #000}span.opened{background-image:url(img/tree/minus.png)}span.closed{background-image:url(img/tree/plus.png)}span.denied{background-image:url(img/tree/denied.png)}div.file{padding:4px;margin:3px;border:1px solid transparent;border-radius:4px}div.file:hover{box-shadow:inset 0 0 7px #555,inset 0 0 3px #555,0 0 3px #000,0 0 6px #000;background:#000;background:-webkit-linear-gradient(top,#111,#555);background:-moz-linear-gradient(top,#111,#555);background:-ms-linear-gradient(top,#111,#555);background:-o-linear-gradient(top,#111,#555);background:linear-gradient(to bottom,#111,#555);border-color:#555}div.file .name{margin-top:4px;font-weight:bold;height:16px;overflow:hidden;padding-bottom:2px}div.file .time{font-size:10px}div.file .size{font-size:10px}#files div.selected,#files div.selected:hover{border-color:#4685b3;background:#4685b3;background:-webkit-linear-gradient(top,#4685b3,#184977);background:-moz-linear-gradient(top,#4685b3,#184977);background:-ms-linear-gradient(top,#4685b3,#184977);background:-o-linear-gradient(top,#4685b3,#184977);background:linear-gradient(to bottom,#4685b3,#184977);box-shadow:inset 0 0 7px #4e9ed4,inset 0 0 3px #4e9ed4,0 0 3px #000,0 0 6px #000}tr.file>td{padding:3px 4px}tr.file:hover>td{background-color:#000;transition:none}tr.selected>td,tr.selected:hover>td{transition:.3s;background-color:#2d5277}tr.file td.name{background-position:2px center;padding-left:22px}a.denied{color:#666;opacity:.5;filter:alpha(opacity:50);cursor:default}a.denied:hover{background-color:#e4e3e2;border-color:transparent;box-shadow:none}#menu .ui-menu a span{background:left center no-repeat;padding-left:20px;white-space:nowrap}#menu a[href="kcact:refresh"] span{background-image:url(img/icons/refresh.png)}#menu a[href="kcact:mkdir"] span{background-image:url(img/icons/folder-new.png)}#menu a[href="kcact:mvdir"] span,#menu a[href="kcact:mv"] span{background-image:url(img/icons/rename.png)}#menu a[href="kcact:rmdir"] span,#menu a[href="kcact:rm"] span,#menu a[href="kcact:rmcbd"] span{background-image:url(img/icons/delete.png)}#menu a[href="kcact:clpbrdadd"] span{background-image:url(img/icons/clipboard-add.png)}#menu a[href="kcact:pick"] span,#menu a[href="kcact:pick_thumb"] span{background-image:url(img/icons/select.png)}#menu a[href="kcact:download"] span{background-image:url(img/icons/download.png)}#menu a[href="kcact:view"] span{background-image:url(img/icons/view.png)}#menu a[href="kcact:cpcbd"] span{background-image:url(img/icons/copy.png)}#menu a[href="kcact:mvcbd"] span{background-image:url(img/icons/move.png)}#menu a[href="kcact:clrcbd"] span{background-image:url(img/icons/clipboard-clear.png)}#clipboard{margin-left:-3px;padding:2px}#clipboard div{background:url(img/icons/clipboard.png) no-repeat center center;border:1px solid transparent;padding:2px;cursor:pointer;border-radius:4px}#clipboard.selected div,#clipboard.selected div:hover{background-color:#306999;border-color:#306999;box-shadow:inset 0 0 7px #8fd6ea,inset 0 0 3px #8fd6ea}#menu .list a,#menu .list a.ui-state-focus{margin:-1px 0 0 -1px;padding:6px 10px;border:1px solid transparent;background:0;border-radius:0;text-shadow:none;box-shadow:none}#menu .list a.first,#menu .list a.first.ui-state-focus{border-radius:4px 4px 0 0}#menu .list a:hover{border-color:#4685b3;background:#4685b3;background:-webkit-linear-gradient(top,#184977,#4685b3);background:-moz-linear-gradient(top,#184977,#4685b3);background:-ms-linear-gradient(top,#184977,#4685b3);background:-o-linear-gradient(top,#184977,#4685b3);background:linear-gradient(to bottom,#184977,#4685b3);box-shadow:inset 0 0 7px #4e9ed4,inset 0 0 3px #4e9ed4}#menu .list{overflow:hidden;max-height:1px;margin-bottom:-1px;padding-bottom:1px}#menu li.div-files{margin:0 0 1px 0}.about{text-align:center}.about div.head{font-weight:bold;font-size:12px;padding:3px 0 8px 0}.about div.head a{background:url(img/kcf_logo.png) no-repeat left center;padding:0 0 0 27px;font-size:17px;outline:0}.about a{text-decoration:none;color:#3665b4}.about a:hover{text-decoration:underline}#checkver{margin:5px 0 10px 0}#loading,#checkver>span.loading{background:url(img/loading.gif);border:1px solid #425064;box-shadow:inset 0 0 3px #000,inset 0 0 6px #000,0 0 3px #425064,0 0 2px #425064;padding:6px 10px;border-radius:4px;color:#aaa}#checkver a{font-weight:normal;padding:3px 3px 3px 20px;background:url(img/icons/download.png) no-repeat left center}.ui-dialog-content.kcfImageViewer{background:#000;cursor:pointer}.kcfImageViewer .img{background:url(img/bg_transparent.png)}#loading{margin-right:5px}#loadingDirs{padding:5px 0 1px 24px}#files.drag{background:#ddebf8}#resizer{background:#fff}body.msie fieldset,body.trident.rv fieldset{border-radius:0} \ No newline at end of file diff --git a/additions/kcfinder/cache/theme_dark.js b/additions/kcfinder/cache/theme_dark.js new file mode 100644 index 0000000..d6f32ba --- /dev/null +++ b/additions/kcfinder/cache/theme_dark.js @@ -0,0 +1 @@ +new Image().src="themes/dark/img/loading.gif"; \ No newline at end of file diff --git a/additions/kcfinder/cache/theme_default.css b/additions/kcfinder/cache/theme_default.css new file mode 100644 index 0000000..f07f106 --- /dev/null +++ b/additions/kcfinder/cache/theme_default.css @@ -0,0 +1 @@ +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width: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;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:alpha(opacity=0)}.ui-front{z-index:100}.ui-widget .ui-widget,.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-size:1em}.ui-widget-content{border:1px solid #888;background:#fff;color:#6b6b6b}.ui-widget-content a{color:#6b6b6b}.ui-widget-header{border:1px solid #1b79b8;color:#fff;font-weight:bold;background:#1b79b8;background:-webkit-linear-gradient(top,#1b79b8,#59b5f2);background:-moz-linear-gradient(top,#1b79b8,#59b5f2);background:-ms-linear-gradient(top,#1b79b8,#59b5f2);background:-o-linear-gradient(top,#1b79b8,#59b5f2);background:linear-gradient(to bottom,#1b79b8,#59b5f2)}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-widget.ui-state-disabled{transition:.2s;border:1px solid #6b6b6b;background:#6b6b6b;background:-webkit-linear-gradient(top,#ababab,#6b6b6b);background:-moz-linear-gradient(top,#ababab,#6b6b6b);background:-ms-linear-gradient(top,#ababab,#6b6b6b);background:-o-linear-gradient(top,#ababab,#6b6b6b);background:linear-gradient(to bottom,#ababab,#6b6b6b);font-weight:bold;color:#fff}.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{transition:.2s;border:1px solid #6b6b6b;background:#6b6b6b;background:-webkit-linear-gradient(top,#6b6b6b,#ababab);background:-moz-linear-gradient(top,#6b6b6b,#ababab);background:-ms-linear-gradient(top,#6b6b6b,#ababab);background:-o-linear-gradient(top,#6b6b6b,#ababab);background:linear-gradient(to bottom,#6b6b6b,#ababab);font-weight:bold;color:#fff}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,.ui-menu .ui-state-focus{transition:.2s;border:1px solid #1b79b8;background:#1b79b8;background:-webkit-linear-gradient(top,#1b79b8,#59b5f2);background:-moz-linear-gradient(top,#1b79b8,#59b5f2);background:-ms-linear-gradient(top,#1b79b8,#59b5f2);background:-o-linear-gradient(top,#1b79b8,#59b5f2);background:linear-gradient(to bottom,#1b79b8,#59b5f2);font-weight:bold;color:#fff}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{transition:.2s;color:#fff;text-decoration:none}.ui-menu .ui-state-active{transition:.2s;border-color:#6b6b6b;background:#6b6b6b;background:-webkit-linear-gradient(top,#6b6b6b,#ababab);background:-moz-linear-gradient(top,#6b6b6b,#ababab);background:-ms-linear-gradient(top,#6b6b6b,#ababab);background:-o-linear-gradient(top,#6b6b6b,#ababab);background:linear-gradient(to bottom,#6b6b6b,#ababab)}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #d5bc2c;box-shadow:inset 0 0 5px #d5bc2c;background:#fff6bf;color:#6b6b6b}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cf7f7f;box-shadow:inset 0 0 5px #cf7f7f;background:#fac4c4;color:#6b6b6b}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a,.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a,.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#6b6b6b}.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:.5;filter:alpha(opacity=50);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.50;filter:alpha(opacity=50);background-image:none}.ui-state-disabled .ui-icon{filter:alpha(opacity=50)}.ui-state-disabled{cursor:default !important}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:6px;min-height:0}.ui-accordion .ui-accordion-icons,.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:24px}.ui-accordion .ui-accordion-noicons{padding-left:5px}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:5px;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:pointer}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:36px}.ui-button-icons-only{width:50px}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:6px 10px}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:6px;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:6px 10px 6px 28px}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:6px 28px 6px 10px}.ui-button-text-icons .ui-button-text{padding-left:28px;padding-right:28px}input.ui-button{padding:6px 10px}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:7px}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:7px}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-buttonset{margin:0;overflow:auto}.ui-buttonset .ui-button{margin:0;float:left}.ui-datepicker{width:19em;width:19em;display:none;padding:10px}.ui-datepicker .ui-datepicker-header{position:relative;padding:2px 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:4px;width:20px;height:20px}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:3px}.ui-datepicker .ui-datepicker-prev{left:4px}.ui-datepicker .ui-datepicker-next{right:4px}.ui-datepicker .ui-datepicker-prev-hover{left:3px}.ui-datepicker .ui-datepicker-next-hover{right:3px}.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 10px;padding:4px 0;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:-2px 2px;padding:0;outline:0}.ui-datepicker table{width:100%;border-collapse:collapse;margin:0;font-size:1em}.ui-datepicker th{padding:3px;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:2px 3px;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:10px -11px -11px -11px;padding:10px;border:1px solid #1b79b8;background:#e4f5ff;overflow:auto}.ui-datepicker .ui-datepicker-buttonpane button{float:right;cursor:pointer;width:auto;overflow:visible;margin:0;padding:6px 10px;font-weight:bold;opacity:1;filter:alpha(opacity=100)}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto;padding:10px}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group .ui-datepicker-header{margin:0}.ui-datepicker-multi .ui-datepicker-group.ui-datepicker-group-last{margin-right:0}.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,.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;font-size:0;width:100px}th.ui-datepicker-week-col{color:#215b82}td.ui-datepicker-week-col{text-align:right;padding-right:7px;color:#215b82}td.ui-datepicker-other-month a.ui-state-default{font-weight:bold}th.ui-datepicker-week-end{color:#f44}.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,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:4px;outline:0;box-shadow:0 0 10px #000}.ui-dialog .ui-dialog-titlebar{padding:5px 10px;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:0;padding:1px 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:1em;margin:0 -4px;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;padding:10px}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:0 0 0 5px;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:1px 10px 1px 10px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0;border-color:#bbb}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:5px 10px;line-height:1.5;min-height:0;font-weight:normal;border-radius:0}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px;transition:none}.ui-menu .ui-state-disabled{font-weight:normal;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu.ui-corner-all.sh-menu{border-radius:4px}.ui-menu.ui-corner-all,.ui-menu.sh-menu.ui-autocomplete.ui-corner-all{border-radius:0}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2.1em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left;margin:0 13px;border-radius:15px}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:18px;height:18px;border-radius:9px;cursor:default;box-shadow:0 0 3px #6b6b6b,inset 0 0 7px #fff,inset 0 0 3px #fff}.ui-slider .ui-slider-handle.ui-state-active{box-shadow:0 0 3px #1b79b8,inset 0 0 7px #fff,inset 0 0 3px #fff}.ui-slider .ui-slider-range{position:absolute;z-index:1;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:10px}.ui-slider-horizontal .ui-slider-handle{top:-5px;margin-left:-9px}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:10px;height:150px}.ui-slider-vertical .ui-slider-handle{left:-5px;margin-left:0;margin-bottom:-9px}.ui-slider-vertical .ui-slider-range{left:-1px;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner.ui-widget{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle;background:#fff;background:-webkit-linear-gradient(top,#f0f0f0,#fff);background:-moz-linear-gradient(top,#f0f0f0,#fff);background:-ms-linear-gradient(top,#f0f0f0,#fff);background:-o-linear-gradient(top,#f0f0f0,#fff);background:linear-gradient(to bottom,#f0f0f0,#fff)}.ui-spinner-input{border:0;color:inherit;padding:0;margin:6px 24px 6px 10px;vertical-align:middle;outline:0;background:transparent}.ui-spinner-input{color:#6b6b6b}.ui-spinner-input:focus{color:#000}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative}.ui-tabs .ui-tabs-nav{margin:0;padding:3px 3px 0 3px}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px 3px 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:6px 10px;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em;background:0}body .ui-tooltip{padding:6px 10px;position:absolute;z-index:9999;max-width:300px;color:gray;border-color:#a5a5a5;box-shadow:inset 0 0 4px #a5a5a5,0 0 4px #a5a5a5;background:-webkit-linear-gradient(top,#ddd,#fff);background:-moz-linear-gradient(top,#ddd,#fff);background:-ms-linear-gradient(top,#ddd,#fff);background:-o-linear-gradient(top,#ddd,#fff);background:linear-gradient(to bottom,#ddd,#fff)}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon,.ui-state-highlight .ui-icon,.ui-state-error .ui-icon,.ui-state-error-text .ui-icon,.ui-icon.ui-icon-black{background-image:url(img/ui-icons_black.png)}.ui-widget-header .ui-icon,.ui-state-default .ui-icon,.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-state-active .ui-icon,.ui-icon.ui-icon-white{background-image:url(img/ui-icons_white.png)}.ui-icon-blank{background-position:16px 16px}.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-on{background-position:-96px -144px}.ui-icon-radio-off{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{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}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl,.ui-menu .ui-menu-item.ui-menu-item-first a{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr,.ui-menu .ui-menu-item.ui-menu-item-first a{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl,.ui-menu .ui-menu-item.ui-menu-item-last a,.ui-dialog-buttonpane,.ui-datepicker-multi .ui-datepicker-group-first .ui-datepicker-header,.ui-datepicker .ui-datepicker-buttonpane{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br,.ui-menu .ui-menu-item.ui-menu-item-last a,.ui-dialog-buttonpane,.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker .ui-datepicker-buttonpane{border-bottom-right-radius:4px}.ui-widget-overlay{background:rgba(255,255,255,.5)}.ui-widget-shadow{margin:-7px 0 0 -7px;padding:7px;background:rgba(0,0,0,.3);border-radius:8px}.ui-accordion-content-active,.ui-tabs,.ui-slider-range,.ui-datepicker,.ui-dialog{border-color:#1b79b8}.ui-slider .ui-slider-range{border:1px solid #1b79b8;top:-1px}.ui-progressbar{overflow:visible}.ui-progressbar-value{border:1px solid #1b79b8;margin-top:-1px}.ui-accordion-header,.ui-tabs-nav,.ui-button,.ui-tabs li,.ui-slider-handle,.ui-slider-range,.ui-datepicker-header,.ui-datepicker-header a:hover,.ui-datepicker-calendar .ui-state-default,.ui-progressbar-value,.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active,.ui-dialog-titlebar,.ui-dialog-titlebar-close.ui-state-default.ui-state-hover,.ui-datepicker .ui-datepicker-buttonpane button{box-shadow:inset 0 0 7px #fff,inset 0 0 3px #fff}.ui-spinner,.ui-menu{box-shadow:inset 0 0 4px #6b6b6b}.ui-accordion-content,.ui-tabs,.ui-dialog-content,.ui-dialog-buttonpane,.ui-datepicker,.ui-datepicker .ui-datepicker-buttonpane{box-shadow:inset 0 0 4px #1b79b8}.ui-state-default,.ui-state-focus,.ui-state-active,.ui-widget-header{text-shadow:1px 0 rgba(0,0,0,.2),-1px 0 rgba(0,0,0,.2),0 -1px rgba(0,0,0,.2),0 1px rgba(0,0,0,.2),1px 1px rgba(0,0,0,.2),-1px -1px rgba(0,0,0,.2),1px -1px rgba(0,0,0,.2),-1px 1px rgba(0,0,0,.2)}.ui-tabs .ui-state-active,.ui-datepicker .ui-state-highlight{text-shadow:none}.ui-datepicker .ui-state-highlight{color:#215b82;border-color:#1b79b8;box-shadow:inset 0 0 4px #1b79b8;background:#fff;background:-webkit-linear-gradient(top,#dfeef8,#fff);background:-moz-linear-gradient(top,#dfeef8,#fff);background:-ms-linear-gradient(top,#dfeef8,#fff);background:-o-linear-gradient(top,#dfeef8,#fff);background:linear-gradient(to bottom,#dfeef8,#fff)}.ui-progressbar,.ui-slider,.ui-menu{box-shadow:inset 0 0 4px #6b6b6b;background:#fff;background:-webkit-linear-gradient(top,#f0f0f0,#fff);background:-moz-linear-gradient(top,#f0f0f0,#fff);background:-ms-linear-gradient(top,#f0f0f0,#fff);background:-o-linear-gradient(top,#f0f0f0,#fff);background:linear-gradient(to bottom,#f0f0f0,#fff)}.ui-slider,.ui-spinner,.ui-progressbar,.ui-menu{border-color:#6b6b6b}.ui-datepicker-calendar .ui-state-default{border-radius:3px}.ui-tabs .ui-tabs-nav{margin:-1px;border-bottom-right-radius:0;border-bottom-left-radius:0;padding-left:3px}.ui-tabs-active.ui-state-active{background:#fff;background:-webkit-linear-gradient(top,#ccc,#ddd,#eee,#fff,#fff,#fff);background:-moz-linear-gradient(top,#ccc,#ddd,#eee,#fff,#fff,#fff);background:-ms-linear-gradient(top,#ccc,#ddd,#eee,#fff,#fff,#fff);background:-o-linear-gradient(top,#ccc,#ddd,#eee,#fff,#fff,#fff);background:linear-gradient(to bottom,#ccc,#ddd,#eee,#fff,#fff,#fff);box-shadow:inset 0 0 5px #fff,inset 0 0 5px #fff,inset 0 0 5px #fff}.ui-tabs-active.ui-state-active a{color:#215b82}.ui-state-default,.ui-state-default a{outline:0}.ui-datepicker-header,.ui-dialog-titlebar{border-bottom-right-radius:0;border-bottom-left-radius:0;margin:-5px -5px 0 -5px}.ui-datepicker-header{margin:-11px -11px 5px -11px}.ui-datepicker-header a:hover{cursor:pointer}.ui-dialog-titlebar-close.ui-state-default{border-color:transparent;background:0;box-shadow:none}.ui-dialog-titlebar-close.ui-state-default.ui-state-hover{border-color:#6b6b6b;background:#6b6b6b}.ui-dialog-buttonpane{background:#e4f5ff;border-top-color:#1b79b8;margin:0 -4px -4px -4px;padding:0}div.checker input,input[type="search"],input[type="search"]:active{-moz-appearance:none;-webkit-appearance:none}div.selector,div.selector span,div.checker span,div.radio span,div.uploader,div.uploader span.action,div.button,div.button span{-webkit-font-smoothing:antialiased}div.selector,div.checker,div.button,div.radio,div.uploader{display:-moz-inline-box;display:inline-block;zoom:1;vertical-align:middle}div.checker span,div.checker input,div.radio span,div.radio input,div.button span{display:-moz-inline-box;display:inline-block;zoom:1;text-align:center}div.selector select,div.checker input,div.button button,div.button input,div.button a,div.radio input,div.uploader input,input.uniform-input,select.uniform-multiselect,textarea.uniform{outline:0}div.selector,div.selector *,div.radio,div.radio *,div.checker,div.checker *,div.uploader,div.uploader *,div.button,div.button *{margin:0;padding:0}div.selector{padding:0 1.9em 0 0;position:relative;overflow:hidden;border:1px solid;border-radius:4px}div.selector span{text-overflow:ellipsis;display:block;overflow:hidden;white-space:nowrap;padding:6px 0 6px 10px;cursor:pointer;width:100%;border-right:1px solid;border-top-left-radius:4px;border-bottom-left-radius:4px}div.selector .ui-icon{background:url(img/ui-icons_white.png) -65px -16px}div.selector select{opacity:0;filter:alpha(opacity=0);border:0;background:0;position:absolute;height:50px;bottom:0;width:100%;cursor:pointer}div.checker{position:relative;border:1px solid;padding:1px;border-radius:4px}div.checker,div.checker span,div.checker input{width:15px;height:15px}div.checker span.checked{background:url(img/ui-icons_white.png) -64px -145px}div.checker input{opacity:0;filter:alpha(opacity=0);border:0;background:0;cursor:pointer}div.radio{position:relative;border:1px solid;padding:1px;border-radius:9px}div.radio,div.radio span,div.radio input{width:15px;height:15px}div.radio span.checked{background:url(img/ui-icons_white.png) -80px -145px}div.radio input{opacity:0;border:0;background:0;cursor:pointer}div.uploader{cursor:pointer;position:relative;overflow:hidden;border-radius:4px}div.uploader span.action{text-align:center;float:left;display:inline;overflow:hidden;cursor:pointer;padding:6px 10px;border-top-right-radius:4px;border-bottom-right-radius:4px}div.uploader span.filename{text-overflow:ellipsis;display:block;overflow:hidden;white-space:nowrap;float:left;padding:6px 10px;border-right:1px solid;border-top-left-radius:4px;border-bottom-left-radius:4px}div.uploader input{opacity:0;filter:alpha(opacity=0);border:0;background:0;position:absolute;top:0;right:0;float:right;cursor:pointer;font-size:100px}div.uploader input::-webkit-file-upload-button{cursor:pointer}div.uploader.active span.filename,div.uploader.focus span.filename{border-right:1px solid}div.button{cursor:pointer;position:relative;overflow:hidden;border:1px solid;border-radius:4px}div.button a,div.button button,div.button input{opacity:0;filter:alpha(opacity=0);display:block;left:0;top:0;position:absolute;margin:0;padding:0;font-size:1000px;cursor:pointer}div.button span{padding:0;margin:6px 10px}input.uniform-input,select.uniform-multiselect,textarea.uniform{margin:0;border:1px solid;border-radius:4px}input.uniform-input,textarea.uniform{padding:6px 10px}textarea.uniform{overflow:auto}select.uniform-multiselect{padding:5px}div.uploader{border:1px solid #6b6b6b}div.uploader.active,div.uploader.focus{border-color:#1b79b8}input.uniform-input,select.uniform-multiselect,textarea.uniform,div.uploader span.filename,div.selector span{border-color:#6b6b6b;box-shadow:inset 0 0 4px #6b6b6b;background:#fff;background:-webkit-linear-gradient(top,#f0f0f0,#fff);background:-moz-linear-gradient(top,#f0f0f0,#fff);background:-ms-linear-gradient(top,#f0f0f0,#fff);background:-o-linear-gradient(top,#f0f0f0,#fff);background:linear-gradient(to bottom,#f0f0f0,#fff);color:#6b6b6b}select.uniform-multiselect option{color:#6b6b6b}select.uniform-multiselect.focus option{color:#000}input.uniform-input.focus,select.uniform-multiselect.focus,textarea.uniform.focus,div.uploader.active span.filename,div.uploader.focus span.filename,div.selector.active span,div.selector.focus span{border-color:#1b79b8;box-shadow:inset 0 0 4px #1b79b8;color:#000;background:#fff;background:-webkit-linear-gradient(top,#dfeef8,#fff);background:-moz-linear-gradient(top,#dfeef8,#fff);background:-ms-linear-gradient(top,#dfeef8,#fff);background:-o-linear-gradient(top,#dfeef8,#fff);background:linear-gradient(to bottom,#dfeef8,#fff)}input.uniform-input[readonly],textarea.uniform[readonly],input.uniform-input[readonly]:focus,textarea.uniform[readonly]:focus{color:gray;border-color:#a5a5a5;box-shadow:inset 0 0 4px #a5a5a5;background:-webkit-linear-gradient(top,#ddd,#fff);background:-moz-linear-gradient(top,#ddd,#fff);background:-ms-linear-gradient(top,#ddd,#fff);background:-o-linear-gradient(top,#ddd,#fff);background:linear-gradient(to bottom,#ddd,#fff)}div.selector,div.button,div.uploader span.action,div.radio,div.checker{border-color:#6b6b6b;background:#6b6b6b;background:-webkit-linear-gradient(top,#ababab,#6b6b6b);background:-moz-linear-gradient(top,#ababab,#6b6b6b);background:-ms-linear-gradient(top,#ababab,#6b6b6b);background:-o-linear-gradient(top,#ababab,#6b6b6b);background:linear-gradient(to bottom,#ababab,#6b6b6b);box-shadow:inset 0 0 7px #fff,inset 0 0 3px #fff}div.selector.hover,div.button.hover,div.uploader.hover span.action,div.radio.hover,div.checker.hover{border-color:#6b6b6b;background:#6b6b6b;background:-webkit-linear-gradient(top,#6b6b6b,#ababab);background:-moz-linear-gradient(top,#6b6b6b,#ababab);background:-ms-linear-gradient(top,#6b6b6b,#ababab);background:-o-linear-gradient(top,#6b6b6b,#ababab);background:linear-gradient(to bottom,#6b6b6b,#ababab)}div.selector.focus,div.button.focus,div.uploader.focus span.action,div.radio.focus,div.checker.focus{border-color:#1b79b8;background:#1b79b8;background:-webkit-linear-gradient(top,#59b5f2,#1b79b8);background:-moz-linear-gradient(top,#59b5f2,#1b79b8);background:-ms-linear-gradient(top,#59b5f2,#1b79b8);background:-o-linear-gradient(top,#59b5f2,#1b79b8);background:linear-gradient(to bottom,#59b5f2,#1b79b8)}div.button.active,div.button.active.hover,div.button.focus.hover,div.uploader.active span.action,div.uploader.active.hover span.action,div.uploader.focus.hover span.action,div.radio.active,div.radio.active.hover,div.radio.focus.hover,div.checker.active,div.checker.active.hover,div.checker.focus.hover,div.selector.active,div.selector.active.hover{border-color:#1b79b8;background:#1b79b8;background:-webkit-linear-gradient(top,#1b79b8,#59b5f2);background:-moz-linear-gradient(top,#1b79b8,#59b5f2);background:-ms-linear-gradient(top,#1b79b8,#59b5f2);background:-o-linear-gradient(top,#1b79b8,#59b5f2);background:linear-gradient(to bottom,#1b79b8,#59b5f2)}input.uniform-input[disabled],select.uniform-multiselect[disabled],textarea.uniform[disabled],div.button.disabled,div.uploader.disabled,div.radio.disabled,div.checker.disabled,div.selector.disabled,div.selector.disabled.active{opacity:.5;filter:alpha(opacity=50);cursor:default}div.selector.disabled select,div.uploader.disabled input,div.button.disabled input,div.button.disabled button,div.button.disabled a,div.radio.disabled input,div.checker.disabled input{cursor:default}div.button span,div.uploader span.action{font-weight:bold;color:#fff;text-shadow:1px 0 rgba(0,0,0,.2),-1px 0 rgba(0,0,0,.2),0 -1px rgba(0,0,0,.2),0 1px rgba(0,0,0,.2),1px 1px rgba(0,0,0,.2),-1px -1px rgba(0,0,0,.2),1px -1px rgba(0,0,0,.2),-1px 1px rgba(0,0,0,.2)}input.uniform-input::-webkit-input-placeholder,textarea.uniform::-webkit-input-placeholder{color:#ababab}input.uniform-input:-moz-placeholder,textarea.uniform::-moz-placeholder{color:#6b6b6b}input.uniform-input::-moz-placeholder,textarea.uniform::-moz-placeholder{color:#6b6b6b}input.uniform-input:-ms-input-placeholder,textarea.uniform:-ms-input-placeholder{color:#ababab}input.uniform-input:focus::-webkit-input-placeholder,textarea.uniform:focus::-webkit-input-placeholder{color:#59b5f2}input.uniform-input:focus:-moz-placeholder,textarea.uniform:focus:-moz-placeholder{color:#1b79b8}input.uniform-input:focus::-moz-placeholder,textarea.uniform:focus::-moz-placeholder{color:#1b79b8}input.uniform-input:focus:-ms-input-placeholder,textarea.uniform:focus:-ms-input-placeholder{color:#59b5f2}fieldset.sh-uniform{border:1px solid #6b6b6b;box-shadow:inset 0 0 4px #6b6b6b;border-radius:4px;background:#fff;background:-webkit-linear-gradient(top,#f0f0f0,#fff);background:-moz-linear-gradient(top,#f0f0f0,#fff);background:-ms-linear-gradient(top,#f0f0f0,#fff);background:-o-linear-gradient(top,#f0f0f0,#fff);background:linear-gradient(to bottom,#f0f0f0,#fff);margin:0 10px 10px 0;padding:10px}fieldset.sh-uniform legend{font-weight:bold;color:#6b6b6b;text-shadow:1px 0 rgba(255,255,255,.5),-1px 0 rgba(255,255,255,.5),0 -1px rgba(255,255,255,.5),0 1px rgba(255,255,255,.5),1px 1px rgba(255,255,255,.5),-1px -1px rgba(255,255,255,.5),1px -1px rgba(255,255,255,.5),-1px 1px rgba(255,255,255,.5),0 0 5px #fff}label.sh-uniform{color:#6b6b6b}.shcs{margin:0}.shcs>div{border:1px solid;border-top:0;padding:5px;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.shcs>input,.shcs>input:focus,.shcs>input:hover{border-bottom-left-radius:0;border-bottom-right-radius:0;margin:0}.shcs label{padding:2px 5px 2px 2px;border:1px solid transparent;border-radius:4px;color:#6b6b6b}.shcs>div,.shcs label:hover{border-color:#6b6b6b;box-shadow:inset 0 0 4px #6b6b6b;background:#fff;background:-webkit-linear-gradient(top,#f0f0f0,#fff);background:-moz-linear-gradient(top,#f0f0f0,#fff);background:-ms-linear-gradient(top,#f0f0f0,#fff);background:-o-linear-gradient(top,#f0f0f0,#fff);background:linear-gradient(to bottom,#f0f0f0,#fff)}.shcs label:hover{color:#6b6b6b;cursor:pointer}.shcs>div.focus,.shcs label.checked{border-color:#1b79b8;box-shadow:inset 0 0 4px #1b79b8;color:#000;background:#fff;background:-webkit-linear-gradient(top,#dfeef8,#fff);background:-moz-linear-gradient(top,#dfeef8,#fff);background:-ms-linear-gradient(top,#dfeef8,#fff);background:-o-linear-gradient(top,#dfeef8,#fff);background:linear-gradient(to bottom,#dfeef8,#fff)}.shcs label.checked div.checker{border-color:#1b79b8;background:#1b79b8;background:-webkit-linear-gradient(top,#59b5f2,#1b79b8);background:-moz-linear-gradient(top,#59b5f2,#1b79b8);background:-ms-linear-gradient(top,#59b5f2,#1b79b8);background:-o-linear-gradient(top,#59b5f2,#1b79b8);background:linear-gradient(to bottom,#59b5f2,#1b79b8)}.shcs label.checked div.checker.hover{border-color:#1b79b8;background:#1b79b8;background:-webkit-linear-gradient(top,#1b79b8,#59b5f2);background:-moz-linear-gradient(top,#1b79b8,#59b5f2);background:-ms-linear-gradient(top,#1b79b8,#59b5f2);background:-o-linear-gradient(top,#1b79b8,#59b5f2);background:linear-gradient(to bottom,#1b79b8,#59b5f2)}.shcs div.checker.focus{border-color:#6b6b6b;background:#6b6b6b;background:-webkit-linear-gradient(top,#ababab,#6b6b6b);background:-moz-linear-gradient(top,#ababab,#6b6b6b);background:-ms-linear-gradient(top,#ababab,#6b6b6b);background:-o-linear-gradient(top,#ababab,#6b6b6b);background:linear-gradient(to bottom,#ababab,#6b6b6b);box-shadow:inset 0 0 7px #fff,inset 0 0 3px #fff}.shcs div.checker.focus.hover{border-color:#6b6b6b;background:#6b6b6b;background:-webkit-linear-gradient(top,#6b6b6b,#ababab);background:-moz-linear-gradient(top,#6b6b6b,#ababab);background:-ms-linear-gradient(top,#6b6b6b,#ababab);background:-o-linear-gradient(top,#6b6b6b,#ababab);background:linear-gradient(to bottom,#6b6b6b,#ababab)}.shcs label>span{position:relative;margin-left:5px;top:1px}*{font-size:13px}body{background:#e0e0e0;color:#6b6b6b}fieldset td{white-space:nowrap}#folders{margin:5px 5px 0 5px}#files{margin-right:5px}#toolbar a:hover,#toolbar a.hover,span.current,span.regular:hover,span.context,#clipboard div:hover,div.file:hover,#files div.selected,#files div.selected:hover,tr.selected>td,tr.selected:hover>td,#menu .list div a:hover{color:#fff;text-shadow:1px 0 rgba(0,0,0,.2),-1px 0 rgba(0,0,0,.2),0 -1px rgba(0,0,0,.2),0 1px rgba(0,0,0,.2),1px 1px rgba(0,0,0,.2),-1px -1px rgba(0,0,0,.2),1px -1px rgba(0,0,0,.2),-1px 1px rgba(0,0,0,.2)}#files,#folders,#toolbar a.selected{border:1px solid #6b6b6b;box-shadow:inset 0 0 4px #6b6b6b;border-radius:4px;background:#fff;background:-webkit-linear-gradient(top,#f0f0f0,#fff);background:-moz-linear-gradient(top,#f0f0f0,#fff);background:-ms-linear-gradient(top,#f0f0f0,#fff);background:-o-linear-gradient(top,#f0f0f0,#fff);background:linear-gradient(to bottom,#f0f0f0,#fff)}#toolbar{padding:5px 0}#toolbar a{color:#6b6b6b;margin-right:5px;border:1px solid transparent;outline:0;display:block;float:left;border-radius:4px;transition:.3s;padding:0;background:#e0e0e0}#toolbar a>span{padding:6px 10px 6px 26px;diaplay:block;float:left;background:no-repeat 6px center}#toolbar a:hover,#toolbar a.hover{border-color:#1b79b8;background:#1b79b8;background:-webkit-linear-gradient(top,#59b5f2,#1b79b8);background:-moz-linear-gradient(top,#59b5f2,#1b79b8);background:-ms-linear-gradient(top,#59b5f2,#1b79b8);background:-o-linear-gradient(top,#59b5f2,#1b79b8);background:linear-gradient(to bottom,#59b5f2,#1b79b8);box-shadow:inset 0 0 7px #fff,inset 0 0 3px #fff}#toolbar a:hover,#toolbar a.hover{transition:.3s}#toolbar a[href="kcact:upload"] span{background-image:url(img/icons/upload.png)}#toolbar a[href="kcact:refresh"] span{background-image:url(img/icons/refresh.png)}#toolbar a[href="kcact:settings"] span{background-image:url(img/icons/settings.png)}#toolbar a[href="kcact:about"] span{background-image:url(img/icons/about.png)}#toolbar a[href="kcact:maximize"] span{background-image:url(img/icons/maximize.png)}#settings label{cursor:pointer}#settings fieldset{margin-right:5px;margin-bottom:6px;margin-top:-5px;padding:6px}#settings fieldset:hover{border-color:#1b79b8;box-shadow:inset 0 0 4px #1b79b8;background:#dfeef8;background:-webkit-linear-gradient(top,#dfeef8,#fff);background:-moz-linear-gradient(top,#dfeef8,#fff);background:-ms-linear-gradient(top,#dfeef8,#fff);background:-o-linear-gradient(top,#dfeef8,#fff);background:linear-gradient(to bottom,#dfeef8,#fff)}#settings fieldset:hover legend,#settings fieldset:hover label{color:#215b82}div.folder{padding-top:2px;margin-top:4px;white-space:nowrap}div.folder a{text-decoration:none;cursor:default;outline:0;color:#6b6b6b}span.folder{padding:2px 3px 2px 23px;outline:0;background:no-repeat 3px center;cursor:pointer;border-radius:3px;border:1px solid transparent}span.brace{width:16px;height:16px;outline:0}span.current{transition:.3s;background-image:url(img/tree/folder.png);background-color:#3b98d6;border-color:#3b98d6;box-shadow:inset 0 0 7px #fff,inset 0 0 3px #fff}span.regular{transition:.3s;background-image:url(img/tree/folder.png);background-color:transparent}span.regular:hover,span.context,#clipboard div:hover{transition:.3s;background-color:#c6c6c6;border-color:#c6c6c6;box-shadow:inset 0 0 7px #fff,inset 0 0 3px #fff}span.opened{background-image:url(img/tree/minus.png)}span.closed{background-image:url(img/tree/plus.png)}span.denied{background-image:url(img/tree/denied.png)}div.file{padding:4px;margin:3px;border:1px solid transparent;border-radius:4px}div.file:hover{border-color:#aaa;box-shadow:inset 0 0 7px #fff,inset 0 0 3px #fff;background:#c6c6c6;background:-webkit-linear-gradient(top,#e7e7e7,#c6c6c6);background:-moz-linear-gradient(top,#e7e7e7,#c6c6c6);background:-ms-linear-gradient(top,#e7e7e7,#c6c6c6);background:-o-linear-gradient(top,#e7e7e7,#c6c6c6);background:linear-gradient(to bottom,#e7e7e7,#c6c6c6)}div.file .name{margin-top:4px;font-weight:bold;height:16px;overflow:hidden;padding-bottom:2px}div.file .time{font-size:10px}div.file .size{font-size:10px}#files div.selected,#files div.selected:hover{border-color:#3b98d6;background:#3b98d6;background:-webkit-linear-gradient(top,#7dc2f2,#3b98d6);background:-moz-linear-gradient(top,#7dc2f2,#3b98d6);background:-ms-linear-gradient(top,#7dc2f2,#3b98d6);background:-o-linear-gradient(top,#7dc2f2,#3b98d6);background:linear-gradient(to bottom,#7dc2f2,#3b98d6);box-shadow:inset 0 0 7px #fff,inset 0 0 3px #fff}tr.file>td{padding:3px 4px}tr.file:hover>td{background-color:#ddebf8;transition:none}tr.selected>td,tr.selected:hover>td{transition:.3s;background-color:#5b9bda}tr.file td.name{background-position:2px center;padding-left:22px}a.denied{color:#666;opacity:.5;filter:alpha(opacity:50);cursor:default}a.denied:hover{background-color:#e4e3e2;border-color:transparent;box-shadow:none}#menu .ui-menu a span{background:left center no-repeat;padding-left:20px;white-space:nowrap}#menu a[href="kcact:refresh"] span{background-image:url(img/icons/refresh.png)}#menu a[href="kcact:mkdir"] span{background-image:url(img/icons/folder-new.png)}#menu a[href="kcact:mvdir"] span,#menu a[href="kcact:mv"] span{background-image:url(img/icons/rename.png)}#menu a[href="kcact:rmdir"] span,#menu a[href="kcact:rm"] span,#menu a[href="kcact:rmcbd"] span{background-image:url(img/icons/delete.png)}#menu a[href="kcact:clpbrdadd"] span{background-image:url(img/icons/clipboard-add.png)}#menu a[href="kcact:pick"] span,#menu a[href="kcact:pick_thumb"] span{background-image:url(img/icons/select.png)}#menu a[href="kcact:download"] span{background-image:url(img/icons/download.png)}#menu a[href="kcact:view"] span{background-image:url(img/icons/view.png)}#menu a[href="kcact:cpcbd"] span{background-image:url(img/icons/copy.png)}#menu a[href="kcact:mvcbd"] span{background-image:url(img/icons/move.png)}#menu a[href="kcact:clrcbd"] span{background-image:url(img/icons/clipboard-clear.png)}#clipboard{margin-left:-3px;padding:2px}#clipboard div{background:url(img/icons/clipboard.png) no-repeat center center;border:1px solid transparent;padding:2px;cursor:pointer;border-radius:4px}#clipboard.selected div,#clipboard.selected div:hover{background-color:#3b98d6;border-color:#3b98d6;box-shadow:inset 0 0 7px #fff,inset 0 0 3px #fff}#menu .list a,#menu .list a.ui-state-focus{margin:-1px 0 0 -1px;padding:6px 10px;border:1px solid transparent;background:0;border-radius:0;text-shadow:none;box-shadow:none;color:#6b6b6b}#menu .list a.first,#menu .list a.first.ui-state-focus{border-radius:4px 4px 0 0}#menu .list a:hover{border-color:#1b79b8;background:#1b79b8;background:-webkit-linear-gradient(top,#1b79b8,#59b5f2);background:-moz-linear-gradient(top,#1b79b8,#59b5f2);background:-ms-linear-gradient(top,#1b79b8,#59b5f2);background:-o-linear-gradient(top,#1b79b8,#59b5f2);background:linear-gradient(to bottom,#1b79b8,#59b5f2);box-shadow:inset 0 0 7px #fff,inset 0 0 3px #fff}#menu .list{overflow:hidden;max-height:1px;margin-bottom:-1px;padding-bottom:1px}#menu li.div-files{margin:0 0 1px 0}.about{text-align:center}.about div.head{font-weight:bold;font-size:12px;padding:3px 0 8px 0}.about div.head a{background:url(img/kcf_logo.png) no-repeat left center;padding:0 0 0 27px;font-size:17px;outline:0}.about a{text-decoration:none;color:#05f}.about a:hover{text-decoration:underline}#checkver{margin:5px 0 10px 0}#loading,#checkver>span.loading{background:url(img/loading.gif);border:1px solid #3687e2;box-shadow:0 0 3px #3687e2,inset 0 0 4px #fff,inset 0 0 5px #fff;padding:6px 10px;border-radius:4px}#checkver a{font-weight:normal;padding:3px 3px 3px 20px;background:url(img/icons/download.png) no-repeat left center}.ui-dialog-content.kcfImageViewer{background:#000;cursor:pointer}.kcfImageViewer .img{background:url(img/bg_transparent.png)}#loading{margin-right:5px}#loadingDirs{padding:5px 0 1px 24px}#files.drag{background:#ddebf8}body.msie fieldset,body.trident.rv fieldset{border-radius:0} \ No newline at end of file diff --git a/additions/kcfinder/cache/theme_default.js b/additions/kcfinder/cache/theme_default.js new file mode 100644 index 0000000..26f2efd --- /dev/null +++ b/additions/kcfinder/cache/theme_default.js @@ -0,0 +1 @@ +new Image().src="themes/default/img/loading.gif"; \ No newline at end of file diff --git a/additions/kcfinder/conf/.htaccess b/additions/kcfinder/conf/.htaccess new file mode 100644 index 0000000..d61b264 --- /dev/null +++ b/additions/kcfinder/conf/.htaccess @@ -0,0 +1,4 @@ + +Order allow,deny +Deny from all + diff --git a/additions/kcfinder/conf/config.php b/additions/kcfinder/conf/config.php new file mode 100644 index 0000000..216e614 --- /dev/null +++ b/additions/kcfinder/conf/config.php @@ -0,0 +1,124 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +/* IMPORTANT!!! Do not comment or remove uncommented settings in this file + even if you are using session configuration. + See http://kcfinder.sunhater.com/install for setting descriptions */ +$_CONFIG = array( + +// GENERAL SETTINGS + + 'disabled' => false, + 'uploadURL' => "https://querisma.ccu.edu.tw/~tlogben0709/www/www/UsersFiles", + 'uploadDir' => "/home/tlogben0709/public_html/www/www/UsersFiles", + 'theme' => "default", + + 'types' => array( + + // (F)CKEditor types + 'files' => "", + 'flash' => "swf", + 'images' => "*img", + + // TinyMCE types + 'file' => "", + 'media' => "swf flv avi mpg mpeg qt mov wmv asf rm", + 'image' => "*img", + ), + + +// IMAGE SETTINGS + + 'imageDriversPriority' => "imagick gmagick gd", + 'jpegQuality' => 90, + 'thumbsDir' => ".thumbs", + + 'maxImageWidth' => 480, + 'maxImageHeight' => 640, + + 'thumbWidth' => 100, + 'thumbHeight' => 100, + + 'watermark' => "", + + +// DISABLE / ENABLE SETTINGS + + 'denyZipDownload' => false, + 'denyUpdateCheck' => false, + 'denyExtensionRename' => false, + + +// PERMISSION SETTINGS + + 'dirPerms' => 0755, + 'filePerms' => 0644, + + 'access' => array( + + 'files' => array( + 'upload' => true, + 'delete' => true, + 'copy' => true, + 'move' => true, + 'rename' => true + ), + + 'dirs' => array( + 'create' => true, + 'delete' => true, + 'rename' => true + ) + ), + + 'deniedExts' => "exe com msi bat cgi pl php phps phtml php3 php4 php5 php6 py pyc pyo pcgi pcgi3 pcgi4 pcgi5 pchi6", + + +// MISC SETTINGS + + 'filenameChangeChars' => array(/* + ' ' => "_", + ':' => "." + */), + + 'dirnameChangeChars' => array(/* + ' ' => "_", + ':' => "." + */), + + 'mime_magic' => "", + + 'cookieDomain' => "", + 'cookiePath' => "", + 'cookiePrefix' => 'KCFINDER_', + + +// THE FOLLOWING SETTINGS CANNOT BE OVERRIDED WITH SESSION SETTINGS + + '_normalizeFilenames' => false, + '_check4htaccess' => true, + //'_tinyMCEPath' => "/tiny_mce", + + '_sessionVar' => "KCFINDER", + //'_sessionLifetime' => 30, + '_sessionDir' => "/home/tlogben0709/public_html/www/Example/UsersFiles", + //'_sessionDomain' => ".mysite.com", + //'_sessionPath' => "/my/path", + + //'_cssMinCmd' => "java -jar /path/to/yuicompressor.jar --type css {file}", + //'_jsMinCmd' => "java -jar /path/to/yuicompressor.jar --type js {file}", + +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/conf/upload.htaccess b/additions/kcfinder/conf/upload.htaccess new file mode 100644 index 0000000..48dd490 --- /dev/null +++ b/additions/kcfinder/conf/upload.htaccess @@ -0,0 +1,21 @@ + + php_flag engine Off + + + php_flag engine Off + + + php_flag engine Off + + + Options -ExecCGI + + +RemoveHandler .cgi .pl .py .pyc .pyo .phtml .php .php3 .php4 .php5 .php6 .pcgi .pcgi3 .pcgi4 .pcgi5 .pchi6 .inc +RemoveType .cgi .pl .py .pyc .pyo .phtml .php .php3 .php4 .php5 .php6 .pcgi .pcgi3 .pcgi4 .pcgi5 .pchi6 .inc +SetHandler None +SetHandler default-handler + +# Remove both lines below if you want to render HTML files from the upload folder +AddType text/plain .html +AddType text/plain .htm diff --git a/additions/kcfinder/core/.htaccess b/additions/kcfinder/core/.htaccess new file mode 100644 index 0000000..d61b264 --- /dev/null +++ b/additions/kcfinder/core/.htaccess @@ -0,0 +1,4 @@ + +Order allow,deny +Deny from all + diff --git a/additions/kcfinder/core/autoload.php b/additions/kcfinder/core/autoload.php new file mode 100644 index 0000000..0988af8 --- /dev/null +++ b/additions/kcfinder/core/autoload.php @@ -0,0 +1,41 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +spl_autoload_register(function($path) { + $path = explode("\\", $path); + + if (count($path) == 1) + return; + + list($ns, $class) = $path; + + if ($ns == "kcfinder") { + + if ($class == "uploader") + require "core/class/uploader.php"; + elseif ($class == "browser") + require "core/class/browser.php"; + elseif ($class == "minifier") + require "core/class/minifier.php"; + + elseif (file_exists("core/types/$class.php")) + require "core/types/$class.php"; + elseif (file_exists("lib/class_$class.php")) + require "lib/class_$class.php"; + elseif (file_exists("lib/helper_$class.php")) + require "lib/helper_$class.php"; + } +}); + +?> \ No newline at end of file diff --git a/additions/kcfinder/core/bootstrap.php b/additions/kcfinder/core/bootstrap.php new file mode 100644 index 0000000..bd98538 --- /dev/null +++ b/additions/kcfinder/core/bootstrap.php @@ -0,0 +1,181 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + * + * This file is the place you can put any code (at the end of the file), + * which will be executed before any other. Suitable for: + * 1. Set PHP ini settings using ini_set() + * 2. Custom session save handler with session_set_save_handler() + * 3. Any custom integration code. If you use any global variables + * here, they can be accessed in conf/config.php via $GLOBALS + * array. It's recommended to use constants instead. + */ + + +// PHP VERSION CHECK +if (!preg_match('/^(\d+\.\d+)/', PHP_VERSION, $ver) || ($ver[1] < 5.3)) + die("You are using PHP " . PHP_VERSION . " when KCFinder require at least version 5.3.0! Some systems has an option to change the active PHP version. Please refer to your hosting provider or upgrade your PHP distribution."); + + +// SAFE MODE CHECK +if (ini_get("safe_mode")) + die("The \"safe_mode\" PHP ini setting is turned on! You cannot run KCFinder in safe mode."); + + +// CMS INTEGRATION +if (isset($_GET['cms']) && + (basename($_GET['cms']) == $_GET['cms']) && + is_file("integration/{$_GET['cms']}.php") +) + require "integration/{$_GET['cms']}.php"; + + +// REGISTER AUTOLOAD FUNCTION +require "core/autoload.php"; + + +// json_encode() IMPLEMENTATION IF JSON EXTENSION IS MISSING +if (!function_exists("json_encode")) { + + function json_encode($data) { + + if (is_array($data)) { + $ret = array(); + + // OBJECT + if (array_keys($data) !== range(0, count($data) - 1)) { + foreach ($data as $key => $val) + $ret[] = json_encode((string) $key) . ':' . json_encode($val); + return "{" . implode(",", $ret) . "}"; + + // ARRAY + } else { + foreach ($data as $val) + $ret[] = json_encode($val); + return "[" . implode(",", $ret) . "]"; + } + + // BOOLEAN OR NULL + } elseif (is_bool($data) || ($data === null)) + return ($data === null) + ? "null" + : ($data ? "true" : "false"); + + // FLOAT + elseif (is_float($data)) + return rtrim(rtrim(number_format($data, 14, ".", ""), "0"), "."); + + // INTEGER + elseif (is_int($data)) + return $data; + + // STRING + return '"' . + str_replace('/', "\\/", + str_replace("\t", "\\t", + str_replace("\r", "\\r", + str_replace("\n", "\\n", + str_replace('"', "\\\"", + str_replace("\\", "\\\\", + $data)))))) . '"'; + } +} + + +// CUSTOM SESSION SAVE HANDLER CLASS EXAMPLE +// +// Uncomment & edit it if the application you want to integrate with, have +// its own session save handler. It's not even needed to save instances of +// this class in variables. Just add a row: +// new SessionSaveHandler(); +// and your handler will rule the sessions ;-) + +/* +class SessionSaveHandler { + protected $savePath; + protected $sessionName; + + public function __construct() { + session_set_save_handler( + array($this, "open"), + array($this, "close"), + array($this, "read"), + array($this, "write"), + array($this, "destroy"), + array($this, "gc") + ); + } + + // Open function, this works like a constructor in classes and is + // executed when the session is being opened. The open function expects + // two parameters, where the first is the save path and the second is the + // session name. + public function open($savePath, $sessionName) { + $this->savePath = $savePath; + $this->sessionName = $sessionName; + return true; + } + + // Close function, this works like a destructor in classes and is + // executed when the session operation is done. + public function close() { + return true; + } + + // Read function must return string value always to make save handler + // work as expected. Return empty string if there is no data to read. + // Return values from other handlers are converted to boolean expression. + // TRUE for success, FALSE for failure. + public function read($id) { + $file = $this->savePath . "/sess_$id"; + return (string) @file_get_contents($file); + } + + // Write function that is called when session data is to be saved. This + // function expects two parameters: an identifier and the data associated + // with it. + public function write($id, $data) { + $file = $this->savePath . "/sess_$id"; + if (false !== ($fp = @fopen($file, "w"))) { + $return = fwrite($fp, $data); + fclose($fp); + return $return; + } else + return false; + } + + // The destroy handler, this is executed when a session is destroyed with + // session_destroy() and takes the session id as its only parameter. + public function destroy($id) { + $file = $this->savePath . "/sess_$id"; + return @unlink($file); + } + + // The garbage collector, this is executed when the session garbage + // collector is executed and takes the max session lifetime as its only + // parameter. + public function gc($maxlifetime) { + foreach (glob($this->savePath . "/sess_*") as $file) + if (filemtime($file) + $maxlifetime < time()) + @unlink($file); + return true; + } +} + +new SessionSaveHandler(); + +*/ + + +// PUT YOUR ADDITIONAL CODE HERE + +?> \ No newline at end of file diff --git a/additions/kcfinder/core/class/browser.php b/additions/kcfinder/core/class/browser.php new file mode 100644 index 0000000..36d1350 --- /dev/null +++ b/additions/kcfinder/core/class/browser.php @@ -0,0 +1,922 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class browser extends uploader { + protected $action; + protected $thumbsDir; + protected $thumbsTypeDir; + + public function __construct() { + parent::__construct(); + + // SECURITY CHECK INPUT DIRECTORY + if (isset($_POST['dir'])) { + $dir = $this->checkInputDir($_POST['dir'], true, false); + if ($dir === false) unset($_POST['dir']); + $_POST['dir'] = $dir; + } + + if (isset($_GET['dir'])) { + $dir = $this->checkInputDir($_GET['dir'], true, false); + if ($dir === false) unset($_GET['dir']); + $_GET['dir'] = $dir; + } + + $thumbsDir = $this->config['uploadDir'] . "/" . $this->config['thumbsDir']; + if (!$this->config['disabled'] && + ( + ( + !is_dir($thumbsDir) && + !@mkdir($thumbsDir, $this->config['dirPerms']) + ) || + + !is_readable($thumbsDir) || + !dir::isWritable($thumbsDir) || + ( + !is_dir("$thumbsDir/{$this->type}") && + !@mkdir("$thumbsDir/{$this->type}", $this->config['dirPerms']) + ) + ) + ) + $this->errorMsg("Cannot access or create thumbnails folder."); + + $this->thumbsDir = $thumbsDir; + $this->thumbsTypeDir = "$thumbsDir/{$this->type}"; + + // Remove temporary zip downloads if exists + if (!$this->config['disabled']) { + $files = dir::content($this->config['uploadDir'], array( + 'types' => "file", + 'pattern' => '/^.*\.zip$/i' + )); + + if (is_array($files) && count($files)) { + $time = time(); + foreach ($files as $file) + if (is_file($file) && ($time - filemtime($file) > 3600)) + unlink($file); + } + } + + if (isset($_GET['theme']) && + $this->checkFilename($_GET['theme']) && + is_dir("themes/{$_GET['theme']}") + ) + $this->config['theme'] = $_GET['theme']; + } + + public function action() { + $act = isset($_GET['act']) ? $_GET['act'] : "browser"; + if (!method_exists($this, "act_$act")) + $act = "browser"; + $this->action = $act; + $method = "act_$act"; + + if ($this->config['disabled']) { + $message = $this->label("You don't have permissions to browse server."); + if (in_array($act, array("browser", "upload")) || + (substr($act, 0, 8) == "download") + ) + $this->backMsg($message); + else { + header("Content-Type: text/plain; charset={$this->charset}"); + die(json_encode(array('error' => $message))); + } + } + + if (!isset($this->session['dir'])) + $this->session['dir'] = $this->type; + else { + $type = $this->getTypeFromPath($this->session['dir']); + $dir = $this->config['uploadDir'] . "/" . $this->session['dir']; + if (($type != $this->type) || !is_dir($dir) || !is_readable($dir)) + $this->session['dir'] = $this->type; + } + $this->session['dir'] = path::normalize($this->session['dir']); + + // Render the browser + if ($act == "browser") { + header("X-UA-Compatible: chrome=1"); + header("Content-Type: text/html; charset={$this->charset}"); + + // Ajax requests + } elseif ( + (substr($act, 0, 8) != "download") && + !in_array($act, array("thumb", "upload")) + ) + header("Content-Type: text/plain; charset={$this->charset}"); + + $return = $this->$method(); + echo ($return === true) + ? '{}' + : $return; + } + + protected function act_browser() { + if (isset($_GET['dir'])) { + $dir = "{$this->typeDir}/{$_GET['dir']}"; + if ($this->checkFilePath($dir) && is_dir($dir) && is_readable($dir)) + $this->session['dir'] = path::normalize("{$this->type}/{$_GET['dir']}"); + } + return $this->output(); + } + + protected function act_init() { + $tree = $this->getDirInfo($this->typeDir); + $tree['dirs'] = $this->getTree($this->session['dir']); + if (!is_array($tree['dirs']) || !count($tree['dirs'])) + unset($tree['dirs']); + $files = $this->getFiles($this->session['dir']); + $dirWritable = dir::isWritable("{$this->config['uploadDir']}/{$this->session['dir']}"); + $data = array( + 'tree' => &$tree, + 'files' => &$files, + 'dirWritable' => $dirWritable + ); + return json_encode($data); + } + + protected function act_thumb() { + if (!isset($_GET['file']) || + !isset($_GET['dir']) || + !$this->checkFilename($_GET['file']) + ) + $this->sendDefaultThumb(); + + $dir = $this->getDir(); + $file = "{$this->thumbsTypeDir}/{$_GET['dir']}/${_GET['file']}"; + + // Create thumbnail + if (!is_file($file) || !is_readable($file)) { + $file = "$dir/{$_GET['file']}"; + if (!is_file($file) || !is_readable($file)) + $this->sendDefaultThumb($file); + $image = image::factory($this->imageDriver, $file); + if ($image->initError) + $this->sendDefaultThumb($file); + + $img = new fastImage($file); + $type = $img->getType(); + $img->close(); + + if (in_array($type, array("gif", "jpeg", "png")) && + ($image->width <= $this->config['thumbWidth']) && + ($image->height <= $this->config['thumbHeight']) + ) { + $mime = "image/$type"; + httpCache::file($file, $mime); + } else + $this->sendDefaultThumb($file); + + // Get type from already-existing thumbnail + } else { + $img = new fastImage($file); + $type = $img->getType(); + $img->close(); + } + httpCache::file($file, "image/$type"); + } + + protected function act_expand() { + return json_encode(array('dirs' => $this->getDirs($this->postDir()))); + } + + protected function act_chDir() { + $this->postDir(); // Just for existing check + $this->session['dir'] = "{$this->type}/{$_POST['dir']}"; + $dirWritable = dir::isWritable("{$this->config['uploadDir']}/{$this->session['dir']}"); + return json_encode(array( + 'files' => $this->getFiles($this->session['dir']), + 'dirWritable' => $dirWritable + )); + } + + protected function act_newDir() { + if (!$this->config['access']['dirs']['create'] || + !isset($_POST['dir']) || + !isset($_POST['newDir']) || + !$this->checkFilename($_POST['newDir']) + ) + $this->errorMsg("Unknown error."); + + $dir = $this->postDir(); + $newDir = $this->normalizeDirname(trim($_POST['newDir'])); + if (!strlen($newDir)) + $this->errorMsg("Please enter new folder name."); + if (preg_match('/[\/\\\\]/s', $newDir)) + $this->errorMsg("Unallowable characters in folder name."); + if (substr($newDir, 0, 1) == ".") + $this->errorMsg("Folder name shouldn't begins with '.'"); + if (file_exists("$dir/$newDir")) + $this->errorMsg("A file or folder with that name already exists."); + if (!@mkdir("$dir/$newDir", $this->config['dirPerms'])) + $this->errorMsg("Cannot create {dir} folder.", array('dir' => $this->htmlData($newDir))); + return true; + } + + protected function act_renameDir() { + if (!$this->config['access']['dirs']['rename'] || + !isset($_POST['dir']) || + !strlen(rtrim(rtrim(trim($_POST['dir']), "/"), "\\")) || + !isset($_POST['newName']) || + !$this->checkFilename($_POST['newName']) + ) + $this->errorMsg("Unknown error."); + + $dir = $this->postDir(); + $newName = $this->normalizeDirname(trim($_POST['newName'])); + if (!strlen($newName)) + $this->errorMsg("Please enter new folder name."); + if (preg_match('/[\/\\\\]/s', $newName)) + $this->errorMsg("Unallowable characters in folder name."); + if (substr($newName, 0, 1) == ".") + $this->errorMsg("Folder name shouldn't begins with '.'"); + if (!@rename($dir, dirname($dir) . "/$newName")) + $this->errorMsg("Cannot rename the folder."); + $thumbDir = "$this->thumbsTypeDir/{$_POST['dir']}"; + if (is_dir($thumbDir)) + @rename($thumbDir, dirname($thumbDir) . "/$newName"); + return json_encode(array('name' => $newName)); + } + + protected function act_deleteDir() { + if (!$this->config['access']['dirs']['delete'] || + !isset($_POST['dir']) || + !strlen(rtrim(rtrim(trim($_POST['dir']), "/"), "\\")) + ) + $this->errorMsg("Unknown error."); + + $dir = $this->postDir(); + + if (!dir::isWritable($dir)) + $this->errorMsg("Cannot delete the folder."); + $result = !dir::prune($dir, false); + if (is_array($result) && count($result)) + $this->errorMsg("Failed to delete {count} files/folders.", + array('count' => count($result))); + $thumbDir = "$this->thumbsTypeDir/{$_POST['dir']}"; + if (is_dir($thumbDir)) dir::prune($thumbDir); + return true; + } + + protected function act_upload() { + header("Content-Type: text/plain; charset={$this->charset}"); + + if (!$this->config['access']['files']['upload'] || + !isset($_POST['dir']) + ) + $this->errorMsg("Unknown error."); + + $dir = $this->postDir(); + + if (!dir::isWritable($dir)) + $this->errorMsg("Cannot access or write to upload folder."); + + if (is_array($this->file['name'])) { + $return = array(); + foreach ($this->file['name'] as $i => $name) { + $return[] = $this->moveUploadFile(array( + 'name' => $name, + 'tmp_name' => $this->file['tmp_name'][$i], + 'error' => $this->file['error'][$i] + ), $dir); + } + return implode("\n", $return); + } else + return $this->moveUploadFile($this->file, $dir); + } + + protected function act_download() { + $dir = $this->postDir(); + if (!isset($_POST['dir']) || + !isset($_POST['file']) || + !$this->checkFilename($_POST['file']) || + (false === ($file = "$dir/{$_POST['file']}")) || + !file_exists($file) || !is_readable($file) + ) + $this->errorMsg("Unknown error."); + + header("Pragma: public"); + header("Expires: 0"); + header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); + header("Cache-Control: private", false); + header("Content-Type: application/octet-stream"); + header('Content-Disposition: attachment; filename="' . str_replace('"', "_", $_POST['file']) . '"'); + header("Content-Transfer-Encoding: binary"); + header("Content-Length: " . filesize($file)); + readfile($file); + die; + } + + protected function act_rename() { + $dir = $this->postDir(); + if (!$this->config['access']['files']['rename'] || + !isset($_POST['dir']) || + !isset($_POST['file']) || + !isset($_POST['newName']) || + !$this->checkFilename($_POST['file']) || + !$this->checkFilename($_POST['newName']) || + (false === ($file = "$dir/{$_POST['file']}")) || + !file_exists($file) || !is_readable($file) || !file::isWritable($file) + ) + $this->errorMsg("Unknown error."); + + if (isset($this->config['denyExtensionRename']) && + $this->config['denyExtensionRename'] && + (file::getExtension($_POST['file'], true) !== + file::getExtension($_POST['newName'], true) + ) + ) + $this->errorMsg("You cannot rename the extension of files!"); + + $newName = $this->normalizeFilename(trim($_POST['newName'])); + if (!strlen($newName)) + $this->errorMsg("Please enter new file name."); + if (preg_match('/[\/\\\\]/s', $newName)) + $this->errorMsg("Unallowable characters in file name."); + if (substr($newName, 0, 1) == ".") + $this->errorMsg("File name shouldn't begins with '.'"); + $newName = "$dir/$newName"; + if (file_exists($newName)) + $this->errorMsg("A file or folder with that name already exists."); + $ext = file::getExtension($newName); + if (!$this->validateExtension($ext, $this->type)) + $this->errorMsg("Denied file extension."); + if (!@rename($file, $newName)) + $this->errorMsg("Unknown error."); + + $thumbDir = "{$this->thumbsTypeDir}/{$_POST['dir']}"; + $thumbFile = "$thumbDir/{$_POST['file']}"; + + if (file_exists($thumbFile)) + @rename($thumbFile, "$thumbDir/" . basename($newName)); + return true; + } + + protected function act_delete() { + $dir = $this->postDir(); + if (!$this->config['access']['files']['delete'] || + !isset($_POST['dir']) || + !isset($_POST['file']) || + !$this->checkFilename($_POST['file']) || + (false === ($file = "$dir/{$_POST['file']}")) || + !file_exists($file) || !is_readable($file) || !file::isWritable($file) || + !@unlink($file) + ) + $this->errorMsg("Unknown error."); + + $thumb = "{$this->thumbsTypeDir}/{$_POST['dir']}/{$_POST['file']}"; + if (file_exists($thumb)) @unlink($thumb); + return true; + } + + protected function act_cp_cbd() { + $dir = $this->postDir(); + if (!$this->config['access']['files']['copy'] || + !isset($_POST['dir']) || + !is_dir($dir) || !is_readable($dir) || !dir::isWritable($dir) || + !isset($_POST['files']) || !is_array($_POST['files']) || + !count($_POST['files']) + ) + $this->errorMsg("Unknown error."); + + $error = array(); + foreach($_POST['files'] as $file) { + $file = path::normalize($file); + if (substr($file, 0, 1) == ".") continue; + $type = explode("/", $file); + $type = $type[0]; + if ($type != $this->type) continue; + $path = "{$this->config['uploadDir']}/$file"; + if (!$this->checkFilePath($path)) continue; + $base = basename($file); + $replace = array('file' => $this->htmlData($base)); + $ext = file::getExtension($base); + if (!file_exists($path)) + $error[] = $this->label("The file '{file}' does not exist.", $replace); + elseif (substr($base, 0, 1) == ".") + $error[] = $this->htmlData($base) . ": " . $this->label("File name shouldn't begins with '.'"); + elseif (!$this->validateExtension($ext, $type)) + $error[] = $this->htmlData($base) . ": " . $this->label("Denied file extension."); + elseif (file_exists("$dir/$base")) + $error[] = $this->htmlData($base) . ": " . $this->label("A file or folder with that name already exists."); + elseif (!is_readable($path) || !is_file($path)) + $error[] = $this->label("Cannot read '{file}'.", $replace); + elseif (!@copy($path, "$dir/$base")) + $error[] = $this->label("Cannot copy '{file}'.", $replace); + else { + if (function_exists("chmod")) + @chmod("$dir/$base", $this->config['filePerms']); + $fromThumb = "{$this->thumbsDir}/$file"; + if (is_file($fromThumb) && is_readable($fromThumb)) { + $toThumb = "{$this->thumbsTypeDir}/{$_POST['dir']}"; + if (!is_dir($toThumb)) + @mkdir($toThumb, $this->config['dirPerms'], true); + $toThumb .= "/$base"; + @copy($fromThumb, $toThumb); + } + } + } + if (count($error)) + return json_encode(array('error' => $error)); + return true; + } + + protected function act_mv_cbd() { + $dir = $this->postDir(); + if (!$this->config['access']['files']['move'] || + !isset($_POST['dir']) || + !is_dir($dir) || !is_readable($dir) || !dir::isWritable($dir) || + !isset($_POST['files']) || !is_array($_POST['files']) || + !count($_POST['files']) + ) + $this->errorMsg("Unknown error."); + + $error = array(); + foreach($_POST['files'] as $file) { + $file = path::normalize($file); + if (substr($file, 0, 1) == ".") continue; + $type = explode("/", $file); + $type = $type[0]; + if ($type != $this->type) continue; + $path = "{$this->config['uploadDir']}/$file"; + if (!$this->checkFilePath($path)) continue; + $base = basename($file); + $replace = array('file' => $this->htmlData($base)); + $ext = file::getExtension($base); + if (!file_exists($path)) + $error[] = $this->label("The file '{file}' does not exist.", $replace); + elseif (substr($base, 0, 1) == ".") + $error[] = $this->htmlData($base) . ": " . $this->label("File name shouldn't begins with '.'"); + elseif (!$this->validateExtension($ext, $type)) + $error[] = $this->htmlData($base) . ": " . $this->label("Denied file extension."); + elseif (file_exists("$dir/$base")) + $error[] = $this->htmlData($base) . ": " . $this->label("A file or folder with that name already exists."); + elseif (!is_readable($path) || !is_file($path)) + $error[] = $this->label("Cannot read '{file}'.", $replace); + elseif (!file::isWritable($path) || !@rename($path, "$dir/$base")) + $error[] = $this->label("Cannot move '{file}'.", $replace); + else { + if (function_exists("chmod")) + @chmod("$dir/$base", $this->config['filePerms']); + $fromThumb = "{$this->thumbsDir}/$file"; + if (is_file($fromThumb) && is_readable($fromThumb)) { + $toThumb = "{$this->thumbsTypeDir}/{$_POST['dir']}"; + if (!is_dir($toThumb)) + @mkdir($toThumb, $this->config['dirPerms'], true); + $toThumb .= "/$base"; + @rename($fromThumb, $toThumb); + } + } + } + if (count($error)) + return json_encode(array('error' => $error)); + return true; + } + + protected function act_rm_cbd() { + if (!$this->config['access']['files']['delete'] || + !isset($_POST['files']) || + !is_array($_POST['files']) || + !count($_POST['files']) + ) + $this->errorMsg("Unknown error."); + + $error = array(); + foreach($_POST['files'] as $file) { + $file = path::normalize($file); + if (substr($file, 0, 1) == ".") continue; + $type = explode("/", $file); + $type = $type[0]; + if ($type != $this->type) continue; + $path = "{$this->config['uploadDir']}/$file"; + if (!$this->checkFilePath($path)) continue; + $base = basename($file); + $replace = array('file' => $this->htmlData($base)); + if (!is_file($path)) + $error[] = $this->label("The file '{file}' does not exist.", $replace); + elseif (!@unlink($path)) + $error[] = $this->label("Cannot delete '{file}'.", $replace); + else { + $thumb = "{$this->thumbsDir}/$file"; + if (is_file($thumb)) @unlink($thumb); + } + } + if (count($error)) + return json_encode(array('error' => $error)); + return true; + } + + protected function act_downloadDir() { + $dir = $this->postDir(); + if (!isset($_POST['dir']) || $this->config['denyZipDownload']) + $this->errorMsg("Unknown error."); + $filename = basename($dir) . ".zip"; + do { + $file = md5(time() . session_id()); + $file = "{$this->config['uploadDir']}/$file.zip"; + } while (file_exists($file)); + new zipFolder($file, $dir); + header("Content-Type: application/x-zip"); + header('Content-Disposition: attachment; filename="' . str_replace('"', "_", $filename) . '"'); + header("Content-Length: " . filesize($file)); + readfile($file); + unlink($file); + die; + } + + protected function act_downloadSelected() { + $dir = $this->postDir(); + if (!isset($_POST['dir']) || + !isset($_POST['files']) || + !is_array($_POST['files']) || + $this->config['denyZipDownload'] + ) + $this->errorMsg("Unknown error."); + + $zipFiles = array(); + foreach ($_POST['files'] as $file) { + $file = path::normalize($file); + if ((substr($file, 0, 1) == ".") || (strpos($file, '/') !== false)) + continue; + $file = "$dir/$file"; + if (!is_file($file) || !is_readable($file) || !$this->checkFilePath($file)) + continue; + $zipFiles[] = $file; + } + + do { + $file = md5(time() . session_id()); + $file = "{$this->config['uploadDir']}/$file.zip"; + } while (file_exists($file)); + + $zip = new \ZipArchive(); + $res = $zip->open($file, \ZipArchive::CREATE); + if ($res === TRUE) { + foreach ($zipFiles as $cfile) + $zip->addFile($cfile, basename($cfile)); + $zip->close(); + } + header("Content-Type: application/x-zip"); + header('Content-Disposition: attachment; filename="selected_files_' . basename($file) . '"'); + header("Content-Length: " . filesize($file)); + readfile($file); + unlink($file); + die; + } + + protected function act_downloadClipboard() { + if (!isset($_POST['files']) || + !is_array($_POST['files']) || + $this->config['denyZipDownload'] + ) + $this->errorMsg("Unknown error."); + + $zipFiles = array(); + foreach ($_POST['files'] as $file) { + $file = path::normalize($file); + if ((substr($file, 0, 1) == ".")) + continue; + $type = explode("/", $file); + $type = $type[0]; + if ($type != $this->type) + continue; + $file = $this->config['uploadDir'] . "/$file"; + if (!is_file($file) || !is_readable($file) || !$this->checkFilePath($file)) + continue; + $zipFiles[] = $file; + } + + do { + $file = md5(time() . session_id()); + $file = "{$this->config['uploadDir']}/$file.zip"; + } while (file_exists($file)); + + $zip = new \ZipArchive(); + $res = $zip->open($file, \ZipArchive::CREATE); + if ($res === TRUE) { + foreach ($zipFiles as $cfile) + $zip->addFile($cfile, basename($cfile)); + $zip->close(); + } + header("Content-Type: application/x-zip"); + header('Content-Disposition: attachment; filename="clipboard_' . basename($file) . '"'); + header("Content-Length: " . filesize($file)); + readfile($file); + unlink($file); + die; + } + + protected function act_check4Update() { + if ($this->config['denyUpdateCheck']) + return json_encode(array('version' => false)); + + // Caching HTTP request for 6 hours + if (isset($this->session['checkVersion']) && + isset($this->session['checkVersionTime']) && + ((time() - $this->session['checkVersionTime']) < 21600) + ) + return json_encode(array('version' => $this->session['checkVersion'])); + + $protocol = "http"; + $host = "kcfinder.sunhater.com"; + $port = 80; + $path = "/checkVersion.php"; + + $url = "$protocol://$host:$port$path"; + $pattern = '/^\d+\.\d+$/'; + $responsePattern = '/^[A-Z]+\/\d+\.\d+\s+\d+\s+OK\s*([a-zA-Z0-9\-]+\:\s*[^\n]*\n)*\s*(.*)\s*$/'; + + // file_get_contents() + if (ini_get("allow_url_fopen") && + (false !== ($ver = file_get_contents($url))) && + preg_match($pattern, $ver) + + // HTTP extension + ) {} elseif ( + function_exists("http_get") && + (false !== ($ver = @http_get($url))) && + ( + ( + preg_match($responsePattern, $ver, $match) && + false !== ($ver = $match[2]) + ) || true + ) && + preg_match($pattern, $ver) + + // Curl extension + ) {} elseif ( + function_exists("curl_init") && + (false !== ( $curl = @curl_init($url) )) && + ( @ob_start() || (@curl_close($curl) && false)) && + ( @curl_exec($curl) || (@curl_close($curl) && false)) && + ((false !== ( $ver = @ob_get_clean() )) || (@curl_close($curl) && false)) && + ( @curl_close($curl) || true ) && + preg_match($pattern, $ver) + + // Socket extension + ) {} elseif (function_exists('socket_create')) { + $cmd = + "GET $path " . strtoupper($protocol) . "/1.1\r\n" . + "Host: $host\r\n" . + "Connection: Close\r\n\r\n"; + + if ((false !== ( $socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP) )) && + (false !== @socket_connect($socket, $host, $port) ) && + (false !== @socket_write($socket, $cmd, strlen($cmd)) ) && + (false !== ( $ver = @socket_read($socket, 2048) )) && + preg_match($responsePattern, $ver, $match) + ) + $ver = $match[2]; + + if (isset($socket) && is_resource($socket)) + @socket_close($socket); + } + + if (isset($ver) && preg_match($pattern, $ver)) { + $this->session['checkVersion'] = $ver; + $this->session['checkVersionTime'] = time(); + return json_encode(array('version' => $ver)); + } else + return json_encode(array('version' => false)); + } + + protected function moveUploadFile($file, $dir) { + $message = $this->checkUploadedFile($file); + + if ($message !== true) { + if (isset($file['tmp_name'])) + @unlink($file['tmp_name']); + return "{$file['name']}: $message"; + } + + $filename = $this->normalizeFilename($file['name']); + $target = "$dir/" . file::getInexistantFilename($filename, $dir); + + if (!@move_uploaded_file($file['tmp_name'], $target) && + !@rename($file['tmp_name'], $target) && + !@copy($file['tmp_name'], $target) + ) { + @unlink($file['tmp_name']); + return $this->htmlData($file['name']) . ": " . $this->label("Cannot move uploaded file to target folder."); + } elseif (function_exists('chmod')) + chmod($target, $this->config['filePerms']); + + $this->makeThumb($target); + return "/" . basename($target); + } + + protected function sendDefaultThumb($file=null) { + if ($file !== null) { + $ext = file::getExtension($file); + $thumb = "themes/{$this->config['theme']}/img/files/big/$ext.png"; + } + if (!isset($thumb) || !file_exists($thumb)) + $thumb = "themes/{$this->config['theme']}/img/files/big/..png"; + header("Content-Type: image/png"); + readfile($thumb); + die; + } + + protected function getFiles($dir) { + $thumbDir = "{$this->config['uploadDir']}/{$this->config['thumbsDir']}/$dir"; + $dir = "{$this->config['uploadDir']}/$dir"; + $return = array(); + $files = dir::content($dir, array('types' => "file")); + if ($files === false) + return $return; + + foreach ($files as $file) { + + $img = new fastImage($file); + $type = $img->getType(); + + if ($type !== false) { + $size = $img->getSize($file); + if (is_array($size) && count($size)) { + $thumb_file = "$thumbDir/" . basename($file); + if (!is_file($thumb_file)) + $this->makeThumb($file, false); + $smallThumb = + ($size[0] <= $this->config['thumbWidth']) && + ($size[1] <= $this->config['thumbHeight']) && + in_array($type, array("gif", "jpeg", "png")); + } else + $smallThumb = false; + } else + $smallThumb = false; + + $img->close(); + + $stat = stat($file); + if ($stat === false) continue; + $name = basename($file); + $ext = file::getExtension($file); + $bigIcon = file_exists("themes/{$this->config['theme']}/img/files/big/$ext.png"); + $smallIcon = file_exists("themes/{$this->config['theme']}/img/files/small/$ext.png"); + $thumb = file_exists("$thumbDir/$name"); + $return[] = array( + 'name' => stripcslashes($name), + 'size' => $stat['size'], + 'mtime' => $stat['mtime'], + 'date' => @strftime($this->dateTimeSmall, $stat['mtime']), + 'readable' => is_readable($file), + 'writable' => file::isWritable($file), + 'bigIcon' => $bigIcon, + 'smallIcon' => $smallIcon, + 'thumb' => $thumb, + 'smallThumb' => $smallThumb + ); + } + return $return; + } + + protected function getTree($dir, $index=0) { + $path = explode("/", $dir); + + $pdir = ""; + for ($i = 0; ($i <= $index && $i < count($path)); $i++) + $pdir .= "/{$path[$i]}"; + if (strlen($pdir)) + $pdir = substr($pdir, 1); + + $fdir = "{$this->config['uploadDir']}/$pdir"; + + $dirs = $this->getDirs($fdir); + + if (is_array($dirs) && count($dirs) && ($index <= count($path) - 1)) { + + foreach ($dirs as $i => $cdir) { + if ($cdir['hasDirs'] && + ( + ($index == count($path) - 1) || + ($cdir['name'] == $path[$index + 1]) + ) + ) { + $dirs[$i]['dirs'] = $this->getTree($dir, $index + 1); + if (!is_array($dirs[$i]['dirs']) || !count($dirs[$i]['dirs'])) { + unset($dirs[$i]['dirs']); + continue; + } + } + } + } else + return false; + + return $dirs; + } + + protected function postDir($existent=true) { + $dir = $this->typeDir; + if (isset($_POST['dir'])) + $dir .= "/" . $_POST['dir']; + if (!$this->checkFilePath($dir)) + $this->errorMsg("Unknown error."); + if ($existent && (!is_dir($dir) || !is_readable($dir))) + $this->errorMsg("Inexistant or inaccessible folder."); + return $dir; + } + + protected function getDir($existent=true) { + $dir = $this->typeDir; + if (isset($_GET['dir'])) + $dir .= "/" . $_GET['dir']; + if (!$this->checkFilePath($dir)) + $this->errorMsg("Unknown error."); + if ($existent && (!is_dir($dir) || !is_readable($dir))) + $this->errorMsg("Inexistant or inaccessible folder."); + return $dir; + } + + protected function getDirs($dir) { + $dirs = dir::content($dir, array('types' => "dir")); + $return = array(); + if (is_array($dirs)) { + $writable = dir::isWritable($dir); + foreach ($dirs as $cdir) { + $info = $this->getDirInfo($cdir); + if ($info === false) continue; + $info['removable'] = $writable && $info['writable']; + $return[] = $info; + } + } + return $return; + } + + protected function getDirInfo($dir, $removable=false) { + if ((substr(basename($dir), 0, 1) == ".") || !is_dir($dir) || !is_readable($dir)) + return false; + $dirs = dir::content($dir, array('types' => "dir")); + if (is_array($dirs)) { + foreach ($dirs as $key => $cdir) + if (substr(basename($cdir), 0, 1) == ".") + unset($dirs[$key]); + $hasDirs = count($dirs) ? true : false; + } else + $hasDirs = false; + + $writable = dir::isWritable($dir); + $info = array( + 'name' => stripslashes(basename($dir)), + 'readable' => is_readable($dir), + 'writable' => $writable, + 'removable' => $removable && $writable && dir::isWritable(dirname($dir)), + 'hasDirs' => $hasDirs + ); + + if ($dir == "{$this->config['uploadDir']}/{$this->session['dir']}") + $info['current'] = true; + + return $info; + } + + protected function output($data=null, $template=null) { + if (!is_array($data)) $data = array(); + if ($template === null) + $template = $this->action; + + if (file_exists("tpl/tpl_$template.php")) { + ob_start(); + $eval = "unset(\$data);unset(\$template);unset(\$eval);"; + $_ = $data; + foreach (array_keys($data) as $key) + if (preg_match('/^[a-z\d_]+$/i', $key)) + $eval .= "\$$key=\$_['$key'];"; + $eval .= "unset(\$_);require \"tpl/tpl_$template.php\";"; + eval($eval); + return ob_get_clean(); + } + + return ""; + } + + protected function errorMsg($message, array $data=null) { + if (in_array($this->action, array("thumb", "upload", "download", "downloadDir"))) + die($this->label($message, $data)); + if (($this->action === null) || ($this->action == "browser")) + $this->backMsg($message, $data); + else { + $message = $this->label($message, $data); + die(json_encode(array('error' => $message))); + } + } + + protected function htmlData($str) { + return htmlentities($str, null, strtoupper($this->charset)); + } +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/core/class/minifier.php b/additions/kcfinder/core/class/minifier.php new file mode 100644 index 0000000..dfe7eab --- /dev/null +++ b/additions/kcfinder/core/class/minifier.php @@ -0,0 +1,114 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class minifier { + + protected $config; + protected $type = "js"; + protected $minCmd = ""; + protected $mime = array( + 'js' => "text/javascript", + 'css' => "text/css" + ); + + public function __construct($type=null) { + require "conf/config.php"; + $this->config = $_CONFIG; + $type = strtolower($type); + if (isset($this->mime[$type])) + $this->type = $type; + if (isset($_CONFIG["_{$this->type}MinCmd"])) + $this->minCmd = $_CONFIG["_{$this->type}MinCmd"]; + } + + public function minify($cacheFile=null, $dir=null) { + if ($dir === null) + $dir = dirname($_SERVER['SCRIPT_FILENAME']); + + // MODIFICATION TIME FILES + $mtFiles = array( + __FILE__, + $_SERVER['SCRIPT_FILENAME'], + "conf/config.php" + ); + + // GET SOURCE CODE FILES + $files = dir::content($dir, array( + 'types' => "file", + 'pattern' => '/^.*\.' . $this->type . '$/' + )); + + // GET NEWEST MODIFICATION TIME + $mtime = 0; + foreach (array_merge($mtFiles, $files) as $file) { + $fmtime = filemtime($file); + if ($fmtime > $mtime) + $mtime = $fmtime; + } + + $header = "Content-Type: {$this->mime[$this->type]}"; + + // GET SOURCE CODE FROM CLIENT HTTP CACHE IF EXISTS + httpCache::checkMTime($mtime, $header); + + // OUTPUT SOURCE CODE + header($header); + + // GET SOURCE CODE FROM SERVER-SIDE CACHE + if (($cacheFile !== null) && + file_exists($cacheFile) && + ( + (filemtime($cacheFile) >= $mtime) || + !is_writable($cacheFile) // if cache file cannot be modified + ) // the script will output it always + ) { // with its distribution content + readfile($cacheFile); + die; + } + + // MINIFY AND JOIN SOURCE CODE + $source = ""; + foreach ($files as $file) { + + if (strlen($this->minCmd) && (substr($file, 4, 1) != "_")) { + $cmd = str_replace("{file}", $file, $this->minCmd); + $source .= `$cmd`; + + } else + $source .= file_get_contents($file); + } + + // UPDATE SERVER-SIDE CACHE + if (($cacheFile !== null) && + ( + is_writable($cacheFile) || + ( + !file_exists($cacheFile) && + dir::isWritable(dirname($cacheFile)) + ) + ) + ) { + file_put_contents($cacheFile, $source); + touch($cacheFile, $mtime); + } + + // OUTPUT SOURCE CODE + echo $source; + + } +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/core/class/uploader.php b/additions/kcfinder/core/class/uploader.php new file mode 100644 index 0000000..9a39335 --- /dev/null +++ b/additions/kcfinder/core/class/uploader.php @@ -0,0 +1,817 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class uploader { + +/** Release version */ + const VERSION = "3.12"; + +/** Config session-overrided settings + * @var array */ + protected $config = array(); + +/** Default image driver + * @var string */ + protected $imageDriver = "gd"; + +/** Opener applocation properties + * @var array */ + protected $opener = array(); + +/** Got from $_GET['type'] or first one $config['types'] array key, if inexistant + * @var string */ + protected $type; + +/** Helper property. Local filesystem path to the Type Directory + * Equivalent: $config['uploadDir'] . "/" . $type + * @var string */ + protected $typeDir; + +/** Helper property. Web URL to the Type Directory + * Equivalent: $config['uploadURL'] . "/" . $type + * @var string */ + protected $typeURL; + +/** Linked to $config['types'] + * @var array */ + protected $types = array(); + +/** Settings which can override default settings if exists as keys in $config['types'][$type] array + * @var array */ + protected $typeSettings = array('disabled', 'theme', 'dirPerms', 'filePerms', 'denyZipDownload', 'maxImageWidth', 'maxImageHeight', 'thumbWidth', 'thumbHeight', 'jpegQuality', 'access', 'filenameChangeChars', 'dirnameChangeChars', 'denyExtensionRename', 'deniedExts', 'watermark'); + +/** Got from language file + * @var string */ + protected $charset; + +/** The language got from $_GET['lng'] or $_GET['lang'] or... Please see next property + * @var string */ + protected $lang = "en"; + +/** Possible language $_GET keys + * @var array */ + protected $langInputNames = array('lang', 'langCode', 'lng', 'language', 'lang_code'); + +/** Uploaded file(s) info. Linked to first $_FILES element + * @var array */ + protected $file; + +/** Next three properties are got from the current language file + * @var string */ + protected $dateTimeFull; // Currently not used + protected $dateTimeMid; // Currently not used + protected $dateTimeSmall; + +/** Contain Specified language labels + * @var array */ + protected $labels = array(); + +/** Session array. Please use this property instead of $_SESSION + * @var array */ + protected $session; + +/** CMS integration property (got from $_GET['cms']) + * @var string */ + protected $cms = ""; + +/** Magic method which allows read-only access to protected or private class properties + * @param string $property + * @return mixed */ + public function __get($property) { + return property_exists($this, $property) ? $this->$property : null; + } + + public function __construct() { + + // SET CMS INTEGRATION PROPERTY + if (isset($_GET['cms']) && + $this->checkFilename($_GET['cms']) && + is_file("integration/{$_GET['cms']}.php") + ) + $this->cms = $_GET['cms']; + + // LINKING UPLOADED FILE + if (count($_FILES)) + $this->file = &$_FILES[key($_FILES)]; + + // LOAD DEFAULT CONFIGURATION + require "conf/config.php"; + + // SETTING UP SESSION + if (!session_id()) { + if (isset($_CONFIG['_sessionLifetime'])) + ini_set('session.gc_maxlifetime', $_CONFIG['_sessionLifetime'] * 60); + if (isset($_CONFIG['_sessionDir'])) + ini_set('session.save_path', $_CONFIG['_sessionDir']); + if (isset($_CONFIG['_sessionDomain'])) + ini_set('session.cookie_domain', $_CONFIG['_sessionDomain']); + session_start(); + } + + // LOAD SESSION CONFIGURATION IF EXISTS + $this->config = $_CONFIG; + $sessVar = "_sessionVar"; + if (isset($_CONFIG[$sessVar])) { + + $sessVar = $_CONFIG[$sessVar]; + + if (!isset($_SESSION[$sessVar])) + $_SESSION[$sessVar] = array(); + + $sessVar = &$_SESSION[$sessVar]; + + if (!is_array($sessVar)) + $sessVar = array(); + + foreach ($sessVar as $key => $val) + if ((substr($key, 0, 1) != "_") && isset($_CONFIG[$key])) + $this->config[$key] = $val; + + if (!isset($sessVar['self'])) + $sessVar['self'] = array(); + + $this->session = &$sessVar['self']; + + } else + $this->session = &$_SESSION; + + // SECURING THE SESSION + $stamp = array( + 'ip' => $_SERVER['REMOTE_ADDR'], + 'agent' => md5($_SERVER['HTTP_USER_AGENT']) + ); + if (!isset($this->session['stamp'])) + $this->session['stamp'] = $stamp; + elseif (!is_array($this->session['stamp']) || ($this->session['stamp'] !== $stamp)) { + if ($this->session['stamp']['ip'] === $stamp['ip']) + session_destroy(); + die; + } + + // IMAGE DRIVER INIT + if (isset($this->config['imageDriversPriority'])) { + $this->config['imageDriversPriority'] = + text::clearWhitespaces($this->config['imageDriversPriority']); + $driver = image::getDriver(explode(' ', $this->config['imageDriversPriority'])); + if ($driver !== false) + $this->imageDriver = $driver; + } + if ((!isset($driver) || ($driver === false)) && + (image::getDriver(array($this->imageDriver)) === false) + ) + die("Cannot find any of the supported PHP image extensions!"); + + // WATERMARK INIT + if (isset($this->config['watermark']) && is_string($this->config['watermark'])) + $this->config['watermark'] = array('file' => $this->config['watermark']); + + // GET TYPE DIRECTORY + $this->types = &$this->config['types']; + $firstType = array_keys($this->types); + $firstType = $firstType[0]; + $this->type = ( + isset($_GET['type']) && + isset($this->types[$_GET['type']]) + ) + ? $_GET['type'] : $firstType; + + // LOAD TYPE DIRECTORY SPECIFIC CONFIGURATION IF EXISTS + if (is_array($this->types[$this->type])) { + foreach ($this->types[$this->type] as $key => $val) + if (in_array($key, $this->typeSettings)) + $this->config[$key] = $val; + $this->types[$this->type] = isset($this->types[$this->type]['type']) + ? $this->types[$this->type]['type'] : ""; + } + + // COOKIES INIT + $ip = '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'; + $ip = '/^' . implode('\.', array($ip, $ip, $ip, $ip)) . '$/'; + if (preg_match($ip, $_SERVER['HTTP_HOST']) || + preg_match('/^[^\.]+$/', $_SERVER['HTTP_HOST']) + ) + $this->config['cookieDomain'] = ""; + elseif (!strlen($this->config['cookieDomain'])) + $this->config['cookieDomain'] = $_SERVER['HTTP_HOST']; + if (!strlen($this->config['cookiePath'])) + $this->config['cookiePath'] = "/"; + + // UPLOAD FOLDER INIT + + // FULL URL + if (preg_match('/^([a-z]+)\:\/\/([^\/^\:]+)(\:(\d+))?\/(.+)\/?$/', + $this->config['uploadURL'], $patt) + ) { + list($unused, $protocol, $domain, $unused, $port, $path) = $patt; + $path = path::normalize($path); + $this->config['uploadURL'] = "$protocol://$domain" . (strlen($port) ? ":$port" : "") . "/$path"; + $this->config['uploadDir'] = strlen($this->config['uploadDir']) + ? path::normalize($this->config['uploadDir']) + : path::url2fullPath("/$path"); + $this->typeDir = "{$this->config['uploadDir']}/{$this->type}"; + $this->typeURL = "{$this->config['uploadURL']}/{$this->type}"; + + // SITE ROOT + } elseif ($this->config['uploadURL'] == "/") { + $this->config['uploadDir'] = strlen($this->config['uploadDir']) + ? path::normalize($this->config['uploadDir']) + : path::normalize($_SERVER['DOCUMENT_ROOT']); + $this->typeDir = "{$this->config['uploadDir']}/{$this->type}"; + $this->typeURL = "/{$this->type}"; + + // ABSOLUTE & RELATIVE + } else { + $this->config['uploadURL'] = (substr($this->config['uploadURL'], 0, 1) === "/") + ? path::normalize($this->config['uploadURL']) + : path::rel2abs_url($this->config['uploadURL']); + $this->config['uploadDir'] = strlen($this->config['uploadDir']) + ? path::normalize($this->config['uploadDir']) + : path::url2fullPath($this->config['uploadURL']); + $this->typeDir = "{$this->config['uploadDir']}/{$this->type}"; + $this->typeURL = "{$this->config['uploadURL']}/{$this->type}"; + } + + // HOST APPLICATIONS INIT + if (isset($_GET['CKEditorFuncNum'])) { + $this->opener['name'] = "ckeditor"; + $this->opener['CKEditor'] = array('funcNum' => $_GET['CKEditorFuncNum']); + + } elseif (isset($_GET['opener'])) { + $this->opener['name'] = $_GET['opener']; + + if ($_GET['opener'] == "tinymce") { + if (!isset($this->config['_tinyMCEPath']) || !strlen($this->config['_tinyMCEPath'])) + $this->opener['name'] = false; + + } elseif ($_GET['opener'] == "tinymce4") { + if (!isset($_GET['field'])) + $this->opener['name'] = false; + else + $this->opener['TinyMCE'] = array('field' => $_GET['field']); + } + + } else + $this->opener['name'] = false; + + // LOCALIZATION + foreach ($this->langInputNames as $key) + if (isset($_GET[$key]) && + preg_match('/^[a-z][a-z\._\-]*$/i', $_GET[$key]) && + file_exists("lang/" . strtolower($_GET[$key]) . ".php") + ) { + $this->lang = $_GET[$key]; + break; + } + $this->localize($this->lang); + + // IF BROWSER IS ENABLED + if (!$this->config['disabled']) { + + // TRY TO CREATE UPLOAD DIRECTORY IF NOT EXISTS + if (!$this->config['disabled'] && !is_dir($this->config['uploadDir'])) + @mkdir($this->config['uploadDir'], $this->config['dirPerms']); + + // CHECK & MAKE DEFAULT .htaccess + if (isset($this->config['_check4htaccess']) && + $this->config['_check4htaccess'] + ) { + $htaccess = "{$this->config['uploadDir']}/.htaccess"; + $original = $this->get_htaccess(); + if (!file_exists($htaccess)) { + if (!@file_put_contents($htaccess, $original)) + $this->backMsg("Cannot write to upload folder. {$this->config['uploadDir']}"); + } else { + if (false === ($data = @file_get_contents($htaccess))) + $this->backMsg("Cannot read .htaccess"); + if (($data != $original) && !@file_put_contents($htaccess, $original)) + $this->backMsg("Incorrect .htaccess file. Cannot rewrite it!"); + } + } + + // CHECK & CREATE UPLOAD FOLDER + if (!is_dir($this->typeDir)) { + if (!mkdir($this->typeDir, $this->config['dirPerms'])) + $this->backMsg("Cannot create {dir} folder.", array('dir' => $this->type)); + } elseif (!is_readable($this->typeDir)) + $this->backMsg("Cannot read upload folder."); + } + } + + public function upload() { + $config = &$this->config; + $file = &$this->file; + $url = $message = ""; + + if ($config['disabled'] || !$config['access']['files']['upload']) { + if (isset($file['tmp_name'])) @unlink($file['tmp_name']); + $message = $this->label("You don't have permissions to upload files."); + + } elseif (true === ($message = $this->checkUploadedFile())) { + $message = ""; + + $dir = "{$this->typeDir}/"; + if (isset($_GET['dir']) && + (false !== ($gdir = $this->checkInputDir($_GET['dir']))) + ) { + $udir = path::normalize("$dir$gdir"); + if (substr($udir, 0, strlen($dir)) !== $dir) + $message = $this->label("Unknown error."); + else { + $l = strlen($dir); + $dir = "$udir/"; + $udir = substr($udir, $l); + } + } + + if (!strlen($message)) { + if (!is_dir(path::normalize($dir))) + @mkdir(path::normalize($dir), $this->config['dirPerms'], true); + + $filename = $this->normalizeFilename($file['name']); + $target = file::getInexistantFilename($dir . $filename); + + if (!@move_uploaded_file($file['tmp_name'], $target) && + !@rename($file['tmp_name'], $target) && + !@copy($file['tmp_name'], $target) + ) + $message = $this->label("Cannot move uploaded file to target folder."); + else { + if (function_exists('chmod')) + @chmod($target, $this->config['filePerms']); + $this->makeThumb($target); + $url = $this->typeURL; + if (isset($udir)) $url .= "/$udir"; + $url .= "/" . basename($target); + if (preg_match('/^([a-z]+)\:\/\/([^\/^\:]+)(\:(\d+))?\/(.+)$/', $url, $patt)) { + list($unused, $protocol, $domain, $unused, $port, $path) = $patt; + $base = "$protocol://$domain" . (strlen($port) ? ":$port" : "") . "/"; + $url = $base . path::urlPathEncode($path); + } else + $url = path::urlPathEncode($url); + } + } + } + + if (strlen($message) && + isset($this->file['tmp_name']) && + file_exists($this->file['tmp_name']) + ) + @unlink($this->file['tmp_name']); + + if (strlen($message) && method_exists($this, 'errorMsg')) + $this->errorMsg($message); + else + $this->callBack($url, $message); + } + + protected function normalizeFilename($filename) { + + if (isset($this->config['filenameChangeChars']) && + is_array($this->config['filenameChangeChars']) + ) + $filename = strtr($filename, $this->config['filenameChangeChars']); + + if (isset($this->config['_normalizeFilenames']) && $this->config['_normalizeFilenames']) + $filename = file::normalizeFilename($filename); + + return $filename; + } + + protected function normalizeDirname($dirname) { + + if (isset($this->config['dirnameChangeChars']) && + is_array($this->config['dirnameChangeChars']) + ) + $dirname = strtr($dirname, $this->config['dirnameChangeChars']); + + if (isset($this->config['_normalizeFilenames']) && $this->config['_normalizeFilenames']) + $dirname = file::normalizeFilename($dirname); + + return $dirname; + } + + protected function checkFilePath($file) { + $rPath = realpath($file); + if (strtoupper(substr(PHP_OS, 0, 3)) == "WIN") + $rPath = str_replace("\\", "/", $rPath); + return (substr($rPath, 0, strlen($this->typeDir)) === $this->typeDir); + } + + protected function checkFilename($file) { + + if ((basename($file) !== $file) || + ( + isset($this->config['_normalizeFilenames']) && + $this->config['_normalizeFilenames'] && + preg_match('/[^0-9a-z\.\- _]/si', $file) + ) + ) + return false; + + return true; + } + + protected function checkUploadedFile(array $aFile=null) { + $config = &$this->config; + $file = ($aFile === null) ? $this->file : $aFile; + + if (!is_array($file) || !isset($file['name'])) + return $this->label("Unknown error"); + + if (is_array($file['name'])) { + foreach ($file['name'] as $i => $name) { + $return = $this->checkUploadedFile(array( + 'name' => $name, + 'tmp_name' => $file['tmp_name'][$i], + 'error' => $file['error'][$i] + )); + if ($return !== true) + return "$name: $return"; + } + return true; + } + + $extension = file::getExtension($file['name']); + $typePatt = strtolower(text::clearWhitespaces($this->types[$this->type])); + + // CHECK FOR UPLOAD ERRORS + if ($file['error']) + return + ($file['error'] == UPLOAD_ERR_INI_SIZE) ? + $this->label("The uploaded file exceeds {size} bytes.", + array('size' => ini_get('upload_max_filesize'))) : ( + ($file['error'] == UPLOAD_ERR_FORM_SIZE) ? + $this->label("The uploaded file exceeds {size} bytes.", + array('size' => $_GET['MAX_FILE_SIZE'])) : ( + ($file['error'] == UPLOAD_ERR_PARTIAL) ? + $this->label("The uploaded file was only partially uploaded.") : ( + ($file['error'] == UPLOAD_ERR_NO_FILE) ? + $this->label("No file was uploaded.") : ( + ($file['error'] == UPLOAD_ERR_NO_TMP_DIR) ? + $this->label("Missing a temporary folder.") : ( + ($file['error'] == UPLOAD_ERR_CANT_WRITE) ? + $this->label("Failed to write file.") : + $this->label("Unknown error.") + ))))); + + // HIDDEN FILENAMES CHECK + elseif (substr($file['name'], 0, 1) == ".") + return $this->label("File name shouldn't begins with '.'"); + + // EXTENSION CHECK + elseif ( + (substr($file['name'], -1) == ".") || + !$this->validateExtension($extension, $this->type) + ) + return $this->label("Denied file extension."); + + // SPECIAL DIRECTORY TYPES CHECK (e.g. *img) + elseif (preg_match('/^\*([^ ]+)(.*)?$/s', $typePatt, $patt)) { + list($typePatt, $type, $params) = $patt; + $class = __NAMESPACE__ . "\\type_$type"; + if (class_exists($class)) { + $type = new $class(); + $cfg = $config; + $cfg['filename'] = $file['name']; + if (strlen($params)) + $cfg['params'] = trim($params); + $response = $type->checkFile($file['tmp_name'], $cfg); + if ($response !== true) + return $this->label($response); + } else + return $this->label("Non-existing directory type."); + } + + // IMAGE RESIZE + $img = image::factory($this->imageDriver, $file['tmp_name']); + if (!$img->initError && !$this->imageResize($img, $file['tmp_name'])) + return $this->label("The image is too big and/or cannot be resized."); + + return true; + } + + protected function checkInputDir($dir, $inclType=true, $existing=true) { + $dir = path::normalize($dir); + if (substr($dir, 0, 1) == "/") + $dir = substr($dir, 1); + + if ((substr($dir, 0, 1) == ".") || (substr(basename($dir), 0, 1) == ".")) + return false; + + if ($inclType) { + $first = explode("/", $dir); + $first = $first[0]; + if ($first != $this->type) + return false; + $return = $this->removeTypeFromPath($dir); + } else { + $return = $dir; + $dir = "{$this->type}/$dir"; + } + + if (!$existing) + return $return; + + $path = "{$this->config['uploadDir']}/$dir"; + return (is_dir($path) && is_readable($path)) ? $return : false; + } + + protected function validateExtension($ext, $type) { + $ext = trim(strtolower($ext)); + if (!isset($this->types[$type])) + return false; + + $exts = strtolower(text::clearWhitespaces($this->config['deniedExts'])); + if (strlen($exts)) { + $exts = explode(" ", $exts); + if (in_array($ext, $exts)) + return false; + } + + $exts = trim($this->types[$type]); + if (!strlen($exts) || substr($exts, 0, 1) == "*") + return true; + + if (substr($exts, 0, 1) == "!") { + $exts = explode(" ", trim(strtolower(substr($exts, 1)))); + return !in_array($ext, $exts); + } + + $exts = explode(" ", trim(strtolower($exts))); + return in_array($ext, $exts); + } + + protected function getTypeFromPath($path) { + return preg_match('/^([^\/]*)\/.*$/', $path, $patt) + ? $patt[1] : $path; + } + + protected function removeTypeFromPath($path) { + return preg_match('/^[^\/]*\/(.*)$/', $path, $patt) + ? $patt[1] : ""; + } + + protected function imageResize($image, $file=null) { + + if (!($image instanceof image)) { + $img = image::factory($this->imageDriver, $image); + if ($img->initError) return false; + $file = $image; + } elseif ($file === null) + return false; + else + $img = $image; + + $orientation = 1; + if (function_exists("exif_read_data")) { + $orientation = @exif_read_data($file); + $orientation = isset($orientation['Orientation']) ? $orientation['Orientation'] : 1; + } + + // IMAGE WILL NOT BE RESIZED WHEN NO WATERMARK AND SIZE IS ACCEPTABLE + if (( + !isset($this->config['watermark']['file']) || + (!strlen(trim($this->config['watermark']['file']))) + ) && ( + ( + !$this->config['maxImageWidth'] && + !$this->config['maxImageHeight'] + ) || ( + ($img->width <= $this->config['maxImageWidth']) && + ($img->height <= $this->config['maxImageHeight']) + ) + ) && + ($orientation == 1) + ) + return true; + + // PROPORTIONAL RESIZE + if ((!$this->config['maxImageWidth'] || !$this->config['maxImageHeight'])) { + + if ($this->config['maxImageWidth'] && + ($this->config['maxImageWidth'] < $img->width) + ) { + $width = $this->config['maxImageWidth']; + $height = $img->getPropHeight($width); + + } elseif ( + $this->config['maxImageHeight'] && + ($this->config['maxImageHeight'] < $img->height) + ) { + $height = $this->config['maxImageHeight']; + $width = $img->getPropWidth($height); + } + + if (isset($width) && isset($height) && !$img->resize($width, $height)) + return false; + + // RESIZE TO FIT + } elseif ( + $this->config['maxImageWidth'] && $this->config['maxImageHeight'] && + !$img->resizeFit($this->config['maxImageWidth'], $this->config['maxImageHeight']) + ) + return false; + + // AUTO FLIP AND ROTATE FROM EXIF + if ((($orientation == 2) && !$img->flipHorizontal()) || + (($orientation == 3) && !$img->rotate(180)) || + (($orientation == 4) && !$img->flipVertical()) || + (($orientation == 5) && (!$img->flipVertical() || !$img->rotate(90))) || + (($orientation == 6) && !$img->rotate(90)) || + (($orientation == 7) && (!$img->flipHorizontal() || !$img->rotate(90))) || + (($orientation == 8) && !$img->rotate(270)) + ) + return false; + if (($orientation >= 2) && ($orientation <= 8) && ($this->imageDriver == "imagick")) + try { + $img->image->setImageProperty('exif:Orientation', "1"); + } catch (\Exception $e) {} + + // WATERMARK + if (isset($this->config['watermark']['file']) && + is_file($this->config['watermark']['file']) + ) { + $left = isset($this->config['watermark']['left']) + ? $this->config['watermark']['left'] : false; + $top = isset($this->config['watermark']['top']) + ? $this->config['watermark']['top'] : false; + $img->watermark($this->config['watermark']['file'], $left, $top); + } + + // WRITE TO FILE + return $img->output("jpeg", array( + 'file' => $file, + 'quality' => $this->config['jpegQuality'] + )); + } + + protected function makeThumb($file, $overwrite=true) { + $img = image::factory($this->imageDriver, $file); + + // Drop files which are not images + if ($img->initError) + return true; + + $fimg = new fastImage($file); + $type = $fimg->getType(); + $fimg->close(); + + if ($type === false) + return true; + + $thumb = substr($file, strlen($this->config['uploadDir'])); + $thumb = $this->config['uploadDir'] . "/" . $this->config['thumbsDir'] . "/" . $thumb; + $thumb = path::normalize($thumb); + $thumbDir = dirname($thumb); + if (!is_dir($thumbDir) && !@mkdir($thumbDir, $this->config['dirPerms'], true)) + return false; + + if (!$overwrite && is_file($thumb)) + return true; + + // Images with smaller resolutions than thumbnails + if (($img->width <= $this->config['thumbWidth']) && + ($img->height <= $this->config['thumbHeight']) + ) { + // Drop only browsable types + if (in_array($type, array("gif", "jpeg", "png"))) + return true; + + // Resize image + } elseif (!$img->resizeFit($this->config['thumbWidth'], $this->config['thumbHeight'])) + return false; + + // Save thumbnail + $options = array('file' => $thumb); + if ($type == "gif") + $type = "jpeg"; + if ($type == "jpeg") + $options['quality'] = $this->config['jpegQuality']; + return $img->output($type, $options); + } + + protected function localize($langCode) { + require "lang/{$langCode}.php"; + setlocale(LC_ALL, $lang['_locale']); + $this->charset = $lang['_charset']; + $this->dateTimeFull = $lang['_dateTimeFull']; + $this->dateTimeMid = $lang['_dateTimeMid']; + $this->dateTimeSmall = $lang['_dateTimeSmall']; + unset($lang['_locale']); + unset($lang['_charset']); + unset($lang['_dateTimeFull']); + unset($lang['_dateTimeMid']); + unset($lang['_dateTimeSmall']); + $this->labels = $lang; + } + + protected function label($string, array $data=null) { + $return = isset($this->labels[$string]) ? $this->labels[$string] : $string; + if (is_array($data)) + foreach ($data as $key => $val) + $return = str_replace("{{$key}}", $val, $return); + return $return; + } + + protected function backMsg($message, array $data=null) { + $message = $this->label($message, $data); + $tmp_name = isset($this->file['tmp_name']) ? $this->file['tmp_name'] : false; + + if ($tmp_name) { + $tmp_name = (is_array($tmp_name) && isset($tmp_name[0])) + ? $tmp_name[0] + : $tmp_name; + + if (file_exists($tmp_name)) + @unlink($tmp_name); + } + $this->callBack("", $message); + die; + } + + protected function callBack($url, $message="") { + $message = text::jsValue($message); + + if ((get_class($this) == "kcfinder\\browser") && ($this->action != "browser")) + return; + + if (isset($this->opener['name'])) { + $method = "callBack_{$this->opener['name']}"; + if (method_exists($this, $method)) + $js = $this->$method($url, $message); + } + + if (!isset($js)) + $js = $this->callBack_default($url, $message); + + header("Content-Type: text/html; charset={$this->charset}"); + echo "$js"; + } + + protected function callBack_ckeditor($url, $message) { + $CKfuncNum = isset($this->opener['CKEditor']['funcNum']) ? $this->opener['CKEditor']['funcNum'] : 0; + if (!$CKfuncNum) $CKfuncNum = 0; + return ""; + } + + protected function callBack_fckeditor($url, $message) { + $n = strlen($message) ? 1 : 0; + return ""; + } + + protected function callBack_tinymce($url, $message) { + return $this->callBack_default($url, $message); + } + + protected function callBack_tinymce4($url, $message) { + return $this->callBack_default($url, $message); + } + + protected function callBack_default($url, $message) { + return ""; + } + + protected function get_htaccess() { + return file_get_contents("conf/upload.htaccess"); + } +} + +?> diff --git a/additions/kcfinder/core/types/type_img.php b/additions/kcfinder/core/types/type_img.php new file mode 100644 index 0000000..378e59d --- /dev/null +++ b/additions/kcfinder/core/types/type_img.php @@ -0,0 +1,33 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class type_img { + + public function checkFile($file, array $config) { + + $driver = isset($config['imageDriversPriority']) + ? image::getDriver(explode(" ", $config['imageDriversPriority'])) : "gd"; + + $img = image::factory($driver, $file); + + if ($img->initError) + return "Unknown image format/encoding."; + + return true; + } +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/core/types/type_mime.php b/additions/kcfinder/core/types/type_mime.php new file mode 100644 index 0000000..96cc514 --- /dev/null +++ b/additions/kcfinder/core/types/type_mime.php @@ -0,0 +1,49 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class type_mime { + + public function checkFile($file, array $config) { + if (!class_exists("finfo")) + return "Fileinfo PECL extension is missing."; + + if (!isset($config['params'])) + return "Undefined MIME types."; + + $finfo = strlen($config['mime_magic']) + ? new \finfo(FILEINFO_MIME, $config['mime_magic']) + : new \finfo(FILEINFO_MIME); + if (!$finfo) + return "Opening fileinfo database failed."; + + $type = $finfo->file($file); + $type = substr($type, 0, strrpos($type, ";")); + + $mimes = $config['params']; + if (substr($mimes, 0, 1) == "!") { + $mimes = trim(substr($mimes, 1)); + return in_array($type , explode(" ", $mimes)) + ? "You can't upload such files." + : true; + } + + return !in_array($type , explode(" ", $mimes)) + ? "You can't upload such files." + : true; + } +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/css/000.base.css b/additions/kcfinder/css/000.base.css new file mode 100644 index 0000000..4476b0e --- /dev/null +++ b/additions/kcfinder/css/000.base.css @@ -0,0 +1,198 @@ +html, body { + overflow: hidden; +} + +body, form, th, td { + margin: 0; + padding: 0; +} + +a { + cursor: pointer; +} + +* { + font-family: Tahoma, Verdana, Arial, sans-serif; + font-size: 11px; +} + +table { + border-collapse: collapse; +} + +#left { + float: left; + display: block; + width: 25%; +} + +#right { + float: left; + display: block; + width: 75%; +} + +#settings { + display: none; + padding: 0; + float: left; + width: 100%; +} + +#settings > div { + float: left; +} + +#folders { + padding: 5px; + overflow: auto; +} + +#toolbar { + padding: 5px; +} + +#files { + padding: 5px; + overflow: auto; +} + +#status { + padding: 5px; + float: left; + overflow: hidden; +} + +#fileinfo { + float: left; +} + +#clipboard div { + width: 16px; + height: 16px; +} + +.folders { + margin-left: 16px; +} + +div.file { + overflow-x: hidden; + float: left; + text-align: center; + cursor: default; + white-space: nowrap; +} + +div.file .thumb { + background: no-repeat center center; +} + +#files table { + width: 100%; +} + +tr.file { + cursor: default; +} + +tr.file > td { + white-space: nowrap; +} + +tr.file > td.name { + background-repeat: no-repeat; + background-position: left center; + padding-left: 20px; + width: 100%; +} + +tr.file > td.time, +tr.file > td.size { + text-align: right; +} + +#toolbar { + cursor: default; + white-space: nowrap; +} + +#toolbar a { + padding-left: 20px; + text-decoration: none; + background: no-repeat left center; +} + +#toolbar a:hover, a[href="#upload"].uploadHover { + color: #000; +} + +#upload { + position: absolute; + overflow: hidden; + opacity: 0; + filter: alpha(opacity=0); +} +#upload input, #upload input::-webkit-file-upload-button { + cursor: pointer; +} + +span.brace { + padding-left: 11px; + cursor: default; +} + +span.brace.opened, span.brace.closed { + cursor: pointer; +} + +#menu, #clipboard { + position: absolute; + display: none; + z-index: 101; + cursor: default; +} + +#menu .box, #alert { + max-width: 350px; +} + +#clipboard { + z-index: 99; +} + +#loading { + display: none; + float: right; +} + +.menu { + background: #888; + white-space: nowrap; +} + +.menu a { + display: block; +} + +.menu .list { + max-height: 0; + overflow-y: auto; + overflow-x: hidden; + white-space: nowrap; +} + +#uploadResponse, +.file .access, +.file .hasThumb { + display: none; +} + +#resizer { + position: absolute; + z-index: 98; + top: 0; + background: #000; + opacity: 0; + filter: alpha(opacity=0); +} \ No newline at end of file diff --git a/additions/kcfinder/css/999.agent.css b/additions/kcfinder/css/999.agent.css new file mode 100644 index 0000000..935a33d --- /dev/null +++ b/additions/kcfinder/css/999.agent.css @@ -0,0 +1,10 @@ +body.mobile { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; +} + +body.firefox #files > div { + overflow: auto; + margin-bottom: 5px; +} \ No newline at end of file diff --git a/additions/kcfinder/css/index.php b/additions/kcfinder/css/index.php new file mode 100644 index 0000000..0347e40 --- /dev/null +++ b/additions/kcfinder/css/index.php @@ -0,0 +1,22 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +chdir(".."); +require "core/autoload.php"; +$min = new minifier("css"); +$min->minify("cache/base.css"); + +?> \ No newline at end of file diff --git a/additions/kcfinder/doc/.htaccess b/additions/kcfinder/doc/.htaccess new file mode 100644 index 0000000..d61b264 --- /dev/null +++ b/additions/kcfinder/doc/.htaccess @@ -0,0 +1,4 @@ + +Order allow,deny +Deny from all + diff --git a/additions/kcfinder/doc/Changelog b/additions/kcfinder/doc/Changelog new file mode 100644 index 0000000..528f367 --- /dev/null +++ b/additions/kcfinder/doc/Changelog @@ -0,0 +1,193 @@ +VERSION 3.12 - 2014-07-09 +------------------------- +* XSS security fix +* Performance fix +* taphold event added. Emulates right-click on touchscreen devices +* Click with Shift key functionality added +* Minor fixes + + +VERSION 3.11 - 2014-04-21 +------------------------- +* "Unknown error." fixes when using `_normalizeFilenames` setting + and upon new folder creation + + +VERSION 3.10 - 2014-04-16 +------------------------- +* Important secirity fixes + + +VERSION 3.0 - 2014-04-08 +------------------------ +* Minor fixes + + +VERSION 3.0-pre1 - 2014-04-02 +----------------------------- +* Now KCFinder requires PHP >= 5.3 becouse of using namespace: "kcfinder" +* Support CSS & JavaScript minifier (on the fly) +* jQuery UI & Uniform support. New theme & theme engine (old themes are not supported) +* Improvements in JavaScript code to be well compressed and faster +* Keep PNG transparency in generated thumbnails +* New image viewer + + +VERSION 2.54 - 2014-03-12 +------------------------- +* Performance fix only + + +VERSION 2.53 - 2014-02-22 +------------------------- +* Session start fix +* TinyMCE 4 support + + +VERSION 2.52 - 2014-01-20 +------------------------- +* Various image drivers support (gd, imagemagick, graphicsmagic) +* Auto-rotate images based on EXIF data +* PNG watermark support + + +VERSION 2.51 - 2010-08-25 +------------------------- +* Drag and drop uploading plugin - big fixes +* Cookies problem when using single words or IPs as hostname resolved +* Vietnamese localization + + +VERSION 2.5 - 2010-08-23 +------------------------ +* Drupal module support +* Drag and drop uploading plugin +* Two more language labels +* Localhost cookies bugfix +* Renaming current folder bugfix +* Small bugfixes + + +VERSION 2.41 - 2010-07-24 +------------------------- +* Directory types engine improvement +* New 'denyExtensionRename' config setting added + + +VERSION 2.4 - 2010-07-20 +------------------------ +* Online checking if new version is released in About box. To use this + feature you should to have Curl, HTTP or Socket extension, or + allow_url_fopen ini setting should be "on" +* New 'denyUpdateCheck' config setting added +* New 'dark' theme added (made by Dark Preacher) +* Additional 'theme' GET parameter to choose a theme from URL +* Thumbnails loading improvement +* Some changes in Oxygen CSS theme +* Replace alert() and confirm() JavaScript functions with good-looking boxes +* Safari 3 right-click fix +* Small bugfixes + + +VERSION 2.32 - 2010-07-11 +------------------------- +* 'filenameChangeChars' and 'dirnameChangeChars' config settings added +* Content-Type header fix for css.php, js_localize.php and + js/browser/joiner.php +* CKEditorFuncNum with index 0 bugfix +* Session save handler example in core/autoload.php + + +VERSION 2.31 - 2010-07-01 +------------------------- +* Proportional uploaded image resize bugfix +* Slideshow bugfixes +* Other small bugfixes + + +VERSION 2.3 - 2010-06-25 +------------------------ +* Replace XML Ajax responses with JSON +* Replace old 'readonly' config option with advanced 'access' option + PLEASE UPDATE YOUR OLD CONFIG FILE!!! +* Slideshow images in current folder using arrow keys +* Multipe files upload similar to Facebook upload (not works in IE!) +* Option to set protocol, domain and port in 'uploadURL' setting +* Bugfixes + + +VERSION 2.21 - 2010-11-19 +------------------------- +* Bugfixes only + + +VERSION 2.2 - 2010-07-27 +------------------------ +* Many bugfixes +* Read-only config option + + +VERSION 2.1 - 2010-07-04 +------------------------ +* Endless JavaScript loop on KCFinder disable bugfix +* New config setting whether to generate .htaccess file in upload folder +* Upload to specified folder from CKEditor & FCKeditor direct upload dialog +* Select multiple files bugfixes + + +VERSION 2.0 - 2010-07-01 +------------------------ +* Brand new core +* Option to resize files/folders panels with mouse drag +* Select multiple files with Ctrl key +* Return list of files to custom integrating application +* Animated folder tree +* Directory Type specific configuration settings +* Download multiple files or a folder as ZIP file + + +VERSION 1.7 - 2010-06-17 +------------------------ +* Maximize toolbar button +* Clipboard for copying and moving multiple files +* Show warning if the browser is not capable to display KCFinder +* Google Chrome Frame support for old versions of Internet Explorer + + +VERSION 1.6 - 2010-06-02 +------------------------ +* Support of Windows Apache server +* Support of Fileinfo PHP extension to detect mime types (*mime directory type) +* Option to deny globaly some dangerous extensions like exe, php, pl, cgi etc +* Check for denied file extension on file rename +* Disallow to upload hidden files (with names begins with .) +* Missing last character of filenames without extension bugfix +* Some small bugfixes + + +VERSION 1.5 - 2010-05-30 +------------------------ +* Filenames with spaces download bugfix +* FCKEditor direct upload bugfix +* Thumbnail generation bugfixes + + +VERSION 1.4 - 2010-05-24 +------------------------ +* Client-side caching bugfix +* Custom integrations - window.KCFinder.callBack() +* Security fixes + + +VERSION 1.3 - 2010-05-06 +------------------------ +* Another session bugfix. Now session configuratin works! +* Show filename by default bugfix +* Loading box on top right corner + + +VERSION 1.2 - 2010-05-03 +------------------------ +* Thumbnail generation bugfix +* Session bugfix +* other small bugfixes diff --git a/additions/kcfinder/doc/LICENSE.GPL b/additions/kcfinder/doc/LICENSE.GPL new file mode 100644 index 0000000..20d40b6 --- /dev/null +++ b/additions/kcfinder/doc/LICENSE.GPL @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/additions/kcfinder/doc/LICENSE.LGPL b/additions/kcfinder/doc/LICENSE.LGPL new file mode 100644 index 0000000..02bbb60 --- /dev/null +++ b/additions/kcfinder/doc/LICENSE.LGPL @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/additions/kcfinder/favicon.ico b/additions/kcfinder/favicon.ico new file mode 100644 index 0000000..e40e047 Binary files /dev/null and b/additions/kcfinder/favicon.ico differ diff --git a/additions/kcfinder/index.php b/additions/kcfinder/index.php new file mode 100644 index 0000000..6d49d5f --- /dev/null +++ b/additions/kcfinder/index.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/additions/kcfinder/integration/.htaccess b/additions/kcfinder/integration/.htaccess new file mode 100644 index 0000000..d61b264 --- /dev/null +++ b/additions/kcfinder/integration/.htaccess @@ -0,0 +1,4 @@ + +Order allow,deny +Deny from all + diff --git a/additions/kcfinder/integration/BolmerCMS.php b/additions/kcfinder/integration/BolmerCMS.php new file mode 100644 index 0000000..8281a96 --- /dev/null +++ b/additions/kcfinder/integration/BolmerCMS.php @@ -0,0 +1,43 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ +class BolmerCMS{ + protected static $authenticated = false; + static function checkAuth() { + $current_cwd = getcwd(); + if ( ! self::$authenticated) { + define('BOLMER_API_MODE', true); + define('IN_MANAGER_MODE', true); + $init = realpath(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__))))))."/index.php"); + include_once($init); + $type = getService('user', true)->getLoginUserType(); + if($type=='manager'){ + self::$authenticated = true; + if (!isset($_SESSION['KCFINDER'])) { + $_SESSION['KCFINDER'] = array(); + } + if(!isset($_SESSION['KCFINDER']['disabled'])) { + $_SESSION['KCFINDER']['disabled'] = false; + } + $_SESSION['KCFINDER']['_check4htaccess'] = false; + $_SESSION['KCFINDER']['uploadURL'] = '/assets/'; + $_SESSION['KCFINDER']['uploadDir'] = BOLMER_BASE_PATH.'assets/'; + $_SESSION['KCFINDER']['theme'] = 'default'; + } + } + + chdir($current_cwd); + return self::$authenticated; + } +} +\kcfinder\cms\BolmerCMS::checkAuth(); \ No newline at end of file diff --git a/additions/kcfinder/integration/drupal.php b/additions/kcfinder/integration/drupal.php new file mode 100644 index 0000000..e0c5577 --- /dev/null +++ b/additions/kcfinder/integration/drupal.php @@ -0,0 +1,113 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +// gets a valid drupal_path +function get_drupal_path() { + if (!empty($_SERVER['SCRIPT_FILENAME'])) { + $drupal_path = dirname(dirname(dirname(dirname($_SERVER['SCRIPT_FILENAME'])))); + if (!file_exists($drupal_path . '/includes/bootstrap.inc')) { + $drupal_path = dirname(dirname(dirname($_SERVER['SCRIPT_FILENAME']))); + $depth = 2; + do { + $drupal_path = dirname($drupal_path); + $depth++; + } while (!($bootstrap_file_found = file_exists($drupal_path . '/includes/bootstrap.inc')) && $depth < 10); + } + } + + if (!isset($bootstrap_file_found) || !$bootstrap_file_found) { + $drupal_path = '../../../../..'; + if (!file_exists($drupal_path . '/includes/bootstrap.inc')) { + $drupal_path = '../..'; + do { + $drupal_path .= '/..'; + $depth = substr_count($drupal_path, '..'); + } while (!($bootstrap_file_found = file_exists($drupal_path . '/includes/bootstrap.inc')) && $depth < 10); + } + } + return $drupal_path; +} + +function CheckAuthentication($drupal_path) { + + static $authenticated; + + if (!isset($authenticated)) { + + if (!isset($bootstrap_file_found) || $bootstrap_file_found) { + $current_cwd = getcwd(); + if (!defined('DRUPAL_ROOT')){ + define('DRUPAL_ROOT', $drupal_path); + } + + // Simulate being in the drupal root folder so we can share the session + chdir(DRUPAL_ROOT); + + global $base_url; + $base_root = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http'; + $base_url = $base_root .= '://'. preg_replace('/[^a-z0-9-:._]/i', '', $_SERVER['HTTP_HOST']); + + if ($dir = trim(dirname($_SERVER['SCRIPT_NAME']), '\,/')) { + $base_path = "/$dir"; + $base_url .= $base_path; + } + + // correct base_url so it points to Drupal root + $pos = strpos($base_url, '/sites/'); + $base_url = substr($base_url, 0, $pos); // drupal root absolute url + + // If we aren't in a Drupal installation, or if Drupal path hasn't been properly found, die + if(!file_exists(DRUPAL_ROOT . '/includes/bootstrap.inc')) { + die("The CMS integration service for -drupal- requires KCFinder to be properly placed inside your Drupal installation."); + } + + + // bootstrap + require_once(DRUPAL_ROOT . '/includes/bootstrap.inc'); + drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); + + // if user has access permission... + if (user_access('access kcfinder')) { + if (!isset($_SESSION['KCFINDER'])) { + $_SESSION['KCFINDER'] = array(); + $_SESSION['KCFINDER']['disabled'] = false; + } + + // User has permission, so make sure KCFinder is not disabled! + if(!isset($_SESSION['KCFINDER']['disabled'])) { + $_SESSION['KCFINDER']['disabled'] = false; + } + + global $user; + $_SESSION['KCFINDER']['uploadURL'] = strtr(variable_get('kcfinder_upload_url', 'sites/default/files/kcfinder'), array('%u' => $user->uid, '%n' => $user->name)); + $_SESSION['KCFINDER']['uploadDir'] = strtr(variable_get('kcfinder_upload_dir', ''), array('%u' => $user->uid, '%n' => $user->name)); + $_SESSION['KCFINDER']['theme'] = variable_get('kcfinder_theme', 'oxygen'); + + //echo '
      uploadURL: ' . $_SESSION['KCFINDER']['uploadURL']
      ; + //echo '
      uploadDir: ' . $_SESSION['KCFINDER']['uploadDir']
      ; + + chdir($current_cwd); + + return true; + } + + chdir($current_cwd); + return false; + } + } +} + +CheckAuthentication(get_drupal_path()); + +?> \ No newline at end of file diff --git a/additions/kcfinder/js/000._jquery.js b/additions/kcfinder/js/000._jquery.js new file mode 100644 index 0000000..046e93a --- /dev/null +++ b/additions/kcfinder/js/000._jquery.js @@ -0,0 +1,4 @@ +/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
      ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f +}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML="
      a",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/\s*$/g,sb={option:[1,""],legend:[1,"
      ","
      "],area:[1,"",""],param:[1,"",""],thead:[1,"","
      "],tr:[2,"","
      "],col:[2,"","
      "],td:[3,"","
      "],_default:l.htmlSerialize?[0,"",""]:[1,"X
      ","
      "]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?""!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("').prependTo(document.body); + $('#loading').html(_.label("Uploading file...")).show(); + form.submit(); + $('#uploadResponse').load(function() { + var response = $(this).contents().find('body').text(); + $('#loading').hide(); + response = response.split("\n"); + + var selected = [], errors = []; + $.each(response, function(i, row) { + if (row.substr(0, 1) == "/") + selected[selected.length] = row.substr(1, row.length - 1); + else + errors[errors.length] = row; + }); + if (errors.length) { + errors = errors.join("\n"); + if (errors.replace(/^\s+/g, "").replace(/\s+$/g, "").length) + _.alert(errors); + } + if (!selected.length) + selected = null; + _.refresh(selected); + $('#upload').detach(); + setTimeout(function() { + $('#uploadResponse').detach(); + }, 1); + _.initUploadButton(); + }); +}; + +_.maximize = function(button) { + + // TINYMCE 3 + if (_.opener.name == "tinymce") { + + var par = window.parent.document, + ifr = $('iframe[src*="browse.php?opener=tinymce&"]', par), + id = parseInt(ifr.attr('id').replace(/^mce_(\d+)_ifr$/, "$1")), + win = $('#mce_' + id, par); + + if ($(button).hasClass('selected')) { + $(button).removeClass('selected'); + win.css({ + left: _.maximizeMCE.left, + top: _.maximizeMCE.top, + width: _.maximizeMCE.width, + height: _.maximizeMCE.height + }); + ifr.css({ + width: _.maximizeMCE.width - _.maximizeMCE.Hspace, + height: _.maximizeMCE.height - _.maximizeMCE.Vspace + }); + + } else { + $(button).addClass('selected') + _.maximizeMCE = { + width: parseInt(win.css('width')), + height: parseInt(win.css('height')), + left: win.position().left, + top: win.position().top, + Hspace: parseInt(win.css('width')) - parseInt(ifr.css('width')), + Vspace: parseInt(win.css('height')) - parseInt(ifr.css('height')) + }; + var width = $(window.top).width(), + height = $(window.top).height(); + win.css({ + left: $(window.parent).scrollLeft(), + top: $(window.parent).scrollTop(), + width: width, + height: height + }); + ifr.css({ + width: width - _.maximizeMCE.Hspace, + height: height - _.maximizeMCE.Vspace + }); + } + + // TINYMCE 4 + } else if (_.opener.name == "tinymce4") { + + var par = window.parent.document, + ifr = $('iframe[src*="browse.php?opener=tinymce4&"]', par).parent(), + win = ifr.parent(); + + if ($(button).hasClass('selected')) { + $(button).removeClass('selected'); + + win.css({ + left: _.maximizeMCE4.left, + top: _.maximizeMCE4.top, + width: _.maximizeMCE4.width, + height: _.maximizeMCE4.height + }); + + ifr.css({ + width: _.maximizeMCE4.width, + height: _.maximizeMCE4.height - _.maximizeMCE4.Vspace + }); + + } else { + $(button).addClass('selected'); + + _.maximizeMCE4 = { + width: parseInt(win.css('width')), + height: parseInt(win.css('height')), + left: win.position().left, + top: win.position().top, + Vspace: win.outerHeight(true) - ifr.outerHeight(true) - 1 + }; + + var width = $(window.top).width(), + height = $(window.top).height(); + + win.css({ + left: 0, + top: 0, + width: width, + height: height + }); + + ifr.css({ + width: width, + height: height - _.maximizeMCE4.Vspace + }); + } + + // PUPUP WINDOW + } else if (window.opener) { + window.moveTo(0, 0); + width = screen.availWidth; + height = screen.availHeight; + if ($.agent.opera) + height -= 50; + window.resizeTo(width, height); + + } else { + if (window.parent) { + var el = null; + $(window.parent.document).find('iframe').each(function() { + if (this.src.replace('/?', '?') == window.location.href.replace('/?', '?')) { + el = this; + return false; + } + }); + + // IFRAME + if (el !== null) + $(el).toggleFullscreen(window.parent.document); + + // SELF WINDOW + else + $('body').toggleFullscreen(); + + } else + $('body').toggleFullscreen(); + } +}; + +_.refresh = function(selected) { + _.fadeFiles(); + $.ajax({ + type: "post", + dataType: "json", + url: _.getURL("chDir"), + data: {dir: _.dir}, + async: false, + success: function(data) { + if (_.check4errors(data)) { + $('#files > div').css({opacity: "", filter: ""}); + return; + } + _.dirWritable = data.dirWritable; + _.files = data.files ? data.files : []; + _.orderFiles(null, selected); + _.statusDir(); + }, + error: function() { + $('#files > div').css({opacity: "", filter: ""}); + $('#files').html(_.label("Unknown error.")); + } + }); +}; diff --git a/additions/kcfinder/js/070.settings.js b/additions/kcfinder/js/070.settings.js new file mode 100644 index 0000000..ce52b74 --- /dev/null +++ b/additions/kcfinder/js/070.settings.js @@ -0,0 +1,86 @@ +/** This file is part of KCFinder project + * + * @desc Settings panel functionality + * @package KCFinder + * @version 3.12 + * @author Pavel Tzonkov + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +_.initSettings = function() { + $('#settings').disableTextSelect(); + $('#settings fieldset, #settings input, #settings label').uniform(); + + if (!_.shows.length) + $('#show input[type="checkbox"]').each(function(i) { + _.shows[i] = this.name; + }); + + var shows = _.shows; + + if (!$.$.kuki.isSet('showname')) { + $.$.kuki.set('showname', "on"); + $.each(shows, function (i, val) { + if (val != "name") $.$.kuki.set('show' + val, "off"); + }); + } + + $('#show input[type="checkbox"]').click(function() { + $.$.kuki.set('show' + this.name, this.checked ? "on" : "off") + $('#files .file div.' + this.name).css('display', this.checked ? "block" : "none"); + }); + + $.each(shows, function(i, val) { + $('#show input[name="' + val + '"]').get(0).checked = ($.$.kuki.get('show' + val) == "on") ? "checked" : ""; + }); + + if (!_.orders.length) + $('#order input[type="radio"]').each(function(i) { + _.orders[i] = this.value; + }) + + var orders = _.orders; + + if (!$.$.kuki.isSet('order')) + $.$.kuki.set('order', "name"); + + if (!$.$.kuki.isSet('orderDesc')) + $.$.kuki.set('orderDesc', "off"); + + $('#order input[value="' + $.$.kuki.get('order') + '"]').get(0).checked = true; + $('#order input[name="desc"]').get(0).checked = ($.$.kuki.get('orderDesc') == "on"); + + $('#order input[type="radio"]').click(function() { + $.$.kuki.set('order', this.value); + _.orderFiles(); + }); + + $('#order input[name="desc"]').click(function() { + $.$.kuki.set('orderDesc', this.checked ? 'on' : "off"); + _.orderFiles(); + }); + + if (!$.$.kuki.isSet('view')) + $.$.kuki.set('view', "thumbs"); + + if ($.$.kuki.get('view') == "list") + $('#show').parent().hide(); + + $('#view input[value="' + $.$.kuki.get('view') + '"]').get(0).checked = true; + + $('#view input').click(function() { + var view = this.value; + if ($.$.kuki.get('view') != view) { + $.$.kuki.set('view', view); + if (view == "list") + $('#show').parent().hide(); + else + $('#show').parent().show(); + } + _.fixFilesHeight(); + _.refresh(); + }); +}; diff --git a/additions/kcfinder/js/080.files.js b/additions/kcfinder/js/080.files.js new file mode 100644 index 0000000..610c4ad --- /dev/null +++ b/additions/kcfinder/js/080.files.js @@ -0,0 +1,248 @@ +/** This file is part of KCFinder project + * + * @desc File related functionality + * @package KCFinder + * @version 3.12 + * @author Pavel Tzonkov + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +_.initFiles = function() { + $(document).unbind('keydown').keydown(function(e) { + return !_.selectAll(e); + }); + $('#files').unbind().scroll(function() { + _.menu.hide(); + }).disableTextSelect(); + + $('.file').unbind().click(function(e) { + _.selectFile($(this), e); + + }).rightClick(function(el, e) { + _.menuFile($(el), e); + }).dblclick(function() { + _.returnFile($(this)); + }); + + if ($.mobile) + $('.file').on('taphold', function() { + _.menuFile($(this), { + pageX: $(this).offset().left, + pageY: $(this).offset().top + $(this).outerHeight() + }); + }); + + $.each(_.shows, function(i, val) { + $('#files .file div.' + val).css('display', ($.$.kuki.get('show' + val) == "off") ? "none" : "block"); + }); + _.statusDir(); +}; + +_.showFiles = function(callBack, selected) { + _.fadeFiles(); + setTimeout(function() { + var c = $('
      '); + + $.each(_.files, function(i, file) { + var f, icon, + stamp = file.size + "|" + file.mtime; + + // List + if ($.$.kuki.get('view') == "list") { + if (!i) c.html('
      '); + + icon = $.$.getFileExtension(file.name); + if (file.thumb) + icon = ".image"; + else if (!icon.length || !file.smallIcon) + icon = "."; + icon = "themes/" + _.theme + "/img/files/small/" + icon + ".png"; + + f = $(''); + f.appendTo(c.find('table')); + + // Thumbnails + } else { + if (file.thumb) + icon = _.getURL('thumb') + "&file=" + encodeURIComponent(file.name) + "&dir=" + encodeURIComponent(_.dir) + "&stamp=" + stamp; + else if (file.smallThumb) { + icon = _.uploadURL + "/" + _.dir + "/" + encodeURIComponent(file.name); + icon = $.$.escapeDirs(icon).replace(/\'/g, "%27"); + } else { + icon = file.bigIcon ? $.$.getFileExtension(file.name) : "."; + if (!icon.length) icon = "."; + icon = "themes/" + _.theme + "/img/files/big/" + icon + ".png"; + } + f = $('
      '); + f.appendTo(c); + } + + f.find('.thumb').css({backgroundImage: 'url("' + icon + '")'}); + f.find('.name').html($.$.htmlData(file.name)); + f.find('.time').html(file.date); + f.find('.size').html(_.humanSize(file.size)); + f.data(file); + + if ((file.name === selected) || $.$.inArray(file.name, selected)) + f.addClass('selected'); + }); + + c.css({opacity:'', filter:''}); + $('#files').html(c); + + if (callBack) callBack(); + _.initFiles(); + }, 200); +}; + +_.selectFile = function(file, e) { + + // Click with Ctrl, Meta or Shift key + if (e.ctrlKey || e.metaKey || e.shiftKey) { + + // Click with Shift key + if (e.shiftKey && !file.hasClass('selected')) { + var f = file.prev(); + while (f.get(0) && !f.hasClass('selected')) { + f.addClass('selected'); + f = f.prev(); + } + } + + file.toggleClass('selected'); + + // Update statusbar + var files = $('.file.selected').get(), + size = 0, data; + if (!files.length) + _.statusDir(); + else { + $.each(files, function(i, cfile) { + size += $(cfile).data('size'); + }); + size = _.humanSize(size); + if (files.length > 1) + $('#fileinfo').html(files.length + " " + _.label("selected files") + " (" + size + ")"); + else { + data = $(files[0]).data(); + $('#fileinfo').html($.$.htmlData(data.name) + " (" + _.humanSize(data.size) + ", " + data.date + ")"); + } + } + + // Normal click + } else { + data = file.data(); + $('.file').removeClass('selected'); + file.addClass('selected'); + $('#fileinfo').html($.$.htmlData(data.name) + " (" + _.humanSize(data.size) + ", " + data.date + ")"); + } +}; + +_.selectAll = function(e) { + if ((!e.ctrlKey && !e.metaKey) || ((e.keyCode != 65) && (e.keyCode != 97))) // Ctrl-A + return false; + + var files = $('.file'), + size = 0; + + if (files.length) { + + files.addClass('selected').each(function() { + size += $(this).data('size'); + }); + + $('#fileinfo').html(files.length + " " + _.label("selected files") + " (" + _.humanSize(size) + ")"); + } + + return true; +}; + +_.returnFile = function(file) { + + var button, win, fileURL = file.substr + ? file : _.uploadURL + "/" + _.dir + "/" + file.data('name'); + fileURL = $.$.escapeDirs(fileURL); + + if (_.opener.name == "ckeditor") { + _.opener.CKEditor.object.tools.callFunction(_.opener.CKEditor.funcNum, fileURL, ""); + window.close(); + + } else if (_.opener.name == "fckeditor") { + window.opener.SetUrl(fileURL) ; + window.close() ; + + } else if (_.opener.name == "tinymce") { + win = tinyMCEPopup.getWindowArg('window'); + win.document.getElementById(tinyMCEPopup.getWindowArg('input')).value = fileURL; + if (win.getImageData) win.getImageData(); + if (typeof(win.ImageDialog) != "undefined") { + if (win.ImageDialog.getImageData) + win.ImageDialog.getImageData(); + if (win.ImageDialog.showPreviewImage) + win.ImageDialog.showPreviewImage(fileURL); + } + tinyMCEPopup.close(); + + } else if (_.opener.name == "tinymce4") { + win = (window.opener ? window.opener : window.parent); + $(win.document).find('#' + _.opener.TinyMCE.field).val(fileURL); + win.tinyMCE.activeEditor.windowManager.close(); + + } else if (_.opener.callBack) { + + if (window.opener && window.opener.KCFinder) { + _.opener.callBack(fileURL); + window.close(); + } + + if (window.parent && window.parent.KCFinder) { + button = $('#toolbar a[href="kcact:maximize"]'); + if (button.hasClass('selected')) + _.maximize(button); + _.opener.callBack(fileURL); + } + + } else if (_.opener.callBackMultiple) { + if (window.opener && window.opener.KCFinder) { + _.opener.callBackMultiple([fileURL]); + window.close(); + } + + if (window.parent && window.parent.KCFinder) { + button = $('#toolbar a[href="kcact:maximize"]'); + if (button.hasClass('selected')) + _.maximize(button); + _.opener.callBackMultiple([fileURL]); + } + + } +}; + +_.returnFiles = function(files) { + if (_.opener.callBackMultiple && files.length) { + var rfiles = []; + $.each(files, function(i, file) { + rfiles[i] = _.uploadURL + "/" + _.dir + "/" + $(file).data('name'); + rfiles[i] = $.$.escapeDirs(rfiles[i]); + }); + _.opener.callBackMultiple(rfiles); + if (window.opener) window.close() + } +}; + +_.returnThumbnails = function(files) { + if (_.opener.callBackMultiple) { + var rfiles = [], j = 0; + $.each(files, function(i, file) { + if ($(file).data('thumb')) { + rfiles[j] = _.thumbsURL + "/" + _.dir + "/" + $(file).data('name'); + rfiles[j] = $.$.escapeDirs(rfiles[j++]); + } + }); + _.opener.callBackMultiple(rfiles); + if (window.opener) window.close() + } +}; diff --git a/additions/kcfinder/js/090.folders.js b/additions/kcfinder/js/090.folders.js new file mode 100644 index 0000000..3ee2146 --- /dev/null +++ b/additions/kcfinder/js/090.folders.js @@ -0,0 +1,184 @@ +/** This file is part of KCFinder project + * + * @desc Folder related functionality + * @package KCFinder + * @version 3.12 + * @author Pavel Tzonkov + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +_.initFolders = function() { + $('#folders').scroll(function() { + _.menu.hide(); + }).disableTextSelect(); + $('div.folder > a').unbind().click(function() { + _.menu.hide(); + return false; + }); + $('div.folder > a > span.brace').unbind().click(function() { + if ($(this).hasClass('opened') || $(this).hasClass('closed')) + _.expandDir($(this).parent()); + }); + $('div.folder > a > span.folder').unbind().click(function() { + _.changeDir($(this).parent()); + }).rightClick(function(el, e) { + _.menuDir($(el).parent(), e); + }); + if ($.mobile) { + $('div.folder > a > span.folder').on('taphold', function() { + _.menuDir($(this).parent(), { + pageX: $(this).offset().left + 1, + pageY: $(this).offset().top + $(this).outerHeight() + }); + }); + } +}; + +_.setTreeData = function(data, path) { + if (!path) + path = ""; + else if (path.length && (path.substr(path.length - 1, 1) != '/')) + path += "/"; + path += data.name; + var selector = '#folders a[href="kcdir:/' + $.$.escapeDirs(path) + '"]'; + $(selector).data({ + name: data.name, + path: path, + readable: data.readable, + writable: data.writable, + removable: data.removable, + hasDirs: data.hasDirs + }); + $(selector + ' span.folder').addClass(data.current ? 'current' : 'regular'); + if (data.dirs && data.dirs.length) { + $(selector + ' span.brace').addClass('opened'); + $.each(data.dirs, function(i, cdir) { + _.setTreeData(cdir, path + "/"); + }); + } else if (data.hasDirs) + $(selector + ' span.brace').addClass('closed'); +}; + +_.buildTree = function(root, path) { + if (!path) path = ""; + path += root.name; + var cdir, html = '
       ' + $.$.htmlData(root.name) + ''; + if (root.dirs) { + html += '
      '; + for (var i = 0; i < root.dirs.length; i++) { + cdir = root.dirs[i]; + html += _.buildTree(cdir, path + "/"); + } + html += '
      '; + } + html += '
      '; + return html; +}; + +_.expandDir = function(dir) { + var path = dir.data('path'); + if (dir.children('.brace').hasClass('opened')) { + dir.parent().children('.folders').hide(500, function() { + if (path == _.dir.substr(0, path.length)) + _.changeDir(dir); + }); + dir.children('.brace').removeClass('opened').addClass('closed'); + } else { + if (dir.parent().children('.folders').get(0)) { + dir.parent().children('.folders').show(500); + dir.children('.brace').removeClass('closed').addClass('opened'); + } else if (!$('#loadingDirs').get(0)) { + dir.parent().append('
      ' + _.label("Loading folders...") + '
      '); + $('#loadingDirs').hide().show(200, function() { + $.ajax({ + type: "post", + dataType: "json", + url: _.getURL("expand"), + data: {dir: path}, + async: false, + success: function(data) { + $('#loadingDirs').hide(200, function() { + $('#loadingDirs').detach(); + }); + if (_.check4errors(data)) + return; + + var html = ""; + $.each(data.dirs, function(i, cdir) { + html += ''; + }); + if (html.length) { + dir.parent().append('
      ' + html + '
      '); + var folders = $(dir.parent().children('.folders').first()); + folders.hide(); + $(folders).show(500); + $.each(data.dirs, function(i, cdir) { + _.setTreeData(cdir, path); + }); + } + if (data.dirs.length) + dir.children('.brace').removeClass('closed').addClass('opened'); + else + dir.children('.brace').removeClass('opened closed'); + _.initFolders(); + _.initDropUpload(); + }, + error: function() { + $('#loadingDirs').detach(); + _.alert(_.label("Unknown error.")); + } + }); + }); + } + } +}; + +_.changeDir = function(dir) { + if (dir.children('span.folder').hasClass('regular')) { + $('div.folder > a > span.folder').removeClass('current regular').addClass('regular'); + dir.children('span.folder').removeClass('regular').addClass('current'); + $('#files').html(_.label("Loading files...")); + $.ajax({ + type: "post", + dataType: "json", + url: _.getURL("chDir"), + data: {dir: dir.data('path')}, + async: false, + success: function(data) { + if (_.check4errors(data)) + return; + _.files = data.files; + _.orderFiles(); + _.dir = dir.data('path'); + _.dirWritable = data.dirWritable; + _.setTitle("KCFinder: /" + _.dir); + _.statusDir(); + }, + error: function() { + $('#files').html(_.label("Unknown error.")); + } + }); + } +}; + +_.statusDir = function() { + var i = 0, size = 0; + for (; i < _.files.length; i++) + size += _.files[i].size; + size = _.humanSize(size); + $('#fileinfo').html(_.files.length + " " + _.label("files") + " (" + size + ")"); +}; + +_.refreshDir = function(dir) { + var path = dir.data('path'); + if (dir.children('.brace').hasClass('opened') || dir.children('.brace').hasClass('closed')) + dir.children('.brace').removeClass('opened').addClass('closed'); + dir.parent().children('.folders').first().detach(); + if (path == _.dir.substr(0, path.length)) + _.changeDir(dir); + _.expandDir(dir); + return true; +}; diff --git a/additions/kcfinder/js/091.menus.js b/additions/kcfinder/js/091.menus.js new file mode 100644 index 0000000..d587abd --- /dev/null +++ b/additions/kcfinder/js/091.menus.js @@ -0,0 +1,589 @@ +/** This file is part of KCFinder project + * + * @desc Context menus + * @package KCFinder + * @version 3.12 + * @author Pavel Tzonkov + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +_.menu = { + + init: function() { + $('#menu').html("
        ").css('display', 'none'); + }, + + addItem: function(href, label, callback, denied) { + if (typeof denied == "undefined") + denied = false; + + $('#menu ul').append('
      • ' + label + '
      • '); + + if (!denied && $.isFunction(callback)) + $('#menu a[href="' + href + '"]').click(function() { + _.menu.hide(); + return callback(); + }); + }, + + addDivider: function() { + if ($('#menu ul').html().length) + $('#menu ul').append("
      • -
      • "); + }, + + show: function(e) { + var dlg = $('#menu'), + ul = $('#menu ul'); + if (ul.html().length) { + dlg.find('ul').first().menu(); + if (typeof e != "undefined") { + var left = e.pageX, + top = e.pageY, + win = $(window); + + if ((dlg.outerWidth() + left) > win.width()) + left = win.width() - dlg.outerWidth(); + + if ((dlg.outerHeight() + top) > win.height()) + top = win.height() - dlg.outerHeight(); + + dlg.hide().css({ + left: left, + top: top, + width: "" + }).fadeIn('fast'); + } else + dlg.fadeIn('fast'); + } else + ul.detach(); + }, + + hide: function() { + $('#clipboard').removeClass('selected'); + $('div.folder > a > span.folder').removeClass('context'); + $('#menu').hide().css('width', "").html("").data('title', null).unbind().click(function() { + return false; + }); + $(document).unbind('keydown').keydown(function(e) { + return !_.selectAll(e); + }); + } +}; + +// FILE CONTEXT MENU +_.menuFile = function(file, e) { + _.menu.init(); + + var data = file.data(), + files = $('.file.selected').get(); + + // MULTIPLE FILES MENU + if (file.hasClass('selected') && files.length && (files.length > 1)) { + var thumb = false, + notWritable = 0, + cdata; + + $.each(files, function(i, cfile) { + cdata = $(cfile).data(); + if (cdata.thumb) thumb = true; + if (!data.writable) notWritable++; + }); + + if (_.opener.callBackMultiple) { + + // SELECT FILES + _.menu.addItem("kcact:pick", _.label("Select"), function() { + _.returnFiles(files); + return false; + }); + + // SELECT THUMBNAILS + if (thumb) + _.menu.addItem("kcact:pick_thumb", _.label("Select Thumbnails"), function() { + _.returnThumbnails(files); + return false; + }); + } + + if (data.thumb || data.smallThumb || _.support.zip) { + + _.menu.addDivider(); + + // VIEW IMAGE + if (data.thumb || data.smallThumb) + _.menu.addItem("kcact:view", _.label("View"), function() { + _.viewImage(data); + }); + + // DOWNLOAD + if (_.support.zip) + _.menu.addItem("kcact:download", _.label("Download"), function() { + var pfiles = []; + $.each(files, function(i, cfile) { + pfiles[i] = $(cfile).data('name'); + }); + _.post(_.getURL('downloadSelected'), {dir:_.dir, files:pfiles}); + return false; + }); + } + + // ADD TO CLIPBOARD + if (_.access.files.copy || _.access.files.move) { + _.menu.addDivider(); + _.menu.addItem("kcact:clpbrdadd", _.label("Add to Clipboard"), function() { + var msg = ''; + $.each(files, function(i, cfile) { + var cdata = $(cfile).data(), + failed = false; + for (i = 0; i < _.clipboard.length; i++) + if ((_.clipboard[i].name == cdata.name) && + (_.clipboard[i].dir == _.dir) + ) { + failed = true; + msg += cdata.name + ": " + _.label("This file is already added to the Clipboard.") + "\n"; + break; + } + + if (!failed) { + cdata.dir = _.dir; + _.clipboard[_.clipboard.length] = cdata; + } + }); + _.initClipboard(); + if (msg.length) _.alert(msg.substr(0, msg.length - 1)); + return false; + }); + } + + // DELETE + if (_.access.files['delete']) { + _.menu.addDivider(); + _.menu.addItem("kcact:rm", _.label("Delete"), function() { + if ($(this).hasClass('denied')) return false; + var failed = 0, + dfiles = []; + $.each(files, function(i, cfile) { + var cdata = $(cfile).data(); + if (!cdata.writable) + failed++; + else + dfiles[dfiles.length] = _.dir + "/" + cdata.name; + }); + if (failed == files.length) { + _.alert(_.label("The selected files are not removable.")); + return false; + } + + var go = function(callBack) { + _.fadeFiles(); + $.ajax({ + type: "post", + dataType: "json", + url: _.getURL("rm_cbd"), + data: {files:dfiles}, + async: false, + success: function(data) { + if (callBack) callBack(); + _.check4errors(data); + _.refresh(); + }, + error: function() { + if (callBack) callBack(); + $('#files > div').css({ + opacity: "", + filter: "" + }); + _.alert(_.label("Unknown error.")); + } + }); + }; + + if (failed) + _.confirm( + _.label("{count} selected files are not removable. Do you want to delete the rest?", {count:failed}), + go + ); + + else + _.confirm( + _.label("Are you sure you want to delete all selected files?"), + go + ); + + return false; + }, (notWritable == files.length)); + } + + _.menu.show(e); + + // SINGLE FILE MENU + } else { + $('.file').removeClass('selected'); + file.addClass('selected'); + $('#fileinfo').html($.$.htmlData(data.name) + " (" + _.humanSize(data.size) + ", " + data.date + ")"); + + if (_.opener.callBack || _.opener.callBackMultiple) { + + // SELECT FILE + _.menu.addItem("kcact:pick", _.label("Select"), function() { + _.returnFile(file); + return false; + }); + + // SELECT THUMBNAIL + if (data.thumb) + _.menu.addItem("kcact:pick_thumb", _.label("Select Thumbnail"), function() { + _.returnFile(_.thumbsURL + "/" + _.dir + "/" + data.name); + return false; + }); + + _.menu.addDivider(); + } + + // VIEW IMAGE + if (data.thumb || data.smallThumb) + _.menu.addItem("kcact:view", _.label("View"), function() { + _.viewImage(data); + }); + + // DOWNLOAD + _.menu.addItem("kcact:download", _.label("Download"), function() { + $('#menu').html('
        '); + $('#downloadForm input').get(0).value = _.dir; + $('#downloadForm input').get(1).value = data.name; + $('#downloadForm').submit(); + return false; + }); + + // ADD TO CLIPBOARD + if (_.access.files.copy || _.access.files.move) { + _.menu.addDivider(); + _.menu.addItem("kcact:clpbrdadd", _.label("Add to Clipboard"), function() { + for (i = 0; i < _.clipboard.length; i++) + if ((_.clipboard[i].name == data.name) && + (_.clipboard[i].dir == _.dir) + ) { + _.alert(_.label("This file is already added to the Clipboard.")); + return false; + } + var cdata = data; + cdata.dir = _.dir; + _.clipboard[_.clipboard.length] = cdata; + _.initClipboard(); + return false; + }); + } + + + if (_.access.files.rename || _.access.files['delete']) + _.menu.addDivider(); + + // RENAME + if (_.access.files.rename) + _.menu.addItem("kcact:mv", _.label("Rename..."), function() { + if (!data.writable) return false; + _.fileNameDialog( + {dir: _.dir, file: data.name}, + 'newName', data.name, _.getURL("rename"), { + title: "New file name:", + errEmpty: "Please enter new file name.", + errSlash: "Unallowable characters in file name.", + errDot: "File name shouldn't begins with '.'" + }, + _.refresh + ); + return false; + }, !data.writable); + + // DELETE + if (_.access.files['delete']) + _.menu.addItem("kcact:rm", _.label("Delete"), function() { + if (!data.writable) return false; + _.confirm(_.label("Are you sure you want to delete this file?"), + function(callBack) { + $.ajax({ + type: "post", + dataType: "json", + url: _.getURL("delete"), + data: {dir: _.dir, file: data.name}, + async: false, + success: function(data) { + if (callBack) callBack(); + _.clearClipboard(); + if (_.check4errors(data)) + return; + _.refresh(); + }, + error: function() { + if (callBack) callBack(); + _.alert(_.label("Unknown error.")); + } + }); + } + ); + return false; + }, !data.writable); + + _.menu.show(e); + } + +}; + +// FOLDER CONTEXT MENU +_.menuDir = function(dir, e) { + _.menu.init(); + + var data = dir.data(), + html = '
          '; + + if (_.clipboard && _.clipboard.length) { + + // COPY CLIPBOARD + if (_.access.files.copy) + _.menu.addItem("kcact:cpcbd", _.label("Copy {count} files", {count: _.clipboard.length}), function() { + _.copyClipboard(data.path); + return false; + }, !data.writable); + + // MOVE CLIPBOARD + if (_.access.files.move) + _.menu.addItem("kcact:mvcbd", _.label("Move {count} files", {count: _.clipboard.length}), function() { + _.moveClipboard(data.path); + return false; + }, !data.writable); + + if (_.access.files.copy || _.access.files.move) + _.menu.addDivider(); + } + + // REFRESH + _.menu.addItem("kcact:refresh", _.label("Refresh"), function() { + _.refreshDir(dir); + return false; + }); + + // DOWNLOAD + if (_.support.zip) { + _.menu.addDivider(); + _.menu.addItem("kcact:download", _.label("Download"), function() { + _.post(_.getURL("downloadDir"), {dir:data.path}); + return false; + }); + } + + if (_.access.dirs.create || _.access.dirs.rename || _.access.dirs['delete']) + _.menu.addDivider(); + + // NEW SUBFOLDER + if (_.access.dirs.create) + _.menu.addItem("kcact:mkdir", _.label("New Subfolder..."), function(e) { + if (!data.writable) return false; + _.fileNameDialog( + {dir: data.path}, + "newDir", "", _.getURL("newDir"), { + title: "New folder name:", + errEmpty: "Please enter new folder name.", + errSlash: "Unallowable characters in folder name.", + errDot: "Folder name shouldn't begins with '.'" + }, function() { + _.refreshDir(dir); + _.initDropUpload(); + if (!data.hasDirs) { + dir.data('hasDirs', true); + dir.children('span.brace').addClass('closed'); + } + } + ); + return false; + }, !data.writable); + + // RENAME + if (_.access.dirs.rename) + _.menu.addItem("kcact:mvdir", _.label("Rename..."), function(e) { + if (!data.removable) return false; + _.fileNameDialog( + {dir: data.path}, + "newName", data.name, _.getURL("renameDir"), { + title: "New folder name:", + errEmpty: "Please enter new folder name.", + errSlash: "Unallowable characters in folder name.", + errDot: "Folder name shouldn't begins with '.'" + }, function(dt) { + if (!dt.name) { + _.alert(_.label("Unknown error.")); + return; + } + var currentDir = (data.path == _.dir); + dir.children('span.folder').html($.$.htmlData(dt.name)); + dir.data('name', dt.name); + dir.data('path', $.$.dirname(data.path) + '/' + dt.name); + if (currentDir) + _.dir = dir.data('path'); + _.initDropUpload(); + }, + true + ); + return false; + }, !data.removable); + + // DELETE + if (_.access.dirs['delete']) + _.menu.addItem("kcact:rmdir", _.label("Delete"), function() { + if (!data.removable) return false; + _.confirm( + _.label("Are you sure you want to delete this folder and all its content?"), + function(callBack) { + $.ajax({ + type: "post", + dataType: "json", + url: _.getURL("deleteDir"), + data: {dir: data.path}, + async: false, + success: function(data) { + if (callBack) callBack(); + if (_.check4errors(data)) + return; + dir.parent().hide(500, function() { + var folders = dir.parent().parent(); + var pDir = folders.parent().children('a').first(); + dir.parent().detach(); + if (!folders.children('div.folder').get(0)) { + pDir.children('span.brace').first().removeClass('opened closed'); + pDir.parent().children('.folders').detach(); + pDir.data('hasDirs', false); + } + if (pDir.data('path') == _.dir.substr(0, pDir.data('path').length)) + _.changeDir(pDir); + _.initDropUpload(); + }); + }, + error: function() { + if (callBack) callBack(); + _.alert(_.label("Unknown error.")); + } + }); + } + ); + return false; + }, !data.removable); + + _.menu.show(e); + + $('div.folder > a > span.folder').removeClass('context'); + if (dir.children('span.folder').hasClass('regular')) + dir.children('span.folder').addClass('context'); +}; + +// CLIPBOARD MENU +_.openClipboard = function() { + + if (!_.clipboard || !_.clipboard.length) return; + + // CLOSE MENU + if ($('#menu a[href="kcact:clrcbd"]').html()) { + $('#clipboard').removeClass('selected'); + _.menu.hide(); + return; + } + + setTimeout(function() { + _.menu.init(); + + var dlg = $('#menu'), + jStatus = $('#status'), + html = '
        • '; + + // CLIPBOARD FILES + $.each(_.clipboard, function(i, val) { + var icon = $.$.getFileExtension(val.name); + if (val.thumb) + icon = ".image"; + else if (!val.smallIcon || !icon.length) + icon = "."; + icon = "themes/" + _.theme + "/img/files/small/" + icon + ".png"; + html += '' + $.$.htmlData($.$.basename(val.name)) + ''; + }); + html += '
        • -
        • '; + $('#menu ul').append(html); + + // DOWNLOAD + if (_.support.zip) + _.menu.addItem("kcact:download", _.label("Download files"), function() { + _.downloadClipboard(); + return false; + }); + + if (_.access.files.copy || _.access.files.move || _.access.files['delete']) + _.menu.addDivider(); + + // COPY + if (_.access.files.copy) + _.menu.addItem("kcact:cpcbd", _.label("Copy files here"), function() { + if (!_.dirWritable) return false; + _.copyClipboard(_.dir); + return false; + }, !_.dirWritable); + + // MOVE + if (_.access.files.move) + _.menu.addItem("kcact:mvcbd", _.label("Move files here"), function() { + if (!_.dirWritable) return false; + _.moveClipboard(_.dir); + return false; + }, !_.dirWritable); + + // DELETE + if (_.access.files['delete']) + _.menu.addItem("kcact:rmcbd", _.label("Delete files"), function() { + _.confirm( + _.label("Are you sure you want to delete all files in the Clipboard?"), + function(callBack) { + if (callBack) callBack(); + _.deleteClipboard(); + } + ); + return false; + }); + + _.menu.addDivider(); + + // CLEAR CLIPBOARD + _.menu.addItem("kcact:clrcbd", _.label("Clear the Clipboard"), function() { + _.clearClipboard(); + return false; + }); + + $('#clipboard').addClass('selected'); + _.menu.show(); + + var left = $(window).width() - dlg.css({width: ""}).outerWidth(), + top = $(window).height() - dlg.outerHeight() - jStatus.outerHeight(), + lheight = top + dlg.outerTopSpace(); + + dlg.find('.list').css({ + 'max-height': lheight, + 'overflow-y': "auto", + 'overflow-x': "hidden", + width: "" + }); + + top = $(window).height() - dlg.outerHeight(true) - jStatus.outerHeight(true); + + dlg.css({ + left: left - 5, + top: top + }).fadeIn("fast"); + + var a = dlg.find('.list').outerHeight(), + b = dlg.find('.list div').outerHeight(); + + if (b - a > 10) { + dlg.css({ + left: parseInt(dlg.css('left')) - _.scrollbarWidth, + }).width(dlg.width() + _.scrollbarWidth); + } + }, 1); +}; \ No newline at end of file diff --git a/additions/kcfinder/js/091.viewImage.js b/additions/kcfinder/js/091.viewImage.js new file mode 100644 index 0000000..4d4f13d --- /dev/null +++ b/additions/kcfinder/js/091.viewImage.js @@ -0,0 +1,192 @@ +/** This file is part of KCFinder project + * + * @desc Image viewer + * @package KCFinder + * @version 3.12 + * @author Pavel Tzonkov + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +_.viewImage = function(data) { + + var ts = new Date().getTime(), + dlg = false, + images = [], + + showImage = function(data) { + _.lock = true; + $('#loading').html(_.label("Loading image...")).show(); + + var url = $.$.escapeDirs(_.uploadURL + "/" + _.dir + "/" + data.name) + "?ts=" + ts, + img = new Image(), + i = $(img), + w = $(window), + d = $(document); + + onImgLoad = function() { + _.lock = false; + + $('#files .file').each(function() { + if ($(this).data('name') == data.name) { + _.ssImage = this; + return false; + } + }); + + i.hide().appendTo('body'); + + var o_w = i.width(), + o_h = i.height(), + i_w = o_w, + i_h = o_h, + + goTo = function(i) { + if (!_.lock) { + var nimg = images[i]; + _.currImg = i; + showImage(nimg); + } + }, + + nextFunc = function() { + goTo((_.currImg >= images.length - 1) ? 0 : (_.currImg + 1)); + }, + + prevFunc = function() { + goTo((_.currImg ? _.currImg : images.length) - 1); + }, + + t = $('
          '); + + i.detach().appendTo(t); + t.addClass("img"); + + if (!dlg) { + + var ww = w.width() - 60, + + closeFunc = function() { + d.unbind('keydown').keydown(function(e) { + return !_.selectAll(e); + }); + dlg.dialog('destroy').detach(); + }; + + if ((ww % 2)) ww++; + + dlg = _.dialog($.$.htmlData(data.name), t.get(0), { + width: ww, + height: w.height() - 36, + position: [30, 30], + draggable: false, + nopadding: true, + close: closeFunc, + show: false, + hide: false, + buttons: [ + { + text: _.label("Previous"), + icons: {primary: "ui-icon-triangle-1-w"}, + click: prevFunc + + }, { + text: _.label("Next"), + icons: {secondary: "ui-icon-triangle-1-e"}, + click: nextFunc + + }, { + text: _.label("Select"), + icons: {primary: "ui-icon-check"}, + click: function(e) { + d.unbind('keydown').keydown(function(e) { + return !_.selectAll(e); + }); + if (_.ssImage) { + _.selectFile($(_.ssImage), e); + } + dlg.dialog('destroy').detach(); + } + + }, { + text: _.label("Close"), + icons: {primary: "ui-icon-closethick"}, + click: closeFunc + } + ] + }); + + dlg.addClass('kcfImageViewer').css('overflow', "hidden").parent().find('.ui-dialog-buttonpane button').get(2).focus(); + + } else { + dlg.prev().find('.ui-dialog-title').html($.$.htmlData(data.name)); + dlg.html(t.get(0)); + } + + dlg.unbind('click').click(nextFunc).disableTextSelect(); + + var d_w = dlg.innerWidth(), + d_h = dlg.innerHeight(); + + if ((o_w > d_w) || (o_h > d_h)) { + i_w = d_w; + i_h = d_h; + if ((d_w / d_h) > (o_w / o_h)) + i_w = parseInt((o_w * d_h) / o_h); + else if ((d_w / d_h) < (o_w / o_h)) + i_h = parseInt((o_h * d_w) / o_w); + } + + i.css({ + width: i_w, + height: i_h + }).show().parent().css({ + display: "block", + margin: "0 auto", + width: i_w, + height: i_h, + marginTop: parseInt((d_h - i_h) / 2) + }); + + $('#loading').hide(); + + d.unbind('keydown').keydown(function(e) { + if (!_.lock) { + var kc = e.keyCode; + if ((kc == 37)) prevFunc(); + if ((kc == 39)) nextFunc(); + } + }); + }; + + img.src = url; + + if (img.complete) + onImgLoad(); + else { + img.onload = onImgLoad; + img.onerror = function() { + _.lock = false; + $('#loading').hide(); + _.alert(_.label("Unknown error.")); + d.unbind('keydown').keydown(function(e) { + return !_.selectAll(e); + }); + _.refresh(); + }; + } + }; + + $.each(_.files, function(i, file) { + var i = images.length; + if (file.thumb || file.smallThumb) + images[i] = file; + if (file.name == data.name) + _.currImg = i; + }); + + showImage(data); + return false; +}; diff --git a/additions/kcfinder/js/100.clipboard.js b/additions/kcfinder/js/100.clipboard.js new file mode 100644 index 0000000..85f0b77 --- /dev/null +++ b/additions/kcfinder/js/100.clipboard.js @@ -0,0 +1,216 @@ +/** This file is part of KCFinder project + * + * @desc Clipboard functionality + * @package KCFinder + * @version 3.12 + * @author Pavel Tzonkov + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +_.initClipboard = function() { + if (!_.clipboard || !_.clipboard.length) return; + + var size = 0, + jClipboard = $('#clipboard'); + + $.each(_.clipboard, function(i, val) { + size += val.size; + }); + size = _.humanSize(size); + jClipboard.disableTextSelect().html('
          '); + var resize = function() { + jClipboard.css({ + left: $(window).width() - jClipboard.outerWidth(), + top: $(window).height() - jClipboard.outerHeight() + }); + }; + resize(); + jClipboard.show(); + $(window).unbind().resize(function() { + _.resize(); + resize(); + }); +}; + +_.removeFromClipboard = function(i) { + if (!_.clipboard || !_.clipboard[i]) return false; + if (_.clipboard.length == 1) { + _.clearClipboard(); + _.menu.hide(); + return; + } + + if (i < _.clipboard.length - 1) { + var last = _.clipboard.slice(i + 1); + _.clipboard = _.clipboard.slice(0, i); + _.clipboard = _.clipboard.concat(last); + } else + _.clipboard.pop(); + + _.initClipboard(); + _.menu.hide(); + _.openClipboard(); + return true; +}; + +_.copyClipboard = function(dir) { + if (!_.clipboard || !_.clipboard.length) return; + var files = [], + failed = 0; + for (i = 0; i < _.clipboard.length; i++) + if (_.clipboard[i].readable) + files[i] = _.clipboard[i].dir + "/" + _.clipboard[i].name; + else + failed++; + if (_.clipboard.length == failed) { + _.alert(_.label("The files in the Clipboard are not readable.")); + return; + } + var go = function(callBack) { + if (dir == _.dir) + _.fadeFiles(); + $.ajax({ + type: "post", + dataType: "json", + url: _.getURL("cp_cbd"), + data: {dir: dir, files: files}, + async: false, + success: function(data) { + if (callBack) callBack(); + _.check4errors(data); + _.clearClipboard(); + if (dir == _.dir) + _.refresh(); + }, + error: function() { + if (callBack) callBack(); + $('#files > div').css({ + opacity: "", + filter: "" + }); + _.alert(_.label("Unknown error.")); + } + }); + }; + + if (failed) + _.confirm( + _.label("{count} files in the Clipboard are not readable. Do you want to copy the rest?", {count:failed}), + go + ) + else + go(); + +}; + +_.moveClipboard = function(dir) { + if (!_.clipboard || !_.clipboard.length) return; + var files = [], + failed = 0; + for (i = 0; i < _.clipboard.length; i++) + if (_.clipboard[i].readable && _.clipboard[i].writable) + files[i] = _.clipboard[i].dir + "/" + _.clipboard[i].name; + else + failed++; + if (_.clipboard.length == failed) { + _.alert(_.label("The files in the Clipboard are not movable.")) + return; + } + + var go = function(callBack) { + _.fadeFiles(); + $.ajax({ + type: "post", + dataType: "json", + url: _.getURL("mv_cbd"), + data: {dir: dir, files: files}, + async: false, + success: function(data) { + if (callBack) callBack(); + _.check4errors(data); + _.clearClipboard(); + _.refresh(); + }, + error: function() { + if (callBack) callBack(); + $('#files > div').css({ + opacity: "", + filter: "" + }); + _.alert(_.label("Unknown error.")); + } + }); + }; + + if (failed) + _.confirm( + _.label("{count} files in the Clipboard are not movable. Do you want to move the rest?", {count: failed}), + go + ); + else + go(); +}; + +_.deleteClipboard = function() { + if (!_.clipboard || !_.clipboard.length) return; + var files = [], + failed = 0; + for (i = 0; i < _.clipboard.length; i++) + if (_.clipboard[i].readable && _.clipboard[i].writable) + files[i] = _.clipboard[i].dir + "/" + _.clipboard[i].name; + else + failed++; + if (_.clipboard.length == failed) { + _.alert(_.label("The files in the Clipboard are not removable.")) + return; + } + var go = function(callBack) { + _.fadeFiles(); + $.ajax({ + type: "post", + dataType: "json", + url: _.getURL("rm_cbd"), + data: {files:files}, + async: false, + success: function(data) { + if (callBack) callBack(); + _.check4errors(data); + _.clearClipboard(); + _.refresh(); + }, + error: function() { + if (callBack) callBack(); + $('#files > div').css({ + opacity: "", + filter: "" + }); + _.alert(_.label("Unknown error.")); + } + }); + }; + if (failed) + _.confirm( + _.label("{count} files in the Clipboard are not removable. Do you want to delete the rest?", {count: failed}), + go + ); + else + go(); +}; + +_.downloadClipboard = function() { + if (!_.clipboard || !_.clipboard.length) return; + var files = []; + for (i = 0; i < _.clipboard.length; i++) + if (_.clipboard[i].readable) + files[i] = _.clipboard[i].dir + "/" + _.clipboard[i].name; + if (files.length) + _.post(_.getURL('downloadClipboard'), {files:files}); +}; + +_.clearClipboard = function() { + $('#clipboard').html(""); + _.clipboard = []; +}; diff --git a/additions/kcfinder/js/110.dropUpload.js b/additions/kcfinder/js/110.dropUpload.js new file mode 100644 index 0000000..6837c82 --- /dev/null +++ b/additions/kcfinder/js/110.dropUpload.js @@ -0,0 +1,230 @@ +/** This file is part of KCFinder project + * + * @desc Upload files using drag and drop + * @package KCFinder + * @version 3.12 + * @author Forum user (updated by Pavel Tzonkov) + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +_.initDropUpload = function() { + if ((typeof XMLHttpRequest == "undefined") || + (typeof document.addEventListener == "undefined") || + (typeof File == "undefined") || + (typeof FileReader == "undefined") + ) + return; + + if (!XMLHttpRequest.prototype.sendAsBinary) { + XMLHttpRequest.prototype.sendAsBinary = function(datastr) { + var ords = Array.prototype.map.call(datastr, function(x) { + return x.charCodeAt(0) & 0xff; + }), + ui8a = new Uint8Array(ords); + this.send(ui8a.buffer); + } + } + + var uploadQueue = [], + uploadInProgress = false, + filesCount = 0, + errors = [], + files = $('#files'), + folders = $('div.folder > a'), + boundary = "------multipartdropuploadboundary" + (new Date).getTime(), + currentFile, + + filesDragOver = function(e) { + if (e.preventDefault) e.preventDefault(); + $('#files').addClass('drag'); + return false; + }, + + filesDragEnter = function(e) { + if (e.preventDefault) e.preventDefault(); + return false; + }, + + filesDragLeave = function(e) { + if (e.preventDefault) e.preventDefault(); + $('#files').removeClass('drag'); + return false; + }, + + filesDrop = function(e) { + if (e.preventDefault) e.preventDefault(); + if (e.stopPropagation) e.stopPropagation(); + $('#files').removeClass('drag'); + if (!$('#folders span.current').first().parent().data('writable')) { + _.alert("Cannot write to upload folder."); + return false; + } + filesCount += e.dataTransfer.files.length; + for (var i = 0; i < e.dataTransfer.files.length; i++) { + var file = e.dataTransfer.files[i]; + file.thisTargetDir = _.dir; + uploadQueue.push(file); + } + processUploadQueue(); + return false; + }, + + folderDrag = function(e) { + if (e.preventDefault) e.preventDefault(); + return false; + }, + + folderDrop = function(e, dir) { + if (e.preventDefault) e.preventDefault(); + if (e.stopPropagation) e.stopPropagation(); + if (!$(dir).data('writable')) { + _.alert(_.label("Cannot write to upload folder.")); + return false; + } + filesCount += e.dataTransfer.files.length; + for (var i = 0; i < e.dataTransfer.files.length; i++) { + var file = e.dataTransfer.files[i]; + file.thisTargetDir = $(dir).data('path'); + uploadQueue.push(file); + } + processUploadQueue(); + return false; + }; + + files.get(0).removeEventListener('dragover', filesDragOver, false); + files.get(0).removeEventListener('dragenter', filesDragEnter, false); + files.get(0).removeEventListener('dragleave', filesDragLeave, false); + files.get(0).removeEventListener('drop', filesDrop, false); + + files.get(0).addEventListener('dragover', filesDragOver, false); + files.get(0).addEventListener('dragenter', filesDragEnter, false); + files.get(0).addEventListener('dragleave', filesDragLeave, false); + files.get(0).addEventListener('drop', filesDrop, false); + + folders.each(function() { + var folder = this, + + dragOver = function(e) { + $(folder).children('span.folder').addClass('context'); + return folderDrag(e); + }, + + dragLeave = function(e) { + $(folder).children('span.folder').removeClass('context'); + return folderDrag(e); + }, + + drop = function(e) { + $(folder).children('span.folder').removeClass('context'); + return folderDrop(e, folder); + }; + + this.removeEventListener('dragover', dragOver, false); + this.removeEventListener('dragenter', folderDrag, false); + this.removeEventListener('dragleave', dragLeave, false); + this.removeEventListener('drop', drop, false); + + this.addEventListener('dragover', dragOver, false); + this.addEventListener('dragenter', folderDrag, false); + this.addEventListener('dragleave', dragLeave, false); + this.addEventListener('drop', drop, false); + }); + + function updateProgress(evt) { + var progress = evt.lengthComputable + ? Math.round((evt.loaded * 100) / evt.total) + '%' + : Math.round(evt.loaded / 1024) + " KB"; + $('#loading').html(_.label("Uploading file {number} of {count}... {progress}", { + number: filesCount - uploadQueue.length, + count: filesCount, + progress: progress + })); + } + + function processUploadQueue() { + if (uploadInProgress) + return false; + + if (uploadQueue && uploadQueue.length) { + var file = uploadQueue.shift(); + currentFile = file; + $('#loading').html(_.label("Uploading file {number} of {count}... {progress}", { + number: filesCount - uploadQueue.length, + count: filesCount, + progress: "" + })).show(); + + var reader = new FileReader(); + reader.thisFileName = file.name; + reader.thisFileType = file.type; + reader.thisFileSize = file.size; + reader.thisTargetDir = file.thisTargetDir; + + reader.onload = function(evt) { + uploadInProgress = true; + + var postbody = '--' + boundary + '\r\nContent-Disposition: form-data; name="upload[]"'; + if (evt.target.thisFileName) + postbody += '; filename="' + $.$.utf8encode(evt.target.thisFileName) + '"'; + postbody += '\r\n'; + if (evt.target.thisFileSize) + postbody += "Content-Length: " + evt.target.thisFileSize + "\r\n"; + postbody += "Content-Type: " + evt.target.thisFileType + "\r\n\r\n" + evt.target.result + "\r\n--" + boundary + '\r\nContent-Disposition: form-data; name="dir"\r\n\r\n' + $.$.utf8encode(evt.target.thisTargetDir) + "\r\n--" + boundary + "\r\n--" + boundary + "--\r\n"; + + var xhr = new XMLHttpRequest(); + xhr.thisFileName = evt.target.thisFileName; + + if (xhr.upload) { + xhr.upload.thisFileName = evt.target.thisFileName; + xhr.upload.addEventListener("progress", updateProgress, false); + } + xhr.open('post', _.getURL('upload'), true); + xhr.setRequestHeader('Content-Type', "multipart/form-data; boundary=" + boundary); + //xhr.setRequestHeader('Content-Length', postbody.length); + + xhr.onload = function(e) { + $('#loading').hide(); + if (_.dir == reader.thisTargetDir) + _.fadeFiles(); + uploadInProgress = false; + processUploadQueue(); + if (xhr.responseText.substr(0, 1) != "/") + errors[errors.length] = xhr.responseText; + }; + + xhr.sendAsBinary(postbody); + }; + + reader.onerror = function(evt) { + $('#loading').hide(); + uploadInProgress = false; + processUploadQueue(); + errors[errors.length] = _.label("Failed to upload {filename}!", { + filename: evt.target.thisFileName + }); + }; + + reader.readAsBinaryString(file); + + } else { + filesCount = 0; + var loop = setInterval(function() { + if (uploadInProgress) return; + boundary = "------multipartdropuploadboundary" + (new Date).getTime(); + uploadQueue = []; + clearInterval(loop); + if (currentFile.thisTargetDir == _.dir) + _.refresh(); + if (errors.length) { + errors = errors.join("\n"); + if (errors.replace(/^\s+/g, "").replace(/\s+$/g, "").length) + _.alert(errors); + errors = []; + } + }, 333); + } + } +}; diff --git a/additions/kcfinder/js/120.misc.js b/additions/kcfinder/js/120.misc.js new file mode 100644 index 0000000..f716178 --- /dev/null +++ b/additions/kcfinder/js/120.misc.js @@ -0,0 +1,130 @@ +/** This file is part of KCFinder project + * + * @desc Miscellaneous functionality + * @package KCFinder + * @version 3.12 + * @author Pavel Tzonkov + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +_.orderFiles = function(callBack, selected) { + var order = $.$.kuki.get('order'), + desc = ($.$.kuki.get('orderDesc') == "on"), + a1, b1, arr; + + if (!_.files || !_.files.sort) + _.files = []; + + _.files = _.files.sort(function(a, b) { + if (!order) order = "name"; + + if (order == "date") { + a1 = a.mtime; + b1 = b.mtime; + } else if (order == "type") { + a1 = $.$.getFileExtension(a.name); + b1 = $.$.getFileExtension(b.name); + } else if (order == "size") { + a1 = a.size; + b1 = b.size; + } else { + a1 = a[order].toLowerCase(); + b1 = b[order].toLowerCase(); + } + + if ((order == "size") || (order == "date")) { + if (a1 < b1) return desc ? 1 : -1; + if (a1 > b1) return desc ? -1 : 1; + } + + if (a1 == b1) { + a1 = a.name.toLowerCase(); + b1 = b.name.toLowerCase(); + arr = [a1, b1]; + arr = arr.sort(); + return (arr[0] == a1) ? -1 : 1; + } + + arr = [a1, b1]; + arr = arr.sort(); + if (arr[0] == a1) return desc ? 1 : -1; + return desc ? -1 : 1; + }); + + _.showFiles(callBack, selected); + _.initFiles(); +}; + +_.humanSize = function(size) { + if (size < 1024) { + size = size.toString() + " B"; + } else if (size < 1048576) { + size /= 1024; + size = parseInt(size).toString() + " KB"; + } else if (size < 1073741824) { + size /= 1048576; + size = parseInt(size).toString() + " MB"; + } else if (size < 1099511627776) { + size /= 1073741824; + size = parseInt(size).toString() + " GB"; + } else { + size /= 1099511627776; + size = parseInt(size).toString() + " TB"; + } + return size; +}; + +_.getURL = function(act) { + var url = "browse.php?type=" + encodeURIComponent(_.type) + "&lng=" + encodeURIComponent(_.lang); + if (_.opener.name) + url += "&opener=" + encodeURIComponent(_.opener.name); + if (act) + url += "&act=" + encodeURIComponent(act); + if (_.cms) + url += "&cms=" + encodeURIComponent(_.cms); + return url; +}; + +_.label = function(index, data) { + var label = _.labels[index] ? _.labels[index] : index; + if (data) + $.each(data, function(key, val) { + label = label.replace("{" + key + "}", val); + }); + return label; +}; + +_.check4errors = function(data) { + if (!data.error) + return false; + var msg = data.error.join + ? data.error.join("\n") + : data.error; + _.alert(msg); + return true; +}; + +_.post = function(url, data) { + var html = '
          '; + $.each(data, function(key, val) { + if ($.isArray(val)) + $.each(val, function(i, aval) { + html += ''; + }); + else + html += ''; + }); + html += '
          '; + $('#menu').html(html).show(); + $('#postForm').get(0).submit(); +}; + +_.fadeFiles = function() { + $('#files > div').css({ + opacity: "0.4", + filter: "alpha(opacity=40)" + }); +}; diff --git a/additions/kcfinder/js/index.php b/additions/kcfinder/js/index.php new file mode 100644 index 0000000..627bae5 --- /dev/null +++ b/additions/kcfinder/js/index.php @@ -0,0 +1,22 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +chdir(".."); +require "core/autoload.php"; +$min = new minifier("js"); +$min->minify("cache/base.js"); + +?> \ No newline at end of file diff --git a/additions/kcfinder/js_localize.php b/additions/kcfinder/js_localize.php new file mode 100644 index 0000000..d84df78 --- /dev/null +++ b/additions/kcfinder/js_localize.php @@ -0,0 +1,48 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; +require "core/autoload.php"; + +if (!isset($_GET['lng']) || ($_GET['lng'] == 'en') || + ($_GET['lng'] != basename($_GET['lng'])) || + !is_file("lang/" . $_GET['lng'] . ".php") +) { + header("Content-Type: text/javascript"); + die; +} + +$file = "lang/" . $_GET['lng'] . ".php"; +$mtime = @filemtime($file); + +if ($mtime) + httpCache::checkMTime($mtime, "Content-Type: text/javascript"); + +require $file; +header("Content-Type: text/javascript"); + +echo "_.labels={"; + +$i = 0; +foreach ($lang as $english => $native) { + if (substr($english, 0, 1) != "_") { + echo "'" . text::jsValue($english) . "':\"" . text::jsValue($native) . "\""; + if (++$i < count($lang)) + echo ","; + } +} + +echo "}"; + +?> diff --git a/additions/kcfinder/lang/.htaccess b/additions/kcfinder/lang/.htaccess new file mode 100644 index 0000000..d61b264 --- /dev/null +++ b/additions/kcfinder/lang/.htaccess @@ -0,0 +1,4 @@ + +Order allow,deny +Deny from all + diff --git a/additions/kcfinder/lang/af.php b/additions/kcfinder/lang/af.php new file mode 100644 index 0000000..0dd3a25 --- /dev/null +++ b/additions/kcfinder/lang/af.php @@ -0,0 +1,245 @@ + "af-ZA.UTF-8", + '_charset' => "utf-8", + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%d %B %Y %H:%M", + '_dateTimeMid' => "%d %b %Y %H:%M", + '_dateTimeSmall' => "%d %b %Y %H:%M", + + "You don't have permissions to upload files." => + "Jy het nie toestemming om lêers op te laai nie oplaai nie.", + + "You don't have permissions to browse server." => + "Jy het nie toestemming tot die bediener nie.", + + "Cannot move uploaded file to target folder." => + "Jy kannie die lêer beweeg na die gids toe nie.", + + "Unknown error." => + "Onbekende fout.", + + "The uploaded file exceeds {size} bytes." => + "Die foto's lêer oorskry {size} grepe.", + + "The uploaded file was only partially uploaded." => + "Die foto's lêer is slegs gedeeltelik opgelaai.", + + "No file was uploaded." => + "Geen lêer is opgelaai.", + + "Missing a temporary folder." => + "'N tydelike gids ontbreek.", + + "Failed to write file." => + "Misluk om lêer te kryf.", + + "Denied file extension." => + "Lêer uitbreiding verloën.", + + "Unknown image format/encoding." => + "Onbekende prentjie-formaat / kodering.", + + "The image is too big and/or cannot be resized." => + "Die beeld is te groot en / of kan nie verander word nie.", + + "Cannot create {dir} folder." => + "Kan nie {dir} gids skep nie.", + + "Cannot write to upload folder." => + "Kan nie skryf na die oplaai gids nie.", + + "Cannot read .htaccess" => + "Kan nie .htaccess lees nie.", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Verkeerde .htaccess lêer. Kan nie herskryf dit!", + + "Cannot fetch content of {dir} folder." => + "Kan nie haal inhoud van {dir} gids nie.", + + "Cannot read upload folder." => + "Kan nie oplaai gids lees nie.", + + "Cannot access or create thumbnails folder." => + "Kan nie toegang tot of duimnaels gids skep.", + + "Cannot access or write to upload folder." => + "Kan nie toegang tot of skryf na oplaai gids nie.", + + "Please enter new folder name." => + "Gee die nuwe gidsnaam.", + + "Unallowed characters in folder name." => + "Ongeoorloofd karakters in gidsnaam.", + + "Folder name shouldn't begins with '.'" => + "Gidsnaam moet nie begin met '.'", + + "Please enter new file name." => + "Gee nuwe lêernaam.", + + "Unallowed characters in file name." => + "Ongeoorloofd karakters in die lêernaam.", + + "File name shouldn't begins with '.'" => + "Lêer naam moet nie begin met '.'", + + "Are you sure you want to delete this file?" => + "Is jy seker jy wil hierdie lêer te verwyder ?", + + "Are you sure you want to delete this folder and all its content?" => + "Is jy seker jy wil hierdie gids en al die inhoud daarin te verwyder ?", + + "Unexisting directory type." => + "Nie Bestaande gids tipe.", + + "Undefined MIME types." => + "Ongedefinieerd MIME-tipes.", + + "Fileinfo PECL extension is missing." => + "Fileinfo PECL uitbreiding is weg.", + + "Opening fileinfo database failed." => + "Opening van fileinfo databasis het misluk.", + + "You can't upload such files." => + "Jy kan nie sulke lêers oplaai.", + + "The file '{file}' does not exist." => + "Die lêer '{file}' bestaan ​​nie.", + + "Cannot read '{file}'." => + "Kan nie '{file}' lees nie.", + + "Cannot copy '{file}'." => + "Kan nie '{file}' kopieer nie.", + + "Cannot move '{file}'." => + "Kan nie '{file}' beweeg nie.", + + "Cannot delete '{file}'." => + "Kan nie '{file}' verwyder .", + + "Click to remove from the Clipboard" => + "Klik om te verwyder van die Klembord", + + "This file is already added to the Clipboard." => + "Hierdie lêer is reeds aan die Klembord bygevoeg.", + + "Copy files here" => + "Kopieer lêers hier", + + "Move files here" => + "Skuif lêers hier", + + "Delete files" => + "Verwyder lêers ", + + "Clear the Clipboard" => // + "Vee Klembord Skoon", + + "Are you sure you want to delete all files in the Clipboard?" => + "Is jy seker jy wil al die lêers in die Klembord te verwyder?", + + "Copy {count} files" => + "Kopieer {count} lêers", + + "Move {count} files" => + "Beweeg {count} lêers", + + "Add to Clipboard" => + "Voeg na klembord", + "New folder name:" => "Nuwe gids naam:", + "New file name:" => "Nuwe lêer naam:", + "Folders" => "Gidse", + + "Upload" => "Oplaai", + "Refresh" => "Herlaai", + "Settings" => "Stellings", + "Maximize" => "Maksimaliseer", + "About" => "About", + "files" => "lêers", + "View:" => "Bekyk:", + "Show:" => "Wys:", + "Order by:" => "Sorteer volgens:", + "Thumbnails" => "Duimnaels", + "List" => "Lys", + "Name" => "Naam", + "Size" => "Grootte", + "Date" => "Datum", + "Descending" => "Aflopend", + "Uploading file..." => "Lêer Besig Met Oplaai...", + "Loading image..." => "Besig om beeld te laai...", + "Loading folders..." => "Besig om Gidse te laai...", + "Loading files..." => "Besig om Lêers te laai...", + "New Subfolder..." => "Nuwe subgids...", + "Rename..." => "Naam verander...", + "Delete" => "Verwyder", + "OK" => "REG", + "Cancel" => "Kanselleer", + "Select" => "Kies", + "Select Thumbnail" => "Kies Duimnaelskets", + "View" => "Bekyk", + "Download" => "Aflaai", + 'Clipboard' => "Klembord", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Kan nie die gids naam vernader nie.", + + "Non-existing directory type." => + "Nie-bestaande gids tipe.", + + "Cannot delete the folder." => + "Kan nie die gids verwyder nie.", + + "The files in the Clipboard are not readable." => + "Die lêers in die Klembord is nie leesbaar is.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} lêers in die Klembord is nie leesbaar is. Wil jy die res te kopieer ?", + + "The files in the Clipboard are not movable." => + "Die lêers in die Klembord kan verskuif word nie.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} lêers in die Klembord kan nie verskuif word nie. Wil jy die res te beweeg ?", + + "The files in the Clipboard are not removable." => + "Die lêers in die Klembord kan nie verwyder word nie.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} lêers in die Klembord kan nie verwyder word nie. Wil jy die res te verwyder ?", + + "The selected files are not removable." => + "Die geselekteerde lêers kan nie verwyder word nie", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} geselekteerde lêers kan nie verwyder word nie. Wil jy die res te verwyder ?", + + "Are you sure you want to delete all selected files?" => + "Is jy seker jy wil all geselekteerde lêers te verwyder ?", + + "Failed to delete {count} files/folders." => + "Misluk {count} lêers/gidse te verwyder.", + + "A file or folder with that name already exists." => + "'N lêer of gids met daardie naam bestaan ​​reeds.", + + "Inexistant or inaccessible folder." => + "Nie-bestaande of ontoeganklik gids.", + + "selected files" => "geselekteerde lêers", + "Type" => "Tipe", + "Select Thumbnails" => "Kies duimnaels", + "Download files" => "Laai lêers af", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/bg.php b/additions/kcfinder/lang/bg.php new file mode 100644 index 0000000..0215916 --- /dev/null +++ b/additions/kcfinder/lang/bg.php @@ -0,0 +1,270 @@ + + */ + +$lang = array( + + '_locale' => "bg_BG.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "Нямате права за качване.", + + "You don't have permissions to browse server." => + "Нямате права за разглеждане на сървъра.", + + "Cannot move uploaded file to target folder." => + "Файлът не може да се премести в целевата папка.", + + "Unknown error." => + "Непозната грешка.", + + "The uploaded file exceeds {size} bytes." => + "Каченият файл надхвърля {size} байта.", + + "The uploaded file was only partially uploaded." => + "Каченият файл беше качен само частично.", + + "No file was uploaded." => + "Файлът не беше качен", + + "Missing a temporary folder." => + "Липсва временна папка.", + + "Failed to write file." => + "Грешка при записване на файла.", + + "Denied file extension." => + "Забранено файлово разширение.", + + "Unknown image format/encoding." => + "Файлът не може да бъде разпознат като изображение.", + + "The image is too big and/or cannot be resized." => + "Изображението е много голямо и/или не може да бъде преоразмерено.", + + "Cannot create {dir} folder." => + "Невъзможност да се създаде папка {dir}.", + + "Cannot rename the folder." => + "Папката не може да се преимеува.", + + "Cannot write to upload folder." => + "Не е възможно записването на файлове в папката за качване.", + + "Cannot read .htaccess" => + "Не е възможно прочитането на .htaccess", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Невалиден .htaccess файл. Не може да се презапише автоматично!", + + "Cannot read upload folder." => + "Не е възможно прочитането на папката за качване.", + + "Cannot access or create thumbnails folder." => + "Невъзможен достъп или невъзможно създаване на папката за thumbnails.", + + "Cannot access or write to upload folder." => + "Папката не може да се достъпи или не може да се записва в нея.", + + "Please enter new folder name." => + "Моля въведете име на папката.", + + "Unallowable characters in folder name." => + "Непозволени знаци в името на папката.", + + "Folder name shouldn't begins with '.'" => + "Името на папката не трябва да започва с '.'", + + "Please enter new file name." => + "Моля въведете ново име на файла", + + "Unallowable characters in file name." => + "Непозволени знаци в името на файла.", + + "File name shouldn't begins with '.'" => + "Името на файла не трябва да започва с '.'", + + "Are you sure you want to delete this file?" => + "Наистина ли искате да изтриете този файл?", + + + "Are you sure you want to delete this folder and all its content?" => + "Наистина ли искате да изтриете тази папка и цялото ѝ съдържание?", + + "Non-existing directory type." => + "Несъществуващ специален тип на папка.", + + "Undefined MIME types." => + "Не са дефинирани MIME типове.", + + "Fileinfo PECL extension is missing." => + "Липсва Fileinfo PECL разширение.", + + "Opening fileinfo database failed." => + "Грешка при отваряне на fileinfo дефиниции.", + + "You can't upload such files." => + "Не можете да качвате такива файлове.", + + "The file '{file}' does not exist." => + "Фаълът '{file}' не съществува.", + + "Cannot read '{file}'." => + "Файлът '{file}' не може да бъде прочетен.", + + "Cannot copy '{file}'." => + "Файлът '{file}' не може да бъде копиран.", + + "Cannot move '{file}'." => + "Файлът '{file}' не може да бъде преместен.", + + "Cannot delete '{file}'." => + "Файлът '{file}' не може да бъде изтрит.", + + "Cannot delete the folder." => + "Папката не може да бъде изтрита.", + + "Click to remove from the Clipboard" => + "Цъкнете за да премахнете файла от клипборда", + + "This file is already added to the Clipboard." => + "Този файл вече е добавен към клипборда.", + + "The files in the Clipboard are not readable." => + "Файловете в клипборда не могат да се прочетат.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} файла в клипборда не могат да се прочетат. Искате ли да копирате останалите?", + + "The files in the Clipboard are not movable." => + "Файловете в клипборда не могат да бъдат преместени.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} файла в клипборда не могат да бъдат преместени. Искате ли да преместите останалите?", + + "The files in the Clipboard are not removable." => + "Файловете в клипборда не могат да бъдат изтрити.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} файла в клипборда не могат да бъдат изтрити. Искате ли да изтриете останалите?", + + "The selected files are not removable." => + "Избраните файлове не могат да бъдат изтрити.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} от избраните файлове не могат да бъдат изтрити. Искате ли да изтриете останалите?", + + "Are you sure you want to delete all selected files?" => + "Наистина ли искате да изтриете всички избрани файлове?", + + "Failed to delete {count} files/folders." => + "{count} файла/папки не могат да бъдат изтрити.", + + "A file or folder with that name already exists." => + "Вече има файл или папка с такова име.", + + "Copy files here" => + "Копирай файловете тук", + + "Move files here" => + "Премести файловете тук", + + "Delete files" => + "Изтрий файловете", + + "Clear the Clipboard" => + "Изчисти клипборда", + + "Are you sure you want to delete all files in the Clipboard?" => + "Наистина ли искате да изтриете всички файлове от клипборда?", + + "Copy {count} files" => + "Копирай {count} файла", + + "Move {count} files" => + "Премести {count} файла", + + "Add to Clipboard" => + "Добави към клипборда", + + "Inexistant or inaccessible folder." => + "Несъществуваща или недостъпна папка.", + + "New folder name:" => "Име на папката:", + "New file name:" => "Ново име на файла:", + + "Upload" => "Качи", + "Refresh" => "Актуализирай", + "Settings" => "Настройки", + "Maximize" => "Разпъни", + "About" => "Информация", + "files" => "файла", + "selected files" => "избрани файла", + "View:" => "Изглед:", + "Show:" => "Покажи:", + "Order by:" => "Подреди по:", + "Thumbnails" => "Картинки", + "List" => "Списък", + "Name" => "Име", + "Type" => "Тип", + "Size" => "Размер", + "Date" => "Дата", + "Descending" => "Обратен ред", + "Uploading file..." => "Файлът се качва...", + "Loading image..." => "Изображението се зарежда...", + "Loading folders..." => "Зареждане на папките...", + "Loading files..." => "Зареждане на папката...", + "New Subfolder..." => "Нова подпапка...", + "Rename..." => "Преименуване...", + "Delete" => "Изтрий", + "OK" => "OK", + "Cancel" => "Отказ", + "Select" => "Избери", + "Select Thumbnail" => "Избери малък вариант", + "Select Thumbnails" => "Избери малки варианти", + "View" => "Преглед", + "Download" => "Свали", + "Download files" => "Свали файловете", + "Clipboard" => "Клипборд", + + // SINCE 2.4 + + "Checking for new version..." => "Проверка за нова версия...", + "Unable to connect!" => "Не може да се свърже!", + "Download version {version} now!" => "Свалете версия {version} сега!", + "KCFinder is up to date!" => "KCFinder е актуален!", + "Licenses:" => "Лицензи:", + "Attention" => "Внимание", + "Question" => "Въпрос", + "Yes" => "Да", + "No" => "Не", + + // SINCE 2.41 + + "You cannot rename the extension of files!" => + "Не можете да преименувате разширенията на файловете!", + + // SINCE 2.5 + + "Uploading file {number} of {count}... {progress}" => + "Качване на файл {number} от {count}... {progress}", + + "Failed to upload {filename}!" => "Несполучливо качване на {filename}!", + + // SINCE 3.0 + "Close" => "Затвори", + "Previous" => "Предишно", + "Next" => "Следващо", + "Confirmation" => "Потвърждение", + "Warning" => "Внимание" +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/ca.php b/additions/kcfinder/lang/ca.php new file mode 100644 index 0000000..9e9c6c2 --- /dev/null +++ b/additions/kcfinder/lang/ca.php @@ -0,0 +1,128 @@ + "ca_ES.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "No teniu permisos per pujar arxius.", + "You don't have permissions to browse server." => "No teniu permisos per visualitzar arxius.", + "Cannot move uploaded file to target folder." => "No es pot moure el fitxer pujat al directori destí", + "Unknown error." => "Error desconegut.", + "The uploaded file exceeds {size} bytes." => "El fitxer seleccionat excedeix el pes màxim permès ( {size} bytes ).", + "The uploaded file was only partially uploaded." => "El fitxer seleccionat només s'ha carregat parcialment.", + "No file was uploaded." => "No s'ha carregat cap fitxer.", + "Missing a temporary folder." => "Manca un directori temporal.", + "Failed to write file." => "No s'ha pogut escriure el fitxer.", + "Denied file extension." => "Extensió de fitxer no permesa.", + "Unknown image format/encoding." => "Format d'imatge desconegut.", + "The image is too big and/or cannot be resized." => "La imatge és massa gran i/o no es pot redimensionar.", + "Cannot create {dir} folder." => "No s'ha pogut crear el directori {dir}", + "Cannot rename the folder." => "No es pot reanomenar el directori.", + "Cannot write to upload folder." => "No es pot escriure al directori de càrrega de fitxers.", + "Cannot read .htaccess" => "No s'ha pogut llegir .htaccess.", + "Incorrect .htaccess file. Cannot rewrite it!" => "Fitxer .htaccess incorrecte. No es pot reescriure!", + "Cannot read upload folder." => "No s'ha pogut llegir la carpeta de càrrega de fitxers.", + "Cannot access or create thumbnails folder." => "No s'ha pogut accedir o crear la carpeta de miniatures.", + "Cannot access or write to upload folder." => "No s'ha pogut accedir o escriure la carpeta de càrrega de fitxers.", + "Please enter new folder name." => "Si us plau, introduïu el nom del nou directori.", + "Unallowable characters in folder name." => "Caràcters no permesos en el nom del directori.", + "Folder name shouldn't begins with '.'" => "El nom d'un directori no hauria de començar amb un punt '.'", + "Please enter new file name." => "Si us plau, introduïu el nom del nou fitxer.", + "Unallowable characters in file name." => "Caràcters no permesos en el nom del fitxer.", + "File name shouldn't begins with '.'" => "El nom d'un fitxer no hauria de començar amb un punt '.'", + "Are you sure you want to delete this file?" => "Esteu segur que voleu eliminar aquest fitxer?", + "Are you sure you want to delete this folder and all its content?" => "Esteu segur que voleu eliminar aquest directori i tot el seu contingut?", + "Non-existing directory type." => "Tipus de directori inexistent.", + "Undefined MIME types." => "Tipus MIME no definit.", + "Fileinfo PECL extension is missing." => "Manca arxiu d'informació de l'extensió PECL.", + "Opening fileinfo database failed." => "Error obrint el fitxer d'informació de la base de dades.", + "You can't upload such files." => "No podeu carregar tants fitxers.", + "The file '{file}' does not exist." => "El fitxer '{file}' no existeix.", + "Cannot read '{file}'." => "No s'ha pogut llegir '{file}'.", + "Cannot copy '{file}'." => "No s'ha pogut copiar '{file}'.", + "Cannot move '{file}'." => "No s'ha pogut moure '{file}'.", + "Cannot delete '{file}'." => "No s'ha pogut eliminar '{file}'.", + "Cannot delete the folder." => "No es pot eliminar el directori.", + "Click to remove from the Clipboard" => "Feu clic per eliminar del portapapers", + "This file is already added to the Clipboard." => "Aquest arxiu ja es troba al portapapers.", + "The files in the Clipboard are not readable." => "No es poden llegir els fitxers del portapapers.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} fitxers del portapapers no es poden llegir. Voleu copiar la resta?", + "The files in the Clipboard are not movable." => "No es poden moure els fitxers del portapapers.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} fitxers del portapapers no es poden moure. Voleu moure la resta?", + "The files in the Clipboard are not removable." => "Els fitxers del portapapers no es poden eliminar.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} fitxers del portapapers no es poden eliminar. Voleu eliminar la resta?", + "The selected files are not removable." => "Els fitxers seleccionats no es poden eliminar.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} fitxers dels seleccionats no es poden eliminar. Voleu eliminar la resta?", + "Are you sure you want to delete all selected files?" => "Esteu segur que voleu eliminar els fitxers seleccionats?", + "Failed to delete {count} files/folders." => "Error al eliminar {count} fitxers/directoris.", + "A file or folder with that name already exists." => "Ja existeix un directori o fitxer amb aquest nom.", + "Copy files here" => "Copia els fitxers aquí", + "Move files here" => "Mou els fitxers aquí", + "Delete files" => "Elimina els fitxers", + "Clear the Clipboard" => "Buida el portapapers", + "Are you sure you want to delete all files in the Clipboard?" => "Esteu segur que voleu eliminar tots els fitxers del portapapers?", + "Copy {count} files" => "Copia els {count} fitxers aquí", + "Move {count} files" => "Mou els {count} fitxers aquí", + "Add to Clipboard" => "Afegeix al portapapers", + "Inexistant or inaccessible folder." => "Directori inexistent o inaccessible.", + "New folder name:" => "Nom del nou directori:", + "New file name:" => "Nom del nou fitxer:", + "Upload" => "Carrega arxius", + "Refresh" => "Refresca", + "Settings" => "Opcions", + "Maximize" => "Maximitza", + "About" => "Sobre...", + "files" => "Fitxers", + "selected files" => "Fitxers seleccionats", + "View:" => "Veure:", + "Show:" => "Mostra:", + "Order by:" => "Ordena per:", + "Thumbnails" => "Miniatures", + "List" => "Llistat", + "Name" => "Nom", + "Type" => "Tipus", + "Size" => "Mida", + "Date" => "Data", + "Descending" => "Descendent", + "Uploading file..." => "Carregant fitxer...", + "Loading image..." => "Carregant imatge...", + "Loading folders..." => "Carregant directoris...", + "Loading files..." => "Carregant fitxers...", + "New Subfolder..." => "Nou subdirectori...", + "Rename..." => "Canvia el nom...", + "Delete" => "Elimina", + "OK" => "D'acord", + "Cancel" => "Cancel·la", + "Select" => "Selecciona", + "Select Thumbnail" => "Selecciona miniatura", + "Select Thumbnails" => "Selecciona miniatures", + "View" => "Veure", + "Download" => "Descarrega", + "Download files" => "Descarrega fitxers", + "Clipboard" => "Portapapers", + "Checking for new version..." => "Comprovant actualitzacions...", + "Unable to connect!" => "No es pot connectar!", + "Download version {version} now!" => "Descarregueu la versió {version}!", + "KCFinder is up to date!" => "KCFinder està actualitzat!", + "Licenses:" => "Llicències:", + "Attention" => "Atenció", + "Question" => "Pregunta", + "Yes" => "Sí", + "No" => "No", + "You cannot rename the extension of files!" => "No està permès canviar la extensió al fitxer.", + "Uploading file {number} of {count}... {progress}" => "Carregant arxiu {number} de {count}... {progress}", + "Failed to upload {filename}!" => "Error al carregar {filename}", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/cs.php b/additions/kcfinder/lang/cs.php new file mode 100644 index 0000000..bd672ea --- /dev/null +++ b/additions/kcfinder/lang/cs.php @@ -0,0 +1,132 @@ + + */ + +$lang = array( + + '_locale' => "cs_CZ.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B.%Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "Nemáte práva pro nahrávání souborů.", + "You don't have permissions to browse server." => "Nemáte práva pro prohlížení serveru.", + "Cannot move uploaded file to target folder." => "Nelze přesunout soubor do určeného adresáře.", + "Unknown error." => "Neznámá chyba.", + "The uploaded file exceeds {size} bytes." => "Nahraný soubor přesahuje {size} bytů.", + "The uploaded file was only partially uploaded." => "Nahraný soubor byl nahrán pouze částečně.", + "No file was uploaded." => "Žádný soubor nebyl nahrán na server.", + "Missing a temporary folder." => "Chybí dočasný adresář.", + "Failed to write file." => "Soubor se nepodařilo se uložit.", + "Denied file extension." => "Nepodporovaný typ souboru.", + "Unknown image format/encoding." => "Neznámý formát obrázku/encoding.", + "The image is too big and/or cannot be resized." => "Obrázek je příliš velký/nebo nemohl být zmenšen.", + "Cannot create {dir} folder." => "Adresář {dir} nelze vytvořit.", + "Cannot rename the folder." => "Adresář nelze přejmenovat.", + "Cannot write to upload folder." => "Nelze ukládat do adresáře pro nahrávání.", + "Cannot read .htaccess" => "Není možno číst soubor .htaccess", + "Incorrect .htaccess file. Cannot rewrite it!" => "Chybný soubor .htaccess. Soubor nelze přepsat!", + "Cannot read upload folder." => "Nelze číst z adresáře pro nahrávání souborů.", + "Cannot access or create thumbnails folder." => "Adresář pro náhledy nelze vytvořit nebo není přístupný.", + "Cannot access or write to upload folder." => "Nelze přistoupit, nebo zapisovat do adresáře pro nahrávání souborů.", + "Please enter new folder name." => "Vložte prosím nové jméno adresáře.", + "Unallowable characters in folder name." => "Nepovolené znaky v názvu adresáře.", + "Folder name shouldn't begins with '.'" => "Jméno adresáře nesmí začínat znakem '.'", + "Please enter new file name." => "Vložte prosím nové jméno souboru.", + "Unallowable characters in file name." => "Nepovolené znaky v názvu souboru.", + "File name shouldn't begins with '.'" => "Název soubor nesmí začínat znakem '.'", + "Are you sure you want to delete this file?" => "Jste si jistý že chcete smazat tento soubor?", + "Are you sure you want to delete this folder and all its content?" => "Jste si jistý že chcete smazat tento adresář a celý jeho obsah?", + "Non-existing directory type." => "Neexistující typ adresáře.", + "Undefined MIME types." => "Nedefinovaný MIME typ souboru.", + "Fileinfo PECL extension is missing." => "Rozříření PECL pro zjištění informací o souboru chybí.", + "Opening fileinfo database failed." => "Načtení informací o souboru selhalo.", + "You can't upload such files." => "Tyto soubory nemůžete nahrát na server.", + "The file '{file}' does not exist." => "Tento soubor '{file}' neexistuje.", + "Cannot read '{file}'." => "Nelze načíst '{file}'.", + "Cannot copy '{file}'." => "Nelze kopírovat '{file}'.", + "Cannot move '{file}'." => "Nelze přesunout '{file}'.", + "Cannot delete '{file}'." => "Nelze smazat '{file}'.", + "Cannot delete the folder." => "Adresář nelze smazat.", + "Click to remove from the Clipboard" => "Klikněte pro odstranění ze schránky", + "This file is already added to the Clipboard." => "Tento soubor je již ve schránce vložen.", + "The files in the Clipboard are not readable." => "Soubory ve schránce nelze načíst.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} souborů ve schránce nelze načíst. Chcete zkopírovat zbylé soubory?", + "The files in the Clipboard are not movable." => "Soubory ve schránce nelze přesunout.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} souborů ve schránce nelze přesunout. Chcete přesunout zbylé soubory?", + "The files in the Clipboard are not removable." => "Soubory ve schránce nelze smazat.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} souborů ve schránce nelze smazat. Chcete smazat zbylé soubory?", + "The selected files are not removable." => "Označené soubory nelze smazat.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} označených souborů nelze smazat. Chcete smazat zbylé soubory?", + "Are you sure you want to delete all selected files?" => "Jste si jistý že chcete smazat vybrané soubory?", + "Failed to delete {count} files/folders." => "Nebylo smazáno {count} souborů/adresářů.", + "A file or folder with that name already exists." => "Soubor nebo adresář s takovým jménem již existuje.", + "Copy files here" => "Kopírovat soubory na toto místo", + "Move files here" => "Přesunout soubory na toto místo", + "Delete files" => "Smazat soubory", + "Clear the Clipboard" => "Vyčistit schránku", + "Are you sure you want to delete all files in the Clipboard?" => "Jste si jistý že chcete vymazat všechny soubory ze schránky?", + "Copy {count} files" => "Kopírovat {count} souborů", + "Move {count} files" => "Přesunout {count} souborů", + "Add to Clipboard" => "Vložit do schránky", + "Inexistant or inaccessible folder." => "Neexistující nebo nepřístupný adresář.", + "New folder name:" => "Nový název adresáře:", + "New file name:" => "Nový název souboru:", + "Upload" => "Nahrát", + "Refresh" => "Obnovit", + "Settings" => "Nastavení", + "Maximize" => "Maximalizovat", + "About" => "O aplikaci", + "files" => "soubory", + "selected files" => "vybrané soubory", + "View:" => "Zobrazit:", + "Show:" => "Ukázat:", + "Order by:" => "Řadit podle:", + "Thumbnails" => "Náhledy", + "List" => "Seznam", + "Name" => "Jméno", + "Type" => "Typ", + "Size" => "Velikost", + "Date" => "Datum", + "Descending" => "Sestupně", + "Uploading file..." => "Nahrávání souboru...", + "Loading image..." => "Načítání obrázku...", + "Loading folders..." => "Načítání adresářů...", + "Loading files..." => "Načítání souborů...", + "New Subfolder..." => "Nový adresář...", + "Rename..." => "Přejmenovat...", + "Delete" => "Smazat", + "OK" => "OK", + "Cancel" => "Zrušit", + "Select" => "Vybrat", + "Select Thumbnail" => "Vybrat náhled", + "Select Thumbnails" => "Vybrat náhled", + "View" => "Zobrazit", + "Download" => "Stažení", + "Download files" => "Stáhnout soubory", + "Clipboard" => "Schránka", + "Checking for new version..." => "Zkontrolovat novou verzi...", + "Unable to connect!" => "Nelze připojit!", + "Download version {version} now!" => "Stáhnout verzi {version} nyní!", + "KCFinder is up to date!" => "KCFinder je aktuální!", + "Licenses:" => "Licence:", + "Attention" => "Upozornění", + "Question" => "Otázka", + "Yes" => "Ano", + "No" => "Ne", + "You cannot rename the extension of files!" => "Nemůžete přejmenovat příponu souborů!", + "Uploading file {number} of {count}... {progress}" => "Nahrávám soubor {number} z {count}... {progress}", + "Failed to upload {filename}!" => "Nepodařilo se nahrát soubor {filename}!", + "Close" => "Zavřít", + "Previous" => "Předchozí", + "Next" => "Další", + "Confirmation" => "Potvrzení", + "Warning" => "Varování", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/da.php b/additions/kcfinder/lang/da.php new file mode 100644 index 0000000..e6b1840 --- /dev/null +++ b/additions/kcfinder/lang/da.php @@ -0,0 +1,127 @@ + + * Danish corrections by Mikael Lyngvig + */ + +$lang = array( + + '_locale' => "da_DK.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d/%m/%Y %H:%M", + + "You don't have permissions to upload files." => "Du har ikke tilladelser til at uploade filer.", + "You don't have permissions to browse server." => "Du har ikke tilladelser til at se filer.", + "Cannot move uploaded file to target folder." => "Kan ikke flytte fil til destinations mappe.", + "Unknown error." => "Ukendt fejl.", + "The uploaded file exceeds {size} bytes." => "Den uploadede fil overskrider {size} bytes.", + "The uploaded file was only partially uploaded." => "Den uploadede fil blev kun delvist uploadet.", + "No file was uploaded." => "Ingen fil blev uploadet.", + "Missing a temporary folder." => "Mangler en midlertidig mappe.", + "Failed to write file." => "Kunne ikke skrive fil.", + "Denied file extension." => "Nægtet filtypenavn.", + "Unknown image format/encoding." => "Ukendt billedformat / kodning.", + "The image is too big and/or cannot be resized." => "Billedet er for stort og / eller kan ikke ændres.", + "Cannot create {dir} folder." => "Kan ikke lave mappen {dir}.", + "Cannot rename the folder." => "Kan ikke omdøbe mappen.", + "Cannot write to upload folder." => "Kan ikke skrive til upload mappen.", + "Cannot read .htaccess" => "Ikke kan læse .htaccess", + "Incorrect .htaccess file. Cannot rewrite it!" => "Forkert .htaccess fil. Kan ikke omskrive den!", + "Cannot read upload folder." => "Kan ikke læse upload mappen.", + "Cannot access or create thumbnails folder." => "Kan ikke få adgang til eller oprette miniature mappe.", + "Cannot access or write to upload folder." => "Kan ikke få adgang til eller skrive til upload mappe.", + "Please enter new folder name." => "Indtast venligst nyt mappenavn.", + "Unallowable characters in folder name." => "Ugyldige tegn i mappens navn.", + "Folder name shouldn't begins with '.'" => "Mappenavne bør ikke begynde med '.'", + "Please enter new file name." => "Indtast venligst nyt filnavn.", + "Unallowable characters in file name." => "Ugyldige tegn i filens navn", + "File name shouldn't begins with '.'" => "Filnavn bør ikke begynde med '.'", + "Are you sure you want to delete this file?" => "Er du sikker på du vil slette denne fil?", + "Are you sure you want to delete this folder and all its content?" => "Er du sikker på du vil slette denne mappe og al dens indhold?", + "Non-existing directory type." => "Ikke-eksisterende mappe type.", + "Undefined MIME types." => "Udefinerede MIME typer.", + "Fileinfo PECL extension is missing." => "Filinfo PECL udvidelse mangler.", + "Opening fileinfo database failed." => "Åbning af filinfo database mislykkedes.", + "You can't upload such files." => "Du kan ikke uploade sådanne filer.", + "The file '{file}' does not exist." => "Filen '{file}' eksisterer ikke.", + "Cannot read '{file}'." => "Kan ikke læse '{file}'.", + "Cannot copy '{file}'." => "Kan ikke kopiere '{file}'.", + "Cannot move '{file}'." => "Kan ikke flytte '{file}'.", + "Cannot delete '{file}'." => "Kan ikke slette '{file}'.", + "Cannot delete the folder." => "Kan ikke slette mappen.", + "Click to remove from the Clipboard" => "Klik for at fjerne fra udklipsholderen.", + "This file is already added to the Clipboard." => "Denne fil er allerede føjet til udklipsholderen.", + "The files in the Clipboard are not readable." => "Filerne i udklipsholderen ikke kan læses.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} filer i udklipsholderen ikke kan læses. Ønsker du at kopiere resten?", + "The files in the Clipboard are not movable." => "Filerne i udklipsholderen kan ikke flyttes.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} filer i udklipsholderen er ikke flytbare. Ønsker du at flytte resten?", + "The files in the Clipboard are not removable." => "Filerne i udklipsholderen kan ikke fjernes.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} filer i udklipsholderen kan ikke fjernes. Ønsker du at slette resten?", + "The selected files are not removable." => "De valgte filer er ikke flytbare.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} valgte filer kan ikke fjernes. Ønsker du at slette resten?", + "Are you sure you want to delete all selected files?" => "Er du sikker på du vil slette alle markerede filer?", + "Failed to delete {count} files/folders." => "Kunne ikke slette {count} filer/mapper.", + "A file or folder with that name already exists." => "En fil eller mappe med det navn findes allerede.", + "Copy files here" => "Kopier filer her.", + "Move files here" => "Flyt filer her.", + "Delete files" => "Slet filer.", + "Clear the Clipboard" => "Tøm udklipsholderen", + "Are you sure you want to delete all files in the Clipboard?" => "Tøm udklipsholderen?", + "Copy {count} files" => "Kopier {count} filer", + "Move {count} files" => "Flyt {count} filer", + "Add to Clipboard" => "Tilføj til udklipsholderen", + "Inexistant or inaccessible folder." => "Manglende eller utilgængelig mappe.", + "New folder name:" => "Nyt mappenavn:", + "New file name:" => "Nyt filnavn:", + "Upload" => "Upload", + "Refresh" => "Genopfrisk", + "Settings" => "Indstillinger", + "Maximize" => "Maksimer", + "About" => "Om", + "files" => "filer", + "selected files" => "Valgte filer", + "View:" => "Åben:", + "Show:" => "Vis:", + "Order by:" => "Sorter efter:", + "Thumbnails" => "Miniaturer", + "List" => "Liste", + "Name" => "Navn", + "Type" => "Type", + "Size" => "Størrelse", + "Date" => "Dato", + "Descending" => "Aftagende", + "Uploading file..." => "Uploader fil...", + "Loading image..." => "Indlæser billede...", + "Loading folders..." => "Indlæser mapper...", + "Loading files..." => "Indlæser filer...", + "New Subfolder..." => "Ny undermappe...", + "Rename..." => "Omdøb...", + "Delete" => "Slet", + "OK" => "Ok", + "Cancel" => "Fortryd", + "Select" => "Vælg", + "Select Thumbnail" => "Vælg miniature", + "Select Thumbnails" => "Vælg miniaturer", + "View" => "Åben", + "Download" => "Download", + "Download files" => "Download filer", + "Clipboard" => "Udklipsholder", + "Checking for new version..." => "Søger efter ny version...", + "Unable to connect!" => "Kan ikke forbinde!", + "Download version {version} now!" => "Hent version {version} nu!", + "KCFinder is up to date!" => "KCFinder er opdateret!", + "Licenses:" => "Licenser:", + "Attention" => "Vigtigt", + "Question" => "Spørgsmål", + "Yes" => "Ja", + "No" => "Nej", + "You cannot rename the extension of files!" => "Du kan ikke ændre typen på filer!", + "Uploading file {number} of {count}... {progress}" => "Uploader fil {number} af {count} ... {progress}", + "Failed to upload {filename}!" => "Kunne ikke uploade {filename}!", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/de.php b/additions/kcfinder/lang/de.php new file mode 100644 index 0000000..42a4ae6 --- /dev/null +++ b/additions/kcfinder/lang/de.php @@ -0,0 +1,132 @@ + + */ + +$lang = array( + + '_locale' => "de_DE.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B.%Y %k:%M", + '_dateTimeMid' => "%a %e %b %Y %k:%M", + '_dateTimeSmall' => "%d.%m.%Y %k:%M", + + "You don't have permissions to upload files." => "Du hast keine Berechtigung Dateien hoch zu laden.", + "You don't have permissions to browse server." => "Fehlende Berechtigung.", + "Cannot move uploaded file to target folder." => "Kann hochgeladene Datei nicht in den Zielordner verschieben.", + "Unknown error." => "Unbekannter Fehler.", + "The uploaded file exceeds {size} bytes." => "Die hochgeladene Datei überschreitet die erlaubte Dateigröße von {size} bytes.", + "The uploaded file was only partially uploaded." => "Die Datei wurde nur teilweise hochgeladen.", + "No file was uploaded." => "Keine Datei hochgeladen.", + "Missing a temporary folder." => "Temporärer Ordner fehlt.", + "Failed to write file." => "Fehler beim schreiben der Datei.", + "Denied file extension." => "Die Dateiendung ist nicht erlaubt.", + "Unknown image format/encoding." => "Unbekanntes Bildformat/encoding.", + "The image is too big and/or cannot be resized." => "Das Bild ist zu groß und/oder kann nicht verkleinert werden.", + "Cannot create {dir} folder." => "Ordner {dir} kann nicht angelegt werden.", + "Cannot rename the folder." => "Der Ordner kann nicht umbenannt werden.", + "Cannot write to upload folder." => "Kann nicht in den upload Ordner schreiben.", + "Cannot read .htaccess" => "Kann .htaccess Datei nicht lesen", + "Incorrect .htaccess file. Cannot rewrite it!" => "Falsche .htaccess Datei. Die Datei kann nicht geschrieben werden", + "Cannot read upload folder." => "Ziel Ordner kann nicht gelesen werden.", + "Cannot access or create thumbnails folder." => "Kann thumbnails Ordner nicht erstellen oder darauf zugreifen.", + "Cannot access or write to upload folder." => "Kann nicht auf den upload Ordner zugreifen oder darin schreiben.", + "Please enter new folder name." => "Bitte einen neuen Ordnernamen angeben.", + "Unallowable characters in folder name." => "Der Ordnername enthält unerlaubte Zeichen.", + "Folder name shouldn't begins with '.'" => "Ordnernamen sollten nicht mit '.' beginnen.", + "Please enter new file name." => "Bitte gib einen neuen Dateinamen an.", + "Unallowable characters in file name." => "Der Dateiname enthält unerlaubte Zeichen", + "File name shouldn't begins with '.'" => "Dateinamen sollten nicht mit '.' beginnen.", + "Are you sure you want to delete this file?" => "Willst Du die Datei wirklich löschen?", + "Are you sure you want to delete this folder and all its content?" => "Willst Du wirklich diesen Ordner und seinen gesamten Inhalt löschen?", + "Non-existing directory type." => "Der Ordner Typ existiert nicht.", + "Undefined MIME types." => "Unbekannte MIME Typen.", + "Fileinfo PECL extension is missing." => "PECL extension für Dateiinformationen fehlt", + "Opening fileinfo database failed." => "√ñffnen der Dateiinfo Datenbank fehlgeschlagen.", + "You can't upload such files." => "Du kannst solche Dateien nicht hochladen.", + "The file '{file}' does not exist." => "Die Datei '{file}' existiert nicht.", + "Cannot read '{file}'." => "Kann Datei '{file}' nicht lesen.", + "Cannot copy '{file}'." => "Kann Datei '{file}' nicht kopieren.", + "Cannot move '{file}'." => "Kann Datei '{file}' nicht verschieben.", + "Cannot delete '{file}'." => "Kann Datei '{file}' nicht löschen.", + "Cannot delete the folder." => "Der Ordner kann nicht gelöscht werden.", + "Click to remove from the Clipboard" => "Zum entfernen aus der Zwischenablage, hier klicken.", + "This file is already added to the Clipboard." => "Diese Datei wurde bereits der Zwischenablage hinzugefügt.", + "The files in the Clipboard are not readable." => "Die Dateien in der Zwischenablage können nicht gelesen werden.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} Dateien in der Zwischenablage sind nicht lesbar. Möchtest Du die Übrigen trotzdem kopieren?", + "The files in the Clipboard are not movable." => "Die Dateien in der Zwischenablage können nicht verschoben werden.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} Dateien in der Zwischenablage sind nicht verschiebbar. Möchtest Du die Übrigen trotzdem verschieben?", + "The files in the Clipboard are not removable." => "Die Dateien in der Zwischenablage können nicht gelöscht werden.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} Dateien in der Zwischenablage können nicht gelöscht werden. Möchtest Du die Übrigen trotzdem löschen?", + "The selected files are not removable." => "Die ausgewählten Dateien können nicht gelöscht werden.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} der ausgewählten Dateien können nicht gelöscht werden. Möchtest Du die Übrigen trotzdem löschen?", + "Are you sure you want to delete all selected files?" => "Möchtest Du wirklich alle ausgewählten Dateien löschen?", + "Failed to delete {count} files/folders." => "Konnte {count} Dateien/Ordner nicht löschen.", + "A file or folder with that name already exists." => "Eine Datei oder ein Ordner mit dem Namen existiert bereits.", + "Copy files here" => "Kopiere Dateien hier hin.", + "Move files here" => "Verschiebe Dateien hier hin.", + "Delete files" => "Lösche Dateien.", + "Clear the Clipboard" => "Zwischenablage leeren", + "Are you sure you want to delete all files in the Clipboard?" => "Willst Du wirklich alle Dateien in der Zwischenablage löschen?", + "Copy {count} files" => "Kopiere {count} Dateien", + "Move {count} files" => "Verschiebe {count} Dateien", + "Add to Clipboard" => "Der Zwischenablage hinzufügen", + "Inexistant or inaccessible folder." => "Ordnertyp existiert nicht.", + "New folder name:" => "Neuer Ordnername:", + "New file name:" => "Neuer Dateiname:", + "Upload" => "Hochladen", + "Refresh" => "Aktualisieren", + "Settings" => "Einstellungen", + "Maximize" => "Maximieren", + "About" => "Über", + "files" => "Dateien", + "selected files" => "ausgewählte Dateien", + "View:" => "Ansicht:", + "Show:" => "Zeige:", + "Order by:" => "Ordnen nach:", + "Thumbnails" => "Miniaturansicht", + "List" => "Liste", + "Name" => "Name", + "Type" => "Typ", + "Size" => "Größe", + "Date" => "Datum", + "Descending" => "Absteigend", + "Uploading file..." => "Lade Datei hoch...", + "Loading image..." => "Lade Bild...", + "Loading folders..." => "Lade Ordner...", + "Loading files..." => "Lade Dateien...", + "New Subfolder..." => "Neuer Unterordner...", + "Rename..." => "Umbenennen...", + "Delete" => "Löschen", + "OK" => "OK", + "Cancel" => "Abbruch", + "Select" => "Auswählen", + "Select Thumbnail" => "Wähle Miniaturansicht", + "Select Thumbnails" => "Wähle Miniaturansicht", + "View" => "Ansicht", + "Download" => "Download", + "Download files" => "Dateien herunterladen", + "Clipboard" => "Zwischenablage", + "Checking for new version..." => "Nach neuer Version suchen", + "Unable to connect!" => "Kann keine Verbindung herstellen!", + "Download version {version} now!" => "Version {version} herunterladen!", + "KCFinder is up to date!" => "KCFinder ist aktuell!", + "Licenses:" => "Lizenz", + "Attention" => "Achtung", + "Question" => "Frage", + "Yes" => "Ja", + "No" => "Nein", + "You cannot rename the extension of files!" => "Die Umbenennung von Datei-Erweiterungen ist nicht möglich!", + "Uploading file {number} of {count}... {progress}" => "Lade Datei {number} von {count} hoch ... {progress}", + "Failed to upload {filename}!" => "Hochladen von {filename} fehlgeschlagen!", + "Close" => "Schließen", + "Previous" => "Vorherige", + "Next" => "Nächste", + "Confirmation" => "Bestätigung", + "Warning" => "Warnung" +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/el.php b/additions/kcfinder/lang/el.php new file mode 100644 index 0000000..e5fcfd9 --- /dev/null +++ b/additions/kcfinder/lang/el.php @@ -0,0 +1,132 @@ + "el_GR.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "Δεν έχετε δικαίωμα να ανεβάσετε αρχεία.", + "You don't have permissions to browse server." => "Δεν έχετε δικαίωμα να δείτε τα αρχεία στο διακομιστή.", + "Cannot move uploaded file to target folder." => "Το αρχείο δε μπορεί να μεταφερθεί στο φάκελο προορισμού.", + "Unknown error." => "Άγνωστο σφάλμα.", + "The uploaded file exceeds {size} bytes." => "Το αρχείο υπερβαίνει το μέγεθος των {size} bytes.", + "The uploaded file was only partially uploaded." => "Ένα μόνο μέρος του αρχείου ανέβηκε.", + "No file was uploaded." => "Κανένα αρχείο δεν ανέβηκε.", + "Missing a temporary folder." => "Λείπει ο φάκελος των προσωρινών αρχείων.", + "Failed to write file." => "Σφάλμα στη τροποποίηση του αρχείου.", + "Denied file extension." => "Δεν επιτρέπονται αυτού του είδους αρχεία.", + "Unknown image format/encoding." => "Αγνωστη κωδικοποίηση εικόνας.", + "The image is too big and/or cannot be resized." => "Η εικόνα είναι πάρα πολύ μεγάλη και/η δεν μπορεί να αλλάξει μέγεθος.", + "Cannot create {dir} folder." => "Αδύνατον να δημιουργηθεί ο φάκελος {dir}.", + "Cannot rename the folder." => "Αδύνατη η μετονομασία του φακέλου.", + "Cannot write to upload folder." => "Αδύνατη η εγγραφή στο φάκελο προορισμού.", + "Cannot read .htaccess" => "Αδύνατη η ανάγνωση του .htaccess", + "Incorrect .htaccess file. Cannot rewrite it!" => "Εσφαλμένο αρχείο .htaccess. Αδύνατη η τροποποίησή του!", + "Cannot read upload folder." => "Μη αναγνώσιμος φάκελος προορισμού.", + "Cannot access or create thumbnails folder." => "Αδύνατη η πρόσβαση και ανάγνωση του φακέλου με τις μικρογραφίες εικόνων.", + "Cannot access or write to upload folder." => "Αδύνατη η πρόσβαση και τροποποίηση του φακέλου προορισμού.", + "Please enter new folder name." => "Παρακαλούμε εισάγετε ένα νέο όνομα φακέλου. ", + "Unallowable characters in folder name." => "Μη επιτρεπτοί χαρακτήρες στο όνομα φακέλου.", + "Folder name shouldn't begins with '.'" => "Το όνομα του φακέλου δε πρέπει να αρχίζει με '.'", + "Please enter new file name." => "Παρακαλούμε εισάγετε ένα νέο όνομα αρχείου.", + "Unallowable characters in file name." => "Μη επιτρεπτοί χαρακτήρες στο όνομα αρχείου.", + "File name shouldn't begins with '.'" => "Το όνομα του αρχείου δεν πρέπει να αρχίζει με '.'", + "Are you sure you want to delete this file?" => "Σίγουρα θέλετε να διαγράψετε αυτό το αρχείο;", + "Are you sure you want to delete this folder and all its content?" => "Σίγουρα θέλετε να διαγράψετε αυτό το φάκελο μαζί με όλα τα περιεχόμενα;", + "Non-existing directory type." => "Ανύπαρκτος τύπος φακέλου.", + "Undefined MIME types." => "Απροσδιόριστοι τύποι MIME.", + "Fileinfo PECL extension is missing." => "Η επέκταση πληροφορίας αρχείου PECL δεν υπάρχει.", + "Opening fileinfo database failed." => "Η πρόσβαση στις πληροφορίες του αρχείου απέτυχε.", + "You can't upload such files." => "Δε μπορείτε να ανεβάσετε τέτοια αρχεία.", + "The file '{file}' does not exist." => "Το αρχείο '{file}' δεν υπάρχει.", + "Cannot read '{file}'." => "Αρχείο '{file}' μη αναγνώσιμο.", + "Cannot copy '{file}'." => "Αδύνατη η αντιγραφή του '{file}'.", + "Cannot move '{file}'." => "Αδύνατη η μετακίνηση του '{file}'.", + "Cannot delete '{file}'." => "Αδύνατη η διαγραφή του '{file}'.", + "Cannot delete the folder." => "Αδύνατη η διαγραφή του φακέλου.", + "Click to remove from the Clipboard" => "Πατήστε για διαγραφή από το Πρόχειρο.", + "This file is already added to the Clipboard." => "Αυτό το αρχείο βρίσκεται ήδη στο Πρόχειρο.", + "The files in the Clipboard are not readable." => "Τα αρχεία στο Πρόχειρο είναι μη αναγνώσιμα.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} αρχεία στο Πρόχειρο είναι μη αναγνώσιμα. Θέλετε να αντιγράψετε τα υπόλοιπα;", + "The files in the Clipboard are not movable." => "Τα αρχεία στο Πρόχειρο είναι αδύνατο να μετακινηθούν.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} αρχεία στο Πρόχειρο δεν είναι δυνατό να μετακινηθούν. Θέλετε να μετακινήσετε τα υπόλοιπα;", + "The files in the Clipboard are not removable." => "Τα αρχεία στο Πρόχειρο είναι αδύνατο να αφαιρεθούν.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} αρχεία στο Πρόχειρο δεν είναι δυνατό να αφαιρεθούν. Θέλετε να αφαιρέσετε τα υπόλοιπα;", + "The selected files are not removable." => "Τα επιλεγμένα αρχεία δε μπορούν να αφαιρεθούν.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} επιλεγμένα αρχεία δεν είναι δυνατό να αφαιρεθούν. Θέλετε να διαγράψετε τα υπόλοιπα;", + "Are you sure you want to delete all selected files?" => "Σίγουρα θέλετε να διαγράψετε όλα τα επιλεγμένα αρχεία;", + "Failed to delete {count} files/folders." => "Η διαγραφή {count} αρχείων/φακέλων απέτυχε.", + "A file or folder with that name already exists." => "Ένα αρχείο ή φάκελος με αυτό το όνομα υπάρχει ήδη.", + "Copy files here" => "Αντιγράψτε αρχεία εδώ.", + "Move files here" => "Μετακινήστε αρχεία εδώ.", + "Delete files" => "Διαγραφή αρχείων", + "Clear the Clipboard" => "Καθαρισμός Clipboard", + "Are you sure you want to delete all files in the Clipboard?" => "Σίγουρα θέλετε να διαγράψετε όλα τα αρχεία από το Πρόχειρο;", + "Copy {count} files" => "Αντιγραφή {count} αρχείων.", + "Move {count} files" => "Μετακίνηση {count} αρχείων.", + "Add to Clipboard" => "Προσθήκη στο Πρόχειρο", + "Inexistant or inaccessible folder." => "Ανύπαρκτος η μη προσβάσιμος φάκελος.", + "New folder name:" => "Νέο όνομα φακέλου:", + "New file name:" => "Νέο όνομα αρχείου:", + "Upload" => "Ανέβασμα", + "Refresh" => "Ανανέωση", + "Settings" => "Ρυθμίσεις", + "Maximize" => "Μεγιστοποίηση", + "About" => "Σχετικά", + "files" => "αρχεία", + "selected files" => "επιλεγμένα αρχεία", + "View:" => "Προβολή:", + "Show:" => "Εμφάνιση:", + "Order by:" => "Ταξινόμηση κατά:", + "Thumbnails" => "Μικρογραφίες", + "List" => "Λίστα", + "Name" => "Όνομα", + "Type" => "Τύπος", + "Size" => "Μέγεθος", + "Date" => "Ημερομηνία", + "Descending" => "Φθίνουσα", + "Uploading file..." => "Το αρχείο ανεβαίνει...", + "Loading image..." => "Η εικόνα φορτώνει...", + "Loading folders..." => "Οι φάκελοι φορτώνουν...", + "Loading files..." => "Τα αρχεία φορτώνουν...", + "New Subfolder..." => "Νέος υποφάκελος...", + "Rename..." => "Μετονομασία...", + "Delete" => "Διαγραφή", + "OK" => "OK", + "Cancel" => "Ακύρωση", + "Select" => "Επιλογή", + "Select Thumbnail" => "Επιλογή μικρογραφίας", + "Select Thumbnails" => "Επιλέξτε μικρογραφίες", + "View" => "Προβολή", + "Download" => "Κατέβασμα", + "Download files" => "Κατέβασμα αρχείων", + "Clipboard" => "Πρόχειρο", + "Checking for new version..." => "Ελεγχος για νέα έκδοση...", + "Unable to connect!" => "Αδύνατη η σύνδεση!", + "Download version {version} now!" => "Κατεβάστε την έκδοση {version} τώρα!", + "KCFinder is up to date!" => "Το KCFinder είναι ενημερωμένο με τη πιο πρόσφατη έκδοση!", + "Licenses:" => "Άδειες:", + "Attention" => "Προσοχή", + "Question" => "Ερώτηση", + "Yes" => "Ναι", + "No" => "Όχι", + "You cannot rename the extension of files!" => "Δεν έχετε δικαίωμα να αλλάζετε την κατάληξη των αρχείων!", + "Uploading file {number} of {count}... {progress}" => "Ανέβασμα αρχείου {number} από {count}... {progress}", + "Failed to upload {filename}!" => "Αποτυχία στο ανέβασμα του {filename}!", + "Close" => "Κλείσιμο", + "Previous" => "Προηγούμενη", + "Next" => "Επόμενη", + "Confirmation" => "Επιβεβαίωση", + "Warning" => "Προειδοποίηση", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/en.php b/additions/kcfinder/lang/en.php new file mode 100644 index 0000000..d520800 --- /dev/null +++ b/additions/kcfinder/lang/en.php @@ -0,0 +1,25 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +$lang = array( + '_locale' => "en_US.UTF-8", + '_charset' => "utf-8", + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %B %e, %Y %I:%M %p", + '_dateTimeMid' => "%a %b %e %Y %I:%M %p", + '_dateTimeSmall' => "%m/%d/%Y %I:%M %p", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/es.php b/additions/kcfinder/lang/es.php new file mode 100644 index 0000000..edb98f0 --- /dev/null +++ b/additions/kcfinder/lang/es.php @@ -0,0 +1,127 @@ + "es_ES.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "No tiene permiso para subir archivos.", + "You don't have permissions to browse server." => "No tiene permiso para visualizar archivos.", + "Cannot move uploaded file to target folder." => "No puede mover archivos al directorio de destino.", + "Unknown error." => "Error desconocido.", + "The uploaded file exceeds {size} bytes." => "El archivo excede el tamaño permitido ({size} bytes).", + "The uploaded file was only partially uploaded." => "El archivo solo fué parcialmente cargado.", + "No file was uploaded." => "El archivo no fué cargado.", + "Missing a temporary folder." => "No se puede encontrar el directorio temporal.", + "Failed to write file." => "No se pudo crear el archivo.", + "Denied file extension." => "Extensión de archivo denegada.", + "Unknown image format/encoding." => "Formato / codificación de imagen desconocido.", + "The image is too big and/or cannot be resized." => "La imagen es muy grande o no se puede redimensionar.", + "Cannot create {dir} folder." => "No se puede crear la carpeta {dir}.", + "Cannot rename the folder." => "No se puede renombrar la carpeta.", + "Cannot write to upload folder." => "No se puede escribir en directorio de carga de archivos.", + "Cannot read .htaccess" => "No se puede leer el archivo .htaccess.", + "Incorrect .htaccess file. Cannot rewrite it!" => "Archivo .htaccess incorrecto. ¡No puede sobreescribirlo!", + "Cannot read upload folder." => "No se puede leer la carpeta de carga de archivos.", + "Cannot access or create thumbnails folder." => "No se puede leer o crear carpeta de miniaturas.", + "Cannot access or write to upload folder." => "No se puede leer o escribir en la carpeta de carga de archivos.", + "Please enter new folder name." => "Por favor introduzca el nombre de la nueva carpeta.", + "Unallowable characters in folder name." => "Caracteres inválidos en el nombre de carpeta.", + "Folder name shouldn't begins with '.'" => "El nombre de carpeta no puede comenzar con punto '.'", + "Please enter new file name." => "Por favor introduzca el nuevo nombre del archivo.", + "Unallowable characters in file name." => "Carácteres inválidos en el nombre de archivo.", + "File name shouldn't begins with '.'" => "El nombre de archivo no puede comenzar con punto '.'", + "Are you sure you want to delete this file?" => "Esta seguro de que desea borrar este archivo?", + "Are you sure you want to delete this folder and all its content?" => "Esta seguro de que desea borrar esta carpeta y todo su contenido?", + "Non-existing directory type." => "El tipo de directorio no existe.", + "Undefined MIME types." => "Tipo MIME no definido.", + "Fileinfo PECL extension is missing." => "Archivo PECL con estructura errónea.", + "Opening fileinfo database failed." => "Error abriendo el archivo de información de la base de datos.", + "You can't upload such files." => "No puede cargar tantos archivos.", + "The file '{file}' does not exist." => "El archivo '{file}' no existe.", + "Cannot read '{file}'." => "No se puede leer '{file}'.", + "Cannot copy '{file}'." => "No se puede copiar '{file}'.", + "Cannot move '{file}'." => "No se puede mover '{file}'.", + "Cannot delete '{file}'." => "No se puede borrar '{file}'.", + "Cannot delete the folder." => "No se puede borrrar la carpeta.", + "Click to remove from the Clipboard" => "Haga Click para borrar del portapapeles", + "This file is already added to the Clipboard." => "Este archivo ya fué agregado al portapapeles.", + "The files in the Clipboard are not readable." => "Los archivos en el portapapeles no son legibles.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} archivos en el portapapeles no son legibles. Desea copiar el resto?", + "The files in the Clipboard are not movable." => "Los archivos en el portapapeles no se pueden mover.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} archivos en el portapapeles no se pueden mover. Desea mover el resto?", + "The files in the Clipboard are not removable." => "Los archivos en el portapapeles no se pueden remover.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} archivos en el portapapeles no se pueden remover. Desea borrar el resto?", + "The selected files are not removable." => "Los archivos seleccionados no son removibles.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} archivos seleccionados no son removibles. Desea borrar el resto?", + "Are you sure you want to delete all selected files?" => "Esta seguro de que desea borrar todos los archivos seleccionados?", + "Failed to delete {count} files/folders." => "Falló al borrar {count} archivos/carpetas.", + "A file or folder with that name already exists." => "Existe una carpeta o archivo con el mismo nombre.", + "Copy files here" => "Copiar archivos aquí", + "Move files here" => "Mover archivos aquí", + "Delete files" => "Borrar archivos", + "Clear the Clipboard" => "Limpiar el portapapeles", + "Are you sure you want to delete all files in the Clipboard?" => "Esta seguro de que desea borrar todos los archivos del portapapeles?", + "Copy {count} files" => "Copiar {count} archivos", + "Move {count} files" => "Mover {count} archivos ", + "Add to Clipboard" => "Agregar al portapapeles", + "Inexistant or inaccessible folder." => "Carpeta inexistente o inaccesible.", + "New folder name:" => "Nuevo nombre de carpeta:", + "New file name:" => "Nuevo nombre de archivo:", + "Upload" => "Cargar", + "Refresh" => "Refrescar", + "Settings" => "Preferencias", + "Maximize" => "Maximizar", + "About" => "Acerca de", + "files" => "Archivos", + "selected files" => "Archivos seleccionados", + "View:" => "Ver:", + "Show:" => "Mostrar:", + "Order by:" => "Ordenar por:", + "Thumbnails" => "Miniaturas", + "List" => "Lista", + "Name" => "Nombre", + "Type" => "Tipo", + "Size" => "Tamaño", + "Date" => "Fecha", + "Descending" => "Decendente", + "Uploading file..." => "Cargando archivo...", + "Loading image..." => "Cargando imagen...", + "Loading folders..." => "Cargando carpetas...", + "Loading files..." => "Cargando archivos...", + "New Subfolder..." => "Nuevo subdirectorio...", + "Rename..." => "Renombrar...", + "Delete" => "Eliminar", + "OK" => "OK", + "Cancel" => "Cancelar", + "Select" => "Seleccionar", + "Select Thumbnail" => "Seleccionar miniatura", + "Select Thumbnails" => "Seleccionar miniaturas", + "View" => "Ver", + "Download" => "Descargar", + "Download files" => "Descargar archivos", + "Clipboard" => "Portapapeles", + "Checking for new version..." => "Verificando nuevas versiones...", + "Unable to connect!" => "¡No se pudo realizar la conexión!", + "Download version {version} now!" => "¡Descarga la versión {version} ahora!", + "KCFinder is up to date!" => "¡KCFinder está actualizado!", + "Licenses:" => "Licencias:", + "Attention" => "Atención", + "Question" => "Pregunta", + "Yes" => "Si", + "No" => "No", + "You cannot rename the extension of files!" => "¡Usted no puede renombrar la extensión de los archivos!", + "Uploading file {number} of {count}... {progress}" => "Cargando archivo {number} de {count}... {progress}", + "Failed to upload {filename}!" => "¡No se pudo cargar el archivo {filename}!", +); + +?> diff --git a/additions/kcfinder/lang/et.php b/additions/kcfinder/lang/et.php new file mode 100644 index 0000000..3553b16 --- /dev/null +++ b/additions/kcfinder/lang/et.php @@ -0,0 +1,127 @@ + "et_EE.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%e. %B %Y %H:%M", + '_dateTimeMid' => "%e. %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "Sul pole failide üleslaadimiseks vajalikke õiguseid.", + "You don't have permissions to browse server." => "Sul ei ole serveri sirvimiseks vajalikke õiguseid.", + "Cannot move uploaded file to target folder." => "Üleslaetud faili liigutamine ebaõnnestus.", + "Unknown error." => "Tundmatu viga.", + "The uploaded file exceeds {size} bytes." => "Üleslaetud fail on suurem kui lubatud {size} baiti", + "The uploaded file was only partially uploaded." => "Fail laeti üles ainult osaliselt.", + "No file was uploaded." => "Faili ei õnnestunud üles laadida.", + "Missing a temporary folder." => "Failide ajutine kataloog on puudu.", + "Failed to write file." => "Faili loomine ebaõnnestus.", + "Denied file extension." => "Faili laiend ei ole lubatud.", + "Unknown image format/encoding." => "Tundmatu pildi formaat/kodeering.", + "The image is too big and/or cannot be resized." => "Pilt on liiga suur ja/või selle suurust ei saa muuta.", + "Cannot create {dir} folder." => "Kataloogi {dir} loomine ebaõnnestus.", + "Cannot rename the folder." => "Kataloogi ei saa ümber nimetada.", + "Cannot write to upload folder." => "Üleslaadimise kataloogi ei saa kirjutada.", + "Cannot read .htaccess" => ".htaccess faili ei saa lugeda.", + "Incorrect .htaccess file. Cannot rewrite it!" => "Vigane .htacess fail. Ümberkirjutamine ebaõnnestus.", + "Cannot read upload folder." => "Üleslaadimise kataloogi ei saa lugeda.", + "Cannot access or create thumbnails folder." => "Pisipiltide kataloogi ei saa lugeda või seda luua.", + "Cannot access or write to upload folder." => "Üleslaadimise kataloogi ei saa lugeda või seda luua.", + "Please enter new folder name." => "Sisesta uus kataloogi nimi.", + "Unallowable characters in folder name." => "Keelatud tähemärk kataloogi nimes.", + "Folder name shouldn't begins with '.'" => "Kataloogi nimi ei tohi alata punktiga.", + "Please enter new file name." => "Sisesta uus faili nimi.", + "Unallowable characters in file name." => "Keelatud tähemärgid faili nimes.", + "File name shouldn't begins with '.'" => "Failinimi ei tohi alata punktiga.", + "Are you sure you want to delete this file?" => "Oled sa kindel, et soovid selle faili kustutada?", + "Are you sure you want to delete this folder and all its content?" => "Oled sa kindel, et soovid selle kataloogi koos sisuga kustutada?", + "Non-existing directory type." => "Olematu kataloogi tüüp.", + "Undefined MIME types." => "Määramata MIME tüüp.", + "Fileinfo PECL extension is missing." => "Fileinfo PECL laiendus on puudu.", + "Opening fileinfo database failed." => "Failiinfo andmebaasi avamine ebaõnnestus.", + "You can't upload such files." => "Selliseid faile ei saa üles laadida.", + "The file '{file}' does not exist." => "Faili '{file}' ei ole olemas.", + "Cannot read '{file}'." => "Faili '{file}' ei õnnestunud lugeda.", + "Cannot copy '{file}'." => "Faili '{file}' ei õnnestunud kopeerida.", + "Cannot move '{file}'." => "Faili '{file}' ei õnnestunud liigutada.", + "Cannot delete '{file}'." => "Faili '{file}' ei õnnestunud kustutada.", + "Cannot delete the folder." => "Kataloogi ei saa kustutada.", + "Click to remove from the Clipboard" => "Kliki, et eemaldada lõikelaualt.", + "This file is already added to the Clipboard." => "Fail on juba lõikelauale lisatud.", + "The files in the Clipboard are not readable." => "Lõikelaual olevad failid ei ole loetavad.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} faili lõikelaual ei ole loetavad. Kas sa soovid ülejäänud kopeerida?", + "The files in the Clipboard are not movable." => "Lõikelaul olevad failid ei ole liigutatavad.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} faili lõikelaual ei ole liigutatavad. Kas sa soovid ülejäänud liigutada?", + "The files in the Clipboard are not removable." => "Lõikelaul olevad failid ei ole kustutatavad.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} faili lõikelaual ei ole kustutatavad. Kas sa soovid ülejäänud kustutada?", + "The selected files are not removable." => "Valitud faile ei saa kustutada.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} valitud faili ei saa kustutada. Kas sa soovid ülejäänud kustutada?", + "Are you sure you want to delete all selected files?" => "Oled sa kindel, et soovid kõik valitud failid kustutada?", + "Failed to delete {count} files/folders." => "{count} faili/kataloogi kustutamine ebaõnnestus.", + "A file or folder with that name already exists." => "Selle nimega fail/kataloog on juba olemas.", + "Copy files here" => "Kopeeri failid siia", + "Move files here" => "Liiguta failid siia", + "Delete files" => "Kustuta failid", + "Clear the Clipboard" => "Tühjenda lõikelaud", + "Are you sure you want to delete all files in the Clipboard?" => "Oled sa kindel, et soovid kustutada kõik lõikelaual olevad failid?", + "Copy {count} files" => "Kopeeri {count} faili", + "Move {count} files" => "Liiguta {count} faili", + "Add to Clipboard" => "Lisa lõikelauale", + "Inexistant or inaccessible folder." => "Olematu või ligipääsmatu kataloog.", + "New folder name:" => "Uus kataloogi nimi:", + "New file name:" => "Uus faili nimi:", + "Upload" => "Lae üles", + "Refresh" => "Värskenda", + "Settings" => "Seaded", + "Maximize" => "Täisekraan", + "About" => "Info", + "files" => "failid", + "selected files" => "valitud failid", + "View:" => "Vaade:", + "Show:" => "Näita:", + "Order by:" => "Sorteeri:", + "Thumbnails" => "Pisipildid", + "List" => "Nimekiri", + "Name" => "Nimi", + "Type" => "Tüüp", + "Size" => "Suurus", + "Date" => "Kuupäev", + "Descending" => "Kahanev", + "Uploading file..." => "Laen faili...", + "Loading image..." => "Laen pilti...", + "Loading folders..." => "Laen katalooge...", + "Loading files..." => "Laen faile...", + "New Subfolder..." => "Uus alamkataloog...", + "Rename..." => "Nimeta ümber...", + "Delete" => "Kustuta", + "OK" => "OK", + "Cancel" => "Loobu", + "Select" => "Vali", + "Select Thumbnail" => "Vali pisipilt", + "Select Thumbnails" => "Vali pisipildid", + "View" => "Vaata", + "Download" => "Lae alla", + "Download files" => "Lae failid alla", + "Clipboard" => "Lõikelaud", + "Checking for new version..." => "Kontrollin uut versiooni...", + "Unable to connect!" => "Ühendus ebaõnnestus!", + "Download version {version} now!" => "Lae versioon {version} alla!", + "KCFinder is up to date!" => "Uuendusi ei ole!", + "Licenses:" => "Litsentsid:", + "Attention" => "Tähelepanu", + "Question" => "Küsimus", + "Yes" => "Jah", + "No" => "Ei", + "You cannot rename the extension of files!" => "Failide laiendit ei saa muuta!", + "Uploading file {number} of {count}... {progress}" => "Laen üles faili {number} {count}-st... {progress}", + "Failed to upload {filename}!" => "{filename} üleslaadimine ebaõnnestus!", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/fa.php b/additions/kcfinder/lang/fa.php new file mode 100644 index 0000000..3f63f77 --- /dev/null +++ b/additions/kcfinder/lang/fa.php @@ -0,0 +1,267 @@ + + * @copyright 2010 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +$lang = array( + '_locale' => "fa_IR.UTF-8", + '_charset' => "utf-8", + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %B %e, %Y %H:%M", + '_dateTimeMid' => "%a %b %e %Y %H:%M", + '_dateTimeSmall' => "%Y/%m/%d %H:%M", + + "You don't have permissions to upload files." => + ".شما فاقد مجوز برای ارسال فایل ها هستید", + + "You don't have permissions to browse server." => + ".شما فاقد مجوز برای جستجو در سرور هستید", + + "Cannot move uploaded file to target folder." => + ".برنامه نمی تواند فایل بارگذاری شده را انتقال دهد به پوشه مورد نظر", + + "Unknown error." => + ".خطای نامشخص", + + "The uploaded file exceeds {size} bytes." => + ".بایت است {size} حجم فایل بارگذاری شده بیشتر از", + + "The uploaded file was only partially uploaded." => + ".فایل ناقص بارگذاری شد", + + "No file was uploaded." => + ".فایل ارسال نشد", + + "Missing a temporary folder." => + ".پوشه تمپ پیدا نشد", + + "Failed to write file." => + ".خطا در نوشتن فایل", + + "Denied file extension." => + ".پسوند فایل غیر مجاز است", + + "Unknown image format/encoding." => + ".عکس معتبر نیست format/encoding", + + "The image is too big and/or cannot be resized." => + ".عکس انتخابی یا بزرگ است یا تغییر اندازه داده نمی شود", + + "Cannot create {dir} folder." => + ".{dir}مشکل در ساخت پوشه", + + "Cannot write to upload folder." => + ".مشکل در نوشتن اطلاعات در پوشه بارگذاری", + + "Cannot read .htaccess" => + ".htaccess خطا در خواندن فایل", + + "Incorrect .htaccess file. Cannot rewrite it!" => + ".غیرقابل بازنویسی است .htaccess فایل", + + "Cannot read upload folder." => + ".مشکل در خواندن پوشه بارگذاری", + + "Cannot access or create thumbnails folder." => + ".مشکل در دسترسی یا ساخت پوشه تام", + + "Cannot access or write to upload folder." => + ".مشکل در دسترسی برای نوشتن اطلاعات در پوشه بارگذاری", + + "Please enter new folder name." => + ".لطفا نام پوشه جدید را وارد کنید", + + "Unallowable characters in folder name." => + ".نام پوشه دارای حروف غیر مجاز است", + + "Folder name shouldn't begins with '.'" => + ".نام پوشه نباید با '.' شروع شود", + + "Please enter new file name." => + ".لطفا نام فایل جدید را وارد کنید", + + "Unallowable characters in file name." => + ".نام فایل دارای حروف غیر مجاز است", + + "File name shouldn't begins with '.'" => + ".نام فایل نباید با '.' شروع شود", + + "Are you sure you want to delete this file?" => + "آیا از حذف این فایل اطمینان دارید؟", + + "Are you sure you want to delete this folder and all its content?" => + "آیا از حذف این پوشه و تمام محتویات داخل آن اطمینان دارید؟", + + "Inexistant or inaccessible folder." => + "Tipo di cartella non esistente.", + + "Undefined MIME types." => + ".تعریف نشده اند MIME پسوند های ", + + "Fileinfo PECL extension is missing." => + "Manca estensione PECL del file.", + + "Opening fileinfo database failed." => + ".خطا در بازکردن بانک اطلاعاتی مشخصات فایل", + + "You can't upload such files." => + ".شما امکان بارگذاری این فایل ها را ندارید", + + "The file '{file}' does not exist." => + ".موجود نیست '{file}' فایل", + + "Cannot read '{file}'." => + ".'{file}' مشکل در خواندن", + + "Cannot copy '{file}'." => + ".'{file}' نمی توانید کپی کنید", + + "Cannot move '{file}'." => + ".'{file}' نمی توانید انتقال دهید", + + "Cannot delete '{file}'." => + ".'{file}'نمی توانید حذف کنید", + + "Click to remove from the Clipboard" => + ".برای حذف از کلیپ برد کلیک کنید", + + "This file is already added to the Clipboard." => + ".این فایل قبلا در حافظه کلیپ برد افزوده شده است", + + "Copy files here" => + "کپی فایل ها به اینجا", + + "Move files here" => + "انتقال فایل ها به اینجا", + + "Delete files" => + "حذف فایل ها", + + "Clear the Clipboard" => + "پاک کردن حافظه کلیپ برد", + + "Are you sure you want to delete all files in the Clipboard?" => + "آیا از حذف فایل های موجود در کلیپ برد اطمینان دارید؟", + + "Copy {count} files" => + "...تعداد {count} فایل آماده کپی به", + + "Move {count} files" => + "...تعداد {count} فایل آماده انتقال به", + + "Add to Clipboard" => + "افزودن در کلیپ برد", + + "New folder name:" => "نام پوشه جدید:", + "New file name:" => "نام فایل جدید:", + + "Upload" => "ارسال فايل", + "Refresh" => "بارگذاری مجدد", + "Settings" => "تنظيمات", + "Maximize" => "تمام صفحه", + "About" => "درباره", + "files" => "فايل ها", + "View:" => ": نمایش", + "Show:" => ": نمايش", + "Order by:" => ": مرتب کردن بر مبناي", + "Thumbnails" => "نمايش کوچک عکسها", + "List" => "ليست", + "Name" => "نام", + "Size" => "حجم", + "Date" => "تاريخ", + "Type" => "پسوند", + "Descending" => "نزولي", + "Uploading file..." => "... درحال ارسال فایل", + "Loading image..." => "... درحال بارگذاری عکس", + "Loading folders..." => "... درحال بارگذاری پوشه ها", + "Loading files..." => "... درحال بارگذاری فایل ها", + "New Subfolder..." => "...ساخت زیرپوشه جدید", + "Rename..." => "... تغییر نام", + "Delete" => "حذف", + "OK" => "ادامه", + "Cancel" => "انصراف", + "Select" => "انتخاب", + "Select Thumbnail" => "انتخاب عکس با اندازه کوچک", + "View" => "نمایش", + "Download" => "دریافت فایل", + "Clipboard" => "حافضه کلیپ برد", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + ".نام وارد شده تکراری است. پوشه ای با این نام وجود دارد. لطفا نام جدیدی انتخاب کنید", + + "Non-existing directory type." => + ".نوع فهرست وجود ندارد", + + "Cannot delete the folder." => + ".نمی توانید این پوشه را حذف کنید", + + "The files in the Clipboard are not readable." => + ".فایل های موجود در کلیپ برد قابل خواندن نیستند", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "تعداد {count} فایل موجود در کلیپ برد قابل خواندن نیستند. آیا مایلید بقیه فایل ها کپی شوند؟", + + "The files in the Clipboard are not movable." => + ".فایل های موجود در کلیپ برد غیر قابل انتقال هستند. لطفا دسترسی فایل ها را چک کنید", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "تعداد {count} فایل از فایل های موجود در کلیپ برد غیر قابل انتقال هستند. آیا مایلید بقیه فایل ها منتقل شوند؟", + + "The files in the Clipboard are not removable." => + ".فایل های موجود در کلیپ برد قابل پاک شدن نیستند. دسترسی فایل ها را چک کنید", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "تعداد {count} فایل از فایل های موجود در کلیپ برد غیر قابل حذف هستند. آیا مایلید بقیه فایل ها حذف شوند؟", + + "The selected files are not removable." => + ".فایل های انتخاب شده قابل برداشتن نیست", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "تعداد {count} فایل از فایل های انتخابی غیر قابل حذف هستند.آیا مایلید بقیه فایل ها حذف شوند؟", + + "Are you sure you want to delete all selected files?" => + "آیا از حذف تمام فایل های انتخابی اطمینان دارید؟", + + "Failed to delete {count} files/folders." => + ".فایل/پوشه {count} خطا در پاک کردن", + + "A file or folder with that name already exists." => + ".یک پوشه یا فایل با این نام وجود دارد.لطفا نام دیگری انتخاب کنید", + + "selected files" => "فایل های انتخاب شده", + "Select Thumbnails" => "انتخاب عکس های کوچک", + "Download files" => "دریافت فایل ها", + + // SINCE 2.4 + + "Checking for new version..." => "...وجود نسخه جدید را بررسی کن", + "Unable to connect!" => "!مشکل در برقراری ارتباط", + "Download version {version} now!" => "!را دانلود کن {version} همسین حالا نسخه ", + "KCFinder is up to date!" => "!بروز است KCFinder", + "Licenses:" => "مجوز", + "Attention" => "توجه", + "Question" => "پرسش", + "Yes" => "بله", + "No" => "خیر", + + // SINCE 2.41 + + "You cannot rename the extension of files!" => "!شما نمی توانید پسوند فایلها را تغییر دهید", + "Uploading file {number} of {count}... {progress}" => "{progress} ...ارسال شد {count} فایل از {number}", + "Failed to upload {filename}!" => "! {filename} خطا در ارسال" + +); + +?> diff --git a/additions/kcfinder/lang/fi.php b/additions/kcfinder/lang/fi.php new file mode 100644 index 0000000..ab17048 --- /dev/null +++ b/additions/kcfinder/lang/fi.php @@ -0,0 +1,127 @@ + "fi_FI.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "Sinulla ei ole oikeuksia ladata tiedostoja.", + "You don't have permissions to browse server." => "Sinulla ei ole riittäviä oikeuksia tiedostoselaimeen.", + "Cannot move uploaded file to target folder." => "Ladattua tiedostoa ei voi siirtää kohdekansioon. ", + "Unknown error." => "Tuntematon virhe.", + "The uploaded file exceeds {size} bytes." => "Tiedoston koko ylittää {size} tavua.", + "The uploaded file was only partially uploaded." => "Valitsemasi tiedosto latautui vain osittain.", + "No file was uploaded." => "Yhtään tiedostoja ei ladattu.", + "Missing a temporary folder." => "Puuttuu väliaikainen kansio.", + "Failed to write file." => "Tiedostoon kirjoitus epäonnistui.", + "Denied file extension." => "Kielletty tiedostopääte.", + "Unknown image format/encoding." => "Tuntematon kuvatiedosto/koodaus.", + "The image is too big and/or cannot be resized." => "Kuva on liian iso, koon muuttaminen ei onnistu.", + "Cannot create {dir} folder." => "Kansiota {dir} ei voi luoda.", + "Cannot rename the folder." => "Kansiota ei voi nimetä uudelleen.", + "Cannot write to upload folder." => "Latauskansioon ei voi kirjoittaa.", + "Cannot read .htaccess" => ".htaccess tiedostoa ei voi lukea.", + "Incorrect .htaccess file. Cannot rewrite it!" => "Virheellinen .htaccess tiedosto. Tiedostoon ei voi kirjoittaa.", + "Cannot read upload folder." => "Latauskansiota ei voi lukea.", + "Cannot access or create thumbnails folder." => "Esikatselukuvien kansiota ei voi lukea tai kirjoittaa.", + "Cannot access or write to upload folder." => "Latauskansiota ei voi lukea tai kirjoittaa.", + "Please enter new folder name." => "Kirjoita uuden kansion nimi.", + "Unallowable characters in folder name." => "Kiellettyjä merkkejä kansion nimessä.", + "Folder name shouldn't begins with '.'" => "Kansion nimi ei voi alkaa '.'", + "Please enter new file name." => "Kirjoita uusi tiedostonimi.", + "Unallowable characters in file name." => "Kiellettyjä merkkejä tiedoston nimessä.", + "File name shouldn't begins with '.'" => "Tiedoston nimi ei voi alkaa '.'", + "Are you sure you want to delete this file?" => "Haluatko varmasti poistaa tiedoston?", + "Are you sure you want to delete this folder and all its content?" => "Haluatko varmasti poistaa tiedoston sekä kaiken sen sisällön?", + "Non-existing directory type." => "Hakemisto tyyppi ei ole olemassa.", + "Undefined MIME types." => "Määrittämättömät MIME tyypit.", + "Fileinfo PECL extension is missing." => "Fileinfo PECL pääte puuttuu.", + "Opening fileinfo database failed." => "Opening fileinfo database failed.", + "You can't upload such files." => "Tiedostoja ei voi ladata.", + "The file '{file}' does not exist." => "Tiedostoa '{file}' ei ole luotu.", + "Cannot read '{file}'." => "Tiedostoa '{file}' ei voi lukea.", + "Cannot copy '{file}'." => "Tiedostoa '{file}' ei voi kopioda.", + "Cannot move '{file}'." => "Tiedostoa '{file}' ei voi siirtää.", + "Cannot delete '{file}'." => "Tiedostoa '{file}' ei voi poistaa.", + "Cannot delete the folder." => "Kansiota ei voi poistaa.", + "Click to remove from the Clipboard" => "Klikkaa poistaaksesi Leikepöydältä.", + "This file is already added to the Clipboard." => "Tiedosto on jo lisätty Leikepöydälle.", + "The files in the Clipboard are not readable." => "Leikepöydän tiedostot eivät ole luettavissa.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "Leikepöydällä on {count} tiedostoa joita ei voi lukea. Haluatko kopioida loput?", + "The files in the Clipboard are not movable." => "Leikepöydän tiedostoja ei voi siirtää.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "Leikepöydällä on {count} tiedostoa joita ei voi siirtää. Haluatko siirtää loput?", + "The files in the Clipboard are not removable." => "Leikepöydän tiedostoja ei voi poistaa.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "Leikepöydällä on {count} tiedostoa joita ei voi poistaa. Haluatko siirtää loput?", + "The selected files are not removable." => "Valittuja tiedostoja ei voi poistaa.", + "{count} selected files are not removable. Do you want to delete the rest?" => "Leikepöydällä on {count} tiedostoa joita ei voi poistaa. Haluatko poistaa loput?", + "Are you sure you want to delete all selected files?" => "Haluatko varmasti poistaa kaikki valitut tiedostot?", + "Failed to delete {count} files/folders." => "{count} tiedoston/kansion poistaminen epäonnistui.", + "A file or folder with that name already exists." => "Tiedosto tai kansio nimellä on jo luoto.", + "Copy files here" => "Kopio tähän", + "Move files here" => "Siirrä tähän", + "Delete files" => "Poista tiedostot", + "Clear the Clipboard" => "Pyyhi leikepöytä.", + "Are you sure you want to delete all files in the Clipboard?" => "Haluatko varmasti poistaa kaikki tiedostot Leikepöydältä?", + "Copy {count} files" => "Kopio {count} tiedostoa", + "Move {count} files" => "Siirrä {count} tiedostoa", + "Add to Clipboard" => "Lisää Leikepöydälle", + "Inexistant or inaccessible folder." => "Kansiota ei ole olemassa tai sitä ei voi avata.", + "New folder name:" => "Uusi kansion nimi:", + "New file name:" => "Uusi tiedostonimi:", + "Upload" => "Lataa", + "Refresh" => "Päivitä", + "Settings" => "Asetukset", + "Maximize" => "Koko ruutu", + "About" => "Lisätietoja", + "files" => "tiedostot", + "selected files" => "valitut tiedostot", + "View:" => "Näkymä:", + "Show:" => "Näytä:", + "Order by:" => "Järjestä:", + "Thumbnails" => "Esikatselukuvat", + "List" => "Lista", + "Name" => "Nimi", + "Type" => "Tyyppi", + "Size" => "Koko", + "Date" => "Päiväys", + "Descending" => "Laskeva", + "Uploading file..." => "Siirretään tiedostoa...", + "Loading image..." => "Ladataan tiedostoa...", + "Loading folders..." => "Ladataan kansioita...", + "Loading files..." => "Ladataan tiedostoja...", + "New Subfolder..." => "Uusi alikansio...", + "Rename..." => "Nimeä uudelleen...", + "Delete" => "Poista", + "OK" => "OK", + "Cancel" => "Peru", + "Select" => "Valitse", + "Select Thumbnail" => "Valitse esikatselukuva", + "Select Thumbnails" => "Valitse esikatselukuvat", + "View" => "Näytä", + "Download" => "Lataa", + "Download files" => "Lataa tiedostot", + "Clipboard" => "Leikepöytä", + "Checking for new version..." => "Tarkastetaan uusin versio...", + "Unable to connect!" => "Yhteys epäonnistui!", + "Download version {version} now!" => "Lataa versio {version} nyt!", + "KCFinder is up to date!" => "KCFinder uusin versio on käytössä!", + "Licenses:" => "Lisenssit:", + "Attention" => "Huomio", + "Question" => "Kysymys", + "Yes" => "Kyllä", + "No" => "Ei", + "You cannot rename the extension of files!" => "Et voi nimetä uudelleen tiedostopäätettä!", + "Uploading file {number} of {count}... {progress}" => "Siirretään tiedostoa {number}/{count} ... {progress}", + "Failed to upload {filename}!" => "Siirto epäonnistui {filename}!", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/fr.php b/additions/kcfinder/lang/fr.php new file mode 100644 index 0000000..b55500e --- /dev/null +++ b/additions/kcfinder/lang/fr.php @@ -0,0 +1,133 @@ + "fr_FR.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A %e %B %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d/%m/%Y %H:%M", + + "You don't have permissions to upload files." => "Vous n'avez pas les droits nécessaires pour télécharger des fichiers.", + "You don't have permissions to browse server." => "Vous n'avez pas les droits nécessaires pour parcourir le serveur.", + "Cannot move uploaded file to target folder." => "Impossible de déplacer le fichier téléchargé vers le dossier de destination.", + "Unknown error." => "Erreur inconnue.", + "The uploaded file exceeds {size} bytes." => "Le fichier envoyé dépasse la taille maximale de {size} octects.", + "The uploaded file was only partially uploaded." => "Le fichier n'a été que partiellement téléchargé.", + "No file was uploaded." => "Aucun fichier n'a été téléchargé.", + "Missing a temporary folder." => "Dossier temporaire absent.", + "Failed to write file." => "Impossible de créer le fichier.", + "Denied file extension." => "Extension non autorisée.", + "Unknown image format/encoding." => "Format/encodage d'image inconnu.", + "The image is too big and/or cannot be resized." => "L'image est trop grande et/ou ne peut être redimensionnée.", + "Cannot create {dir} folder." => "Impossible de créer le dossier {dir}.", + "Cannot rename the folder." => "Impossible de renommer le dossier.", + "Cannot write to upload folder." => "Impossible d'écrire dans le dossier de destination.", + "Cannot read .htaccess" => "Impossible de lire le fichier .htaccess", + "Incorrect .htaccess file. Cannot rewrite it!" => "Fichier .htaccess incorrect. Réécriture du fichier impossible!", + "Cannot read upload folder." => "Impossible de lire le dossier de destination.", + "Cannot access or create thumbnails folder." => "Impossible d'accéder ou de créer le dossier des miniatures.", + "Cannot access or write to upload folder." => "Impossible d'accéder ou d'écrire dans le dossier de destination.", + "Please enter new folder name." => "Merci d'entrer le nouveau nom de dossier.", + "Unallowable characters in folder name." => "Caractères non autorisés dans le nom du dossier.", + "Folder name shouldn't begins with '.'" => "Le nom du dossier ne peut pas commencer par '.'", + "Please enter new file name." => "Merci d'entrer le nouveau nom de fichier", + "Unallowable characters in file name." => "Caractères non autorisés dans le nom du fichier.", + "File name shouldn't begins with '.'" => "Le nom du fichier ne peut pas commencer par '.'", + "Are you sure you want to delete this file?" => "Êtes vous sûr du vouloir supprimer ce fichier?", + "Are you sure you want to delete this folder and all its content?" => "Êtes vous sûr du vouloir supprimer ce dossier et tous les fichiers qu'il contient?", + "Non-existing directory type." => "Type de répertoire inexistant.", + "Undefined MIME types." => "Type MIME indéterminé.", + "Fileinfo PECL extension is missing." => "L'extension Fileinfo PECL est manquante.", + "Opening fileinfo database failed." => "Ouverture de la base de données fileinfo echouée.", + "You can't upload such files." => "Vous ne pouvez pas télécharger ce type de fichiers.", + "The file '{file}' does not exist." => "Le fichier '{file}' n'existe pas.", + "Cannot read '{file}'." => "Impossible de lire le fichier '{file}'.", + "Cannot copy '{file}'." => "Impossible de copier le fichier '{file}'.", + "Cannot move '{file}'." => "Impossible de déplacer le fichier '{file}'.", + "Cannot delete '{file}'." => "Impossible de supprimer le fichier '{file}'.", + "Cannot delete the folder." => "Impossible de supprimer le dossier.", + "Click to remove from the Clipboard" => "Cliquez pour enlever du presse-papier", + "This file is already added to the Clipboard." => "Ce fichier a déja été ajouté au presse-papier.", + "The files in the Clipboard are not readable." => "Les fichiers du presse-papier ne sont pas lisibles.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} fichiers dans le presse-papier ne sont pas lisibles. Voulez vous copier le reste?", + "The files in the Clipboard are not movable." => "Les fichiers du presse-papier ne peuvent pas être déplacés.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} fichiers du presse-papier ne peuvent pas être déplacées. Voulez vous déplacer le reste?", + "The files in the Clipboard are not removable." => "Les fichiers du presse-papier ne peuvent pas être enlevés.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} fichiers du presse-papier ne peuvent pas être enlevés. Voulez vous supprimer le reste?", + "The selected files are not removable." => "Les fichiers sélectionnés ne peuvent pas être enlevés.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} fichier sélectionnés ne peuvent pas être enlevés. Voulez vous supprimer le reste?", + "Are you sure you want to delete all selected files?" => "Êtes vous sûr de vouloir supprimer tous les fichiers sélectionnés?", + "Failed to delete {count} files/folders." => "Echec de la suppression de {count} fichiers/dossiers.", + "A file or folder with that name already exists." => "Un fichier/dossier du même nom existe déja.", + "Copy files here" => "Copier les fichiers ici", + "Move files here" => "Déplacer les fichiers ici", + "Delete files" => "Supprimer les fichiers", + "Clear the Clipboard" => "Vider le presse-papier", + "Are you sure you want to delete all files in the Clipboard?" => "Êtes vous sûr de vouloir supprimer tous les fichiers du presse-papier?", + "Copy {count} files" => "Copie de {count} fichiers", + "Move {count} files" => "Déplacement de {count} fichiers", + "Add to Clipboard" => "Ajouter au presse-papier", + "Inexistant or inaccessible folder." => "Dossier inexistant ou innacessible.", + "New folder name:" => "Nom du nouveau dossier:", + "New file name:" => "Nom du nouveau fichier:", + "Upload" => "Envoyer", + "Refresh" => "Actualiser", + "Settings" => "Paramètres", + "Maximize" => "Agrandir", + "About" => "A propos", + "files" => "fichiers", + "selected files" => "fichiers sélectionnés", + "View:" => "Voir:", + "Show:" => "Montrer:", + "Order by:" => "Trier par:", + "Thumbnails" => "Miniatures", + "List" => "Liste", + "Name" => "Nom", + "Type" => "Type", + "Size" => "Taille", + "Date" => "Date", + "Descending" => "Décroissant", + "Uploading file..." => "Téléchargement en cours...", + "Loading image..." => "Chargement de l'image...", + "Loading folders..." => "Chargement des dossiers...", + "Loading files..." => "Chargement des fichiers...", + "New Subfolder..." => "Nouveau sous-dossier...", + "Rename..." => "Renommer...", + "Delete" => "Supprimer", + "OK" => "OK", + "Cancel" => "Annuler", + "Select" => "Sélectionner", + "Select Thumbnail" => "Sélectionner la miniature", + "Select Thumbnails" => "Sélectionner les miniatures", + "View" => "Voir", + "Download" => "Télécharger", + "Download files" => "Télécharger les fichiers", + "Clipboard" => "Presse-papier", + "Checking for new version..." => "Vérifier les mises à jours...", + "Unable to connect!" => "Connexion impossible !", + "Download version {version} now!" => "Télécharger la version {version} maintenant !", + "KCFinder is up to date!" => "KCFinder est à jour !", + "Licenses:" => "Licences:", + "Attention" => "Alerte", + "Question" => "Question", + "Yes" => "Oui", + "No" => "Non", + "You cannot rename the extension of files!" => "Vous ne pouvez modifier l'extension des fichiers !", + "Uploading file {number} of {count}... {progress}" => "Envoi du fichier {number} sur {count}... {progress}", + "Failed to upload {filename}!" => "Échec du téléchargement du fichier {filename} !", + "Close" => "Fermer", + "Previous" => "Précédent", + "Next" => "Suivant", + "Confirmation" => "Confirmation", + "Warning" => "Avertissement", +); + +?> diff --git a/additions/kcfinder/lang/he.php b/additions/kcfinder/lang/he.php new file mode 100644 index 0000000..56b31a2 --- /dev/null +++ b/additions/kcfinder/lang/he.php @@ -0,0 +1,127 @@ + "he_IL.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%H:%M %Y %B %e %A", + '_dateTimeMid' => "%H:%M %d/%m/%Y", + '_dateTimeSmall' => "%H:%M %d/%m/%Y", + + "You don't have permissions to upload files." => "אין לך הרשאות להעלות קבצים.", + "You don't have permissions to browse server." => "איך לך הרשאות לצפות בקבצים.", + "Cannot move uploaded file to target folder." => "לא ניתן להעביר את הקבצים שהועלו לתקייה שנבחרה.", + "Unknown error." => "שגיאה לא ידועה.", + "The uploaded file exceeds {size} bytes." => "הקובץ המועלה עובר את הגודל המקסימלי. ({size} בתים).", + "The uploaded file was only partially uploaded." => "הקובץ הועלה חלקית.", + "No file was uploaded." => "לא הועלו קבצים.", + "Missing a temporary folder." => "חסר תקייה זמנית.", + "Failed to write file." => "כתיבת הקובץ נכשלה.", + "Denied file extension." => "סיומת קובץ לא מורשית.", + "Unknown image format/encoding." => "סוג תמונה לא מוכר.", + "The image is too big and/or cannot be resized." => "התמונה גדולה מדי או שלא ניתן למזערה.", + "Cannot create {dir} folder." => "לא יכול ליצור את '{dir}'.", + "Cannot rename the folder." => "לא ניתן לשנות את שם התקיה", + "Cannot write to upload folder." => "לא ניתן לכתובת לתקיית ההעלאה", + "Cannot read .htaccess" => "לא ניתן לקרא את .htaccess", + "Incorrect .htaccess file. Cannot rewrite it!" => "קובץ .htaccess לא חוקי, לא ניתן לשכתב קובץ \\זה.", + "Cannot read upload folder." => "לא ניתן לקרא מתקיית ההעלאות.", + "Cannot access or create thumbnails folder." => "לא ניתן לגשת לתקייה התמונות הממוזערות.", + "Cannot access or write to upload folder." => "לא ניתן לגשת לתקיית ההעלאה.", + "Please enter new folder name." => "אנא בחר בשם לתקייה החדשה.", + "Unallowable characters in folder name." => "אותיות לא מורשות בשם התקיה.", + "Folder name shouldn't begins with '.'" => "שם תקיה אינו יכול להתחיל בנקודה.", + "Please enter new file name." => "אנא הכנס שם לקובץ החדש", + "Unallowable characters in file name." => "אותיות לא מורשות בשם הקובץ.", + "File name shouldn't begins with '.'" => "שם קובץ אינו יכול להתחיל בנקודה.", + "Are you sure you want to delete this file?" => "הנך בטוח שברצונך למחוק קבצים אילו?", + "Are you sure you want to delete this folder and all its content?" => "האם ברצונך למחוק תקיה זו וכל תוכנה?", + "Non-existing directory type." => "סוג תקייה לא קיימת.", + "Undefined MIME types." => "סוג MIME לא מוגדר.", + "Fileinfo PECL extension is missing." => "פרטי PECL חסרים.", + "Opening fileinfo database failed." => "פתיחת מסד פרטי הקבצים נכשלה.", + "You can't upload such files." => "לא ניתן להעלות קבצים מסוג זה.", + "The file '{file}' does not exist." => "הקובץ '{file}' לא קיים.", + "Cannot read '{file}'." => "לא יכול לפתוח '{file}'.", + "Cannot copy '{file}'." => "לא יכול להעתיק '{file}'.", + "Cannot move '{file}'." => "לא יכול להעביר '{file}'.", + "Cannot delete '{file}'." => "לא יכול למחוק '{file}'.", + "Cannot delete the folder." => "לא ניתן למחוק את התקייה", + "Click to remove from the Clipboard" => "לחץ להסיר מהלוח", + "This file is already added to the Clipboard." => "קובץ זה קיים בלוח.", + "The files in the Clipboard are not readable." => "הקבצים בלוח אינם קריאים.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} קבצים בלוח אינם קריאים. להעתיק את השאר?", + "The files in the Clipboard are not movable." => "הקבצים בלוח אינם ניתן להעברה.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} קבצים בלוח אינם ניתן להעברה. להעביר את השאר?", + "The files in the Clipboard are not removable." => "הקבצים בלוח אינם נתנים להסרה.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} קבצים בלוח אינם נתנים להסרה. להסיר את השאר?", + "The selected files are not removable." => "הקבצים הנבחרים אינם נתנים להסרה.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} קבצים בלוח אינם נתנים להסרה. למחוק את השאר?", + "Are you sure you want to delete all selected files?" => "האם ברצונך למחוק את הקבצים בנבחרים?", + "Failed to delete {count} files/folders." => "מחיקת {count} קבצים נכשלה.", + "A file or folder with that name already exists." => "תקייה/קובץ בשם זה כבר קיימים.", + "Copy files here" => "העתק קבצים לכאן", + "Move files here" => "העבר קבצים לכאן", + "Delete files" => "מחק קובץ", + "Clear the Clipboard" => "נקה לוח", + "Are you sure you want to delete all files in the Clipboard?" => "האם ברצונך לרוקן את הלוח?", + "Copy {count} files" => "העתק {count} קבצים.", + "Move {count} files" => "העבר {count} קבצים.", + "Add to Clipboard" => "הוסף ללוח", + "Inexistant or inaccessible folder." => "תקיה או קובץ לא קיימים.", + "New folder name:" => "שם תקיה חדשה:", + "New file name:" => "שם קובץ חדש:", + "Upload" => "העלה", + "Refresh" => "רענן", + "Settings" => "הגדרות", + "Maximize" => "הגדל", + "About" => "אודות", + "files" => "קבצים", + "selected files" => "קבצים מסומנים", + "View:" => "צפה:", + "Show:" => "הראה:", + "Order by:" => "מיין ע\"פ:", + "Thumbnails" => "תמונות ממוזערות", + "List" => "רשימה", + "Name" => "שם", + "Type" => "סוג", + "Size" => "גודל", + "Date" => "תאריך", + "Descending" => "יורד", + "Uploading file..." => "מעלה קבצים...", + "Loading image..." => "טוען תמונות...", + "Loading folders..." => "טוען תקיות...", + "Loading files..." => "טוען קבצים...", + "New Subfolder..." => "תת תקיה חדשה...", + "Rename..." => "שנה שם...", + "Delete" => "מחק", + "OK" => "אישור", + "Cancel" => "ביטול", + "Select" => "סמן", + "Select Thumbnail" => "סמן תמונות ממוזערות", + "Select Thumbnails" => "סמן תמונות ממוזערות", + "View" => "צפה", + "Download" => "הורד", + "Download files" => "הורד קובץ/ים", + "Clipboard" => "לוח", + "Checking for new version..." => "בודק גרסא עדכנית...", + "Unable to connect!" => "שגיאת התחברות!", + "Download version {version} now!" => "הורד גרסא {version} עכשיו!", + "KCFinder is up to date!" => "המערכת עדכנית!", + "Licenses:" => "רשיון", + "Attention" => "לתשומת לב", + "Question" => "שאלה", + "Yes" => "כן", + "No" => "לא", + "You cannot rename the extension of files!" => "לא ניתו לערוך סיומות קבצים!", + "Uploading file {number} of {count}... {progress}" => "מעלה קובץ {number} מתוך {count}... {progress}", + "Failed to upload {filename}!" => "העלאת הקובץ נכשלה!", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/hu.php b/additions/kcfinder/lang/hu.php new file mode 100644 index 0000000..0387860 --- /dev/null +++ b/additions/kcfinder/lang/hu.php @@ -0,0 +1,132 @@ + + */ + +$lang = array( + + '_locale' => "hu_HU.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B.%Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d/%m/%Y %H:%M", + + "You don't have permissions to upload files." => "Nincs jogosultsága fájlokat feltölteni.", + "You don't have permissions to browse server." => "Nincs jogosultsága a kiszolgálón böngészni.", + "Cannot move uploaded file to target folder." => "Nem lehet áthelyezni a feltöltött fájlt a célkönyvtárba.", + "Unknown error." => "Ismeretlen hiba.", + "The uploaded file exceeds {size} bytes." => "A feltöltött fájl mérete meghaladja a {size} bájtot.", + "The uploaded file was only partially uploaded." => "A feltöltendő fájl csak részben sikerült feltölteni.", + "No file was uploaded." => "Nem történt fájlfeltöltés.", + "Missing a temporary folder." => "Hiányzik az ideiglenes könyvtár.", + "Failed to write file." => "Nem sikerült a fájl írása.", + "Denied file extension." => "Tiltott fájlkiterjesztés.", + "Unknown image format/encoding." => "Ismeretlen képformátum vagy kódolás.", + "The image is too big and/or cannot be resized." => "A kép mérete túl nagy és/vagy nem lehet átméretezni.", + "Cannot create {dir} folder." => "Nem lehet létrehozni a {dir} könyvtárat.", + "Cannot rename the folder." => "A könyvtárat nem lehet átnevezni.", + "Cannot write to upload folder." => "Nem lehet írni a feltöltési könyvtárba.", + "Cannot read .htaccess" => "Nem lehet olvasni a .htaccess fájlt", + "Incorrect .htaccess file. Cannot rewrite it!" => "Hibás .htaccess fájl. Nem lehet írni.", + "Cannot read upload folder." => "Nem lehet olvasni a feltöltési könyvtárat.", + "Cannot access or create thumbnails folder." => "Nem lehet elérni vagy létrehozni a bélyegképek könyvtárat.", + "Cannot access or write to upload folder." => "Nem lehet elérni vagy létrehozni a feltöltési könyvtárat.", + "Please enter new folder name." => "Kérem, adja meg az új könyvtár nevét.", + "Unallowable characters in folder name." => "Meg nem engedett karakter(ek) a könyvtár nevében.", + "Folder name shouldn't begins with '.'" => "Könyvtárnév nem kezdődhet '.'-tal", + "Please enter new file name." => "Kérem adja meg az új fájl nevét.", + "Unallowable characters in file name." => "Meg nem engedett karakter(ek) a fájl nevében.", + "File name shouldn't begins with '.'" => "Fájlnév nem kezdődhet '.'-tal", + "Are you sure you want to delete this file?" => "Biztos benne, hogy törölni kívánja ezt a fájlt?", + "Are you sure you want to delete this folder and all its content?" => "Biztos benne hogy törölni kívánja ezt a könyvtárat és minden tartalmát?", + "Non-existing directory type." => "Nem létező könyvtártípus.", + "Undefined MIME types." => "Meghatározatlan MIME típusok.", + "Fileinfo PECL extension is missing." => "Hiányzó PECL Fileinfo PHP kiegészítés.", + "Opening fileinfo database failed." => "Nem sikerült megnyitni a Fileinfo adatbázist.", + "You can't upload such files." => "Nem tölthet fel ilyen fájlokat.", + "The file '{file}' does not exist." => "A '{file}' fájl nem létezik.", + "Cannot read '{file}'." => "A '{file}' fájlt nem lehet olvasni.", + "Cannot copy '{file}'." => "A '{file}' fájlt nem lehet másolni.", + "Cannot move '{file}'." => "A '{file}' fájlt nem lehet áthelyezni.", + "Cannot delete '{file}'." => "A '{file}' fájlt nem lehet törölni.", + "Cannot delete the folder." => "Nem lehet törölni a könyvtárat.", + "Click to remove from the Clipboard" => "kattintson ide, hogy eltávolítsa a vágólapról", + "This file is already added to the Clipboard." => "Ezt a fájlt már hozzáadta a vágólaphoz.", + "The files in the Clipboard are not readable." => "A vágólapon lévő fájlok nem olvashatók.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} fájl a vágólapon nem olvasható. Akarja másolni a többit?", + "The files in the Clipboard are not movable." => "A vágólapon lévő fájlokat nem lehet áthelyezni.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} fájlt a vágólapon nem lehet áthelyezni. Akarja áthelyezni a többit?", + "The files in the Clipboard are not removable." => "A vágólapon lévő fájlokat nem lehet eltávolítani.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} fájlt a vágólapon nem lehet eltávolítani. Akarja törölni a többit?", + "The selected files are not removable." => "A kiválasztott fájlokat nem lehet eltávolítani.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} kiválasztott fájlt nem lehet eltávolítani. Akarja törölni a többit?", + "Are you sure you want to delete all selected files?" => "Biztosan törölni kíván minden kijelölt fájlt?", + "Failed to delete {count} files/folders." => "Nem sikerült törölni {count} fájlt.", + "A file or folder with that name already exists." => "Egy fájl vagy könyvtár már létezik ugyan ezzel a névvel.", + "Copy files here" => "Fájlok másolása ide", + "Move files here" => "Fájlok áthelyezése ide", + "Delete files" => "Fájlok törlése", + "Clear the Clipboard" => "Vágólap ürítése", + "Are you sure you want to delete all files in the Clipboard?" => "Biztosan törölni kívánja a vágólapon lévő összes fájlt?", + "Copy {count} files" => "{count} fájl másolása", + "Move {count} files" => "{count} fájl áthelyezése", + "Add to Clipboard" => "Hozzáadás vágólaphoz", + "Inexistant or inaccessible folder." => "Nem létező vagy elérhetetlen könyvtár.", + "New folder name:" => "Új könyvtár neve:", + "New file name:" => "Új fájl neve:", + "Upload" => "Feltöltés", + "Refresh" => "Frissítés", + "Settings" => "Beállítások", + "Maximize" => "Maximalizálás", + "About" => "Névjegy", + "files" => "fájlok", + "selected files" => "kiválasztott fájlok", + "View:" => "Nézet:", + "Show:" => "Mutat:", + "Order by:" => "Rendezés:", + "Thumbnails" => "Bélyegképek", + "List" => "Lista", + "Name" => "Név", + "Type" => "Típus", + "Size" => "Méret", + "Date" => "Datum", + "Descending" => "Csökkenő", + "Uploading file..." => "Fájl feltöltése...", + "Loading image..." => "Képek betöltése...", + "Loading folders..." => "Könyvtárak betöltése...", + "Loading files..." => "Fájlok betöltése...", + "New Subfolder..." => "Új alkönyvtár...", + "Rename..." => "Átnevezés...", + "Delete" => "Törlés", + "OK" => "OK", + "Cancel" => "Mégse", + "Select" => "Kiválaszt", + "Select Thumbnail" => "Bélyegkép kiválasztása", + "Select Thumbnails" => "Bélyegképek kiválasztása", + "View" => "Nézet", + "Download" => "Letöltés", + "Download files" => "Fájlok letöltése", + "Clipboard" => "Vágólap", + "Checking for new version..." => "Új verzió keresése ...", + "Unable to connect!" => "Nem lehet csatlakozni!", + "Download version {version} now!" => "Töltse le a {version} verziót most!", + "KCFinder is up to date!" => "Ez a KCFinder verzió a legfrissebb", + "Licenses:" => "Licenszek:", + "Attention" => "Figyelem", + "Question" => "Kérdés", + "Yes" => "Igen", + "No" => "Nem", + "You cannot rename the extension of files!" => "Nem változtathatja meg a fájlok kiterjezstését", + "Uploading file {number} of {count}... {progress}" => "A(z) {number}. fájl feltöltése (összesen {count}) ... {progress}", + "Failed to upload {filename}!" => "Nem sikerült feltölteni a '{filename}' fájlt.", + "Close" => "Bezár", + "Previous" => "Előző", + "Next" => "Következő", + "Confirmation" => "Megerősítés", + "Warning" => "Figyelem" +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/id.php b/additions/kcfinder/lang/id.php new file mode 100644 index 0000000..6e8311c --- /dev/null +++ b/additions/kcfinder/lang/id.php @@ -0,0 +1,127 @@ + "id_ID.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "Anda tidak punya izin untuk mengunggah file.", + "You don't have permissions to browse server." => "Anda tidak punya izin untuk menelusuri server.", + "Cannot move uploaded file to target folder." => "Gagal memindahkan file yang di unggah ke target folder.", + "Unknown error." => "Error yang tidak diketahui.", + "The uploaded file exceeds {size} bytes." => "File yang anda unggah melebihi {size} bytes.", + "The uploaded file was only partially uploaded." => "Hanya sebagian file yang anda unggah telah di upload.", + "No file was uploaded." => "Tidak ada file yang di unggah.", + "Missing a temporary folder." => "Temporary folder hilang.", + "Failed to write file." => "Gagal untuk menulis file.", + "Denied file extension." => "File extension ditolak.", + "Unknown image format/encoding." => "Format gambar/encoding tidak diketahui.", + "The image is too big and/or cannot be resized." => "Gambar terlalu besar dan/atau tidak bisa di ubah ukurannya.", + "Cannot create {dir} folder." => "Gagal membuat {dir} folder", + "Cannot rename the folder." => "Gagal mengganti nama folder.", + "Cannot write to upload folder." => "Gagal menulis ke server unggah.", + "Cannot read .htaccess" => "Gagal membaca .htaccess", + "Incorrect .htaccess file. Cannot rewrite it!" => "Salah .htaccess file. Tidak bisa menulis file itu kembali!", + "Cannot read upload folder." => "Gagal membaca folder unggah.", + "Cannot access or create thumbnails folder." => "Gagal mengakses atau membuat miniatur folder.", + "Cannot access or write to upload folder." => "Gagal mengakses atau menulis ke folder unggah.", + "Please enter new folder name." => "Tolong masukkan nama folder baru.", + "Unallowable characters in folder name." => "Ada karakter yang tidak di izinkan di nama folder.", + "Folder name shouldn't begins with '.'" => "Nama folder seharusnya tidak dimulai dengan '.'", + "Please enter new file name." => "Tolong masukkan nama file baru.", + "Unallowable characters in file name." => "Ada karakter yang tidak di izinkan di nama file.", + "File name shouldn't begins with '.'" => "Nama file seharusnya tidak dimulai dengan '.'", + "Are you sure you want to delete this file?" => "Yakin anda akan menghapus file ini?", + "Are you sure you want to delete this folder and all its content?" => "Yakin anda akan menghapus folder ini dan semua konten nya?", + "Non-existing directory type." => "Jenis direktory tidak ada.", + "Undefined MIME types." => "Jenis MIME tidak diketahui.", + "Fileinfo PECL extension is missing." => "extensi Fileinfo PECL hilang.", + "Opening fileinfo database failed." => "Membuka fileinfo database gagal.", + "You can't upload such files." => "Anda tidak bisa mengunggah file seperti ini.", + "The file '{file}' does not exist." => "File '{file}' tidak ada.", + "Cannot read '{file}'." => "Gagal membaca '{file}'", + "Cannot copy '{file}'." => "Gagal menyalin '{file}'", + "Cannot move '{file}'." => "Gagal pindahkan '{file}'", + "Cannot delete '{file}'." => "Gagal menghapus '{file}'", + "Cannot delete the folder." => "Gagal menghapus folder. ", + "Click to remove from the Clipboard" => "Klik untuk memusnahkan dari Clipboard.", + "This file is already added to the Clipboard." => "File ini memang sudah ditambahkan ke Clipboard.", + "The files in the Clipboard are not readable." => "File-File yang di Clipboard tidak bisa di baca.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} file-file di Clipboard tidak bisa di baca. Apakah anda mau menyalin sisa-nya?", + "The files in the Clipboard are not movable." => "File-file yang di clipboard tidak memungkinkan untuk di pindah.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} file-file yang di Clipboard tidak bisa di pindah. Apakan anda mau memindahkan sisa-nya?", + "The files in the Clipboard are not removable." => "File file yang di Clipboard tidak memungkinkan untuk di hapus.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} file-file di Clipboard tidak memungkinkan untuk di hapus. Apakah anda mau menghapus sisa-nya?", + "The selected files are not removable." => "File-file yang anda pilih tidak memungkinkan untuk di hapus.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} file-file yang terpilih tidak memungkinkan untuk di hapus. Apakah anda mau menghapus sisa-nya?", + "Are you sure you want to delete all selected files?" => "Yakin anda akan menghapus semua file-file yang di pilih?", + "Failed to delete {count} files/folders." => "Gagal menghapus {count} file/folder.", + "A file or folder with that name already exists." => "File atau folder dengan nama itu sudah ada.", + "Copy files here" => "Salin file-file kesini", + "Move files here" => "Pindah file-file kesini", + "Delete files" => "Hapus file", + "Clear the Clipboard" => "Bersihkan Clipboard", + "Are you sure you want to delete all files in the Clipboard?" => "Yakin anda akan menghapus semua file-file yang ada di Clipboard?", + "Copy {count} files" => "Salin {count} file-file", + "Move {count} files" => "Pindah {count} file-file", + "Add to Clipboard" => "Tambahkan ke Clipboard", + "Inexistant or inaccessible folder." => "Folder tidak ada atau tidak bisa di akses.", + "New folder name:" => "Nama folder baru:", + "New file name:" => "Nama file baru:", + "Upload" => "Unggah", + "Refresh" => "Refresh", + "Settings" => "Pengaturan", + "Maximize" => "Maksimalkan", + "About" => "Tentang", + "files" => "File", + "selected files" => "File-file yang di pilih", + "View:" => "Lihat:", + "Show:" => "Tampilkan:", + "Order by:" => "Sortir dengan:", + "Thumbnails" => "Miniatur", + "List" => "Daftar", + "Name" => "Nama", + "Type" => "Jenis", + "Size" => "Ukuran", + "Date" => "Tanggal", + "Descending" => "Menurun", + "Uploading file..." => "Mengunggah file...", + "Loading image..." => "Memuat gambar...", + "Loading folders..." => "Memuat folder...", + "Loading files..." => "Memuat file...", + "New Subfolder..." => "Subfolder baru...", + "Rename..." => "Ganti nama...", + "Delete" => "Hapus...", + "OK" => "OK", + "Cancel" => "Batalkan", + "Select" => "Pilih", + "Select Thumbnail" => "Pilih Thumbnail", + "Select Thumbnails" => "Pilih Thumbnails", + "View" => "Lihat", + "Download" => "Unggah", + "Download files" => "Unggah file", + "Clipboard" => "Clipboard", + "Checking for new version..." => "Mengecek untuk versi baru...", + "Unable to connect!" => "Gagal untuk mengkoneksi!", + "Download version {version} now!" => "Unduh versi {version} sekarang!", + "KCFinder is up to date!" => "KCFinder adalah versi terbaru!", + "Licenses:" => "Lisensi:", + "Attention" => "Perhatian", + "Question" => "Pertanyaan", + "Yes" => "Ya", + "No" => "Tidak", + "You cannot rename the extension of files!" => "Anda tidak bisa mengubah ekstensi file!", + "Uploading file {number} of {count}... {progress}" => "Mengunggah file {number} of {count}... {progress}", + "Failed to upload {filename}!" => "Gagal untuk mengunggah {filename}", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/it.php b/additions/kcfinder/lang/it.php new file mode 100644 index 0000000..e56482b --- /dev/null +++ b/additions/kcfinder/lang/it.php @@ -0,0 +1,132 @@ + "it_IT.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "Non hai il permesso di caricare files.", + "You don't have permissions to browse server." => "Non hai il permesso di elencare i files.", + "Cannot move uploaded file to target folder." => "Non puoi spostare il file caricato nella cartella di destinazione.", + "Unknown error." => "Errore sconosciuto.", + "The uploaded file exceeds {size} bytes." => "Il file caricato eccede {size} bytes.", + "The uploaded file was only partially uploaded." => "Il file è stato caricato parzialmente.", + "No file was uploaded." => "Nessun file è stato caricato", + "Missing a temporary folder." => "Cartella temporanea non trovata.", + "Failed to write file." => "Scrittura del file fallita.", + "Denied file extension." => "Estensione del file non consentita.", + "Unknown image format/encoding." => "Il format/encoding dell'immagine è sconosciuto.", + "The image is too big and/or cannot be resized." => "L'immagine è troppo grande e/o non può essere rimpicciolita", + "Cannot create {dir} folder." => "La cartella {dir} non può essere creata.", + "Cannot rename the folder." => "Non è possibile rinominare la cartella.", + "Cannot write to upload folder." => "Cartella di destinazione protetta in scrittura.", + "Cannot read .htaccess" => "Impossibile leggere il file .htaccess.", + "Incorrect .htaccess file. Cannot rewrite it!" => "Il file .htaccess è corrotto. Impossibile riscriverlo!", + "Cannot read upload folder." => "Impossibile leggere il contenuto della cartella di destinazione.", + "Cannot access or create thumbnails folder." => "Impossibile creare o accedere alla cartella delle miniature.", + "Cannot access or write to upload folder." => "Impossibile accedere o scrivere nella cartella di destinazione.", + "Please enter new folder name." => "Scrivi il nome della nuova cartella.", + "Unallowable characters in folder name." => "Caratteri non permessi nel nome della cartella.", + "Folder name shouldn't begins with '.'" => "Il nome della cartella non può iniziare con'.'", + "Please enter new file name." => "Inserisci il nuovo nome del file", + "Unallowable characters in file name." => "Caratteri non permessi nel nome del file.", + "File name shouldn't begins with '.'" => "Il nome del file non può iniziare con '.'", + "Are you sure you want to delete this file?" => "Sei sicuro che vuoi cancellare questo file?", + "Are you sure you want to delete this folder and all its content?" => "Sei sicuro di voler cancellare questa cartella e il suo contenuto?", + "Non-existing directory type." => "Il tipo di cartella non esiste.", + "Undefined MIME types." => "Tipo MIME non definito.", + "Fileinfo PECL extension is missing." => "Manca estensione PECL del file.", + "Opening fileinfo database failed." => "Apertura del database delle informazioni del file fallita.", + "You can't upload such files." => "Non è possibile caricare questi files.", + "The file '{file}' does not exist." => "Il file '{file}' non esiste.", + "Cannot read '{file}'." => "Impossibile leggere il file '{file}'.", + "Cannot copy '{file}'." => "Impossibile copiare il file '{file}'.", + "Cannot move '{file}'." => "Impossibile spostare il file '{file}'.", + "Cannot delete '{file}'." => "Impossibile cancellare il file '{file}'.", + "Cannot delete the folder." => "Non è possibile cancellare la cartella.", + "Click to remove from the Clipboard" => "Click per rimuoverlo dalla Clipboard", + "This file is already added to the Clipboard." => "Questo file è già stato aggiunto alla Clipboard.", + "The files in the Clipboard are not readable." => "I files nella Clipboard non sono leggibili.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} files nella Clipboard non sono leggibili. Copiare il resto?", + "The files in the Clipboard are not movable." => "I files nella Clipboard non sono spostabili.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} files nella Clipboard non sono spostabili. Spostare il resto?", + "The files in the Clipboard are not removable." => "I files nella Clipboard non si possono rimuovere.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} files nella Clipboard non si possono rimuovere. Cancellare il resto?", + "The selected files are not removable." => "Il file selezionato non è rimovibile.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} files selezionati non sono rimovibili. Cancellare il resto?", + "Are you sure you want to delete all selected files?" => "Sei sicuro che vuoi cancellare tutti i files selezionati?", + "Failed to delete {count} files/folders." => "Cancellazione fallita {count} files/cartelle.", + "A file or folder with that name already exists." => "Un file o cartella con questo nome già esiste.", + "Copy files here" => "Copia i files qui", + "Move files here" => "Sposta i files qui", + "Delete files" => "Cancella i files", + "Clear the Clipboard" => "Pulisci la Clipboard", + "Are you sure you want to delete all files in the Clipboard?" => "Sei sicuro che vuoi cancellare tutti i files dalla Clipboard?", + "Copy {count} files" => "Copio {count} files", + "Move {count} files" => "Sposto {count} files", + "Add to Clipboard" => "Aggiungi alla Clipboard", + "Inexistant or inaccessible folder." => "La cartella non esiste o è inacessibile.", + "New folder name:" => "Nuovo nome della cartella:", + "New file name:" => "Nuovo nome del file:", + "Upload" => "Carica", + "Refresh" => "Aggiorna", + "Settings" => "Preferenze", + "Maximize" => "Massimizza", + "About" => "Chi siamo", + "files" => "files", + "selected files" => "files selezionati", + "View:" => "Vista:", + "Show:" => "Mostra:", + "Order by:" => "Ordina per:", + "Thumbnails" => "Miniature", + "List" => "Lista", + "Name" => "Nome", + "Type" => "Tipo", + "Size" => "Grandezza", + "Date" => "Data", + "Descending" => "Discendente", + "Uploading file..." => "Carico file...", + "Loading image..." => "Caricamento immagine...", + "Loading folders..." => "Caricamento cartella...", + "Loading files..." => "Caricamento files...", + "New Subfolder..." => "Nuova sottocartella...", + "Rename..." => "Rinomina...", + "Delete" => "Elimina", + "OK" => "OK", + "Cancel" => "Cancella", + "Select" => "Seleziona", + "Select Thumbnail" => "Seleziona miniatura", + "Select Thumbnails" => "Seleziona miniature", + "View" => "Vista", + "Download" => "Scarica", + "Download files" => "Scarica files", + "Clipboard" => "Clipboard", + "Checking for new version..." => "Controllo nuova versione...", + "Unable to connect!" => "Connessione impossibile", + "Download version {version} now!" => "Prelevo la versione {version} adesso!", + "KCFinder is up to date!" => "KCFinder è aggiornato!", + "Licenses:" => "Licenze:", + "Attention" => "Attenzione", + "Question" => "Domanda", + "Yes" => "Si", + "No" => "No", + "You cannot rename the extension of files!" => "Non puoi rinominare l'estensione del file!", + "Uploading file {number} of {count}... {progress}" => "Caricmento del file {number} di {count}... {progress}", + "Failed to upload {filename}!" => "Il caricamento del file {filename} è fallito ", + "Close" => "Chiudi", + "Previous" => "Precedente", + "Next" => "Successivo", + "Confirmation" => "Conferma", + "Warning" => "Attenzione", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/ja.php b/additions/kcfinder/lang/ja.php new file mode 100644 index 0000000..8509596 --- /dev/null +++ b/additions/kcfinder/lang/ja.php @@ -0,0 +1,133 @@ + "ja_JP.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%Y/%m/%d %H:%M", + '_dateTimeMid' => "%Y/%m/%d %H:%M", + '_dateTimeSmall' => "%Y/%m/%d %H:%M", + + "You don't have permissions to upload files." => "アップロード権限がありません。", + "You don't have permissions to browse server." => "サーバーを閲覧する権限がありません", + "Cannot move uploaded file to target folder." => "ファイルを移動できません。", + "Unknown error." => "原因不明のエラーです。", + "The uploaded file exceeds {size} bytes." => "アップロードしたファイルは {size} バイトを越えました。", + "The uploaded file was only partially uploaded." => "アップロードしたファイルは、一部のみ処理されました。", + "No file was uploaded." => "ファイルはありません。", + "Missing a temporary folder." => "tempフォルダが見つかりません。", + "Failed to write file." => "ファイルの書き込みに失敗しました。", + "Denied file extension." => "このファイルは扱えません。", + "Unknown image format/encoding." => "この画像ファイルの種別を判定できません。", + "The image is too big and/or cannot be resized." => "画像ファイルのサイズが大き過ぎます。", + "Cannot create {dir} folder." => "「{dir}」フォルダを作成できません。", + "Cannot rename the folder." => "フォルダ名を変更できません", + "Cannot write to upload folder." => "アップロードフォルダに書き込みできません。", + "Cannot read .htaccess" => ".htaccessが読み込めません。", + "Incorrect .htaccess file. Cannot rewrite it!" => "不正な .htaccess ファイルです。再編集できません!", + "Cannot read upload folder." => "アップロードフォルダを読み取れません。", + "Cannot access or create thumbnails folder." => "サムネイルフォルダにアクセス、または作成できません。", + "Cannot access or write to upload folder." => "アップロードフォルダにアクセス、または書き込みできません。", + "Please enter new folder name." => "新しいフォルダ名を入力して下さい。", + "Unallowable characters in folder name." => "フォルダ名に使用できない文字が含まれています。", + "Folder name shouldn't begins with '.'" => "フォルダ名は、'.'で開始しないで下さい。", + "Please enter new file name." => "新しいファイル名を入力して下さい。", + "Unallowable characters in file name." => "ファイル名に使用できない文字が含まれています。", + "File name shouldn't begins with '.'" => "ファイル名は「. 」で始めることはできません。", + "Are you sure you want to delete this file?" => "このファイルを本当に削除してもよろしいですか?", + "Are you sure you want to delete this folder and all its content?" => "このフォルダとフォルダ内の全てのコンテンツを本当に削除してもよろしいですか?", + "Non-existing directory type." => "存在しないディレクトリの種類です。", + "Undefined MIME types." => "定義されていないMIMEタイプです。", + "Fileinfo PECL extension is missing." => "Fileinfo PECL 拡張モジュールが見付かりません。", + "Opening fileinfo database failed." => "fileinfo データベースを開くのに失敗しました。", + "You can't upload such files." => "このようなファイルをアップロードできません。", + "The file '{file}' does not exist." => "ファイル「{file}」は存在しません。", + "Cannot read '{file}'." => "「{file}」を読み取れません。", + "Cannot copy '{file}'." => "「{file}」をコピーできません。", + "Cannot move '{file}'." => "「{file}」を移動できません。", + "Cannot delete '{file}'." => "「{file}」を削除できません。", + "Cannot delete the folder." => "フォルダを削除できません", + "Click to remove from the Clipboard" => "クリップボードから削除する", + "This file is already added to the Clipboard." => "このファイルは既にクリップボードに追加されています。", + "The files in the Clipboard are not readable." => "クリップボードからファイルを読み取れません", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "クリップボード内の {count} 個のファイルが読み取れません。残りをコピーしてもよろしいですか?", + "The files in the Clipboard are not movable." => "クリップボードからファイルを移動できません", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "クリップボード内の {count} 個のファイルが移動できません。残りを移動してもよろしいですか?", + "The files in the Clipboard are not removable." => "クリップボードを初期化できません", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "クリップボード内の {count} 個のファイルが削除出来ません。残りを削除してもよろしいですか?", + "The selected files are not removable." => "選択したファイルは削除できません。", + "{count} selected files are not removable. Do you want to delete the rest?" => "選択された {count} 個のファイルは削除できません。残りを削除してもよろしいですか?", + "Are you sure you want to delete all selected files?" => "選択された全てのファイルを本当に削除してもよろしいですか?", + "Failed to delete {count} files/folders." => "{count} 個のファイル / フォルダの削除に失敗しました。", + "A file or folder with that name already exists." => "その名前のファイル、またはフォルダは既に存在します。", + "Copy files here" => "ここにコピー", + "Move files here" => "ここに移動", + "Delete files" => "これらを全て削除", + "Clear the Clipboard" => "クリップボードを初期化", + "Are you sure you want to delete all files in the Clipboard?" => "クリップボードに記憶した全てのファイルを実際に削除します。", + "Copy {count} files" => "ファイル({count}個)をここに複写", + "Move {count} files" => "ファイル({count}個)をここに移動", + "Add to Clipboard" => "クリップボードに記憶", + "Inexistant or inaccessible folder." => "存在しない、またはアクセスできないフォルダです。", + "New folder name:" => "フォルダ名(半角英数):", + "New file name:" => "ファイル名(半角英数):", + "Upload" => "アップロード", + "Refresh" => "再表示", + "Settings" => "表示設定", + "Maximize" => "最大化", + "About" => "About", + "files" => "ファイル", + "selected files" => "選択したファイル", + "View:" => "表示スタイル:", + "Show:" => "表示項目:", + "Order by:" => "表示順:", + "Thumbnails" => "サムネイル", + "List" => "リスト", + "Name" => "ファイル名", + "Type" => "タイプ", + "Size" => "サイズ", + "Date" => "日付", + "Descending" => "順序を反転", + "Uploading file..." => "ファイルをアップロード中", + "Loading image..." => "画像を読み込み中", + "Loading folders..." => "フォルダを読み込み中", + "Loading files..." => "読み込み中", + "New Subfolder..." => "フォルダを作る", + "Rename..." => "名前の変更", + "Delete" => "削除", + "OK" => "OK", + "Cancel" => "キャンセル", + "Select" => "このファイルを選択", + "Select Thumbnail" => "サムネイルを選択", + "Select Thumbnails" => "サムネイルを選択", + "View" => "プレビュー", + "Download" => "ダウンロード", + "Download files" => "ファイルをダウンロードする", + "Clipboard" => "クリップボード", + "Checking for new version..." => "新しいバージョンを確認中", + "Unable to connect!" => "接続できません", + "Download version {version} now!" => "新しいバージョン({version})をダウンロードできます", + "KCFinder is up to date!" => "KCFinderは最新です。", + "Licenses:" => "ライセンス", + "Attention" => "注意", + "Question" => "確認", + "Yes" => "はい", + "No" => "いいえ", + "You cannot rename the extension of files!" => "ファイルの拡張子を変更できませんでした", + "Uploading file {number} of {count}... {progress}" => "ファイルをアップロード中({number}/{count})... {progress}", + "Failed to upload {filename}!" => "{filename}のアップロードに失敗しました", +); + +?> diff --git a/additions/kcfinder/lang/lt.php b/additions/kcfinder/lang/lt.php new file mode 100644 index 0000000..cded0e6 --- /dev/null +++ b/additions/kcfinder/lang/lt.php @@ -0,0 +1,130 @@ + + */ + +$lang = array( + + '_locale' => "lt_LT.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%F %T", + '_dateTimeMid' => "%F %T", + '_dateTimeSmall' => "%F %T", + + "You don't have permissions to upload files." => "Jūs neturite teisių įkelti failus", + "You don't have permissions to browse server." => "Jūs neturite teisių naršyti po failus", + "Cannot move uploaded file to target folder." => "Nepavyko įkelti failo į reikiamą katalogą.", + "Unknown error." => "Nežinoma klaida.", + "The uploaded file exceeds {size} bytes." => "Įkeliamas failas viršija {size} baitų(-us).", + "The uploaded file was only partially uploaded." => "Failas buvo tik dalinai įkeltas.", + "No file was uploaded." => "Failas nebuvo įkeltas.", + "Missing a temporary folder." => "Nėra laikino katalogo.", + "Failed to write file." => "Nepavyko įrašyti failo.", + "Denied file extension." => "Draudžiama įkelti šio tipo failus.", + "Unknown image format/encoding." => "Nežinomas paveikslėlio formatas/kodavimas.", + "The image is too big and/or cannot be resized." => "Paveikslėlis yra per didelis ir/arba negali būti sumažintas.", + "Cannot create {dir} folder." => "Nepavyko sukurti {dir} katalogo.", + "Cannot rename the folder." => "Nepavyko pervadinti katalogo.", + "Cannot write to upload folder." => "Nepavyko įrašyti į įkeliamų failų katalogą.", + "Cannot read .htaccess" => "Nepavyko nuskaityti .htaccess failo", + "Incorrect .htaccess file. Cannot rewrite it!" => "Blogas .htaccess failas. Nepavyko jo perrašyti", + "Cannot read upload folder." => "Nepavyko atidaryti įkeliamų failų katalogo.", + "Cannot access or create thumbnails folder." => "Nepavyko atidaryti ar sukurti sumažintų paveikslėlių katalogo.", + "Cannot access or write to upload folder." => "Nepavyko atidaryti ar įrašyti į įkeliamų failų katalogą.", + "Please enter new folder name." => "Įveskite katalogo pavadinimą.", + "Unallowable characters in folder name." => "Katalogo pavadinime yra neleistinų simbolių.", + "Folder name shouldn't begins with '.'" => "Katalogo pavadinimas negali prasidėti '.'", + "Please enter new file name." => "Įveskite failo pavadinimą.", + "Unallowable characters in file name." => "Failo pavadinime yra neleistinų simbolių", + "File name shouldn't begins with '.'" => "Failo pavadinimas negali prasidėti '.'", + "Are you sure you want to delete this file?" => "Ar tikrai ištrinti šį failą?", + "Are you sure you want to delete this folder and all its content?" => "Ar tikrai ištrinti šį katalogą su visu jo turiniu?", + "Non-existing directory type." => "Neegzistuojantis katalogo tipas.", + "Undefined MIME types." => "Nenurodytas MIME tipas.", + "Fileinfo PECL extension is missing." => "Trūksa PECL plėtinio Fileinfo", + "Opening fileinfo database failed." => "Nepavyko atidaryti Fileinfo duomenų bazės.", + "You can't upload such files." => "Negalima įkelti tokių failų.", + "The file '{file}' does not exist." => "Failas '{file}' neegzistuoja.", + "Cannot read '{file}'." => "Nepavyko atidaryti '{file}' failo.", + "Cannot copy '{file}'." => "Nepavyko nukopijuoti '{file}' failo.", + "Cannot move '{file}'." => "Nepavyko perkelti '{file}' failo.", + "Cannot delete '{file}'." => "Nepavyko ištrinti '{file}' failo.", + "Cannot delete the folder." => "Nepavyko ištrinti katalogo.", + "Click to remove from the Clipboard" => "Zum entfernen aus der Zwischenablage, hier klicken.", + "This file is already added to the Clipboard." => "Šis failas jau įkeltas į laikinąją atmintį.", + "The files in the Clipboard are not readable." => "Nepavyko nuskaityti failų iš laikinosios atminties.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "Nepavyko atidaryti {count} failų(-ai) iš laikinosios atminties. Ar kopijuoti likusius?", + "The files in the Clipboard are not movable." => "Nepavyko perkelti failų iš laikinosios atminties.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "Nepavyko perkelti {count} failų(-ai) iš laikinosios atminties. Ar perkelti likusius?", + "The files in the Clipboard are not removable." => "Nepavyko perkelti failų iš laikinosios atminties.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "Nepavyko ištrinti {count} failų(-ai) iš laikinosios atminties. Ar ištrinti likusius?", + "The selected files are not removable." => "Nepavyko perkelti pažymėtų failų.", + "{count} selected files are not removable. Do you want to delete the rest?" => "Nepavyko ištrinti {count} failų(-ai) iš laikinosios atminties. Ar ištrinti likusius?", + "Are you sure you want to delete all selected files?" => "Ar tikrai ištrinti visus pažymėtus failus?", + "Failed to delete {count} files/folders." => "Nepavyko ištrinti {count} failų/katalogų.", + "A file or folder with that name already exists." => "Failas arba katalogas tokiu pavadinimu jau egzistuoja.", + "Copy files here" => "Kopijuoti failus čia.", + "Move files here" => "Perkelti failus čia.", + "Delete files" => "Ištrinti failus.", + "Clear the Clipboard" => "Išvalyti laikinąją atmintį", + "Are you sure you want to delete all files in the Clipboard?" => "Ar tikrai ištrinti visus failus, esančius laikinojoje atmintyje?", + "Copy {count} files" => "Kopijuoti {count} failų(-us)", + "Move {count} files" => "Perkelti {count} failų(-us)", + "Add to Clipboard" => "Įkelti į laikinąją atmintį", + "Inexistant or inaccessible folder." => "Katalogas neegzistuoja arba yra neprieinamas.", + "New folder name:" => "Naujo katalogo pavadinimas:", + "New file name:" => "Naujo failo pavadinimas:", + "Upload" => "Įkelti", + "Refresh" => "Atnaujinti", + "Settings" => "Nustatymai", + "Maximize" => "Padidinti", + "About" => "Apie", + "files" => "Failai", + "selected files" => "Pasirinkti failus", + "View:" => "Peržiūra:", + "Show:" => "Rodyti:", + "Order by:" => "Rikiuoti:", + "Thumbnails" => "Sumažintos iliustracijos", + "List" => "Sąrašas", + "Name" => "Pavadinimas", + "Type" => "Tipas", + "Size" => "Dydis", + "Date" => "Data", + "Descending" => "Mažejančia tvarka", + "Uploading file..." => "Įkeliamas failas...", + "Loading image..." => "Kraunami paveikslėliai...", + "Loading folders..." => "Kraunami katalogai...", + "Loading files..." => "Kraunami failai...", + "New Subfolder..." => "Naujas katalogas...", + "Rename..." => "Pervadinti...", + "Delete" => "Ištrinti", + "OK" => "OK", + "Cancel" => "Atšaukti", + "Select" => "Pažymėti", + "Select Thumbnail" => "Pasirinkti sumažintą paveikslėlį", + "Select Thumbnails" => "Pasirinkti sumažintus paveikslėlius", + "View" => "Peržiūra", + "Download" => "Atsisiųsti", + "Download files" => "Atsisiųsti failus", + "Clipboard" => "Laikinoji atmintis", + "Checking for new version..." => "Tikrinama nauja versija...", + "Unable to connect!" => "Nepavyko prisijungti!", + "Download version {version} now!" => "Siųsti versiją {version} dabar!", + "KCFinder is up to date!" => "KCFinder yra naujausios versijos!", + "Licenses:" => "Licenzijos:", + "Attention" => "Dėmesio", + "Question" => "Klausimas", + "Yes" => "Taip", + "No" => "Ne", + "You cannot rename the extension of files!" => "Negalima keisti failų plėtinių!", + "Uploading file {number} of {count}... {progress}" => "Įkeliamas {number} failas iš {count}... {progress}", + "Failed to upload {filename}!" => "Nepavyko įkelti {filename}!", + "Close" => "Uždaryti", + "Previous" => "Ankstesnis", + "Next" => "Kitas", + "Confirmation" => "Patvirtinimas", + "Warning" => "Įspėjimas", +); diff --git a/additions/kcfinder/lang/lv.php b/additions/kcfinder/lang/lv.php new file mode 100644 index 0000000..a6be842 --- /dev/null +++ b/additions/kcfinder/lang/lv.php @@ -0,0 +1,127 @@ + "lv_LV.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %Y. gada %e. %B", + '_dateTimeMid' => "%a, %Y. %e. %b", + '_dateTimeSmall' => "%Y.%m.%d %H:%M", + + "You don't have permissions to upload files." => "Jums nav atļaujas, lai augšupielādētu failu.", + "You don't have permissions to browse server." => "Jums nav atļaujas pārlūkot serverī.", + "Cannot move uploaded file to target folder." => "Nevar augšupielādēt failu uz mērķa mapi.", + "Unknown error." => "Nezināma kļūda.", + "The uploaded file exceeds {size} bytes." => "Augšupielādētais fails pārsniedz {size} baitus.", + "The uploaded file was only partially uploaded." => "Augšupielādētais fails tika augšupielādēts tikai daļēji.", + "No file was uploaded." => "Neviens fails netika augšupielādēts.", + "Missing a temporary folder." => "Trūkst pagaidu mapē.", + "Failed to write file." => "Neizdevās ierakstīt failā.", + "Denied file extension." => "Liegta piekļuve faila paplašinājums.", + "Unknown image format/encoding." => "Nezināms attēlu formāts / kodējumu.", + "The image is too big and/or cannot be resized." => "Attēls ir pārāk liels un / vai izmērus nevar mainīt.", + "Cannot create {dir} folder." => "Nevar izveidot {dir} mapē.", + "Cannot rename the folder." => "Nevar pārdēvēt mapi.", + "Cannot write to upload folder." => "Nevar ierakstīt augšupielādes mape.", + "Cannot read .htaccess" => "Nevar lasīt failu .htaccess", + "Incorrect .htaccess file. Cannot rewrite it!" => "Nepareizs fails .htaccess būs jānoņem. Nevar pārrakstīt!", + "Cannot read upload folder." => "Nevar lasīt failu augšupielāde mapē.", + "Cannot access or create thumbnails folder." => "Nevar piekļūt vai izveidot sīktēlu mapei.", + "Cannot access or write to upload folder." => "Nevar piekļūt vai rakstīt augšupielādēt mapes.", + "Please enter new folder name." => "Lūdzu, ievadiet jaunu mapes nosaukumu.", + "Unallowable characters in folder name." => "Nepieļaujamas mapes nosaukuma rakstzīmes.", + "Folder name shouldn't begins with '.'" => "Mapes nosaukums nedrīkst sāk ar '.'", + "Please enter new file name." => "Lūdzu, ievadiet jaunu faila nosaukumu.", + "Unallowable characters in file name." => "Nepieļaujami rakstzīmes faila nosaukumu.", + "File name shouldn't begins with '.'" => "Faila nosaukums nedrīkst sāk ar '.'", + "Are you sure you want to delete this file?" => "Vai tiešām vēlaties izdzēst šo failu?", + "Are you sure you want to delete this folder and all its content?" => "Vai tiešām vēlaties izdzēst šo mapi un visu tās saturu?", + "Non-existing directory type." => "Minimāla direktorija tips.", + "Undefined MIME types." => "Nedefinēts MIME tipu.", + "Fileinfo PECL extension is missing." => "Trūkst faila paplašinājuma Fileinfo PECL.", + "Opening fileinfo database failed." => "Atverot fileinfo datu bāzi neizdevās.", + "You can't upload such files." => "Nevar augšupielādēt šo failu.", + "The file '{file}' does not exist." => "Fails' {file} 'nepastāv.", + "Cannot read '{file}'." => "Nevar nolasīt '{file}'.", + "Cannot copy '{file}'." => "Nevar kopēt '{file}'.", + "Cannot move '{file}'." => "Nevar pārvietot '{file}'.", + "Cannot delete '{file}'." => "Nevar izdzēst '{file}'.", + "Cannot delete the folder." => "Nevar izdzēst mapi.", + "Click to remove from the Clipboard" => "Noklikšķiniet, lai noņemtu no starpliktuves", + "This file is already added to the Clipboard." => "Šis fails jau ir pievienots starpliktuvē.", + "The files in the Clipboard are not readable." => "Failu starpliktuvē nav lasāms.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} failu starpliktuvē nav lasāms. Vai vēlaties kopēt visu?", + "The files in the Clipboard are not movable." => "Failu starpliktuvē nav pārvietojams.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} failu starpliktuvē nav pārvietojams. Vai vēlaties pārvietot citur?", + "The files in the Clipboard are not removable." => "Failu starpliktuvē nav noņemami.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} failu starpliktuvē nav noņemami. Vai vēlaties dzēst visu?", + "The selected files are not removable." => "Atlasītie faili nav noņemama.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} atlasītie faili nav noņemama. Vai vēlaties dzēst visu?", + "Are you sure you want to delete all selected files?" => "Vai tiešām vēlaties izdzēst visus atlasītos failus?", + "Failed to delete {count} files/folders." => "Neizdevās izdzēst {count} failus / mapes.", + "A file or folder with that name already exists." => "Fails vai mape ar šādu nosaukumu jau pastāv.", + "Copy files here" => "Kopēt failus šeit", + "Move files here" => "Pārvietot failus šeit", + "Delete files" => "Dzēst failus", + "Clear the Clipboard" => "Notīrīt starpliktuvi", + "Are you sure you want to delete all files in the Clipboard?" => "Vai tiešām vēlaties dzēst visus failus no starpliktuves? ", + "Copy {count} files" => "Kopēt {count} faili ", + "Move {count} files" => "Pārvietot {count} faili ", + "Add to Clipboard" => "Pievienot starpliktuvei ", + "Inexistant or inaccessible folder." => "Inexistant vai piekļūt mapei.", + "New folder name:" => "Jaunās mapes nosaukums:", + "New file name:" => "Jauns faila nosaukums:", + "Upload" => "Augšupielādēt", + "Refresh" => "Atsvaidzināt", + "Settings" => "Iestatījumi", + "Maximize" => "Maksimizēt", + "About" => "Par", + "files" => "faili", + "selected files" => "atlasītie faili", + "View:" => "Skatīt:", + "Show:" => "Rādīt:", + "Order by:" => "Kārtot pēc: ", + "Thumbnails" => "Sīktēli ", + "List" => "Saraksts ", + "Name" => "Nosaukums ", + "Type" => "Tips ", + "Size" => "Izmērs ", + "Date" => "Datums", + "Descending" => "Dilstošā secībā", + "Uploading file..." => "... faila augšupielāde", + "Loading image..." => "Ielādē attēlu...", + "Loading folders..." => "Ielādē mapes...", + "Loading files..." => "... failu ielāde", + "New Subfolder..." => "Jauna apakšmape...", + "Rename..." => "Pārdēvēt...", + "Delete" => "Dzēst", + "OK" => "Labi", + "Cancel" => "Atcelt", + "Select" => "Izvēlieties", + "Select Thumbnail" => "Izvēlieties sīktēlu", + "Select Thumbnails" => "Atlasiet sīktēlus", + "View" => "Skats", + "Download" => "Lejupielādēt", + "Download files" => "Lejupielādēt failus", + "Clipboard" => "Starpliktuve", + "Checking for new version..." => "... jaunās versijas pārbaude", + "Unable to connect!" => "Nevar izveidot savienojumu.", + "Download version {version} now!" => "Lejupielādēt versiju {version} tagad!", + "KCFinder is up to date!" => "KCFinder ir aktuāla!", + "Licenses:" => "Licences:", + "Attention" => "Uzmanību", + "Question" => "Jautājums", + "Yes" => "Jā", + "No" => "Nr.", + "You cannot rename the extension of files!" => "Paplašinājums nevar pārdēvēt failu!", + "Uploading file {number} of {count}... {progress}" => "Augšupielādējot failu {number} no {count}... {progress}", + "Failed to upload {filename}!" => "Neizdevās augšupielādēt {filename}!", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/nl.php b/additions/kcfinder/lang/nl.php new file mode 100644 index 0000000..434ca85 --- /dev/null +++ b/additions/kcfinder/lang/nl.php @@ -0,0 +1,133 @@ + + * update: Richard Leurs + */ + +$lang = array( + + '_locale' => "nl_NL.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B.%Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d/%m/%Y %H:%M", + + "You don't have permissions to upload files." => "U heeft geen toestemming om bestanden te uploaden.", + "You don't have permissions to browse server." => "U heeft geen toegang tot de server.", + "Cannot move uploaded file to target folder." => "Het te uploaden bestand kon niet naar de doelmap verplaatst worden.", + "Unknown error." => "Onbekende foutmelding.", + "The uploaded file exceeds {size} bytes." => "De bestandsgrootte van het bestand overschrijdt de limiet {size} bytes.", + "The uploaded file was only partially uploaded." => "Het te uploaden bestand is slechts gedeeltelijk geupload.", + "No file was uploaded." => "Er is geen bestand geupload.", + "Missing a temporary folder." => "Een tijdelijke map ontbreekt.", + "Failed to write file." => "Poging tot schrijven van bestand is mislukt.", + "Denied file extension." => "De extensie van dit bestand is niet toegestaan.", + "Unknown image format/encoding." => "Onbekende afbeeldingsformaats/-codering.", + "The image is too big and/or cannot be resized." => "De afbeelding is te groot en/of de grootte kan niet aangepast worden.", + "Cannot create {dir} folder." => "Kan de map {dir} niet aanmaken.", + "Cannot rename the folder." => "De map kan niet hernoemd worden.", + "Cannot write to upload folder." => "Kan niet naar de uploadmap schrijven.", + "Cannot read .htaccess" => "Kan .htaccess niet lezen.", + "Incorrect .htaccess file. Cannot rewrite it!" => "Verkeerd .htaccess bestand. Bestand kan niet herschreven worden!", + "Cannot read upload folder." => "Uploadmap kan niet uitgelezen worden.", + "Cannot access or create thumbnails folder." => "Het is niet mogelijk om een miniatuurweergaven map aan te maken of te benaderen.", + "Cannot access or write to upload folder." => "Het is niet mogelijk om in de uploadmap te schrijven of deze te benaderen.", + "Please enter new folder name." => "Vul a.u.b. een nieuwe mapnaam in.", + "Unallowable characters in folder name." => "Er zijn niet toegestane karakters gebruikt in de mapnaam.", + "Folder name shouldn't begins with '.'" => "Een mapnaam mag niet met '.' beginnen.", + "Please enter new file name." => "Vul a.u.b. een nieuwe bestandsnaam in.", + "Unallowable characters in file name." => "Er zijn niet toegestane karakters gebruikt in de bestandsnaam.", + "File name shouldn't begins with '.'" => "Een bestandsnaam mag niet met '.' beginnen.", + "Are you sure you want to delete this file?" => "Weet u zeker dat u dit bestand wilt verwijderen?", + "Are you sure you want to delete this folder and all its content?" => "Weet u zeker dat u deze map en alle inhoud ervan wilt verwijderen?", + "Non-existing directory type." => "Het maptype bestaat niet.", + "Undefined MIME types." => "Onbekend MIME type.", + "Fileinfo PECL extension is missing." => "Bestandsinformatie PECL extensie ontbreekt.", + "Opening fileinfo database failed." => "Openen van bestandsinformatie database is mislukt.", + "You can't upload such files." => "Uploaden van dergelijke bestanden is niet mogelijk.", + "The file '{file}' does not exist." => "Het bestand '{file}' bestaat niet.", + "Cannot read '{file}'." => "Kan bestand '{file}' niet lezen.", + "Cannot copy '{file}'." => "Kan bestand '{file}' niet kopiëren.", + "Cannot move '{file}'." => "Kan bestand '{file}' niet verplaatsen.", + "Cannot delete '{file}'." => "Kan bestand '{file}' niet verwijderen.", + "Cannot delete the folder." => "De map kan niet verwijderd worden.", + "Click to remove from the Clipboard" => "Klik om te verwijderen van het klembord.", + "This file is already added to the Clipboard." => "Dit bestand was reeds toegevoegd aan het klembord.", + "The files in the Clipboard are not readable." => "De bestanden op het klembord kunnen niet gelezen worden.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} bestanden op het klembord zijn niet leesbaar. Wilt u de rest toch kopiëren?", + "The files in the Clipboard are not movable." => "De bestanden op het klembord kunnen niet verplaatst worden.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} bestanden op het klembord kunnen niet verplaatst worden. Wilt u de rest toch verplaatsen?", + "The files in the Clipboard are not removable." => "De bestanden op het klembord kunnen niet verwijderd worden.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} bestanden op het klembord kunnen niet verwijderd worden. Wilt u de rest toch verwijderen?", + "The selected files are not removable." => "De geselecteerde bestanden kunnen niet verwijderd worden.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} geselecteerde bestanden kunnen niet verwijderd worden. Wilt u de rest toch verwijderen?", + "Are you sure you want to delete all selected files?" => "Weet u zeker dat u alle geselcteerde bestanden wilt verwijderen?", + "Failed to delete {count} files/folders." => "{count} bestanden/mappen konden niet verwijderd worden.", + "A file or folder with that name already exists." => "Er bestaat reeds een bestand of map met die naam.", + "Copy files here" => "Kopieer bestanden hierheen", + "Move files here" => "Verplaats bestanden hierheen", + "Delete files" => "Verwijder bestanden", + "Clear the Clipboard" => "Klembord leegmaken", + "Are you sure you want to delete all files in the Clipboard?" => "Weet u zeker dat u alle bestanden op het klembord wilt verwijderen?", + "Copy {count} files" => "Kopieer {count} bestanden", + "Move {count} files" => "Verplaats {count} bestanden", + "Add to Clipboard" => "Voeg toe aan klembord", + "Inexistant or inaccessible folder." => "Map bestaat niet of kon niet worden benaderd.", + "New folder name:" => "Nieuwe mapnaam:", + "New file name:" => "Nieuwe bestandsnaam:", + "Upload" => "Upload", + "Refresh" => "Verversen", + "Settings" => "Instellingen", + "Maximize" => "Maximaliseren", + "About" => "Over", + "files" => "bestanden", + "selected files" => "geselecteerde bestanden", + "View:" => "Beeld:", + "Show:" => "Weergeven:", + "Order by:" => "Sorteren op:", + "Thumbnails" => "Miniatuurweergaven", + "List" => "Lijst", + "Name" => "Naam", + "Type" => "Type", + "Size" => "Grootte", + "Date" => "Datum", + "Descending" => "Aflopend", + "Uploading file..." => "Bestand uploaden...", + "Loading image..." => "Afbeelding wordt geladen...", + "Loading folders..." => "Mappen worden geladen...", + "Loading files..." => "Bestanden worden geladen ...", + "New Subfolder..." => "Nieuwe submap...", + "Rename..." => "Hernoemen...", + "Delete" => "Verwijderen", + "OK" => "OK", + "Cancel" => "Annuleren", + "Select" => "Selecteer", + "Select Thumbnail" => "Selecteer miniatuurweergave", + "Select Thumbnails" => "Kies miniatuurweergaven", + "View" => "Beeld", + "Download" => "Download", + "Download files" => "Bestanden downloaden", + "Clipboard" => "Klembord", + "Checking for new version..." => "Zoeken naar een nieuwere versie...", + "Unable to connect!" => "Kan geen verbinding maken!", + "Download version {version} now!" => "Download versie {version} nu!", + "KCFinder is up to date!" => "KCFinder is up to date!", + "Licenses:" => "Licenties:", + "Attention" => "Attentie", + "Question" => "Vraag", + "Yes" => "Ja", + "No" => "Nee", + "You cannot rename the extension of files!" => "U kan de extensie van bestanden niet hernoemen!", + "Uploading file {number} of {count}... {progress}" => "Bestand {number} van de {count} aan het uploaden... {progress}", + "Failed to upload {filename}!" => "Uploaden van {filename} mislukt!", + "Close" => "Vorige", + "Previous" => "Terug", + "Next" => "Volgende", + "Confirmation" => "Bevestiging", + "Warning" => "Waarschuwing", +); + +?> diff --git a/additions/kcfinder/lang/no.php b/additions/kcfinder/lang/no.php new file mode 100644 index 0000000..80aaf6a --- /dev/null +++ b/additions/kcfinder/lang/no.php @@ -0,0 +1,242 @@ + "nb_NO.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "Du har ikke tilgang til å laste opp filer", + + "You don't have permissions to browse server." => + "Du har ikke tilgang til å bla igjennom server", + + "Cannot move uploaded file to target folder." => + "Kan ikke flytte fil til denne mappen", + + "Unknown error." => + "Ukjent feil.", + + "The uploaded file exceeds {size} bytes." => + "Filen er for stor.", + + "The uploaded file was only partially uploaded." => + "Opplastning delvis fullført.", + + "No file was uploaded." => + "Ingen filer lastet opp", + + "Missing a temporary folder." => + "Mangler midlertidig mappe.", + + "Failed to write file." => + "Feil ved skriving til fil.", + + "Denied file extension." => + "Feil filformat", + + "Unknown image format/encoding." => + "Ukjent bildeformat.", + + "The image is too big and/or cannot be resized." => + "Bildet er for stort eller kan ikke skaleres ned.", + + "Cannot create {dir} folder." => + "Kan ikke opprette mappe.", + + "Cannot write to upload folder." => + "Ingen tilgang til å skrive til denne mappen.", + + "Cannot read .htaccess" => + "Kan ikke lese .htaccess.", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Feil! Kan ikke skrive til denne filen", + + "Cannot read upload folder." => + "Kan ikke lese denne mappen.", + + "Cannot access or create thumbnails folder." => + "Ikke tilgang til mappen for miniatyrbilder", + + "Cannot access or write to upload folder." => + "Ikke tilgang til opplastningsmappe.", + + "Please enter new folder name." => + "Skriv inn nytt navn til denne mappen.", + + "Unallowable characters in folder name." => + "Ulovlige tegn i mappenavn.", + + "Folder name shouldn't begins with '.'" => + "Mappenavnet kan ikke begynne med '.'", + + "Please enter new file name." => + "Skriv inn nytt filnavn ", + + "Unallowable characters in file name." => + "Ulovlige tegn i filnavn.", + + "File name shouldn't begins with '.'" => + "Filnavn kan ikke starte med '.'", + + "Are you sure you want to delete this file?" => + "Er du sikker på at du vil slette denne filen?", + + "Are you sure you want to delete this folder and all its content?" => + "Er du sikker på at du vil slette denne mappen og innholdet i den?", + + "Inexistant or inaccessible folder." => + "Kan ikke lese mappe.", + + "Undefined MIME types." => + "Undefined MIME types.", + + "Fileinfo PECL extension is missing." => + "Fileinfo PECL extension is missing.", + + "Opening fileinfo database failed." => + "Opening fileinfo database failed", + + "You can't upload such files." => + "Du kan ikke laste opp denne typen filer", + + "The file '{file}' does not exist." => + "Filen '{file}' finnes ikke.", + + "Cannot read '{file}'." => + "Kan ikke lese '{file}'.", + + "Cannot copy '{file}'." => + "Kan ikke kopiere '{file}'.", + + "Cannot move '{file}'." => + "Kan ikke flytte '{file}'.", + + "Cannot delete '{file}'." => + "Kan ikke slette '{file}'.", + + "Click to remove from the Clipboard" => + "Klikk for å fjerne fra utklippstavle", + + "This file is already added to the Clipboard." => + "Filen finnes allerede på utklippstavlen", + + "Copy files here" => + "Kopier filene til ;", + + "Move files here" => + "Flytt filene til ;", + + "Delete files" => + "Slett filer", + + "Clear the Clipboard" => + "Tøm utklippstavle", + + "Are you sure you want to delete all files in the Clipboard?" => + "Er du sikker på at du vil slette alle filene i utklippstavlen?", + + "Copy {count} files" => + "Kopier {count} filer", + + "Move {count} files" => + "Flytt {count} filer ", + + "Add to Clipboard" => + "Legg til i utklippstavle", + + "New folder name:" => "Nytt mappenavn:", + "New file name:" => "Nytt filnavn:", + + "Upload" => "Last opp", + "Refresh" => "Oppdater", + "Settings" => "Innstillinger", + "Maximize" => "Maksimer", + "About" => "Om/Hjelp", + "files" => "filer", + "View:" => "Vis:", + "Show:" => "Vis:", + "Order by:" => "Sorter etter:", + "Thumbnails" => "Miniatyrbilder", + "List" => "Liste", + "Name" => "Navn", + "Size" => "Størrelse", + "Date" => "Dato", + "Descending" => "Synkende", + "Uploading file..." => "Laster opp fil...", + "Loading image..." => "Laster bilde...", + "Loading folders..." => "Laster mapper...", + "Loading files..." => "Laster filer...", + "New Subfolder..." => "Ny undermappe...", + "Rename..." => "Endre navn...", + "Delete" => "Slett", + "OK" => "OK", + "Cancel" => "Avbryt", + "Select" => "Velg", + "Select Thumbnail" => "Velg miniatyrbilde", + "View" => "Vis", + "Download" => "Last ned", + "Clipboard" => "Utklippstavle", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Kan ikke endre navnet på mappen.", + + "Non-existing directory type." => + "Denne finnes ikke.", + + "Cannot delete the folder." => + "Kan ikke slette mappe.", + + "The files in the Clipboard are not readable." => + "Kan ikke lese filene i utklippstavlen.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} filer i utklippstavlen kan ikke leses, ønsker du kopiere resten av filene?", + + "The files in the Clipboard are not movable." => + "Filene i utklippstavlen kan ikke flyttes", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} filer i utklippstavlen kan ikke flyttes, ønsker du å flytte resten?", + + "The files in the Clipboard are not removable." => + "Filene i utklippstavlen kan ikke flyttes.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} filer i utklippstavlen kan ikke flyttes, ønsker du å flytte resten?", + + "The selected files are not removable." => + "Merkede filer kan ikke flyttes.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} filer kan ikke flyttes, ønsker du å flytte resten?", + + "Are you sure you want to delete all selected files?" => + "Er du sikker på at du ønsker å slette alle merkede filer?", + + "Failed to delete {count} files/folders." => + "Feil ved sletting av {count} filer/mapper.", + + "A file or folder with that name already exists." => + "En fil eller mappe finnes allerede med dette navnet", + + "selected files" => "merkede filer", + "Type" => "Type", + "Select Thumbnails" => "Velg miniatyrbilde", + "Download files" => "Last ned filer", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/pl.php b/additions/kcfinder/lang/pl.php new file mode 100644 index 0000000..413b5f9 --- /dev/null +++ b/additions/kcfinder/lang/pl.php @@ -0,0 +1,127 @@ + "pl_PL.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "Nie masz zezwolenia na wysyłanie plików.", + "You don't have permissions to browse server." => "Nie masz zezwolenia na przeglądanie serwera.", + "Cannot move uploaded file to target folder." => "Nie można przenieść wysłanego pliku do folderu plików wysłanych.", + "Unknown error." => "Nieokreślony błąd.", + "The uploaded file exceeds {size} bytes." => "Wysyłany plik przekroczył rozmiar {size} bajtów", + "The uploaded file was only partially uploaded." => "Wysyłany plik nie został przesłany w całości.", + "No file was uploaded." => "Żaden plik nie został przesłany", + "Missing a temporary folder." => "Brak katalogu domyślnego.", + "Failed to write file." => "Błąd zapisu pliku.", + "Denied file extension." => "Niedozwolone rozszerzenie pliku.", + "Unknown image format/encoding." => "Nie znany format/kodowanie pliku.", + "The image is too big and/or cannot be resized." => "Obraz jest zbyt duży i/lub nie może zostać zmieniony jego rozmiar.", + "Cannot create {dir} folder." => "Nie można utworzyć katalogu {dir}.", + "Cannot rename the folder." => "Nie można zmienić nazwy katalogu.", + "Cannot write to upload folder." => "Nie można zapisywać do katalogu plików wysłanych.", + "Cannot read .htaccess" => "Nie można odczytać pliku .htaccess", + "Incorrect .htaccess file. Cannot rewrite it!" => "Nie prawidłowy plik .htaccess. Nie można go zapisać!", + "Cannot read upload folder." => "Nie można odczytać katalogu plików wysłanych.", + "Cannot access or create thumbnails folder." => "Nie ma dostępu lub nie można utworzyć katalogu miniatur.", + "Cannot access or write to upload folder." => "Nie ma dostępu lub nie można zapisywać do katalogu plików wysłanych.", + "Please enter new folder name." => "Proszę podać nową nazwę katalogu.", + "Unallowable characters in folder name." => "Niedozwolony znak w nazwie folderu.", + "Folder name shouldn't begins with '.'" => "Nazwa katalogu nie może zaczynać się od '.'", + "Please enter new file name." => "Proszę podać nową nazwę pliku", + "Unallowable characters in file name." => "Nie dozwolony znak w nazwie pliku.", + "File name shouldn't begins with '.'" => "Nazwa pliku nie powinna zaczynać się od '.'", + "Are you sure you want to delete this file?" => "Czy jesteś pewien, że chcesz skasować ten plik?", + "Are you sure you want to delete this folder and all its content?" => "Czy jesteś pewien, że chcesz skasować ten katalog i jego zawartość?", + "Non-existing directory type." => "Nie istniejący katalog.", + "Undefined MIME types." => "Niezidentyfikowany typ MIME.", + "Fileinfo PECL extension is missing." => "Brak rozszerzenia Fileinfo PECL.", + "Opening fileinfo database failed." => "Otwieranie bazy danych fileinfo nie udane.", + "You can't upload such files." => "Nie możesz wysyłać plików tego typu.", + "The file '{file}' does not exist." => "Plik {file} nie istnieje.", + "Cannot read '{file}'." => "Nie można odczytać pliku '{file}'.", + "Cannot copy '{file}'." => "Nie można skopiować pliku '{file}'.", + "Cannot move '{file}'." => "Nie można przenieść pliku '{file}'.", + "Cannot delete '{file}'." => "Nie można usunąć pliku '{file}'.", + "Cannot delete the folder." => "Nie można usunąć katalogu.", + "Click to remove from the Clipboard" => "Kliknij aby usunąć ze Schowka", + "This file is already added to the Clipboard." => "Ten plik już został dodany do Schowka.", + "The files in the Clipboard are not readable." => "Pliki w Schowku nie mogą zostać odczytane.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} plik(i/ów) ze Schowka nie może zostać odczytanych. Czy chcesz skopiować pozostałe?", + "The files in the Clipboard are not movable." => "Pliki w Schowku nie mogą zostać przeniesione.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} plik(i/ów) ze Schowka nie może zostać przeniesionych. Czy chcesz przenieść pozostałe?", + "The files in the Clipboard are not removable." => "Nie można usunąć plików ze Schowka.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} plik(i/ów) ze Schowka nie może zostać usunięty(ch). Czy usunąć pozostałe?", + "The selected files are not removable." => "Wybrane pliki nie mogą zostać usunięte.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} wybrany(ch) plików nie może zostać usunięte. Czy usunąć pozostałe?", + "Are you sure you want to delete all selected files?" => "Czy jesteś pewien że, chcesz usunąć wszystkie wybrane pliki?", + "Failed to delete {count} files/folders." => "Nie udało się usunąć {count} plik(i/ów) / folder(u/ów).", + "A file or folder with that name already exists." => "Plik lub katalog o tej nazwie już istnieje.", + "Copy files here" => "Kopiuj pliki tutaj", + "Move files here" => "Przenieś pliki tutaj", + "Delete files" => "Usuń pliki", + "Clear the Clipboard" => "Wyczyść Schowek", + "Are you sure you want to delete all files in the Clipboard?" => "Czy jesteś pewien, że chcesz usunąć wszystkie pliki ze schowka?", + "Copy {count} files" => "Kopiowanie {count} plików", + "Move {count} files" => "Przenoszenie {count} plików", + "Add to Clipboard" => "Dodaj do Schowka", + "Inexistant or inaccessible folder." => "Nieistniejący lub niedostępny folder.", + "New folder name:" => "Nazwa nowego katalogu:", + "New file name:" => "Nowa nazwa pliku:", + "Upload" => "Wyślij", + "Refresh" => "Odśwież", + "Settings" => "Ustawienia", + "Maximize" => "Maksymalizuj", + "About" => "O...", + "files" => "pliki", + "selected files" => "wybrane pliki", + "View:" => "Widok:", + "Show:" => "Pokaż:", + "Order by:" => "Sortuj według:", + "Thumbnails" => "Miniatury", + "List" => "Lista", + "Name" => "Nazwa", + "Type" => "Typ", + "Size" => "Rozmiar", + "Date" => "Data", + "Descending" => "Malejąco", + "Uploading file..." => "Wysyłanie pliku...", + "Loading image..." => "Ładowanie obrazu...", + "Loading folders..." => "Ładowanie katalogów...", + "Loading files..." => "Ładowanie plików...", + "New Subfolder..." => "Nowy pod-katalog...", + "Rename..." => "Zmień nazwę...", + "Delete" => "Usuń", + "OK" => "OK", + "Cancel" => "Anuluj", + "Select" => "Wybierz", + "Select Thumbnail" => "Wybierz miniaturę", + "Select Thumbnails" => "Wybierz miniatury", + "View" => "Podgląd", + "Download" => "Pobierz", + "Download files" => "Pobierz pliki", + "Clipboard" => "Schowek", + "Checking for new version..." => "Sprawdzanie najnowszej dostępnej wersji ...", + "Unable to connect!" => "Nie udało się nawiązać połączenia!", + "Download version {version} now!" => "Pobierz wersję {version}.", + "KCFinder is up to date!" => "Korzystasz z najnowszej wersji KCFinder!", + "Licenses:" => "Licencja:", + "Attention" => "Uwaga", + "Question" => "Pytanie", + "Yes" => "Tak", + "No" => "Nie", + "You cannot rename the extension of files!" => "Nie możesz zmienić rozszerzeń plików!", + "Uploading file {number} of {count}... {progress}" => "Wysyłanie pliku nr {number} spośród {count} ... {progress}", + "Failed to upload {filename}!" => "Wysyłanie pliku {filename} nie powiodło się!", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/pt-br.php b/additions/kcfinder/lang/pt-br.php new file mode 100644 index 0000000..8d60953 --- /dev/null +++ b/additions/kcfinder/lang/pt-br.php @@ -0,0 +1,130 @@ + "pt_BR.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "Você não tem permissões para fazer upload de arquivos.", + "You don't have permissions to browse server." => "Você não tem permissões para procurar no servidor.", + "Cannot move uploaded file to target folder." => "Não é possível mover o arquivo enviado para a pasta de destino.", + "Unknown error." => "Erro desconhecido.", + "The uploaded file exceeds {size} bytes." => "O arquivo enviado excede {size} bytes.", + "The uploaded file was only partially uploaded." => "O arquivo enviado foi apenas parcialmente carregado.", + "No file was uploaded." => "Nenhum arquivo foi transferido.", + "Missing a temporary folder." => "Faltando uma pasta temporária.", + "Failed to write file." => "Falha ao gravar arquivo.", + "Denied file extension." => "Extensão de arquivo não permitida.", + "Unknown image format/encoding." => "Formato de imagem desconhecido/codificação.", + "The image is too big and/or cannot be resized." => "A imagem é muito grande e/ou não pode ser redimensionada.", + "Cannot create {dir} folder." => "Não é possível criar pasta em '{dir}'.", + "Cannot rename the folder." => "Não é possível renomear a pasta.", + "Cannot write to upload folder." => "Não é possível salvar na pasta.", + "Cannot read .htaccess" => "Não é possível ler '.htaccess'.", + "Incorrect .htaccess file. Cannot rewrite it!" => "Arquivo '.htaccess' incorreto. Não é possível alterar.", + "Cannot read upload folder." => "Não é possível ler a pasta de upload.", + "Cannot access or create thumbnails folder." => "Não é possível acessar ou criar pasta de miniaturas.", + "Cannot access or write to upload folder." => "Não é possível acessar ou salvar para a pasta.", + "Please enter new folder name." => "Por favor, digite o nome da nova pasta.", + "Unallowable characters in folder name." => "Caracteres no nome da pasta não Autorizado.", + "Folder name shouldn't begins with '.'" => "Nome da pasta não deve começar com '.'.", + "Please enter new file name." => "Por favor, digite o novo nome de arquivo.", + "Unallowable characters in file name." => "Caracteres no nome do arquivo não Autorizado.", + "File name shouldn't begins with '.'" => "O nome da pasta não deve começar por '.'.", + "Are you sure you want to delete this file?" => "Tem a certeza de que deseja excluir este arquivo?", + "Are you sure you want to delete this folder and all its content?" => "Tem a certeza de que deseja excluir esta pasta e todo o seu conte�do?", + "Non-existing directory type." => "Tipo de diretório não existente.", + "Undefined MIME types." => "Tipos MIME indefinidos.", + "Fileinfo PECL extension is missing." => "Está faltando Informações do arquivo extensão PECL.", + "Opening fileinfo database failed." => "Abrir banco de dados de fileinfo falhou.", + "You can't upload such files." => "Você não pode enviar esses arquivos.", + "The file '{file}' does not exist." => "O arquivo '{file}' não existe.", + "Cannot read '{file}'." => "Não é possível ler '{file}'.", + "Cannot copy '{file}'." => "Não é possível copiar '{file}'.", + "Cannot move '{file}'." => "Não é possível mover '{file}'.", + "Cannot delete '{file}'." => "Não é possível deletar '{file}'.", + "Cannot delete the folder." => "Não é possível excluir a pasta.", + "Click to remove from the Clipboard" => "Clique para remover da área de transferência", + "This file is already added to the Clipboard." => "Este arquivo já foi adicionado à área de transferência.", + "The files in the Clipboard are not readable." => "Os arquivos da área de transferência não podem ser lidos.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} arquivos da área de transferência não podem ser lidos. Você deseja copiar o resto?", + "The files in the Clipboard are not movable." => "Os arquivos da área de transferência não podem ser removidos.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} arquivos da área de transferência não podem ser movidos. Você deseja mover o resto?", + "The files in the Clipboard are not removable." => "Os arquivos da área de transferência não podem ser removidos.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} arquivos da área de transferência não são removíveis. Você deseja excluir o restante?", + "The selected files are not removable." => "Os arquivos selecionados não são removíveis.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} arquivos selecionados não são removíveis. Você deseja excluir o restante?", + "Are you sure you want to delete all selected files?" => "Tem a certeza de que deseja excluir todos os arquivos selecionados?", + "Failed to delete {count} files/folders." => "Não conseguiu excluir {count} arquivos/pastas.", + "A file or folder with that name already exists." => "Já existe um arquivo ou pasta com esse nome.", + "Copy files here" => "Copiar arquivos aqui", + "Move files here" => "Mover arquivos aqui", + "Delete files" => "Deletar arquivos", + "Clear the Clipboard" => "Limpar a área de transferência", + "Are you sure you want to delete all files in the Clipboard?" => "Tem a certeza de que deseja excluir todos os arquivos da área de transferência?", + "Copy {count} files" => "Copiar {count} arquivos", + "Move {count} files" => "Mover {count} arquivos", + "Add to Clipboard" => "Adicionar à área de transferência", + "Inexistant or inaccessible folder." => "Pasta inacessível ou inexistente.", + "New folder name:" => "Nome da nova pasta:", + "New file name:" => "Novo nome do arquivo:", + "Upload" => "Enviar arquivo", + "Refresh" => "Atualizar", + "Settings" => "Configurações", + "Maximize" => "Maximizar", + "About" => "Sobre", + "files" => "Arquivos", + "selected files" => "arquivos selecionados", + "View:" => "Exibir:", + "Show:" => "Mostrar:", + "Order by:" => "Ordenar por:", + "Thumbnails" => "Miniaturas", + "List" => "Lista", + "Name" => "Nome", + "Type" => "Tipo", + "Size" => "Tamanho", + "Date" => "Data", + "Descending" => "Descendente", + "Uploading file..." => "Carregando arquivo...", + "Loading image..." => "Carregando imagem...", + "Loading folders..." => "Carregando pastas...", + "Loading files..." => "Carregando arquivos...", + "New Subfolder..." => "Nova subpasta...", + "Rename..." => "Renomear...", + "Delete" => "Excluir", + "OK" => "OK", + "Cancel" => "Cancelar", + "Select" => "Selecionar", + "Select Thumbnail" => "Selecionar miniatura", + "Select Thumbnails" => "Selecionar miniaturas", + "View" => "Exibir", + "Download" => "Download", + "Download files" => "Baixar arquivos", + "Clipboard" => "área de transferência", + "Checking for new version..." => "Checando por nova versão...", + "Unable to connect!" => "Não foi possível conectar!", + "Download version {version} now!" => "Baixe a versão {version} agora!", + "KCFinder is up to date!" => "KCFinder está atualizado!", + "Licenses:" => "Licenças", + "Attention" => "Atenção", + "Question" => "Pergunta", + "Yes" => "Sim", + "No" => "Não", + "You cannot rename the extension of files!" => "Você não pode renomear a extensão de arquivos!", + "Uploading file {number} of {count}... {progress}" => "Enviando arquivo {number} de {count}... {progress}", + "Failed to upload {filename}!" => "Falha no envio do arquivo {filename}!", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/pt.php b/additions/kcfinder/lang/pt.php new file mode 100644 index 0000000..0c9d4be --- /dev/null +++ b/additions/kcfinder/lang/pt.php @@ -0,0 +1,243 @@ + "pt_PT.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "Não tem permissão para enviar ficheiros.", + + "You don't have permissions to browse server." => + "Não tem permissão para navegar no servidor.", + + "Cannot move uploaded file to target folder." => + "Não pode mover ficheiros enviados para a pasta definida.", + + "Unknown error." => + "Erro indefinido.", + + "The uploaded file exceeds {size} bytes." => + "O ficheiro enviado tem mais que {size} bytes.", + + "The uploaded file was only partially uploaded." => + "O ficheiro foi apenas enviado parcialmente.", + + "No file was uploaded." => + "Nenhum ficheiro enviado.", + + "Missing a temporary folder." => + "Falta a pasta temporária.", + + "Failed to write file." => + "Não foi possível guardar o ficheiro.", + + "Denied file extension." => + "Extensão do ficheiro inválida.", + + "Unknown image format/encoding." => + "Formato/codificação da imagem desconhecido.", + + "The image is too big and/or cannot be resized." => + "A imagem é muito grande e não pode ser redimensionada.", + + "Cannot create {dir} folder." => + "Não foi possível criar a pasta '{dir}'.", + + "Cannot write to upload folder." => + "Não foi possível guardar o ficheiro.", + + "Cannot read .htaccess" => + "Não foi possível ler o ficheiro .htaccess", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Ficheiro '.htaccess' incorrecto. Não foi possível altera-lo.", + + "Cannot read upload folder." => + "Não foi possível ler a pasta de upload.", + + "Cannot access or create thumbnails folder." => + "Não foi possível aceder ou criar a pasta de miniaturas.", + + "Cannot access or write to upload folder." => + "Não foi possível aceder ou criar a pasta de upload.", + + "Please enter new folder name." => + "Por favor insira o nome da pasta.", + + "Unallowable characters in folder name." => + "Caracteres não autorizados no nome da pasta.", + + "Folder name shouldn't begins with '.'" => + "O nome da pasta não deve começar por '.'", + + "Please enter new file name." => + "Por favor defina o nome do ficheiro.", + + "Unallowable characters in file name." => + "Caracteres não autorizados no nome do ficheiro.", + + "File name shouldn't begins with '.'" => + "O nome do ficheiro não deve começar por '.'", + + "Are you sure you want to delete this file?" => + "Tem a certeza que deseja apagar este ficheiro?", + + "Are you sure you want to delete this folder and all its content?" => + "Tem a certeza que deseja apagar esta pasta e todos os seus conteúdos?", + + "Inexistant or inaccessible folder." => + "Pasta inexistente ou inacessível.", + + "Undefined MIME types." => + "Tipos MIME indefinidos.", + + "Fileinfo PECL extension is missing." => + "Falta a extensão PECL nas informações do ficheiro.", + + "Opening fileinfo database failed." => + "Erro a abrir a informação do ficheiro.", + + "You can't upload such files." => + "Não pode enviar esse tipo de ficheiros.", + + "The file '{file}' does not exist." => + "O ficheiro '{file}' não existe.", + + "Cannot read '{file}'." => + "Não pode ler '{file}'.", + + "Cannot copy '{file}'." => + "Não pode copiar '{file}'.", + + "Cannot move '{file}'." => + "Não pode mover '{file}'.", + + "Cannot delete '{file}'." => + "Não pode apagar '{file}'.", + + "Click to remove from the Clipboard" => + "Clique aqui para remover do Clipboard", + + "This file is already added to the Clipboard." => + "Este ficheiros já foi adicionado ao Clipboard.", + + "Copy files here" => + "Copiar ficheiros para aqui", + + "Move files here" => + "Mover ficheiros para aqui", + + "Delete files" => + "Apagar ficheiros", + + "Clear the Clipboard" => + "Limpar Clipboard", + + "Are you sure you want to delete all files in the Clipboard?" => + "Tem a certeza que deseja apagar todos os ficheiros que estão no Clipboard?", + + "Copy {count} files" => + "Copiar {count} ficheiros", + + "Move {count} files" => + "Mover {count} ficheiros", + + "Add to Clipboard" => + "Adicionar ao Clipboard", + + "New folder name:" => "Nome da pasta:", + "New file name:" => "Nome do ficheiro:", + + "Upload" => "Enviar", + "Refresh" => "Actualizar", + "Settings" => "Preferências", + "Maximize" => "Maximizar", + "About" => "Acerca de", + "files" => "Ficheiros", + "View:" => "Ver:", + "Show:" => "Mostrar:", + "Order by:" => "Ordenar por:", + "Thumbnails" => "Miniatura", + "List" => "Lista", + "Name" => "Nome", + "Size" => "Tamanho", + "Date" => "Data", + "Descending" => "", + "Uploading file..." => "Carregando ficheiro...", + "Loading image..." => "Carregando imagens...", + "Loading folders..." => "Carregando pastas...", + "Loading files..." => "Carregando ficheiros...", + "New Subfolder..." => "Nova pasta...", + "Rename..." => "Alterar nome...", + "Delete" => "Eliminar", + "OK" => "OK", + "Cancel" => "Cancelar", + "Select" => "Seleccionar", + "Select Thumbnail" => "Seleccionar miniatura", + "View" => "Ver", + "Download" => "Sacar", + "Clipboard" => "Clipboard", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Não pode alterar o nome da pasta.", + + "Non-existing directory type." => + "Tipo de pasta inexistente.", + + "Cannot delete the folder." => + "Não pode apagar a pasta.", + + "The files in the Clipboard are not readable." => + "Os ficheiros que estão no Clipboard não podem ser copiados.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} ficheiros do Clipboard não podem ser copiados. Pretende copiar os restantes?", + + "The files in the Clipboard are not movable." => + "Os ficheiros que estão no Clipboard não podem ser movidos.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} ficheiros do Clipboard não podem ser movidos. Pretende mover os restantes?", + + "The files in the Clipboard are not removable." => + "Os ficheiros que estão no Clipboard não podem ser removidos.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} ficheiros do Clipboard não podem ser removidos. Pretende apagar os restantes?", + + "The selected files are not removable." => + "Os ficheiros seleccionados não podem ser removidos.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "Não pode remover {count} ficheiros. Pretende apagar os restantes?", + + "Are you sure you want to delete all selected files?" => + "Tem a certeza que deseja apagar os ficheiros seleccionados?", + + "Failed to delete {count} files/folders." => + "Ocorreu um erro a apagar {count} ficheiros/pastas.", + + "A file or folder with that name already exists." => + "Já existe um ficheiro ou pasta com esse nome.", + + "selected files" => "Ficheiros seleccionados", + "Type" => "Tipo", + "Select Thumbnails" => "Seleccionar miniaturas", + "Download files" => "Sacar ficheiros", +); + +?> diff --git a/additions/kcfinder/lang/ro.php b/additions/kcfinder/lang/ro.php new file mode 100644 index 0000000..ecbe6ac --- /dev/null +++ b/additions/kcfinder/lang/ro.php @@ -0,0 +1,126 @@ + "ro_RO.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "Nu aveți permisiunea de a încărca fișiere.", + "You don't have permissions to browse server." => "Nu aveți permisiunea de a naviga pe server.", + "Cannot move uploaded file to target folder." => "Fișierul încărcat nu poate fi mutat în dosarul țintă.", + "Unknown error." => "Eroare necunoscută.", + "The uploaded file exceeds {size} bytes." => "Fișierul încărcat depășește {size} biți.", + "The uploaded file was only partially uploaded." => "Fișierul încărcat a fost încărcat doar parțial.", + "No file was uploaded." => "Nu a fost încărcat niciun fișier.", + "Missing a temporary folder." => "Nu există un dosar de fișiere temporare.", + "Failed to write file." => "Fișierul nu a fost scris.", + "Denied file extension." => "Extensie de fișier respinsă.", + "Unknown image format/encoding." => "Format/Codificare imagine necunoscut/ă.", + "The image is too big and/or cannot be resized." => "Imaginea este prea mare și/sau nu poate fi redimensionată.", + "Cannot create {dir} folder." => "Dosarul {dir} nu poate fi creat.", + "Cannot rename the folder." => "Dosarul nu poate fi numit din nou.", + "Cannot write to upload folder." => "Nu se poate scrie la dosarul de încărcare.", + "Cannot read .htaccess" => "Nu se poate citi .htacces", + "Incorrect .htaccess file. Cannot rewrite it!" => "Fișier .htacces incorect. Nu poate fi rescris!", + "Cannot read upload folder." => "Dosarul de încărcare nu poate fi citit.", + "Cannot access or create thumbnails folder." => "Dosarul de imagini în miniatură nu poate fi accesat sau creat.", + "Cannot access or write to upload folder." => "Dosarul de încărcare nu poate fi accesat sau creat.", + "Please enter new folder name." => "Vă rugăm să introduceți un nume de dosar nou.", + "Unallowable characters in folder name." => "Caractere nepermise în numele dosarului.", + "Folder name shouldn't begins with '.'" => "Numele dosarului nu trebuie să înceapă cu '.' ", + "Please enter new file name." => "Vă rugăm să introduceți un nou nume al fișierului.", + "Unallowable characters in file name." => "Caractere nepermise în numele fișierului.", + "File name shouldn't begins with '.'" => "Numele fișierului nu ar trebui să înceapă cu '.' ", + "Are you sure you want to delete this file?" => "Sigur doriți să ștergeți acest fișier?", + "Are you sure you want to delete this folder and all its content?" => "Sigur doriți să ștergeți acest dosar și toate conținuturile sale?", + "Non-existing directory type." => "Tip director non-existent.", + "Undefined MIME types." => "Tipuri MIME nefedinite.", + "Fileinfo PECL extension is missing." => "Extensia PECL lipsește.", + "Opening fileinfo database failed." => "Deschiderea bazei de date fileinfo a eșuat.", + "You can't upload such files." => "Nu puteți încărca asemenea fișiere.", + "The file '{file}' does not exist." => "Fișierul '{file}' nu există.", + "Cannot read '{file}'." => "Fișierul '{file}' nu poate fi citit.", + "Cannot copy '{file}'." => "Fișierul '{file}' nu poate fi copiat.", + "Cannot move '{file}'." => "Fișierul '{file}' nu poate fi mutat.", + "Cannot delete '{file}'." => "Fișierul '{file}' nu poate fi șters.", + "Cannot delete the folder." => "Dosarul nu poate fi șters.", + "Click to remove from the Clipboard" => "Faceți clic pentru a elimina de pe clipboard.", + "This file is already added to the Clipboard." => "Acest fișier este adăugat deja pe clipboard.", + "The files in the Clipboard are not readable." => "Fișierele de pe clipboard nu pot fi citite.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} fișiere de pe clipboard nu pot fi citite. Doriți să copiați restul fișierelor?", + "The files in the Clipboard are not movable." => "Fișierele de pe clipboard nu pot fi mutate.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} fișiere de pe clipboard nu pot fi mutate. Doriți să mutați restul fișierelor?", + "The files in the Clipboard are not removable." => "Fișierele de pe clipboard nu pot fi fi mutate.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} fișiere de pe clipboard nu pot fi înlăturate. Doriți să înlăturați restul fișierelor?", + "The selected files are not removable." => "Fișierele selectate nu pot fi mutate.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} fișiere selectate nu pot fi înlăturate. Doriți să ștergeți restul fișierelor?", + "Are you sure you want to delete all selected files?" => "Sigur doriți să ștergeți toate fișierele selectate?", + "Failed to delete {count} files/folders." => "{count} fișiere/dosare nu au putut fi șterse.", + "A file or folder with that name already exists." => "Există deja un fișier sau dosar cu acest nume.", + "Copy files here" => "Copiați fișierele aici", + "Move files here" => "Mutați fișierele aici", + "Delete files" => "Ștergeți fișierele", + "Clear the Clipboard" => "Eliberare clipboard", + "Are you sure you want to delete all files in the Clipboard?" => "Sigur doriți să ștergeți fișierele de pe clipboard?", + "Copy {count} files" => "Copiați {count} fișiere", + "Move {count} files" => "Mutați {count} fișiere", + "Add to Clipboard" => "Adăugați pe clipboard", + "Inexistant or inaccessible folder." => "Dosar inexistent sau inaccesibil.", + "New folder name:" => "Nume nou dosar:", + "New file name:" => "Nume nou fișier:", + "Upload" => "Încărcare", + "Refresh" => "Reîmprospătare", + "Settings" => "Setări", + "Maximize" => "Maximizare", + "About" => "Despre", + "files" => "fișiere", + "selected files" => "fișiere selectate", + "View:" => "Vizualizare:", + "Show:" => "Afișare:", + "Order by:" => "Ordonare după:", + "Thumbnails" => "Imagini în miniatură", + "List" => "Listă", + "Name" => "Nume", + "Type" => "Tip", + "Size" => "Mărime", + "Date" => "Dată", + "Descending" => "Ordine descrescătoare", + "Uploading file..." => "Încărcare fișier...", + "Loading image..." => "Încărcare imagine...", + "Loading folders..." => "Încărcare dosare...", + "Loading files..." => "Încărcare fișiere...", + "New Subfolder..." => "Sub-dosar nou...", + "Rename..." => "Redenumire...", + "Delete" => "Ștergere", + "OK" => "OK", + "Cancel" => "Anulare", + "Select" => "Selectare", + "Select Thumbnail" => "Selectare imagine în miniatură", + "Select Thumbnails" => "Selectare imagini în miniatură", + "View" => "Vizualizare", + "Download" => "Descărcare", + "Download files" => "Descărcare fișiere", + "Clipboard" => "Clipboard", + "Checking for new version..." => "Verificare versiune nouă...", + "Unable to connect!" => "Conectare imposibilă!", + "Download version {version} now!" => "Descărcați acum versiunea {version}!", + "KCFinder is up to date!" => "KCFinder este actualizat!", + "Licenses:" => "Licențe:", + "Attention" => "Atenție", + "Question" => "Întrebare", + "Yes" => "Da", + "No" => "Nu", + "You cannot rename the extension of files!" => "Nu puteți redenumi extensia fișierelor!", + "Uploading file {number} of {count}... {progress}" => "Încărcare fișier {number} din {count}... {progress}", + "Failed to upload {filename}!" => "Încărcare {filename} eșuată!", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/ru.php b/additions/kcfinder/lang/ru.php new file mode 100644 index 0000000..7450932 --- /dev/null +++ b/additions/kcfinder/lang/ru.php @@ -0,0 +1,133 @@ + "ru_RU.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "У вас нет прав для загрузки файлов.", + "You don't have permissions to browse server." => "У вас нет прав для просмотра содержимого на сервере.", + "Cannot move uploaded file to target folder." => "Невозможно переместить загруженный файл в папку назначения.", + "Unknown error." => "Неизвестная ошибка.", + "The uploaded file exceeds {size} bytes." => "Загруженный файл превышает размер {size} байт.", + "The uploaded file was only partially uploaded." => "Загруженный файл был загружен только частично.", + "No file was uploaded." => "Файл не был загружен", + "Missing a temporary folder." => "Временная папка не существует.", + "Failed to write file." => "Невозможно записать файл.", + "Denied file extension." => "Файлы этого типа запрещены для загрузки.", + "Unknown image format/encoding." => "Неизвестный формат изображения.", + "The image is too big and/or cannot be resized." => "Изображение слишком большое и/или не может быть уменьшено.", + "Cannot create {dir} folder." => "Невозможно создать папку {dir}.", + "Cannot rename the folder." => "Невозможно переименовать папку.", + "Cannot write to upload folder." => "Невозможно записать в папку загрузки.", + "Cannot read .htaccess" => "Невозможно прочитать файл .htaccess", + "Incorrect .htaccess file. Cannot rewrite it!" => "Неправильный файл .htaccess. Невозможно перезаписать!", + "Cannot read upload folder." => "Невозможно прочитать папку загрузки.", + "Cannot access or create thumbnails folder." => "Нет доступа или невозможно создать папку миниатюр.", + "Cannot access or write to upload folder." => "Нет доступа или невозможно записать в папку загрузки.", + "Please enter new folder name." => "Укажите имя новой папки.", + "Unallowable characters in folder name." => "Недопустимые символы в имени папки.", + "Folder name shouldn't begins with '.'" => "Имя папки не может начинаться с '.'", + "Please enter new file name." => "Укажите новое имя файла", + "Unallowable characters in file name." => "Недопустимые символны в имени файла.", + "File name shouldn't begins with '.'" => "Имя файла не может начинаться с '.'", + "Are you sure you want to delete this file?" => "Вы уверены, что хотите удалить этот файл?", + "Are you sure you want to delete this folder and all its content?" => "Вы уверены, что хотите удалить эту папку и всё её содержимое?", + "Non-existing directory type." => "Несуществующий тип папки.", + "Undefined MIME types." => "Неопределённые типы MIME.", + "Fileinfo PECL extension is missing." => "Расширение Fileinfo PECL отсутствует.", + "Opening fileinfo database failed." => "Невозможно открыть базу данных fileinfo.", + "You can't upload such files." => "Вы не можете загружать файлы этого типа.", + "The file '{file}' does not exist." => "Файл '{file}' не существует.", + "Cannot read '{file}'." => "Невозможно прочитать файл '{file}'.", + "Cannot copy '{file}'." => "Невозможно скопировать файл '{file}'.", + "Cannot move '{file}'." => "Невозможно переместить файл '{file}'.", + "Cannot delete '{file}'." => "Невозможно удалить файл '{file}'.", + "Cannot delete the folder." => "Невозможно удалить папку.", + "Click to remove from the Clipboard" => "Нажмите для удаления из буфера обмена", + "This file is already added to the Clipboard." => "Этот файл уже добавлен в буфер обмена.", + "The files in the Clipboard are not readable." => "Невозможно прочитать файлы в буфере обмена.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "Невозможно прочитать {count} файл(ов) в буфере обмена. Вы хотите скопировать оставшиеся?", + "The files in the Clipboard are not movable." => "Невозможно переместить файлы в буфере обмена.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "Невозможно переместить {count} файл(ов) в буфере обмена. Вы хотите переместить оставшиеся?", + "The files in the Clipboard are not removable." => "Невозможно удалить файлы в буфере обмена.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "Невозможно удалить {count} файл(ов) в буфере обмена. Вы хотите удалить оставшиеся?", + "The selected files are not removable." => "Невозможно удалить выбранные файлы.", + "{count} selected files are not removable. Do you want to delete the rest?" => "Невозможно удалить выбранный(е) {count} файл(ы). Вы хотите удалить оставшиеся?", + "Are you sure you want to delete all selected files?" => "Вы уверены, что хотите удалить все выбранные файлы?", + "Failed to delete {count} files/folders." => "Невозможно удалить {count} файлов/папок.", + "A file or folder with that name already exists." => "Файл или папка с таким именем уже существуют.", + "Copy files here" => "Скопировать файлы сюда", + "Move files here" => "Переместить файлы сюда", + "Delete files" => "Удалить файлы", + "Clear the Clipboard" => "Очистить буфер обмена", + "Are you sure you want to delete all files in the Clipboard?" => "Вы уверены, что хотите удалить все файлы в буфере обмена?", + "Copy {count} files" => "Скопировать {count} файл(ов)", + "Move {count} files" => "Переместить {count} файл(ов)", + "Add to Clipboard" => "Добавить в буфер обмена", + "Inexistant or inaccessible folder." => "Несуществующая или недоступная папка.", + "New folder name:" => "Новое имя папки:", + "New file name:" => "Новое имя файла:", + "Upload" => "Загрузить", + "Refresh" => "Обновить", + "Settings" => "Установки", + "Maximize" => "Развернуть", + "About" => "О скрипте", + "files" => "файлы", + "selected files" => "выбранные файлы", + "View:" => "Просмотр:", + "Show:" => "Показывать:", + "Order by:" => "Упорядочить по:", + "Thumbnails" => "Миниатюры", + "List" => "Список", + "Name" => "Имя", + "Type" => "Тип", + "Size" => "Размер", + "Date" => "Дата", + "Descending" => "По убыванию", + "Uploading file..." => "Загрузка файла...", + "Loading image..." => "Загрузка изображения...", + "Loading folders..." => "Загрузка папок...", + "Loading files..." => "Загрузка файлов...", + "New Subfolder..." => "Создать папку...", + "Rename..." => "Переименовать...", + "Delete" => "Удалить", + "OK" => "OK", + "Cancel" => "Отмена", + "Select" => "Выбрать", + "Select Thumbnail" => "Выбрать миниатюру", + "Select Thumbnails" => "Выбрать миниатюры", + "View" => "Просмотр", + "Download" => "Скачать", + "Download files" => "Скачать файлы", + "Clipboard" => "Буфер обмена", + "Checking for new version..." => "Проверяем наличие обновлений...", + "Unable to connect!" => "Невозможно подключиться!", + "Download version {version} now!" => "Скачать версию {version} сейчас!", + "KCFinder is up to date!" => "Вы используете последнюю версию KCFinder'а!", + "Licenses:" => "Лицензии:", + "Attention" => "Внимание", + "Question" => "Вопрос", + "Yes" => "Да", + "No" => "Нет", + "You cannot rename the extension of files!" => "Вы не можете изменять расширения файлов!", + "Uploading file {number} of {count}... {progress}" => "Загрузка {number} файла из {count}... {progress}", + "Failed to upload {filename}!" => "Неудачная попытка загрузки {filename}!", + "Close" => "Закрыть", + "Previous" => "Предыдущий", + "Next" => "Следующий", + "Confirmation" => "Подтверждение", + "Warning" => "Предупреждение", +); + +?> diff --git a/additions/kcfinder/lang/sk.php b/additions/kcfinder/lang/sk.php new file mode 100644 index 0000000..330fb7f --- /dev/null +++ b/additions/kcfinder/lang/sk.php @@ -0,0 +1,127 @@ + + */ + +$lang = array( + + '_locale' => "sk_SK.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B.%Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "Nemáte právo nahrávať súbory.", + "You don't have permissions to browse server." => "Nemáte právo prehliadať súbory na serveri.", + "Cannot move uploaded file to target folder." => "Nie je možné presunúť súbor do zvoleného adresára.", + "Unknown error." => "Neznáma chyba.", + "The uploaded file exceeds {size} bytes." => "Nahratý súbor presahuje {size} bytov.", + "The uploaded file was only partially uploaded." => "Nahratý súbor bol nahraný len čiastočne.", + "No file was uploaded." => "Žiadný súbor nebol nahraný na server.", + "Missing a temporary folder." => "Chyba dočasný adresár.", + "Failed to write file." => "Súbor sa nepodarilo uložiť.", + "Denied file extension." => "Nepodporovaný typ súboru.", + "Unknown image format/encoding." => "Neznamý formát obrázku/encoding.", + "The image is too big and/or cannot be resized." => "Obrázok je príliš veľký/alebo nemohol byť zmenšený.", + "Cannot create {dir} folder." => "Adresár {dir} nie je možné vytvoriť.", + "Cannot rename the folder." => "Adresár nie je možné premenovať.", + "Cannot write to upload folder." => "Nie je možné ukladať do adresára pre nahrávánie.", + "Cannot read .htaccess" => "Nie je možné čítať súbor .htaccess", + "Incorrect .htaccess file. Cannot rewrite it!" => "Chybný súbor .htaccess. Súbor nemožno prepísať!", + "Cannot read upload folder." => "Nie je možné čítať z adresára pre nahrávánie súborov.", + "Cannot access or create thumbnails folder." => "Adresár pre náhľady nie je možné vytvoriť alebo nie je prístupný.", + "Cannot access or write to upload folder." => "Nie je možné pristupovať alebo zapisovať do adresára pre nahrávanie súborov.", + "Please enter new folder name." => "Zadajte prosím nové meno adresára.", + "Unallowable characters in folder name." => "Nepovolené znaky v názve adresára.", + "Folder name shouldn't begins with '.'" => "Meno adresára nesmie začínať znakom '.'", + "Please enter new file name." => "Vložte prosím nové meno súboru.", + "Unallowable characters in file name." => "Nepovolené znaky v názve súboru.", + "File name shouldn't begins with '.'" => "Názov súboru nesmie začínať znakom '.'", + "Are you sure you want to delete this file?" => "Ste si istý že chcete vymazať tento súbor?", + "Are you sure you want to delete this folder and all its content?" => "Ste si istý že chcete vymazať tento adresár a celý jeho obsah?", + "Non-existing directory type." => "Neexistujúci typ adresára.", + "Undefined MIME types." => "Nedefinovaný MIME typ súboru.", + "Fileinfo PECL extension is missing." => "Rozšírenie PECL pre zistenie informácií o súbore chýba.", + "Opening fileinfo database failed." => "Načítanie informácií o súbore zlyhalo.", + "You can't upload such files." => "Tieto súbory nemôžete nahrať na server.", + "The file '{file}' does not exist." => "Tento súbor '{file}' neexistuje.", + "Cannot read '{file}'." => "Nie je možné načítať '{file}'.", + "Cannot copy '{file}'." => "Nie je možné kopírovať '{file}'.", + "Cannot move '{file}'." => "Nie je možné presunúť '{file}'.", + "Cannot delete '{file}'." => "Nie je možné vymazať '{file}'.", + "Cannot delete the folder." => "Adresár nie je možné vymazať.", + "Click to remove from the Clipboard" => "Kliknite pre odstránenie zo schránky", + "This file is already added to the Clipboard." => "Tento súbor je už v schránke uložený.", + "The files in the Clipboard are not readable." => "Súbory v schránke nie je možné načítať.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} súborov v schránke nie je možné načítať. Chcete skopírovať ostatné súbory?", + "The files in the Clipboard are not movable." => "Súbory v schránke nie je možné presunúť.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} súborov v schránke nie je možné presunúť. Chcete presunúť ostatné súbory?", + "The files in the Clipboard are not removable." => "Súbory v schránke nie je možné vymazať.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} súborov v schránke nie je možné vymazať. Chcete vymazať ostatné súbory?", + "The selected files are not removable." => "Vybrané súbory nie je možné vymazať.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} vybraných súborov nie je možné vymazať. Chcete vymazať ostatné súbory?", + "Are you sure you want to delete all selected files?" => "Ste si istý že chcete vymazať vybrané súbory?", + "Failed to delete {count} files/folders." => "Nebolo vymazaných {count} súborov/adresárov.", + "A file or folder with that name already exists." => "Soubor alebo adresár s takovým menom už existuje.", + "Copy files here" => "Kopírovať súbory na toto miesto", + "Move files here" => "Presunúť súbory na toto miesto", + "Delete files" => "Vymazať súbory", + "Clear the Clipboard" => "Vyčistiť schránku", + "Are you sure you want to delete all files in the Clipboard?" => "Ste si istý že chcete vymazať všetky súbory zo schránky?", + "Copy {count} files" => "Kopírovať {count} súborov", + "Move {count} files" => "Presunúť {count} súborov", + "Add to Clipboard" => "Vložiť do schránky", + "Inexistant or inaccessible folder." => "Neexistujúci alebo neprístupný adresár.", + "New folder name:" => "Nový názov adresára:", + "New file name:" => "Nový názov súboru:", + "Upload" => "Nahrať", + "Refresh" => "Obnoviť", + "Settings" => "Nastavenia", + "Maximize" => "Maxializovať", + "About" => "O aplikácii", + "files" => "súbory", + "selected files" => "vybrané súbory", + "View:" => "Zobraziť:", + "Show:" => "Ukázať:", + "Order by:" => "Zoradiť podľa:", + "Thumbnails" => "Náhľady", + "List" => "Zoznam", + "Name" => "Meno", + "Type" => "Typ", + "Size" => "Veľkosť", + "Date" => "Dátum", + "Descending" => "Zostupne", + "Uploading file..." => "Nahrávanie súborov...", + "Loading image..." => "Načítanie obrázkov...", + "Loading folders..." => "Načítanie adresárov...", + "Loading files..." => "Načítanie súborov...", + "New Subfolder..." => "Nový adresár...", + "Rename..." => "Premenovať...", + "Delete" => "Zmazať", + "OK" => "OK", + "Cancel" => "Zrušit", + "Select" => "Vybrať", + "Select Thumbnail" => "Vybrať náhľad", + "Select Thumbnails" => "Vybrať náhľad", + "View" => "Zobraziť", + "Download" => "Stahnuť", + "Download files" => "Stiahnuť súbory", + "Clipboard" => "Schránka", + "Checking for new version..." => "Kontrolujem novú verziu...", + "Unable to connect!" => "Pripojenie zlyhalo!", + "Download version {version} now!" => "Stiahnuť verziu {version} teraz!", + "KCFinder is up to date!" => "KCFinder je aktuálny!", + "Licenses:" => "Licencie:", + "Attention" => "Upozornenie", + "Question" => "Otázka", + "Yes" => "Áno", + "No" => "Nie", + "You cannot rename the extension of files!" => "Nemôžete premenovať príponu súborov", + "Uploading file {number} of {count}... {progress}" => "Nahrávam súbor {number} z {count}... {progress}", + "Failed to upload {filename}!" => "Nepodarilo sa nahrať súbor {filename}!", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/sv.php b/additions/kcfinder/lang/sv.php new file mode 100644 index 0000000..7a5f806 --- /dev/null +++ b/additions/kcfinder/lang/sv.php @@ -0,0 +1,127 @@ + "sv_SE.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "den %e %B %Y", + '_dateTimeMid' => "%e %b %Y", + '_dateTimeSmall' => "%Y-%m-%d %H:%M", + + "You don't have permissions to upload files." => "Du har inte behörighet att ladda upp filer. Kontakta vår support.", + "You don't have permissions to browse server." => "Du har inte behörighet att bläddra server.", + "Cannot move uploaded file to target folder." => "Kan inte flytta upp filen till målmappen.", + "Unknown error." => "Okänt fel.", + "The uploaded file exceeds {size} bytes." => "Den uppladdade filen överstiger {size} byte.", + "The uploaded file was only partially uploaded." => "Den uppladdade filen var endast delvis uppladdat.", + "No file was uploaded." => "Inga filer laddades upp.", + "Missing a temporary folder." => "Saknade en temporär mapp.", + "Failed to write file." => "Misslyckades att skriva fil.", + "Denied file extension." => "Nekad filtillägg.", + "Unknown image format/encoding." => "Okänt bildformat / kodning.", + "The image is too big and/or cannot be resized." => "Bilden är för stor och / eller kan inte ändras.", + "Cannot create {dir} folder." => "Kan inte skapa {dir} mapp.", + "Cannot rename the folder." => "Kan inte byta namn på mappen.", + "Cannot write to upload folder." => "Kan inte laddaup till mappen.", + "Cannot read .htaccess" => "Fel läser inte htacess filen", + "Incorrect .htaccess file. Cannot rewrite it!" => "Fel . htaccess fil. Inte skrivvänlig", + "Cannot read upload folder." => "Kan inte läsa upp mappen.", + "Cannot access or create thumbnails folder." => "Kan inte komma åt eller skapa thumbnails mapp.", + "Cannot access or write to upload folder." => "Kan inte komma åt eller skriva för att ladda upp mappen.", + "Please enter new folder name." => "Vänligen skriv in ny mapp-namn", + "Unallowable characters in folder name." => "Otillåtna tecken i mappnamnet.", + "Folder name shouldn't begins with '.'" => "Mappnamn bör inte börjar med '. \"", + "Please enter new file name." => "Ange nytt filnamn.", + "Unallowable characters in file name." => "Otillåtna tecken i filnamnet.", + "File name shouldn't begins with '.'" => "Filnamn bör inte börjar med '. \"", + "Are you sure you want to delete this file?" => "Är du säker du vill radera filen?", + "Are you sure you want to delete this folder and all its content?" => "Är du säker du vill radera denna mappen ink innehåll?", + "Non-existing directory type." => "Icke-existerande katalog typ.", + "Undefined MIME types." => "Odefinierat MIME-typer.", + "Fileinfo PECL extension is missing." => "Fileinfo PECL förlängning saknas.", + "Opening fileinfo database failed." => "databas öppning misslyckad.", + "You can't upload such files." => "Kan inte ladda upp sådan fil.", + "The file '{file}' does not exist." => "Filen '{file}' finns inte.", + "Cannot read '{file}'." => "Ej läsbar fil : '{file}'. ", + "Cannot copy '{file}'." => "Kan inte kopiera '{file}'.", + "Cannot move '{file}'." => "Kan inte flytta '{file}'.", + "Cannot delete '{file}'." => "Kan inte radera'{file}'.", + "Cannot delete the folder." => "Kan inte radera mappen.", + "Click to remove from the Clipboard" => "Tryck för att radera från Urklipp", + "This file is already added to the Clipboard." => "Den här filen är redan lagts till i Urklipp.", + "The files in the Clipboard are not readable." => "Filerna i Urklipp är inte läsbar.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} filer i Urklipp är inte läsbar. Vill du kopiera resten?", + "The files in the Clipboard are not movable." => "Filerna i Urklipp är inte flyttbara.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} filer i Urklipp är inte rörliga. Vill du flytta resten?", + "The files in the Clipboard are not removable." => "Filerna i Urklipp är inte avtagbara.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} filer i Urklipp är inte avtagbara. Vill du ta bort resten?", + "The selected files are not removable." => "De valda filerna inte tas bort.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} valda filerna inte tas bort. Vill du ta bort resten?", + "Are you sure you want to delete all selected files?" => "Är du säker på att du vill ta bort alla markerade filer?", + "Failed to delete {count} files/folders." => "Misslyckades att radera {count} filer/mappar.", + "A file or folder with that name already exists." => "En fil eller mapp med det namnet finns redan.", + "Copy files here" => "Kopiera filerna här", + "Move files here" => "Flytta filerna här", + "Delete files" => "Radera filer", + "Clear the Clipboard" => "Rensa Urklipp", + "Are you sure you want to delete all files in the Clipboard?" => "Är du säker på att du vill ta bort alla filer i Urklipp?", + "Copy {count} files" => "Kopiera {count} filer", + "Move {count} files" => "Flytta {count} filer", + "Add to Clipboard" => "Lägg till i Urklipp", + "Inexistant or inaccessible folder." => "Inexistant eller otillgängliga mapp.", + "New folder name:" => "Ny mappnamn:", + "New file name:" => "Nytt filnamn:", + "Upload" => "Ladda upp", + "Refresh" => "Uppdatera", + "Settings" => "Inställningar", + "Maximize" => "Maximera", + "About" => "Om", + "files" => "Filer", + "selected files" => "Välj filer", + "View:" => "Se", + "Show:" => "Visa:", + "Order by:" => "Sortera efter:", + "Thumbnails" => "Miniatyr", + "List" => "Lista", + "Name" => "Namn", + "Type" => "Typ", + "Size" => "Storlek", + "Date" => "Datum", + "Descending" => "Fallande", + "Uploading file..." => "Laddar upp fil", + "Loading image..." => "Laddar bilder...", + "Loading folders..." => "Laddar mappar...", + "Loading files..." => "Laddar filer...", + "New Subfolder..." => "Ny undermapp...", + "Rename..." => "Byt namn", + "Delete" => "Radera", + "OK" => "Ok", + "Cancel" => "Avbryt", + "Select" => "Välj", + "Select Thumbnail" => "Välj miniatyr", + "Select Thumbnails" => "Välj miniatyrer", + "View" => "Se", + "Download" => "Ladda ner", + "Download files" => "Ladda ner fil", + "Clipboard" => "Urklipp", + "Checking for new version..." => "Söka efter ny version ...", + "Unable to connect!" => "Kunde inte ansluta! ", + "Download version {version} now!" => "Ladda ner version {version} nu!", + "KCFinder is up to date!" => "KCFinder är uppdaterad!", + "Licenses:" => "Licenser:", + "Attention" => "Uppmärksamhet", + "Question" => "Fråga", + "Yes" => "Ja", + "No" => "Nä", + "You cannot rename the extension of files!" => "Du kan inte byta namn på en förlängning av filer!", + "Uploading file {number} of {count}... {progress}" => "Ladda upp fil {number} av {count} ... {progress}", + "Failed to upload {filename}!" => "Uppladdning misslyckad {filename}!", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/tr.php b/additions/kcfinder/lang/tr.php new file mode 100644 index 0000000..48833f7 --- /dev/null +++ b/additions/kcfinder/lang/tr.php @@ -0,0 +1,132 @@ + + */ + +$lang = array( + + '_locale' => "en_US.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B.%Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d/%m/%Y %H:%M", + + "You don't have permissions to upload files." => "Dosya yüklemek için yetkiniz yok.", + "You don't have permissions to browse server." => "Sunucuyu gezmek için yetkiniz yok.", + "Cannot move uploaded file to target folder." => "Yüklenilen dosyalar hedef klasöre taşınamıyor.", + "Unknown error." => "Bilinmeyen hata.", + "The uploaded file exceeds {size} bytes." => "Gönderilen dosya boyutu, maksimum dosya boyutu limitini ({size} byte) aşıyor.", + "The uploaded file was only partially uploaded." => "Dosyanın sadece bir kısmı yüklendi. Yüklemeyi tekrar deneyin.", + "No file was uploaded." => "Dosya yüklenmedi.", + "Missing a temporary folder." => "Geçici dosya klasörü bulunamıyor. Klasörü kontrol edin.", + "Failed to write file." => "Dosya yazılamıyor. Klasör yetkilerini kontrol edin.", + "Denied file extension." => "Yasaklanmış dosya türü.", + "Unknown image format/encoding." => "Bilinmeyen resim formatı.", + "The image is too big and/or cannot be resized." => "Resim çok büyük ve/veya yeniden boyutlandırılamıyor.", + "Cannot create {dir} folder." => "{dir} klasörü oluşturulamıyor.", + "Cannot rename the folder." => "Klasör adı değiştirilemiyor.", + "Cannot write to upload folder." => "Dosya yükleme klasörüne yazılamıyor. Klasör yetkisini kontrol edin.", + "Cannot read .htaccess" => ".htaccess dosyası okunamıyor", + "Incorrect .htaccess file. Cannot rewrite it!" => "Hatalı .htaccess dosyası. Dosyaya yeniden yazılamıyor.", + "Cannot read upload folder." => "Dosya yükleme klasörü okunamıyor. Klasör yetkilerini kontrol edin.", + "Cannot access or create thumbnails folder." => "Önizleme dosyaları klasörüne erişilemiyor yada oluşturulamıyor.", + "Cannot access or write to upload folder." => "Dosya yükleme klasörüne ulaşılamıyor yada oluşturulamıyor.", + "Please enter new folder name." => "Lütfen yeni klasör adını girin.", + "Unallowable characters in folder name." => "Klasör adında izin verilmeyen karakter kullandınız.", + "Folder name shouldn't begins with '.'" => "Klasör adı '.' ile başlayamaz.", + "Please enter new file name." => "Lütfen yeni dosya adını girin.", + "Unallowable characters in file name." => "Dosya adında izin verilmeyen karakter kullandınız.", + "File name shouldn't begins with '.'" => "Dosya adı '.' ile başlayamaz.", + "Are you sure you want to delete this file?" => "Dosyayı silmek istediğinizden emin misiniz?", + "Are you sure you want to delete this folder and all its content?" => "Bu klasörü ve tüm içeriğini silmek istediğinizden emin misiniz?", + "Non-existing directory type." => "Geçersiz klasör türü.", + "Undefined MIME types." => "Tanımsız MIME türü.", + "Fileinfo PECL extension is missing." => "Dosya Bilgisi PECL uzantısı eksik.", + "Opening fileinfo database failed." => "Dosya Bilgisi veritabanı açılırken hata oluştu.", + "You can't upload such files." => "Bu tür dosyaları yükleyemezsiniz.", + "The file '{file}' does not exist." => "'{file}' dosyası yok.", + "Cannot read '{file}'." => "'{file}' dosyası okunamıyor.", + "Cannot copy '{file}'." => "'{file}' dosyası kopyalanamıyor.", + "Cannot move '{file}'." => "'{file}' dosyası taşınamıyor.", + "Cannot delete '{file}'." => "'{file}' dosyası silinemiyor.", + "Cannot delete the folder." => "Klasör silinemiyor.", + "Click to remove from the Clipboard" => "Panodan çıkarmak için tıklayın", + "This file is already added to the Clipboard." => "Bu dosya zaten panoya eklenmiş.", + "The files in the Clipboard are not readable." => "Panodaki dosyalar okunamıyor.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "Panodaki {count} adet dosya okunamıyor. Geri kalanlarını kopyalamak istiyor musunuz?", + "The files in the Clipboard are not movable." => "Panodaki dosyalar taşınamıyor.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "Panodaki {count} adet dosya taşınamıyor. Geri kalanlarını taşımak istiyor musunuz?", + "The files in the Clipboard are not removable." => "Dosyalar panodan çıkartılamıyor.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} adet dosya panodan çıkartılamıyor. Geri kalanları silmek istiyor musunuz?", + "The selected files are not removable." => "Seçilen dosyalar panodan çıkartılamıyor.", + "{count} selected files are not removable. Do you want to delete the rest?" => "Seçilen dosyaların {count} adedi panodan çıkartılamıyor. Geri kalanları silmek istiyor musunuz?", + "Are you sure you want to delete all selected files?" => "Seçilen tüm dosyaları silmek istediğinizden emin misiniz?", + "Failed to delete {count} files/folders." => "{count} adet dosya/klasör silinemedi.", + "A file or folder with that name already exists." => "Bu isimde bir klasör yada dosya zaten var.", + "Copy files here" => "Dosyaları Buraya Kopyala", + "Move files here" => "Dosyaları Buraya Taşı", + "Delete files" => "Dosyaları Sil", + "Clear the Clipboard" => "Panoyu Temizle", + "Are you sure you want to delete all files in the Clipboard?" => "Panodaki tüm dosyaları silmek istediğinizden emin misiniz?", + "Copy {count} files" => "{count} adet dosyayı kopyala", + "Move {count} files" => "{count} adet dosyayı taşı", + "Add to Clipboard" => "Panoya Ekle", + "Inexistant or inaccessible folder." => "Klasör yok yada ulaşılamıyor.", + "New folder name:" => "Yeni Klasör Adı:", + "New file name:" => "Yeni Dosya Adı:", + "Upload" => "Yükle", + "Refresh" => "Yenile", + "Settings" => "Ayarlar", + "Maximize" => "Pencereyi Büyüt", + "About" => "Hakkında", + "files" => "dosya", + "selected files" => "dosya seçildi", + "View:" => "Görüntüleme:", + "Show:" => "Göster:", + "Order by:" => "Sıralama:", + "Thumbnails" => "Önizleme", + "List" => "Liste", + "Name" => "Ad", + "Type" => "Tür", + "Size" => "Boyut", + "Date" => "Tarih", + "Descending" => "Azalarak", + "Uploading file..." => "Dosya Gönderiliyor...", + "Loading image..." => "Resim Yükleniyor...", + "Loading folders..." => "Klasörler Yükleniyor...", + "Loading files..." => "Dosyalar Yükleniyor...", + "New Subfolder..." => "Yeni Alt Klasör...", + "Rename..." => "İsim Değiştir...", + "Delete" => "Sil", + "OK" => "Tamam", + "Cancel" => "İptal", + "Select" => "Seç", + "Select Thumbnail" => "Önizleme Resmini Seç", + "Select Thumbnails" => "Önizleme Resimlerini Seç", + "View" => "Göster", + "Download" => "İndir", + "Download files" => "Dosyaları İndir", + "Clipboard" => "Pano", + "Checking for new version..." => "Yeni versiyon kontrol ediliyor...", + "Unable to connect!" => "Bağlantı yapılamıyor!", + "Download version {version} now!" => " {version} versiyonunu hemen indir!", + "KCFinder is up to date!" => "KCFinder güncel durumda!", + "Licenses:" => "Lisanslar:", + "Attention" => "Dikkat", + "Question" => "Soru", + "Yes" => "Evet", + "No" => "Hayır", + "You cannot rename the extension of files!" => "Dosya uzantılarını değiştiremezsiniz!", + "Uploading file {number} of {count}... {progress}" => "{number} / {count} dosya yükleniyor... {progress}", + "Failed to upload {filename}!" => "{filename} dosyası yüklenemedi!", + "Close" => "Kapat", + "Previous" => "Önceki", + "Next" => "Sonraki", + "Confirmation" => "Onay", + "Warning" => "Uyarı", +); + +?> diff --git a/additions/kcfinder/lang/uk.php b/additions/kcfinder/lang/uk.php new file mode 100644 index 0000000..5caa120 --- /dev/null +++ b/additions/kcfinder/lang/uk.php @@ -0,0 +1,128 @@ + "uk_UA.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "У вас нема прав для завантаження файлів.", + "You don't have permissions to browse server." => "У вас нема прав для перегляду вмісту на сервері.", + "Cannot move uploaded file to target folder." => "Неможливо перемістити завантажений файл в папку призначення.", + "Unknown error." => "Невідома помилка.", + "The uploaded file exceeds {size} bytes." => "Завантажений файл перевищує розмір {size} байтів.", + "The uploaded file was only partially uploaded." => "Завантажений файл було завантажено лише частково.", + "No file was uploaded." => "Файл не було завантажено", + "Missing a temporary folder." => "Тимчасова папка не існує.", + "Failed to write file." => "Неможливо записати файл.", + "Denied file extension." => "Файли цього типу заборонені для завантаження.", + "Unknown image format/encoding." => "Невідомий формат зображення.", + "The image is too big and/or cannot be resized." => "Зображення занадто велике і/або не може бути зменшене.", + "Cannot create {dir} folder." => "Неможливо створити папку {dir}.", + "Cannot rename the folder." => "Неможливо перейменувати папку.", + "Cannot write to upload folder." => "Неможливо записати в папку завантаження.", + "Cannot read .htaccess" => "Неможливо прочитати файл .htaccess", + "Incorrect .htaccess file. Cannot rewrite it!" => "Неправильний файл .htaccess. Неможливо перезаписати!", + "Cannot read upload folder." => "Неможливо прочитати папку завантаження.", + "Cannot access or create thumbnails folder." => "Нема доступу або неможливо створити папку мініатюр.", + "Cannot access or write to upload folder." => "Нма доступу або неможливо записати в папку завантаження.", + "Please enter new folder name." => "Вкажіть назву нової папки.", + "Unallowable characters in folder name." => "Недопустимі символи в назві папки.", + "Folder name shouldn't begins with '.'" => "Назва папки не может починатися з '.'", + "Please enter new file name." => "Вкажіть нову назву файла", + "Unallowable characters in file name." => "Недопустимі символи в назві файлу.", + "File name shouldn't begins with '.'" => "Назва файла не може починатися з '.'", + "Are you sure you want to delete this file?" => "Ви впевнені що хочете вилучити цей файл?", + "Are you sure you want to delete this folder and all its content?" => "Ви впевнені що хочете вилучити цю папку і весь її вміст?", + "Non-existing directory type." => "Неіснуючий тип папки.", + "Undefined MIME types." => "Невизначені MIME-типи.", + "Fileinfo PECL extension is missing." => "Розширення Fileinfo PECL відсутнє.", + "Opening fileinfo database failed." => "Неможливо відкрити базу даних fileinfo.", + "You can't upload such files." => "Ви не можете завантажувати файли цього типу.", + "The file '{file}' does not exist." => "Файл '{file}' не існує.", + "Cannot read '{file}'." => "Неможливо прочитати файл '{file}'.", + "Cannot copy '{file}'." => "Неможливо копіювати файл '{file}'.", + "Cannot move '{file}'." => "Неможливо перемістити файл '{file}'.", + "Cannot delete '{file}'." => "Неможливо вилучити файл '{file}'.", + "Cannot delete the folder." => "Неможливо вилучити папку.", + "Click to remove from the Clipboard" => "Натисніть для вилучення з буфера обміну", + "This file is already added to the Clipboard." => "Цей файл вже додано в буфер обміну.", + "The files in the Clipboard are not readable." => "Неможливо прочитати файли в буфері обміну.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "Неможливо прочитати {count} файл(ів) в буфері обміну. Ви хочете копіювати ті які залишилися?", + "The files in the Clipboard are not movable." => "Неможливо перемістити файли в буфері обміну.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "Неможливо перемістити {count} файл(ів) в буфері обміну. Ви хчете перемістити ті які залишилися?", + "The files in the Clipboard are not removable." => "Неможливо вилучити файли в буфері обміну.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "Неможливо вилучити {count} файл(ів) в буфері обміну. Ви хочете вилучити ті які залишилися?", + "The selected files are not removable." => "Неможливо вилучити вибрані файли.", + "{count} selected files are not removable. Do you want to delete the rest?" => "Неможливо вилучити вибраний(ні) {count} файл(и). Ви хочете вилучити ті які залишилися?", + "Are you sure you want to delete all selected files?" => "Ви впевнені що хочете вилучити всі вибрані файли?", + "Failed to delete {count} files/folders." => "Неможливо вилучити {count} файлів/папок.", + "A file or folder with that name already exists." => "Файл або папка з таким іменем вже існують.", + "Copy files here" => "Копіювати файли сюди", + "Move files here" => "Перемістити файли сюда", + "Delete files" => "Вилучити файли", + "Clear the Clipboard" => "Очистити буфер обміну", + "Are you sure you want to delete all files in the Clipboard?" => "Ви впевнені що хочете вилучити всі файли в буфері обміну?", + "Copy {count} files" => "Копіювати {count} файл(ів)", + "Move {count} files" => "Перемістити {count} файл(ів)", + "Add to Clipboard" => "Додати в буфер обміну", + "Inexistant or inaccessible folder." => "Неіснуюча або недоступна папка.", + "New folder name:" => "Нова назва папки:", + "New file name:" => "Нова назва файлу:", + "Upload" => "Завантажити", + "Refresh" => "Оновити", + "Settings" => "Налаштування", + "Maximize" => "Максимізувати", + "About" => "Про скрипт", + "files" => "файли", + "selected files" => "вибрані файли", + "View:" => "Перегляд:", + "Show:" => "Показувати:", + "Order by:" => "Впорядкувати за:", + "Thumbnails" => "Мініатюри", + "List" => "Список", + "Name" => "Назва", + "Type" => "Тип", + "Size" => "Розмір", + "Date" => "Дата", + "Descending" => "По спаданню", + "Uploading file..." => "Завантаження файлу...", + "Loading image..." => "Завантаження зображення...", + "Loading folders..." => "Завантаження папок...", + "Loading files..." => "Завантаження файлів...", + "New Subfolder..." => "Створити папку...", + "Rename..." => "Перейменувати...", + "Delete" => "Вилучити", + "OK" => "OK", + "Cancel" => "Скасувати", + "Select" => "Вибрати", + "Select Thumbnail" => "Вибрати мініатюру", + "Select Thumbnails" => "Вибрати мініатюри", + "View" => "Перегляд", + "Download" => "Зкачати", + "Download files" => "Зкачати файли", + "Clipboard" => "Буфер обміну", + "Checking for new version..." => "Перевіряємо наявність оновлень...", + "Unable to connect!" => "Неможливо підключитися!", + "Download version {version} now!" => "Скачати версію {version} зараз!", + "KCFinder is up to date!" => "Ви використовуєте останню версію KCFinder'а!", + "Licenses:" => "Ліцензії:", + "Attention" => "Увага", + "Question" => "Питання", + "Yes" => "Так", + "No" => "Ні", + "You cannot rename the extension of files!" => "Ви не можете змінювати розширення файлів!", + "Uploading file {number} of {count}... {progress}" => "Завантаження файлу {number} з {count}... {progress}", + "Failed to upload {filename}!" => "Помилка завантаження {filename}!", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lang/vi.php b/additions/kcfinder/lang/vi.php new file mode 100644 index 0000000..fd4c0c7 --- /dev/null +++ b/additions/kcfinder/lang/vi.php @@ -0,0 +1,131 @@ + "vi_VN.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "Bạn không có quyền tải lên", + "You don't have permissions to browse server." => "Bạn không có quyền truy cập", + "Cannot move uploaded file to target folder." => "Không thể tải lên thư mục đích", + "Unknown error." => "Lỗi không xác định", + "The uploaded file exceeds {size} bytes." => "Tập tin tải lên lớn hơn {size}", + "The uploaded file was only partially uploaded." => "Các tập tin chỉ được tải lên một phần", + "No file was uploaded." => "Không có tập tin được tải lên", + "Missing a temporary folder." => "Không thấy thư mục tạm", + "Failed to write file." => "Không thể ghi", + "Denied file extension." => "Phần mở rộng không được phép", + "Unknown image format/encoding." => "Không biết định dạng ảnh/mã hóa này", + "The image is too big and/or cannot be resized." => "Hình ảnh quá lơn/hoặc không thể thay đổi kích thước", + "Cannot create {dir} folder." => "Không thể tạo thư mục {dir}", + "Cannot rename the folder." => "Không thể đổi tên thư mục", + "Cannot write to upload folder." => "Không thể ghi vào thư mục", + "Cannot read .htaccess" => "Không thể đọc tập tin .htaccess", + "Incorrect .htaccess file. Cannot rewrite it!" => "không thể ghi tập tin .htaccess", + "Cannot read upload folder." => "Không thể đọc thư mục để tải lên", + "Cannot access or create thumbnails folder." => "Không có quyền truy cập hoặc không thể tạo thư mục", + "Cannot access or write to upload folder." => "Không có quyền truy cập hoặc không thể ghi", + "Please enter new folder name." => "Vui lòng nhập tên thư mục", + "Unallowable characters in folder name." => "Tên thư mục có chứa những ký tự không được phép", + "Folder name shouldn't begins with '.'" => "Thư mục không thể bắt đầu bằng '.'", + "Please enter new file name." => "Vui lòng nhập tên tập tin", + "Unallowable characters in file name." => "Tên tập tin chứa những ký tự không được phép", + "File name shouldn't begins with '.'" => "Tập tin không thể bắt đầu bằng '.'", + "Are you sure you want to delete this file?" => "Bạn có chắc bạn muốn xóa tập tin này?", + "Are you sure you want to delete this folder and all its content?" => "Bạn có chắc bạn muốn xóa thư mục và tất cả nội dung bên trong?", + "Non-existing directory type." => "Không tồn tại thư mục", + "Undefined MIME types." => "Không biết kiểu MIME này", + "Fileinfo PECL extension is missing." => "Fileinfo PECL extension is missing", + "Opening fileinfo database failed." => "Opening fileinfo database failed", + "You can't upload such files." => "Bạn không thể tải các tập tin như vậy.", + "The file '{file}' does not exist." => "Tập tin '{file}' đã có", + "Cannot read '{file}'." => "Không thể đọc '{file}'.", + "Cannot copy '{file}'." => "Không thể sao chép '{file}'.", + "Cannot move '{file}'." => "Không thể di chuyển '{file}'.", + "Cannot delete '{file}'." => "Không thể xóa tập tin '{file}'.", + "Cannot delete the folder." => "Không thể xóa thư mục", + "Click to remove from the Clipboard" => "Không thể xóa từ Bộ nhớ", + "This file is already added to the Clipboard." => "Tập tin đã có trong bộ nhớ", + "The files in the Clipboard are not readable." => "Không thể đọc các tập tin trong Bộ nhớ", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} tập tin trong Bộ nhớ không thể đọc. Bạn chắc chắn muốn sao chép phần còn lại?", + "The files in the Clipboard are not movable." => "Không thể di chuyển các tập tin trong Bộ nhớ", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} tập tin trong Bộ nhớ không thể di chuyển. Bạn chắc chắn muốn di chuyển phần còn lại?", + "The files in the Clipboard are not removable." => "Không thể xóa các tập tin trong Bộ nhớ", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} tập tin trong Bộ nhớ không thể xóa. Bạn chắc chắn muốn xóa phần còn lại?", + "The selected files are not removable." => "Lựa chọn tập tin để xóa", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} tập tin không thể xóa. Bạn chắc chắn muốn xóa phần còn lại?", + "Are you sure you want to delete all selected files?" => "Bạn có chắc bạn muốn xóa tất cả tập tin đựoc chọn?", + "Failed to delete {count} files/folders." => "Không thể xóa {count} tập tin/thư mục", + "A file or folder with that name already exists." => "Đã tồn tại tập tin hoặc thư mục với tên này", + "Copy files here" => "Sao chép ở đây", + "Move files here" => "Di chuyển ở đây", + "Delete files" => "Xóa tập tin", + "Clear the Clipboard" => "Xóa bộ nhớ", + "Are you sure you want to delete all files in the Clipboard?" => "Bạn có chắc bạn muốn xóa tất cả tập tin trong Bộ nhớ?", + "Copy {count} files" => "Sao chep {count} tập tin", + "Move {count} files" => "Di chuyển {count} tập tin", + "Add to Clipboard" => "Thêm vào Bộ nhớ", + "Inexistant or inaccessible folder." => "Thư mục không tồn tại hoặc không thể truy cập", + "New folder name:" => "Tên mới của thư mục", + "New file name:" => "Tên mới của tập tin", + "Upload" => "Tải lên", + "Refresh" => "Làm mới", + "Settings" => "Cấu hình", + "Maximize" => "Tối đa", + "About" => "Giới thiệu", + "files" => "tập tin", + "selected files" => "chọn tập tin", + "View:" => "Xem", + "Show:" => "Hiện", + "Order by:" => "Thứ tự bởi", + "Thumbnails" => "Ảnh thu nhỏ", + "List" => "Danh sách", + "Name" => "Tên", + "Type" => "Kiểu", + "Size" => "Kích thước", + "Date" => "Ngày tháng", + "Descending" => "Giảm dần", + "Uploading file..." => "Đang tải lên", + "Loading image..." => "Đang đọc ảnh", + "Loading folders..." => "Đang đọc thư mục...", + "Loading files..." => "Đang đọc tập tin...", + "New Subfolder..." => "Thư mục con mới...", + "Rename..." => "Đổi tên...", + "Delete" => "Xóa", + "OK" => "Đồng Ý", + "Cancel" => "Hủy", + "Select" => "Chọn", + "Select Thumbnail" => "Chọn ảnh thu nhỏ", + "Select Thumbnails" => "Chọn nhiều ảnh thu nhỏ", + "View" => "Xem", + "Download" => "Tải xuống", + "Download files" => "Tải xuống tập tin", + "Clipboard" => "Bộ nhớ", + "Checking for new version..." => "Kiểm tra phiên bản mới", + "Unable to connect!" => "Không thể kết nối", + "Download version {version} now!" => "Có phiên bản mới {version}, tải về ngay!", + "KCFinder is up to date!" => "Không có cập nhật", + "Licenses:" => "Bản quyền", + "Attention" => "Cảnh báo", + "Question" => "Câu hỏi", + "Yes" => "Có", + "No" => "Không", + "You cannot rename the extension of files!" => "Bạn không thể đổi tên phần mở rộng của các tập tin!", + "Uploading file {number} of {count}... {progress}" => "Đang tải tập tin thứ {number} của {count}... {progress}", + "Failed to upload {filename}!" => "Tải lên thất bại {filename}!", + "Close" => "Đóng", + "Previous" => "Trước", + "Next" => "Sau", + "Confirmation" => "Xác nhận", + "Warning" => "Cảnh báo",); + +?> diff --git a/additions/kcfinder/lang/zh-cn.php b/additions/kcfinder/lang/zh-cn.php new file mode 100644 index 0000000..ac68e2e --- /dev/null +++ b/additions/kcfinder/lang/zh-cn.php @@ -0,0 +1,130 @@ + "zh_CN.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%Y-%m-%d %H:%M", + + "You don't have permissions to upload files." => "您没有权限上传文件。", + "You don't have permissions to browse server." => "您没有权限查看服务器文件。", + "Cannot move uploaded file to target folder." => "无法移动上传文件到指定文件夹。", + "Unknown error." => "发生不可预知异常。", + "The uploaded file exceeds {size} bytes." => "文件大小超过{size}字节。", + "The uploaded file was only partially uploaded." => "文件未完全上传。", + "No file was uploaded." => "文件未上传。", + "Missing a temporary folder." => "临时文件夹不存在。", + "Failed to write file." => "写入文件失败。", + "Denied file extension." => "禁止的文件扩展名。", + "Unknown image format/encoding." => "无法确认图片格式。", + "The image is too big and/or cannot be resized." => "图片大太,且(或)无法更改大小。", + "Cannot create {dir} folder." => "无法创建{dir}文件夹。", + "Cannot rename the folder." => "无法重命名该文件夹。", + "Cannot write to upload folder." => "无法写入上传文件夹。", + "Cannot read .htaccess" => "文件.htaccess无法读取。", + "Incorrect .htaccess file. Cannot rewrite it!" => "文件.htaccess错误,无法重写。", + "Cannot read upload folder." => "无法读取上传目录。", + "Cannot access or create thumbnails folder." => "无法访问或创建缩略图文件夹。", + "Cannot access or write to upload folder." => "无法访问或写入上传文件夹。", + "Please enter new folder name." => "请输入文件夹名。", + "Unallowable characters in folder name." => "文件夹名含有禁止字符。", + "Folder name shouldn't begins with '.'" => "文件夹名不能以点(.)为首字符。", + "Please enter new file name." => "请输入新文件名。", + "Unallowable characters in file name." => "文件名含有禁止字符。", + "File name shouldn't begins with '.'" => "文件名不能以点(.)为首字符。", + "Are you sure you want to delete this file?" => "是否确认删除该文件?", + "Are you sure you want to delete this folder and all its content?" => "是否确认删除该文件夹以及其子文件和子目录?", + "Non-existing directory type." => "不存在的目录类型。", + "Undefined MIME types." => "未定义的MIME类型。", + "Fileinfo PECL extension is missing." => "文件PECL属性不存在。", + "Opening fileinfo database failed." => "打开文件属性数据库出错。", + "You can't upload such files." => "你无法上传该文件。", + "The file '{file}' does not exist." => "文件{file}不存在。", + "Cannot read '{file}'." => "无法读取文件{file}。", + "Cannot copy '{file}'." => "无法复制文件{file}。", + "Cannot move '{file}'." => "无法移动文件{file}。", + "Cannot delete '{file}'." => "无法删除文件{file}。", + "Cannot delete the folder." => "无法删除该文件夹。", + "Click to remove from the Clipboard" => "点击从剪贴板删除", + "This file is already added to the Clipboard." => "文件已复制到剪贴板。", + "The files in the Clipboard are not readable." => "剪贴板上该文件无法读取。", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "剪贴板{count}个文件无法读取。 是否复制静态文件?", + "The files in the Clipboard are not movable." => "剪贴板上该文件无法移动。", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "剪贴板{count}个文件无法移动。 是否移动静态文件?", + "The files in the Clipboard are not removable." => "剪贴板上该文件无法删除。", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "剪贴板{count}个文件无法删除。 是否删除静态文件?", + "The selected files are not removable." => "选中文件未删除。", + "{count} selected files are not removable. Do you want to delete the rest?" => "选中的{count}个文件未删除。是否删除静态文件?", + "Are you sure you want to delete all selected files?" => "是否确认删除选中文件?", + "Failed to delete {count} files/folders." => "{count}个文件或文件夹无法删除。", + "A file or folder with that name already exists." => "文件或文件夹已存在。", + "Copy files here" => "复制到这里", + "Move files here" => "移动到这里", + "Delete files" => "删除这些文件", + "Clear the Clipboard" => "清除剪贴板", + "Are you sure you want to delete all files in the Clipboard?" => "是否确认删除所有在剪贴板的文件?", + "Copy {count} files" => "复制 {count} 个文件", + "Move {count} files" => "移动 {count} 个文件 ", + "Add to Clipboard" => "添加到剪贴板", + "Inexistant or inaccessible folder." => "不存在或不可访问的文件夹。", + "New folder name:" => "新文件夹名:", + "New file name:" => "新文件夹:", + "Upload" => "上传", + "Refresh" => "刷新", + "Settings" => "设置", + "Maximize" => "最大化", + "About" => "关于", + "files" => "文件", + "selected files" => "选中的文件", + "View:" => "视图:", + "Show:" => "显示:", + "Order by:" => "排序:", + "Thumbnails" => "图标", + "List" => "列表", + "Name" => "文件名", + "Type" => "种类", + "Size" => "大小", + "Date" => "日期", + "Descending" => "降序", + "Uploading file..." => "正在上传文件...", + "Loading image..." => "正在加载图片...", + "Loading folders..." => "正在加载文件夹...", + "Loading files..." => "正在加载文件...", + "New Subfolder..." => "新建文件夹...", + "Rename..." => "重命名...", + "Delete" => "删除", + "OK" => "OK", + "Cancel" => "取消", + "Select" => "选择", + "Select Thumbnail" => "选择缩略图", + "Select Thumbnails" => "选择缩略图", + "View" => "查看", + "Download" => "下载", + "Download files" => "下载文件", + "Clipboard" => "剪贴板", + "Checking for new version..." => "正在检查新版本...", + "Unable to connect!" => "无法链接!", + "Download version {version} now!" => "马上下载{version}版本!", + "KCFinder is up to date!" => "KCFinder已经是最新的!", + "Licenses:" => "许可证", + "Attention" => "注意", + "Question" => "问题", + "Yes" => "是", + "No" => "否", + "You cannot rename the extension of files!" => "禁止修改文件后缀", + "Uploading file {number} of {count}... {progress}" => "正在上传文件{number} / {count}... {progress}", + "Failed to upload {filename}!" => "上传失败{filename}!", +); + +?> \ No newline at end of file diff --git a/additions/kcfinder/lib/.htaccess b/additions/kcfinder/lib/.htaccess new file mode 100644 index 0000000..d61b264 --- /dev/null +++ b/additions/kcfinder/lib/.htaccess @@ -0,0 +1,4 @@ + +Order allow,deny +Deny from all + diff --git a/additions/kcfinder/lib/class_fastImage.php b/additions/kcfinder/lib/class_fastImage.php new file mode 100644 index 0000000..bd4d5c2 --- /dev/null +++ b/additions/kcfinder/lib/class_fastImage.php @@ -0,0 +1,255 @@ +load($uri); + } + + public function load($uri) + { + if ($this->handle) $this->close(); + + $this->uri = $uri; + // Joy - this is a fix for URLs missing "http:" + if ($uri[0] == '/' && $uri[1] == '/') { + $uri = 'http:' . $uri; + } + + $this->handle = fopen( + $uri, + 'r', + false, + stream_context_create(array( + 'http'=> array('timeout' => 0.5), + )) + ); + } + + public function isValid() + { + return empty($this->handle) ? false : true; + } + + public function close() + { + if (is_resource($this->handle)) fclose($this->handle); + } + + + public function getSize() + { + $this->strpos = 0; + if ($this->getType()) + { + return array_values($this->parseSize()); + } + + return false; + } + + + public function getType() + { + $this->strpos = 0; + + if (!$this->type) + { + switch ($this->getChars(2)) + { + case "BM": + return $this->type = 'bmp'; + case "GI": + return $this->type = 'gif'; + case chr(0xFF).chr(0xd8): + return $this->type = 'jpeg'; + case chr(0x89).'P': + return $this->type = 'png'; + default: + return false; + } + } + + return $this->type; + } + + + private function parseSize() + { + $this->strpos = 0; + + switch ($this->type) + { + case 'png': + return $this->parseSizeForPNG(); + case 'gif': + return $this->parseSizeForGIF(); + case 'bmp': + return $this->parseSizeForBMP(); + case 'jpeg': + return $this->parseSizeForJPEG(); + } + + return null; + } + + + private function parseSizeForPNG() + { + $chars = $this->getChars(25); + + return unpack("N*", substr($chars, 16, 8)); + } + + + private function parseSizeForGIF() + { + $chars = $this->getChars(11); + + return unpack("S*", substr($chars, 6, 4)); + } + + + private function parseSizeForBMP() + { + $chars = $this->getChars(29); + $chars = substr($chars, 14, 14); + $type = unpack('C', $chars); + + return (reset($type) == 40) ? unpack('L*', substr($chars, 4)) : unpack('L*', substr($chars, 4, 8)); + } + + + private function parseSizeForJPEG() + { + $state = null; + $i = 0; + + while (true) + { + switch ($state) + { + default: + $this->getChars(2); + $state = 'started'; + break; + case 'started': + $b = $this->getByte(); + if ($b === false) return false; + + $state = $b == 0xFF ? 'sof' : 'started'; + break; + + case 'sof': + $b = $this->getByte(); + if (in_array($b, range(0xe0, 0xef))) + { + $state = 'skipframe'; + } + elseif (in_array($b, array_merge(range(0xC0,0xC3), range(0xC5,0xC7), range(0xC9,0xCB), range(0xCD,0xCF)))) + { + $state = 'readsize'; + } + elseif ($b == 0xFF) + { + $state = 'sof'; + } + else + { + $state = 'skipframe'; + } + break; + + case 'skipframe': + $skip = $this->readInt($this->getChars(2)) - 2; + $state = 'doskip'; + break; + + case 'doskip': + $this->getChars($skip); + $state = 'started'; + break; + + case 'readsize': + $c = $this->getChars(7); + + return array($this->readInt(substr($c, 5, 2)), $this->readInt(substr($c, 3, 2))); + } + } + } + + + private function getChars($n) + { + $response = null; + + // do we need more data? + if ($this->strpos + $n -1 >= strlen($this->str)) + { + $end = ($this->strpos + $n); + + while (strlen($this->str) < $end && $response !== false) + { + // read more from the file handle + $need = $end - ftell($this->handle); + + if ($response = fread($this->handle, $need)) + { + $this->str .= $response; + } + else + { + return false; + } + } + } + + $result = substr($this->str, $this->strpos, $n); + $this->strpos += $n; + + return $result; + } + + + private function getByte() + { + $c = $this->getChars(1); + $b = unpack("C", $c); + + return reset($b); + } + + + private function readInt($str) + { + $size = unpack("C*", $str); + + return ($size[1] << 8) + $size[2]; + } + + + public function __destruct() + { + $this->close(); + } +} \ No newline at end of file diff --git a/additions/kcfinder/lib/class_image.php b/additions/kcfinder/lib/class_image.php new file mode 100644 index 0000000..4905652 --- /dev/null +++ b/additions/kcfinder/lib/class_image.php @@ -0,0 +1,243 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +abstract class image { + const DEFAULT_JPEG_QUALITY = 75; + +/** Image resource or object + * @var mixed */ + protected $image; + +/** Image width in pixels + * @var integer */ + protected $width; + +/** Image height in pixels + * @var integer */ + protected $height; + +/** Init error + * @var bool */ + protected $initError = false; + +/** Driver specific options + * @var array */ + protected $options = array(); + + +/** Magic method which allows read-only access to all protected or private + * class properties + * @param string $property + * @return mixed */ + + final public function __get($property) { + return property_exists($this, $property) ? $this->$property : null; + } + + +/** Constructor. Parameter $image should be: + * 1. An instance of image driver class (copy instance). + * 2. An image represented by the type of the $image property + * (resource or object). + * 3. An array with two elements. First - width, second - height. + * Creates a blank image. + * 4. A filename string. Get image form file. + * Second paramaeter is used by pass some specific image driver options + * @param mixed $image + * @param array $options */ + + public function __construct($image, array $options=array()) { + $this->image = $this->width = $this->height = null; + $imageDetails = $this->buildImage($image); + + if ($imageDetails !== false) + list($this->image, $this->width, $this->height) = $imageDetails; + else + $this->initError = true; + $this->options = $options; + } + + +/** Factory pattern to load selected driver. $image and $options are passed + * to the constructor of the image driver + * @param string $driver + * @param mixed $image + * @return object */ + + final static function factory($driver, $image, array $options=array()) { + $class = __NAMESPACE__ . "\\image_$driver"; + return new $class($image, $options); + } + + +/** Checks if the drivers in the array parameter could be used. Returns first + * found one + * @param array $drivers + * @return string */ + + final static function getDriver(array $drivers=array('gd')) { + foreach ($drivers as $driver) { + if (!preg_match('/^[a-z0-9\_]+$/i', $driver)) + continue; + $class = __NAMESPACE__ . "\\image_$driver"; + if (class_exists($class) && method_exists($class, "available")) { + eval("\$avail = $class::available();"); + if ($avail) return $driver; + } + } + return false; + } + + +/** Returns an array. Element 0 - image resource. Element 1 - width. Element 2 - height. + * Returns FALSE on failure. + * @param mixed $image + * @return array */ + + final protected function buildImage($image) { + $class = get_class($this); + + if ($image instanceof $class) { + $width = $image->width; + $height = $image->height; + $img = $image->image; + + } elseif (is_array($image)) { + list($key, $width) = each($image); + list($key, $height) = each($image); + $img = $this->getBlankImage($width, $height); + + } else + $img = $this->getImage($image, $width, $height); + + return ($img !== false) + ? array($img, $width, $height) + : false; + } + + +/** Returns calculated proportional width from the given height + * @param integer $resizedHeight + * @return integer */ + + final public function getPropWidth($resizedHeight) { + $width = round(($this->width * $resizedHeight) / $this->height); + if (!$width) $width = 1; + return $width; + } + + +/** Returns calculated proportional height from the given width + * @param integer $resizedWidth + * @return integer */ + + final public function getPropHeight($resizedWidth) { + $height = round(($this->height * $resizedWidth) / $this->width); + if (!$height) $height = 1; + return $height; + } + + +/** Checks if PHP needs some extra extensions to use the image driver. This + * static method should be implemented into driver classes like abstract + * methods + * @return bool */ + static function available() { return false; } + +/** Checks if file is an image. This static method should be implemented into + * driver classes like abstract methods + * @param string $file + * @return bool */ + static function checkImage($file) { return false; } + +/** Resize image. Should return TRUE on success or FALSE on failure + * @param integer $width + * @param integer $height + * @return bool */ + abstract public function resize($width, $height); + +/** Resize image to fit in given resolution. Should returns TRUE on success + * or FALSE on failure. If $background is set, the image size will be + * $width x $height and the empty spaces (if any) will be filled with defined + * color. Background color examples: "#5f5", "#ff67ca", array(255, 255, 255) + * @param integer $width + * @param integer $height + * @param mixed $background + * @return bool */ + abstract public function resizeFit($width, $height, $background=false); + +/** Resize and crop the image to fit in given resolution. Returns TRUE on + * success or FALSE on failure + * @param mixed $src + * @param integer $offset + * @return bool */ + abstract public function resizeCrop($width, $height, $offset=false); + + +/** Rotate image + * @param integer $angle + * @param string $background + * @return bool */ + abstract public function rotate($angle, $background="#000000"); + + abstract public function flipHorizontal(); + + abstract public function flipVertical(); + +/** Apply a PNG or GIF watermark to the image. $top and $left parameters sets + * the offset of the watermark in pixels. Boolean and NULL values are possible + * too. In default case (FALSE, FALSE) the watermark should be applyed to + * the bottom right corner. NULL values means center aligning. If the + * watermark is bigger than the image or it's partialy or fully outside the + * image, it shoudn't be applied + * @param string $file + * @param mixed $top + * @param mixed $left + * @return bool */ + abstract public function watermark($file, $left=false, $top=false); + +/** Should output the image. Second parameter is used to pass some options like + * 'file' - if is set, the output will be written to a file + * 'quality' - compression quality + * It's possible to use extra specific options required by image type ($type) + * @param string $type + * @param array $options + * @return bool */ + abstract public function output($type='jpeg', array $options=array()); + +/** This method should create a blank image with selected size. Should returns + * resource or object related to the created image, which will be passed to + * $image property + * @param integer $width + * @param integer $height + * @return mixed */ + abstract protected function getBlankImage($width, $height); + +/** This method should create an image from source image. Only first parameter + * ($image) is input. Its type should be filename string or a type of the + * $image property. See the constructor reference for details. The + * parametters $width and $height are output only. Should returns resource or + * object related to the created image, which will be passed to $image + * property + * @param mixed $image + * @param integer $width + * @param integer $height + * @return mixed */ + abstract protected function getImage($image, &$width, &$height); + +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/lib/class_image_gd.php b/additions/kcfinder/lib/class_image_gd.php new file mode 100644 index 0000000..b46ec6c --- /dev/null +++ b/additions/kcfinder/lib/class_image_gd.php @@ -0,0 +1,354 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class image_gd extends image { + + + // ABSTRACT PUBLIC METHODS + + public function resize($width, $height) { + if (!$width) $width = 1; + if (!$height) $height = 1; + return ( + (false !== ($img = new image_gd(array($width, $height)))) && + $img->imageCopyResampled($this) && + (false !== ($this->image = $img->image)) && + (false !== ($this->width = $img->width)) && + (false !== ($this->height = $img->height)) + ); + } + + public function resizeFit($width, $height, $background=false) { + if ((!$width && !$height) || (($width == $this->width) && ($height == $this->height))) + return true; + if (!$width || (($height / $width) < ($this->height / $this->width))) { + $h = $height; + $w = round(($this->width * $h) / $this->height); + } elseif (!$height || (($width / $height) < ($this->width / $this->height))) { + $w = $width; + $h = round(($this->height * $w) / $this->width); + } else { + $w = $width; + $h = $height; + } + if (!$w) $w = 1; + if (!$h) $h = 1; + + if ($background === false) + return $this->resize($w, $h); + + else { + $img = new image_gd(array($width, $height)); + $x = round(($width - $w) / 2); + $y = round(($height - $h) / 2); + + if ((false === $this->resize($w, $h)) || + (false === $img->imageFilledRectangle(0, 0, $width, $height, $background)) || + (false === $img->imageCopyResampled($this->image, $x, $y, 0, 0, $w, $h)) + ) + return false; + + $this->image = $img->image; + $this->width = $width; + $this->height = $height; + + return true; + } + } + + public function resizeCrop($width, $height, $offset=false) { + + if (($this->width / $this->height) > ($width / $height)) { + $h = $height; + $w = ($this->width * $h) / $this->height; + $y = 0; + if ($offset !== false) { + if ($offset > 0) + $offset = -$offset; + if (($w + $offset) <= $width) + $offset = $width - $w; + $x = $offset; + } else + $x = ($width - $w) / 2; + + } else { + $w = $width; + $h = ($this->height * $w) / $this->width; + $x = 0; + if ($offset !== false) { + if ($offset > 0) + $offset = -$offset; + if (($h + $offset) <= $height) + $offset = $height - $h; + $y = $offset; + } else + $y = ($height - $h) / 2; + } + + $x = round($x); + $y = round($y); + $w = round($w); + $h = round($h); + if (!$w) $w = 1; + if (!$h) $h = 1; + + $return = ( + (false !== ($img = new image_gd(array($width, $height))))) && + (false !== ($img->imageCopyResampled($this->image, $x, $y, 0, 0, $w, $h)) + ); + + if ($return) { + $this->image = $img->image; + $this->width = $w; + $this->height = $h; + } + + return $return; + } + + public function rotate($angle, $background="#000000") { + $angle = -$angle; + $img = @imagerotate($this->image, $angle, $this->gdColor($background)); + if ($img === false) + return false; + $this->width = imagesx($img); + $this->height = imagesy($img); + $this->image = $img; + return true; + } + + public function flipHorizontal() { + $img = imagecreatetruecolor($this->width, $this->height); + if (imagecopyresampled($img, $this->image, 0, 0, ($this->width - 1), 0, $this->width, $this->height, -$this->width, $this->height)) + $this->image = $img; + else + return false; + return true; + } + + public function flipVertical() { + $img = imagecreatetruecolor($this->width, $this->height); + if (imagecopyresampled($img, $this->image, 0, 0, 0, ($this->height - 1), $this->width, $this->height, $this->width, -$this->height)) + $this->image = $img; + else + return false; + return true; + } + + public function watermark($file, $left=false, $top=false) { + $info = getimagesize($file); + list($w, $h, $t) = $info; + if (!in_array($t, array(IMAGETYPE_PNG, IMAGETYPE_GIF))) + return false; + $imagecreate = ($t == IMAGETYPE_PNG) ? "imagecreatefrompng" : "imagecreatefromgif"; + + if (!@imagealphablending($this->image, true) || + (false === ($wm = @$imagecreate($file))) + ) + return false; + + $w = imagesx($wm); + $h = imagesy($wm); + $x = + ($left === true) ? 0 : ( + ($left === null) ? round(($this->width - $w) / 2) : ( + (($left === false) || !preg_match('/^\d+$/', $left)) ? ($this->width - $w) : $left)); + $y = + ($top === true) ? 0 : ( + ($top === null) ? round(($this->height - $h) / 2) : ( + (($top === false) || !preg_match('/^\d+$/', $top)) ? ($this->height - $h) : $top)); + + if ((($x + $w) > $this->width) || + (($y + $h) > $this->height) || + ($x < 0) || ($y < 0) + ) + return false; + + if (($wm === false) || !@imagecopy($this->image, $wm, $x, $y, 0, 0, $w, $h)) + return false; + + @imagealphablending($this->image, false); + @imagesavealpha($this->image, true); + return true; + } + + public function output($type='jpeg', array $options=array()) { + $method = "output_$type"; + if (!method_exists($this, $method)) + return false; + return $this->$method($options); + } + + + // ABSTRACT PROTECTED METHODS + + protected function getBlankImage($width, $height) { + $image = imagecreatetruecolor($width, $height); + imagealphablending($image, false); + imagesavealpha($image, true); + return $image; + } + + protected function getImage($image, &$width, &$height) { + + if (is_resource($image) && (get_resource_type($image) == "gd")) { + $width = @imagesx($image); + $height = @imagesy($image); + imagealphablending($image, false); + imagesavealpha($image, true); + return $image; + + } elseif (is_string($image) && + (false !== (list($width, $height, $t) = @getimagesize($image))) + ) { + $image = + ($t == IMAGETYPE_GIF) ? @imagecreatefromgif($image) : ( + ($t == IMAGETYPE_WBMP) ? @imagecreatefromwbmp($image) : ( + ($t == IMAGETYPE_JPEG) ? @imagecreatefromjpeg($image) : ( + ($t == IMAGETYPE_PNG) ? @imagecreatefrompng($image) : ( + ($t == IMAGETYPE_XBM) ? @imagecreatefromxbm($image) : false + )))); + + if ($t == IMAGETYPE_PNG) { + imagealphablending($image, false); + imagesavealpha($image, true); + } + return $image; + + } else + return false; + } + + + // PSEUDO-ABSTRACT STATIC METHODS + + static function available() { + return function_exists("imagecreatefromjpeg"); + } + + static function checkImage($file) { + if (!is_string($file) || + ((false === (list($width, $height, $t) = @getimagesize($file)))) + ) + return false; + + $img = + ($t == IMAGETYPE_GIF) ? @imagecreatefromgif($file) : ( + ($t == IMAGETYPE_WBMP) ? @imagecreatefromwbmp($file) : ( + ($t == IMAGETYPE_JPEG) ? @imagecreatefromjpeg($file) : ( + ($t == IMAGETYPE_PNG) ? @imagecreatefrompng($file) : ( + ($t == IMAGETYPE_XBM) ? @imagecreatefromxbm($file) : false + )))); + + return ($img !== false); + } + + + // OWN METHODS + + protected function output_png(array $options=array()) { + $file = isset($options['file']) ? $options['file'] : null; + $quality = isset($options['quality']) ? $options['quality'] : null; + $filters = isset($options['filters']) ? $options['filters'] : null; + if (($file === null) && !headers_sent()) + header("Content-Type: image/png"); + return imagepng($this->image, $file, $quality, $filters); + } + + protected function output_jpeg(array $options=array()) { + $file = isset($options['file']) ? $options['file'] : null; + $quality = isset($options['quality']) + ? $options['quality'] + : self::DEFAULT_JPEG_QUALITY; + if (($file === null) && !headers_sent()) + header("Content-Type: image/jpeg"); + return imagejpeg($this->image, $file, $quality); + } + + protected function output_gif(array $options=array()) { + $file = isset($options['file']) ? $options['file'] : null; + if (isset($options['file']) && !headers_sent()) + header("Content-Type: image/gif"); + return imagegif($this->image, $file); + } + + protected function gdColor() { + $args = func_get_args(); + + $exprRGB = '/^rgb\(\s*(\d{1,3})\s*\,\s*(\d{1,3})\s*\,\s*(\d{1,3})\s*\)$/i'; + $exprHex1 = '/^\#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i'; + $exprHex2 = '/^\#?([0-9a-f])([0-9a-f])([0-9a-f])$/i'; + $exprByte = '/^([01]?\d?\d|2[0-4]\d|25[0-5])$/'; + + if (!isset($args[0])) + return false; + + if (count($args[0]) == 3) { + list($r, $g, $b) = $args[0]; + + } elseif (preg_match($exprRGB, $args[0], $match)) { + list($tmp, $r, $g, $b) = $match; + + } elseif (preg_match($exprHex1, $args[0], $match)) { + list($tmp, $r, $g, $b) = $match; + $r = hexdec($r); + $g = hexdec($g); + $b = hexdec($b); + + } elseif (preg_match($exprHex2, $args[0], $match)) { + list($tmp, $r, $g, $b) = $match; + $r = hexdec("$r$r"); + $g = hexdec("$g$g"); + $b = hexdec("$b$b"); + + } elseif ((count($args) == 3) && + preg_match($exprByte, $args[0]) && + preg_match($exprByte, $args[1]) && + preg_match($exprByte, $args[2]) + ) { + list($r, $g, $b) = $args; + + } else + return false; + + return imagecolorallocate($this->image, $r, $g, $b); + } + + protected function imageFilledRectangle($x1, $y1, $x2, $y2, $color) { + $color = $this->gdColor($color); + if ($color === false) return false; + return imageFilledRectangle($this->image, $x1, $y1, $x2, $y2, $color); + } + + protected function imageCopyResampled( + $src, $dstX=0, $dstY=0, $srcX=0, $srcY=0, $dstW=null, $dstH=null, $srcW=null, $srcH=null + ) { + $imageDetails = $this->buildImage($src); + + if ($imageDetails === false) + return false; + + list($src, $srcWidth, $srcHeight) = $imageDetails; + + if (is_null($dstW)) $dstW = $this->width - $dstW; + if (is_null($dstH)) $dstH = $this->height - $dstY; + if (is_null($srcW)) $srcW = $srcWidth - $srcX; + if (is_null($srcH)) $srcH = $srcHeight - $srcY; + return imageCopyResampled($this->image, $src, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH); + } +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/lib/class_image_gmagick.php b/additions/kcfinder/lib/class_image_gmagick.php new file mode 100644 index 0000000..f49b0f1 --- /dev/null +++ b/additions/kcfinder/lib/class_image_gmagick.php @@ -0,0 +1,304 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class image_gmagick extends image { + + static $MIMES = array( + //'tif' => "image/tiff" + ); + + + // ABSTRACT PUBLIC METHODS + + public function resize($width, $height) {// + if (!$width) $width = 1; + if (!$height) $height = 1; + try { + $this->image->scaleImage($width, $height); + } catch (\Exception $e) { + return false; + } + $this->width = $width; + $this->height = $height; + return true; + } + + public function resizeFit($width, $height, $background=false) {// + if (!$width) $width = 1; + if (!$height) $height = 1; + + try { + $this->image->scaleImage($width, $height, true); + $w = $this->image->getImageWidth(); + $h = $this->image->getImageHeight(); + } catch (\Exception $e) { + return false; + } + + if ($background === false) { + $this->width = $w; + $this->height = $h; + return true; + + } else { + try { + $this->image->setImageBackgroundColor($background); + $x = round(($width - $w) / 2); + $y = round(($height - $h) / 2); + $img = new \Gmagick(); + $img->newImage($width, $height, $background); + $img->compositeImage($this->image, 1, $x, $y); + } catch (\Exception $e) { + return false; + } + $this->image = $img; + $this->width = $width; + $this->height = $height; + return true; + } + } + + public function resizeCrop($width, $height, $offset=false) { + if (!$width) $width = 1; + if (!$height) $height = 1; + + if (($this->width / $this->height) > ($width / $height)) { + $h = $height; + $w = ($this->width * $h) / $this->height; + $y = 0; + if ($offset !== false) { + if ($offset > 0) + $offset = -$offset; + if (($w + $offset) <= $width) + $offset = $width - $w; + $x = $offset; + } else + $x = ($width - $w) / 2; + + } else { + $w = $width; + $h = ($this->height * $w) / $this->width; + $x = 0; + if ($offset !== false) { + if ($offset > 0) + $offset = -$offset; + if (($h + $offset) <= $height) + $offset = $height - $h; + $y = $offset; + } else + $y = ($height - $h) / 2; + } + + $x = round($x); + $y = round($y); + $w = round($w); + $h = round($h); + if (!$w) $w = 1; + if (!$h) $h = 1; + + try { + $this->image->scaleImage($w, $h); + $this->image->cropImage($width, $height, -$x, -$y); + } catch (\Exception $e) { + return false; + } + + $this->width = $width; + $this->height = $height; + return true; + } + + public function rotate($angle, $background="#000000") { + try { + $this->image->rotateImage($background, $angle); + $w = $this->image->getImageWidth(); + $h = $this->image->getImageHeight(); + } catch (\Exception $e) { + return false; + } + $this->width = $w; + $this->height = $h; + return true; + } + + public function flipHorizontal() { + try { + $this->image->flopImage(); + } catch (\Exception $e) { + return false; + } + return true; + } + + public function flipVertical() { + try { + $this->image->flipImage(); + } catch (\Exception $e) { + return false; + } + return true; + } + + public function watermark($file, $left=false, $top=false) { + try { + $wm = new \Gmagick($file); + $w = $wm->getImageWidth(); + $h = $wm->getImageHeight(); + } catch (\Exception $e) { + return false; + } + + $x = + ($left === true) ? 0 : ( + ($left === null) ? round(($this->width - $w) / 2) : ( + (($left === false) || !preg_match('/^\d+$/', $left)) ? ($this->width - $w) : $left)); + $y = + ($top === true) ? 0 : ( + ($top === null) ? round(($this->height - $h) / 2) : ( + (($top === false) || !preg_match('/^\d+$/', $top)) ? ($this->height - $h) : $top)); + + if ((($x + $w) > $this->width) || + (($y + $h) > $this->height) || + ($x < 0) || ($y < 0) + ) + return false; + + try { + $this->image->compositeImage($wm, 1, $x, $y); + } catch (\Exception $e) { + return false; + } + return true; + } + + + // ABSTRACT PROTECTED METHODS + + protected function getBlankImage($width, $height) { + try { + $img = new \Gmagick(); + $img->newImage($width, $height, "none"); + } catch (\Exception $e) { + return false; + } + return $img; + } + + protected function getImage($image, &$width, &$height) { + + if (is_object($image) && ($image instanceof image_gmagick)) { + $width = $image->width; + $height = $image->height; + return $image->image; + + } elseif (is_object($image) && ($image instanceof \Gmagick)) { + try { + $w = $image->getImageWidth(); + $h = $image->getImageHeight(); + } catch (\Exception $e) { + return false; + } + $width = $w; + $height = $h; + return $image; + + } elseif (is_string($image)) { + try { + $image = new \Gmagick($image); + $w = $image->getImageWidth(); + $h = $image->getImageHeight(); + } catch (\Exception $e) { + return false; + } + $width = $w; + $height = $h; + return $image; + + } else + return false; + } + + + // PSEUDO-ABSTRACT STATIC METHODS + + static function available() { + return class_exists("Gmagick"); + } + + static function checkImage($file) { + try { + $img = new \Gmagick($file); + } catch (\Exception $e) { + return false; + } + return true; + } + + + // INHERIT METHODS + + public function output($type="jpeg", array $options=array()) { + $type = strtolower($type); + try { + $this->image->setImageFormat($type); + } catch (\Exception $e) { + return false; + } + $method = "optimize_$type"; + if (method_exists($this, $method) && !$this->$method($options)) + return false; + + if (!isset($options['file'])) { + if (!headers_sent()) { + $mime = isset(self::$MIMES[$type]) ? self::$MIMES[$type] : "image/$type"; + header("Content-Type: $mime"); + } + echo $this->image; + + } else { + $file = $options['file'] . ".$type"; + try { + $this->image->writeImage($file); + } catch (\Exception $e) { + @unlink($file); + return false; + } + + if (!@rename($file, $options['file'])) { + @unlink($file); + return false; + } + } + + return true; + } + + + // OWN METHODS + + protected function optimize_jpeg(array $options=array()) { + $quality = isset($options['quality']) ? $options['quality'] : self::DEFAULT_JPEG_QUALITY; + try { + $this->image->setCompressionQuality($quality); + } catch (\Exception $e) { + return false; + } + return true; + } + +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/lib/class_image_imagick.php b/additions/kcfinder/lib/class_image_imagick.php new file mode 100644 index 0000000..e3dfa33 --- /dev/null +++ b/additions/kcfinder/lib/class_image_imagick.php @@ -0,0 +1,307 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class image_imagick extends image { + + static $MIMES = array( + //'tif' => "image/tiff" + ); + + + // ABSTRACT PUBLIC METHODS + + public function resize($width, $height) {// + if (!$width) $width = 1; + if (!$height) $height = 1; + try { + $this->image->scaleImage($width, $height); + } catch (\Exception $e) { + return false; + } + $this->width = $width; + $this->height = $height; + return true; + } + + public function resizeFit($width, $height, $background=false) {// + if (!$width) $width = 1; + if (!$height) $height = 1; + + try { + $this->image->scaleImage($width, $height, true); + $size = $this->image->getImageGeometry(); + } catch (\Exception $e) { + return false; + } + + if ($background === false) { + $this->width = $size['width']; + $this->height = $size['height']; + return true; + + } else { + try { + $this->image->setImageBackgroundColor($background); + $x = -round(($width - $size['width']) / 2); + $y = -round(($height - $size['height']) / 2); + $this->image->extentImage($width, $height, $x, $y); + } catch (\Exception $e) { + return false; + } + $this->width = $width; + $this->height = $height; + return true; + } + } + + public function resizeCrop($width, $height, $offset=false) { + if (!$width) $width = 1; + if (!$height) $height = 1; + + if (($this->width / $this->height) > ($width / $height)) { + $h = $height; + $w = ($this->width * $h) / $this->height; + $y = 0; + if ($offset !== false) { + if ($offset > 0) + $offset = -$offset; + if (($w + $offset) <= $width) + $offset = $width - $w; + $x = $offset; + } else + $x = ($width - $w) / 2; + + } else { + $w = $width; + $h = ($this->height * $w) / $this->width; + $x = 0; + if ($offset !== false) { + if ($offset > 0) + $offset = -$offset; + if (($h + $offset) <= $height) + $offset = $height - $h; + $y = $offset; + } else + $y = ($height - $h) / 2; + } + + $x = round($x); + $y = round($y); + $w = round($w); + $h = round($h); + if (!$w) $w = 1; + if (!$h) $h = 1; + + try { + $this->image->scaleImage($w, $h); + $this->image->cropImage($width, $height, -$x, -$y); + } catch (\Exception $e) { + return false; + } + + $this->width = $width; + $this->height = $height; + return true; + } + + public function rotate($angle, $background="#000000") { + try { + $this->image->rotateImage(new \ImagickPixel($background), $angle); + $size = $this->image->getImageGeometry(); + } catch (\Exception $e) { + return false; + } + $this->width = $size['width']; + $this->height = $size['height']; + return true; + } + + public function flipHorizontal() { + try { + $this->image->flopImage(); + } catch (\Exception $e) { + return false; + } + return true; + } + + public function flipVertical() { + try { + $this->image->flipImage(); + } catch (\Exception $e) { + return false; + } + return true; + } + + public function watermark($file, $left=false, $top=false) { + try { + $wm = new \Imagick($file); + $size = $wm->getImageGeometry(); + } catch (\Exception $e) { + return false; + } + + $w = $size['width']; + $h = $size['height']; + $x = + ($left === true) ? 0 : ( + ($left === null) ? round(($this->width - $w) / 2) : ( + (($left === false) || !preg_match('/^\d+$/', $left)) ? ($this->width - $w) : $left)); + $y = + ($top === true) ? 0 : ( + ($top === null) ? round(($this->height - $h) / 2) : ( + (($top === false) || !preg_match('/^\d+$/', $top)) ? ($this->height - $h) : $top)); + + if ((($x + $w) > $this->width) || + (($y + $h) > $this->height) || + ($x < 0) || ($y < 0) + ) + return false; + + try { + $this->image->compositeImage($wm, \Imagick::COMPOSITE_DEFAULT, $x, $y); + } catch (\Exception $e) { + return false; + } + return true; + } + + + // ABSTRACT PROTECTED METHODS + + protected function getBlankImage($width, $height) { + try { + $img = new \Imagick(); + $img->newImage($width, $height, "none"); + $img->setImageCompressionQuality(100); + } catch (\Exception $e) { + return false; + } + return $img; + } + + protected function getImage($image, &$width, &$height) { + + if (is_object($image) && ($image instanceof image_imagick)) { + try { + $image->image->setImageCompressionQuality(100); + } catch (\Exception $e) { + return false; + } + $width = $image->width; + $height = $image->height; + return $image->image; + + } elseif (is_object($image) && ($image instanceof \Imagick)) { + try { + $image->setImageCompressionQuality(100); + $size = $image->getImageGeometry(); + } catch (\Exception $e) { + return false; + } + $width = $size['width']; + $height = $size['height']; + return $image; + + } elseif (is_string($image)) { + try { + $image = new \Imagick($image); + $image->setImageCompressionQuality(100); + $size = $image->getImageGeometry(); + } catch (\Exception $e) { + return false; + } + $width = $size['width']; + $height = $size['height']; + return $image; + + } else + return false; + } + + + // PSEUDO-ABSTRACT STATIC METHODS + + static function available() { + return class_exists("\\Imagick"); + } + + static function checkImage($file) { + try { + $img = new \Imagick($file); + } catch (\Exception $e) { + return false; + } + return true; + } + + + // INHERIT METHODS + + public function output($type="jpeg", array $options=array()) { + $type = strtolower($type); + try { + $this->image->setImageFormat($type); + } catch (\Exception $e) { + return false; + } + $method = "optimize_$type"; + if (method_exists($this, $method) && !$this->$method($options)) + return false; + + if (!isset($options['file'])) { + if (!headers_sent()) { + $mime = isset(self::$MIMES[$type]) ? self::$MIMES[$type] : "image/$type"; + header("Content-Type: $mime"); + } + echo $this->image; + + } else { + $file = $options['file'] . ".$type"; + try { + $this->image->writeImage($file); + } catch (\Exception $e) { + @unlink($file); + return false; + } + + if (!@rename($file, $options['file'])) { + @unlink($file); + return false; + } + } + + return true; + } + + + // OWN METHODS + + protected function optimize_jpeg(array $options=array()) { + $quality = isset($options['quality']) ? $options['quality'] : self::DEFAULT_JPEG_QUALITY; + try { + $this->image->setImageCompression(\Imagick::COMPRESSION_JPEG); + $this->image->setImageCompressionQuality($quality); + } catch (\Exception $e) { + return false; + } + return true; + } + +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/lib/class_zipFolder.php b/additions/kcfinder/lib/class_zipFolder.php new file mode 100644 index 0000000..7dc6e64 --- /dev/null +++ b/additions/kcfinder/lib/class_zipFolder.php @@ -0,0 +1,62 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class zipFolder { + protected $zip; + protected $root; + protected $ignored; + + function __construct($file, $folder, $ignored=null) { + $this->zip = new \ZipArchive(); + + $this->ignored = is_array($ignored) + ? $ignored + : ($ignored ? array($ignored) : array()); + + if ($this->zip->open($file, \ZipArchive::CREATE) !== TRUE) + throw new \Exception("cannot open <$file>\n"); + + $folder = rtrim($folder, '/'); + + if (strstr($folder, '/')) { + $this->root = substr($folder, 0, strrpos($folder, '/') + 1); + $folder = substr($folder, strrpos($folder, '/') + 1); + } + + $this->zip($folder); + $this->zip->close(); + } + + function zip($folder, $parent=null) { + $full_path = "{$this->root}$parent$folder"; + $zip_path = "$parent$folder"; + $this->zip->addEmptyDir($zip_path); + $dir = new \DirectoryIterator($full_path); + foreach ($dir as $file) + if (!$file->isDot()) { + $filename = $file->getFilename(); + if (!in_array($filename, $this->ignored)) { + if ($file->isDir()) + $this->zip($filename, "$zip_path/"); + else + $this->zip->addFile("$full_path/$filename", "$zip_path/$filename"); + } + } + } +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/lib/helper_dir.php b/additions/kcfinder/lib/helper_dir.php new file mode 100644 index 0000000..dcc057f --- /dev/null +++ b/additions/kcfinder/lib/helper_dir.php @@ -0,0 +1,158 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class dir { + +/** Checks if the given directory is really writable. The standard PHP + * function is_writable() does not work properly on Windows servers + * @param string $dir + * @return bool */ + + static function isWritable($dir) { + $dir = path::normalize($dir); + if (!is_dir($dir)) + return false; + $i = 0; + do { + $file = "$dir/is_writable_" . md5($i++); + } while (file_exists($file)); + if (!@touch($file)) + return false; + unlink($file); + return true; + } + +/** Recursively delete the given directory. Returns TRUE on success. + * If $firstFailExit parameter is true (default), the method returns the + * path to the first failed file or directory which cannot be deleted. + * If $firstFailExit is false, the method returns an array with failed + * files and directories which cannot be deleted. The third parameter + * $failed is used for internal use only. + * @param string $dir + * @param bool $firstFailExit + * @param array $failed + * @return mixed */ + + static function prune($dir, $firstFailExit=true, array $failed=null) { + if ($failed === null) $failed = array(); + $files = self::content($dir); + if ($files === false) { + if ($firstFailExit) + return $dir; + $failed[] = $dir; + return $failed; + } + + foreach ($files as $file) { + if (is_dir($file)) { + $failed_in = self::prune($file, $firstFailExit, $failed); + if ($failed_in !== true) { + if ($firstFailExit) + return $failed_in; + if (is_array($failed_in)) + $failed = array_merge($failed, $failed_in); + else + $failed[] = $failed_in; + } + } elseif (!@unlink($file)) { + if ($firstFailExit) + return $file; + $failed[] = $file; + } + } + + if (!@rmdir($dir)) { + if ($firstFailExit) + return $dir; + $failed[] = $dir; + } + + return count($failed) ? $failed : true; + } + +/** Get the content of the given directory. Returns an array with filenames + * or FALSE on failure + * @param string $dir + * @param array $options + * @return mixed */ + + static function content($dir, array $options=null) { + + $defaultOptions = array( + 'types' => "all", // Allowed: "all" or possible return values + // of filetype(), or an array with them + 'addPath' => true, // Whether to add directory path to filenames + 'pattern' => '/./', // Regular expression pattern for filename + 'followLinks' => true + ); + + if (!is_dir($dir) || !is_readable($dir)) + return false; + + if (strtoupper(substr(PHP_OS, 0, 3)) == "WIN") + $dir = str_replace("\\", "/", $dir); + $dir = rtrim($dir, "/"); + + $dh = @opendir($dir); + if ($dh === false) + return false; + + if ($options === null) + $options = $defaultOptions; + + foreach ($defaultOptions as $key => $val) + if (!isset($options[$key])) + $options[$key] = $val; + + $files = array(); + while (($file = @readdir($dh)) !== false) { + + if (($file == '.') || ($file == '..') || + !preg_match($options['pattern'], $file) + ) + continue; + + $fullpath = "$dir/$file"; + $type = filetype($fullpath); + + // If file is a symlink, get the true type of its destination + if ($options['followLinks'] && ($type == "link")) + $type = filetype(realpath($fullpath)); + + if (($options['types'] === "all") || ($type === $options['types']) || + (is_array($options['types']) && in_array($type, $options['types'])) + ) + $files[] = $options['addPath'] ? $fullpath : $file; + } + closedir($dh); + usort($files, array(__NAMESPACE__ . "\\dir", "fileSort")); + return $files; + } + + static function fileSort($a, $b) { + if (function_exists("mb_strtolower")) { + $a = mb_strtolower($a); + $b = mb_strtolower($b); + } else { + $a = strtolower($a); + $b = strtolower($b); + } + if ($a == $b) return 0; + return ($a < $b) ? -1 : 1; + } +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/lib/helper_file.php b/additions/kcfinder/lib/helper_file.php new file mode 100644 index 0000000..4119ec9 --- /dev/null +++ b/additions/kcfinder/lib/helper_file.php @@ -0,0 +1,216 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class file { + + static $MIME = array( + 'ai' => 'application/postscript', + 'aif' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'avi' => 'video/x-msvideo', + 'bin' => 'application/macbinary', + 'bmp' => 'image/bmp', + 'cpt' => 'application/mac-compactpro', + 'css' => 'text/css', + 'csv' => 'text/x-comma-separated-values', + 'dcr' => 'application/x-director', + 'dir' => 'application/x-director', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dvi' => 'application/x-dvi', + 'dxr' => 'application/x-director', + 'eml' => 'message/rfc822', + 'eps' => 'application/postscript', + 'flv' => 'video/x-flv', + 'gif' => 'image/gif', + 'gtar' => 'application/x-gtar', + 'gz' => 'application/x-gzip', + 'hqx' => 'application/mac-binhex40', + 'htm' => 'text/html', + 'html' => 'text/html', + 'jpe' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'js' => 'application/x-javascript', + 'log' => 'text/plain', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mif' => 'application/vnd.mif', + 'mov' => 'video/quicktime', + 'movie' => 'video/x-sgi-movie', + 'mp2' => 'audio/mpeg', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mpeg', + 'mpe' => 'video/mpeg', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpga' => 'audio/mpeg', + 'oda' => 'application/oda', + 'pdf' => 'application/pdf', + 'php' => 'application/x-httpd-php', + 'php3' => 'application/x-httpd-php', + 'php4' => 'application/x-httpd-php', + 'phps' => 'application/x-httpd-php-source', + 'phtml' => 'application/x-httpd-php', + 'png' => 'image/png', + 'ppt' => 'application/powerpoint', + 'ps' => 'application/postscript', + 'psd' => 'application/x-photoshop', + 'qt' => 'video/quicktime', + 'ra' => 'audio/x-realaudio', + 'ram' => 'audio/x-pn-realaudio', + 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', + 'rtf' => 'text/rtf', + 'rtx' => 'text/richtext', + 'rv' => 'video/vnd.rn-realvideo', + 'shtml' => 'text/html', + 'sit' => 'application/x-stuffit', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'swf' => 'application/x-shockwave-flash', + 'tar' => 'application/x-tar', + 'tgz' => 'application/x-tar', + 'text' => 'text/plain', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'txt' => 'text/plain', + 'wav' => 'audio/x-wav', + 'wbxml' => 'application/wbxml', + 'wmlc' => 'application/wmlc', + 'word' => 'application/msword', + 'xht' => 'application/xhtml+xml', + 'xhtml' => 'application/xhtml+xml', + 'xl' => 'application/excel', + 'xls' => 'application/excel', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xml' => 'text/xml', + 'xsl' => 'text/xml', + 'zip' => 'application/x-zip' + ); + +/** Checks if the given file is really writable. The standard PHP function + * is_writable() does not work properly on Windows servers. + * @param string $filename + * @return bool */ + + static function isWritable($filename) { + $filename = path::normalize($filename); + if (!is_file($filename) || (false === ($fp = @fopen($filename, 'a+')))) + return false; + fclose($fp); + return true; + } + +/** Get the extension from filename + * @param string $filename + * @param bool $toLower + * @return string */ + + static function getExtension($filename, $toLower=true) { + return preg_match('/^.*\.([^\.]*)$/s', $filename, $patt) + ? ($toLower ? strtolower($patt[1]) : $patt[1]) : ""; + } + +/** Get MIME type of the given filename. If Fileinfo PHP extension is + * available the MIME type will be fetched by the file's content. The + * second parameter is optional and defines the magic file path. If you + * skip it, the default one will be loaded. + * If Fileinfo PHP extension is not available the MIME type will be fetched + * by filename extension regarding $MIME property. If the file extension + * does not exist there, returned type will be application/octet-stream + * @param string $filename + * @param string $magic + * @return string */ + + static function getMimeType($filename, $magic=null) { + if (class_exists("finfo")) { + $finfo = new \finfo(FILEINFO_MIME, $magic); + if ($finfo) { + $mime = $finfo->file($filename); + $mime = substr($mime, 0, strrpos($mime, ";")); + return $mime; + } + } + $ext = self::getExtension($filename, true); + return isset(self::$MIME[$ext]) ? self::$MIME[$ext] : "application/octet-stream"; + } + +/** Get inexistant filename based on the given filename. If you skip $dir + * parameter the directory will be fetched from $filename and returned + * value will be full filename path. The third parameter is optional and + * defines the template, the filename will be renamed to. Default template + * is {name}({sufix}){ext}. Examples: + * + * file::getInexistantFilename("/my/directory/myfile.txt"); + * If myfile.txt does not exist - returns the same path to the file + * otherwise returns "/my/directory/myfile(1).txt" + * + * file::getInexistantFilename("myfile.txt", "/my/directory"); + * returns "myfile.txt" or "myfile(1).txt" or "myfile(2).txt" etc... + * + * file::getInexistantFilename("myfile.txt", "/dir", "{name}[{sufix}]{ext}"); + * returns "myfile.txt" or "myfile[1].txt" or "myfile[2].txt" etc... + * + * @param string $filename + * @param string $dir + * @param string $tpl + * @return string */ + + static function getInexistantFilename($filename, $dir=null, $tpl=null) { + if ($tpl === null) $tpl = "{name}({sufix}){ext}"; + $fullPath = ($dir === null); + if ($fullPath) + $dir = path::normalize(dirname($filename)); + else { + $fdir = dirname($filename); + $dir = strlen($fdir) + ? path::normalize("$dir/$fdir") + : path::normalize($dir); + } + $filename = basename($filename); + $ext = self::getExtension($filename, false); + $name = strlen($ext) ? substr($filename, 0, -strlen($ext) - 1) : $filename; + $tpl = str_replace('{name}', $name, $tpl); + $tpl = str_replace('{ext}', (strlen($ext) ? ".$ext" : ""), $tpl); + $i = 1; $file = "$dir/$filename"; + while (file_exists($file)) + $file = "$dir/" . str_replace('{sufix}', $i++, $tpl); + + return $fullPath + ? $file + : (strlen($fdir) + ? "$fdir/" . basename($file) + : basename($file)); + } + +/** Normalize given filename. Accented characters becomes non-accented and + * removes any other special characters. Usable for non-unicode filesystems + * @param $filename + * @return string */ + + static function normalizeFilename($filename) { + $string = htmlentities($filename, ENT_QUOTES, 'UTF-8'); + if (strpos($string, '&') !== false) + $filename = html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|tilde|uml);~i', '$1', $string), ENT_QUOTES, 'UTF-8'); + $filename = trim(preg_replace('~[^0-9a-z\.\- ]~i', "_", $filename)); + return $filename; + } + +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/lib/helper_httpCache.php b/additions/kcfinder/lib/helper_httpCache.php new file mode 100644 index 0000000..8d51e8c --- /dev/null +++ b/additions/kcfinder/lib/helper_httpCache.php @@ -0,0 +1,100 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class httpCache { + const DEFAULT_TYPE = "text/html"; + const DEFAULT_EXPIRE = 604800; // in seconds + +/** Cache a file. The $type parameter might define the MIME type of the file + * or path to magic file to autodetect the MIME type. If you skip $type + * parameter the method will try with the default magic file. Autodetection + * of MIME type requires Fileinfo PHP extension used in file::getMimeType() + * @param string $file + * @param string $type + * @param integer $expire + * @param array $headers */ + + static function file($file, $type=null, $expire=null, array $headers=null) { + $mtime = @filemtime($file); + if ($mtime !== false) self::checkMTime($mtime); + + if ($type === null) { + $magic = ((substr($type, 0, 1) == "/") || preg_match('/^[a-z]\:/i', $type)) + ? $type : null; + $type = file::getMimeType($file, $magic); + if (!$type) $type = null; + } + + self::content(@file_get_contents($file), $mtime, $type, $expire, $headers, false); + } + +/** Cache the given $content with $mtime modification time. + * @param binary $content + * @param integer $mtime + * @param string $type + * @param integer $expire + * @param array $headers + * @param bool $checkMTime */ + + static function content($content, $mtime, $type=null, $expire=null, array $headers=null, $checkMTime=true) { + if ($checkMTime) self::checkMTime($mtime); + if ($type === null) $type = self::DEFAULT_TYPE; + if ($expire === null) $expire = self::DEFAULT_EXPIRE; + $size = strlen($content); + $expires = gmdate("D, d M Y H:i:s", time() + $expire) . " GMT"; + header("Content-Type: $type"); + header("Expires: $expires"); + header("Cache-Control: max-age=$expire"); + header("Pragma: !invalid"); + header("Content-Length: $size"); + if ($headers !== null) foreach ($headers as $header) header($header); + echo $content; + } + +/** Check if given modification time is newer than client-side one. If not, + * the method will tell the client to get the content from its own cache. + * Afterwards the script process will be terminated. This feature requires + * the PHP to be configured as Apache module. + * @param integer $mtime + * @param mixed $sendHeaders */ + + static function checkMTime($mtime, $sendHeaders=null) { + header("Last-Modified: " . gmdate("D, d M Y H:i:s", $mtime) . " GMT"); + + $headers = function_exists("getallheaders") + ? getallheaders() + : (function_exists("apache_request_headers") + ? apache_request_headers() + : false); + + if (is_array($headers) && isset($headers['If-Modified-Since'])) { + $client_mtime = explode(';', $headers['If-Modified-Since']); + $client_mtime = @strtotime($client_mtime[0]); + if ($client_mtime >= $mtime) { + header('HTTP/1.1 304 Not Modified'); + if (is_array($sendHeaders) && count($sendHeaders)) + foreach ($sendHeaders as $header) + header($header); + elseif ($sendHeaders !== null) + header($sendHeaders); + die; + } + } + } + +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/lib/helper_path.php b/additions/kcfinder/lib/helper_path.php new file mode 100644 index 0000000..9a34913 --- /dev/null +++ b/additions/kcfinder/lib/helper_path.php @@ -0,0 +1,149 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class path { + +/** Get the absolute URL path of the given one. Returns FALSE if the URL + * is not valid or the current directory cannot be resolved (getcwd()) + * @param string $path + * @return string */ + + static function rel2abs_url($path) { + if (substr($path, 0, 1) == "/") return $path; + $dir = @getcwd(); + + if (!isset($_SERVER['DOCUMENT_ROOT']) || ($dir === false)) + return false; + + $dir = self::normalize($dir); + $doc_root = self::normalize($_SERVER['DOCUMENT_ROOT']); + + if (substr($dir, 0, strlen($doc_root)) != $doc_root) + return false; + + $return = self::normalize(substr($dir, strlen($doc_root)) . "/$path"); + if (substr($return, 0, 1) !== "/") + $return = "/$return"; + + return $return; + } + +/** Resolve full filesystem path of given URL. Returns FALSE if the URL + * cannot be resolved + * @param string $url + * @return string */ + + static function url2fullPath($url) { + $url = self::normalize($url); + + $uri = isset($_SERVER['SCRIPT_NAME']) + ? $_SERVER['SCRIPT_NAME'] : (isset($_SERVER['PHP_SELF']) + ? $_SERVER['PHP_SELF'] + : false); + + $uri = self::normalize($uri); + + if (substr($url, 0, 1) !== "/") { + if ($uri === false) return false; + $url = dirname($uri) . "/$url"; + } + + if (isset($_SERVER['DOCUMENT_ROOT'])) { + return self::normalize($_SERVER['DOCUMENT_ROOT'] . "/$url"); + + } else { + if ($uri === false) return false; + + if (isset($_SERVER['SCRIPT_FILENAME'])) { + $scr_filename = self::normalize($_SERVER['SCRIPT_FILENAME']); + return self::normalize(substr($scr_filename, 0, -strlen($uri)) . "/$url"); + } + + $count = count(explode('/', $uri)) - 1; + for ($i = 0, $chdir = ""; $i < $count; $i++) + $chdir .= "../"; + $chdir = self::normalize($chdir); + + $dir = getcwd(); + if (($dir === false) || !@chdir($chdir)) + return false; + $rdir = getcwd(); + chdir($dir); + return ($rdir !== false) ? self::normalize($rdir . "/$url") : false; + } + } + +/** Normalize the given path. On Windows servers backslash will be replaced + * with slash. Removes unnecessary double slashes and double dots. Removes + * last slash if it exists. Examples: + * path::normalize("C:\\any\\path\\") returns "C:/any/path" + * path::normalize("/your/path/..//home/") returns "/your/home" + * @param string $path + * @return string */ + + static function normalize($path) { + + // Backslash to slash convert + if (strtoupper(substr(PHP_OS, 0, 3)) == "WIN") { + $path = preg_replace('/([^\\\])\\\+([^\\\])/s', "$1/$2", $path); + if (substr($path, -1) == "\\") $path = substr($path, 0, -1); + if (substr($path, 0, 1) == "\\") $path = "/" . substr($path, 1); + } + + $path = preg_replace('/\/+/s', "/", $path); + + $path = "/$path"; + if (substr($path, -1) != "/") + $path .= "/"; + + $expr = '/\/([^\/]{1}|[^\.\/]{2}|[^\/]{3,})\/\.\.\//s'; + while (preg_match($expr, $path)) + $path = preg_replace($expr, "/", $path); + + $path = substr($path, 0, -1); + $path = substr($path, 1); + return $path; + } + +/** Encode URL Path + * @param string $path + * @return string */ + + static function urlPathEncode($path) { + $path = self::normalize($path); + $encoded = ""; + foreach (explode("/", $path) as $dir) + $encoded .= rawurlencode($dir) . "/"; + $encoded = substr($encoded, 0, -1); + return $encoded; + } + +/** Decode URL Path + * @param string $path + * @return string */ + + static function urlPathDecode($path) { + $path = self::normalize($path); + $decoded = ""; + foreach (explode("/", $path) as $dir) + $decoded .= rawurldecode($dir) . "/"; + $decoded = substr($decoded, 0, -1); + return $decoded; + } + +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/lib/helper_text.php b/additions/kcfinder/lib/helper_text.php new file mode 100644 index 0000000..15fcae2 --- /dev/null +++ b/additions/kcfinder/lib/helper_text.php @@ -0,0 +1,55 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +namespace kcfinder; + +class text { + +/** Replace repeated white spaces to single space + * @param string $string + * @return string */ + + static function clearWhitespaces($string) { + return trim(preg_replace('/\s+/s', " ", $string)); + } + +/** Normalize the string for HTML attribute value + * @param string $string + * @return string */ + + static function htmlValue($string) { + return + str_replace('"', """, + str_replace("'", ''', + str_replace('<', '<', + str_replace('&', "&", + $string)))); + } + +/** Normalize the string for JavaScript string value + * @param string $string + * @return string */ + + static function jsValue($string) { + return + preg_replace('/\r?\n/', "\\n", + str_replace('"', "\\\"", + str_replace("'", "\\'", + str_replace("\\", "\\\\", + $string)))); + } + +} + +?> \ No newline at end of file diff --git a/additions/kcfinder/themes/dark/01.ui.css b/additions/kcfinder/themes/dark/01.ui.css new file mode 100644 index 0000000..2d56d38 --- /dev/null +++ b/additions/kcfinder/themes/dark/01.ui.css @@ -0,0 +1,1991 @@ +/* + +This CSS code is generated from http://ui.sunhater.com +(c)2014 Pavel Tzonkov, sunhater.com. All rights reserved. + +*/ +/*** jQueryUI */ +/** Base */ + +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 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; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:alpha(opacity=0); +} + +.ui-front { + z-index: 100; +} + +.ui-widget .ui-widget, +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #888; + background: #000; + color: #aaa; +} +.ui-widget-content a { + color: #aaa; +} +.ui-widget-header { + border: 1px solid #4685b3; + color: #fff; + font-weight: bold; + background: #184977; + background: -webkit-linear-gradient(top, #184977, #4685b3); + background: -moz-linear-gradient(top, #184977, #4685b3); + background: -ms-linear-gradient(top, #184977, #4685b3); + background: -o-linear-gradient(top, #184977, #4685b3); + background: linear-gradient(to bottom, #184977, #4685b3); +} +.ui-widget-header a { + color: #fff; +} + +/* Interaction states +----------------------------------*/ + +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-widget.ui-state-disabled { + transition: .2s; + border: 1px solid #555; + background: #333; + background: -webkit-linear-gradient(top, #555, #111); + background: -moz-linear-gradient(top, #555, #111); + background: -ms-linear-gradient(top, #555, #111); + background: -o-linear-gradient(top, #555, #111); + background: linear-gradient(to bottom, #555, #111); + font-weight: bold; + color: #aaa; +} + +.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 { + transition: .2s; + background: -webkit-linear-gradient(top, #111, #555); + background: -moz-linear-gradient(top, #111, #555); + background: -ms-linear-gradient(top, #111, #555); + background: -o-linear-gradient(top, #111, #555); + background: linear-gradient(to bottom, #111, #555); +} + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +.ui-menu .ui-state-focus { + transition: .2s; + border: 1px solid #184977; + background: #4685b3; + background: -webkit-linear-gradient(top, #184977, #4685b3); + background: -moz-linear-gradient(top, #184977, #4685b3); + background: -ms-linear-gradient(top, #184977, #4685b3); + background: -o-linear-gradient(top, #184977, #4685b3); + background: linear-gradient(to bottom, #184977, #4685b3); + font-weight: bold; + color: #fff; +} + +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + transition: .2s; + color: #fff; + text-decoration: none; +} + +.ui-menu .ui-state-active { + transition: .2s; + border-color: #6b6b6b; + background: #6b6b6b; + background: -webkit-linear-gradient(top, #6b6b6b, #ababab); + background: -moz-linear-gradient(top, #6b6b6b, #ababab); + background: -ms-linear-gradient(top, #6b6b6b, #ababab); + background: -o-linear-gradient(top, #6b6b6b, #ababab); + background: linear-gradient(to bottom, #6b6b6b, #ababab); +} + +/* Interaction Cues +----------------------------------*/ + +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #d5bc2c; + box-shadow: inset 0 0 5px #d5bc2c; + background: #fff6bf; + color: #aaa; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cf7f7f; + box-shadow: inset 0 0 5px #cf7f7f; + background: #fac4c4; + color: #aaa; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a, +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a, +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #aaa; +} +.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: .5; + filter:alpha(opacity=50); + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .50; + filter:alpha(opacity=50); + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:alpha(opacity=50); /* For IE8 - See #6059 */ +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} + + +/** Accordion */ + +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin-top: 2px; + padding: 6px; + min-height: 0; /* support: IE7 */ +} +.ui-accordion .ui-accordion-icons, +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 24px; +} +.ui-accordion .ui-accordion-noicons { + padding-left: 5px; +} + +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: 5px; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em; + border-top: 0; + overflow: auto; +} + + +/** Autocomplete */ + +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: pointer; +} + + +/** Button */ + +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 36px; +} +.ui-button-icons-only { + width: 50px; +} +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: 6px 10px; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: 6px; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: 6px 10px 6px 28px; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: 6px 28px 6px 10px; +} +.ui-button-text-icons .ui-button-text { + padding-left: 28px; + padding-right: 28px; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: 6px 10px; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: 7px; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: 7px; +} +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} + + +/** Button set */ + +.ui-buttonset { + margin:0; + overflow:auto; +} +.ui-buttonset .ui-button { + margin: 0; + float:left; +} + + +/** Date picker */ + +.ui-datepicker { + width: 19em; + display: none; + padding: 10px; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: 2px 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 4px; + width: 20px; + height: 20px; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 3px; +} +.ui-datepicker .ui-datepicker-prev { + left: 4px; +} +.ui-datepicker .ui-datepicker-next { + right: 4px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 3px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 3px; +} +.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 10px; + padding: 4px 0; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin:-2px 2px; + padding:0; + outline:0; +} +.ui-datepicker table { + width: 100%; + border-collapse: collapse; + margin: 0; + font-size: 1em; +} +.ui-datepicker th { + padding: 3px; + 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: 2px 3px; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: 10px -11px -11px -11px; + padding: 10px; + border: 1px solid #184977; + background: #e4f5ff; + overflow: auto; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + cursor: pointer; + width: auto; + overflow: visible; + margin: 0; + padding: 6px 10px; + font-weight: bold; + opacity: 1; + filter: alpha(opacity=100); +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; + padding:10px; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group .ui-datepicker-header { + margin:0; +} +.ui-datepicker-multi .ui-datepicker-group.ui-datepicker-group-last { + margin-right:0; +} + +.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, +.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; + font-size: 0; + width: 100px; +} +th.ui-datepicker-week-col { + color: #215b82; +} +td.ui-datepicker-week-col { + text-align:right; + padding-right:7px; + color: #215b82; +} +td.ui-datepicker-other-month a.ui-state-default { + font-weight: bold; +} +th.ui-datepicker-week-end { + color: #f44; +} + +/* 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, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + + +/** Dialog */ + +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: 4px; + outline: 0; + box-shadow: 0 0 10px #000; +} +.ui-dialog .ui-dialog-titlebar { + padding: 5px 10px; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: 0; + padding: 1px 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: 1em; + margin: 0 -4px; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + padding: 10px; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: 0 0 0 5px; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + + +/** Menu */ + +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + margin-top: -3px; + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + width: 100%; + /* support: IE10, see #8844 */ + list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); +} +.ui-menu .ui-menu-divider { + margin: 1px 10px 1px 10px; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; + border-color: #777; +} +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + padding: 5px 10px; + line-height: 1.5; + min-height: 0; /* support: IE7 */ + font-weight: normal; + border-radius:0; +} +.ui-menu .ui-menu-item a.ui-state-focus, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; + transition: none; +} +.ui-menu .ui-state-disabled { + font-weight: normal; + line-height: 1.5; +} +.ui-menu .ui-state-disabled a { + cursor: default; +} +.ui-menu.ui-corner-all.sh-menu { + border-radius: 4px; +} +.ui-menu.ui-corner-all, .ui-menu.sh-menu.ui-autocomplete.ui-corner-all { + border-radius: 0; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item a { + position: relative; + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: .2em; + left: .2em; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + position: static; + float: right; +} + + +/** Progress bar */ + +.ui-progressbar { + height: 2.1em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + height: 100%; + filter: alpha(opacity=25); + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} + + +/** Slider */ + +.ui-slider { + position: relative; + text-align: left; + margin: 0 13px; + border-radius:15px; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 18px; + height: 18px; + border-radius: 9px; + cursor: default; + box-shadow: 0 0 3px #aaa, inset 0 0 7px #fff, inset 0 0 3px #fff; +} +.ui-slider .ui-slider-handle.ui-state-active { + box-shadow: 0 0 3px #4685b3, inset 0 0 7px #fff, inset 0 0 3px #fff; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + display: block; + border: 0; + background-position: 0 0; +} + +/* For IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: 10px; +} +.ui-slider-horizontal .ui-slider-handle { + top: -5px; + margin-left: -9px; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: 10px; + height: 150px; +} +.ui-slider-vertical .ui-slider-handle { + left: -5px; + margin-left: 0; + margin-bottom: -9px; +} +.ui-slider-vertical .ui-slider-range { + left: -1px; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} + + +/** Spinner */ + +.ui-spinner.ui-widget { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; + background: #fff; + background: -webkit-linear-gradient(top, #f0f0f0, #fff); + background: -moz-linear-gradient(top, #f0f0f0, #fff); + background: -ms-linear-gradient(top, #f0f0f0, #fff); + background: -o-linear-gradient(top, #f0f0f0, #fff); + background: linear-gradient(to bottom, #f0f0f0, #fff); +} +.ui-spinner-input { + border: none; + color: inherit; + padding: 0; + margin: 6px 24px 6px 10px; + vertical-align: middle; + outline: 0; + background: transparent; +} +.ui-spinner-input { + color: #aaa} +.ui-spinner-input:focus { + color: #000; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to overide default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertical centre icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} + + +/** Tabs */ + +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: 3px 3px 0 3px; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px 3px 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: 6px 10px; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active a, +.ui-tabs .ui-tabs-nav li.ui-state-disabled a, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading a { + cursor: text; +} +.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em; + background: none; +} + +/** Tooltip */ + +body .ui-tooltip { + padding: 6px 10px; + position: absolute; + z-index: 9999; + max-width: 300px; + color: #808080; + border-color: #a5a5a5; + box-shadow: inset 0 0 4px #a5a5a5, 0 0 4px #a5a5a5; + background: -webkit-linear-gradient(top, #ddd, #fff); + background: -moz-linear-gradient(top, #ddd, #fff); + background: -ms-linear-gradient(top, #ddd, #fff); + background: -o-linear-gradient(top, #ddd, #fff); + background: linear-gradient(to bottom, #ddd, #fff); +} + +/** Icons */ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + width: 16px; + height: 16px; +} + +.ui-icon, +.ui-button.ui-state-active .ui-icon, +.ui-dialog .ui-dialog-titlebar-close .ui-icon { + background-image: url(img/ui-icons_white.png); +} + +.ui-button .ui-icon { + background-image: url(img/ui-icons_grey.png); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.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-on { background-position: -96px -144px; } +.ui-icon-radio-off { 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 */ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl, +.ui-menu .ui-menu-item.ui-menu-item-first a { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr, +.ui-menu .ui-menu-item.ui-menu-item-first a { + border-top-right-radius:4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl, +.ui-menu .ui-menu-item.ui-menu-item-last a, +.ui-dialog-buttonpane, +.ui-datepicker-multi .ui-datepicker-group-first .ui-datepicker-header, +.ui-datepicker .ui-datepicker-buttonpane { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br, +.ui-menu .ui-menu-item.ui-menu-item-last a, +.ui-dialog-buttonpane, +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker .ui-datepicker-buttonpane { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: rgba(255,255,255,.5); +} +.ui-widget-shadow { + margin: -7px 0 0 -7px; + padding: 7px; + background: rgba(0,0,0,.3); + border-radius: 8px; +} + +/* SunHater Fixes */ + +.ui-accordion-content-active, .ui-tabs, .ui-slider-range, .ui-datepicker, .ui-dialog { + border-color: #4d637c; +} + +.ui-slider .ui-slider-range { + border: 1px solid #4685b3; + top: -1px +} + +.ui-progressbar { + overflow:visible; +} +.ui-progressbar-value { + border: 1px solid #4685b3; + margin-top: -1px +} + +.ui-button { + box-shadow: inset 0 0 3px #555, inset 0 0 6px #555, 0 0 3px #000, 0 0 2px #000; +} +.ui-button.ui-state-active { + box-shadow: inset 0 0 3px #88b9da, 0 0 3px #000, 0 0 2px #000; +} +.ui-widget-header, +.ui-menu-item .ui-state-focus { + box-shadow: inset 0 0 3px #88b9da; +} + +.ui-state-default, +.ui-state-focus, +.ui-state-active, +.ui-widget-header, +fieldset.sh-uniform label, +fieldset.sh-uniform legend { + text-shadow: + 1px 0 rgba(0,0,0,.2), + -1px 0 rgba(0,0,0,.2), + 0 -1px rgba(0,0,0,.2), + 0 1px rgba(0,0,0,.2), + 1px 1px rgba(0,0,0,.2), + -1px -1px rgba(0,0,0,.2), + 1px -1px rgba(0,0,0,.2), + -1px 1px rgba(0,0,0,.2); +} + +.ui-tabs .ui-state-active, +.ui-datepicker .ui-state-highlight { + text-shadow: none; +} +.ui-datepicker .ui-state-highlight { + color: #215b82; + border-color: #4685b3; + box-shadow: inset 0 0 4px #4685b3; + background: #fff; + background: -webkit-linear-gradient(top, #dfeef8, #fff); + background: -moz-linear-gradient(top, #dfeef8, #fff); + background: -ms-linear-gradient(top, #dfeef8, #fff); + background: -o-linear-gradient(top, #dfeef8, #fff); + background: linear-gradient(to bottom, #dfeef8, #fff); +} + +.ui-progressbar, .ui-slider, .ui-menu { + box-shadow: inset 0 0 4px #666, 0 0 3px #000, 0 0 6px #000; + background: #000; + background: -webkit-linear-gradient(top, #111, #444); + background: -moz-linear-gradient(top, #111, #444); + background: -ms-linear-gradient(top, #111, #444); + background: -o-linear-gradient(top, #111, #444); + background: linear-gradient(to bottom, #111, #444); +} + +.ui-slider, .ui-spinner, .ui-progressbar, .ui-menu { + border-color: #555; +} + +.ui-datepicker-calendar .ui-state-default { + border-radius: 3px; +} + +.ui-tabs .ui-tabs-nav { + margin: -1px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + padding-left:3px; +} + +.ui-tabs-active.ui-state-active { + background: #fff; + background: -webkit-linear-gradient(top, #ccc, #ddd, #eee, #fff, #fff, #fff); + background: -moz-linear-gradient(top, #ccc, #ddd, #eee, #fff, #fff, #fff); + background: -ms-linear-gradient(top, #ccc, #ddd, #eee, #fff, #fff, #fff); + background: -o-linear-gradient(top, #ccc, #ddd, #eee, #fff, #fff, #fff); + background: linear-gradient(to bottom, #ccc, #ddd, #eee, #fff, #fff, #fff); + box-shadow: inset 0 0 5px #fff, inset 0 0 5px #fff, inset 0 0 5px #fff; +} +.ui-tabs-active.ui-state-active a { + color: #215b82; +} +.ui-state-default, .ui-state-default a { + outline: 0; +} +.ui-datepicker-header, +.ui-dialog-titlebar { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + margin: -5px -5px 0 -5px; +} +.ui-datepicker-header { + margin: -11px -11px 5px -11px; +} + +.ui-datepicker-header a:hover { + cursor: pointer; +} + +.ui-dialog-titlebar-close.ui-state-default { + border-color: transparent; + background: none; + box-shadow: none; +} + +.ui-dialog-titlebar-close.ui-state-default.ui-state-hover { + transition: .2s; + border: 1px solid #555; + background: #333; + background: -webkit-linear-gradient(top, #555, #111); + background: -moz-linear-gradient(top, #555, #111); + background: -ms-linear-gradient(top, #555, #111); + background: -o-linear-gradient(top, #555, #111); + background: linear-gradient(to bottom, #555, #111); + box-shadow: inset 0 0 3px #555, inset 0 0 6px #555, 0 0 3px #000, 0 0 2px #000; +} + +.ui-dialog-buttonpane { + background: #202D3E; + box-shadow: inset 0 0 3px #000, inset 0 0 2px #000; + border-top-color: #4d637c; + margin: 0 -4px -4px -4px; + padding: 0; +} + +/*** Uniform */ +/* Remove default webkit and possible mozilla .search styles. + * Keeping this as :active to remove browser styles */ +div.checker input, +input[type="search"], +input[type="search"]:active { + -moz-appearance: none; + -webkit-appearance: none; +} + +div.selector, +div.selector span, +div.checker span, +div.radio span, +div.uploader, +div.uploader +span.action, +div.button, +div.button span { + -webkit-font-smoothing: antialiased; +} + +div.selector, +div.checker, +div.button, +div.radio, +div.uploader { + display: -moz-inline-box; + display: inline-block; + zoom: 1; + vertical-align: middle; +} + +div.checker span, +div.checker input, +div.radio span, +div.radio input, +div.button span { + display: -moz-inline-box; + display: inline-block; + zoom: 1; + text-align: center; +} + +div.selector select, +div.checker input, +div.button button, +div.button input, +div.button a, +div.radio input, +div.uploader input, +input.uniform-input, +select.uniform-multiselect, +textarea.uniform { + outline: 0; +} + +div.selector, +div.selector *, +div.radio, +div.radio *, +div.checker, +div.checker *, +div.uploader, +div.uploader *, +div.button, +div.button * { + margin: 0; + padding: 0; +} + +/* Select */ +div.selector { + padding: 0 1.9em 0 0; + position: relative; + overflow: hidden; + border: 1px solid; + border-radius: 4px; +} +div.selector span { + text-overflow: ellipsis; + display: block; + overflow: hidden; + white-space: nowrap; + padding:6px 0 6px 10px; + cursor: pointer; + width: 100%; + border-right: 1px solid; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +div.selector .ui-icon { + background: url(img/ui-icons_grey.png) -65px -16px; +} +div.selector select { + opacity: 0; + filter: alpha(opacity=0); + border: 0; + background: none; + position: absolute; + height: 50px; + bottom: 0; + width: 100%; + cursor: pointer; +} + +/* Checkbox */ +div.checker { + position: relative; + border: 1px solid; + padding: 1px; + border-radius: 4px; +} +div.checker, +div.checker span, +div.checker input { + width: 15px; + height: 15px; +} +div.checker span.checked { + background: url(img/ui-icons_grey.png) -64px -145px; +} +div.checker input { + opacity: 0; + filter: alpha(opacity=0); + border: 0; + background: none; + cursor: pointer; +} + +/* Radio */ +div.radio { + position: relative; + border: 1px solid; + padding: 1px; + border-radius: 9px; +} +div.radio, +div.radio span, +div.radio input { + width: 15px; + height: 15px; +} +div.radio span.checked { + background: url(img/ui-icons_grey.png) -80px -145px; +} +div.radio input { + opacity: 0; + border: 0; + background: none; + cursor: pointer; +} + +/* Upload */ +div.uploader { + cursor: pointer; + position: relative; + overflow: hidden; + border-radius: 4px; +} +div.uploader span.action { + text-align: center; + float: left; + display: inline; + overflow: hidden; + cursor: pointer; + padding: 6px 10px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +div.uploader span.filename { + text-overflow: ellipsis; + display: block; + overflow: hidden; + white-space: nowrap; + float: left; + padding: 6px 10px; + border-right: 1px solid; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +div.uploader input { + opacity: 0; + filter: alpha(opacity=0); + border: 0; + background: none; + position: absolute; + top: 0; + right: 0; + float: right; + cursor: pointer; + font-size: 100px; +} +div.uploader input::-webkit-file-upload-button { + cursor: pointer; +} +div.uploader.active span.filename, +div.uploader.focus span.filename { + border-right: 1px solid; +} + +/* Button */ +div.button { + cursor: pointer; + position: relative; + overflow: hidden; + border: 1px solid; + border-radius: 4px; +} +div.button a, +div.button button, +div.button input { + opacity: 0; + filter: alpha(opacity=0); + display: block; + left: 0; + top: 0; + position: absolute; + margin: 0; + padding: 0; + font-size: 1000px; + cursor: pointer; +} +div.button span { + padding: 0; + margin: 6px 10px; +} + +/* Text fields */ +input.uniform-input, +select.uniform-multiselect, +textarea.uniform { + margin: 0; + border: 1px solid; + border-radius: 4px; +} +input.uniform-input, +textarea.uniform { + padding: 6px 10px; +} +textarea.uniform { + overflow: auto; +} +select.uniform-multiselect { + padding: 5px; +} + + +/** Colorize elements */ + +div.uploader { + border: 1px solid #aaa; +} +div.uploader.active, +div.uploader.focus { + border-color: #184977; +} + +/* Default - text fields */ +input.uniform-input, +select.uniform-multiselect, +textarea.uniform, +div.uploader span.filename, +div.selector span { + border-color: #666; + box-shadow: inset 0 0 4px #555; + background: #000; + background: -webkit-linear-gradient(top, #111, #333); + background: -moz-linear-gradient(top, #111, #333); + background: -ms-linear-gradient(top, #111, #333); + background: -o-linear-gradient(top, #111, #333); + background: linear-gradient(to bottom, #111, #333); + color: #aaa; +} + +select.uniform-multiselect option { + color: #aaa; +} + +select.uniform-multiselect.focus option { + color: #000; +} + +/* Focus - text fields */ +input.uniform-input.focus, +select.uniform-multiselect.focus, +textarea.uniform.focus, +div.uploader.active span.filename, +div.uploader.focus span.filename, +div.selector.active span, +div.selector.focus span { + border-color: #4d637c; + box-shadow: inset 0 0 4px #4d637c; + color: #fff; + background: #202D3E; + background: -webkit-linear-gradient(top, #131427, #273446); + background: -moz-linear-gradient(top, #131427, #273446); + background: -ms-linear-gradient(top, #131427, #273446); + background: -o-linear-gradient(top, #131427, #273446); + background: linear-gradient(to bottom, #131427, #273446); +} + +/* Read-only - text fields */ +input.uniform-input[readonly], +textarea.uniform[readonly], +input.uniform-input[readonly]:focus, +textarea.uniform[readonly]:focus { + color: #808080; + border-color: #a5a5a5; + box-shadow: inset 0 0 4px #a5a5a5; + background: -webkit-linear-gradient(top, #ddd, #fff); + background: -moz-linear-gradient(top, #ddd, #fff); + background: -ms-linear-gradient(top, #ddd, #fff); + background: -o-linear-gradient(top, #ddd, #fff); + background: linear-gradient(to bottom, #ddd, #fff); +} + +/* Default - buttons */ +div.selector, +div.button, +div.uploader span.action, +div.radio, +div.checker { + border-color: #555; + background: #333; + background: -webkit-linear-gradient(top, #555, #111); + background: -moz-linear-gradient(top, #555, #111); + background: -ms-linear-gradient(top, #555, #111); + background: -o-linear-gradient(top, #555, #111); + background: linear-gradient(to bottom, #555, #111); + box-shadow: inset 0 0 7px #555, inset 0 0 3px #555, 0 0 3px #000, 0 0 6px #000; +} + +/* Hover - buttons */ +div.selector.hover, +div.button.hover, +div.uploader.hover span.action, +div.radio.hover, +div.checker.hover { + background: #333; + background: -webkit-linear-gradient(top, #111, #555); + background: -moz-linear-gradient(top, #111, #555); + background: -ms-linear-gradient(top, #111, #555); + background: -o-linear-gradient(top, #111, #555); + background: linear-gradient(to bottom, #111, #555); +} + +/* Focus - buttons */ +div.selector.focus, +div.button.focus, +div.uploader.focus span.action, +div.radio.focus, +div.checker.focus { + color: #fff; + border-color: #4685b3; + background: #4685b3; + background: -webkit-linear-gradient(top, #4685b3, #184977); + background: -moz-linear-gradient(top, #4685b3, #184977); + background: -ms-linear-gradient(top, #4685b3, #184977); + background: -o-linear-gradient(top, #4685b3, #184977); + background: linear-gradient(to bottom, #4685b3, #184977); + box-shadow: inset 0 0 7px #4e9ed4, inset 0 0 3px #4e9ed4, 0 0 3px #000, 0 0 6px #000; +} + +/* Active - buttons */ +div.button.active, +div.button.active.hover, +div.button.focus.hover, +div.uploader.active span.action, +div.uploader.active.hover span.action, +div.uploader.focus.hover span.action, +div.radio.active, +div.radio.active.hover, +div.radio.focus.hover, +div.checker.active, +div.checker.active.hover, +div.checker.focus.hover, +div.selector.active, +div.selector.active.hover { + color: #fff; + border-color: #4685b3; + background: #184977; + background: -webkit-linear-gradient(top, #184977, #4685b3); + background: -moz-linear-gradient(top, #184977, #4685b3); + background: -ms-linear-gradient(top, #184977, #4685b3); + background: -o-linear-gradient(top, #184977, #4685b3); + background: linear-gradient(to bottom, #184977, #4685b3); + box-shadow: inset 0 0 7px #4e9ed4, inset 0 0 3px #4e9ed4, 0 0 3px #000, 0 0 6px #000; +} + +div.selector.focus .ui-icon, +div.checker.focus span.checked, +div.radio.focus span.checked, +div.selector.active .ui-icon, +div.checker.active span.checked, +div.radio.active span.checked { + background-image: url(img/ui-icons_white.png); +} + +/* Disabled */ +input.uniform-input[disabled], +select.uniform-multiselect[disabled], +textarea.uniform[disabled], +div.button.disabled, +div.uploader.disabled, +div.radio.disabled, +div.checker.disabled, +div.selector.disabled, +div.selector.disabled.active{ + opacity: .5; + filter: alpha(opacity=50); + cursor: default; +} + +div.selector.disabled select, +div.uploader.disabled input, +div.button.disabled input, +div.button.disabled button, +div.button.disabled a, +div.radio.disabled input, +div.checker.disabled input { + cursor: default; +} + +/* Buttons text */ +div.button span, +div.uploader span.action { + font-weight: bold; + color: #aaa; + text-shadow: + 1px 0 rgba(0,0,0,.2), + -1px 0 rgba(0,0,0,.2), + 0 -1px rgba(0,0,0,.2), + 0 1px rgba(0,0,0,.2), + 1px 1px rgba(0,0,0,.2), + -1px -1px rgba(0,0,0,.2), + 1px -1px rgba(0,0,0,.2), + -1px 1px rgba(0,0,0,.2); +} + +/* Placeholder colors */ +input.uniform-input::-webkit-input-placeholder, +textarea.uniform::-webkit-input-placeholder { + color: #ababab; +} +input.uniform-input:-moz-placeholder, +textarea.uniform::-moz-placeholder { + color: #aaa; +} +input.uniform-input::-moz-placeholder, +textarea.uniform::-moz-placeholder { + color: #aaa; +} +input.uniform-input:-ms-input-placeholder, +textarea.uniform:-ms-input-placeholder{ + color: #ababab; +} +input.uniform-input:focus::-webkit-input-placeholder, +textarea.uniform:focus::-webkit-input-placeholder{ + color: #184977; +} +input.uniform-input:focus:-moz-placeholder, +textarea.uniform:focus:-moz-placeholder { + color: #184977; +} +input.uniform-input:focus::-moz-placeholder, +textarea.uniform:focus::-moz-placeholder { + color: #184977; +} +input.uniform-input:focus:-ms-input-placeholder, +textarea.uniform:focus:-ms-input-placeholder { + color: #184977; +} + +/** sh-uniform elements (a shUniform patch must be applied) */ + +fieldset.sh-uniform { + color: #aaa; + border: 1px solid #425064; + border-radius: 4px; + background: #202d3e; + box-shadow: inset 0 0 3px #000, inset 0 0 6px #000, 0 0 3px #425064, 0 0 2px #425064; + margin: 0 10px 10px 0; + padding: 10px; +} +fieldset.sh-uniform legend { + font-weight: bold; + color: #aaa; +} +label.sh-uniform { + color: #aaa; +} + +/*** shCheckset */ + +.shcs { + margin: 0; +} +.shcs > div { + border: 1px solid; + border-top: 0; + padding: 5px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} +.shcs > input, .shcs > input:focus, .shcs > input:hover { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + margin:0; +} +.shcs label { + padding: 2px 5px 2px 2px; + border: 1px solid transparent; + border-radius: 4px; + color: #aaa; +} +.shcs > div, .shcs label:hover { + border-color: #aaa; + box-shadow: inset 0 0 4px #aaa; + background: #fff; + background: -webkit-linear-gradient(top, #f0f0f0, #fff); + background: -moz-linear-gradient(top, #f0f0f0, #fff); + background: -ms-linear-gradient(top, #f0f0f0, #fff); + background: -o-linear-gradient(top, #f0f0f0, #fff); + background: linear-gradient(to bottom, #f0f0f0, #fff); +} +.shcs label:hover { + color: #aaa; + cursor: pointer; +} +.shcs > div.focus, .shcs label.checked { + border-color: #184977; + box-shadow: inset 0 0 4px #4685b3; + color: #000; + background: #fff; + background: -webkit-linear-gradient(top, #dfeef8, #fff); + background: -moz-linear-gradient(top, #dfeef8, #fff); + background: -ms-linear-gradient(top, #dfeef8, #fff); + background: -o-linear-gradient(top, #dfeef8, #fff); + background: linear-gradient(to bottom, #dfeef8, #fff); +} +.shcs label.checked div.checker { + border-color: #4685b3; + background: #4685b3; + background: -webkit-linear-gradient(top, #4685b3, #184977); + background: -moz-linear-gradient(top, #4685b3, #184977); + background: -ms-linear-gradient(top, #4685b3, #184977); + background: -o-linear-gradient(top, #4685b3, #184977); + background: linear-gradient(to bottom, #4685b3, #184977); +} +.shcs label.checked div.checker.hover { + border-color: #4685b3; + background: #184977; + background: -webkit-linear-gradient(top, #184977, #4685b3); + background: -moz-linear-gradient(top, #184977, #4685b3); + background: -ms-linear-gradient(top, #184977, #4685b3); + background: -o-linear-gradient(top, #184977, #4685b3); + background: linear-gradient(to bottom, #184977, #4685b3); +} + +.shcs div.checker.focus { + border-color: #aaa; + background: #aaa; + background: -webkit-linear-gradient(top, #ababab, #aaa); + background: -moz-linear-gradient(top, #ababab, #aaa); + background: -ms-linear-gradient(top, #ababab, #aaa); + background: -o-linear-gradient(top, #ababab, #aaa); + background: linear-gradient(to bottom, #ababab, #aaa); + box-shadow: inset 0 0 7px #fff, inset 0 0 3px #fff; +} + +.shcs div.checker.focus.hover { + border-color: #aaa; + background: #aaa; + background: -webkit-linear-gradient(top, #aaa, #ababab); + background: -moz-linear-gradient(top, #aaa, #ababab); + background: -ms-linear-gradient(top, #aaa, #ababab); + background: -o-linear-gradient(top, #aaa, #ababab); + background: linear-gradient(to bottom, #aaa, #ababab); +} + +.shcs label > span { + position:relative; + margin-left:5px; + top:1px; +} \ No newline at end of file diff --git a/additions/kcfinder/themes/dark/02.misc.css b/additions/kcfinder/themes/dark/02.misc.css new file mode 100644 index 0000000..cb45671 --- /dev/null +++ b/additions/kcfinder/themes/dark/02.misc.css @@ -0,0 +1,418 @@ +* { + font-size: 13px; +} +body { + background: #000; + color: #aaa; +} +fieldset td { + white-space: nowrap; +} +#folders { + margin: 5px 5px 0 5px; +} +#files { + margin-right: 5px; +} + + +/* SHARED DECLARATIONS */ + +#toolbar a:hover, +#toolbar a.hover, +span.current, +span.regular:hover, +span.context, +#clipboard div:hover, +div.file:hover, +#files div.selected, +#files div.selected:hover, +tr.selected > td, +tr.selected:hover > td, +#menu .list div a:hover, +#toolbar a.selected { + color: #fff; + text-shadow: + 1px 0 rgba(0,0,0,.2), + -1px 0 rgba(0,0,0,.2), + 0 -1px rgba(0,0,0,.2), + 0 1px rgba(0,0,0,.2), + 1px 1px rgba(0,0,0,.2), + -1px -1px rgba(0,0,0,.2), + 1px -1px rgba(0,0,0,.2), + -1px 1px rgba(0,0,0,.2); +} +#files div { + text-shadow: + 1px 0 rgba(0,0,0,.2), + -1px 0 rgba(0,0,0,.2), + 0 -1px rgba(0,0,0,.2), + 0 1px rgba(0,0,0,.2), + 1px 1px rgba(0,0,0,.2), + -1px -1px rgba(0,0,0,.2), + 1px -1px rgba(0,0,0,.2), + -1px 1px rgba(0,0,0,.2); +} + +#files, +#folders, +#toolbar a.selected { + color: #aaa; + border: 1px solid #425064; + border-radius: 4px; + background: #202d3e; + box-shadow: inset 0 0 3px #000, inset 0 0 6px #000, 0 0 3px #425064, 0 0 2px #425064; +} + +/* TOOLBAR */ +#toolbar { + padding: 5px 0; +} +#toolbar a { + color: #949494; + margin-right: 5px; + border: 1px solid transparent; + outline: none; + display: block; + float: left; + border-radius: 4px; + transition: .3s; + padding:0; +} +#toolbar a > span { + padding: 6px 10px 6px 26px; + diaplay: block; + float:left; + background: no-repeat 6px center; +} +#toolbar a:hover, +#toolbar a.hover { + color: #fff; + border-color: #184977; + background: #4685b3; + background: -webkit-linear-gradient(top, #4685b3, #184977); + background: -moz-linear-gradient(top, #4685b3, #184977); + background: -ms-linear-gradient(top, #4685b3, #184977); + background: -o-linear-gradient(top, #4685b3, #184977); + background: linear-gradient(to bottom, #4685b3, #184977); + box-shadow: inset 0 0 3px #88b9da; + transition: .3s; +} +#toolbar a[href="kcact:upload"] span { + background-image: url(img/icons/upload.png); +} +#toolbar a[href="kcact:refresh"] span { + background-image: url(img/icons/refresh.png); +} +#toolbar a[href="kcact:settings"] span { + background-image: url(img/icons/settings.png); +} +#toolbar a[href="kcact:about"] span { + background-image: url(img/icons/about.png); +} +#toolbar a[href="kcact:maximize"] span { + background-image: url(img/icons/maximize.png); +} + + +/* SETTINGS BAR */ + +#settings label { + cursor: pointer; +} +#settings fieldset { + margin-right:5px; + margin-bottom: 6px; + margin-top:-5px; + padding:6px; +} + + +/* FOLDERS */ + +div.folder { + padding-top: 2px; + margin-top: 5px; + white-space: nowrap; +} +div.folder a { + text-decoration: none; + cursor: default; + outline: none; + color: #aaa; +} +span.folder { + padding: 2px 3px 2px 23px; + outline: none; + background: no-repeat 3px center; + cursor: pointer; + border-radius: 3px; + border: 1px solid transparent; +} +span.brace { + width: 16px; + height: 16px; + outline: none; +} +span.current { + transition: .3s; + background-image: url(img/tree/folder.png); + background-color: #306999; + border-color: #306999; + box-shadow: inset 0 0 7px #8FD6EA, inset 0 0 3px #8FD6EA, 0 0 2px #000, 0 0 1px #000; +} +span.regular { + transition: .3s; + background-image: url(img/tree/folder.png); + background-color: transparent; +} +span.regular:hover, span.context, #clipboard div:hover { + transition: .3s; + background-color: #333; + border-color: #777; + box-shadow: inset 0 0 7px #777, inset 0 0 3px #777, 0 0 2px #000, 0 0 1px #000; +} +span.opened { + background-image: url(img/tree/minus.png); +} +span.closed { + background-image: url(img/tree/plus.png); +} +span.denied { + background-image: url(img/tree/denied.png); +} + + +/* FILES */ + +div.file { + padding: 4px; + margin: 3px; + border: 1px solid transparent; + border-radius: 4px; +} +div.file:hover { + box-shadow: inset 0 0 7px #555, inset 0 0 3px #555, 0 0 3px #000, 0 0 6px #000; + background: #000; + background: -webkit-linear-gradient(top, #111, #555); + background: -moz-linear-gradient(top, #111, #555); + background: -ms-linear-gradient(top, #111, #555); + background: -o-linear-gradient(top, #111, #555); + background: linear-gradient(to bottom, #111, #555); + border-color: #555; +} +div.file .name { + margin-top: 4px; + font-weight: bold; + height: 16px; + overflow: hidden; + padding-bottom:2px; +} +div.file .time { + font-size: 10px; +} +div.file .size { + font-size: 10px; +} +#files div.selected, +#files div.selected:hover { + border-color: #4685b3; + background: #4685b3; + background: -webkit-linear-gradient(top, #4685b3, #184977); + background: -moz-linear-gradient(top, #4685b3, #184977); + background: -ms-linear-gradient(top, #4685b3, #184977); + background: -o-linear-gradient(top, #4685b3, #184977); + background: linear-gradient(to bottom, #4685b3, #184977); + box-shadow: inset 0 0 7px #4e9ed4, inset 0 0 3px #4e9ed4, 0 0 3px #000, 0 0 6px #000; +} +tr.file > td { + padding: 3px 4px; +} +tr.file:hover > td { + background-color: #000; + transition: none; +} +tr.selected > td, +tr.selected:hover > td { + transition: .3s; + background-color: #2d5277; +} +tr.file td.name { + background-position: 2px center; + padding-left: 22px; +} +a.denied { + color: #666; + opacity: 0.5; + filter: alpha(opacity:50); + cursor: default; +} +a.denied:hover { + background-color: #e4e3e2; + border-color: transparent; + box-shadow: none; +} + +/* FILE MENU */ + +#menu .ui-menu a span { + background: left center no-repeat; + padding-left: 20px; + white-space: nowrap; +} +#menu a[href="kcact:refresh"] span { + background-image: url(img/icons/refresh.png); +} +#menu a[href="kcact:mkdir"] span { + background-image: url(img/icons/folder-new.png); +} +#menu a[href="kcact:mvdir"] span, #menu a[href="kcact:mv"] span { + background-image: url(img/icons/rename.png); +} +#menu a[href="kcact:rmdir"] span, #menu a[href="kcact:rm"] span, #menu a[href="kcact:rmcbd"] span { + background-image: url(img/icons/delete.png); +} +#menu a[href="kcact:clpbrdadd"] span { + background-image: url(img/icons/clipboard-add.png); +} +#menu a[href="kcact:pick"] span, #menu a[href="kcact:pick_thumb"] span { + background-image: url(img/icons/select.png); +} +#menu a[href="kcact:download"] span { + background-image: url(img/icons/download.png); +} +#menu a[href="kcact:view"] span { + background-image: url(img/icons/view.png); +} +#menu a[href="kcact:cpcbd"] span { + background-image: url(img/icons/copy.png); +} +#menu a[href="kcact:mvcbd"] span { + background-image: url(img/icons/move.png); +} +#menu a[href="kcact:clrcbd"] span { + background-image: url(img/icons/clipboard-clear.png); +} + +/* CLIPBOARD */ + +#clipboard { + margin-left:-3px; + padding: 2px; +} +#clipboard div { + background: url(img/icons/clipboard.png) no-repeat center center; + border: 1px solid transparent; + padding: 2px; + cursor: pointer; + border-radius: 4px; +} +#clipboard.selected div, #clipboard.selected div:hover { + background-color: #306999; + border-color: #306999; + box-shadow: inset 0 0 7px #8FD6EA, inset 0 0 3px #8FD6EA; +} +#menu .list a, #menu .list a.ui-state-focus { + margin: -1px 0 0 -1px; + padding: 6px 10px; + border: 1px solid transparent; + background: none; + border-radius: 0; + text-shadow: none; + box-shadow: none; +} +#menu .list a.first, #menu .list a.first.ui-state-focus { + border-radius: 4px 4px 0 0; +} +#menu .list a:hover { + border-color: #4685b3; + background: #4685b3; + background: -webkit-linear-gradient(top, #184977, #4685b3); + background: -moz-linear-gradient(top, #184977, #4685b3); + background: -ms-linear-gradient(top, #184977, #4685b3); + background: -o-linear-gradient(top, #184977, #4685b3); + background: linear-gradient(to bottom, #184977, #4685b3); + box-shadow: inset 0 0 7px #4e9ed4, inset 0 0 3px #4e9ed4; +} +#menu .list { + overflow:hidden; + max-height: 1px; + margin-bottom: -1px; + padding-bottom:1px; +} +#menu li.div-files { + margin: 0 0 1px 0; +} + +/* ABOUT DIALOG */ + +.about { + text-align: center; +} +.about div.head { + font-weight: bold; + font-size: 12px; + padding: 3px 0 8px 0; +} +.about div.head a { + background: url(img/kcf_logo.png) no-repeat left center; + padding: 0 0 0 27px; + font-size: 17px; + outline: none; +} + +.about a { + text-decoration: none; + color: #3665b4; +} + +.about a:hover { + text-decoration: underline; +} +#checkver { + margin: 5px 0 10px 0; +} +#loading, #checkver > span.loading { + background: url(img/loading.gif); + border: 1px solid #425064; + box-shadow: inset 0 0 3px #000, inset 0 0 6px #000, 0 0 3px #425064, 0 0 2px #425064; + padding: 6px 10px; + border-radius: 4px; + color: #aaa; +} +#checkver a { + font-weight: normal; + padding: 3px 3px 3px 20px; + background: url(img/icons/download.png) no-repeat left center; +} + +/* IMAGE VIEWER */ + +.ui-dialog-content.kcfImageViewer { + background: #000; + cursor: pointer; +} +.kcfImageViewer .img { + background: url(img/bg_transparent.png); +} + +/* MISC */ + +#loading { + margin-right: 5px; +} +#loadingDirs { + padding: 5px 0 1px 24px; +} +#files.drag { + background: #ddebf8; +} +#resizer { + background: #fff; +} + +/* FIX FIELDSET BORDER RADIUS BUG ON IE */ +body.msie fieldset, +body.trident.rv fieldset { + border-radius: 0; +} \ No newline at end of file diff --git a/additions/kcfinder/themes/dark/README b/additions/kcfinder/themes/dark/README new file mode 100644 index 0000000..3d745ac --- /dev/null +++ b/additions/kcfinder/themes/dark/README @@ -0,0 +1,9 @@ +This folder contains files for designing default visual theme for KCFinder. +Some icons are taken from default KDE4 visual theme (http://www.kde.org) + +Theme Details: + +Version: 1.0 +Author: Pavel Tzonkov +Licenses: GPLv3 - http://opensource.org/licenses/GPL-3.0 + LGPLv3 - http://opensource.org/licenses/LGPL-3.0 diff --git a/additions/kcfinder/themes/dark/css.php b/additions/kcfinder/themes/dark/css.php new file mode 100644 index 0000000..569abc7 --- /dev/null +++ b/additions/kcfinder/themes/dark/css.php @@ -0,0 +1,12 @@ +minify("cache/theme_$theme.css"); + +?> \ No newline at end of file diff --git a/additions/kcfinder/themes/dark/img/bg_transparent.png b/additions/kcfinder/themes/dark/img/bg_transparent.png new file mode 100644 index 0000000..3200632 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/bg_transparent.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/..png b/additions/kcfinder/themes/dark/img/files/big/..png new file mode 100644 index 0000000..aaff484 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/..png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/.image.png b/additions/kcfinder/themes/dark/img/files/big/.image.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/.image.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/avi.png b/additions/kcfinder/themes/dark/img/files/big/avi.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/avi.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/bat.png b/additions/kcfinder/themes/dark/img/files/big/bat.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/bat.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/bmp.png b/additions/kcfinder/themes/dark/img/files/big/bmp.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/bmp.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/bz2.png b/additions/kcfinder/themes/dark/img/files/big/bz2.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/bz2.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/ccd.png b/additions/kcfinder/themes/dark/img/files/big/ccd.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/ccd.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/cgi.png b/additions/kcfinder/themes/dark/img/files/big/cgi.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/cgi.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/com.png b/additions/kcfinder/themes/dark/img/files/big/com.png new file mode 100644 index 0000000..427a328 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/com.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/csh.png b/additions/kcfinder/themes/dark/img/files/big/csh.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/csh.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/cue.png b/additions/kcfinder/themes/dark/img/files/big/cue.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/cue.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/deb.png b/additions/kcfinder/themes/dark/img/files/big/deb.png new file mode 100644 index 0000000..14ce82f Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/deb.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/dll.png b/additions/kcfinder/themes/dark/img/files/big/dll.png new file mode 100644 index 0000000..9e03a48 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/dll.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/doc.png b/additions/kcfinder/themes/dark/img/files/big/doc.png new file mode 100644 index 0000000..b544dcc Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/doc.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/docx.png b/additions/kcfinder/themes/dark/img/files/big/docx.png new file mode 100644 index 0000000..b544dcc Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/docx.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/exe.png b/additions/kcfinder/themes/dark/img/files/big/exe.png new file mode 100644 index 0000000..427a328 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/exe.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/fla.png b/additions/kcfinder/themes/dark/img/files/big/fla.png new file mode 100644 index 0000000..5e7c751 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/fla.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/flv.png b/additions/kcfinder/themes/dark/img/files/big/flv.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/flv.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/fon.png b/additions/kcfinder/themes/dark/img/files/big/fon.png new file mode 100644 index 0000000..3815dac Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/fon.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/gif.png b/additions/kcfinder/themes/dark/img/files/big/gif.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/gif.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/gz.png b/additions/kcfinder/themes/dark/img/files/big/gz.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/gz.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/htm.png b/additions/kcfinder/themes/dark/img/files/big/htm.png new file mode 100644 index 0000000..4995b6b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/htm.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/html.png b/additions/kcfinder/themes/dark/img/files/big/html.png new file mode 100644 index 0000000..4995b6b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/html.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/ini.png b/additions/kcfinder/themes/dark/img/files/big/ini.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/ini.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/iso.png b/additions/kcfinder/themes/dark/img/files/big/iso.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/iso.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/jar.png b/additions/kcfinder/themes/dark/img/files/big/jar.png new file mode 100644 index 0000000..cef54cd Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/jar.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/java.png b/additions/kcfinder/themes/dark/img/files/big/java.png new file mode 100644 index 0000000..351b5db Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/java.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/jpeg.png b/additions/kcfinder/themes/dark/img/files/big/jpeg.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/jpeg.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/jpg.png b/additions/kcfinder/themes/dark/img/files/big/jpg.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/jpg.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/js.png b/additions/kcfinder/themes/dark/img/files/big/js.png new file mode 100644 index 0000000..fcb1f8f Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/js.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/mds.png b/additions/kcfinder/themes/dark/img/files/big/mds.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/mds.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/mdx.png b/additions/kcfinder/themes/dark/img/files/big/mdx.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/mdx.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/mid.png b/additions/kcfinder/themes/dark/img/files/big/mid.png new file mode 100644 index 0000000..6187bc5 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/mid.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/midi.png b/additions/kcfinder/themes/dark/img/files/big/midi.png new file mode 100644 index 0000000..6187bc5 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/midi.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/mkv.png b/additions/kcfinder/themes/dark/img/files/big/mkv.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/mkv.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/mov.png b/additions/kcfinder/themes/dark/img/files/big/mov.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/mov.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/mp3.png b/additions/kcfinder/themes/dark/img/files/big/mp3.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/mp3.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/mp4.png b/additions/kcfinder/themes/dark/img/files/big/mp4.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/mp4.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/mpeg.png b/additions/kcfinder/themes/dark/img/files/big/mpeg.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/mpeg.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/mpg.png b/additions/kcfinder/themes/dark/img/files/big/mpg.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/mpg.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/nfo.png b/additions/kcfinder/themes/dark/img/files/big/nfo.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/nfo.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/nrg.png b/additions/kcfinder/themes/dark/img/files/big/nrg.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/nrg.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/ogg.png b/additions/kcfinder/themes/dark/img/files/big/ogg.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/ogg.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/pdf.png b/additions/kcfinder/themes/dark/img/files/big/pdf.png new file mode 100644 index 0000000..49cf5e3 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/pdf.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/php.png b/additions/kcfinder/themes/dark/img/files/big/php.png new file mode 100644 index 0000000..588bef8 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/php.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/phps.png b/additions/kcfinder/themes/dark/img/files/big/phps.png new file mode 100644 index 0000000..588bef8 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/phps.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/pl.png b/additions/kcfinder/themes/dark/img/files/big/pl.png new file mode 100644 index 0000000..d3468a5 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/pl.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/pm.png b/additions/kcfinder/themes/dark/img/files/big/pm.png new file mode 100644 index 0000000..d3468a5 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/pm.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/png.png b/additions/kcfinder/themes/dark/img/files/big/png.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/png.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/ppt.png b/additions/kcfinder/themes/dark/img/files/big/ppt.png new file mode 100644 index 0000000..ae13c8a Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/ppt.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/pptx.png b/additions/kcfinder/themes/dark/img/files/big/pptx.png new file mode 100644 index 0000000..ae13c8a Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/pptx.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/psd.png b/additions/kcfinder/themes/dark/img/files/big/psd.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/psd.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/qt.png b/additions/kcfinder/themes/dark/img/files/big/qt.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/qt.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/rar.png b/additions/kcfinder/themes/dark/img/files/big/rar.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/rar.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/rpm.png b/additions/kcfinder/themes/dark/img/files/big/rpm.png new file mode 100644 index 0000000..0708eef Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/rpm.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/rtf.png b/additions/kcfinder/themes/dark/img/files/big/rtf.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/rtf.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/sh.png b/additions/kcfinder/themes/dark/img/files/big/sh.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/sh.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/sql.png b/additions/kcfinder/themes/dark/img/files/big/sql.png new file mode 100644 index 0000000..754b3dc Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/sql.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/srt.png b/additions/kcfinder/themes/dark/img/files/big/srt.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/srt.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/sub.png b/additions/kcfinder/themes/dark/img/files/big/sub.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/sub.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/swf.png b/additions/kcfinder/themes/dark/img/files/big/swf.png new file mode 100644 index 0000000..45a8208 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/swf.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/tgz.png b/additions/kcfinder/themes/dark/img/files/big/tgz.png new file mode 100644 index 0000000..d7e7b5b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/tgz.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/tif.png b/additions/kcfinder/themes/dark/img/files/big/tif.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/tif.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/tiff.png b/additions/kcfinder/themes/dark/img/files/big/tiff.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/tiff.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/torrent.png b/additions/kcfinder/themes/dark/img/files/big/torrent.png new file mode 100644 index 0000000..0bffac4 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/torrent.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/ttf.png b/additions/kcfinder/themes/dark/img/files/big/ttf.png new file mode 100644 index 0000000..4f43e19 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/ttf.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/txt.png b/additions/kcfinder/themes/dark/img/files/big/txt.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/txt.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/wav.png b/additions/kcfinder/themes/dark/img/files/big/wav.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/wav.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/wma.png b/additions/kcfinder/themes/dark/img/files/big/wma.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/wma.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/xls.png b/additions/kcfinder/themes/dark/img/files/big/xls.png new file mode 100644 index 0000000..ddf069f Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/xls.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/xlsx.png b/additions/kcfinder/themes/dark/img/files/big/xlsx.png new file mode 100644 index 0000000..ddf069f Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/xlsx.png differ diff --git a/additions/kcfinder/themes/dark/img/files/big/zip.png b/additions/kcfinder/themes/dark/img/files/big/zip.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/big/zip.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/..png b/additions/kcfinder/themes/dark/img/files/small/..png new file mode 100644 index 0000000..67f4c5f Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/..png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/.image.png b/additions/kcfinder/themes/dark/img/files/small/.image.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/.image.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/avi.png b/additions/kcfinder/themes/dark/img/files/small/avi.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/avi.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/bat.png b/additions/kcfinder/themes/dark/img/files/small/bat.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/bat.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/bmp.png b/additions/kcfinder/themes/dark/img/files/small/bmp.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/bmp.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/bz2.png b/additions/kcfinder/themes/dark/img/files/small/bz2.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/bz2.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/ccd.png b/additions/kcfinder/themes/dark/img/files/small/ccd.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/ccd.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/cgi.png b/additions/kcfinder/themes/dark/img/files/small/cgi.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/cgi.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/com.png b/additions/kcfinder/themes/dark/img/files/small/com.png new file mode 100644 index 0000000..2246f30 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/com.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/csh.png b/additions/kcfinder/themes/dark/img/files/small/csh.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/csh.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/cue.png b/additions/kcfinder/themes/dark/img/files/small/cue.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/cue.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/deb.png b/additions/kcfinder/themes/dark/img/files/small/deb.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/deb.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/dll.png b/additions/kcfinder/themes/dark/img/files/small/dll.png new file mode 100644 index 0000000..b1a2f1c Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/dll.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/doc.png b/additions/kcfinder/themes/dark/img/files/small/doc.png new file mode 100644 index 0000000..069059d Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/doc.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/docx.png b/additions/kcfinder/themes/dark/img/files/small/docx.png new file mode 100644 index 0000000..069059d Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/docx.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/exe.png b/additions/kcfinder/themes/dark/img/files/small/exe.png new file mode 100644 index 0000000..2246f30 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/exe.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/fla.png b/additions/kcfinder/themes/dark/img/files/small/fla.png new file mode 100644 index 0000000..c50ec52 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/fla.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/flv.png b/additions/kcfinder/themes/dark/img/files/small/flv.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/flv.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/fon.png b/additions/kcfinder/themes/dark/img/files/small/fon.png new file mode 100644 index 0000000..2303efe Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/fon.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/gif.png b/additions/kcfinder/themes/dark/img/files/small/gif.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/gif.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/gz.png b/additions/kcfinder/themes/dark/img/files/small/gz.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/gz.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/htm.png b/additions/kcfinder/themes/dark/img/files/small/htm.png new file mode 100644 index 0000000..cc2f1bf Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/htm.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/html.png b/additions/kcfinder/themes/dark/img/files/small/html.png new file mode 100644 index 0000000..cc2f1bf Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/html.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/ini.png b/additions/kcfinder/themes/dark/img/files/small/ini.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/ini.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/iso.png b/additions/kcfinder/themes/dark/img/files/small/iso.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/iso.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/jar.png b/additions/kcfinder/themes/dark/img/files/small/jar.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/jar.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/java.png b/additions/kcfinder/themes/dark/img/files/small/java.png new file mode 100644 index 0000000..58fa8d0 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/java.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/jpeg.png b/additions/kcfinder/themes/dark/img/files/small/jpeg.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/jpeg.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/jpg.png b/additions/kcfinder/themes/dark/img/files/small/jpg.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/jpg.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/js.png b/additions/kcfinder/themes/dark/img/files/small/js.png new file mode 100644 index 0000000..db79975 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/js.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/mds.png b/additions/kcfinder/themes/dark/img/files/small/mds.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/mds.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/mdx.png b/additions/kcfinder/themes/dark/img/files/small/mdx.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/mdx.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/mid.png b/additions/kcfinder/themes/dark/img/files/small/mid.png new file mode 100644 index 0000000..e1ed4bd Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/mid.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/midi.png b/additions/kcfinder/themes/dark/img/files/small/midi.png new file mode 100644 index 0000000..e1ed4bd Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/midi.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/mkv.png b/additions/kcfinder/themes/dark/img/files/small/mkv.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/mkv.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/mov.png b/additions/kcfinder/themes/dark/img/files/small/mov.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/mov.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/mp3.png b/additions/kcfinder/themes/dark/img/files/small/mp3.png new file mode 100644 index 0000000..017b00d Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/mp3.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/mp4.png b/additions/kcfinder/themes/dark/img/files/small/mp4.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/mp4.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/mpeg.png b/additions/kcfinder/themes/dark/img/files/small/mpeg.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/mpeg.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/mpg.png b/additions/kcfinder/themes/dark/img/files/small/mpg.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/mpg.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/nfo.png b/additions/kcfinder/themes/dark/img/files/small/nfo.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/nfo.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/nrg.png b/additions/kcfinder/themes/dark/img/files/small/nrg.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/nrg.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/ogg.png b/additions/kcfinder/themes/dark/img/files/small/ogg.png new file mode 100644 index 0000000..017b00d Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/ogg.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/pdf.png b/additions/kcfinder/themes/dark/img/files/small/pdf.png new file mode 100644 index 0000000..9498f0f Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/pdf.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/php.png b/additions/kcfinder/themes/dark/img/files/small/php.png new file mode 100644 index 0000000..d73934b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/php.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/phps.png b/additions/kcfinder/themes/dark/img/files/small/phps.png new file mode 100644 index 0000000..d73934b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/phps.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/pl.png b/additions/kcfinder/themes/dark/img/files/small/pl.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/pl.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/pm.png b/additions/kcfinder/themes/dark/img/files/small/pm.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/pm.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/png.png b/additions/kcfinder/themes/dark/img/files/small/png.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/png.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/ppt.png b/additions/kcfinder/themes/dark/img/files/small/ppt.png new file mode 100644 index 0000000..bdccbb6 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/ppt.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/pptx.png b/additions/kcfinder/themes/dark/img/files/small/pptx.png new file mode 100644 index 0000000..bdccbb6 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/pptx.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/psd.png b/additions/kcfinder/themes/dark/img/files/small/psd.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/psd.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/qt.png b/additions/kcfinder/themes/dark/img/files/small/qt.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/qt.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/rar.png b/additions/kcfinder/themes/dark/img/files/small/rar.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/rar.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/rpm.png b/additions/kcfinder/themes/dark/img/files/small/rpm.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/rpm.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/rtf.png b/additions/kcfinder/themes/dark/img/files/small/rtf.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/rtf.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/sh.png b/additions/kcfinder/themes/dark/img/files/small/sh.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/sh.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/sql.png b/additions/kcfinder/themes/dark/img/files/small/sql.png new file mode 100644 index 0000000..5665b63 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/sql.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/srt.png b/additions/kcfinder/themes/dark/img/files/small/srt.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/srt.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/sub.png b/additions/kcfinder/themes/dark/img/files/small/sub.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/sub.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/swf.png b/additions/kcfinder/themes/dark/img/files/small/swf.png new file mode 100644 index 0000000..80e05a3 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/swf.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/tgz.png b/additions/kcfinder/themes/dark/img/files/small/tgz.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/tgz.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/tif.png b/additions/kcfinder/themes/dark/img/files/small/tif.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/tif.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/tiff.png b/additions/kcfinder/themes/dark/img/files/small/tiff.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/tiff.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/torrent.png b/additions/kcfinder/themes/dark/img/files/small/torrent.png new file mode 100644 index 0000000..55c04aa Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/torrent.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/ttf.png b/additions/kcfinder/themes/dark/img/files/small/ttf.png new file mode 100644 index 0000000..ed3e0f6 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/ttf.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/txt.png b/additions/kcfinder/themes/dark/img/files/small/txt.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/txt.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/wav.png b/additions/kcfinder/themes/dark/img/files/small/wav.png new file mode 100644 index 0000000..017b00d Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/wav.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/wma.png b/additions/kcfinder/themes/dark/img/files/small/wma.png new file mode 100644 index 0000000..017b00d Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/wma.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/xls.png b/additions/kcfinder/themes/dark/img/files/small/xls.png new file mode 100644 index 0000000..573d141 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/xls.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/xlsx.png b/additions/kcfinder/themes/dark/img/files/small/xlsx.png new file mode 100644 index 0000000..573d141 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/xlsx.png differ diff --git a/additions/kcfinder/themes/dark/img/files/small/zip.png b/additions/kcfinder/themes/dark/img/files/small/zip.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/files/small/zip.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/about.png b/additions/kcfinder/themes/dark/img/icons/about.png new file mode 100644 index 0000000..12cd1ae Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/about.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/clipboard-add.png b/additions/kcfinder/themes/dark/img/icons/clipboard-add.png new file mode 100644 index 0000000..d5eac9b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/clipboard-add.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/clipboard-clear.png b/additions/kcfinder/themes/dark/img/icons/clipboard-clear.png new file mode 100644 index 0000000..dcce0b6 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/clipboard-clear.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/clipboard.png b/additions/kcfinder/themes/dark/img/icons/clipboard.png new file mode 100644 index 0000000..779ad58 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/clipboard.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/copy.png b/additions/kcfinder/themes/dark/img/icons/copy.png new file mode 100644 index 0000000..a9f31a2 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/copy.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/delete.png b/additions/kcfinder/themes/dark/img/icons/delete.png new file mode 100644 index 0000000..1514d51 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/delete.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/download.png b/additions/kcfinder/themes/dark/img/icons/download.png new file mode 100644 index 0000000..260ac88 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/download.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/folder-new.png b/additions/kcfinder/themes/dark/img/icons/folder-new.png new file mode 100644 index 0000000..529fe8f Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/folder-new.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/maximize.png b/additions/kcfinder/themes/dark/img/icons/maximize.png new file mode 100644 index 0000000..d41fc7e Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/maximize.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/move.png b/additions/kcfinder/themes/dark/img/icons/move.png new file mode 100644 index 0000000..7e62a92 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/move.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/refresh.png b/additions/kcfinder/themes/dark/img/icons/refresh.png new file mode 100644 index 0000000..aa65210 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/refresh.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/rename.png b/additions/kcfinder/themes/dark/img/icons/rename.png new file mode 100644 index 0000000..4e3688e Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/rename.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/select.png b/additions/kcfinder/themes/dark/img/icons/select.png new file mode 100644 index 0000000..a9925a0 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/select.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/settings.png b/additions/kcfinder/themes/dark/img/icons/settings.png new file mode 100644 index 0000000..5c8213f Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/settings.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/upload.png b/additions/kcfinder/themes/dark/img/icons/upload.png new file mode 100644 index 0000000..f4b6d51 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/upload.png differ diff --git a/additions/kcfinder/themes/dark/img/icons/view.png b/additions/kcfinder/themes/dark/img/icons/view.png new file mode 100644 index 0000000..af4fe07 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/icons/view.png differ diff --git a/additions/kcfinder/themes/dark/img/kcf_logo.png b/additions/kcfinder/themes/dark/img/kcf_logo.png new file mode 100644 index 0000000..e829043 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/kcf_logo.png differ diff --git a/additions/kcfinder/themes/dark/img/loading.gif b/additions/kcfinder/themes/dark/img/loading.gif new file mode 100644 index 0000000..687e848 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/loading.gif differ diff --git a/additions/kcfinder/themes/dark/img/tree/denied.png b/additions/kcfinder/themes/dark/img/tree/denied.png new file mode 100644 index 0000000..07b93c1 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/tree/denied.png differ diff --git a/additions/kcfinder/themes/dark/img/tree/folder.png b/additions/kcfinder/themes/dark/img/tree/folder.png new file mode 100644 index 0000000..784e8fa Binary files /dev/null and b/additions/kcfinder/themes/dark/img/tree/folder.png differ diff --git a/additions/kcfinder/themes/dark/img/tree/minus.png b/additions/kcfinder/themes/dark/img/tree/minus.png new file mode 100644 index 0000000..af617bb Binary files /dev/null and b/additions/kcfinder/themes/dark/img/tree/minus.png differ diff --git a/additions/kcfinder/themes/dark/img/tree/plus.png b/additions/kcfinder/themes/dark/img/tree/plus.png new file mode 100644 index 0000000..897088b Binary files /dev/null and b/additions/kcfinder/themes/dark/img/tree/plus.png differ diff --git a/additions/kcfinder/themes/dark/img/ui-icons_black.png b/additions/kcfinder/themes/dark/img/ui-icons_black.png new file mode 100644 index 0000000..f07448d Binary files /dev/null and b/additions/kcfinder/themes/dark/img/ui-icons_black.png differ diff --git a/additions/kcfinder/themes/dark/img/ui-icons_grey.png b/additions/kcfinder/themes/dark/img/ui-icons_grey.png new file mode 100644 index 0000000..91c18a3 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/ui-icons_grey.png differ diff --git a/additions/kcfinder/themes/dark/img/ui-icons_white.png b/additions/kcfinder/themes/dark/img/ui-icons_white.png new file mode 100644 index 0000000..69ceaa4 Binary files /dev/null and b/additions/kcfinder/themes/dark/img/ui-icons_white.png differ diff --git a/additions/kcfinder/themes/dark/init.js b/additions/kcfinder/themes/dark/init.js new file mode 100644 index 0000000..35e2fbf --- /dev/null +++ b/additions/kcfinder/themes/dark/init.js @@ -0,0 +1 @@ +new Image().src = 'themes/dark/img/loading.gif'; // preload animated gif diff --git a/additions/kcfinder/themes/dark/js.php b/additions/kcfinder/themes/dark/js.php new file mode 100644 index 0000000..32245b6 --- /dev/null +++ b/additions/kcfinder/themes/dark/js.php @@ -0,0 +1,12 @@ +minify("cache/theme_$theme.js"); + +?> \ No newline at end of file diff --git a/additions/kcfinder/themes/default/01.ui.css b/additions/kcfinder/themes/default/01.ui.css new file mode 100644 index 0000000..49a7f30 --- /dev/null +++ b/additions/kcfinder/themes/default/01.ui.css @@ -0,0 +1,2016 @@ +/* + +This CSS code is generated from http://ui.sunhater.com +(c)2014 Pavel Tzonkov, sunhater.com. All rights reserved. + +*/ +/*** jQueryUI */ +/** Base */ + +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 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; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:alpha(opacity=0); +} + +.ui-front { + z-index: 100; +} + +.ui-widget .ui-widget, +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #888; + background: #fff; + color: #6B6B6B; +} +.ui-widget-content a { + color: #6B6B6B; +} +.ui-widget-header { + border: 1px solid #1b79b8; + color: #fff; + font-weight: bold; + background: #1b79b8; + background: -webkit-linear-gradient(top, #1b79b8, #59b5f2); + background: -moz-linear-gradient(top, #1b79b8, #59b5f2); + background: -ms-linear-gradient(top, #1b79b8, #59b5f2); + background: -o-linear-gradient(top, #1b79b8, #59b5f2); + background: linear-gradient(to bottom, #1b79b8, #59b5f2); +} +.ui-widget-header a { + color: #fff; +} + +/* Interaction states +----------------------------------*/ + +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-widget.ui-state-disabled { + transition: .2s; + border: 1px solid #6b6b6b; + background: #6b6b6b; + background: -webkit-linear-gradient(top, #ababab, #6b6b6b); + background: -moz-linear-gradient(top, #ababab, #6b6b6b); + background: -ms-linear-gradient(top, #ababab, #6b6b6b); + background: -o-linear-gradient(top, #ababab, #6b6b6b); + background: linear-gradient(to bottom, #ababab, #6b6b6b); + font-weight: bold; + color: #fff; +} + +.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 { + transition: .2s; + border: 1px solid #6b6b6b; + background: #6b6b6b; + background: -webkit-linear-gradient(top, #6b6b6b, #ababab); + background: -moz-linear-gradient(top, #6b6b6b, #ababab); + background: -ms-linear-gradient(top, #6b6b6b, #ababab); + background: -o-linear-gradient(top, #6b6b6b, #ababab); + background: linear-gradient(to bottom, #6b6b6b, #ababab); + font-weight: bold; + color: #fff; +} + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +.ui-menu .ui-state-focus { + transition: .2s; + border: 1px solid #1b79b8; + background: #1b79b8; + background: -webkit-linear-gradient(top, #1b79b8, #59b5f2); + background: -moz-linear-gradient(top, #1b79b8, #59b5f2); + background: -ms-linear-gradient(top, #1b79b8, #59b5f2); + background: -o-linear-gradient(top, #1b79b8, #59b5f2); + background: linear-gradient(to bottom, #1b79b8, #59b5f2); + font-weight: bold; + color: #fff; +} + +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + transition: .2s; + color: #fff; + text-decoration: none; +} + +.ui-menu .ui-state-active { + transition: .2s; + border-color: #6b6b6b; + background: #6b6b6b; + background: -webkit-linear-gradient(top, #6b6b6b, #ababab); + background: -moz-linear-gradient(top, #6b6b6b, #ababab); + background: -ms-linear-gradient(top, #6b6b6b, #ababab); + background: -o-linear-gradient(top, #6b6b6b, #ababab); + background: linear-gradient(to bottom, #6b6b6b, #ababab); +} + +/* Interaction Cues +----------------------------------*/ + +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #d5bc2c; + box-shadow: inset 0 0 5px #d5bc2c; + background: #fff6bf; + color: #6b6b6b; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cf7f7f; + box-shadow: inset 0 0 5px #cf7f7f; + background: #fac4c4; + color: #6b6b6b; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a, +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a, +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #6b6b6b; +} +.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: .5; + filter:alpha(opacity=50); + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .50; + filter:alpha(opacity=50); + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:alpha(opacity=50); /* For IE8 - See #6059 */ +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} + + +/** Accordion */ + +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin-top: 2px; + padding: 6px; + min-height: 0; /* support: IE7 */ +} +.ui-accordion .ui-accordion-icons, +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 24px; +} +.ui-accordion .ui-accordion-noicons { + padding-left: 5px; +} + +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: 5px; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em; + border-top: 0; + overflow: auto; +} + + +/** Autocomplete */ + +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: pointer; +} + + +/** Button */ + +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 36px; +} +.ui-button-icons-only { + width: 50px; +} +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: 6px 10px; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: 6px; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: 6px 10px 6px 28px; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: 6px 28px 6px 10px; +} +.ui-button-text-icons .ui-button-text { + padding-left: 28px; + padding-right: 28px; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: 6px 10px; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: 7px; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: 7px; +} +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} + + +/** Button set */ + +.ui-buttonset { + margin:0; + overflow:auto; +} +.ui-buttonset .ui-button { + margin: 0; + float:left; +} + + +/** Date picker */ + +.ui-datepicker { + width: 19em; + width: 19em; + display: none; + padding: 10px; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: 2px 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 4px; + width: 20px; + height: 20px; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 3px; +} +.ui-datepicker .ui-datepicker-prev { + left: 4px; +} +.ui-datepicker .ui-datepicker-next { + right: 4px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 3px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 3px; +} +.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 10px; + padding: 4px 0; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin:-2px 2px; + padding:0; + outline:0; +} +.ui-datepicker table { + width: 100%; + border-collapse: collapse; + margin: 0; + font-size: 1em; +} +.ui-datepicker th { + padding: 3px; + 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: 2px 3px; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: 10px -11px -11px -11px; + padding: 10px; + border: 1px solid #1b79b8; + background: #e4f5ff; + overflow: auto; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + cursor: pointer; + width: auto; + overflow: visible; + margin: 0; + padding: 6px 10px; + font-weight: bold; + opacity: 1; + filter: alpha(opacity=100); +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; + padding:10px; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group .ui-datepicker-header { + margin:0; +} +.ui-datepicker-multi .ui-datepicker-group.ui-datepicker-group-last { + margin-right:0; +} + +.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, +.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; + font-size: 0; + width: 100px; +} +th.ui-datepicker-week-col { + color: #215b82; +} +td.ui-datepicker-week-col { + text-align:right; + padding-right:7px; + color: #215b82; +} +td.ui-datepicker-other-month a.ui-state-default { + font-weight: bold; +} +th.ui-datepicker-week-end { + color: #f44; +} + +/* 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, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + + +/** Dialog */ + +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: 4px; + outline: 0; + box-shadow: 0 0 10px #000; +} +.ui-dialog .ui-dialog-titlebar { + padding: 5px 10px; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: 0; + padding: 1px 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: 1em; + margin: 0 -4px; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + padding: 10px; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: 0 0 0 5px; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + + +/** Menu */ + +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + margin-top: -3px; + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + width: 100%; + /* support: IE10, see #8844 */ + list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); +} +.ui-menu .ui-menu-divider { + margin: 1px 10px 1px 10px; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; + border-color: #bbb; +} +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + padding: 5px 10px; + line-height: 1.5; + min-height: 0; /* support: IE7 */ + font-weight: normal; + border-radius:0; +} +.ui-menu .ui-menu-item a.ui-state-focus, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; + transition: none; +} +.ui-menu .ui-state-disabled { + font-weight: normal; + line-height: 1.5; +} +.ui-menu .ui-state-disabled a { + cursor: default; +} +.ui-menu.ui-corner-all.sh-menu { + border-radius: 4px; +} +.ui-menu.ui-corner-all, .ui-menu.sh-menu.ui-autocomplete.ui-corner-all { + border-radius: 0; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item a { + position: relative; + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: .2em; + left: .2em; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + position: static; + float: right; +} + + +/** Progress bar */ + +.ui-progressbar { + height: 2.1em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + height: 100%; + filter: alpha(opacity=25); + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} + + +/** Slider */ + +.ui-slider { + position: relative; + text-align: left; + margin: 0 13px; + border-radius:15px; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 18px; + height: 18px; + border-radius: 9px; + cursor: default; + box-shadow: 0 0 3px #6b6b6b, inset 0 0 7px #fff, inset 0 0 3px #fff; +} +.ui-slider .ui-slider-handle.ui-state-active { + box-shadow: 0 0 3px #1b79b8, inset 0 0 7px #fff, inset 0 0 3px #fff; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + display: block; + border: 0; + background-position: 0 0; +} + +/* For IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: 10px; +} +.ui-slider-horizontal .ui-slider-handle { + top: -5px; + margin-left: -9px; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: 10px; + height: 150px; +} +.ui-slider-vertical .ui-slider-handle { + left: -5px; + margin-left: 0; + margin-bottom: -9px; +} +.ui-slider-vertical .ui-slider-range { + left: -1px; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} + + +/** Spinner */ + +.ui-spinner.ui-widget { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; + background: #fff; + background: -webkit-linear-gradient(top, #f0f0f0, #fff); + background: -moz-linear-gradient(top, #f0f0f0, #fff); + background: -ms-linear-gradient(top, #f0f0f0, #fff); + background: -o-linear-gradient(top, #f0f0f0, #fff); + background: linear-gradient(to bottom, #f0f0f0, #fff); +} +.ui-spinner-input { + border: none; + color: inherit; + padding: 0; + margin: 6px 24px 6px 10px; + vertical-align: middle; + outline: 0; + background: transparent; +} +.ui-spinner-input { + color: #6b6b6b} +.ui-spinner-input:focus { + color: #000; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to overide default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertical centre icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} + + +/** Tabs */ + +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: 3px 3px 0 3px; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px 3px 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: 6px 10px; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active a, +.ui-tabs .ui-tabs-nav li.ui-state-disabled a, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading a { + cursor: text; +} +.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em; + background: none; +} + +/** Tooltip */ + +body .ui-tooltip { + padding: 6px 10px; + position: absolute; + z-index: 9999; + max-width: 300px; + color: #808080; + border-color: #a5a5a5; + box-shadow: inset 0 0 4px #a5a5a5, 0 0 4px #a5a5a5; + background: -webkit-linear-gradient(top, #ddd, #fff); + background: -moz-linear-gradient(top, #ddd, #fff); + background: -ms-linear-gradient(top, #ddd, #fff); + background: -o-linear-gradient(top, #ddd, #fff); + background: linear-gradient(to bottom, #ddd, #fff); +} + +/** Icons */ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + width: 16px; + height: 16px; +} + +.ui-icon, +.ui-widget-content .ui-icon, +.ui-state-highlight .ui-icon, +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon, +.ui-icon.ui-icon-black { + background-image: url(img/ui-icons_black.png); +} + +.ui-widget-header .ui-icon, +.ui-state-default .ui-icon, +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-state-active .ui-icon, +.ui-icon.ui-icon-white { + background-image: url(img/ui-icons_white.png); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.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-on { background-position: -96px -144px; } +.ui-icon-radio-off { 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 */ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl, +.ui-menu .ui-menu-item.ui-menu-item-first a { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr, +.ui-menu .ui-menu-item.ui-menu-item-first a { + border-top-right-radius:4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl, +.ui-menu .ui-menu-item.ui-menu-item-last a, +.ui-dialog-buttonpane, +.ui-datepicker-multi .ui-datepicker-group-first .ui-datepicker-header, +.ui-datepicker .ui-datepicker-buttonpane { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br, +.ui-menu .ui-menu-item.ui-menu-item-last a, +.ui-dialog-buttonpane, +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker .ui-datepicker-buttonpane { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: rgba(255,255,255,.5); +} +.ui-widget-shadow { + margin: -7px 0 0 -7px; + padding: 7px; + background: rgba(0,0,0,.3); + border-radius: 8px; +} + +/* SunHater Fixes */ + +.ui-accordion-content-active, .ui-tabs, .ui-slider-range, .ui-datepicker, .ui-dialog { + border-color: #1b79b8; +} + +.ui-slider .ui-slider-range { + border: 1px solid #1b79b8; + top: -1px +} + +.ui-progressbar { + overflow:visible; +} +.ui-progressbar-value { + border: 1px solid #1b79b8; + margin-top: -1px +} + +.ui-accordion-header, +.ui-tabs-nav, +.ui-button, +.ui-tabs li, +.ui-slider-handle, +.ui-slider-range, +.ui-datepicker-header, +.ui-datepicker-header a:hover, +.ui-datepicker-calendar .ui-state-default, +.ui-progressbar-value, +.ui-menu .ui-menu-item a.ui-state-focus, +.ui-menu .ui-menu-item a.ui-state-active, +.ui-dialog-titlebar, +.ui-dialog-titlebar-close.ui-state-default.ui-state-hover, +.ui-datepicker .ui-datepicker-buttonpane button { + box-shadow: inset 0 0 7px #fff, inset 0 0 3px #fff; +} + +.ui-spinner, +.ui-menu { + box-shadow: inset 0 0 4px #6b6b6b; +} + +.ui-accordion-content, +.ui-tabs, +.ui-dialog-content, +.ui-dialog-buttonpane, +.ui-datepicker, +.ui-datepicker .ui-datepicker-buttonpane { + box-shadow: inset 0 0 4px #1b79b8; +} + +.ui-state-default, +.ui-state-focus, +.ui-state-active, +.ui-widget-header { + text-shadow: + 1px 0 rgba(0,0,0,.2), + -1px 0 rgba(0,0,0,.2), + 0 -1px rgba(0,0,0,.2), + 0 1px rgba(0,0,0,.2), + 1px 1px rgba(0,0,0,.2), + -1px -1px rgba(0,0,0,.2), + 1px -1px rgba(0,0,0,.2), + -1px 1px rgba(0,0,0,.2); +} + +.ui-tabs .ui-state-active, +.ui-datepicker .ui-state-highlight { + text-shadow: none; +} +.ui-datepicker .ui-state-highlight { + color: #215b82; + border-color: #1b79b8; + box-shadow: inset 0 0 4px #1b79b8; + background: #fff; + background: -webkit-linear-gradient(top, #dfeef8, #fff); + background: -moz-linear-gradient(top, #dfeef8, #fff); + background: -ms-linear-gradient(top, #dfeef8, #fff); + background: -o-linear-gradient(top, #dfeef8, #fff); + background: linear-gradient(to bottom, #dfeef8, #fff); +} + +.ui-progressbar, .ui-slider, .ui-menu { + box-shadow: inset 0 0 4px #6b6b6b; + background: #fff; + background: -webkit-linear-gradient(top, #f0f0f0, #fff); + background: -moz-linear-gradient(top, #f0f0f0, #fff); + background: -ms-linear-gradient(top, #f0f0f0, #fff); + background: -o-linear-gradient(top, #f0f0f0, #fff); + background: linear-gradient(to bottom, #f0f0f0, #fff); +} + +.ui-slider, .ui-spinner, .ui-progressbar, .ui-menu { + border-color: #6b6b6b; +} + +.ui-datepicker-calendar .ui-state-default { + border-radius: 3px; +} + +.ui-tabs .ui-tabs-nav { + margin: -1px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + padding-left:3px; +} + +.ui-tabs-active.ui-state-active { + background: #fff; + background: -webkit-linear-gradient(top, #ccc, #ddd, #eee, #fff, #fff, #fff); + background: -moz-linear-gradient(top, #ccc, #ddd, #eee, #fff, #fff, #fff); + background: -ms-linear-gradient(top, #ccc, #ddd, #eee, #fff, #fff, #fff); + background: -o-linear-gradient(top, #ccc, #ddd, #eee, #fff, #fff, #fff); + background: linear-gradient(to bottom, #ccc, #ddd, #eee, #fff, #fff, #fff); + box-shadow: inset 0 0 5px #fff, inset 0 0 5px #fff, inset 0 0 5px #fff; +} +.ui-tabs-active.ui-state-active a { + color: #215b82; +} +.ui-state-default, .ui-state-default a { + outline: 0; +} +.ui-datepicker-header, +.ui-dialog-titlebar { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + margin: -5px -5px 0 -5px; +} +.ui-datepicker-header { + margin: -11px -11px 5px -11px; +} + +.ui-datepicker-header a:hover { + cursor: pointer; +} + +.ui-dialog-titlebar-close.ui-state-default { + border-color: transparent; + background: none; + box-shadow: none; +} + +.ui-dialog-titlebar-close.ui-state-default.ui-state-hover { + border-color: #6b6b6b; + background: #6b6b6b} + +.ui-dialog-buttonpane { + background: #e4f5ff; + border-top-color: #1b79b8; + margin: 0 -4px -4px -4px; + padding: 0; +} + +/*** Uniform */ +/* Remove default webkit and possible mozilla .search styles. + * Keeping this as :active to remove browser styles */ +div.checker input, +input[type="search"], +input[type="search"]:active { + -moz-appearance: none; + -webkit-appearance: none; +} + +div.selector, +div.selector span, +div.checker span, +div.radio span, +div.uploader, +div.uploader +span.action, +div.button, +div.button span { + -webkit-font-smoothing: antialiased; +} + +div.selector, +div.checker, +div.button, +div.radio, +div.uploader { + display: -moz-inline-box; + display: inline-block; + zoom: 1; + vertical-align: middle; +} + +div.checker span, +div.checker input, +div.radio span, +div.radio input, +div.button span { + display: -moz-inline-box; + display: inline-block; + zoom: 1; + text-align: center; +} + +div.selector select, +div.checker input, +div.button button, +div.button input, +div.button a, +div.radio input, +div.uploader input, +input.uniform-input, +select.uniform-multiselect, +textarea.uniform { + outline: 0; +} + +div.selector, +div.selector *, +div.radio, +div.radio *, +div.checker, +div.checker *, +div.uploader, +div.uploader *, +div.button, +div.button * { + margin: 0; + padding: 0; +} + +/* Select */ +div.selector { + padding: 0 1.9em 0 0; + position: relative; + overflow: hidden; + border: 1px solid; + border-radius: 4px; +} +div.selector span { + text-overflow: ellipsis; + display: block; + overflow: hidden; + white-space: nowrap; + padding:6px 0 6px 10px; + cursor: pointer; + width: 100%; + border-right: 1px solid; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +div.selector .ui-icon { + background: url(img/ui-icons_white.png) -65px -16px; +} +div.selector select { + opacity: 0; + filter: alpha(opacity=0); + border: 0; + background: none; + position: absolute; + height: 50px; + bottom: 0; + width: 100%; + cursor: pointer; +} + +/* Checkbox */ +div.checker { + position: relative; + border: 1px solid; + padding: 1px; + border-radius: 4px; +} +div.checker, +div.checker span, +div.checker input { + width: 15px; + height: 15px; +} +div.checker span.checked { + background: url(img/ui-icons_white.png) -64px -145px; +} +div.checker input { + opacity: 0; + filter: alpha(opacity=0); + border: 0; + background: none; + cursor: pointer; +} + +/* Radio */ +div.radio { + position: relative; + border: 1px solid; + padding: 1px; + border-radius: 9px; +} +div.radio, +div.radio span, +div.radio input { + width: 15px; + height: 15px; +} +div.radio span.checked { + background: url(img/ui-icons_white.png) -80px -145px; +} +div.radio input { + opacity: 0; + border: 0; + background: none; + cursor: pointer; +} + +/* Upload */ +div.uploader { + cursor: pointer; + position: relative; + overflow: hidden; + border-radius: 4px; +} +div.uploader span.action { + text-align: center; + float: left; + display: inline; + overflow: hidden; + cursor: pointer; + padding: 6px 10px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +div.uploader span.filename { + text-overflow: ellipsis; + display: block; + overflow: hidden; + white-space: nowrap; + float: left; + padding: 6px 10px; + border-right: 1px solid; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +div.uploader input { + opacity: 0; + filter: alpha(opacity=0); + border: 0; + background: none; + position: absolute; + top: 0; + right: 0; + float: right; + cursor: pointer; + font-size: 100px; +} +div.uploader input::-webkit-file-upload-button { + cursor: pointer; +} +div.uploader.active span.filename, +div.uploader.focus span.filename { + border-right: 1px solid; +} + +/* Button */ +div.button { + cursor: pointer; + position: relative; + overflow: hidden; + border: 1px solid; + border-radius: 4px; +} +div.button a, +div.button button, +div.button input { + opacity: 0; + filter: alpha(opacity=0); + display: block; + left: 0; + top: 0; + position: absolute; + margin: 0; + padding: 0; + font-size: 1000px; + cursor: pointer; +} +div.button span { + padding: 0; + margin: 6px 10px; +} + +/* Text fields */ +input.uniform-input, +select.uniform-multiselect, +textarea.uniform { + margin: 0; + border: 1px solid; + border-radius: 4px; +} +input.uniform-input, +textarea.uniform { + padding: 6px 10px; +} +textarea.uniform { + overflow: auto; +} +select.uniform-multiselect { + padding: 5px; +} + + +/** Colorize elements */ + +div.uploader { + border: 1px solid #6b6b6b; +} +div.uploader.active, +div.uploader.focus { + border-color: #1b79b8; +} + +/* Default - text fields */ +input.uniform-input, +select.uniform-multiselect, +textarea.uniform, +div.uploader span.filename, +div.selector span { + border-color: #6b6b6b; + box-shadow: inset 0 0 4px #6b6b6b; + background: #fff; + background: -webkit-linear-gradient(top, #f0f0f0, #fff); + background: -moz-linear-gradient(top, #f0f0f0, #fff); + background: -ms-linear-gradient(top, #f0f0f0, #fff); + background: -o-linear-gradient(top, #f0f0f0, #fff); + background: linear-gradient(to bottom, #f0f0f0, #fff); + color: #6b6b6b; +} + +select.uniform-multiselect option { + color: #6b6b6b; +} + +select.uniform-multiselect.focus option { + color: #000; +} + +/* Focus - text fields */ +input.uniform-input.focus, +select.uniform-multiselect.focus, +textarea.uniform.focus, +div.uploader.active span.filename, +div.uploader.focus span.filename, +div.selector.active span, +div.selector.focus span { + border-color: #1b79b8; + box-shadow: inset 0 0 4px #1b79b8; + color: #000; + background: #fff; + background: -webkit-linear-gradient(top, #dfeef8, #fff); + background: -moz-linear-gradient(top, #dfeef8, #fff); + background: -ms-linear-gradient(top, #dfeef8, #fff); + background: -o-linear-gradient(top, #dfeef8, #fff); + background: linear-gradient(to bottom, #dfeef8, #fff); +} + +/* Read-only - text fields */ +input.uniform-input[readonly], +textarea.uniform[readonly], +input.uniform-input[readonly]:focus, +textarea.uniform[readonly]:focus { + color: #808080; + border-color: #a5a5a5; + box-shadow: inset 0 0 4px #a5a5a5; + background: -webkit-linear-gradient(top, #ddd, #fff); + background: -moz-linear-gradient(top, #ddd, #fff); + background: -ms-linear-gradient(top, #ddd, #fff); + background: -o-linear-gradient(top, #ddd, #fff); + background: linear-gradient(to bottom, #ddd, #fff); +} + +/* Default - buttons */ +div.selector, +div.button, +div.uploader span.action, +div.radio, +div.checker { + border-color: #6b6b6b; + background: #6b6b6b; + background: -webkit-linear-gradient(top, #ababab, #6b6b6b); + background: -moz-linear-gradient(top, #ababab, #6b6b6b); + background: -ms-linear-gradient(top, #ababab, #6b6b6b); + background: -o-linear-gradient(top, #ababab, #6b6b6b); + background: linear-gradient(to bottom, #ababab, #6b6b6b); + box-shadow: inset 0 0 7px #fff, inset 0 0 3px #fff; +} + +/* Hover - buttons */ +div.selector.hover, +div.button.hover, +div.uploader.hover span.action, +div.radio.hover, +div.checker.hover { + border-color: #6b6b6b; + background: #6b6b6b; + background: -webkit-linear-gradient(top, #6b6b6b, #ababab); + background: -moz-linear-gradient(top, #6b6b6b, #ababab); + background: -ms-linear-gradient(top, #6b6b6b, #ababab); + background: -o-linear-gradient(top, #6b6b6b, #ababab); + background: linear-gradient(to bottom, #6b6b6b, #ababab); +} + +/* Focus - buttons */ +div.selector.focus, +div.button.focus, +div.uploader.focus span.action, +div.radio.focus, +div.checker.focus { + border-color: #1b79b8; + background: #1b79b8; + background: -webkit-linear-gradient(top, #59b5f2, #1b79b8); + background: -moz-linear-gradient(top, #59b5f2, #1b79b8); + background: -ms-linear-gradient(top, #59b5f2, #1b79b8); + background: -o-linear-gradient(top, #59b5f2, #1b79b8); + background: linear-gradient(to bottom, #59b5f2, #1b79b8); +} + +/* Active - buttons */ +div.button.active, +div.button.active.hover, +div.button.focus.hover, +div.uploader.active span.action, +div.uploader.active.hover span.action, +div.uploader.focus.hover span.action, +div.radio.active, +div.radio.active.hover, +div.radio.focus.hover, +div.checker.active, +div.checker.active.hover, +div.checker.focus.hover, +div.selector.active, +div.selector.active.hover { + border-color: #1b79b8; + background: #1b79b8; + background: -webkit-linear-gradient(top, #1b79b8, #59b5f2); + background: -moz-linear-gradient(top, #1b79b8, #59b5f2); + background: -ms-linear-gradient(top, #1b79b8, #59b5f2); + background: -o-linear-gradient(top, #1b79b8, #59b5f2); + background: linear-gradient(to bottom, #1b79b8, #59b5f2); +} + +/* Disabled */ +input.uniform-input[disabled], +select.uniform-multiselect[disabled], +textarea.uniform[disabled], +div.button.disabled, +div.uploader.disabled, +div.radio.disabled, +div.checker.disabled, +div.selector.disabled, +div.selector.disabled.active{ + opacity: .5; + filter: alpha(opacity=50); + cursor: default; +} + +div.selector.disabled select, +div.uploader.disabled input, +div.button.disabled input, +div.button.disabled button, +div.button.disabled a, +div.radio.disabled input, +div.checker.disabled input { + cursor: default; +} + +/* Buttons text */ +div.button span, +div.uploader span.action { + font-weight: bold; + color: #fff; + text-shadow: + 1px 0 rgba(0,0,0,.2), + -1px 0 rgba(0,0,0,.2), + 0 -1px rgba(0,0,0,.2), + 0 1px rgba(0,0,0,.2), + 1px 1px rgba(0,0,0,.2), + -1px -1px rgba(0,0,0,.2), + 1px -1px rgba(0,0,0,.2), + -1px 1px rgba(0,0,0,.2); +} + +/* Placeholder colors */ +input.uniform-input::-webkit-input-placeholder, +textarea.uniform::-webkit-input-placeholder { + color: #ababab; +} +input.uniform-input:-moz-placeholder, +textarea.uniform::-moz-placeholder { + color: #6b6b6b; +} +input.uniform-input::-moz-placeholder, +textarea.uniform::-moz-placeholder { + color: #6b6b6b; +} +input.uniform-input:-ms-input-placeholder, +textarea.uniform:-ms-input-placeholder{ + color: #ababab; +} +input.uniform-input:focus::-webkit-input-placeholder, +textarea.uniform:focus::-webkit-input-placeholder{ + color: #59b5f2; +} +input.uniform-input:focus:-moz-placeholder, +textarea.uniform:focus:-moz-placeholder { + color: #1b79b8; +} +input.uniform-input:focus::-moz-placeholder, +textarea.uniform:focus::-moz-placeholder { + color: #1b79b8; +} +input.uniform-input:focus:-ms-input-placeholder, +textarea.uniform:focus:-ms-input-placeholder { + color: #59b5f2; +} + +/** sh-uniform elements (a shUniform patch must be applied) */ + +fieldset.sh-uniform { + border: 1px solid #6B6B6B; + box-shadow: inset 0 0 4px #6B6B6B; + border-radius: 4px; + background: #fff; + background: -webkit-linear-gradient(top, #f0f0f0, #fff); + background: -moz-linear-gradient(top, #f0f0f0, #fff); + background: -ms-linear-gradient(top, #f0f0f0, #fff); + background: -o-linear-gradient(top, #f0f0f0, #fff); + background: linear-gradient(to bottom, #f0f0f0, #fff); + margin: 0 10px 10px 0; + padding: 10px; +} +fieldset.sh-uniform legend { + font-weight: bold; + color: #6B6B6B; + text-shadow: + 1px 0 rgba(255,255,255,.5), + -1px 0 rgba(255,255,255,.5), + 0 -1px rgba(255,255,255,.5), + 0 1px rgba(255,255,255,.5), + 1px 1px rgba(255,255,255,.5), + -1px -1px rgba(255,255,255,.5), + 1px -1px rgba(255,255,255,.5), + -1px 1px rgba(255,255,255,.5), + 0 0 5px #fff; +} +label.sh-uniform { + color: #6b6b6b; +} + +/*** shCheckset */ + +.shcs { + margin: 0; +} +.shcs > div { + border: 1px solid; + border-top: 0; + padding: 5px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} +.shcs > input, .shcs > input:focus, .shcs > input:hover { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + margin:0; +} +.shcs label { + padding: 2px 5px 2px 2px; + border: 1px solid transparent; + border-radius: 4px; + color: #6b6b6b; +} +.shcs > div, .shcs label:hover { + border-color: #6b6b6b; + box-shadow: inset 0 0 4px #6b6b6b; + background: #fff; + background: -webkit-linear-gradient(top, #f0f0f0, #fff); + background: -moz-linear-gradient(top, #f0f0f0, #fff); + background: -ms-linear-gradient(top, #f0f0f0, #fff); + background: -o-linear-gradient(top, #f0f0f0, #fff); + background: linear-gradient(to bottom, #f0f0f0, #fff); +} +.shcs label:hover { + color: #6b6b6b; + cursor: pointer; +} +.shcs > div.focus, .shcs label.checked { + border-color: #1b79b8; + box-shadow: inset 0 0 4px #1b79b8; + color: #000; + background: #fff; + background: -webkit-linear-gradient(top, #dfeef8, #fff); + background: -moz-linear-gradient(top, #dfeef8, #fff); + background: -ms-linear-gradient(top, #dfeef8, #fff); + background: -o-linear-gradient(top, #dfeef8, #fff); + background: linear-gradient(to bottom, #dfeef8, #fff); +} +.shcs label.checked div.checker { + border-color: #1b79b8; + background: #1b79b8; + background: -webkit-linear-gradient(top, #59b5f2, #1b79b8); + background: -moz-linear-gradient(top, #59b5f2, #1b79b8); + background: -ms-linear-gradient(top, #59b5f2, #1b79b8); + background: -o-linear-gradient(top, #59b5f2, #1b79b8); + background: linear-gradient(to bottom, #59b5f2, #1b79b8); +} +.shcs label.checked div.checker.hover { + border-color: #1b79b8; + background: #1b79b8; + background: -webkit-linear-gradient(top, #1b79b8, #59b5f2); + background: -moz-linear-gradient(top, #1b79b8, #59b5f2); + background: -ms-linear-gradient(top, #1b79b8, #59b5f2); + background: -o-linear-gradient(top, #1b79b8, #59b5f2); + background: linear-gradient(to bottom, #1b79b8, #59b5f2); +} + +.shcs div.checker.focus { + border-color: #6b6b6b; + background: #6b6b6b; + background: -webkit-linear-gradient(top, #ababab, #6b6b6b); + background: -moz-linear-gradient(top, #ababab, #6b6b6b); + background: -ms-linear-gradient(top, #ababab, #6b6b6b); + background: -o-linear-gradient(top, #ababab, #6b6b6b); + background: linear-gradient(to bottom, #ababab, #6b6b6b); + box-shadow: inset 0 0 7px #fff, inset 0 0 3px #fff; +} + +.shcs div.checker.focus.hover { + border-color: #6b6b6b; + background: #6b6b6b; + background: -webkit-linear-gradient(top, #6b6b6b, #ababab); + background: -moz-linear-gradient(top, #6b6b6b, #ababab); + background: -ms-linear-gradient(top, #6b6b6b, #ababab); + background: -o-linear-gradient(top, #6b6b6b, #ababab); + background: linear-gradient(to bottom, #6b6b6b, #ababab); +} + +.shcs label > span { + position:relative; + margin-left:5px; + top:1px; +} \ No newline at end of file diff --git a/additions/kcfinder/themes/default/02.misc.css b/additions/kcfinder/themes/default/02.misc.css new file mode 100644 index 0000000..0535604 --- /dev/null +++ b/additions/kcfinder/themes/default/02.misc.css @@ -0,0 +1,425 @@ +* { + font-size: 13px; +} +body { + background: #e0e0e0; + color: #6B6B6B; +} +fieldset td { + white-space: nowrap; +} +#folders { + margin: 5px 5px 0 5px; +} +#files { + margin-right: 5px; +} + + +/* SHARED DECLARATIONS */ + +#toolbar a:hover, +#toolbar a.hover, +span.current, +span.regular:hover, +span.context, +#clipboard div:hover, +div.file:hover, +#files div.selected, +#files div.selected:hover, +tr.selected > td, +tr.selected:hover > td, +#menu .list div a:hover { + color: #fff; + text-shadow: + 1px 0 rgba(0,0,0,.2), + -1px 0 rgba(0,0,0,.2), + 0 -1px rgba(0,0,0,.2), + 0 1px rgba(0,0,0,.2), + 1px 1px rgba(0,0,0,.2), + -1px -1px rgba(0,0,0,.2), + 1px -1px rgba(0,0,0,.2), + -1px 1px rgba(0,0,0,.2); +} + +#files, +#folders, +#toolbar a.selected { + border: 1px solid #6B6B6B; + box-shadow: inset 0 0 4px #6B6B6B; + border-radius: 4px; + background: #fff; + background: -webkit-linear-gradient(top, #f0f0f0, #fff); + background: -moz-linear-gradient(top, #f0f0f0, #fff); + background: -ms-linear-gradient(top, #f0f0f0, #fff); + background: -o-linear-gradient(top, #f0f0f0, #fff); + background: linear-gradient(to bottom, #f0f0f0, #fff); +} + +/* TOOLBAR */ + +#toolbar { + padding: 5px 0; +} +#toolbar a { + color: #6b6b6b; + margin-right: 5px; + border: 1px solid transparent; + outline: none; + display: block; + float: left; + border-radius: 4px; + transition: .3s; + padding:0; + background: #E0E0E0; +} +#toolbar a > span { + padding: 6px 10px 6px 26px; + diaplay: block; + float:left; + background: no-repeat 6px center; +} +#toolbar a:hover, +#toolbar a.hover { + border-color: #1b79b8; + background: #1b79b8; + background: -webkit-linear-gradient(top, #59b5f2, #1b79b8); + background: -moz-linear-gradient(top, #59b5f2, #1b79b8); + background: -ms-linear-gradient(top, #59b5f2, #1b79b8); + background: -o-linear-gradient(top, #59b5f2, #1b79b8); + background: linear-gradient(to bottom, #59b5f2, #1b79b8); + box-shadow: inset 0 0 7px #fff, inset 0 0 3px #fff; +} +#toolbar a:hover, +#toolbar a.hover { + transition: .3s; +} +#toolbar a[href="kcact:upload"] span { + background-image: url(img/icons/upload.png); +} +#toolbar a[href="kcact:refresh"] span { + background-image: url(img/icons/refresh.png); +} +#toolbar a[href="kcact:settings"] span { + background-image: url(img/icons/settings.png); +} +#toolbar a[href="kcact:about"] span { + background-image: url(img/icons/about.png); +} +#toolbar a[href="kcact:maximize"] span { + background-image: url(img/icons/maximize.png); +} + + +/* SETTINGS BAR */ + +#settings label { + cursor: pointer; +} +#settings fieldset { + margin-right:5px; + margin-bottom: 6px; + margin-top:-5px; + padding:6px; +} +#settings fieldset:hover { + border-color: #1b79b8; + box-shadow: inset 0 0 4px #1b79b8; + background: #dfeef8; + background: -webkit-linear-gradient(top, #dfeef8, #fff); + background: -moz-linear-gradient(top, #dfeef8, #fff); + background: -ms-linear-gradient(top, #dfeef8, #fff); + background: -o-linear-gradient(top, #dfeef8, #fff); + background: linear-gradient(to bottom, #dfeef8, #fff); +} +#settings fieldset:hover legend, +#settings fieldset:hover label { + color: #215b82; +} + + +/* FOLDERS */ + +div.folder { + padding-top: 2px; + margin-top: 4px; + white-space: nowrap; +} +div.folder a { + text-decoration: none; + cursor: default; + outline: none; + color: #6b6b6b; +} +span.folder { + padding: 2px 3px 2px 23px; + outline: none; + background: no-repeat 3px center; + cursor: pointer; + border-radius: 3px; + border: 1px solid transparent; +} +span.brace { + width: 16px; + height: 16px; + outline: none; +} +span.current { + transition: .3s; + background-image: url(img/tree/folder.png); + background-color: #3b98d6; + border-color: #3b98d6; + box-shadow: inset 0 0 7px #fff, inset 0 0 3px #fff; +} +span.regular { + transition: .3s; + background-image: url(img/tree/folder.png); + background-color: transparent; +} +span.regular:hover, span.context, #clipboard div:hover { + transition: .3s; + background-color: #c6c6c6; + border-color: #c6c6c6; + box-shadow: inset 0 0 7px #fff, inset 0 0 3px #fff; +} +span.opened { + background-image: url(img/tree/minus.png); +} +span.closed { + background-image: url(img/tree/plus.png); +} +span.denied { + background-image: url(img/tree/denied.png); +} + + +/* FILES */ + +div.file { + padding: 4px; + margin: 3px; + border: 1px solid transparent; + border-radius: 4px; +} +div.file:hover { + border-color: #aaa; + box-shadow: inset 0 0 7px #fff, inset 0 0 3px #fff; + background: #c6c6c6; + background: -webkit-linear-gradient(top, #e7e7e7, #c6c6c6); + background: -moz-linear-gradient(top, #e7e7e7, #c6c6c6); + background: -ms-linear-gradient(top, #e7e7e7, #c6c6c6); + background: -o-linear-gradient(top, #e7e7e7, #c6c6c6); + background: linear-gradient(to bottom, #e7e7e7, #c6c6c6); +} +div.file .name { + margin-top: 4px; + font-weight: bold; + height: 16px; + overflow: hidden; + padding-bottom: 2px; +} +div.file .time { + font-size: 10px; +} +div.file .size { + font-size: 10px; +} +#files div.selected, +#files div.selected:hover { + border-color: #3b98d6; + background: #3b98d6; + background: -webkit-linear-gradient(top, #7dc2f2, #3b98d6); + background: -moz-linear-gradient(top, #7dc2f2, #3b98d6); + background: -ms-linear-gradient(top, #7dc2f2, #3b98d6); + background: -o-linear-gradient(top, #7dc2f2, #3b98d6); + background: linear-gradient(to bottom, #7dc2f2, #3b98d6); + box-shadow: inset 0 0 7px #fff, inset 0 0 3px #fff; +} +tr.file > td { + padding: 3px 4px; +} +tr.file:hover > td { + background-color: #ddebf8; + transition: none; +} +tr.selected > td, +tr.selected:hover > td { + transition: .3s; + background-color: #5b9bda; +} +tr.file td.name { + background-position: 2px center; + padding-left: 22px; +} +a.denied { + color: #666; + opacity: 0.5; + filter: alpha(opacity:50); + cursor: default; +} +a.denied:hover { + background-color: #e4e3e2; + border-color: transparent; + box-shadow: none; +} + +/* FILE MENU */ + +#menu .ui-menu a span { + background: left center no-repeat; + padding-left: 20px; + white-space: nowrap; +} +#menu a[href="kcact:refresh"] span { + background-image: url(img/icons/refresh.png); +} +#menu a[href="kcact:mkdir"] span { + background-image: url(img/icons/folder-new.png); +} +#menu a[href="kcact:mvdir"] span, #menu a[href="kcact:mv"] span { + background-image: url(img/icons/rename.png); +} +#menu a[href="kcact:rmdir"] span, #menu a[href="kcact:rm"] span, #menu a[href="kcact:rmcbd"] span { + background-image: url(img/icons/delete.png); +} +#menu a[href="kcact:clpbrdadd"] span { + background-image: url(img/icons/clipboard-add.png); +} +#menu a[href="kcact:pick"] span, #menu a[href="kcact:pick_thumb"] span { + background-image: url(img/icons/select.png); +} +#menu a[href="kcact:download"] span { + background-image: url(img/icons/download.png); +} +#menu a[href="kcact:view"] span { + background-image: url(img/icons/view.png); +} +#menu a[href="kcact:cpcbd"] span { + background-image: url(img/icons/copy.png); +} +#menu a[href="kcact:mvcbd"] span { + background-image: url(img/icons/move.png); +} +#menu a[href="kcact:clrcbd"] span { + background-image: url(img/icons/clipboard-clear.png); +} + +/* CLIPBOARD */ + +#clipboard { + margin-left:-3px; + padding: 2px; +} +#clipboard div { + background: url(img/icons/clipboard.png) no-repeat center center; + border: 1px solid transparent; + padding: 2px; + cursor: pointer; + border-radius: 4px; +} +#clipboard.selected div, #clipboard.selected div:hover { + background-color: #3b98d6; + border-color: #3b98d6; + box-shadow: inset 0 0 7px #fff, inset 0 0 3px #fff; +} +#menu .list a, #menu .list a.ui-state-focus { + margin: -1px 0 0 -1px; + padding: 6px 10px; + border: 1px solid transparent; + background: none; + border-radius: 0; + text-shadow: none; + box-shadow: none; + color: #6b6b6b; +} +#menu .list a.first, #menu .list a.first.ui-state-focus { + border-radius: 4px 4px 0 0; +} +#menu .list a:hover { + border-color: #1b79b8; + background: #1b79b8; + background: -webkit-linear-gradient(top, #1b79b8, #59b5f2); + background: -moz-linear-gradient(top, #1b79b8, #59b5f2); + background: -ms-linear-gradient(top, #1b79b8, #59b5f2); + background: -o-linear-gradient(top, #1b79b8, #59b5f2); + background: linear-gradient(to bottom, #1b79b8, #59b5f2); + box-shadow: inset 0 0 7px #fff, inset 0 0 3px #fff; +} +#menu .list { + overflow:hidden; + max-height: 1px; + margin-bottom: -1px; + padding-bottom:1px; +} +#menu li.div-files { + margin: 0 0 1px 0; +} + +/* ABOUT DIALOG */ + +.about { + text-align: center; +} +.about div.head { + font-weight: bold; + font-size: 12px; + padding: 3px 0 8px 0; +} +.about div.head a { + background: url(img/kcf_logo.png) no-repeat left center; + padding: 0 0 0 27px; + font-size: 17px; + outline: none; +} + +.about a { + text-decoration: none; + color: #0055ff; +} + +.about a:hover { + text-decoration: underline; +} +#checkver { + margin: 5px 0 10px 0; +} +#loading, #checkver > span.loading { + background: url(img/loading.gif); + border: 1px solid #3687e2; + box-shadow: 0 0 3px #3687e2, inset 0 0 4px #fff, inset 0 0 5px #fff; + padding: 6px 10px; + border-radius: 4px; +} +#checkver a { + font-weight: normal; + padding: 3px 3px 3px 20px; + background: url(img/icons/download.png) no-repeat left center; +} + +/* IMAGE VIEWER */ + +.ui-dialog-content.kcfImageViewer { + background: #000; + cursor: pointer; +} +.kcfImageViewer .img { + background: url(img/bg_transparent.png); +} + +/* MISC */ + +#loading { + margin-right: 5px; +} +#loadingDirs { + padding: 5px 0 1px 24px; +} +#files.drag { + background: #ddebf8; +} + +/* FIX FIELDSET BORDER RADIUS BUG ON IE */ +body.msie fieldset, +body.trident.rv fieldset { + border-radius: 0; +} \ No newline at end of file diff --git a/additions/kcfinder/themes/default/README b/additions/kcfinder/themes/default/README new file mode 100644 index 0000000..3d745ac --- /dev/null +++ b/additions/kcfinder/themes/default/README @@ -0,0 +1,9 @@ +This folder contains files for designing default visual theme for KCFinder. +Some icons are taken from default KDE4 visual theme (http://www.kde.org) + +Theme Details: + +Version: 1.0 +Author: Pavel Tzonkov +Licenses: GPLv3 - http://opensource.org/licenses/GPL-3.0 + LGPLv3 - http://opensource.org/licenses/LGPL-3.0 diff --git a/additions/kcfinder/themes/default/css.php b/additions/kcfinder/themes/default/css.php new file mode 100644 index 0000000..569abc7 --- /dev/null +++ b/additions/kcfinder/themes/default/css.php @@ -0,0 +1,12 @@ +minify("cache/theme_$theme.css"); + +?> \ No newline at end of file diff --git a/additions/kcfinder/themes/default/img/bg_transparent.png b/additions/kcfinder/themes/default/img/bg_transparent.png new file mode 100644 index 0000000..3200632 Binary files /dev/null and b/additions/kcfinder/themes/default/img/bg_transparent.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/..png b/additions/kcfinder/themes/default/img/files/big/..png new file mode 100644 index 0000000..aaff484 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/..png differ diff --git a/additions/kcfinder/themes/default/img/files/big/.image.png b/additions/kcfinder/themes/default/img/files/big/.image.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/.image.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/avi.png b/additions/kcfinder/themes/default/img/files/big/avi.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/avi.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/bat.png b/additions/kcfinder/themes/default/img/files/big/bat.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/bat.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/bmp.png b/additions/kcfinder/themes/default/img/files/big/bmp.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/bmp.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/bz2.png b/additions/kcfinder/themes/default/img/files/big/bz2.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/bz2.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/ccd.png b/additions/kcfinder/themes/default/img/files/big/ccd.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/ccd.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/cgi.png b/additions/kcfinder/themes/default/img/files/big/cgi.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/cgi.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/com.png b/additions/kcfinder/themes/default/img/files/big/com.png new file mode 100644 index 0000000..427a328 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/com.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/csh.png b/additions/kcfinder/themes/default/img/files/big/csh.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/csh.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/cue.png b/additions/kcfinder/themes/default/img/files/big/cue.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/cue.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/deb.png b/additions/kcfinder/themes/default/img/files/big/deb.png new file mode 100644 index 0000000..14ce82f Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/deb.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/dll.png b/additions/kcfinder/themes/default/img/files/big/dll.png new file mode 100644 index 0000000..9e03a48 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/dll.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/doc.png b/additions/kcfinder/themes/default/img/files/big/doc.png new file mode 100644 index 0000000..b544dcc Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/doc.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/docx.png b/additions/kcfinder/themes/default/img/files/big/docx.png new file mode 100644 index 0000000..b544dcc Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/docx.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/exe.png b/additions/kcfinder/themes/default/img/files/big/exe.png new file mode 100644 index 0000000..427a328 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/exe.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/fla.png b/additions/kcfinder/themes/default/img/files/big/fla.png new file mode 100644 index 0000000..5e7c751 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/fla.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/flv.png b/additions/kcfinder/themes/default/img/files/big/flv.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/flv.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/fon.png b/additions/kcfinder/themes/default/img/files/big/fon.png new file mode 100644 index 0000000..3815dac Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/fon.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/gif.png b/additions/kcfinder/themes/default/img/files/big/gif.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/gif.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/gz.png b/additions/kcfinder/themes/default/img/files/big/gz.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/gz.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/htm.png b/additions/kcfinder/themes/default/img/files/big/htm.png new file mode 100644 index 0000000..4995b6b Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/htm.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/html.png b/additions/kcfinder/themes/default/img/files/big/html.png new file mode 100644 index 0000000..4995b6b Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/html.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/ini.png b/additions/kcfinder/themes/default/img/files/big/ini.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/ini.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/iso.png b/additions/kcfinder/themes/default/img/files/big/iso.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/iso.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/jar.png b/additions/kcfinder/themes/default/img/files/big/jar.png new file mode 100644 index 0000000..cef54cd Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/jar.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/java.png b/additions/kcfinder/themes/default/img/files/big/java.png new file mode 100644 index 0000000..351b5db Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/java.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/jpeg.png b/additions/kcfinder/themes/default/img/files/big/jpeg.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/jpeg.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/jpg.png b/additions/kcfinder/themes/default/img/files/big/jpg.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/jpg.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/js.png b/additions/kcfinder/themes/default/img/files/big/js.png new file mode 100644 index 0000000..fcb1f8f Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/js.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/mds.png b/additions/kcfinder/themes/default/img/files/big/mds.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/mds.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/mdx.png b/additions/kcfinder/themes/default/img/files/big/mdx.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/mdx.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/mid.png b/additions/kcfinder/themes/default/img/files/big/mid.png new file mode 100644 index 0000000..6187bc5 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/mid.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/midi.png b/additions/kcfinder/themes/default/img/files/big/midi.png new file mode 100644 index 0000000..6187bc5 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/midi.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/mkv.png b/additions/kcfinder/themes/default/img/files/big/mkv.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/mkv.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/mov.png b/additions/kcfinder/themes/default/img/files/big/mov.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/mov.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/mp3.png b/additions/kcfinder/themes/default/img/files/big/mp3.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/mp3.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/mp4.png b/additions/kcfinder/themes/default/img/files/big/mp4.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/mp4.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/mpeg.png b/additions/kcfinder/themes/default/img/files/big/mpeg.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/mpeg.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/mpg.png b/additions/kcfinder/themes/default/img/files/big/mpg.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/mpg.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/nfo.png b/additions/kcfinder/themes/default/img/files/big/nfo.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/nfo.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/nrg.png b/additions/kcfinder/themes/default/img/files/big/nrg.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/nrg.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/ogg.png b/additions/kcfinder/themes/default/img/files/big/ogg.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/ogg.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/pdf.png b/additions/kcfinder/themes/default/img/files/big/pdf.png new file mode 100644 index 0000000..49cf5e3 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/pdf.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/php.png b/additions/kcfinder/themes/default/img/files/big/php.png new file mode 100644 index 0000000..588bef8 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/php.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/phps.png b/additions/kcfinder/themes/default/img/files/big/phps.png new file mode 100644 index 0000000..588bef8 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/phps.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/pl.png b/additions/kcfinder/themes/default/img/files/big/pl.png new file mode 100644 index 0000000..d3468a5 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/pl.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/pm.png b/additions/kcfinder/themes/default/img/files/big/pm.png new file mode 100644 index 0000000..d3468a5 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/pm.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/png.png b/additions/kcfinder/themes/default/img/files/big/png.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/png.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/ppt.png b/additions/kcfinder/themes/default/img/files/big/ppt.png new file mode 100644 index 0000000..ae13c8a Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/ppt.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/pptx.png b/additions/kcfinder/themes/default/img/files/big/pptx.png new file mode 100644 index 0000000..ae13c8a Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/pptx.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/psd.png b/additions/kcfinder/themes/default/img/files/big/psd.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/psd.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/qt.png b/additions/kcfinder/themes/default/img/files/big/qt.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/qt.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/rar.png b/additions/kcfinder/themes/default/img/files/big/rar.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/rar.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/rpm.png b/additions/kcfinder/themes/default/img/files/big/rpm.png new file mode 100644 index 0000000..0708eef Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/rpm.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/rtf.png b/additions/kcfinder/themes/default/img/files/big/rtf.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/rtf.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/sh.png b/additions/kcfinder/themes/default/img/files/big/sh.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/sh.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/sql.png b/additions/kcfinder/themes/default/img/files/big/sql.png new file mode 100644 index 0000000..754b3dc Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/sql.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/srt.png b/additions/kcfinder/themes/default/img/files/big/srt.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/srt.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/sub.png b/additions/kcfinder/themes/default/img/files/big/sub.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/sub.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/swf.png b/additions/kcfinder/themes/default/img/files/big/swf.png new file mode 100644 index 0000000..45a8208 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/swf.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/tgz.png b/additions/kcfinder/themes/default/img/files/big/tgz.png new file mode 100644 index 0000000..d7e7b5b Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/tgz.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/tif.png b/additions/kcfinder/themes/default/img/files/big/tif.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/tif.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/tiff.png b/additions/kcfinder/themes/default/img/files/big/tiff.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/tiff.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/torrent.png b/additions/kcfinder/themes/default/img/files/big/torrent.png new file mode 100644 index 0000000..0bffac4 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/torrent.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/ttf.png b/additions/kcfinder/themes/default/img/files/big/ttf.png new file mode 100644 index 0000000..4f43e19 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/ttf.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/txt.png b/additions/kcfinder/themes/default/img/files/big/txt.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/txt.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/wav.png b/additions/kcfinder/themes/default/img/files/big/wav.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/wav.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/wma.png b/additions/kcfinder/themes/default/img/files/big/wma.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/wma.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/xls.png b/additions/kcfinder/themes/default/img/files/big/xls.png new file mode 100644 index 0000000..ddf069f Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/xls.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/xlsx.png b/additions/kcfinder/themes/default/img/files/big/xlsx.png new file mode 100644 index 0000000..ddf069f Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/xlsx.png differ diff --git a/additions/kcfinder/themes/default/img/files/big/zip.png b/additions/kcfinder/themes/default/img/files/big/zip.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/big/zip.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/..png b/additions/kcfinder/themes/default/img/files/small/..png new file mode 100644 index 0000000..67f4c5f Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/..png differ diff --git a/additions/kcfinder/themes/default/img/files/small/.image.png b/additions/kcfinder/themes/default/img/files/small/.image.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/.image.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/avi.png b/additions/kcfinder/themes/default/img/files/small/avi.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/avi.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/bat.png b/additions/kcfinder/themes/default/img/files/small/bat.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/bat.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/bmp.png b/additions/kcfinder/themes/default/img/files/small/bmp.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/bmp.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/bz2.png b/additions/kcfinder/themes/default/img/files/small/bz2.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/bz2.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/ccd.png b/additions/kcfinder/themes/default/img/files/small/ccd.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/ccd.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/cgi.png b/additions/kcfinder/themes/default/img/files/small/cgi.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/cgi.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/com.png b/additions/kcfinder/themes/default/img/files/small/com.png new file mode 100644 index 0000000..2246f30 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/com.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/csh.png b/additions/kcfinder/themes/default/img/files/small/csh.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/csh.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/cue.png b/additions/kcfinder/themes/default/img/files/small/cue.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/cue.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/deb.png b/additions/kcfinder/themes/default/img/files/small/deb.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/deb.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/dll.png b/additions/kcfinder/themes/default/img/files/small/dll.png new file mode 100644 index 0000000..b1a2f1c Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/dll.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/doc.png b/additions/kcfinder/themes/default/img/files/small/doc.png new file mode 100644 index 0000000..069059d Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/doc.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/docx.png b/additions/kcfinder/themes/default/img/files/small/docx.png new file mode 100644 index 0000000..069059d Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/docx.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/exe.png b/additions/kcfinder/themes/default/img/files/small/exe.png new file mode 100644 index 0000000..2246f30 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/exe.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/fla.png b/additions/kcfinder/themes/default/img/files/small/fla.png new file mode 100644 index 0000000..c50ec52 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/fla.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/flv.png b/additions/kcfinder/themes/default/img/files/small/flv.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/flv.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/fon.png b/additions/kcfinder/themes/default/img/files/small/fon.png new file mode 100644 index 0000000..2303efe Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/fon.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/gif.png b/additions/kcfinder/themes/default/img/files/small/gif.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/gif.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/gz.png b/additions/kcfinder/themes/default/img/files/small/gz.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/gz.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/htm.png b/additions/kcfinder/themes/default/img/files/small/htm.png new file mode 100644 index 0000000..cc2f1bf Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/htm.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/html.png b/additions/kcfinder/themes/default/img/files/small/html.png new file mode 100644 index 0000000..cc2f1bf Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/html.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/ini.png b/additions/kcfinder/themes/default/img/files/small/ini.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/ini.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/iso.png b/additions/kcfinder/themes/default/img/files/small/iso.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/iso.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/jar.png b/additions/kcfinder/themes/default/img/files/small/jar.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/jar.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/java.png b/additions/kcfinder/themes/default/img/files/small/java.png new file mode 100644 index 0000000..58fa8d0 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/java.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/jpeg.png b/additions/kcfinder/themes/default/img/files/small/jpeg.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/jpeg.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/jpg.png b/additions/kcfinder/themes/default/img/files/small/jpg.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/jpg.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/js.png b/additions/kcfinder/themes/default/img/files/small/js.png new file mode 100644 index 0000000..db79975 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/js.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/mds.png b/additions/kcfinder/themes/default/img/files/small/mds.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/mds.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/mdx.png b/additions/kcfinder/themes/default/img/files/small/mdx.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/mdx.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/mid.png b/additions/kcfinder/themes/default/img/files/small/mid.png new file mode 100644 index 0000000..e1ed4bd Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/mid.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/midi.png b/additions/kcfinder/themes/default/img/files/small/midi.png new file mode 100644 index 0000000..e1ed4bd Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/midi.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/mkv.png b/additions/kcfinder/themes/default/img/files/small/mkv.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/mkv.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/mov.png b/additions/kcfinder/themes/default/img/files/small/mov.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/mov.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/mp3.png b/additions/kcfinder/themes/default/img/files/small/mp3.png new file mode 100644 index 0000000..017b00d Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/mp3.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/mp4.png b/additions/kcfinder/themes/default/img/files/small/mp4.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/mp4.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/mpeg.png b/additions/kcfinder/themes/default/img/files/small/mpeg.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/mpeg.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/mpg.png b/additions/kcfinder/themes/default/img/files/small/mpg.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/mpg.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/nfo.png b/additions/kcfinder/themes/default/img/files/small/nfo.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/nfo.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/nrg.png b/additions/kcfinder/themes/default/img/files/small/nrg.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/nrg.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/ogg.png b/additions/kcfinder/themes/default/img/files/small/ogg.png new file mode 100644 index 0000000..017b00d Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/ogg.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/pdf.png b/additions/kcfinder/themes/default/img/files/small/pdf.png new file mode 100644 index 0000000..9498f0f Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/pdf.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/php.png b/additions/kcfinder/themes/default/img/files/small/php.png new file mode 100644 index 0000000..d73934b Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/php.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/phps.png b/additions/kcfinder/themes/default/img/files/small/phps.png new file mode 100644 index 0000000..d73934b Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/phps.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/pl.png b/additions/kcfinder/themes/default/img/files/small/pl.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/pl.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/pm.png b/additions/kcfinder/themes/default/img/files/small/pm.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/pm.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/png.png b/additions/kcfinder/themes/default/img/files/small/png.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/png.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/ppt.png b/additions/kcfinder/themes/default/img/files/small/ppt.png new file mode 100644 index 0000000..bdccbb6 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/ppt.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/pptx.png b/additions/kcfinder/themes/default/img/files/small/pptx.png new file mode 100644 index 0000000..bdccbb6 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/pptx.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/psd.png b/additions/kcfinder/themes/default/img/files/small/psd.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/psd.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/qt.png b/additions/kcfinder/themes/default/img/files/small/qt.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/qt.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/rar.png b/additions/kcfinder/themes/default/img/files/small/rar.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/rar.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/rpm.png b/additions/kcfinder/themes/default/img/files/small/rpm.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/rpm.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/rtf.png b/additions/kcfinder/themes/default/img/files/small/rtf.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/rtf.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/sh.png b/additions/kcfinder/themes/default/img/files/small/sh.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/sh.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/sql.png b/additions/kcfinder/themes/default/img/files/small/sql.png new file mode 100644 index 0000000..5665b63 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/sql.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/srt.png b/additions/kcfinder/themes/default/img/files/small/srt.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/srt.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/sub.png b/additions/kcfinder/themes/default/img/files/small/sub.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/sub.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/swf.png b/additions/kcfinder/themes/default/img/files/small/swf.png new file mode 100644 index 0000000..80e05a3 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/swf.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/tgz.png b/additions/kcfinder/themes/default/img/files/small/tgz.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/tgz.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/tif.png b/additions/kcfinder/themes/default/img/files/small/tif.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/tif.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/tiff.png b/additions/kcfinder/themes/default/img/files/small/tiff.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/tiff.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/torrent.png b/additions/kcfinder/themes/default/img/files/small/torrent.png new file mode 100644 index 0000000..55c04aa Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/torrent.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/ttf.png b/additions/kcfinder/themes/default/img/files/small/ttf.png new file mode 100644 index 0000000..ed3e0f6 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/ttf.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/txt.png b/additions/kcfinder/themes/default/img/files/small/txt.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/txt.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/wav.png b/additions/kcfinder/themes/default/img/files/small/wav.png new file mode 100644 index 0000000..017b00d Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/wav.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/wma.png b/additions/kcfinder/themes/default/img/files/small/wma.png new file mode 100644 index 0000000..017b00d Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/wma.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/xls.png b/additions/kcfinder/themes/default/img/files/small/xls.png new file mode 100644 index 0000000..573d141 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/xls.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/xlsx.png b/additions/kcfinder/themes/default/img/files/small/xlsx.png new file mode 100644 index 0000000..573d141 Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/xlsx.png differ diff --git a/additions/kcfinder/themes/default/img/files/small/zip.png b/additions/kcfinder/themes/default/img/files/small/zip.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/additions/kcfinder/themes/default/img/files/small/zip.png differ diff --git a/additions/kcfinder/themes/default/img/icons/about.png b/additions/kcfinder/themes/default/img/icons/about.png new file mode 100644 index 0000000..12cd1ae Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/about.png differ diff --git a/additions/kcfinder/themes/default/img/icons/clipboard-add.png b/additions/kcfinder/themes/default/img/icons/clipboard-add.png new file mode 100644 index 0000000..d5eac9b Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/clipboard-add.png differ diff --git a/additions/kcfinder/themes/default/img/icons/clipboard-clear.png b/additions/kcfinder/themes/default/img/icons/clipboard-clear.png new file mode 100644 index 0000000..dcce0b6 Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/clipboard-clear.png differ diff --git a/additions/kcfinder/themes/default/img/icons/clipboard.png b/additions/kcfinder/themes/default/img/icons/clipboard.png new file mode 100644 index 0000000..779ad58 Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/clipboard.png differ diff --git a/additions/kcfinder/themes/default/img/icons/copy.png b/additions/kcfinder/themes/default/img/icons/copy.png new file mode 100644 index 0000000..a9f31a2 Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/copy.png differ diff --git a/additions/kcfinder/themes/default/img/icons/delete.png b/additions/kcfinder/themes/default/img/icons/delete.png new file mode 100644 index 0000000..1514d51 Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/delete.png differ diff --git a/additions/kcfinder/themes/default/img/icons/download.png b/additions/kcfinder/themes/default/img/icons/download.png new file mode 100644 index 0000000..260ac88 Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/download.png differ diff --git a/additions/kcfinder/themes/default/img/icons/folder-new.png b/additions/kcfinder/themes/default/img/icons/folder-new.png new file mode 100644 index 0000000..529fe8f Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/folder-new.png differ diff --git a/additions/kcfinder/themes/default/img/icons/maximize.png b/additions/kcfinder/themes/default/img/icons/maximize.png new file mode 100644 index 0000000..d41fc7e Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/maximize.png differ diff --git a/additions/kcfinder/themes/default/img/icons/move.png b/additions/kcfinder/themes/default/img/icons/move.png new file mode 100644 index 0000000..7e62a92 Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/move.png differ diff --git a/additions/kcfinder/themes/default/img/icons/refresh.png b/additions/kcfinder/themes/default/img/icons/refresh.png new file mode 100644 index 0000000..aa65210 Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/refresh.png differ diff --git a/additions/kcfinder/themes/default/img/icons/rename.png b/additions/kcfinder/themes/default/img/icons/rename.png new file mode 100644 index 0000000..4e3688e Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/rename.png differ diff --git a/additions/kcfinder/themes/default/img/icons/select.png b/additions/kcfinder/themes/default/img/icons/select.png new file mode 100644 index 0000000..a9925a0 Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/select.png differ diff --git a/additions/kcfinder/themes/default/img/icons/settings.png b/additions/kcfinder/themes/default/img/icons/settings.png new file mode 100644 index 0000000..5c8213f Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/settings.png differ diff --git a/additions/kcfinder/themes/default/img/icons/upload.png b/additions/kcfinder/themes/default/img/icons/upload.png new file mode 100644 index 0000000..f4b6d51 Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/upload.png differ diff --git a/additions/kcfinder/themes/default/img/icons/view.png b/additions/kcfinder/themes/default/img/icons/view.png new file mode 100644 index 0000000..af4fe07 Binary files /dev/null and b/additions/kcfinder/themes/default/img/icons/view.png differ diff --git a/additions/kcfinder/themes/default/img/kcf_logo.png b/additions/kcfinder/themes/default/img/kcf_logo.png new file mode 100644 index 0000000..e829043 Binary files /dev/null and b/additions/kcfinder/themes/default/img/kcf_logo.png differ diff --git a/additions/kcfinder/themes/default/img/loading.gif b/additions/kcfinder/themes/default/img/loading.gif new file mode 100644 index 0000000..5f5cedc Binary files /dev/null and b/additions/kcfinder/themes/default/img/loading.gif differ diff --git a/additions/kcfinder/themes/default/img/tree/denied.png b/additions/kcfinder/themes/default/img/tree/denied.png new file mode 100644 index 0000000..07b93c1 Binary files /dev/null and b/additions/kcfinder/themes/default/img/tree/denied.png differ diff --git a/additions/kcfinder/themes/default/img/tree/folder.png b/additions/kcfinder/themes/default/img/tree/folder.png new file mode 100644 index 0000000..784e8fa Binary files /dev/null and b/additions/kcfinder/themes/default/img/tree/folder.png differ diff --git a/additions/kcfinder/themes/default/img/tree/minus.png b/additions/kcfinder/themes/default/img/tree/minus.png new file mode 100644 index 0000000..af617bb Binary files /dev/null and b/additions/kcfinder/themes/default/img/tree/minus.png differ diff --git a/additions/kcfinder/themes/default/img/tree/plus.png b/additions/kcfinder/themes/default/img/tree/plus.png new file mode 100644 index 0000000..897088b Binary files /dev/null and b/additions/kcfinder/themes/default/img/tree/plus.png differ diff --git a/additions/kcfinder/themes/default/img/ui-icons_black.png b/additions/kcfinder/themes/default/img/ui-icons_black.png new file mode 100644 index 0000000..d64e654 Binary files /dev/null and b/additions/kcfinder/themes/default/img/ui-icons_black.png differ diff --git a/additions/kcfinder/themes/default/img/ui-icons_white.png b/additions/kcfinder/themes/default/img/ui-icons_white.png new file mode 100644 index 0000000..cb9a9ae Binary files /dev/null and b/additions/kcfinder/themes/default/img/ui-icons_white.png differ diff --git a/additions/kcfinder/themes/default/init.js b/additions/kcfinder/themes/default/init.js new file mode 100644 index 0000000..518f854 --- /dev/null +++ b/additions/kcfinder/themes/default/init.js @@ -0,0 +1 @@ +new Image().src = 'themes/default/img/loading.gif'; // preload animated gif diff --git a/additions/kcfinder/themes/default/js.php b/additions/kcfinder/themes/default/js.php new file mode 100644 index 0000000..32245b6 --- /dev/null +++ b/additions/kcfinder/themes/default/js.php @@ -0,0 +1,12 @@ +minify("cache/theme_$theme.js"); + +?> \ No newline at end of file diff --git a/additions/kcfinder/tpl/.htaccess b/additions/kcfinder/tpl/.htaccess new file mode 100644 index 0000000..7484f13 --- /dev/null +++ b/additions/kcfinder/tpl/.htaccess @@ -0,0 +1,4 @@ + +Order allow,deny +Deny from all + \ No newline at end of file diff --git a/additions/kcfinder/tpl/tpl_browser.php b/additions/kcfinder/tpl/tpl_browser.php new file mode 100644 index 0000000..cc9bfda --- /dev/null +++ b/additions/kcfinder/tpl/tpl_browser.php @@ -0,0 +1,87 @@ + + + +KCFinder: /<?php echo $this->session['dir'] ?> + + + + + +
          + +
          +
          + +
          +
          +
          + + +
           
          +
          + + diff --git a/additions/kcfinder/tpl/tpl_css.php b/additions/kcfinder/tpl/tpl_css.php new file mode 100644 index 0000000..37df711 --- /dev/null +++ b/additions/kcfinder/tpl/tpl_css.php @@ -0,0 +1,6 @@ + + + diff --git a/additions/kcfinder/tpl/tpl_javascript.php b/additions/kcfinder/tpl/tpl_javascript.php new file mode 100644 index 0000000..e7fe87c --- /dev/null +++ b/additions/kcfinder/tpl/tpl_javascript.php @@ -0,0 +1,37 @@ + + + +opener['name'] == "tinymce"): +?> + +config['theme']}/js.php")): +?> + + + diff --git a/additions/kcfinder/upload.php b/additions/kcfinder/upload.php new file mode 100644 index 0000000..dd6cfb2 --- /dev/null +++ b/additions/kcfinder/upload.php @@ -0,0 +1,20 @@ + + * @copyright 2010-2014 KCFinder Project + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 + * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 + * @link http://kcfinder.sunhater.com + */ + +require "core/bootstrap.php"; +$uploader = "kcfinder\\uploader"; // To execute core/bootstrap.php on older +$uploader = new $uploader(); // PHP versions (even PHP 4) +$uploader->upload(); + +?> \ No newline at end of file diff --git a/application/config/database.php b/application/config/database.php index 1995ce2..21d2125 100644 --- a/application/config/database.php +++ b/application/config/database.php @@ -77,7 +77,7 @@ 'dsn' => '', 'hostname' => 'localhost', 'username' => 'root', - 'password' => 'acl23122', + 'password' => 'center@14000', 'database' => 'irs_db', 'dbdriver' => 'mysqli', 'dbprefix' => 'irs_', diff --git a/application/config/routes.php b/application/config/routes.php index b3b88a6..a96cd31 100644 --- a/application/config/routes.php +++ b/application/config/routes.php @@ -53,7 +53,6 @@ $route['404_override'] = ''; $route['translate_uri_dashes'] = FALSE; $route['login']='login/index'; -$route['Login']='login/loginerror'; $route['logout']='login/logout'; $route['studenthome']='studenthome/index'; $route['teacherhome']='teacherhome/index'; @@ -69,4 +68,4 @@ $route['checkqr']='enterclass/enterqr'; $route['quizpage']='startquiz/quizpageforstu'; $route['scanqr/(:any)/(:any)']='enterclass/loginunusual'; -$route['waitpage']='enterclass/showwait'; \ No newline at end of file +$route['waitpage']='enterclass/showwait'; diff --git a/application/controllers/Cked.php b/application/controllers/Cked.php new file mode 100644 index 0000000..ab5de18 --- /dev/null +++ b/application/controllers/Cked.php @@ -0,0 +1,9 @@ +load->view('FOUNDCLASS/Cked.html'); + } +} +?> \ No newline at end of file diff --git a/application/controllers/Classconnect.php b/application/controllers/Classconnect.php index a77899d..dc6337a 100644 --- a/application/controllers/Classconnect.php +++ b/application/controllers/Classconnect.php @@ -1,71 +1,66 @@ load->model('Course_model', 'course'); - $res = $this->userinfo; - $data = array( - 'user_Id' => $res['user_Id'], - 'course_Year' => 106, - 'course_Term' => 1 - ); - $query = $this->course->findCourse($data); - $temp = ''; - echo $temp; - } - - public function loadquiz() - { - $this->load->model('Quiz_model', 'quiz'); - $res = $this->userinfo; - $data = array( - 'user_Id' => $res['user_Id'], - 'course_Name' => $_POST['course_Name'] - ); - $query = $this->quiz->findQuiz($data); - if ($query != null) { - $temp = ''; - echo $temp; - } - } - - public function loadname() - { - //$this->load->model('this_class_model', 'this_class'); - //$classId = $this->this_class->findPin(); - $res = $this->userinfo; - $pin = $this->session->userdata('PIN'); - $data = array( - 'user_Name' => $res['user_Name'], - 'pin' => $pin['PIN'] - ); - //$temp = $res['user_Name']; - echo json_encode($data); - } - - public function loadnamestudent() - { - //$this->load->model('this_class_model', 'this_class'); - //$classId = $this->this_class->findPin(); - $res = $this->userinfo; - $pin = $this->session->userdata('PinCode'); - $data = array( - 'user_Name' => $res['user_Name'], - 'pin' => $pin['Pin'] - ); - //$temp = $res['user_Name']; - echo json_encode($data); - } +class Classconnect extends MY_Controller{ + public function loadlesson(){ + $this->load->model('Course_model','course'); + $res=$this->userinfo; + $data=array( + 'user_Id'=>$res['user_Id'], + 'course_Year'=>106, + 'course_Term'=>1 + ); + $query=$this->course->findCourse($data); + $temp=''; + echo $temp; + } + + public function loadquiz(){ + $this->load->model('Quiz_model','quiz'); + $res=$this->userinfo; + $data=array( + 'user_Id'=>$res['user_Id'], + 'course_Name'=>$_POST['course_Name'] + ); + $query=$this->quiz->findQuiz($data); + if($query!= null){ + $temp=''; + echo $temp; + } + } + + public function loadname(){ + //$this->load->model('this_class_model', 'this_class'); + //$classId = $this->this_class->findPin(); + $res=$this->userinfo; + $pin=$this->session->userdata('PIN'); + $data=array( + 'user_Name'=>$res['user_Name'], + 'pin'=>$pin['PIN_code'] + ); + //$temp = $res['user_Name']; + echo json_encode($data); + } + + public function loadnamestudent(){ + //$this->load->model('this_class_model', 'this_class'); + //$classId = $this->this_class->findPin(); + $res=$this->userinfo; + $pin=$this->session->userdata('classandquiz'); + $data=array( + 'user_Name'=>$res['user_Name'], + 'pin'=>$pin['PIN'] + ); + //$temp = $res['user_Name']; + echo json_encode($data); + } } - ?> \ No newline at end of file diff --git a/application/controllers/Editquestion.php b/application/controllers/Editquestion.php index e821cb2..6644a45 100644 --- a/application/controllers/Editquestion.php +++ b/application/controllers/Editquestion.php @@ -1,5 +1,5 @@ load->model('Result_model','student_quiz'); + $data=array( +/* 'class_Id'=>'2418', + 'quiz_Id'=>'1', */ + 'class_Id'=>$_SESSION['course']['class_Id'], + 'quiz_Id'=>$_SESSION['course']['quiz_Id'], + ); + $res=$this->student_quiz->findQuizResult($data); + $this->load->model('User_model','user'); + for($i=0;$i$res[$i]['user_Id']); + $resOfName=$this->user->findHim($dataSearchName); + $res[$i]['user_Id']=$resOfName[0]['user_Name']; + } + echo json_encode($res); + /* print_r($_SESSION); */ + } + + /* public function takeQuizResultForStu(){ + $this->load->model('Result_model','student_quiz'); + $data=array( + 'class_Id'=>$_SESSION['course']['class_Id'], + 'quiz_Id'=>$_SESSION['course']['quiz_Id'], + ); + $res=$this->student_quiz->findQuizResult($data); + $this->load->model('User_model','user'); + for($i=0;$i<3;$i++){ + $dataSearchName=array('user_Id'=>$res[$i]['user_Id']); + $resOfName=$this->user->findHim($dataSearchName); + $res[$i]['user_Id']=$resOfName[0]['user_Name']; + } + echo json_encode($res); + /* print_r($_SESSION); */ + /*} */ + public function takeCourseName(){ + $data=array( + 'class_Id'=>$_SESSION['course']['class_Id'], + 'quiz_Id'=>$_SESSION['course']['quiz_Id'], + ); + $this->load->model('Course_model','course'); + $resofcourse=$this->course->findCourse(array('course_num'=>$data['class_Id'])); + echo json_encode($resofcourse); + } + public function takeQuizName(){ + $data=array( + 'class_Id'=>$_SESSION['course']['class_Id'], + 'quiz_Id'=>$_SESSION['course']['quiz_Id'], + ); + $this->load->model('Quiz_model','quiz'); + $resofquiz=$this->quiz->findknowedquiz(array('quiz_Id'=>$data['quiz_Id'])); + echo json_encode($resofquiz); + } + +} +?> \ No newline at end of file diff --git a/application/controllers/Login.php b/application/controllers/Login.php index 2f23c88..0989ebf 100644 --- a/application/controllers/Login.php +++ b/application/controllers/Login.php @@ -1,123 +1,140 @@ load->library('session'); - if(!isset($_SESSION['user'])){ - if(empty($_COOKIE['info'])){ - $this->load->view('FOUNDCLASS/login.html'); - }else{ - date_default_timezone_set("Asia/Taipei"); - $data=base64_decode($_COOKIE['info']); - $data=$this->decrypt_cookies($data); - $cookie_array=explode("-",$data); - $userinfo=array( - 'user_Id'=>$cookie_array[0] - ); - $this->load->model('User_model','user'); - $res=$this->user->getFromId($userinfo); - $date=mktime(0,0,0,$cookie_array[2],$cookie_array[3],$cookie_array[1]); - $date_check=strtotime("now"); - $date_expire=$date_check-$date; - if($date_expire>0){ - $date_expire=$date_expire/3600/24; - $para_coo=1; - if($date_expire<7&&$date_expire>6){ - $this->session->set_userdata('update_coo',$para_coo); - } - } - if(!isset($_SESSION['user'])){ - $user=array('user_Id'=>$res[0]['user_Id'],'user_Name'=>$res[0]['user_Name'],'user_Identity'=>$res[0]['user_Identity']); - $this->session->set_userdata('user',$user); - } - if($_SESSION['user']['user_Identity']==1){ - header("Location: ./studenthome"); - } - else if($_SESSION['user']['user_Identity']==0){ - header("Location: ./teacherhome"); - } - } - } - else{ - if($_SESSION['user']['user_Identity']==1){ - header("Location: ./studenthome"); - } - else if($_SESSION['user']['user_Identity']==0){ - header("Location: ./teacherhome"); - } - } - } - public function setinfo(){ - $remember=$this->input->post('remember'); - $user_pass=array( - 'user_Info'=>$this->input->post('account'), - 'user_pwd'=>$this->input->post('pwd') - ); - $para_coo=1; - $id_pwd = $user_pass['user_Info'].':'.$user_pass['user_pwd']; - $enc_arg = $this->encrypt_user($id_pwd); - $enc_arg=urlencode($enc_arg); - $temp=$this->curl($enc_arg); - if($temp!="fault"){ - $userinfo=array( - 'user_Info'=>$temp - ); - $this->load->model('User_model','user'); - $res=$this->user->checkHim($userinfo); - if($res!= NULL){ - $this->load->library('session'); - $this->load->helper('url'); - if(!isset($_SESSION['user'])){ - $user=array('user_Id'=>$res[0]['user_Id'],'user_Name'=>$res[0]['user_Name'],'user_Identity'=>$res[0]['user_Identity']); - $this->session->set_userdata('user',$user); - } - if($remember==1){ - $this->session->set_userdata('remember',$para_coo); - } - if($res[0]['user_Identity']==1){ - if(isset($_SESSION['url'])){ - header("Location: ./checkqr"); - }else{ - header("Location: ./studenthome"); - } - } - else if($res[0]['user_Identity']==0){ - header("Location: ./teacherhome"); - } - } - else{ - echo '有登入了,但無權限,請洽管理員'; - } - } - else{ - header("Location: ./Login"); - } - } - public function loginerror(){ - $this->load->view('FOUNDCLASS/login_error.html'); - } - public function logout(){ - $this->load->library('session'); - session_destroy(); - header("Location: ./"); - } - public function encrypt_user($data){ - $key = 'ecourse@irs#!'; - $encryption_key = base64_decode($key); - $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); - $encrypted = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv); - return base64_encode($encrypted . '::' . $iv); - } - public function curl($enc_arg){ - $curl = curl_init(); - curl_setopt($curl,CURLOPT_URL,"https://ecourse.ccu.edu.tw/php/api/irs.php?action=verifyUser&arg=".$enc_arg); - curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); - curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0); - curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0); - $response=curl_exec($curl); - curl_close($curl); - $temp = trim($response, "\xEF\xBB\xBF"); - return $temp; - } +class Login extends CI_Controller{ - } \ No newline at end of file + public function index(){ + $this->load->library('session'); + if(!isset($_SESSION['user'])){ + if(empty($_COOKIE['info'])){ + $this->load->view('FOUNDCLASS/login.html'); + }else{ + date_default_timezone_set("Asia/Taipei"); + $data=base64_decode($_COOKIE['info']); + $data=$this->decrypt_cookies($data); + $cookie_array=explode("-",$data); + $userinfo=array( + 'user_Id'=>$cookie_array[0] + ); + $this->load->model('User_model','user'); + $res=$this->user->getFromId($userinfo); + $date=mktime(0,0,0,$cookie_array[2],$cookie_array[3],$cookie_array[1]); + $date_check=strtotime("now"); + $date_expire=$date_check-$date; + if($date_expire>0){ + $date_expire=$date_expire/3600/24; + $para_coo=1; + if($date_expire<7&&$date_expire>6){ + $this->session->set_userdata('update_coo',$para_coo); + } + } + if(!isset($_SESSION['user'])){ + $user=array('user_Id'=>$res[0]['user_Id'],'user_Name'=>$res[0]['user_Name'],'user_Identity'=>$res[0]['user_Identity'],'user_Info'=>$res[0]['user_Info']); + $this->session->set_userdata('user',$user); + } + if($res[0]['user_Identity']==1){ + if(isset($_SESSION['url'])){ + header("Location: ./checkqr"); + }else{ + header("Location: ./studenthome"); + } + } + else if($res[0]['user_Identity']==0){ + header("Location: ./teacherhome"); + } + } + } + else{ + if($_SESSION['user']['user_Identity']==1){ + header("Location: ./studenthome"); + } + else if($_SESSION['user']['user_Identity']==0){ + header("Location: ./teacherhome"); + } + } + } + public function setinfo(){ + $remember=$this->input->post('remember'); + $user_pass=array( + 'user_Info'=>$this->input->post('account'), + 'user_pwd'=>$this->input->post('pwd') + ); + $para_coo=1; + $id_pwd = $user_pass['user_Info'].':'.$user_pass['user_pwd']; + $enc_arg = $this->encrypt_user($id_pwd); + $enc_arg=urlencode($enc_arg); + $temp=$this->curl($enc_arg); + if($temp!="fault"){ + $userinfo=array( + 'user_Info'=>$temp + ); + $this->load->model('User_model','user'); + $res=$this->user->checkHim($userinfo); + if($res!= NULL){ + $this->load->library('session'); + $this->load->helper('url'); + if(!isset($_SESSION['user'])){ + $user=array('user_Id'=>$res[0]['user_Id'],'user_Name'=>$res[0]['user_Name'],'user_Identity'=>$res[0]['user_Identity'],'user_Info'=>$res[0]['user_Info']); + $this->session->set_userdata('user',$user); + } + if($remember==1){ + $this->session->set_userdata('remember',$para_coo); + } + if($res[0]['user_Identity']==1){ + if(isset($_SESSION['url'])){ + header("Location: ./checkqr"); + }else{ + header("Location: ./studenthome"); + } + } + else if($res[0]['user_Identity']==0){ + header("Location: ./teacherhome"); + } + } + else{ + echo '有登入了,但無權限,請洽管理員'; + } + } + else{ + header("Location: ./Login"); + } + } + public function loginerror(){ + $this->load->view('FOUNDCLASS/login_error.html'); + } + public function logout(){ + $this->load->library('session'); + session_destroy(); + header("Location: ./"); + } + public function encrypt_user($data){ + $key = 'ecourse@irs#!'; + $encryption_key = base64_decode($key); + $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); + $encrypted = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv); + return base64_encode($encrypted . '::' . $iv); + } + public function decrypt_cookies($data){ + $this->load->library('encryption'); + //$key = $this->encryption->create_key(16); + $this->encryption->initialize( + array( + 'cipher' => 'aes-128', + 'mode' => 'cbc', + 'key' => '8888', + ) + ); + return $this->encryption->decrypt($data); + } + + public function curl($enc_arg){ + $curl = curl_init(); + curl_setopt($curl,CURLOPT_URL,"https://ecourse.ccu.edu.tw/php/api/irs.php?action=verifyUser&arg=".$enc_arg); + curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); + curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0); + curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0); + $response=curl_exec($curl); + curl_close($curl); + $temp = trim($response, "\xEF\xBB\xBF"); + return $temp; + } + +} \ No newline at end of file diff --git a/application/controllers/Longpolling.php b/application/controllers/Longpolling.php new file mode 100644 index 0000000..6b752fb --- /dev/null +++ b/application/controllers/Longpolling.php @@ -0,0 +1,36 @@ +load->model('this_class_model','this_class'); + $class_Id=array( + 'class_Id'=>$_SESSION['classandquiz']['class_Id'] + ); + $endClass=$this->this_class->findEndclass($class_Id); + $row = $endClass[0]['end_Class']; + // main loop + while (true) { + $endClass=$this->this_class->findEndclass($class_Id); + $row = $endClass[0]['end_Class']; + if ($row == 1) { + + break; + }else { + sleep( 1 ); + continue; + } + } + //header("Location: ../QuizPage"); + } + public function polling2(){ + $this->load->library('MP_Cache'); + $cdata_name=$_SESSION['classandquiz']['class_Id'].'_endclass'; + $cdata_endclass = $this->mp_cache->set_name($cdata_name)->get(); + + echo $cdata_endclass['endclass']; + } + } + + +?> diff --git a/application/controllers/Newquestion.php b/application/controllers/Newquestion.php index ef3addd..ac8d87e 100644 --- a/application/controllers/Newquestion.php +++ b/application/controllers/Newquestion.php @@ -1,5 +1,5 @@ load->model('question_model','question'); $this->load->model('course_model','course'); $res=$this->userinfo; - $courseyt=$this->getCourseyt(); //處理

          標籤問題 開始 $question_Content =str_replace("

          ","",$_POST['question_Content']); $question_Content =str_replace("

          ","",$question_Content); @@ -37,8 +36,8 @@ public function newquestion(){ $data=array( 'user_Id'=>$res['user_Id'], 'course_Name'=>$_POST['question_Lession'], - 'course_Year'=>$courseyt['course_Year'], - 'course_Term'=>$courseyt['course_Term'] + 'course_Year'=>106, + 'course_Term'=>1 ); $query=$this->course->findCourse($data); foreach ($query as $row) @@ -55,8 +54,8 @@ public function newquestion(){ 'user_Id'=>$res['user_Id'], 'course_No'=>$query[0]['course_No'], 'course_Tag'=>$coursetag, - 'course_Year'=>$courseyt['course_Year'], - 'course_Term'=>$courseyt['course_Term'] + 'course_Year'=>106, + 'course_Term'=>1 ); $bool2=$this->course->updateCourse($updateCourse);//確認course_Tag有沒有存在資料庫,沒有的話便新增進去 } @@ -122,11 +121,10 @@ public function deletequestion(){//刪除題庫題目 public function loadlessonandchapter(){ $this->load->model('Course_model','course'); $res=$this->userinfo; - $courseyt=$this->getCourseyt(); $data=array( 'user_Id'=>$res['user_Id'], - 'course_Year'=>$courseyt['course_Year'], - 'course_Term'=>$courseyt['course_Term'] + 'course_Year'=>106, + 'course_Term'=>1 ); $query=$this->course->findCourse($data); $temp=''; @@ -163,12 +160,11 @@ public function loadquestiontag(){ public function loadquestiontag2(){ $this->load->model('Course_model','course'); $res=$this->userinfo; - $courseyt=$this->getCourseyt(); $data=array( 'user_Id'=>$res['user_Id'], 'course_Name'=>$_POST['course_Name'], - 'course_Year'=>$courseyt['course_Year'], - 'course_Term'=>$courseyt['course_Term'] + 'course_Year'=>106, + 'course_Term'=>1 ); $query=$this->course->findCourse($data); $temp=' '; @@ -207,34 +202,7 @@ public function loadquestiontagforeditquestion(){ $temp =$temp .''; echo $temp; } - public function getCourseyt(){ - $this->checkMethod_teacher(); - $times=date("Y/m/d"); - $time_array=explode("/",$times); - $term; - if($time_array[1]<7){ - $cyear=$time_array[0]-1911-1; - } - else{ - $cyear=$time_array[0]-1911; - } - if($time_array[1]>=2&&$time_array[1]<=8){ - $term=2; - } - else{ - $term=1; - } - $data=array( - 'course_Year'=>$cyear, - 'course_Term'=>$term - ); - return $data; - } - public function checkMethod_teacher(){ - if($_SESSION['user']['user_Identity']!='0'){ - die('非法連結,無權限觀看'); - }; - } + } ?> \ No newline at end of file diff --git a/application/controllers/Quizforteacherview.php b/application/controllers/Quizforteacherview.php index 7f89d9b..0260c38 100644 --- a/application/controllers/Quizforteacherview.php +++ b/application/controllers/Quizforteacherview.php @@ -1,7 +1,7 @@ load->view('FOUNDCLASS/QuizForTeacherView.html'); } diff --git a/application/controllers/Rate.php b/application/controllers/Rate.php new file mode 100644 index 0000000..c5efc17 --- /dev/null +++ b/application/controllers/Rate.php @@ -0,0 +1,9 @@ +load->view('FOUNDCLASS/Rating.html'); + } +} +?> \ No newline at end of file diff --git a/application/controllers/Startquiz.php b/application/controllers/Startquiz.php index 72131ab..90447da 100644 --- a/application/controllers/Startquiz.php +++ b/application/controllers/Startquiz.php @@ -71,6 +71,19 @@ public function getquestion($data){ } return $data_return; } + + public function endquiz(){ + $this->recordusetime(); + $this->correctans(); + $this->load->library('MP_Cache'); + + $cdata = array( + 'endclass'=> 1 + ); + $cdata_name=$cdata_name=$_SESSION['course']['class_Id'].'_endclass'; + $this->mp_cache->write($cdata, $cdata_name,7200); + } + public function finishaction(){ $cdata_name=$_SESSION['course']['class_Id'].'_'.$_SESSION['course']['quiz_Id']; $this->load->library('MP_Cache'); @@ -89,17 +102,23 @@ public function finishaction(){ if ($cdata_quiz_ans!== false){ $this->mp_cache->delete($cdata_name); } + sleep(3); + $cdata=$_SESSION['course']['class_Id'].'_endclass';//刪除endclass cache + $cdata_endclss= $this->mp_cache->set_name($cdata)->get(); + if ($cdata_endclss!== false){ + $this->mp_cache->delete($cdata); + } $this->deletequestiontime(); } - public function setopinion(){//設置shadow_quiz評價和刪除session + public function setopinion($opinion_from_student){//設置shadow_quiz評價和刪除session $this->load->model('Shadow_quiz_model','shadow_quiz'); $data=array( 'shadow_Quiz_Id' =>$_SESSION['quizstatue']['shadow_Quiz_Id'], ); $opinion=array( 'current_Pin'=>null, - 'shadow_Quiz_opinion'=>5,//需從前端皆值 + 'shadow_Quiz_opinion'=>$opinion_from_student,//需從前端皆值 ); $this->shadow_quiz->updateShadow_quiz($data,$opinion); $res=$this->clearforfinish(); @@ -207,9 +226,9 @@ public function correctans(){//計算分數 ); $ans_output_temp=array(); $ans_output=array(); - $score_List_output; - $anspoint; - $anspoint_total; + $score_List_output = null; + $anspoint= null; + $anspoint_total= null; $shadow_grade_list=""; if($res_stuans!=null){ foreach($res_stuans as $value){ @@ -386,4 +405,4 @@ public function handletime(){ $this->setquestiontime(); } - } \ No newline at end of file + } diff --git a/application/controllers/StudentResult.php b/application/controllers/StudentResult.php new file mode 100644 index 0000000..867128c --- /dev/null +++ b/application/controllers/StudentResult.php @@ -0,0 +1,9 @@ +load->view('FOUNDCLASS/StudentResult.html'); + } +} +?> \ No newline at end of file diff --git a/application/controllers/Studenthome.php b/application/controllers/Studenthome.php index 1959872..4027772 100644 --- a/application/controllers/Studenthome.php +++ b/application/controllers/Studenthome.php @@ -56,5 +56,20 @@ public function check_cookies(){ } } - + public function getHistory(){ + $infoofuser=$this->userinfo; + $this->load->model('Result_model','student_quiz'); + $infoofHR=$this->student_quiz->findQuizHistoryResult($infoofuser); + for($i=0;$iload->model('Course_model','course'); + $resofcourse=$this->course->findCourse(array('course_num'=>$infoofHR[$i]['class_Id'])); + $infoofHR[$i]['class_Id']=$resofcourse[0]['course_Name']; + } + for($i=0;$iload->model('Quiz_model','quiz'); + $resofquiz=$this->quiz->findknowedquiz(array('quiz_Id'=>$infoofHR[$i]['quiz_Id'])); + $infoofHR[$i]['quiz_Id']=$resofquiz[0]['quiz_Name']; + } + echo json_encode($infoofHR); + } } \ No newline at end of file diff --git a/application/libraries/ckeditor/CHANGES.md b/application/libraries/ckeditor/CHANGES.md new file mode 100644 index 0000000..ec90893 --- /dev/null +++ b/application/libraries/ckeditor/CHANGES.md @@ -0,0 +1,1414 @@ +CKEditor 4 Changelog +==================== + +## CKEditor 4.8 + +**Important Notes:** + +* [#1249](https://github.com/ckeditor/ckeditor-dev/issues/1249): Enabled the [Upload Image](https://ckeditor.com/cke4/addon/uploadimage) plugin by default in standard and full presets. Also, it will no longer log an error in case of missing [`config.imageUploadUrl`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-imageUploadUrl) property. + +New Features: + +* [#933](https://github.com/ckeditor/ckeditor-dev/issues/933): Introduced [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) plugin. +* [#662](https://github.com/ckeditor/ckeditor-dev/issues/662): Introduced image inlining for the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#468](https://github.com/ckeditor/ckeditor-dev/issues/468): [Edge] Introduced support for the Clipboard API. +* [#607](https://github.com/ckeditor/ckeditor-dev/issues/607): Manually inserted Hex color is prefixed with a hash character (`#`) if needed. It ensures a valid Hex color value is used when setting the table cell border or background color with the [Color Dialog](https://ckeditor.com/cke4/addon/colordialog) window. +* [#584](https://github.com/ckeditor/ckeditor-dev/issues/584): [Font size and Family](https://ckeditor.com/cke4/addon/font) and [Format](https://ckeditor.com/cke4/addon/format) drop-downs are not toggleable anymore. Default option to reset styles added. +* [#856](https://github.com/ckeditor/ckeditor-dev/issues/856): Introduced the [`CKEDITOR.tools.keystrokeToArray`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.tools-method-keystrokeToArray) method. It converts a keystroke into its string representation, returning every key name as a separate array element. +* [#1053](https://github.com/ckeditor/ckeditor-dev/issues/1053): Introduced the [`CKEDITOR.tools.object.merge`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.tools.object-method-merge) method. It allows to merge two objects, returning the new object with all properties from both objects deeply cloned. +* [#1073](https://github.com/ckeditor/ckeditor-dev/issues/1073): Introduced the [`CKEDITOR.tools.array.every`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.tools.array-method-every) method. It invokes a given test function on every array element and returns `true` if all elements pass the test. + +Fixed Issues: + +* [#796](https://github.com/ckeditor/ckeditor-dev/issues/796): Fixed: A list is pasted from OneNote in the reversed order. +* [#834](https://github.com/ckeditor/ckeditor-dev/issues/834): [IE9-11] Fixed: The editor does not save the selected state of radio buttons inserted by the [Form Elements](https://ckeditor.com/cke4/addon/forms) plugin. +* [#704](https://github.com/ckeditor/ckeditor-dev/issues/704): [Edge] Fixed: Using Ctrl/Cmd + Z breaks widget structure. +* [#591](https://github.com/ckeditor/ckeditor-dev/issues/591): Fixed: A column is inserted in a wrong order inside the table if any cell has a vertical split. +* [#787](https://github.com/ckeditor/ckeditor-dev/issues/787): Fixed: Using Cut inside a nested table does not cut the selected content. +* [#842](https://github.com/ckeditor/ckeditor-dev/issues/842): Fixed: List style not restored when toggling list indent level in the [Indent List](https://ckeditor.com/cke4/addon/indentlist) plugin. +* [#711](https://github.com/ckeditor/ckeditor-dev/issues/711): Fixed: Dragging widgets should only work with the left mouse button. +* [#862](https://github.com/ckeditor/ckeditor-dev/issues/862): Fixed: The "Object Styles" group in the [Styles Combo](https://ckeditor.com/cke4/addon/stylescombo) plugin is visible only if the whole element is selected. +* [#994](https://github.com/ckeditor/ckeditor-dev/pull/994): Fixed: Typo in the [`CKEDITOR.focusManager.focus`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.focusManager-method-focus) API documentation. Thanks to [benjy](https://github.com/benjy)! +* [#1014](https://github.com/ckeditor/ckeditor-dev/issues/1014): Fixed: The [Table Tools](https://ckeditor.com/cke4/addon/tabletools) Cell Properties dialog is now [Advanced Content Filter](https://docs.ckeditor.com/ckeditor4/docs/#!/guide/dev_acf) aware — it is not possible to change the cell width or height if corresponding styles are disabled. +* [#877](https://github.com/ckeditor/ckeditor-dev/issues/877): Fixed: A list with custom bullets with exotic characters crashes the editor when [pasted from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#605](https://github.com/ckeditor/ckeditor-dev/issues/605): Fixed: Inline widgets do not preserve trailing spaces. +* [#1008](https://github.com/ckeditor/ckeditor-dev/issues/1008): Fixed: Shorthand Hex colors from the [`config.colorButton_colors`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-colorButton_colors) option are not correctly highlighted in the [Color Button](https://ckeditor.com/cke4/addon/colorbutton) Text Color or Background Color panel. +* [#1094](https://github.com/ckeditor/ckeditor-dev/issues/1094): Fixed: Widget definition [`upcast`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.plugins.widget.definition-property-upcasts) methods are called for every element. +* [#1057](https://github.com/ckeditor/ckeditor-dev/issues/1057): Fixed: The [Notification](https://ckeditor.com/addon/notification) plugin overwrites Web Notifications API due to leakage to the global scope. +* [#1068](https://github.com/ckeditor/ckeditor-dev/issues/1068): Fixed: Upload widget paste listener ignores changes to the [`uploadWidgetDefinition`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition). +* [#921](https://github.com/ckeditor/ckeditor-dev/issues/921): Fixed: [Edge] CKEditor erroneously perceives internal copy and paste as type "external". +* [#1213](https://github.com/ckeditor/ckeditor-dev/issues/1213): Fixed: Multiple images uploaded using [Upload Image](https://ckeditor.com/cke4/addon/uploadimage) plugin are randomly duplicated or mangled. +* [#532](https://github.com/ckeditor/ckeditor-dev/issues/532): Fixed: Removed an outdated user guide link from the [About](https://ckeditor.com/cke4/addon/about) dialog. +* [#1221](https://github.com/ckeditor/ckeditor-dev/issues/1221): Fixed: Invalid CSS loaded by [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) plugin when [`config.skin`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-skin) is loaded using a custom path. +* [#522](https://github.com/ckeditor/ckeditor-dev/issues/522): Fixed: Widget selection is not removed when widget is inside table cell with [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin enabled. +* [#1027](https://github.com/ckeditor/ckeditor-dev/issues/1027): Fixed: Cannot add multiple images to the table with [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin in certain situations. +* [#1069](https://github.com/ckeditor/ckeditor-dev/issues/1069): Fixed: Wrong shape processing by [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#995](https://github.com/ckeditor/ckeditor-dev/issues/995): Fixed: Hyperlinked image gets inserted twice by [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#1287](https://github.com/ckeditor/ckeditor-dev/issues/1287): Fixed: [Widget](https://ckeditor.com/cke4/addon/widget) plugin throws exception if included in editor build but not loaded into editor's instance. + +API Changes: + +* [#1097](https://github.com/ckeditor/ckeditor-dev/issues/1097): Widget [`upcast`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.plugins.widget.definition-property-upcast) methods are now called in the [widget definition's](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.plugins.widget-property-definition) context. +* [#1118](https://github.com/ckeditor/ckeditor-dev/issues/1118): Added the `show` option in the [`balloonPanel.attach`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.ui.balloonPanel-method-attach) method, allowing to attach a hidden [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) instance. +* [#1145](https://github.com/ckeditor/ckeditor-dev/issues/1145): Added the [`skipNotifications`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition-property-skipNotifications) option to the [`CKEDITOR.fileTools.uploadWidgetDefinition`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition), allowing to switch off default notifications displayed by upload widgets. + +Other Changes: + +* [#815](https://github.com/ckeditor/ckeditor-dev/issues/815): Removed Node.js dependency from the CKEditor build script. +* [#1041](https://github.com/ckeditor/ckeditor-dev/pull/1041), [#1131](https://github.com/ckeditor/ckeditor-dev/issues/1131): Updated URLs pointing to [CKSource](https://cksource.com/) and [CKEditor](https://ckeditor.com/) resources after the launch of new websites. + +## CKEditor 4.7.3 + +New Features: + +* [#568](https://github.com/ckeditor/ckeditor-dev/issues/568): Added possibility to adjust nested editables' filters using the [`CKEDITOR.filter.disallowedContent`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.filter-property-disallowedContent) property. + +Fixed Issues: + +* [#554](https://github.com/ckeditor/ckeditor-dev/issues/554): Fixed: [`change`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.editor-event-change) event not fired when typing the first character after pasting into the editor. Thanks to [Daniel Miller](https://github.com/millerdev)! +* [#566](https://github.com/ckeditor/ckeditor-dev/issues/566): Fixed: The CSS `border` shorthand property with zero width (`border: 0px solid #000;`) causes the table to have the border attribute set to 1. +* [#779](https://github.com/ckeditor/ckeditor-dev/issues/779): Fixed: The [Remove Format](https://ckeditor.com/cke4/addon/removeformat) plugin removes elements with language definition inserted by the [Language](https://ckeditor.com/cke4/addon/language) plugin. +* [#423](https://github.com/ckeditor/ckeditor-dev/issues/423): Fixed: The [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin pastes paragraphs into the editor even if [`CKEDITOR.config.enterMode`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-enterMode) is set to `CKEDITOR.ENTER_BR`. +* [#719](https://github.com/ckeditor/ckeditor-dev/issues/719): Fixed: Image inserted using the [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugin can be resized when the editor is in [read-only mode](https://docs.ckeditor.com/ckeditor4/docs/#!/guide/dev_readonly). +* [#577](https://github.com/ckeditor/ckeditor-dev/issues/577): Fixed: The "Delete Columns" command provided by the [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin throws an error when trying to delete columns. +* [#867](https://github.com/ckeditor/ckeditor-dev/issues/867): Fixed: Typing into a selected table throws an error. +* [#817](https://github.com/ckeditor/ckeditor-dev/issues/817): Fixed: The [Save](https://ckeditor.com/cke4/addon/save) plugin does not work in [Source Mode](https://ckeditor.com/cke4/addon/sourcearea). + +Other Changes: + +* Updated the [WebSpellChecker](https://ckeditor.com/cke4/addon/wsc) plugin: + * [#40](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/40): Fixed: IE10 throws an error when spell checking is started. +* [#800](https://github.com/ckeditor/ckeditor-dev/issues/800): Added the [`CKEDITOR.dom.selection.isCollapsed`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.selection-method-isCollapsed) method which is a simpler way to check if the selection is collapsed. +* [#830](https://github.com/ckeditor/ckeditor-dev/issues/830): Added an option to define which dialog tab should be shown by default when creating [`CKEDITOR.dialogCommand`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dialogCommand). + +## CKEditor 4.7.2 + +New Features: + +* [#455](https://github.com/ckeditor/ckeditor-dev/issues/455): Added [Advanced Content Filter](https://docs.ckeditor.com/ckeditor4/docs/#!/guide/dev_acf) integration with the [Justify](https://ckeditor.com/cke4/addon/justify) plugin. + +Fixed Issues: + +* [#663](https://github.com/ckeditor/ckeditor-dev/issues/663): [Chrome] Fixed: Clicking the scrollbar throws an `Uncaught TypeError: element.is is not a function` error. +* [#694](https://github.com/ckeditor/ckeditor-dev/pull/694): Refactoring in the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin: + * [#520](https://github.com/ckeditor/ckeditor-dev/issues/520): Fixed: Widgets cannot be properly pasted into a table cell. + * [#460](https://github.com/ckeditor/ckeditor-dev/issues/460): Fixed: Editor gone after pasting into an editor within a table. +* [#579](https://github.com/ckeditor/ckeditor-dev/issues/579): Fixed: Internal `cke_table-faked-selection-table` class is visible in the Stylesheet Classes field of the [Table Properties](https://ckeditor.com/cke4/addon/table) dialog. +* [#545](https://github.com/ckeditor/ckeditor-dev/issues/545): [Edge] Fixed: Error thrown when pressing the [Select All](https://ckeditor.com/cke4/addon/selectall) button in [Source Mode](https://ckeditor.com/cke4/addon/sourcearea). +* [#582](https://github.com/ckeditor/ckeditor-dev/issues/582): Fixed: Double slash in the path to stylesheet needed by the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin. Thanks to [Marius Dumitru Florea](https://github.com/mflorea)! +* [#491](https://github.com/ckeditor/ckeditor-dev/issues/491): Fixed: Unnecessary dependency on the [Editor Toolbar](https://ckeditor.com/cke4/addon/toolbar) plugin inside the [Notification](https://ckeditor.com/cke4/addon/notification) plugin. +* [#646](https://github.com/ckeditor/ckeditor-dev/issues/646): Fixed: Error thrown into the browser console after opening the [Styles Combo](https://ckeditor.com/cke4/addon/stylescombo) plugin menu in the editor without any selection. +* [#501](https://github.com/ckeditor/ckeditor-dev/issues/501): Fixed: Double click does not open the dialog for modifying anchors inserted via the [Link](https://ckeditor.com/cke4/addon/link) plugin. +* [#9780](https://dev.ckeditor.com/ticket/9780): [IE8-9] Fixed: Clicking inside an empty [read-only](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.editor-property-readOnly) editor throws an error. +* [#16820](https://dev.ckeditor.com/ticket/16820): [IE10] Fixed: Clicking below a single horizontal rule throws an error. +* [#426](https://github.com/ckeditor/ckeditor-dev/issues/426): Fixed: The [`range.cloneContents`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.range-method-cloneContents) method selects the whole element when the selection starts at the beginning of that element. +* [#644](https://github.com/ckeditor/ckeditor-dev/issues/644): Fixed: The [`range.extractContents`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.range-method-extractContents) method returns an incorrect result when multiple nodes are selected. +* [#684](https://github.com/ckeditor/ckeditor-dev/issues/684): Fixed: The [`elementPath.contains`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.elementPath-method-contains) method incorrectly excludes the last element instead of root when the `fromTop` parameter is set to `true`. + +Other Changes: + +* Updated the [SCAYT](https://ckeditor.com/cke4/addon/scayt) (Spell Check As You Type) plugin: + * [#148](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/148): Fixed: SCAYT leaves underlined word after the CKEditor Replace dialog corrects it. +* [#751](https://github.com/ckeditor/ckeditor-dev/issues/751): Added the [`CKEDITOR.dom.nodeList.toArray`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.nodeList-method-toArray) method which returns an array representation of a [node list](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.nodeList). + +## CKEditor 4.7.1 + +New Features: + +* Added a new Mexican Spanish localization. Thanks to [David Alexandro Rodriguez](https://www.transifex.com/user/profile/darsco16/)! +* [#413](https://github.com/ckeditor/ckeditor-dev/issues/413): Added Paste as Plain Text keyboard shortcut to the [Accessibility Help](https://ckeditor.com/cke4/addon/a11yhelp) instructions. + +Fixed Issues: + +* [#515](https://github.com/ckeditor/ckeditor-dev/issues/515): [Chrome] Fixed: Mouse actions on CKEditor scrollbar throw an exception when the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is loaded. +* [#493](https://github.com/ckeditor/ckeditor-dev/issues/493): Fixed: Selection started from a nested table causes an error in the browser while scrolling down. +* [#415](https://github.com/ckeditor/ckeditor-dev/issues/415): [Firefox] Fixed: Enter key breaks the table structure when pressed in a table selection. +* [#457](https://github.com/ckeditor/ckeditor-dev/issues/457): Fixed: Error thrown when deleting content from the editor with no selection. +* [#478](https://github.com/ckeditor/ckeditor-dev/issues/478): [Chrome] Fixed: Error thrown by the [Enter Key](https://ckeditor.com/cke4/addon/enterkey) plugin when pressing Enter with no selection. +* [#424](https://github.com/ckeditor/ckeditor-dev/issues/424): Fixed: Error thrown by [Tab Key Handling](https://ckeditor.com/cke4/addon/tab) and [Indent List](https://ckeditor.com/cke4/addon/indentlist) plugins when pressing Tab with no selection in inline editor. +* [#476](https://github.com/ckeditor/ckeditor-dev/issues/476): Fixed: Anchors inserted with the [Link](https://ckeditor.com/cke4/addon/link) plugin on collapsed selection cannot be edited. +* [#417](https://github.com/ckeditor/ckeditor-dev/issues/417): Fixed: The [Table Resize](https://ckeditor.com/cke4/addon/tableresize) plugin throws an error when used with a table with only header or footer rows. +* [#523](https://github.com/ckeditor/ckeditor-dev/issues/523): Fixed: The [`editor.getCommandKeystroke`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.editor-method-getCommandKeystroke) method does not obtain the correct keystroke. +* [#534](https://github.com/ckeditor/ckeditor-dev/issues/534): [IE] Fixed: [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) does not work in Quirks Mode. +* [#450](https://github.com/ckeditor/ckeditor-dev/issues/450): Fixed: [`CKEDITOR.filter`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.filter) incorrectly transforms the `margin` CSS property. + +## CKEditor 4.7 + +**Important Notes:** + +* [#13793](https://dev.ckeditor.com/ticket/13793): The [`embed_provider`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-embed_provider) configuration option for the [Media Embed](https://ckeditor.com/cke4/addon/embed) and [Semantic Media Embed](https://ckeditor.com/cke4/addon/embedsemantic) plugins is no longer preset by default. +* The [UI Color](https://ckeditor.com/cke4/addon/uicolor) plugin now uses a custom color picker instead of the `YUI 2.7.0` library which has some known vulnerabilities (it's a security precaution, there was no security issue in CKEditor due to the way it was used). + +New Features: + +* [#16755](https://dev.ckeditor.com/ticket/16755): Added the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin that lets you select and manipulate an arbitrary rectangular table fragment (a few cells, a row or a column). +* [#16961](https://dev.ckeditor.com/ticket/16961): Added support for pasting from Microsoft Excel. +* [#13381](https://dev.ckeditor.com/ticket/13381): Dynamic code evaluation call in [`CKEDITOR.template`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.template) removed. CKEditor can now be used without the `unsafe-eval` Content Security Policy. Thanks to [Caridy Patiño](http://caridy.name)! +* [#16971](https://dev.ckeditor.com/ticket/16971): Added support for color in the `background` property containing also other styles for table cells in the [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin. +* [#16847](https://dev.ckeditor.com/ticket/16847): Added support for parsing and inlining any formatting created using the Microsoft Word style system to the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#16818](https://dev.ckeditor.com/ticket/16818): Added table cell height parsing in the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#16850](https://dev.ckeditor.com/ticket/16850): Added a new [`config.enableContextMenu`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-enableContextMenu) configuration option for enabling and disabling the [context menu](https://ckeditor.com/cke4/addon/contextmenu). +* [#16937](https://dev.ckeditor.com/ticket/16937): The `command` parameter in [CKEDITOR.editor.getCommandKeystroke](http://docs.ckeditor.dev/#!/api/CKEDITOR.editor-method-getCommandKeystroke) now also accepts a command name as an argument. +* [#17010](https://dev.ckeditor.com/ticket/17010): The [`CKEDITOR.dom.range.shrink`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.range-method-shrink) method now allows for skipping bogus `
          ` elements. + +Fixed Issues: + +* [#16935](https://dev.ckeditor.com/ticket/16935): [Chrome] Fixed: Blurring the editor in [Source Mode](https://ckeditor.com/cke4/addon/sourcearea) throws an error. +* [#16825](https://dev.ckeditor.com/ticket/16825): [Chrome] Fixed: Error thrown when destroying a focused inline editor. +* [#16857](https://dev.ckeditor.com/ticket/16857): Fixed: Ctrl+Shift+V blocked by [Copy Formatting](https://ckeditor.com/cke4/addon/copyformatting). +* [#16845](https://dev.ckeditor.com/ticket/16845): [IE] Fixed: Cursor jumps to the top of the scrolled editor after focusing it when the [Copy Formatting](https://ckeditor.com/cke4/addon/copyformatting) plugin is enabled. +* [#16786](https://dev.ckeditor.com/ticket/16786): Fixed: Added missing translations for the [Copy Formatting](https://ckeditor.com/cke4/addon/copyformatting) plugin. +* [#14714](https://dev.ckeditor.com/ticket/14714): [WebKit/Blink] Fixed: Exception thrown on refocusing a blurred inline editor. +* [#16913](https://dev.ckeditor.com/ticket/16913): [Firefox, IE] Fixed: [Paste as Plain Text](https://ckeditor.com/cke4/addon/pastetext) keystroke does not work. +* [#16968](https://dev.ckeditor.com/ticket/16968): Fixed: [Safari] [Paste as Plain Text](https://ckeditor.com/cke4/addon/pastetext) is not handled by the editor. +* [#16912](https://dev.ckeditor.com/ticket/16912): Fixed: Exception thrown when a single image is pasted using [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16821](https://dev.ckeditor.com/ticket/16821): Fixed: Extraneous `` elements with `height` style stacked when [pasting from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16866](https://dev.ckeditor.com/ticket/16866): [IE, Edge] Fixed: Whitespaces not preserved when [pasting from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16860](https://dev.ckeditor.com/ticket/16860): Fixed: Paragraphs which only look like lists incorrectly transformed into them when [pasting from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16817](https://dev.ckeditor.com/ticket/16817): Fixed: When [pasting from Word](https://ckeditor.com/cke4/addon/pastefromword), paragraphs are transformed into lists with some corrupted data. +* [#16833](https://dev.ckeditor.com/ticket/16833): [IE11] Fixed: Malformed list with headers [pasted from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16826](https://dev.ckeditor.com/ticket/16826): [IE] Fixed: Superfluous paragraphs within lists [pasted from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#12465](https://dev.ckeditor.com/ticket/12465): Fixed: Cannot change the state of checkboxes or radio buttons if the properties dialog was invoked with a double-click. +* [#13062](https://dev.ckeditor.com/ticket/13062): Fixed: Impossible to unlink when the caret is at the edge of the link. +* [#13585](https://dev.ckeditor.com/ticket/13585): Fixed: Error when wrapping two adjacent `
          ` elements with a `
          `. +* [#16811](https://dev.ckeditor.com/ticket/16811): Fixed: Table alignment is not preserved by the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#16810](https://dev.ckeditor.com/ticket/16810): Fixed: Vertical align in tables is not supported by the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#11956](https://dev.ckeditor.com/ticket/11956): [Blink, IE] Fixed: [Link](https://ckeditor.com/cke4/addon/link) dialog does not open on a double click on the second word of the link with a background color or other styles. +* [#10472](https://dev.ckeditor.com/ticket/10472): Fixed: Unable to use [Table Resize](https://ckeditor.com/cke4/addon/tableresize) on table header and footer. +* [#14762](https://dev.ckeditor.com/ticket/14762): Fixed: Hovering over an empty table (without rows or cells) throws an error when the [Table Resize](https://ckeditor.com/cke4/addon/tableresize) plugin is active. +* [#16777](https://dev.ckeditor.com/ticket/16777): [Edge] Fixed: The [Clipboard](https://ckeditor.com/cke4/addon/clipboard) plugin does not allow to drop widgets into the editor. +* [#14894](https://dev.ckeditor.com/ticket/14894): [Chrome] Fixed: The editor scrolls to the top after focusing or when a dialog is opened. +* [#14769](https://dev.ckeditor.com/ticket/14769): Fixed: URLs with '-' in host are not detected by the [Auto Link](https://ckeditor.com/cke4/addon/autolink) plugin. +* [#16804](https://dev.ckeditor.com/ticket/16804): Fixed: Focus is not on the first menu item when the user opens a context menu or a drop-down list from the editor toolbar. +* [#14407](https://dev.ckeditor.com/ticket/14407): [IE] Fixed: Non-editable widgets can be edited. +* [#16927](https://dev.ckeditor.com/ticket/16927): Fixed: An error thrown if a bundle containing the [Color Button](https://ckeditor.com/cke4/addon/colorbutton) plugin is run in ES5 strict mode. Thanks to [Igor Rubinovich](https://github.com/IgorRubinovich)! +* [#16920](https://dev.ckeditor.com/ticket/16920): Fixed: Several plugins not using the [Dialog](https://ckeditor.com/cke4/addon/dialog) plugin as a direct dependency. +* [PR#336](https://github.com/ckeditor/ckeditor-dev/pull/336): Fixed: Typo in [`CKEDITOR.getCss`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR-method-getCss) API documentation. Thanks to [knusperpixel](https://github.com/knusperpixel)! +* [#17027](https://dev.ckeditor.com/ticket/17027): Fixed: Command event data should be initialized as an empty object. +* Fixed the behavior of HTML parser when parsing `src`/`srcdoc` attributes of the `