Explorar el Código

首页初次提交

Zhouzhendong hace 6 años
padre
commit
9b8ebaa40e
Se han modificado 100 ficheros con 740 adiciones y 6249 borrados
  1. 128 45
      app/Http/Controllers/ProcessController.php
  2. 13 22
      app/Http/Controllers/TestController.php
  3. 139 0
      app/Http/Controllers/TutorialController.php
  4. 5 14
      app/Process.php
  5. 9 6
      app/ProcessDailyParticipant.php
  6. 0 16
      app/ProcessesAdditionalBill.php
  7. 31 0
      app/ProcessesContent.php
  8. 16 2
      app/Tutorial.php
  9. 12 0
      app/TutorialContent.php
  10. 7 0
      bootstrap/cache/packages.php
  11. 14 12
      bootstrap/cache/services.php
  12. 1 1
      composer.json
  13. 62 54
      composer.lock
  14. 9 0
      config/laravel-trix.php
  15. 32 0
      database/migrations/2020_04_02_114453_change_process_daily_participant_table.php
  16. 41 0
      database/migrations/2020_04_03_150439_change_process_table.php
  17. 45 0
      database/migrations/2020_04_03_150514_change_process_contents_table.php
  18. 46 0
      database/migrations/2020_04_07_160948_create_trix_rich_texts_table.php
  19. 39 0
      database/migrations/2020_04_09_111337_add_tutorial_authority.php
  20. 32 0
      database/migrations/2020_04_09_111539_change_tutorial_table.php
  21. 54 2
      package-lock.json
  22. BIN
      public/audio.mp3
  23. 5 0
      public/css/app.css
  24. 0 40
      public/laravel-u-editor/dialogs/anchor/anchor.html
  25. 0 681
      public/laravel-u-editor/dialogs/attachment/attachment.css
  26. 0 60
      public/laravel-u-editor/dialogs/attachment/attachment.html
  27. 0 754
      public/laravel-u-editor/dialogs/attachment/attachment.js
  28. BIN
      public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_chm.gif
  29. BIN
      public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_default.png
  30. BIN
      public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_doc.gif
  31. BIN
      public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_exe.gif
  32. BIN
      public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_jpg.gif
  33. BIN
      public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_mp3.gif
  34. BIN
      public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_mv.gif
  35. BIN
      public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_pdf.gif
  36. BIN
      public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_ppt.gif
  37. BIN
      public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_psd.gif
  38. BIN
      public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_rar.gif
  39. BIN
      public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_txt.gif
  40. BIN
      public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_xls.gif
  41. BIN
      public/laravel-u-editor/dialogs/attachment/images/alignicon.gif
  42. BIN
      public/laravel-u-editor/dialogs/attachment/images/alignicon.png
  43. BIN
      public/laravel-u-editor/dialogs/attachment/images/bg.png
  44. BIN
      public/laravel-u-editor/dialogs/attachment/images/file-icons.gif
  45. BIN
      public/laravel-u-editor/dialogs/attachment/images/file-icons.png
  46. BIN
      public/laravel-u-editor/dialogs/attachment/images/icons.gif
  47. BIN
      public/laravel-u-editor/dialogs/attachment/images/icons.png
  48. BIN
      public/laravel-u-editor/dialogs/attachment/images/image.png
  49. BIN
      public/laravel-u-editor/dialogs/attachment/images/progress.png
  50. BIN
      public/laravel-u-editor/dialogs/attachment/images/success.gif
  51. BIN
      public/laravel-u-editor/dialogs/attachment/images/success.png
  52. 0 94
      public/laravel-u-editor/dialogs/background/background.css
  53. 0 56
      public/laravel-u-editor/dialogs/background/background.html
  54. 0 376
      public/laravel-u-editor/dialogs/background/background.js
  55. BIN
      public/laravel-u-editor/dialogs/background/images/bg.png
  56. BIN
      public/laravel-u-editor/dialogs/background/images/success.png
  57. 0 65
      public/laravel-u-editor/dialogs/charts/chart.config.js
  58. 0 165
      public/laravel-u-editor/dialogs/charts/charts.css
  59. 0 89
      public/laravel-u-editor/dialogs/charts/charts.html
  60. 0 519
      public/laravel-u-editor/dialogs/charts/charts.js
  61. BIN
      public/laravel-u-editor/dialogs/charts/images/charts0.png
  62. BIN
      public/laravel-u-editor/dialogs/charts/images/charts1.png
  63. BIN
      public/laravel-u-editor/dialogs/charts/images/charts2.png
  64. BIN
      public/laravel-u-editor/dialogs/charts/images/charts3.png
  65. BIN
      public/laravel-u-editor/dialogs/charts/images/charts4.png
  66. BIN
      public/laravel-u-editor/dialogs/charts/images/charts5.png
  67. 0 43
      public/laravel-u-editor/dialogs/emotion/emotion.css
  68. 0 54
      public/laravel-u-editor/dialogs/emotion/emotion.html
  69. 0 186
      public/laravel-u-editor/dialogs/emotion/emotion.js
  70. BIN
      public/laravel-u-editor/dialogs/emotion/images/0.gif
  71. BIN
      public/laravel-u-editor/dialogs/emotion/images/bface.gif
  72. BIN
      public/laravel-u-editor/dialogs/emotion/images/cface.gif
  73. BIN
      public/laravel-u-editor/dialogs/emotion/images/fface.gif
  74. BIN
      public/laravel-u-editor/dialogs/emotion/images/jxface2.gif
  75. BIN
      public/laravel-u-editor/dialogs/emotion/images/neweditor-tab-bg.png
  76. BIN
      public/laravel-u-editor/dialogs/emotion/images/tface.gif
  77. BIN
      public/laravel-u-editor/dialogs/emotion/images/wface.gif
  78. BIN
      public/laravel-u-editor/dialogs/emotion/images/yface.gif
  79. 0 89
      public/laravel-u-editor/dialogs/gmap/gmap.html
  80. 0 7
      public/laravel-u-editor/dialogs/help/help.css
  81. 0 82
      public/laravel-u-editor/dialogs/help/help.html
  82. 0 56
      public/laravel-u-editor/dialogs/help/help.js
  83. 0 894
      public/laravel-u-editor/dialogs/image/image.css
  84. 0 120
      public/laravel-u-editor/dialogs/image/image.html
  85. 0 1025
      public/laravel-u-editor/dialogs/image/image.js
  86. BIN
      public/laravel-u-editor/dialogs/image/images/alignicon.jpg
  87. BIN
      public/laravel-u-editor/dialogs/image/images/bg.png
  88. BIN
      public/laravel-u-editor/dialogs/image/images/icons.gif
  89. BIN
      public/laravel-u-editor/dialogs/image/images/icons.png
  90. BIN
      public/laravel-u-editor/dialogs/image/images/image.png
  91. BIN
      public/laravel-u-editor/dialogs/image/images/progress.png
  92. BIN
      public/laravel-u-editor/dialogs/image/images/success.gif
  93. BIN
      public/laravel-u-editor/dialogs/image/images/success.png
  94. 0 98
      public/laravel-u-editor/dialogs/insertframe/insertframe.html
  95. 0 81
      public/laravel-u-editor/dialogs/internal.js
  96. 0 126
      public/laravel-u-editor/dialogs/link/link.html
  97. 0 135
      public/laravel-u-editor/dialogs/map/map.html
  98. 0 118
      public/laravel-u-editor/dialogs/map/show.html
  99. 0 30
      public/laravel-u-editor/dialogs/music/music.css
  100. 0 32
      public/laravel-u-editor/dialogs/music/music.html

+ 128 - 45
app/Http/Controllers/ProcessController.php

@@ -2,20 +2,19 @@
 
 namespace App\Http\Controllers;
 
-use App\Commodity;
 use App\Exports\WaybillExport;
 use App\Owner;
 use App\Process;
 use App\ProcessDaily;
 use App\ProcessDailyParticipant;
-use App\User;
+use App\Tutorial;
 use App\UserDetail;
 use App\UserDutyCheck;
-use App\UserLabor;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Validator;
 use Maatwebsite\Excel\Facades\Excel;
@@ -56,7 +55,7 @@ class ProcessController extends Controller
     public function index(Request $request)
     {
         if(!Gate::allows('二次加工管理-查询')){ return redirect(url('/'));  }
-        $processes=Process::with('tutorials')->orderBy('processes.id','DESC');
+        $processes=Process::with(['tutorials','processesContents'])->orderBy('processes.id','DESC');
         if ($request->input('checkSign')){
             $excel=$this->isExport($request,$processes);
             return $excel;
@@ -104,46 +103,54 @@ class ProcessController extends Controller
         foreach ($processDailies as $processDaily){
             $date=$processDaily->date;
             foreach ($processDaily->processDailyParticipants as $processDailyParticipant){
-                $user=$processDailyParticipant->user_id;
-                $userDutyCheckStart=UserDutyCheck::select('id','checked_at')->where('user_id',$user)
-                    ->where('checked_at','like',$date.'%')->where('type','登入')->orderBy('id')->first();
-                $userDutyCheckEnd=UserDutyCheck::select('id','checked_at')->where('user_id',$user)
-                    ->where('checked_at','like',$date.'%')->where('type','登出')->orderBy('id','desc')->first();
-                //跨日情况寻找下一天
-                if (!$userDutyCheckEnd){
-                    $date=date("Y-m-d",strtotime("+1 day",strtotime($date)));
-                    $userDutyCheckEnd=UserDutyCheck::select('id','checked_at')->where('user_id',$user)
-                        ->where('checked_at','like',$date.'%')->where('type','登出')->orderBy('id','desc')->first();
-                }
-                if (!$userDutyCheckStart || !$userDutyCheckEnd){
-                    continue;
-                }
-                $dateStart=Carbon::parse($userDutyCheckStart->checked_at);
-                $dateEnd=Carbon::parse($userDutyCheckEnd->checked_at);
-                $hour=($dateEnd->diffInSeconds($dateStart))/3600; //打卡工时
-                if ($processDailyParticipant->dinner_duration)$hour=$hour-(($processDailyParticipant->dinner_duration)/60); //减晚饭时间
-                $hour=$this->isHour($userDutyCheckStart,$hour); //去除休息时间
-                $processDailyParticipant->hour=round($hour,2);
-                if ($hour&&$processDailyParticipant->hour_count){
-                    $diff=abs(round($processDailyParticipant->hour_count-$hour,2));
-                    $processDailyParticipant->diff=$diff;
-                }
-                //计件工
-                if ($processDailyParticipant->unit_price){
-                    continue;
-                }
-                if ($hour&&$hour>8){
-                    $processDailyParticipant->billingHour=8;
-                    continue;
-                }
-                if ($hour&&$hour<=8){
-                    $processDailyParticipant->billingHour=round($hour,2);
-                }
+                $processDailyParticipant->started_at=Carbon::parse($processDailyParticipant->started_at)->format('H:i');
+                $processDailyParticipant->ended_at=Carbon::parse($processDailyParticipant->ended_at)->format('H:i');
+                $processDailyParticipant=$this->countParticipantManHour($processDailyParticipant,$date);
             }
         }
         return $processDailies;
     }
 
+    //计算单参与人工时信息
+    public function countParticipantManHour($processDailyParticipant,$date){
+        $user=$processDailyParticipant->user_id;
+        $userDutyCheckStart=UserDutyCheck::select('id','checked_at')->where('user_id',$user)
+            ->where('checked_at','like',$date.'%')->where('type','登入')->orderBy('id')->first();
+        $userDutyCheckEnd=UserDutyCheck::select('id','checked_at')->where('user_id',$user)
+            ->where('checked_at','like',$date.'%')->where('type','登出')->orderBy('id','desc')->first();
+        //跨日情况寻找下一天
+        if (!$userDutyCheckEnd){
+            $date=date("Y-m-d",strtotime("+1 day",strtotime($date)));
+            $userDutyCheckEnd=UserDutyCheck::select('id','checked_at')->where('user_id',$user)
+                ->where('checked_at','like',$date.'%')->where('type','登出')->orderBy('id','desc')->first();
+        }
+        if (!$userDutyCheckStart || !$userDutyCheckEnd){
+            return $processDailyParticipant;
+        }
+        $dateStart=Carbon::parse($userDutyCheckStart->checked_at);
+        $dateEnd=Carbon::parse($userDutyCheckEnd->checked_at);
+        $hour=($dateEnd->diffInSeconds($dateStart))/3600; //打卡工时
+        if ($processDailyParticipant->dinner_duration)$hour=$hour-(($processDailyParticipant->dinner_duration)/60); //减晚饭时间
+        $hour=$this->isHour($userDutyCheckStart,$hour); //去除休息时间
+        $processDailyParticipant->hour=round($hour,2);
+        if ($hour&&$processDailyParticipant->hour_count){
+            $diff=abs(round($processDailyParticipant->hour_count-$hour,2));
+            $processDailyParticipant->diff=$diff;
+        }
+        //计件工
+        if ($processDailyParticipant->unit_price){
+            return $processDailyParticipant;
+        }
+        if ($hour&&$hour>8){
+            $processDailyParticipant->billingHour=8;
+            return $processDailyParticipant;
+        }
+        if ($hour&&$hour<=8){
+            $processDailyParticipant->billingHour=round($hour,2);
+        }
+        return $processDailyParticipant;
+    }
+
     //打卡工时减休息时间
     public function isHour($userDutyCheckStart,$hour){
 
@@ -246,13 +253,13 @@ class ProcessController extends Controller
         $user_id=$request->input('user_id');
         $started_at=$request->input('started_at');
         $ended_at=$request->input('ended_at');
+        $daily_id=$request->input('daily_id');
+        $hour_count=$request->input('hour_count');
+        $unit_count=$request->input('unit_count');
         $hour_price=$request->input('hour_price');
         $unit_price=$request->input('unit_price');
         $dinner_duration=$request->input('dinner_duration');
-        $hour_count=$request->input('hour_count');
-        $unit_count=$request->input('unit_count');
         $remark=$request->input('remark');
-        $daily_id=$request->input('daily_id');
         $processDailyParticipant=new ProcessDailyParticipant([
             'process_daily_id'=>$daily_id,
             'user_id'=>$user_id,
@@ -267,6 +274,9 @@ class ProcessController extends Controller
         ]);
         $processDailyParticipant->save();
         $this->log(__METHOD__,"添加新参与人".__FUNCTION__,json_encode($processDailyParticipant),Auth::user()['id']);
+        $processDaily=ProcessDaily::select('date')->find($daily_id);
+        $date=$processDaily->date;
+        $processDailyParticipant=$this->countParticipantManHour($processDailyParticipant,$date);
         return ['status'=>"success",'data'=>$processDailyParticipant];
     }
 
@@ -294,6 +304,77 @@ class ProcessController extends Controller
         if (!$userDetails)return;
         return $userDetails;
     }
+    //修改参与人
+    public function updateProcessDailyParticipant(Request $request){
+        if(!Gate::allows('二次加工管理-登记工时')){ return redirect(url('/'));  }
+        $id=$request->input('id');
+        if (!$id) return ['status'=>"error",'data'=>"修改失败,ID未传递"];
+        $errors=$this->validatorProcessDailyParticipant($request)->errors();
+        if (count($errors)>0)return ['status'=>"error",'data'=>$errors];
+        $processDailyParticipant=ProcessDailyParticipant::with('process_daily')->find($id);
+        if (!$processDailyParticipant || ! $processDailyParticipant->process_daily) return ['status'=>"error",'data'=>"修改失败,该信息不存在"];
+        $processDailyParticipant->user_id=$request->input('user_id');
+        $processDailyParticipant->started_at=$request->input('started_at');
+        $processDailyParticipant->ended_at=$request->input('ended_at');
+        $processDailyParticipant->hour_count=$request->input('hour_count');
+        $processDailyParticipant->unit_count=$request->input('unit_count');
+        $processDailyParticipant->hour_price=$request->input('hour_price');
+        $processDailyParticipant->unit_price=$request->input('unit_price');
+        $processDailyParticipant->dinner_duration=$request->input('dinner_duration');
+        $processDailyParticipant->remark=$request->input('remark');
+        $processDailyParticipant->update();
+        $this->log(__METHOD__,"修改参与人".__FUNCTION__,json_encode($processDailyParticipant),Auth::user()['id']);
+        $processDailyParticipant=$this->countParticipantManHour($processDailyParticipant,$processDailyParticipant->process_daily->date);
+        return ['status'=>"success",'data'=>$processDailyParticipant];
+    }
+    //参与人审核
+    public function processDailyParticipantAudit($id){
+        if(!Gate::allows('二次加工管理-登记工时-审核')){ return redirect(url('/'));  }
+        $processDailyParticipant=ProcessDailyParticipant::select('id','status')->find($id);
+        if (!$processDailyParticipant) return ['success'=>'false'];
+        $processDailyParticipant->status='已审核';
+        $processDailyParticipant->update();
+        $this->log(__METHOD__,"登记工时参与人审核".__FUNCTION__,json_encode($processDailyParticipant),Auth::user()['id']);
+        return ['success'=>'true','processDailyParticipant'=>$processDailyParticipant];
+    }
+    //临时工详情
+    public function showUserDetail(Request $request){
+        $id=$request->input('user_id');
+        $userDetail=UserDetail::with('user_labor')->find($id);
+        if (!$userDetail) return ['success'=>'false'];
+        return ['success'=>'true','userDetail'=>$userDetail];
+    }
+    //获取全部教程
+    public function getTutorials($id){
+        $process=Process::with('tutorials')->find($id);
+        $tutorials_id=[];
+        if ($process->tutorials){
+            foreach ($process->tutorials as $tutorial){
+                array_push($tutorials_id,$tutorial->id);
+            }
+        }
+        $tutorials=Tutorial::where('owner_id',$process->owner_id)->get();
+        if ($tutorials_id && $tutorials) $tutorials=$tutorials->diff(Tutorial::whereIn('id',$tutorials_id)->get());
+        return ['success'=>'true','data'=>$tutorials];
+    }
+    //添加教程关联
+    public function selectedTutorial(Request $request){
+        $process_id=$request->input('process_id');
+        $tutorial_id=$request->input('tutorial_id');
+        if (!$process_id || !$tutorial_id) return ['success'=>'false','data'=>'二次加工或教程传递错误!'];
+        $tutorial=Tutorial::find($tutorial_id);
+        if (!$tutorial)return ['success'=>'false','data'=>'未找到相关教程!'];
+        $tutorial->processes()->syncWithoutDetaching([$process_id]);
+        return ['success'=>'true','data'=>$tutorial];
+    }
+    //删除教程关联
+    public function deleteTutorial(Request $request){
+        $process_id=$request->input('process_id');
+        $tutorial_id=$request->input('tutorial_id');
+        if (!$process_id || !$tutorial_id) return ['success'=>'false','data'=>'二次加工或教程传递错误!'];
+        DB::table('process_tutorial')->where('process_id',$process_id)->where('tutorial_id',$tutorial_id)->delete();
+        return ['success'=>'true'];
+    }
     /**
      * Show the form for creating a new resource.
      *
@@ -301,7 +382,7 @@ class ProcessController extends Controller
      */
     public function create()
     {
-        //
+        return view('process/create');
     }
 
     /**
@@ -420,14 +501,15 @@ class ProcessController extends Controller
     //参与人信息校验
     public function validatorProcessDailyParticipant(Request $request){
         $validator=Validator::make($request->input(),[
+            'daily_id'=>'filled',
             'user_id'=>'required',
             'started_at'=>'required|date_format:H:i',
             'ended_at'=>'required|date_format:H:i',
             'hour_price'=>'required_without:unit_price|min:0|max:999999|numeric',
             'unit_price'=>'required_without:hour_price|min:0|max:999999|numeric',
             'dinner_duration'=>'nullable|integer',
-            'hour_count'=>'required_without:hour_price|min:0|max:999999|numeric',
-            'unit_count'=>'required_without:unit_price|min:0|max:999999|numeric',
+            'hour_count'=>'required_with:hour_price|min:0|max:999999|numeric',
+            'unit_count'=>'required_with:unit_price|min:0|max:999999|numeric',
             'remark'=>'nullable',
         ],[
             'required'=>':attribute 不应为空',
@@ -438,6 +520,7 @@ class ProcessController extends Controller
             'date_format'=>':attribute 格式错误',
             'integer'=>':attribute 选择错误',
         ],[
+            'daily_id'=>'所属每日单',
             'user_id'=>'参与人',
             'started_at'=>'开始时间',
             'ended_at'=>'结束时间',

+ 13 - 22
app/Http/Controllers/TestController.php

@@ -15,11 +15,14 @@ use App\Logistic;
 use App\MeasuringMachine;
 use App\Order;
 use App\Package;
+use App\Process;
 use App\ProcessDaily;
+use App\ProcessDailyParticipant;
 use App\Rejected;
 use App\RejectedBill;
 use App\RejectedBillItem;
 use App\Role;
+use App\Tutorial;
 use App\User;
 use App\UserDetail;
 use App\UserDutyCheck;
@@ -28,6 +31,7 @@ use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
+use Te7aHoudini\LaravelTrix\Models\TrixAttachment;
 use Zttp\Zttp;
 
 class TestController extends Controller
@@ -132,30 +136,17 @@ class TestController extends Controller
         });
     }
 
-    public function test1(){
-  /*      $a=Package::orderBy('id')->first();
+    public function test1(Request $request){
+/*        $attachment = TrixAttachment::where('attachment', basename('yHHxWX8Hujm3Smf2aBAUnYzHHCpgerpn1GKiIazm.png'))->first();
 
-        $date=date("Y-m-d",strtotime("+1 day",strtotime($a->created_at->format('Y-m-d'))));
-        dd($a->created_at->format('Y-m-d'));
+        dd(response()->json(optional($attachment)->purge()));*/
 
-        $b=Package::orderBy('id','desc')->first();
-        $sf=$a->created_at->format('Y-m-d');dd((int)$sf);
-        $result=$sf->lte("11:00");
+        //$a=Process::with('tutorials')->find(1);
+        //$a->tutorials()->syncWithoutDetaching([25]);
+        $tutorials=Tutorial::with('owner')->where('owner_id',2)->get();
+        $tutorials=$tutorials->except([27]);
+        echo ini_get('post_max_size');
+        dd();
 
-        $c=Carbon::parse("9:10:05");
-        $d=Carbon::parse("18:01:20");
-        $x=($d->diffInSeconds($c))/3600;
-        dd($c,$d,round($x,2)-1);*/
-/*        $userDutyCheckStart=UserDutyCheck::select('id','checked_at')->where('user_id',1)
-            ->where('checked_at','like','2020-03-13%')->where('type','登入')->orderBy('id')->first();
-        $today=Carbon::now()->format('Y-m-d');
-        $date=date("Y-m-d",strtotime('+'.strval(5)." day",strtotime($today)));
-        $startDate=Carbon::parse("2020-03-31");
-        $diffDay=$startDate->diffInDays($today,true);
-        $processDailies=ProcessDaily::with(['processDailyParticipants','process'])
-            ->where('date','>=','2020-03-25')->get();*/
-        $package=Package::orderBy('updated_at','DESC')->get();
-        $t=UserDetail::with('user_labor')->find(5);
-        dd($t);
     }
 }

+ 139 - 0
app/Http/Controllers/TutorialController.php

@@ -0,0 +1,139 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Owner;
+use App\Tutorial;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Gate;
+use Illuminate\Support\Facades\Validator;
+use Te7aHoudini\LaravelTrix\Models\TrixAttachment;
+use Te7aHoudini\LaravelTrix\Models\TrixRichText;
+
+class TutorialController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        $tutorials=Tutorial::select('id','owner_id','name','type','created_at')->paginate(50);
+        return view('maintenance.tutorial.index',['tutorials'=>$tutorials]);
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function create()
+    {
+        $owners=Owner::get();
+        return view('maintenance.tutorial.create',['owners'=>$owners]);
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        if(!Gate::allows('教程-录入')){ return redirect(url('/'));  }
+        $this->validator($request)->validate();
+        $tutorial=Tutorial::create(['owner_id'=>$request->input('owner_id'),'name'=>$request->input('name')]);
+        $tutorial['tutorial-trixFields']=request('tutorial-trixFields');
+        $tutorial['attachment-tutorial-trixFields']=request('attachment-tutorial-trixFields');
+        $tutorial->save();
+        return redirect('maintenance/tutorial')->with('successTip','新教程“'.$request->input('name').'”添加成功');
+    }
+
+    //展示教程内容
+    public function showContent($id){
+        if(!Gate::allows('教程-查询')){ return redirect(url('/'));  }
+        $tutorial=Tutorial::with('trixRichText')->find($id);
+        if ($tutorial&&$tutorial->trixRichText)return ['success'=>'true','data'=>$tutorial->trixRichText->content];
+        return ['success'=>'false'];
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function show($id)
+    {
+
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function edit($id)
+    {
+        if(!Gate::allows('教程-编辑')){ return redirect(url('/'));  }
+        $tutorial=Tutorial::with('trixRichText')->find($id);
+        $owners=Owner::get();
+        return view('maintenance.tutorial.edit',['owners'=>$owners,'tutorial'=>$tutorial]);
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, $id)
+    {
+        if(!Gate::allows('教程-编辑')){ return redirect(url('/'));  }
+        $this->validator($request)->validate();
+        $tutorial=Tutorial::find($id);
+        $tutorial->owner_id=$request->input('owner_id');
+        $tutorial->name=$request->input('name');
+        $tutorial['tutorial-trixFields']=request('tutorial-trixFields');
+        $tutorial['attachment-tutorial-trixFields']=request('attachment-tutorial-trixFields');
+        $tutorial->update();
+        return redirect('maintenance/tutorial')->with('successTip','教程“'.$request->input('name').'”修改成功');
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy($id)
+    {
+        if(!Gate::allows('教程-删除')){ return redirect(url('/'));  }
+        $tutorial=Tutorial::find($id);
+        $tutorial->delete();
+        TrixRichText::where('model_id',$id)->delete();
+        $attachments = TrixAttachment::where('attachable_id', $id)->get();
+        foreach ($attachments as $attachment){
+            optional($attachment)->purge();
+        }
+        return ['success'=>'true'];
+    }
+
+    public function validator(Request $request){
+        $validator=Validator::make($request->input(),[
+            'name'=>['required','max:50'],
+            'owner_id'=>['required','integer'],
+        ],[
+            'required'=>':attribute 为必填项',
+            'max'=>':attribute 输入过长',
+        ],[
+            'name'=>'标题',
+            'owner_id'=>'货主',
+        ]);
+        return $validator;
+    }
+}

+ 5 - 14
app/Process.php

@@ -7,11 +7,10 @@ use Illuminate\Database\Eloquent\Model;
 class Process extends Model
 {
     protected $fillable=[
-        'code','owner_id','bill_type','wms_code','process_method_id','operation_code',
-        'unit_price','status','commodity_id','amount','completed_amount','remark','created_at','updated_at'
+        'code','owner_id','process_method_id','unit_price','status','remark','amount','completed_amount','created_at','updated_at'
     ];
     protected $appends=[
-        'owner_name','process_method_name','commodity_name','commodity_barcode'
+        'owner_name','process_method_name',
     ];
 
     public function owner(){
@@ -20,12 +19,12 @@ class Process extends Model
     public function processMethod(){
         return $this->belongsTo('App\ProcessMethod','process_method_id','id');
     }
-    public function commodity(){
-        return $this->belongsTo('App\Commodity','commodity_id','id');
-    }
     public function tutorials(){
         return $this->belongsToMany('App\Tutorial','process_tutorial','process_id','tutorial_id');
     }
+    public function processesContents(){
+        return $this->hasMany('App\ProcessesContent','process_id','id');
+    }
 
 
     public function getOwnerNameAttribute()
@@ -36,12 +35,4 @@ class Process extends Model
     {
         return $this['processMethod']? $this['processMethod']['name']:null;
     }
-    public function getCommodityNameAttribute()
-    {
-        return $this['commodity']? $this['commodity']['name']:null;
-    }
-    public function getCommodityBarcodeAttribute()
-    {
-        return $this['commodity']? $this['commodity']['barcode']:null;
-    }
 }

+ 9 - 6
app/ProcessDailyParticipant.php

@@ -8,19 +8,22 @@ class ProcessDailyParticipant extends Model
 {
     protected $fillable=[
         'process_daily_id','user_id','started_at','ended_at','hour_price',
-        'hour_count','unit_price','unit_count','dinner_duration','remark'
+        'hour_count','unit_price','unit_count','dinner_duration','remark','status'
     ];
     protected $appends=[
-        'user_name'
+        'user_detail_full_name'
     ];
 
-    public function user(){
-        return $this->belongsTo('App\User','user_id','id');
+    public function user_detail(){
+        return $this->belongsTo('App\UserDetail','user_id','user_id');
+    }
+    public function process_daily(){
+        return $this->belongsTo('App\ProcessDaily','process_daily_id','id');
     }
 
 
-    public function getUserNameAttribute()
+    public function getUserDetailFullNameAttribute()
     {
-        return $this['user']?$this['user']['name']:null;
+        return $this['user_detail']?$this['user_detail']['full_name']:null;
     }
 }

+ 0 - 16
app/ProcessesAdditionalBill.php

@@ -1,16 +0,0 @@
-<?php
-
-namespace App;
-
-use Illuminate\Database\Eloquent\Model;
-
-class ProcessesAdditionalBill extends Model
-{
-    protected $fillable=[
-        'process_id','wms_code','bill_type','amount'
-    ];
-
-    public function process(){
-        return $this->belongsTo('App\Process','process_id','id');
-    }
-}

+ 31 - 0
app/ProcessesContent.php

@@ -0,0 +1,31 @@
+<?php
+
+namespace App;
+
+use Illuminate\Database\Eloquent\Model;
+
+class ProcessesContent extends Model
+{
+    protected $fillable=[
+        'process_id','bill_type','commodity_id','wms_code','amount'
+    ];
+    protected $appends=[
+        'commodity_name','commodity_barcode',
+    ];
+
+    public function process(){
+        return $this->belongsTo('App\Process','process_id','id');
+    }
+    public function commodity(){
+        return $this->belongsTo('App\Commodity','commodity_id','id');
+    }
+
+    public function getCommodityNameAttribute()
+    {
+        return $this['commodity']? $this['commodity']['name']:null;
+    }
+    public function getCommodityBarcodeAttribute()
+    {
+        return $this['commodity']? $this['commodity']['barcode']:null;
+    }
+}

+ 16 - 2
app/Tutorial.php

@@ -3,11 +3,15 @@
 namespace App;
 
 use Illuminate\Database\Eloquent\Model;
+use Te7aHoudini\LaravelTrix\Traits\HasTrixRichText;
 
 class Tutorial extends Model
 {
+    use HasTrixRichText;
+    protected $guarded=[];
+
     protected $fillable=[
-        'owner_id','name','content','type'
+        'owner_id','name','type'
     ];
     protected $appends=[
         'owner_name'
@@ -16,9 +20,19 @@ class Tutorial extends Model
     public function owner(){
         return $this->belongsTo('App\Owner','owner_id','id');
     }
+    public function trixRichText(){
+        return $this->belongsTo('Te7aHoudini\LaravelTrix\Models\TrixRichText','id','model_id');
+    }
+    public function trixAttachments()
+    {
+        return $this->hasMany('Te7aHoudini\LaravelTrix\Models\TrixAttachment','attachable_id','id');
+    }
+    public function processes(){
+        return $this->belongsToMany('App\Process');
+    }
 
     public function getOwnerNameAttribute()
     {
-        $this['owner']? $this['owner']['name']:null;
+        return $this['owner']? $this['owner']['name']:null;
     }
 }

+ 12 - 0
app/TutorialContent.php

@@ -0,0 +1,12 @@
+<?php
+
+namespace App;
+
+use Illuminate\Database\Eloquent\Model;
+use Te7aHoudini\LaravelTrix\Traits\HasTrixRichText;
+
+class TutorialContent extends Model
+{
+    use HasTrixRichText;
+    protected $guarded=[];
+}

+ 7 - 0
bootstrap/cache/packages.php

@@ -67,4 +67,11 @@
       'Pinyin' => 'Overtrue\\LaravelPinyin\\Facades\\Pinyin',
     ),
   ),
+  'te7a-houdini/laravel-trix' => 
+  array (
+    'providers' => 
+    array (
+      0 => 'Te7aHoudini\\LaravelTrix\\LaravelTrixServiceProvider',
+    ),
+  ),
 );

+ 14 - 12
bootstrap/cache/services.php

@@ -31,12 +31,13 @@
     27 => 'Carbon\\Laravel\\ServiceProvider',
     28 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
     29 => 'Overtrue\\LaravelPinyin\\ServiceProvider',
-    30 => 'Stevenyangecho\\UEditor\\UEditorServiceProvider',
-    31 => 'App\\Providers\\AppServiceProvider',
-    32 => 'App\\Providers\\AuthServiceProvider',
-    33 => 'App\\Providers\\BroadcastServiceProvider',
-    34 => 'App\\Providers\\EventServiceProvider',
-    35 => 'App\\Providers\\RouteServiceProvider',
+    30 => 'Te7aHoudini\\LaravelTrix\\LaravelTrixServiceProvider',
+    31 => 'Stevenyangecho\\UEditor\\UEditorServiceProvider',
+    32 => 'App\\Providers\\AppServiceProvider',
+    33 => 'App\\Providers\\AuthServiceProvider',
+    34 => 'App\\Providers\\BroadcastServiceProvider',
+    35 => 'App\\Providers\\EventServiceProvider',
+    36 => 'App\\Providers\\RouteServiceProvider',
   ),
   'eager' => 
   array (
@@ -55,12 +56,13 @@
     12 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
     13 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
     14 => 'Carbon\\Laravel\\ServiceProvider',
-    15 => 'Stevenyangecho\\UEditor\\UEditorServiceProvider',
-    16 => 'App\\Providers\\AppServiceProvider',
-    17 => 'App\\Providers\\AuthServiceProvider',
-    18 => 'App\\Providers\\BroadcastServiceProvider',
-    19 => 'App\\Providers\\EventServiceProvider',
-    20 => 'App\\Providers\\RouteServiceProvider',
+    15 => 'Te7aHoudini\\LaravelTrix\\LaravelTrixServiceProvider',
+    16 => 'Stevenyangecho\\UEditor\\UEditorServiceProvider',
+    17 => 'App\\Providers\\AppServiceProvider',
+    18 => 'App\\Providers\\AuthServiceProvider',
+    19 => 'App\\Providers\\BroadcastServiceProvider',
+    20 => 'App\\Providers\\EventServiceProvider',
+    21 => 'App\\Providers\\RouteServiceProvider',
   ),
   'deferred' => 
   array (

+ 1 - 1
composer.json

@@ -21,7 +21,7 @@
         "overtrue/laravel-pinyin": "^4.0",
         "predis/predis": "^1.1",
         "pusher/pusher-php-server": "^4.1",
-        "stevenyangecho/laravel-u-editor": "^1.4"
+        "te7a-houdini/laravel-trix": "^2.0"
     },
     "require-dev": {
         "barryvdh/laravel-debugbar": "^3.2",

+ 62 - 54
composer.lock

@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "e213adf93c2f49579b7c6497bb27f33b",
+    "content-hash": "e22b4feb8c41b821065d6aa4fecd20be",
     "packages": [
         {
             "name": "dnoegel/php-xdg-base-dir",
@@ -941,6 +941,7 @@
                     "email": "jakub.onderka@gmail.com"
                 }
             ],
+            "abandoned": "php-parallel-lint/php-console-color",
             "time": "2018-09-29T17:23:10+00:00"
         },
         {
@@ -993,6 +994,7 @@
                 }
             ],
             "description": "Highlight PHP code in terminal",
+            "abandoned": "php-parallel-lint/php-console-highlighter",
             "time": "2018-09-29T18:48:56+00:00"
         },
         {
@@ -2905,59 +2907,6 @@
             ],
             "time": "2018-07-19T23:38:55+00:00"
         },
-        {
-            "name": "stevenyangecho/laravel-u-editor",
-            "version": "v1.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/stevenyangecho/laravel-u-editor.git",
-                "reference": "975b32cdbf999db4fde619da13a6daae0be12361"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/stevenyangecho/laravel-u-editor/zipball/975b32cdbf999db4fde619da13a6daae0be12361",
-                "reference": "975b32cdbf999db4fde619da13a6daae0be12361",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "ext-fileinfo": "*",
-                "illuminate/support": "5.*",
-                "php": ">=5.4.0",
-                "qiniu/php-sdk": "7.*"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Stevenyangecho\\UEditor\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Steven Yang",
-                    "email": "yqmking@163.com"
-                }
-            ],
-            "description": "UEditor for laravel5. Support i18n. UEditor is a Rich Text Web Editor From Baidu.",
-            "keywords": [
-                "laravel",
-                "laravel-u-editor",
-                "laravel5 web text editor",
-                "steven yang",
-                "stevenyangecho",
-                "ueditor"
-            ],
-            "time": "2019-07-03T05:13:55+00:00"
-        },
         {
             "name": "swiftmailer/swiftmailer",
             "version": "v6.2.1",
@@ -4462,6 +4411,65 @@
             ],
             "time": "2019-10-04T19:48:13+00:00"
         },
+        {
+            "name": "te7a-houdini/laravel-trix",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Te7a-Houdini/laravel-trix.git",
+                "reference": "495c4637eafc549a3933f9d9d11f4703e9b75967"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Te7a-Houdini/laravel-trix/zipball/495c4637eafc549a3933f9d9d11f4703e9b75967",
+                "reference": "495c4637eafc549a3933f9d9d11f4703e9b75967",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "laravel/framework": "~5.8.0|~6.0|~7.0",
+                "php": "^7.1"
+            },
+            "require-dev": {
+                "orchestra/testbench": "^3.5|~4.0|~5.0"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Te7aHoudini\\LaravelTrix\\LaravelTrixServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Te7aHoudini\\LaravelTrix\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ahmed Abd El Ftah",
+                    "email": "ahmedabdelftah95165@gmail.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "trix editor for laravel inspired by ActionText for rails",
+            "homepage": "https://github.com/te7ahoudini/laravel-trix",
+            "keywords": [
+                "laravel-trix",
+                "te7a-houdini"
+            ],
+            "time": "2020-03-06T15:33:35+00:00"
+        },
         {
             "name": "tightenco/collect",
             "version": "v5.8.35",

+ 9 - 0
config/laravel-trix.php

@@ -0,0 +1,9 @@
+<?php
+
+return [
+    'storage_disk' => env('LARAVEL_TRIX_STORAGE_DISK','public'),
+
+    'store_attachment_action' => Te7aHoudini\LaravelTrix\Http\Controllers\TrixAttachmentController::class.'@store',
+
+    'destroy_attachment_action' => Te7aHoudini\LaravelTrix\Http\Controllers\TrixAttachmentController::class.'@destroy',
+];

+ 32 - 0
database/migrations/2020_04_02_114453_change_process_daily_participant_table.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class ChangeProcessDailyParticipantTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('process_daily_participants',function (Blueprint $table){
+            $table->enum('status',['已审核','未审核'])->after('remark')->default('未审核')->comment('状态');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('process_daily_participants',function (Blueprint $table){
+            $table->dropColumn('status');
+        });
+    }
+}

+ 41 - 0
database/migrations/2020_04_03_150439_change_process_table.php

@@ -0,0 +1,41 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class ChangeProcessTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::dropIfExists('processes');
+        Schema::create('processes', function (Blueprint $table) {
+            $table->bigIncrements('id');
+            $table->string('code')->unique()->comment('任务号');
+            $table->bigInteger('owner_id')->index()->comment('外键货主');
+            $table->bigInteger('process_method_id')->comment('外键加工类型');
+            $table->decimal('unit_price')->comment('单价');
+            $table->enum('status',['待接单','待加工','驳回','加工中','待验收','已完成'])->comment('状态');
+            $table->string('remark')->nullable()->comment('备注');
+            $table->integer('amount')->comment('预期数量');
+            $table->integer('completed_amount')->nullable()->comment('完成数量');
+            $table->timestamp('created_at')->index()->nullable();
+            $table->timestamp('updated_at')->nullable();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('processes');
+    }
+}

+ 45 - 0
database/migrations/2020_04_03_150514_change_process_contents_table.php

@@ -0,0 +1,45 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class ChangeProcessContentsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::dropIfExists('processes_additional_bills');
+        Schema::create('processes_contents', function (Blueprint $table) {
+            $table->bigIncrements('id');
+            $table->bigInteger('process_id')->index()->comment('外键二次加工单');
+            $table->enum('bill_type',['移库单','入库单','出库单'])->comment('单据类型');
+            $table->bigInteger('commodity_id')->comment('外键商品');
+            $table->string('wms_code')->index()->comment('单据号');
+            $table->integer('amount')->comment('数量');
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('processes_contents');
+        Schema::create('processes_additional_bills', function (Blueprint $table) {
+            $table->bigIncrements('id');
+            $table->bigInteger('process_id')->index()->comment('外键二次加工单');
+            $table->string('wms_code')->index()->comment('单据号');
+            $table->enum('bill_type',['入库单'])->default('入库单')->comment('单据类型');
+            $table->integer('amount')->comment('数量');
+            $table->timestamps();
+        });
+    }
+}

+ 46 - 0
database/migrations/2020_04_07_160948_create_trix_rich_texts_table.php

@@ -0,0 +1,46 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateTrixRichTextsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('trix_rich_texts', function (Blueprint $table) {
+            $table->unsignedBigInteger('id')->autoIncrement();
+            $table->string('field');
+            $table->morphs('model');
+            $table->text('content')->nullable();
+            $table->timestamps();
+        });
+
+        Schema::create('trix_attachments', function (Blueprint $table) {
+            $table->unsignedBigInteger('id')->autoIncrement();
+            $table->string('field');
+            $table->unsignedInteger('attachable_id')->nullable();
+            $table->string('attachable_type');
+            $table->string('attachment');
+            $table->string('disk');
+            $table->boolean('is_pending')->default(1);
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::drop('trix_attachments');
+        Schema::drop('trix_rich_texts');
+    }
+}

+ 39 - 0
database/migrations/2020_04_09_111337_add_tutorial_authority.php

@@ -0,0 +1,39 @@
+<?php
+
+use App\Authority;
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class AddTutorialAuthority extends Migration
+{
+    protected $authNames=[
+        '教程-查询',
+        '教程-录入',
+        '教程-编辑',
+        '教程-删除',
+    ];
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        foreach ($this->authNames as $name){
+            if(!Authority::where('name',$name)->first())(new Authority(['name'=>$name,'alias_name'=>$name]))->save();
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        foreach ($this->authNames as $name){
+            Authority::where('name',$name)->delete();
+        }
+    }
+}

+ 32 - 0
database/migrations/2020_04_09_111539_change_tutorial_table.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class ChangeTutorialTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('tutorials', function (Blueprint $table) {
+            $table->dropColumn('content');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('tutorials', function (Blueprint $table) {
+            $table->longText('content')->after('name')->nullable()->comment('富文本内容');
+        });
+    }
+}

+ 54 - 2
package-lock.json

@@ -3016,6 +3016,11 @@
             "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
             "dev": true
         },
+        "dompurify": {
+            "version": "1.0.11",
+            "resolved": "https://registry.npm.taobao.org/dompurify/download/dompurify-1.0.11.tgz",
+            "integrity": "sha1-/g9KQNFH98674xpQoTV1Oc/B600="
+        },
         "domutils": {
             "version": "1.7.0",
             "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
@@ -5355,8 +5360,7 @@
         "jquery": {
             "version": "3.4.1",
             "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz",
-            "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==",
-            "dev": true
+            "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw=="
         },
         "js-cookie": {
             "version": "2.2.0",
@@ -8181,6 +8185,38 @@
             "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
             "dev": true
         },
+        "simple-hotkeys": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npm.taobao.org/simple-hotkeys/download/simple-hotkeys-1.0.3.tgz",
+            "integrity": "sha1-R6W8NTYspzOWEb0JqE+jeBiwu8Y=",
+            "requires": {
+                "jquery": "2.x",
+                "simple-module": "~2.0.5"
+            },
+            "dependencies": {
+                "jquery": {
+                    "version": "2.2.4",
+                    "resolved": "https://registry.npm.taobao.org/jquery/download/jquery-2.2.4.tgz",
+                    "integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI="
+                },
+                "simple-module": {
+                    "version": "2.0.6",
+                    "resolved": "https://registry.npm.taobao.org/simple-module/download/simple-module-2.0.6.tgz",
+                    "integrity": "sha1-zsglAyX4x/V19Kp1yRmzg5amA3s=",
+                    "requires": {
+                        "jquery": "2.x"
+                    }
+                }
+            }
+        },
+        "simple-module": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npm.taobao.org/simple-module/download/simple-module-3.0.3.tgz",
+            "integrity": "sha1-rVJ2Z4XSfNlCfuhkWknkEZlyWpI=",
+            "requires": {
+                "jquery": "^3.0.0"
+            }
+        },
         "simple-swizzle": {
             "version": "0.2.2",
             "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
@@ -8198,6 +8234,22 @@
                 }
             }
         },
+        "simple-uploader": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npm.taobao.org/simple-uploader/download/simple-uploader-3.0.0.tgz",
+            "integrity": "sha1-wJ9wbxz8vqH+eA41dZpoOxM21NE=",
+            "requires": {
+                "jquery": "~3.1.0",
+                "simple-module": "~3.0.0"
+            },
+            "dependencies": {
+                "jquery": {
+                    "version": "3.1.1",
+                    "resolved": "https://registry.npm.taobao.org/jquery/download/jquery-3.1.1.tgz",
+                    "integrity": "sha1-NHwcIcfgBBFeCk2jLOzgQfrTyKM="
+                }
+            }
+        },
         "slash": {
             "version": "1.0.0",
             "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",

BIN
public/audio.mp3


+ 5 - 0
public/css/app.css

@@ -10,6 +10,11 @@
           text-decoration-line: line-through;
 }
 
+.custom-rich-text-content img {
+  width: 100%;
+  height: auto;
+}
+
 /*!
  * Bootstrap v4.3.1 (https://getbootstrap.com/)
  * Copyright 2011-2019 The Bootstrap Authors

+ 0 - 40
public/laravel-u-editor/dialogs/anchor/anchor.html

@@ -1,40 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-    "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-        <title></title>
-        <style type="text/css">
-            *{color: #838383;margin: 0;padding: 0}
-            html,body {font-size: 12px;overflow: hidden; }
-            .content{padding:5px 0 0 15px;}
-            input{width:210px;height:21px;line-height:21px;margin-left: 4px;}
-        </style>
-    </head>
-    <body>
-        <div class="content">
-            <span><var id="lang_input_anchorName"></var></span><input id="anchorName"  value="" />
-        </div>
-        <script type="text/javascript" src="../internal.js"></script>
-        <script type="text/javascript">
-            var anchorInput = $G('anchorName'),
-                node = editor.selection.getRange().getClosedNode();
-            if(node && node.tagName == 'IMG' && (node = node.getAttribute('anchorname'))){
-                anchorInput.value = node;
-            }
-            anchorInput.onkeydown = function(evt){
-                evt = evt || window.event;
-                if(evt.keyCode == 13){
-                    editor.execCommand('anchor', anchorInput.value);
-                    dialog.close();
-                    domUtils.preventDefault(evt)
-                }
-            };
-            dialog.onok = function (){
-                editor.execCommand('anchor', anchorInput.value);
-                dialog.close();
-            };
-            $focus(anchorInput);
-        </script>
-    </body>
-</html>

+ 0 - 681
public/laravel-u-editor/dialogs/attachment/attachment.css

@@ -1,681 +0,0 @@
-@charset "utf-8";
-/* dialog样式 */
-.wrapper {
-    zoom: 1;
-    width: 630px;
-    *width: 626px;
-    height: 380px;
-    margin: 0 auto;
-    padding: 10px;
-    position: relative;
-    font-family: sans-serif;
-}
-
-/*tab样式框大小*/
-.tabhead {
-    float:left;
-}
-.tabbody {
-    width: 100%;
-    height: 346px;
-    position: relative;
-    clear: both;
-}
-
-.tabbody .panel {
-    position: absolute;
-    width: 0;
-    height: 0;
-    background: #fff;
-    overflow: hidden;
-    display: none;
-}
-
-.tabbody .panel.focus {
-    width: 100%;
-    height: 346px;
-    display: block;
-}
-
-/* 上传附件 */
-.tabbody #upload.panel {
-    width: 0;
-    height: 0;
-    overflow: hidden;
-    position: absolute !important;
-    clip: rect(1px, 1px, 1px, 1px);
-    background: #fff;
-    display: block;
-}
-
-.tabbody #upload.panel.focus {
-    width: 100%;
-    height: 346px;
-    display: block;
-    clip: auto;
-}
-
-#upload .queueList {
-    margin: 0;
-    width: 100%;
-    height: 100%;
-    position: absolute;
-    overflow: hidden;
-}
-
-#upload p {
-    margin: 0;
-}
-
-.element-invisible {
-    width: 0 !important;
-    height: 0 !important;
-    border: 0;
-    padding: 0;
-    margin: 0;
-    overflow: hidden;
-    position: absolute !important;
-    clip: rect(1px, 1px, 1px, 1px);
-}
-
-#upload .placeholder {
-    margin: 10px;
-    border: 2px dashed #e6e6e6;
-    *border: 0px dashed #e6e6e6;
-    height: 172px;
-    padding-top: 150px;
-    text-align: center;
-    background: url(./images/image.png) center 70px no-repeat;
-    color: #cccccc;
-    font-size: 18px;
-    position: relative;
-    top:0;
-    *top: 10px;
-}
-
-#upload .placeholder .webuploader-pick {
-    font-size: 18px;
-    background: #00b7ee;
-    border-radius: 3px;
-    line-height: 44px;
-    padding: 0 30px;
-    *width: 120px;
-    color: #fff;
-    display: inline-block;
-    margin: 0 auto 20px auto;
-    cursor: pointer;
-    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
-}
-
-#upload .placeholder .webuploader-pick-hover {
-    background: #00a2d4;
-}
-
-
-#filePickerContainer {
-    text-align: center;
-}
-
-#upload .placeholder .flashTip {
-    color: #666666;
-    font-size: 12px;
-    position: absolute;
-    width: 100%;
-    text-align: center;
-    bottom: 20px;
-}
-
-#upload .placeholder .flashTip a {
-    color: #0785d1;
-    text-decoration: none;
-}
-
-#upload .placeholder .flashTip a:hover {
-    text-decoration: underline;
-}
-
-#upload .placeholder.webuploader-dnd-over {
-    border-color: #999999;
-}
-
-#upload .filelist {
-    list-style: none;
-    margin: 0;
-    padding: 0;
-    overflow-x: hidden;
-    overflow-y: auto;
-    position: relative;
-    height: 300px;
-}
-
-#upload .filelist:after {
-    content: '';
-    display: block;
-    width: 0;
-    height: 0;
-    overflow: hidden;
-    clear: both;
-}
-
-#upload .filelist li {
-    width: 113px;
-    height: 113px;
-    background: url(./images/bg.png);
-    text-align: center;
-    margin: 9px 0 0 9px;
-    *margin: 6px 0 0 6px;
-    position: relative;
-    display: block;
-    float: left;
-    overflow: hidden;
-    font-size: 12px;
-}
-
-#upload .filelist li p.log {
-    position: relative;
-    top: -45px;
-}
-
-#upload .filelist li p.title {
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    overflow: hidden;
-    white-space: nowrap;
-    text-overflow: ellipsis;
-    top: 5px;
-    text-indent: 5px;
-    text-align: left;
-}
-
-#upload .filelist li p.progress {
-    position: absolute;
-    width: 100%;
-    bottom: 0;
-    left: 0;
-    height: 8px;
-    overflow: hidden;
-    z-index: 50;
-    margin: 0;
-    border-radius: 0;
-    background: none;
-    -webkit-box-shadow: 0 0 0;
-}
-
-#upload .filelist li p.progress span {
-    display: none;
-    overflow: hidden;
-    width: 0;
-    height: 100%;
-    background: #1483d8 url(./images/progress.png) repeat-x;
-
-    -webit-transition: width 200ms linear;
-    -moz-transition: width 200ms linear;
-    -o-transition: width 200ms linear;
-    -ms-transition: width 200ms linear;
-    transition: width 200ms linear;
-
-    -webkit-animation: progressmove 2s linear infinite;
-    -moz-animation: progressmove 2s linear infinite;
-    -o-animation: progressmove 2s linear infinite;
-    -ms-animation: progressmove 2s linear infinite;
-    animation: progressmove 2s linear infinite;
-
-    -webkit-transform: translateZ(0);
-}
-
-@-webkit-keyframes progressmove {
-    0% {
-        background-position: 0 0;
-    }
-    100% {
-        background-position: 17px 0;
-    }
-}
-
-@-moz-keyframes progressmove {
-    0% {
-        background-position: 0 0;
-    }
-    100% {
-        background-position: 17px 0;
-    }
-}
-
-@keyframes progressmove {
-    0% {
-        background-position: 0 0;
-    }
-    100% {
-        background-position: 17px 0;
-    }
-}
-
-#upload .filelist li p.imgWrap {
-    position: relative;
-    z-index: 2;
-    line-height: 113px;
-    vertical-align: middle;
-    overflow: hidden;
-    width: 113px;
-    height: 113px;
-
-    -webkit-transform-origin: 50% 50%;
-    -moz-transform-origin: 50% 50%;
-    -o-transform-origin: 50% 50%;
-    -ms-transform-origin: 50% 50%;
-    transform-origin: 50% 50%;
-
-    -webit-transition: 200ms ease-out;
-    -moz-transition: 200ms ease-out;
-    -o-transition: 200ms ease-out;
-    -ms-transition: 200ms ease-out;
-    transition: 200ms ease-out;
-}
-#upload .filelist li p.imgWrap.notimage {
-    margin-top: 0;
-    width: 111px;
-    height: 111px;
-    border: 1px #eeeeee solid;
-}
-#upload .filelist li p.imgWrap.notimage i.file-preview {
-    margin-top: 15px;
-}
-
-#upload .filelist li img {
-    width: 100%;
-}
-
-#upload .filelist li p.error {
-    background: #f43838;
-    color: #fff;
-    position: absolute;
-    bottom: 0;
-    left: 0;
-    height: 28px;
-    line-height: 28px;
-    width: 100%;
-    z-index: 100;
-    display:none;
-}
-
-#upload .filelist li .success {
-    display: block;
-    position: absolute;
-    left: 0;
-    bottom: 0;
-    height: 40px;
-    width: 100%;
-    z-index: 200;
-    background: url(./images/success.png) no-repeat right bottom;
-    background-image: url(./images/success.gif) \9;
-}
-
-#upload .filelist li.filePickerBlock {
-    width: 113px;
-    height: 113px;
-    background: url(./images/image.png) no-repeat center 12px;
-    border: 1px solid #eeeeee;
-    border-radius: 0;
-}
-#upload .filelist li.filePickerBlock div.webuploader-pick  {
-    width: 100%;
-    height: 100%;
-    margin: 0;
-    padding: 0;
-    opacity: 0;
-    background: none;
-    font-size: 0;
-}
-
-#upload .filelist div.file-panel {
-    position: absolute;
-    height: 0;
-    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0;
-    background: rgba(0, 0, 0, 0.5);
-    width: 100%;
-    top: 0;
-    left: 0;
-    overflow: hidden;
-    z-index: 300;
-}
-
-#upload .filelist div.file-panel span {
-    width: 24px;
-    height: 24px;
-    display: inline;
-    float: right;
-    text-indent: -9999px;
-    overflow: hidden;
-    background: url(./images/icons.png) no-repeat;
-    background: url(./images/icons.gif) no-repeat \9;
-    margin: 5px 1px 1px;
-    cursor: pointer;
-    -webkit-tap-highlight-color: rgba(0,0,0,0);
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-}
-
-#upload .filelist div.file-panel span.rotateLeft {
-    display:none;
-    background-position: 0 -24px;
-}
-
-#upload .filelist div.file-panel span.rotateLeft:hover {
-    background-position: 0 0;
-}
-
-#upload .filelist div.file-panel span.rotateRight {
-    display:none;
-    background-position: -24px -24px;
-}
-
-#upload .filelist div.file-panel span.rotateRight:hover {
-    background-position: -24px 0;
-}
-
-#upload .filelist div.file-panel span.cancel {
-    background-position: -48px -24px;
-}
-
-#upload .filelist div.file-panel span.cancel:hover {
-    background-position: -48px 0;
-}
-
-#upload .statusBar {
-    height: 45px;
-    border-bottom: 1px solid #dadada;
-    margin: 0 10px;
-    padding: 0;
-    line-height: 45px;
-    vertical-align: middle;
-    position: relative;
-}
-
-#upload .statusBar .progress {
-    border: 1px solid #1483d8;
-    width: 198px;
-    background: #fff;
-    height: 18px;
-    position: absolute;
-    top: 12px;
-    display: none;
-    text-align: center;
-    line-height: 18px;
-    color: #6dbfff;
-    margin: 0 10px 0 0;
-}
-#upload .statusBar .progress span.percentage {
-    width: 0;
-    height: 100%;
-    left: 0;
-    top: 0;
-    background: #1483d8;
-    position: absolute;
-}
-#upload .statusBar .progress span.text {
-    position: relative;
-    z-index: 10;
-}
-
-#upload .statusBar .info {
-    display: inline-block;
-    font-size: 14px;
-    color: #666666;
-}
-
-#upload .statusBar .btns {
-    position: absolute;
-    top: 7px;
-    right: 0;
-    line-height: 30px;
-}
-
-#filePickerBtn {
-    display: inline-block;
-    float: left;
-}
-#upload .statusBar .btns .webuploader-pick,
-#upload .statusBar .btns .uploadBtn,
-#upload .statusBar .btns .uploadBtn.state-uploading,
-#upload .statusBar .btns .uploadBtn.state-paused {
-    background: #ffffff;
-    border: 1px solid #cfcfcf;
-    color: #565656;
-    padding: 0 18px;
-    display: inline-block;
-    border-radius: 3px;
-    margin-left: 10px;
-    cursor: pointer;
-    font-size: 14px;
-    float: left;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-}
-#upload .statusBar .btns .webuploader-pick-hover,
-#upload .statusBar .btns .uploadBtn:hover,
-#upload .statusBar .btns .uploadBtn.state-uploading:hover,
-#upload .statusBar .btns .uploadBtn.state-paused:hover {
-    background: #f0f0f0;
-}
-
-#upload .statusBar .btns .uploadBtn,
-#upload .statusBar .btns .uploadBtn.state-paused{
-    background: #00b7ee;
-    color: #fff;
-    border-color: transparent;
-}
-#upload .statusBar .btns .uploadBtn:hover,
-#upload .statusBar .btns .uploadBtn.state-paused:hover{
-    background: #00a2d4;
-}
-
-#upload .statusBar .btns .uploadBtn.disabled {
-    pointer-events: none;
-    filter:alpha(opacity=60);
-    -moz-opacity:0.6;
-    -khtml-opacity: 0.6;
-    opacity: 0.6;
-}
-
-
-
-/* 图片管理样式 */
-#online {
-    width: 100%;
-    height: 336px;
-    padding: 10px 0 0 0;
-}
-#online #fileList{
-    width: 100%;
-    height: 100%;
-    overflow-x: hidden;
-    overflow-y: auto;
-    position: relative;
-}
-#online ul {
-    display: block;
-    list-style: none;
-    margin: 0;
-    padding: 0;
-}
-#online li {
-    float: left;
-    display: block;
-    list-style: none;
-    padding: 0;
-    width: 113px;
-    height: 113px;
-    margin: 0 0 9px 9px;
-    *margin: 0 0 6px 6px;
-    background-color: #eee;
-    overflow: hidden;
-    cursor: pointer;
-    position: relative;
-}
-#online li.clearFloat {
-    float: none;
-    clear: both;
-    display: block;
-    width:0;
-    height:0;
-    margin: 0;
-    padding: 0;
-}
-#online li img {
-    cursor: pointer;
-}
-#online li div.file-wrapper {
-    cursor: pointer;
-    position: absolute;
-    display: block;
-    width: 111px;
-    height: 111px;
-    border: 1px solid #eee;
-    background: url("./images/bg.png") repeat;
-}
-#online li div span.file-title{
-    display: block;
-    padding: 0 3px;
-    margin: 3px 0 0 0;
-    font-size: 12px;
-    height: 13px;
-    color: #555555;
-    text-align: center;
-    width: 107px;
-    white-space: nowrap;
-    word-break: break-all;
-    overflow: hidden;
-    text-overflow: ellipsis;
-}
-#online li .icon {
-    cursor: pointer;
-    width: 113px;
-    height: 113px;
-    position: absolute;
-    top: 0;
-    left: 0;
-    z-index: 2;
-    border: 0;
-    background-repeat: no-repeat;
-}
-#online li .icon:hover {
-    width: 107px;
-    height: 107px;
-    border: 3px solid #1094fa;
-}
-#online li.selected .icon {
-    background-image: url(images/success.png);
-    background-image: url(images/success.gif) \9;
-    background-position: 75px 75px;
-}
-#online li.selected .icon:hover {
-    width: 107px;
-    height: 107px;
-    border: 3px solid #1094fa;
-    background-position: 72px 72px;
-}
-
-
-/* 在线文件的文件预览图标 */
-i.file-preview {
-    display: block;
-    margin: 10px auto;
-    width: 70px;
-    height: 70px;
-    background-image: url("./images/file-icons.png");
-    background-image: url("./images/file-icons.gif") \9;
-    background-position: -140px center;
-    background-repeat: no-repeat;
-}
-i.file-preview.file-type-dir{
-    background-position: 0 center;
-}
-i.file-preview.file-type-file{
-    background-position: -140px center;
-}
-i.file-preview.file-type-filelist{
-    background-position: -210px center;
-}
-i.file-preview.file-type-zip,
-i.file-preview.file-type-rar,
-i.file-preview.file-type-7z,
-i.file-preview.file-type-tar,
-i.file-preview.file-type-gz,
-i.file-preview.file-type-bz2{
-    background-position: -280px center;
-}
-i.file-preview.file-type-xls,
-i.file-preview.file-type-xlsx{
-    background-position: -350px center;
-}
-i.file-preview.file-type-doc,
-i.file-preview.file-type-docx{
-    background-position: -420px center;
-}
-i.file-preview.file-type-ppt,
-i.file-preview.file-type-pptx{
-    background-position: -490px center;
-}
-i.file-preview.file-type-vsd{
-    background-position: -560px center;
-}
-i.file-preview.file-type-pdf{
-    background-position: -630px center;
-}
-i.file-preview.file-type-txt,
-i.file-preview.file-type-md,
-i.file-preview.file-type-json,
-i.file-preview.file-type-htm,
-i.file-preview.file-type-xml,
-i.file-preview.file-type-html,
-i.file-preview.file-type-js,
-i.file-preview.file-type-css,
-i.file-preview.file-type-php,
-i.file-preview.file-type-jsp,
-i.file-preview.file-type-asp{
-    background-position: -700px center;
-}
-i.file-preview.file-type-apk{
-    background-position: -770px center;
-}
-i.file-preview.file-type-exe{
-    background-position: -840px center;
-}
-i.file-preview.file-type-ipa{
-    background-position: -910px center;
-}
-i.file-preview.file-type-mp4,
-i.file-preview.file-type-swf,
-i.file-preview.file-type-mkv,
-i.file-preview.file-type-avi,
-i.file-preview.file-type-flv,
-i.file-preview.file-type-mov,
-i.file-preview.file-type-mpg,
-i.file-preview.file-type-mpeg,
-i.file-preview.file-type-ogv,
-i.file-preview.file-type-webm,
-i.file-preview.file-type-rm,
-i.file-preview.file-type-rmvb{
-    background-position: -980px center;
-}
-i.file-preview.file-type-ogg,
-i.file-preview.file-type-wav,
-i.file-preview.file-type-wmv,
-i.file-preview.file-type-mid,
-i.file-preview.file-type-mp3{
-    background-position: -1050px center;
-}
-i.file-preview.file-type-jpg,
-i.file-preview.file-type-jpeg,
-i.file-preview.file-type-gif,
-i.file-preview.file-type-bmp,
-i.file-preview.file-type-png,
-i.file-preview.file-type-psd{
-    background-position: -140px center;
-}

+ 0 - 60
public/laravel-u-editor/dialogs/attachment/attachment.html

@@ -1,60 +0,0 @@
-<!doctype html>
-<html>
-<head>
-    <meta charset="UTF-8">
-    <title>ueditor图片对话框</title>
-    <script type="text/javascript" src="../internal.js"></script>
-
-    <!-- jquery -->
-    <script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>
-
-    <!-- webuploader -->
-    <script src="../../third-party/webuploader/webuploader.min.js"></script>
-    <link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">
-
-    <!-- attachment dialog -->
-    <link rel="stylesheet" href="attachment.css" type="text/css" />
-</head>
-<body>
-
-    <div class="wrapper">
-        <div id="tabhead" class="tabhead">
-            <span class="tab focus" data-content-id="upload"><var id="lang_tab_upload"></var></span>
-            <span class="tab" data-content-id="online"><var id="lang_tab_online"></var></span>
-        </div>
-        <div id="tabbody" class="tabbody">
-            <!-- 上传图片 -->
-            <div id="upload" class="panel focus">
-                <div id="queueList" class="queueList">
-                    <div class="statusBar element-invisible">
-                        <div class="progress">
-                            <span class="text">0%</span>
-                            <span class="percentage"></span>
-                        </div><div class="info"></div>
-                        <div class="btns">
-                            <div id="filePickerBtn"></div>
-                            <div class="uploadBtn"><var id="lang_start_upload"></var></div>
-                        </div>
-                    </div>
-                    <div id="dndArea" class="placeholder">
-                        <div class="filePickerContainer">
-                            <div id="filePickerReady"></div>
-                        </div>
-                    </div>
-                    <ul class="filelist element-invisible">
-                        <li id="filePickerBlock" class="filePickerBlock"></li>
-                    </ul>
-                </div>
-            </div>
-
-            <!-- 在线图片 -->
-            <div id="online" class="panel">
-                <div id="fileList"><var id="lang_imgLoading"></var></div>
-            </div>
-
-        </div>
-    </div>
-    <script type="text/javascript" src="attachment.js"></script>
-
-</body>
-</html>

+ 0 - 754
public/laravel-u-editor/dialogs/attachment/attachment.js

@@ -1,754 +0,0 @@
-/**
- * User: Jinqn
- * Date: 14-04-08
- * Time: 下午16:34
- * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片
- */
-
-(function () {
-
-    var uploadFile,
-        onlineFile;
-
-    window.onload = function () {
-        initTabs();
-        initButtons();
-    };
-
-    /* 初始化tab标签 */
-    function initTabs() {
-        var tabs = $G('tabhead').children;
-        for (var i = 0; i < tabs.length; i++) {
-            domUtils.on(tabs[i], "click", function (e) {
-                var target = e.target || e.srcElement;
-                setTabFocus(target.getAttribute('data-content-id'));
-            });
-        }
-
-        setTabFocus('upload');
-    }
-
-    /* 初始化tabbody */
-    function setTabFocus(id) {
-        if(!id) return;
-        var i, bodyId, tabs = $G('tabhead').children;
-        for (i = 0; i < tabs.length; i++) {
-            bodyId = tabs[i].getAttribute('data-content-id')
-            if (bodyId == id) {
-                domUtils.addClass(tabs[i], 'focus');
-                domUtils.addClass($G(bodyId), 'focus');
-            } else {
-                domUtils.removeClasses(tabs[i], 'focus');
-                domUtils.removeClasses($G(bodyId), 'focus');
-            }
-        }
-        switch (id) {
-            case 'upload':
-                uploadFile = uploadFile || new UploadFile('queueList');
-                break;
-            case 'online':
-                onlineFile = onlineFile || new OnlineFile('fileList');
-                break;
-        }
-    }
-
-    /* 初始化onok事件 */
-    function initButtons() {
-
-        dialog.onok = function () {
-            var list = [], id, tabs = $G('tabhead').children;
-            for (var i = 0; i < tabs.length; i++) {
-                if (domUtils.hasClass(tabs[i], 'focus')) {
-                    id = tabs[i].getAttribute('data-content-id');
-                    break;
-                }
-            }
-
-            switch (id) {
-                case 'upload':
-                    list = uploadFile.getInsertList();
-                    var count = uploadFile.getQueueCount();
-                    if (count) {
-                        $('.info', '#queueList').html('<span style="color:red;">' + '还有2个未上传文件'.replace(/[\d]/, count) + '</span>');
-                        return false;
-                    }
-                    break;
-                case 'online':
-                    list = onlineFile.getInsertList();
-                    break;
-            }
-
-            editor.execCommand('insertfile', list);
-        };
-    }
-
-
-    /* 上传附件 */
-    function UploadFile(target) {
-        this.$wrap = target.constructor == String ? $('#' + target) : $(target);
-        this.init();
-    }
-    UploadFile.prototype = {
-        init: function () {
-            this.fileList = [];
-            this.initContainer();
-            this.initUploader();
-        },
-        initContainer: function () {
-            this.$queue = this.$wrap.find('.filelist');
-        },
-        /* 初始化容器 */
-        initUploader: function () {
-            var _this = this,
-                $ = jQuery,    // just in case. Make sure it's not an other libaray.
-                $wrap = _this.$wrap,
-            // 图片容器
-                $queue = $wrap.find('.filelist'),
-            // 状态栏,包括进度和控制按钮
-                $statusBar = $wrap.find('.statusBar'),
-            // 文件总体选择信息。
-                $info = $statusBar.find('.info'),
-            // 上传按钮
-                $upload = $wrap.find('.uploadBtn'),
-            // 上传按钮
-                $filePickerBtn = $wrap.find('.filePickerBtn'),
-            // 上传按钮
-                $filePickerBlock = $wrap.find('.filePickerBlock'),
-            // 没选择文件之前的内容。
-                $placeHolder = $wrap.find('.placeholder'),
-            // 总体进度条
-                $progress = $statusBar.find('.progress').hide(),
-            // 添加的文件数量
-                fileCount = 0,
-            // 添加的文件总大小
-                fileSize = 0,
-            // 优化retina, 在retina下这个值是2
-                ratio = window.devicePixelRatio || 1,
-            // 缩略图大小
-                thumbnailWidth = 113 * ratio,
-                thumbnailHeight = 113 * ratio,
-            // 可能有pedding, ready, uploading, confirm, done.
-                state = '',
-            // 所有文件的进度信息,key为file id
-                percentages = {},
-                supportTransition = (function () {
-                    var s = document.createElement('p').style,
-                        r = 'transition' in s ||
-                            'WebkitTransition' in s ||
-                            'MozTransition' in s ||
-                            'msTransition' in s ||
-                            'OTransition' in s;
-                    s = null;
-                    return r;
-                })(),
-            // WebUploader实例
-                uploader,
-                actionUrl = editor.getActionUrl(editor.getOpt('fileActionName')),
-                fileMaxSize = editor.getOpt('fileMaxSize'),
-                acceptExtensions = (editor.getOpt('fileAllowFiles') || []).join('').replace(/\./g, ',').replace(/^[,]/, '');;
-
-            if (!WebUploader.Uploader.support()) {
-                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();
-                return;
-            } else if (!editor.getOpt('fileActionName')) {
-                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();
-                return;
-            }
-
-            uploader = _this.uploader = WebUploader.create({
-                pick: {
-                    id: '#filePickerReady',
-                    label: lang.uploadSelectFile
-                },
-                swf: '../../third-party/webuploader/Uploader.swf',
-                server: actionUrl,
-                fileVal: editor.getOpt('fileFieldName'),
-                duplicate: true,
-                fileSingleSizeLimit: fileMaxSize,
-                compress: false
-            });
-            uploader.addButton({
-                id: '#filePickerBlock'
-            });
-            uploader.addButton({
-                id: '#filePickerBtn',
-                label: lang.uploadAddFile
-            });
-
-            setState('pedding');
-
-            // 当有文件添加进来时执行,负责view的创建
-            function addFile(file) {
-                var $li = $('<li id="' + file.id + '">' +
-                        '<p class="title">' + file.name + '</p>' +
-                        '<p class="imgWrap"></p>' +
-                        '<p class="progress"><span></span></p>' +
-                        '</li>'),
-
-                    $btns = $('<div class="file-panel">' +
-                        '<span class="cancel">' + lang.uploadDelete + '</span>' +
-                        '<span class="rotateRight">' + lang.uploadTurnRight + '</span>' +
-                        '<span class="rotateLeft">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),
-                    $prgress = $li.find('p.progress span'),
-                    $wrap = $li.find('p.imgWrap'),
-                    $info = $('<p class="error"></p>').hide().appendTo($li),
-
-                    showError = function (code) {
-                        switch (code) {
-                            case 'exceed_size':
-                                text = lang.errorExceedSize;
-                                break;
-                            case 'interrupt':
-                                text = lang.errorInterrupt;
-                                break;
-                            case 'http':
-                                text = lang.errorHttp;
-                                break;
-                            case 'not_allow_type':
-                                text = lang.errorFileType;
-                                break;
-                            default:
-                                text = lang.errorUploadRetry;
-                                break;
-                        }
-                        $info.text(text).show();
-                    };
-
-                if (file.getStatus() === 'invalid') {
-                    showError(file.statusText);
-                } else {
-                    $wrap.text(lang.uploadPreview);
-                    if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|'+file.ext.toLowerCase()+'|') == -1) {
-                        $wrap.empty().addClass('notimage').append('<i class="file-preview file-type-' + file.ext.toLowerCase() + '"></i>' +
-                        '<span class="file-title" title="' + file.name + '">' + file.name + '</span>');
-                    } else {
-                        if (browser.ie && browser.version <= 7) {
-                            $wrap.text(lang.uploadNoPreview);
-                        } else {
-                            uploader.makeThumb(file, function (error, src) {
-                                if (error || !src) {
-                                    $wrap.text(lang.uploadNoPreview);
-                                } else {
-                                    var $img = $('<img src="' + src + '">');
-                                    $wrap.empty().append($img);
-                                    $img.on('error', function () {
-                                        $wrap.text(lang.uploadNoPreview);
-                                    });
-                                }
-                            }, thumbnailWidth, thumbnailHeight);
-                        }
-                    }
-                    percentages[ file.id ] = [ file.size, 0 ];
-                    file.rotation = 0;
-
-                    /* 检查文件格式 */
-                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {
-                        showError('not_allow_type');
-                        uploader.removeFile(file);
-                    }
-                }
-
-                file.on('statuschange', function (cur, prev) {
-                    if (prev === 'progress') {
-                        $prgress.hide().width(0);
-                    } else if (prev === 'queued') {
-                        $li.off('mouseenter mouseleave');
-                        $btns.remove();
-                    }
-                    // 成功
-                    if (cur === 'error' || cur === 'invalid') {
-                        showError(file.statusText);
-                        percentages[ file.id ][ 1 ] = 1;
-                    } else if (cur === 'interrupt') {
-                        showError('interrupt');
-                    } else if (cur === 'queued') {
-                        percentages[ file.id ][ 1 ] = 0;
-                    } else if (cur === 'progress') {
-                        $info.hide();
-                        $prgress.css('display', 'block');
-                    } else if (cur === 'complete') {
-                    }
-
-                    $li.removeClass('state-' + prev).addClass('state-' + cur);
-                });
-
-                $li.on('mouseenter', function () {
-                    $btns.stop().animate({height: 30});
-                });
-                $li.on('mouseleave', function () {
-                    $btns.stop().animate({height: 0});
-                });
-
-                $btns.on('click', 'span', function () {
-                    var index = $(this).index(),
-                        deg;
-
-                    switch (index) {
-                        case 0:
-                            uploader.removeFile(file);
-                            return;
-                        case 1:
-                            file.rotation += 90;
-                            break;
-                        case 2:
-                            file.rotation -= 90;
-                            break;
-                    }
-
-                    if (supportTransition) {
-                        deg = 'rotate(' + file.rotation + 'deg)';
-                        $wrap.css({
-                            '-webkit-transform': deg,
-                            '-mos-transform': deg,
-                            '-o-transform': deg,
-                            'transform': deg
-                        });
-                    } else {
-                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');
-                    }
-
-                });
-
-                $li.insertBefore($filePickerBlock);
-            }
-
-            // 负责view的销毁
-            function removeFile(file) {
-                var $li = $('#' + file.id);
-                delete percentages[ file.id ];
-                updateTotalProgress();
-                $li.off().find('.file-panel').off().end().remove();
-            }
-
-            function updateTotalProgress() {
-                var loaded = 0,
-                    total = 0,
-                    spans = $progress.children(),
-                    percent;
-
-                $.each(percentages, function (k, v) {
-                    total += v[ 0 ];
-                    loaded += v[ 0 ] * v[ 1 ];
-                });
-
-                percent = total ? loaded / total : 0;
-
-                spans.eq(0).text(Math.round(percent * 100) + '%');
-                spans.eq(1).css('width', Math.round(percent * 100) + '%');
-                updateStatus();
-            }
-
-            function setState(val, files) {
-
-                if (val != state) {
-
-                    var stats = uploader.getStats();
-
-                    $upload.removeClass('state-' + state);
-                    $upload.addClass('state-' + val);
-
-                    switch (val) {
-
-                        /* 未选择文件 */
-                        case 'pedding':
-                            $queue.addClass('element-invisible');
-                            $statusBar.addClass('element-invisible');
-                            $placeHolder.removeClass('element-invisible');
-                            $progress.hide(); $info.hide();
-                            uploader.refresh();
-                            break;
-
-                        /* 可以开始上传 */
-                        case 'ready':
-                            $placeHolder.addClass('element-invisible');
-                            $queue.removeClass('element-invisible');
-                            $statusBar.removeClass('element-invisible');
-                            $progress.hide(); $info.show();
-                            $upload.text(lang.uploadStart);
-                            uploader.refresh();
-                            break;
-
-                        /* 上传中 */
-                        case 'uploading':
-                            $progress.show(); $info.hide();
-                            $upload.text(lang.uploadPause);
-                            break;
-
-                        /* 暂停上传 */
-                        case 'paused':
-                            $progress.show(); $info.hide();
-                            $upload.text(lang.uploadContinue);
-                            break;
-
-                        case 'confirm':
-                            $progress.show(); $info.hide();
-                            $upload.text(lang.uploadStart);
-
-                            stats = uploader.getStats();
-                            if (stats.successNum && !stats.uploadFailNum) {
-                                setState('finish');
-                                return;
-                            }
-                            break;
-
-                        case 'finish':
-                            $progress.hide(); $info.show();
-                            if (stats.uploadFailNum) {
-                                $upload.text(lang.uploadRetry);
-                            } else {
-                                $upload.text(lang.uploadStart);
-                            }
-                            break;
-                    }
-
-                    state = val;
-                    updateStatus();
-
-                }
-
-                if (!_this.getQueueCount()) {
-                    $upload.addClass('disabled')
-                } else {
-                    $upload.removeClass('disabled')
-                }
-
-            }
-
-            function updateStatus() {
-                var text = '', stats;
-
-                if (state === 'ready') {
-                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));
-                } else if (state === 'confirm') {
-                    stats = uploader.getStats();
-                    if (stats.uploadFailNum) {
-                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);
-                    }
-                } else {
-                    stats = uploader.getStats();
-                    text = lang.updateStatusFinish.replace('_', fileCount).
-                        replace('_KB', WebUploader.formatSize(fileSize)).
-                        replace('_', stats.successNum);
-
-                    if (stats.uploadFailNum) {
-                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);
-                    }
-                }
-
-                $info.html(text);
-            }
-
-            uploader.on('fileQueued', function (file) {
-                fileCount++;
-                fileSize += file.size;
-
-                if (fileCount === 1) {
-                    $placeHolder.addClass('element-invisible');
-                    $statusBar.show();
-                }
-
-                addFile(file);
-            });
-
-            uploader.on('fileDequeued', function (file) {
-                fileCount--;
-                fileSize -= file.size;
-
-                removeFile(file);
-                updateTotalProgress();
-            });
-
-            uploader.on('filesQueued', function (file) {
-                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {
-                    setState('ready');
-                }
-                updateTotalProgress();
-            });
-
-            uploader.on('all', function (type, files) {
-                switch (type) {
-                    case 'uploadFinished':
-                        setState('confirm', files);
-                        break;
-                    case 'startUpload':
-                        /* 添加额外的GET参数 */
-                        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',
-                            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params);
-                        uploader.option('server', url);
-                        setState('uploading', files);
-                        break;
-                    case 'stopUpload':
-                        setState('paused', files);
-                        break;
-                }
-            });
-
-            uploader.on('uploadBeforeSend', function (file, data, header) {
-                //这里可以通过data对象添加POST参数
-                header['X_Requested_With'] = 'XMLHttpRequest';
-            });
-
-            uploader.on('uploadProgress', function (file, percentage) {
-                var $li = $('#' + file.id),
-                    $percent = $li.find('.progress span');
-
-                $percent.css('width', percentage * 100 + '%');
-                percentages[ file.id ][ 1 ] = percentage;
-                updateTotalProgress();
-            });
-
-            uploader.on('uploadSuccess', function (file, ret) {
-                var $file = $('#' + file.id);
-                try {
-                    var responseText = (ret._raw || ret),
-                        json = utils.str2json(responseText);
-                    if (json.state == 'SUCCESS') {
-                        _this.fileList.push(json);
-                        $file.append('<span class="success"></span>');
-                    } else {
-                        $file.find('.error').text(json.state).show();
-                    }
-                } catch (e) {
-                    $file.find('.error').text(lang.errorServerUpload).show();
-                }
-            });
-
-            uploader.on('uploadError', function (file, code) {
-            });
-            uploader.on('error', function (code, file) {
-                if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {
-                    addFile(file);
-                }
-            });
-            uploader.on('uploadComplete', function (file, ret) {
-            });
-
-            $upload.on('click', function () {
-                if ($(this).hasClass('disabled')) {
-                    return false;
-                }
-
-                if (state === 'ready') {
-                    uploader.upload();
-                } else if (state === 'paused') {
-                    uploader.upload();
-                } else if (state === 'uploading') {
-                    uploader.stop();
-                }
-            });
-
-            $upload.addClass('state-' + state);
-            updateTotalProgress();
-        },
-        getQueueCount: function () {
-            var file, i, status, readyFile = 0, files = this.uploader.getFiles();
-            for (i = 0; file = files[i++]; ) {
-                status = file.getStatus();
-                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;
-            }
-            return readyFile;
-        },
-        getInsertList: function () {
-            var i, link, data, list = [],
-                prefix = editor.getOpt('fileUrlPrefix');
-            for (i = 0; i < this.fileList.length; i++) {
-                data = this.fileList[i];
-                link = data.url;
-                list.push({
-                    title: data.original || link.substr(link.lastIndexOf('/') + 1),
-                    url: prefix + link
-                });
-            }
-            return list;
-        }
-    };
-
-
-    /* 在线附件 */
-    function OnlineFile(target) {
-        this.container = utils.isString(target) ? document.getElementById(target) : target;
-        this.init();
-    }
-    OnlineFile.prototype = {
-        init: function () {
-            this.initContainer();
-            this.initEvents();
-            this.initData();
-        },
-        /* 初始化容器 */
-        initContainer: function () {
-            this.container.innerHTML = '';
-            this.list = document.createElement('ul');
-            this.clearFloat = document.createElement('li');
-
-            domUtils.addClass(this.list, 'list');
-            domUtils.addClass(this.clearFloat, 'clearFloat');
-
-            this.list.appendChild(this.clearFloat);
-            this.container.appendChild(this.list);
-        },
-        /* 初始化滚动事件,滚动到地步自动拉取数据 */
-        initEvents: function () {
-            var _this = this;
-
-            /* 滚动拉取图片 */
-            domUtils.on($G('fileList'), 'scroll', function(e){
-                var panel = this;
-                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {
-                    _this.getFileData();
-                }
-            });
-            /* 选中图片 */
-            domUtils.on(this.list, 'click', function (e) {
-                var target = e.target || e.srcElement,
-                    li = target.parentNode;
-
-                if (li.tagName.toLowerCase() == 'li') {
-                    if (domUtils.hasClass(li, 'selected')) {
-                        domUtils.removeClasses(li, 'selected');
-                    } else {
-                        domUtils.addClass(li, 'selected');
-                    }
-                }
-            });
-        },
-        /* 初始化第一次的数据 */
-        initData: function () {
-
-            /* 拉取数据需要使用的值 */
-            this.state = 0;
-            this.listSize = editor.getOpt('fileManagerListSize');
-            this.listIndex = 0;
-            this.listEnd = false;
-
-            /* 第一次拉取数据 */
-            this.getFileData();
-        },
-        /* 向后台拉取图片列表数据 */
-        getFileData: function () {
-            var _this = this;
-
-            if(!_this.listEnd && !this.isLoadingData) {
-                this.isLoadingData = true;
-                ajax.request(editor.getActionUrl(editor.getOpt('fileManagerActionName')), {
-                    timeout: 100000,
-                    data: utils.extend({
-                            start: this.listIndex,
-                            size: this.listSize
-                        }, editor.queryCommandValue('serverparam')),
-                    method: 'get',
-                    onsuccess: function (r) {
-                        try {
-                            var json = eval('(' + r.responseText + ')');
-                            if (json.state == 'SUCCESS') {
-                                _this.pushData(json.list);
-                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);
-                                if(_this.listIndex >= json.total) {
-                                    _this.listEnd = true;
-                                }
-                                _this.isLoadingData = false;
-                            }
-                        } catch (e) {
-                            if(r.responseText.indexOf('ue_separate_ue') != -1) {
-                                var list = r.responseText.split(r.responseText);
-                                _this.pushData(list);
-                                _this.listIndex = parseInt(list.length);
-                                _this.listEnd = true;
-                                _this.isLoadingData = false;
-                            }
-                        }
-                    },
-                    onerror: function () {
-                        _this.isLoadingData = false;
-                    }
-                });
-            }
-        },
-        /* 添加图片到列表界面上 */
-        pushData: function (list) {
-            var i, item, img, filetype, preview, icon, _this = this,
-                urlPrefix = editor.getOpt('fileManagerUrlPrefix');
-            for (i = 0; i < list.length; i++) {
-                if(list[i] && list[i].url) {
-                    item = document.createElement('li');
-                    icon = document.createElement('span');
-                    filetype = list[i].url.substr(list[i].url.lastIndexOf('.') + 1);
-
-                    if ( "png|jpg|jpeg|gif|bmp".indexOf(filetype) != -1 ) {
-                        preview = document.createElement('img');
-                        domUtils.on(preview, 'load', (function(image){
-                            return function(){
-                                _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);
-                            };
-                        })(preview));
-                        preview.width = 113;
-                        preview.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );
-                    } else {
-                        var ic = document.createElement('i'),
-                            textSpan = document.createElement('span');
-                        textSpan.innerHTML = list[i].url.substr(list[i].url.lastIndexOf('/') + 1);
-                        preview = document.createElement('div');
-                        preview.appendChild(ic);
-                        preview.appendChild(textSpan);
-                        domUtils.addClass(preview, 'file-wrapper');
-                        domUtils.addClass(textSpan, 'file-title');
-                        domUtils.addClass(ic, 'file-type-' + filetype);
-                        domUtils.addClass(ic, 'file-preview');
-                    }
-                    domUtils.addClass(icon, 'icon');
-                    item.setAttribute('data-url', urlPrefix + list[i].url);
-                    if (list[i].original) {
-                        item.setAttribute('data-title', list[i].original);
-                    }
-
-                    item.appendChild(preview);
-                    item.appendChild(icon);
-                    this.list.insertBefore(item, this.clearFloat);
-                }
-            }
-        },
-        /* 改变图片大小 */
-        scale: function (img, w, h, type) {
-            var ow = img.width,
-                oh = img.height;
-
-            if (type == 'justify') {
-                if (ow >= oh) {
-                    img.width = w;
-                    img.height = h * oh / ow;
-                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
-                } else {
-                    img.width = w * ow / oh;
-                    img.height = h;
-                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
-                }
-            } else {
-                if (ow >= oh) {
-                    img.width = w * ow / oh;
-                    img.height = h;
-                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
-                } else {
-                    img.width = w;
-                    img.height = h * oh / ow;
-                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
-                }
-            }
-        },
-        getInsertList: function () {
-            var i, lis = this.list.children, list = [];
-            for (i = 0; i < lis.length; i++) {
-                if (domUtils.hasClass(lis[i], 'selected')) {
-                    var url = lis[i].getAttribute('data-url');
-                    var title = lis[i].getAttribute('data-title') || url.substr(url.lastIndexOf('/') + 1);
-                    list.push({
-                        title: title,
-                        url: url
-                    });
-                }
-            }
-            return list;
-        }
-    };
-
-
-})();

BIN
public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_chm.gif


BIN
public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_default.png


BIN
public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_doc.gif


BIN
public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_exe.gif


BIN
public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_jpg.gif


BIN
public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_mp3.gif


BIN
public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_mv.gif


BIN
public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_pdf.gif


BIN
public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_ppt.gif


BIN
public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_psd.gif


BIN
public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_rar.gif


BIN
public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_txt.gif


BIN
public/laravel-u-editor/dialogs/attachment/fileTypeImages/icon_xls.gif


BIN
public/laravel-u-editor/dialogs/attachment/images/alignicon.gif


BIN
public/laravel-u-editor/dialogs/attachment/images/alignicon.png


BIN
public/laravel-u-editor/dialogs/attachment/images/bg.png


BIN
public/laravel-u-editor/dialogs/attachment/images/file-icons.gif


BIN
public/laravel-u-editor/dialogs/attachment/images/file-icons.png


BIN
public/laravel-u-editor/dialogs/attachment/images/icons.gif


BIN
public/laravel-u-editor/dialogs/attachment/images/icons.png


BIN
public/laravel-u-editor/dialogs/attachment/images/image.png


BIN
public/laravel-u-editor/dialogs/attachment/images/progress.png


BIN
public/laravel-u-editor/dialogs/attachment/images/success.gif


BIN
public/laravel-u-editor/dialogs/attachment/images/success.png


+ 0 - 94
public/laravel-u-editor/dialogs/background/background.css

@@ -1,94 +0,0 @@
-.wrapper{ width: 424px;margin: 10px auto; zoom:1;position: relative}
-.tabbody{height:225px;}
-.tabbody .panel { position: absolute;width:100%; height:100%;background: #fff; display: none;}
-.tabbody .focus { display: block;}
-
-body{font-size: 12px;color: #888;overflow: hidden;}
-input,label{vertical-align:middle}
-.clear{clear: both;}
-.pl{padding-left: 18px;padding-left: 23px\9;}
-
-#imageList {width: 420px;height: 215px;margin-top: 10px;overflow: hidden;overflow-y: auto;}
-#imageList div {float: left;width: 100px;height: 95px;margin: 5px 10px;}
-#imageList img {cursor: pointer;border: 2px solid white;}
-
-.bgarea{margin: 10px;padding: 5px;height: 84%;border: 1px solid #A8A297;}
-.content div{margin: 10px 0 10px 5px;}
-.content .iptradio{margin: 0px 5px 5px 0px;}
-.txt{width:280px;}
-
-.wrapcolor{height: 19px;}
-div.color{float: left;margin: 0;}
-#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;margin: 0;float: left;}
-div.alignment,#custom{margin-left: 23px;margin-left: 28px\9;}
-#custom input{height: 15px;min-height: 15px;width:20px;}
-#repeatType{width:100px;}
-
-
-/* 图片管理样式 */
-#imgManager {
-    width: 100%;
-    height: 225px;
-}
-#imgManager #imageList{
-    width: 100%;
-    overflow-x: hidden;
-    overflow-y: auto;
-}
-#imgManager ul {
-    display: block;
-    list-style: none;
-    margin: 0;
-    padding: 0;
-}
-#imgManager li {
-    float: left;
-    display: block;
-    list-style: none;
-    padding: 0;
-    width: 113px;
-    height: 113px;
-    margin: 9px 0 0 19px;
-    background-color: #eee;
-    overflow: hidden;
-    cursor: pointer;
-    position: relative;
-}
-#imgManager li.clearFloat {
-    float: none;
-    clear: both;
-    display: block;
-    width:0;
-    height:0;
-    margin: 0;
-    padding: 0;
-}
-#imgManager li img {
-    cursor: pointer;
-}
-#imgManager li .icon {
-    cursor: pointer;
-    width: 113px;
-    height: 113px;
-    position: absolute;
-    top: 0;
-    left: 0;
-    z-index: 2;
-    border: 0;
-    background-repeat: no-repeat;
-}
-#imgManager li .icon:hover {
-    width: 107px;
-    height: 107px;
-    border: 3px solid #1094fa;
-}
-#imgManager li.selected .icon {
-    background-image: url(images/success.png);
-    background-position: 75px 75px;
-}
-#imgManager li.selected .icon:hover {
-    width: 107px;
-    height: 107px;
-    border: 3px solid #1094fa;
-    background-position: 72px 72px;
-}

+ 0 - 56
public/laravel-u-editor/dialogs/background/background.html

@@ -1,56 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
-    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
-    <script type="text/javascript" src="../internal.js"></script>
-    <link rel="stylesheet" type="text/css" href="background.css">
-</head>
-<body>
-    <div id="bg_container" class="wrapper">
-        <div id="tabHeads" class="tabhead">
-            <span class="focus" data-content-id="normal"><var id="lang_background_normal"></var></span>
-            <span class="" data-content-id="imgManager"><var id="lang_background_local"></var></span>
-        </div>
-        <div id="tabBodys" class="tabbody">
-            <div id="normal" class="panel focus">
-                <fieldset class="bgarea">
-                    <legend><var id="lang_background_set"></var></legend>
-                    <div class="content">
-                        <div>
-                            <label><input id="nocolorRadio" class="iptradio" type="radio" name="t" value="none" checked="checked"><var id="lang_background_none"></var></label>
-                            <label><input id="coloredRadio" class="iptradio" type="radio" name="t" value="color"><var id="lang_background_colored"></var></label>
-                        </div>
-                        <div class="wrapcolor pl">
-                            <div class="color">
-                                <var id="lang_background_color"></var>:
-                            </div>
-                            <div id="colorPicker"></div>
-                            <div class="clear"></div>
-                        </div>
-                        <div class="wrapcolor pl">
-                            <label><var id="lang_background_netimg"></var>:</label><input class="txt" type="text" id="url">
-                        </div>
-                        <div id="alignment" class="alignment">
-                            <var id="lang_background_align"></var>:<select id="repeatType">
-                                <option value="center"></option>
-                                <option value="repeat-x"></option>
-                                <option value="repeat-y"></option>
-                                <option value="repeat"></option>
-                                <option value="self"></option>
-                            </select>
-                        </div>
-                        <div id="custom" >
-                            <var id="lang_background_position"></var>:x:<input type="text" size="1" id="x" maxlength="4" value="0">px&nbsp;&nbsp;y:<input type="text" size="1" id="y" maxlength="4" value="0">px
-                        </div>
-                    </div>
-                </fieldset>
-
-            </div>
-            <div id="imgManager" class="panel">
-                <div id="imageList" style=""></div>
-            </div>
-        </div>
-    </div>
-    <script type="text/javascript" src="background.js"></script>
-</body>
-</html>

+ 0 - 376
public/laravel-u-editor/dialogs/background/background.js

@@ -1,376 +0,0 @@
-(function () {
-
-    var onlineImage,
-        backupStyle = editor.queryCommandValue('background');
-
-    window.onload = function () {
-        initTabs();
-        initColorSelector();
-    };
-
-    /* 初始化tab标签 */
-    function initTabs(){
-        var tabs = $G('tabHeads').children;
-        for (var i = 0; i < tabs.length; i++) {
-            domUtils.on(tabs[i], "click", function (e) {
-                var target = e.target || e.srcElement;
-                for (var j = 0; j < tabs.length; j++) {
-                    if(tabs[j] == target){
-                        tabs[j].className = "focus";
-                        var contentId = tabs[j].getAttribute('data-content-id');
-                        $G(contentId).style.display = "block";
-                        if(contentId == 'imgManager') {
-                            initImagePanel();
-                        }
-                    }else {
-                        tabs[j].className = "";
-                        $G(tabs[j].getAttribute('data-content-id')).style.display = "none";
-                    }
-                }
-            });
-        }
-    }
-
-    /* 初始化颜色设置 */
-    function initColorSelector () {
-        var obj = editor.queryCommandValue('background');
-        if (obj) {
-            var color = obj['background-color'],
-                repeat = obj['background-repeat'] || 'repeat',
-                image = obj['background-image'] || '',
-                position = obj['background-position'] || 'center center',
-                pos = position.split(' '),
-                x = parseInt(pos[0]) || 0,
-                y = parseInt(pos[1]) || 0;
-
-            if(repeat == 'no-repeat' && (x || y)) repeat = 'self';
-
-            image = image.match(/url[\s]*\(([^\)]*)\)/);
-            image = image ? image[1]:'';
-            updateFormState('colored', color, image, repeat, x, y);
-        } else {
-            updateFormState();
-        }
-
-        var updateHandler = function () {
-            updateFormState();
-            updateBackground();
-        }
-        domUtils.on($G('nocolorRadio'), 'click', updateBackground);
-        domUtils.on($G('coloredRadio'), 'click', updateHandler);
-        domUtils.on($G('url'), 'keyup', function(){
-            if($G('url').value && $G('alignment').style.display == "none") {
-                utils.each($G('repeatType').children, function(item){
-                    item.selected = ('repeat' == item.getAttribute('value') ? 'selected':false);
-                });
-            }
-            updateHandler();
-        });
-        domUtils.on($G('repeatType'), 'change', updateHandler);
-        domUtils.on($G('x'), 'keyup', updateBackground);
-        domUtils.on($G('y'), 'keyup', updateBackground);
-
-        initColorPicker();
-    }
-
-    /* 初始化颜色选择器 */
-    function initColorPicker() {
-        var me = editor,
-            cp = $G("colorPicker");
-
-        /* 生成颜色选择器ui对象 */
-        var popup = new UE.ui.Popup({
-            content: new UE.ui.ColorPicker({
-                noColorText: me.getLang("clearColor"),
-                editor: me,
-                onpickcolor: function (t, color) {
-                    updateFormState('colored', color);
-                    updateBackground();
-                    UE.ui.Popup.postHide();
-                },
-                onpicknocolor: function (t, color) {
-                    updateFormState('colored', 'transparent');
-                    updateBackground();
-                    UE.ui.Popup.postHide();
-                }
-            }),
-            editor: me,
-            onhide: function () {
-            }
-        });
-
-        /* 设置颜色选择器 */
-        domUtils.on(cp, "click", function () {
-            popup.showAnchor(this);
-        });
-        domUtils.on(document, 'mousedown', function (evt) {
-            var el = evt.target || evt.srcElement;
-            UE.ui.Popup.postHide(el);
-        });
-        domUtils.on(window, 'scroll', function () {
-            UE.ui.Popup.postHide();
-        });
-    }
-
-    /* 初始化在线图片列表 */
-    function initImagePanel() {
-        onlineImage = onlineImage || new OnlineImage('imageList');
-    }
-
-    /* 更新背景色设置面板 */
-    function updateFormState (radio, color, url, align, x, y) {
-        var nocolorRadio = $G('nocolorRadio'),
-            coloredRadio = $G('coloredRadio');
-
-        if(radio) {
-            nocolorRadio.checked = (radio == 'colored' ? false:'checked');
-            coloredRadio.checked = (radio == 'colored' ? 'checked':false);
-        }
-        if(color) {
-            domUtils.setStyle($G("colorPicker"), "background-color", color);
-        }
-
-        if(url && /^\//.test(url)) {
-            var a = document.createElement('a');
-            a.href = url;
-            browser.ie && (a.href = a.href);
-            url = browser.ie ? a.href:(a.protocol + '//' + a.host + a.pathname + a.search + a.hash);
-        }
-
-        if(url || url === '') {
-            $G('url').value = url;
-        }
-        if(align) {
-            utils.each($G('repeatType').children, function(item){
-                item.selected = (align == item.getAttribute('value') ? 'selected':false);
-            });
-        }
-        if(x || y) {
-            $G('x').value = parseInt(x) || 0;
-            $G('y').value = parseInt(y) || 0;
-        }
-
-        $G('alignment').style.display = coloredRadio.checked && $G('url').value ? '':'none';
-        $G('custom').style.display = coloredRadio.checked && $G('url').value && $G('repeatType').value == 'self' ? '':'none';
-    }
-
-    /* 更新背景颜色 */
-    function updateBackground () {
-        if ($G('coloredRadio').checked) {
-            var color = domUtils.getStyle($G("colorPicker"), "background-color"),
-                bgimg = $G("url").value,
-                align = $G("repeatType").value,
-                backgroundObj = {
-                    "background-repeat": "no-repeat",
-                    "background-position": "center center"
-                };
-
-            if (color) backgroundObj["background-color"] = color;
-            if (bgimg) backgroundObj["background-image"] = 'url(' + bgimg + ')';
-            if (align == 'self') {
-                backgroundObj["background-position"] = $G("x").value + "px " + $G("y").value + "px";
-            } else if (align == 'repeat-x' || align == 'repeat-y' || align == 'repeat') {
-                backgroundObj["background-repeat"] = align;
-            }
-
-            editor.execCommand('background', backgroundObj);
-        } else {
-            editor.execCommand('background', null);
-        }
-    }
-
-
-    /* 在线图片 */
-    function OnlineImage(target) {
-        this.container = utils.isString(target) ? document.getElementById(target) : target;
-        this.init();
-    }
-    OnlineImage.prototype = {
-        init: function () {
-            this.reset();
-            this.initEvents();
-        },
-        /* 初始化容器 */
-        initContainer: function () {
-            this.container.innerHTML = '';
-            this.list = document.createElement('ul');
-            this.clearFloat = document.createElement('li');
-
-            domUtils.addClass(this.list, 'list');
-            domUtils.addClass(this.clearFloat, 'clearFloat');
-
-            this.list.id = 'imageListUl';
-            this.list.appendChild(this.clearFloat);
-            this.container.appendChild(this.list);
-        },
-        /* 初始化滚动事件,滚动到地步自动拉取数据 */
-        initEvents: function () {
-            var _this = this;
-
-            /* 滚动拉取图片 */
-            domUtils.on($G('imageList'), 'scroll', function(e){
-                var panel = this;
-                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {
-                    _this.getImageData();
-                }
-            });
-            /* 选中图片 */
-            domUtils.on(this.container, 'click', function (e) {
-                var target = e.target || e.srcElement,
-                    li = target.parentNode,
-                    nodes = $G('imageListUl').childNodes;
-
-                if (li.tagName.toLowerCase() == 'li') {
-                    updateFormState('nocolor', null, '');
-                    for (var i = 0, node; node = nodes[i++];) {
-                        if (node == li && !domUtils.hasClass(node, 'selected')) {
-                            domUtils.addClass(node, 'selected');
-                            updateFormState('colored', null, li.firstChild.getAttribute("_src"), 'repeat');
-                        } else {
-                            domUtils.removeClasses(node, 'selected');
-                        }
-                    }
-                    updateBackground();
-                }
-            });
-        },
-        /* 初始化第一次的数据 */
-        initData: function () {
-
-            /* 拉取数据需要使用的值 */
-            this.state = 0;
-            this.listSize = editor.getOpt('imageManagerListSize');
-            this.listIndex = 0;
-            this.listEnd = false;
-
-            /* 第一次拉取数据 */
-            this.getImageData();
-        },
-        /* 重置界面 */
-        reset: function() {
-            this.initContainer();
-            this.initData();
-        },
-        /* 向后台拉取图片列表数据 */
-        getImageData: function () {
-            var _this = this;
-
-            if(!_this.listEnd && !this.isLoadingData) {
-                this.isLoadingData = true;
-                var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),
-                    isJsonp = utils.isCrossDomainUrl(url);
-                ajax.request(url, {
-                    'timeout': 100000,
-                    'dataType': isJsonp ? 'jsonp':'',
-                    'data': utils.extend({
-                            start: this.listIndex,
-                            size: this.listSize
-                        }, editor.queryCommandValue('serverparam')),
-                    'method': 'get',
-                    'onsuccess': function (r) {
-                        try {
-                            var json = isJsonp ? r:eval('(' + r.responseText + ')');
-                            if (json.state == 'SUCCESS') {
-                                _this.pushData(json.list);
-                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);
-                                if(_this.listIndex >= json.total) {
-                                    _this.listEnd = true;
-                                }
-                                _this.isLoadingData = false;
-                            }
-                        } catch (e) {
-                            if(r.responseText.indexOf('ue_separate_ue') != -1) {
-                                var list = r.responseText.split(r.responseText);
-                                _this.pushData(list);
-                                _this.listIndex = parseInt(list.length);
-                                _this.listEnd = true;
-                                _this.isLoadingData = false;
-                            }
-                        }
-                    },
-                    'onerror': function () {
-                        _this.isLoadingData = false;
-                    }
-                });
-            }
-        },
-        /* 添加图片到列表界面上 */
-        pushData: function (list) {
-            var i, item, img, icon, _this = this,
-                urlPrefix = editor.getOpt('imageManagerUrlPrefix');
-            for (i = 0; i < list.length; i++) {
-                if(list[i] && list[i].url) {
-                    item = document.createElement('li');
-                    img = document.createElement('img');
-                    icon = document.createElement('span');
-
-                    domUtils.on(img, 'load', (function(image){
-                        return function(){
-                            _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);
-                        }
-                    })(img));
-                    img.width = 113;
-                    img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );
-                    img.setAttribute('_src', urlPrefix + list[i].url);
-                    domUtils.addClass(icon, 'icon');
-
-                    item.appendChild(img);
-                    item.appendChild(icon);
-                    this.list.insertBefore(item, this.clearFloat);
-                }
-            }
-        },
-        /* 改变图片大小 */
-        scale: function (img, w, h, type) {
-            var ow = img.width,
-                oh = img.height;
-
-            if (type == 'justify') {
-                if (ow >= oh) {
-                    img.width = w;
-                    img.height = h * oh / ow;
-                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
-                } else {
-                    img.width = w * ow / oh;
-                    img.height = h;
-                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
-                }
-            } else {
-                if (ow >= oh) {
-                    img.width = w * ow / oh;
-                    img.height = h;
-                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
-                } else {
-                    img.width = w;
-                    img.height = h * oh / ow;
-                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
-                }
-            }
-        },
-        getInsertList: function () {
-            var i, lis = this.list.children, list = [], align = getAlign();
-            for (i = 0; i < lis.length; i++) {
-                if (domUtils.hasClass(lis[i], 'selected')) {
-                    var img = lis[i].firstChild,
-                        src = img.getAttribute('_src');
-                    list.push({
-                        src: src,
-                        _src: src,
-                        floatStyle: align
-                    });
-                }
-
-            }
-            return list;
-        }
-    };
-
-    dialog.onok = function () {
-        updateBackground();
-        editor.fireEvent('saveScene');
-    };
-    dialog.oncancel = function () {
-        editor.execCommand('background', backupStyle);
-    };
-
-})();

BIN
public/laravel-u-editor/dialogs/background/images/bg.png


BIN
public/laravel-u-editor/dialogs/background/images/success.png


+ 0 - 65
public/laravel-u-editor/dialogs/charts/chart.config.js

@@ -1,65 +0,0 @@
-/*
- * 图表配置文件
- * */
-
-
-//不同类型的配置
-var typeConfig = [
-    {
-        chart: {
-            type: 'line'
-        },
-        plotOptions: {
-            line: {
-                dataLabels: {
-                    enabled: false
-                },
-                enableMouseTracking: true
-            }
-        }
-    }, {
-        chart: {
-            type: 'line'
-        },
-        plotOptions: {
-            line: {
-                dataLabels: {
-                    enabled: true
-                },
-                enableMouseTracking: false
-            }
-        }
-    }, {
-        chart: {
-            type: 'area'
-        }
-    }, {
-        chart: {
-            type: 'bar'
-        }
-    }, {
-        chart: {
-            type: 'column'
-        }
-    }, {
-        chart: {
-            plotBackgroundColor: null,
-            plotBorderWidth: null,
-            plotShadow: false
-        },
-        plotOptions: {
-            pie: {
-                allowPointSelect: true,
-                cursor: 'pointer',
-                dataLabels: {
-                    enabled: true,
-                    color: '#000000',
-                    connectorColor: '#000000',
-                    formatter: function() {
-                        return '<b>'+ this.point.name +'</b>: '+ ( Math.round( this.point.percentage*100 ) / 100 ) +' %';
-                    }
-                }
-            }
-        }
-    }
-];

+ 0 - 165
public/laravel-u-editor/dialogs/charts/charts.css

@@ -1,165 +0,0 @@
-html, body {
-    width: 100%;
-    height: 100%;
-    margin: 0;
-    padding: 0;
-    overflow-x: hidden;
-}
-
-.main {
-    width: 100%;
-    overflow: hidden;
-}
-
-.table-view {
-    height: 100%;
-    float: left;
-    margin: 20px;
-    width: 40%;
-}
-
-.table-view .table-container {
-    width: 100%;
-    margin-bottom: 50px;
-    overflow: scroll;
-}
-
-.table-view th {
-    padding: 5px 10px;
-    background-color: #F7F7F7;
-}
-
-.table-view td {
-    width: 50px;
-    text-align: center;
-    padding:0;
-}
-
-.table-container input {
-    width: 40px;
-    padding: 5px;
-    border: none;
-    outline: none;
-}
-
-.table-view caption {
-    font-size: 18px;
-    text-align: left;
-}
-
-.charts-view {
-    /*margin-left: 49%!important;*/
-    width: 50%;
-    margin-left: 49%;
-    height: 400px;
-}
-
-.charts-container {
-    border-left: 1px solid #c3c3c3;
-}
-
-.charts-format fieldset {
-    padding-left: 20px;
-    margin-bottom: 50px;
-}
-
-.charts-format legend {
-    padding-left: 10px;
-    padding-right: 10px;
-}
-
-.format-item-container {
-    padding: 20px;
-}
-
-.format-item-container label {
-    display: block;
-    margin: 10px 0;
-}
-
-.charts-format .data-item {
-    border: 1px solid black;
-    outline: none;
-    padding: 2px 3px;
-}
-
-/* 图表类型 */
-
-.charts-type {
-    margin-top: 50px;
-    height: 300px;
-}
-
-.scroll-view {
-    border: 1px solid #c3c3c3;
-    border-left: none;
-    border-right: none;
-    overflow: hidden;
-}
-
-.scroll-container {
-    margin: 20px;
-    width: 100%;
-    overflow: hidden;
-}
-
-.scroll-bed {
-    width: 10000px;
-    _margin-top: 20px;
-    -webkit-transition: margin-left .5s ease;
-    -moz-transition: margin-left .5s ease;
-    transition: margin-left .5s ease;
-}
-
-.view-box {
-    display: inline-block;
-    *display: inline;
-    *zoom: 1;
-    margin-right: 20px;
-    border: 2px solid white;
-    line-height: 0;
-    overflow: hidden;
-    cursor: pointer;
-}
-
-.view-box img {
-    border: 1px solid #cecece;
-}
-
-.view-box.selected {
-    border-color: #7274A7;
-}
-
-.button-container {
-    margin-bottom: 20px;
-    text-align: center;
-}
-
-.button-container a {
-    display: inline-block;
-    width: 100px;
-    height: 25px;
-    line-height: 25px;
-    border: 1px solid #c2ccd1;
-    margin-right: 30px;
-    text-decoration: none;
-    color: black;
-    -webkit-border-radius: 2px;
-    -moz-border-radius: 2px;
-    border-radius: 2px;
-}
-
-.button-container a:HOVER {
-    background: #fcfcfc;
-}
-
-.button-container a:ACTIVE {
-    border-top-color: #c2ccd1;
-    box-shadow:inset 0 5px 4px -4px rgba(49, 49, 64, 0.1);
-}
-
-.edui-charts-not-data {
-    height: 100px;
-    line-height: 100px;
-    text-align: center;
-}

+ 0 - 89
public/laravel-u-editor/dialogs/charts/charts.html

@@ -1,89 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <title>chart</title>
-        <meta chartset="utf-8">
-        <link rel="stylesheet" type="text/css" href="charts.css">
-        <script type="text/javascript" src="../internal.js"></script>
-    </head>
-    <body>
-        <div class="main">
-            <div class="table-view">
-                <h3><var id="lang_data_source"></var></h3>
-                <div id="tableContainer" class="table-container"></div>
-                <h3><var id="lang_chart_format"></var></h3>
-                <form name="data-form">
-                    <div class="charts-format">
-                        <fieldset>
-                            <legend><var id="lang_data_align"></var></legend>
-                            <div class="format-item-container">
-                                <label>
-                                    <input type="radio" class="format-ctrl not-pie-item" name="charts-format" value="1" checked="checked">
-                                    <var id="lang_chart_align_same"></var>
-                                </label>
-                                <label>
-                                    <input type="radio" class="format-ctrl not-pie-item" name="charts-format" value="-1">
-                                    <var id="lang_chart_align_reverse"></var>
-                                </label>
-                                <br>
-                            </div>
-                        </fieldset>
-                        <fieldset>
-                            <legend><var id="lang_chart_title"></var></legend>
-                            <div class="format-item-container">
-                                <label>
-                                    <var id="lang_chart_main_title"></var><input type="text" name="title" class="data-item">
-                                </label>
-                                <label>
-                                    <var id="lang_chart_sub_title"></var><input type="text" name="sub-title" class="data-item not-pie-item">
-                                </label>
-                                <label>
-                                    <var id="lang_chart_x_title"></var><input type="text" name="x-title" class="data-item not-pie-item">
-                                </label>
-                                <label>
-                                    <var id="lang_chart_y_title"></var><input type="text" name="y-title" class="data-item not-pie-item">
-                                </label>
-                            </div>
-                        </fieldset>
-                        <fieldset>
-                            <legend><var id="lang_chart_tip"></var></legend>
-                            <div class="format-item-container">
-                                <label>
-                                    <var id="lang_cahrt_tip_prefix"></var>
-                                    <input type="text" id="tipInput" name="tip" class="data-item" disabled="disabled">
-                                </label>
-                                <p><var id="lang_cahrt_tip_description"></var></p>
-                            </div>
-                        </fieldset>
-                        <fieldset>
-                            <legend><var id="lang_chart_data_unit"></var></legend>
-                            <div class="format-item-container">
-                                <label><var id="lang_chart_data_unit_title"></var><input type="text" name="unit" class="data-item"></label>
-                                <p><var id="lang_chart_data_unit_description"></var></p>
-                            </div>
-                        </fieldset>
-                    </div>
-                </form>
-            </div>
-            <div class="charts-view">
-                <div id="chartsContainer" class="charts-container"></div>
-                <div id="chartsType" class="charts-type">
-                    <h3><var id="lang_chart_type"></var></h3>
-                    <div class="scroll-view">
-                        <div class="scroll-container">
-                            <div id="scrollBed" class="scroll-bed"></div>
-                        </div>
-                        <div id="buttonContainer" class="button-container">
-                            <a href="#" data-title="prev"><var id="lang_prev_btn"></var></a>
-                            <a href="#" data-title="next"><var id="lang_next_btn"></var></a>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <script src="../../third-party/jquery-1.10.2.min.js"></script>
-        <script src="../../third-party/highcharts/highcharts.js"></script>
-        <script src="chart.config.js"></script>
-        <script src="charts.js"></script>
-    </body>
-</html>

+ 0 - 519
public/laravel-u-editor/dialogs/charts/charts.js

@@ -1,519 +0,0 @@
-/*
- * 图片转换对话框脚本
- **/
-
-var tableData = [],
-    //编辑器页面table
-    editorTable = null,
-    chartsConfig = window.typeConfig,
-    resizeTimer = null,
-    //初始默认图表类型
-    currentChartType = 0;
-
-window.onload = function () {
-
-    editorTable = domUtils.findParentByTagName( editor.selection.getRange().startContainer, 'table', true);
-
-    //未找到表格, 显示错误页面
-    if ( !editorTable ) {
-        document.body.innerHTML = "<div class='edui-charts-not-data'>未找到数据</div>";
-        return;
-    }
-
-    //初始化图表类型选择
-    initChartsTypeView();
-    renderTable( editorTable );
-    initEvent();
-    initUserConfig( editorTable.getAttribute( "data-chart" ) );
-    $( "#scrollBed .view-box:eq("+ currentChartType +")" ).trigger( "click" );
-    updateViewType( currentChartType );
-
-    dialog.addListener( "resize", function () {
-
-        if ( resizeTimer != null ) {
-            window.clearTimeout( resizeTimer );
-        }
-
-        resizeTimer = window.setTimeout( function () {
-
-            resizeTimer = null;
-
-            renderCharts();
-
-        }, 500 );
-
-    } );
-
-};
-
-function initChartsTypeView () {
-
-    var contents = [];
-
-    for ( var i = 0, len = chartsConfig.length; i<len; i++ ) {
-
-        contents.push( '<div class="view-box" data-chart-type="'+ i +'"><img width="300" src="images/charts'+ i +'.png"></div>' );
-
-    }
-
-    $( "#scrollBed" ).html( contents.join( "" ) );
-
-}
-
-//渲染table, 以便用户修改数据
-function renderTable ( table ) {
-
-    var tableHtml = [];
-
-    //构造数据
-    for ( var i = 0, row; row = table.rows[ i ]; i++ ) {
-
-        tableData[ i ] = [];
-        tableHtml[ i ] = [];
-
-        for ( var j = 0, cell; cell = row.cells[ j ]; j++ ) {
-
-            var value = getCellValue( cell );
-
-            if ( i > 0 && j > 0 ) {
-                value = +value;
-            }
-
-            if ( i === 0 || j === 0 ) {
-                tableHtml[ i ].push( '<th>'+ value +'</th>' );
-            } else {
-                tableHtml[ i ].push( '<td><input type="text" class="data-item" value="'+ value +'"></td>' );
-            }
-
-            tableData[ i ][ j ] = value;
-
-        }
-
-        tableHtml[ i ] = tableHtml[ i ].join( "" );
-
-    }
-
-    //draw 表格
-    $( "#tableContainer" ).html( '<table id="showTable" border="1"><tbody><tr>'+ tableHtml.join( "</tr><tr>" ) +'</tr></tbody></table>' );
-
-}
-
-/*
- * 根据表格已有的图表属性初始化当前图表属性
- */
-function initUserConfig ( config ) {
-
-    var parsedConfig = {};
-
-    if ( !config ) {
-        return;
-    }
-
-    config = config.split( ";" );
-
-    $.each( config, function ( index, item ) {
-
-        item = item.split( ":" );
-        parsedConfig[ item[ 0 ] ] = item[ 1 ];
-
-    } );
-
-    setUserConfig( parsedConfig );
-
-}
-
-function initEvent () {
-
-    var cacheValue = null,
-        //图表类型数
-        typeViewCount = chartsConfig.length- 1,
-        $chartsTypeViewBox = $( '#scrollBed .view-box' );
-
-    $( ".charts-format" ).delegate( ".format-ctrl", "change", function () {
-
-        renderCharts();
-
-    } )
-
-    $( ".table-view" ).delegate( ".data-item", "focus", function () {
-
-        cacheValue = this.value;
-
-    } ).delegate( ".data-item", "blur", function () {
-
-        if ( this.value !== cacheValue ) {
-            renderCharts();
-        }
-
-        cacheValue = null;
-
-    } );
-
-    $( "#buttonContainer" ).delegate( "a", "click", function (e) {
-
-        e.preventDefault();
-
-        if ( this.getAttribute( "data-title" ) === 'prev' ) {
-
-            if ( currentChartType > 0 ) {
-                currentChartType--;
-                updateViewType( currentChartType );
-            }
-
-        } else {
-
-            if ( currentChartType < typeViewCount ) {
-                currentChartType++;
-                updateViewType( currentChartType );
-            }
-
-        }
-
-    } );
-
-    //图表类型变化
-    $( '#scrollBed' ).delegate( ".view-box", "click", function (e) {
-
-        var index = $( this ).attr( "data-chart-type" );
-        $chartsTypeViewBox.removeClass( "selected" );
-        $( $chartsTypeViewBox[ index ] ).addClass( "selected" );
-
-        currentChartType = index | 0;
-
-        //饼图, 禁用部分配置
-        if ( currentChartType === chartsConfig.length - 1 ) {
-
-            disableNotPieConfig();
-
-        //启用完整配置
-        } else {
-
-            enableNotPieConfig();
-
-        }
-
-        renderCharts();
-
-    } );
-
-}
-
-function renderCharts () {
-
-    var data = collectData();
-
-    $('#chartsContainer').highcharts( $.extend( {}, chartsConfig[ currentChartType ], {
-
-        credits: {
-            enabled: false
-        },
-        exporting: {
-            enabled: false
-        },
-        title: {
-            text: data.title,
-            x: -20 //center
-        },
-        subtitle: {
-            text: data.subTitle,
-            x: -20
-        },
-        xAxis: {
-            title: {
-                text: data.xTitle
-            },
-            categories: data.categories
-        },
-        yAxis: {
-            title: {
-                text: data.yTitle
-            },
-            plotLines: [{
-                value: 0,
-                width: 1,
-                color: '#808080'
-            }]
-        },
-        tooltip: {
-            enabled: true,
-            valueSuffix: data.suffix
-        },
-        legend: {
-            layout: 'vertical',
-            align: 'right',
-            verticalAlign: 'middle',
-            borderWidth: 1
-        },
-        series: data.series
-
-    } ));
-
-}
-
-function updateViewType ( index ) {
-
-    $( "#scrollBed" ).css( 'marginLeft', -index*324+'px' );
-
-}
-
-function collectData () {
-
-    var form = document.forms[ 'data-form' ],
-        data = null;
-
-    if ( currentChartType !== chartsConfig.length - 1 ) {
-
-        data = getSeriesAndCategories();
-        $.extend( data, getUserConfig() );
-
-    //饼图数据格式
-    } else {
-        data = getSeriesForPieChart();
-        data.title = form[ 'title' ].value;
-        data.suffix = form[ 'unit' ].value;
-    }
-
-    return data;
-
-}
-
-/**
- * 获取用户配置信息
- */
-function getUserConfig () {
-
-    var form = document.forms[ 'data-form' ],
-        info = {
-            title: form[ 'title' ].value,
-            subTitle: form[ 'sub-title' ].value,
-            xTitle: form[ 'x-title' ].value,
-            yTitle: form[ 'y-title' ].value,
-            suffix: form[ 'unit' ].value,
-            //数据对齐方式
-            tableDataFormat: getTableDataFormat (),
-            //饼图提示文字
-            tip: $( "#tipInput" ).val()
-        };
-
-    return info;
-
-}
-
-function setUserConfig ( config ) {
-
-    var form = document.forms[ 'data-form' ];
-
-    config.title && ( form[ 'title' ].value = config.title );
-    config.subTitle && ( form[ 'sub-title' ].value = config.subTitle );
-    config.xTitle && ( form[ 'x-title' ].value = config.xTitle );
-    config.yTitle && ( form[ 'y-title' ].value = config.yTitle );
-    config.suffix && ( form[ 'unit' ].value = config.suffix );
-    config.dataFormat == "-1" && ( form[ 'charts-format' ][ 1 ].checked = true );
-    config.tip && ( form[ 'tip' ].value = config.tip );
-    currentChartType = config.chartType || 0;
-
-}
-
-function getSeriesAndCategories () {
-
-    var form = document.forms[ 'data-form' ],
-        series = [],
-        categories = [],
-        tmp = [],
-        tableData = getTableData();
-
-    //反转数据
-    if ( getTableDataFormat() === "-1" ) {
-
-        for ( var i = 0, len = tableData.length; i < len; i++ ) {
-
-            for ( var j = 0, jlen = tableData[ i ].length; j < jlen; j++ ) {
-
-                if ( !tmp[ j ] ) {
-                    tmp[ j ] = [];
-                }
-
-                tmp[ j ][ i ] = tableData[ i ][ j ];
-
-            }
-
-        }
-
-        tableData = tmp;
-
-    }
-
-    categories = tableData[0].slice( 1 );
-
-    for ( var i = 1, data; data = tableData[ i ]; i++ ) {
-
-        series.push( {
-            name: data[ 0 ],
-            data: data.slice( 1 )
-        } );
-
-    }
-
-    return {
-        series: series,
-        categories: categories
-    };
-
-}
-
-/*
- * 获取数据源数据对齐方式
- */
-function getTableDataFormat () {
-
-    var form = document.forms[ 'data-form' ],
-        items = form['charts-format'];
-
-    return items[ 0 ].checked ? items[ 0 ].value : items[ 1 ].value;
-
-}
-
-/*
- * 禁用非饼图类型的配置项
- */
-function disableNotPieConfig() {
-
-    updateConfigItem( 'disable' );
-
-}
-
-/*
- * 启用非饼图类型的配置项
- */
-function enableNotPieConfig() {
-
-    updateConfigItem( 'enable' );
-
-}
-
-function updateConfigItem ( value ) {
-
-    var table = $( "#showTable" )[ 0 ],
-        isDisable = value === 'disable' ? true : false;
-
-    //table中的input处理
-    for ( var i = 2 , row; row = table.rows[ i ]; i++ ) {
-
-        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {
-
-            $( "input", cell ).attr( "disabled", isDisable );
-
-        }
-
-    }
-
-    //其他项处理
-    $( "input.not-pie-item" ).attr( "disabled", isDisable );
-    $( "#tipInput" ).attr( "disabled", !isDisable )
-
-}
-
-/*
- * 获取饼图数据
- * 饼图的数据只取第一行的
- **/
-function getSeriesForPieChart () {
-
-    var series = {
-            type: 'pie',
-            name: $("#tipInput").val(),
-            data: []
-        },
-        tableData = getTableData();
-
-
-    for ( var j = 1, jlen = tableData[ 0 ].length; j < jlen; j++ ) {
-
-        var title = tableData[ 0 ][ j ],
-            val = tableData[ 1 ][ j ];
-
-        series.data.push( [ title, val ] );
-
-    }
-
-    return {
-        series: [ series ]
-    };
-
-}
-
-function getTableData () {
-
-    var table = document.getElementById( "showTable" ),
-        xCount = table.rows[0].cells.length - 1,
-        values = getTableInputValue();
-
-    for ( var i = 0, value; value = values[ i ]; i++ ) {
-
-        tableData[ Math.floor( i / xCount ) + 1 ][ i % xCount + 1 ] = values[ i ];
-
-    }
-
-    return tableData;
-
-}
-
-function getTableInputValue () {
-
-    var table = document.getElementById( "showTable" ),
-        inputs = table.getElementsByTagName( "input" ),
-        values = [];
-
-    for ( var i = 0, input; input = inputs[ i ]; i++ ) {
-        values.push( input.value | 0 );
-    }
-
-    return values;
-
-}
-
-function getCellValue ( cell ) {
-
-    var value = utils.trim( ( cell.innerText || cell.textContent || '' ) );
-
-    return value.replace( new RegExp( UE.dom.domUtils.fillChar, 'g' ), '' ).replace( /^\s+|\s+$/g, '' );
-
-}
-
-
-//dialog确认事件
-dialog.onok = function () {
-
-    //收集信息
-    var form = document.forms[ 'data-form' ],
-        info = getUserConfig();
-
-    //添加图表类型
-    info.chartType = currentChartType;
-
-    //同步表格数据到编辑器
-    syncTableData();
-
-    //执行图表命令
-    editor.execCommand( 'charts', info );
-
-};
-
-/*
- * 同步图表编辑视图的表格数据到编辑器里的原始表格
- */
-function syncTableData () {
-
-    var tableData = getTableData();
-
-    for ( var i = 1, row; row = editorTable.rows[ i ]; i++ ) {
-
-        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {
-
-            cell.innerHTML = tableData[ i ] [ j ];
-
-        }
-
-    }
-
-}

BIN
public/laravel-u-editor/dialogs/charts/images/charts0.png


BIN
public/laravel-u-editor/dialogs/charts/images/charts1.png


BIN
public/laravel-u-editor/dialogs/charts/images/charts2.png


BIN
public/laravel-u-editor/dialogs/charts/images/charts3.png


BIN
public/laravel-u-editor/dialogs/charts/images/charts4.png


BIN
public/laravel-u-editor/dialogs/charts/images/charts5.png


+ 0 - 43
public/laravel-u-editor/dialogs/emotion/emotion.css

@@ -1,43 +0,0 @@
-.jd img{
-    background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top;
-    cursor:pointer;width:35px;height:35px;display:block;
-}
-.pp img{
-    background:transparent url(images/fface.gif?v=1.1) no-repeat scroll left top;
-    cursor:pointer;width:25px;height:25px;display:block;
-}
-.ldw img{
-    background:transparent url(images/wface.gif?v=1.1) no-repeat scroll left top;
-    cursor:pointer;width:35px;height:35px;display:block;
-}
-.tsj img{
-    background:transparent url(images/tface.gif?v=1.1) no-repeat scroll left top;
-    cursor:pointer;width:35px;height:35px;display:block;
-}
-.cat img{
-    background:transparent url(images/cface.gif?v=1.1) no-repeat scroll left top;
-    cursor:pointer;width:35px;height:35px;display:block;
-}
-.bb img{
-    background:transparent url(images/bface.gif?v=1.1) no-repeat scroll left top;
-    cursor:pointer;width:35px;height:35px;display:block;
-}
-.youa img{
-    background:transparent url(images/yface.gif?v=1.1) no-repeat scroll left top;
-    cursor:pointer;width:35px;height:35px;display:block;
-}
-
-.smileytable td {height: 37px;}
-#tabPanel{margin-left:5px;overflow: hidden;}
-#tabContent {float:left;background:#FFFFFF;}
-#tabContent div{display: none;width:480px;overflow:hidden;}
-#tabIconReview.show{left:17px;display:block;}
-.menuFocus{background:#ACCD3C;}
-.menuDefault{background:#FFFFFF;}
-#tabIconReview{position:absolute;left:406px;left:398px \9;top:41px;z-index:65533;width:90px;height:76px;}
-img.review{width:90px;height:76px;border:2px solid #9cb945;background:#FFFFFF;background-position:center;background-repeat:no-repeat;}
-
-.wrapper .tabbody{position:relative;float:left;clear:both;padding:10px;width: 95%;}
-.tabbody table{width: 100%;}
-.tabbody td{border:1px solid #BAC498;}
-.tabbody td span{display: block;zoom:1;padding:0 4px;}

+ 0 - 54
public/laravel-u-editor/dialogs/emotion/emotion.html

@@ -1,54 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-    <title></title>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-    <meta name="robots" content="noindex, nofollow"/>
-    <script type="text/javascript" src="../internal.js"></script>
-    <link rel="stylesheet" type="text/css" href="emotion.css">
-</head>
-<body>
-<div id="tabPanel" class="wrapper">
-    <div id="tabHeads" class="tabhead">
-        <span><var id="lang_input_choice"></var></span>
-        <span><var id="lang_input_Tuzki"></var></span>
-        <span><var id="lang_input_lvdouwa"></var></span>
-        <span><var id="lang_input_BOBO"></var></span>
-        <span><var id="lang_input_babyCat"></var></span>
-        <span><var id="lang_input_bubble"></var></span>
-        <span><var id="lang_input_youa"></var></span>
-    </div>
-    <div id="tabBodys" class="tabbody">
-        <div id="tab0"></div>
-        <div id="tab1"></div>
-        <div id="tab2"></div>
-        <div id="tab3"></div>
-        <div id="tab4"></div>
-        <div id="tab5"></div>
-        <div id="tab6"></div>
-    </div>
-</div>
-<div id="tabIconReview">
-    <img id='faceReview' class='review' src="../../themes/default/images/spacer.gif"/>
-</div>
-<script type="text/javascript" src="emotion.js"></script>
-<script type="text/javascript">
-    var emotion = {
-        tabNum:7, //切换面板数量
-        SmilmgName:{ tab0:['j_00', 84], tab1:['t_00', 40], tab2:['w_00', 52], tab3:['B_00', 63], tab4:['C_00', 20], tab5:['i_f', 50], tab6:['y_00', 40] }, //图片前缀名
-        imageFolders:{ tab0:'jx2/', tab1:'tsj/', tab2:'ldw/', tab3:'bobo/', tab4:'babycat/', tab5:'face/', tab6:'youa/'}, //图片对应文件夹路径
-        imageCss:{tab0:'jd', tab1:'tsj', tab2:'ldw', tab3:'bb', tab4:'cat', tab5:'pp', tab6:'youa'}, //图片css类名
-        imageCssOffset:{tab0:35, tab1:35, tab2:35, tab3:35, tab4:35, tab5:25, tab6:35}, //图片偏移
-        SmileyInfor:{
-            tab0:['Kiss', 'Love', 'Yeah', '啊!', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '打酱油', '俯卧撑', '气愤', '?', '吻', '怒', '胜利', 'HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '微笑', '亲吻', '调皮', '惊恐', '耍酷', '发火', '害羞', '汗水', '大哭', '', '加油', '困', '你NB', '晕倒', '开心', '偷笑', '大哭', '滴汗', '叹气', '超赞', '??', '飞吻', '天使', '撒花', '生气', '被砸', '吓傻', '随意吐'],
-            tab1:['Kiss', 'Love', 'Yeah', '啊!', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '摊手', '睡觉', '瘫坐', '无聊', '星星闪', '旋转', '也不行', '郁闷', '正Music', '抓墙', '撞墙至死', '歪头', '戳眼', '飘过', '互相拍砖', '砍死你', '扔桌子', '少林寺', '什么?', '转头', '我爱牛奶', '我踢', '摇晃', '晕厥', '在笼子里', '震荡'],
-            tab2:['大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '我错了', 'money', '气愤', '挑逗', '吻', '怒', '胜利', '委屈', '受伤', '说啥呢?', '闭嘴', '不', '逗你玩儿', '飞吻', '眩晕', '魔法', '我来了', '睡了', '我打', '闭嘴', '打', '打晕了', '刷牙', '爆揍', '炸弹', '倒立', '刮胡子', '邪恶的笑', '不要不要', '爱恋中', '放大仔细看', '偷窥', '超高兴', '晕', '松口气', '我跑', '享受', '修养', '哭', '汗', '啊~', '热烈欢迎', '打酱油', '俯卧撑', '?'],
-            tab3:['HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '泪眼', '流泪', '生气', '吐舌', '喜欢', '旋转', '再见', '抓狂', '汗', '鄙视', '拜', '吐血', '嘘', '打人', '蹦跳', '变脸', '扯肉', '吃To', '吃花', '吹泡泡糖', '大变身', '飞天舞', '回眸', '可怜', '猛抽', '泡泡', '苹果', '亲', '', '骚舞', '烧香', '睡', '套娃娃', '捅捅', '舞倒', '西红柿', '爱慕', '摇', '摇摆', '杂耍', '招财', '被殴', '被球闷', '大惊', '理想', '欧打', '呕吐', '碎', '吐痰'],
-            tab4:['发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '顶', '幸运', '爱心', '躲', '送花', '选择'],
-            tab5:['微笑', '亲吻', '调皮', '惊讶', '耍酷', '发火', '害羞', '汗水', '大哭', '得意', '鄙视', '困', '夸奖', '晕倒', '疑问', '媒婆', '狂吐', '青蛙', '发愁', '亲吻', '', '爱心', '心碎', '玫瑰', '礼物', '哭', '奸笑', '可爱', '得意', '呲牙', '暴汗', '楚楚可怜', '困', '哭', '生气', '惊讶', '口水', '彩虹', '夜空', '太阳', '钱钱', '灯泡', '咖啡', '蛋糕', '音乐', '爱', '胜利', '赞', '鄙视', 'OK'],
-            tab6:['男兜', '女兜', '开心', '乖乖', '偷笑', '大笑', '抽泣', '大哭', '无奈', '滴汗', '叹气', '狂晕', '委屈', '超赞', '??', '疑问', '飞吻', '天使', '撒花', '生气', '被砸', '口水', '泪奔', '吓傻', '吐舌头', '点头', '随意吐', '旋转', '困困', '鄙视', '狂顶', '篮球', '再见', '欢迎光临', '恭喜发财', '稍等', '我在线', '恕不议价', '库房有货', '货在路上']
-        }
-    };
-</script>
-</body>
-</html>

+ 0 - 186
public/laravel-u-editor/dialogs/emotion/emotion.js

@@ -1,186 +0,0 @@
-window.onload = function () {
-    editor.setOpt({
-        emotionLocalization:false
-    });
-
-    emotion.SmileyPath = editor.options.emotionLocalization === true ? 'images/' : "http://img.baidu.com/hi/";
-    emotion.SmileyBox = createTabList( emotion.tabNum );
-    emotion.tabExist = createArr( emotion.tabNum );
-
-    initImgName();
-    initEvtHandler( "tabHeads" );
-};
-
-function initImgName() {
-    for ( var pro in emotion.SmilmgName ) {
-        var tempName = emotion.SmilmgName[pro],
-                tempBox = emotion.SmileyBox[pro],
-                tempStr = "";
-
-        if ( tempBox.length ) return;
-        for ( var i = 1; i <= tempName[1]; i++ ) {
-            tempStr = tempName[0];
-            if ( i < 10 ) tempStr = tempStr + '0';
-            tempStr = tempStr + i + '.gif';
-            tempBox.push( tempStr );
-        }
-    }
-}
-
-function initEvtHandler( conId ) {
-    var tabHeads = $G( conId );
-    for ( var i = 0, j = 0; i < tabHeads.childNodes.length; i++ ) {
-        var tabObj = tabHeads.childNodes[i];
-        if ( tabObj.nodeType == 1 ) {
-            domUtils.on( tabObj, "click", (function ( index ) {
-                return function () {
-                    switchTab( index );
-                };
-            })( j ) );
-            j++;
-        }
-    }
-    switchTab( 0 );
-    $G( "tabIconReview" ).style.display = 'none';
-}
-
-function InsertSmiley( url, evt ) {
-    var obj = {
-        src:editor.options.emotionLocalization ? editor.options.UEDITOR_HOME_URL + "dialogs/emotion/" + url : url
-    };
-    obj._src = obj.src;
-    editor.execCommand( 'insertimage', obj );
-    if ( !evt.ctrlKey ) {
-        dialog.popup.hide();
-    }
-}
-
-function switchTab( index ) {
-
-    autoHeight( index );
-    if ( emotion.tabExist[index] == 0 ) {
-        emotion.tabExist[index] = 1;
-        createTab( 'tab' + index );
-    }
-    //获取呈现元素句柄数组
-    var tabHeads = $G( "tabHeads" ).getElementsByTagName( "span" ),
-            tabBodys = $G( "tabBodys" ).getElementsByTagName( "div" ),
-            i = 0, L = tabHeads.length;
-    //隐藏所有呈现元素
-    for ( ; i < L; i++ ) {
-        tabHeads[i].className = "";
-        tabBodys[i].style.display = "none";
-    }
-    //显示对应呈现元素
-    tabHeads[index].className = "focus";
-    tabBodys[index].style.display = "block";
-}
-
-function autoHeight( index ) {
-    var iframe = dialog.getDom( "iframe" ),
-            parent = iframe.parentNode.parentNode;
-    switch ( index ) {
-        case 0:
-            iframe.style.height = "380px";
-            parent.style.height = "392px";
-            break;
-        case 1:
-            iframe.style.height = "220px";
-            parent.style.height = "232px";
-            break;
-        case 2:
-            iframe.style.height = "260px";
-            parent.style.height = "272px";
-            break;
-        case 3:
-            iframe.style.height = "300px";
-            parent.style.height = "312px";
-            break;
-        case 4:
-            iframe.style.height = "140px";
-            parent.style.height = "152px";
-            break;
-        case 5:
-            iframe.style.height = "260px";
-            parent.style.height = "272px";
-            break;
-        case 6:
-            iframe.style.height = "230px";
-            parent.style.height = "242px";
-            break;
-        default:
-
-    }
-}
-
-
-function createTab( tabName ) {
-    var faceVersion = "?v=1.1", //版本号
-            tab = $G( tabName ), //获取将要生成的Div句柄
-            imagePath = emotion.SmileyPath + emotion.imageFolders[tabName], //获取显示表情和预览表情的路径
-            positionLine = 11 / 2, //中间数
-            iWidth = iHeight = 35, //图片长宽
-            iColWidth = 3, //表格剩余空间的显示比例
-            tableCss = emotion.imageCss[tabName],
-            cssOffset = emotion.imageCssOffset[tabName],
-            textHTML = ['<table class="smileytable">'],
-            i = 0, imgNum = emotion.SmileyBox[tabName].length, imgColNum = 11, faceImage,
-            sUrl, realUrl, posflag, offset, infor;
-
-    for ( ; i < imgNum; ) {
-        textHTML.push( '<tr>' );
-        for ( var j = 0; j < imgColNum; j++, i++ ) {
-            faceImage = emotion.SmileyBox[tabName][i];
-            if ( faceImage ) {
-                sUrl = imagePath + faceImage + faceVersion;
-                realUrl = imagePath + faceImage;
-                posflag = j < positionLine ? 0 : 1;
-                offset = cssOffset * i * (-1) - 1;
-                infor = emotion.SmileyInfor[tabName][i];
-
-                textHTML.push( '<td  class="' + tableCss + '"   border="1" width="' + iColWidth + '%" style="border-collapse:collapse;" align="center"  bgcolor="transparent" onclick="InsertSmiley(\'' + realUrl.replace( /'/g, "\\'" ) + '\',event)" onmouseover="over(this,\'' + sUrl + '\',\'' + posflag + '\')" onmouseout="out(this)">' );
-                textHTML.push( '<span>' );
-                textHTML.push( '<img  style="background-position:left ' + offset + 'px;" title="' + infor + '" src="' + emotion.SmileyPath + (editor.options.emotionLocalization ? '0.gif" width="' : 'default/0.gif" width="') + iWidth + '" height="' + iHeight + '"></img>' );
-                textHTML.push( '</span>' );
-            } else {
-                textHTML.push( '<td width="' + iColWidth + '%"   bgcolor="#FFFFFF">' );
-            }
-            textHTML.push( '</td>' );
-        }
-        textHTML.push( '</tr>' );
-    }
-    textHTML.push( '</table>' );
-    textHTML = textHTML.join( "" );
-    tab.innerHTML = textHTML;
-}
-
-function over( td, srcPath, posFlag ) {
-    td.style.backgroundColor = "#ACCD3C";
-    $G( 'faceReview' ).style.backgroundImage = "url(" + srcPath + ")";
-    if ( posFlag == 1 ) $G( "tabIconReview" ).className = "show";
-    $G( "tabIconReview" ).style.display = 'block';
-}
-
-function out( td ) {
-    td.style.backgroundColor = "transparent";
-    var tabIconRevew = $G( "tabIconReview" );
-    tabIconRevew.className = "";
-    tabIconRevew.style.display = 'none';
-}
-
-function createTabList( tabNum ) {
-    var obj = {};
-    for ( var i = 0; i < tabNum; i++ ) {
-        obj["tab" + i] = [];
-    }
-    return obj;
-}
-
-function createArr( tabNum ) {
-    var arr = [];
-    for ( var i = 0; i < tabNum; i++ ) {
-        arr[i] = 0;
-    }
-    return arr;
-}
-

BIN
public/laravel-u-editor/dialogs/emotion/images/0.gif


BIN
public/laravel-u-editor/dialogs/emotion/images/bface.gif


BIN
public/laravel-u-editor/dialogs/emotion/images/cface.gif


BIN
public/laravel-u-editor/dialogs/emotion/images/fface.gif


BIN
public/laravel-u-editor/dialogs/emotion/images/jxface2.gif


BIN
public/laravel-u-editor/dialogs/emotion/images/neweditor-tab-bg.png


BIN
public/laravel-u-editor/dialogs/emotion/images/tface.gif


BIN
public/laravel-u-editor/dialogs/emotion/images/wface.gif


BIN
public/laravel-u-editor/dialogs/emotion/images/yface.gif


+ 0 - 89
public/laravel-u-editor/dialogs/gmap/gmap.html

@@ -1,89 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-        "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title></title>
-    <script type="text/javascript" src="../internal.js"></script>
-    <style type="text/css">
-        .content{width:530px; height: 350px;margin: 10px auto;}
-        .content table{width: 100%}
-        .content table td{vertical-align: middle;}
-        #address{width:220px;height:21px;background: #FFF;border:1px solid #d7d7d7; line-height: 21px;}
-    </style>
-    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
-</head>
-<body>
-<div class="content">
-    <table>
-        <tr>
-            <td><label for="address"><var id="lang_input_address"></var></label></td>
-            <td><input id="address" type="text" /></td>
-            <td><a id="doSearch" href="javascript:void(0)" class="button"><var id="lang_input_search"></var></a></td>
-        </tr>
-    </table>
-    <div id="container" style="width: 100%; height: 340px;margin: 5px auto; border: 1px solid gray;"></div>
-</div>
-<script type="text/javascript">
-    domUtils.on(window,"load",function(){
-        var map = new google.maps.Map(document.getElementById('container'), {
-                zoom: 3,
-                streetViewControl: false,
-                scaleControl: true,
-                mapTypeId: google.maps.MapTypeId.ROADMAP
-            });
-            var imgcss;
-            var marker = new google.maps.Marker({
-                map: map,
-                draggable: true
-            });
-            function doSearch(){
-                var address = document.getElementById('address').value;
-                var geocoder = new google.maps.Geocoder();
-                geocoder.geocode( { 'address': address}, function (results, status) {
-                    if (status == google.maps.GeocoderStatus.OK) {
-                        var bounds = results[0].geometry.viewport;
-                        map.fitBounds(bounds);
-                        marker.setPosition(results[0].geometry.location);
-                        marker.setTitle(address);
-                    } else alert(lang.searchError);
-                });
-            }
-            $G('address').onkeydown = function (evt){
-                evt = evt || event;
-                if (evt.keyCode == 13) {
-                    doSearch();
-                }
-            };
-            $G("doSearch").onclick = doSearch;
-            dialog.onok = function (){
-                var center = map.getCenter();
-                var point = marker.getPosition();
-                var url = "http://maps.googleapis.com/maps/api/staticmap?center=" + center.lat() + ',' + center.lng() + "&zoom=" + map.zoom + "&size=520x340&maptype=" + map.getMapTypeId() + "&markers=" + point.lat() + ',' + point.lng() + "&sensor=false";
-                editor.execCommand('inserthtml', '<img width="520" height="340" src="' + url + '"' + (imgcss ? ' style="' + imgcss + '"' :'') + '/>');
-            };
-
-            function getPars(str,par){
-                var reg = new RegExp(par+"=((\\d+|[.,])*)","g");
-                return reg.exec(str)[1];
-            }
-            var img = editor.selection.getRange().getClosedNode();
-            if(img && img.src.indexOf("http://maps.googleapis.com/maps/api/staticmap")!=-1){
-                var url = img.getAttribute("src");
-                var centers = getPars(url,"center").split(",");
-                point = new google.maps.LatLng(Number(centers[0]),Number(centers[1]));
-                map.setCenter(point);
-                map.setZoom(Number(getPars(url,"zoom")));
-                centers = getPars(url,"markers").split(",");
-                marker.setPosition(new google.maps.LatLng(Number(centers[0]),Number(centers[1])));
-                imgcss = img.style.cssText;
-            }else{
-                setTimeout(function(){
-                    doSearch();
-                },30)
-            }
-    });
-
-</script>
-</body>
-</html>

+ 0 - 7
public/laravel-u-editor/dialogs/help/help.css

@@ -1,7 +0,0 @@
-.wrapper{width: 370px;margin: 10px auto;zoom: 1;}
-.tabbody{height: 360px;}
-.tabbody .panel{width:100%;height: 360px;position: absolute;background: #fff;}
-.tabbody .panel h1{font-size:26px;margin: 5px 0 0 5px;}
-.tabbody .panel p{font-size:12px;margin: 5px 0 0 5px;}
-.tabbody table{width:90%;line-height: 20px;margin: 5px 0 0 5px;;}
-.tabbody table thead{font-weight: bold;line-height: 25px;}

+ 0 - 82
public/laravel-u-editor/dialogs/help/help.html

@@ -1,82 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-        "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-    <title>帮助</title>
-    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
-    <script type="text/javascript" src="../internal.js"></script>
-    <link rel="stylesheet" type="text/css" href="help.css">
-</head>
-<body>
-<div class="wrapper" id="helptab">
-    <div id="tabHeads" class="tabhead">
-        <span class="focus" tabsrc="about"><var id="lang_input_about"></var></span>
-        <span tabsrc="shortcuts"><var id="lang_input_shortcuts"></var></span>
-    </div>
-    <div id="tabBodys" class="tabbody">
-        <div id="about" class="panel">
-            <h1>UEditor</h1>
-            <p id="version"></p>
-            <p><var id="lang_input_introduction"></var></p>
-        </div>
-        <div id="shortcuts" class="panel">
-            <table>
-                <thead>
-                <tr>
-                    <td><var id="lang_Txt_shortcuts"></var></td>
-                    <td><var id="lang_Txt_func"></var></td>
-                </tr>
-                </thead>
-                <tbody>
-                <tr>
-                    <td>ctrl+b</td>
-                    <td><var id="lang_Txt_bold"></var></td>
-                </tr>
-                <tr>
-                    <td>ctrl+c</td>
-                    <td><var id="lang_Txt_copy"></var></td>
-                </tr>
-                <tr>
-                    <td>ctrl+x</td>
-                    <td><var id="lang_Txt_cut"></var></td>
-                </tr>
-                <tr>
-                    <td>ctrl+v</td>
-                    <td><var id="lang_Txt_Paste"></var></td>
-                </tr>
-                <tr>
-                    <td>ctrl+y</td>
-                    <td><var id="lang_Txt_undo"></var></td>
-                </tr>
-                <tr>
-                    <td>ctrl+z</td>
-                    <td><var id="lang_Txt_redo"></var></td>
-                </tr>
-                <tr>
-                    <td>ctrl+i</td>
-                    <td><var id="lang_Txt_italic"></var></td>
-                </tr>
-                <tr>
-                    <td>ctrl+u</td>
-                    <td><var id="lang_Txt_underline"></var></td>
-                </tr>
-                <tr>
-                    <td>ctrl+a</td>
-                    <td><var id="lang_Txt_selectAll"></var></td>
-                </tr>
-                <tr>
-                    <td>shift+enter</td>
-                    <td><var id="lang_Txt_visualEnter"></var></td>
-                </tr>
-                <tr>
-                    <td>alt+z</td>
-                    <td><var id="lang_Txt_fullscreen"></var></td>
-                </tr>
-                </tbody>
-            </table>
-        </div>
-    </div>
-</div>
-<script type="text/javascript" src="help.js"></script>
-</body>
-</html>

+ 0 - 56
public/laravel-u-editor/dialogs/help/help.js

@@ -1,56 +0,0 @@
-/**
- * Created with JetBrains PhpStorm.
- * User: xuheng
- * Date: 12-9-26
- * Time: 下午1:06
- * To change this template use File | Settings | File Templates.
- */
-/**
- * tab点击处理事件
- * @param tabHeads
- * @param tabBodys
- * @param obj
- */
-function clickHandler( tabHeads,tabBodys,obj ) {
-    //head样式更改
-    for ( var k = 0, len = tabHeads.length; k < len; k++ ) {
-        tabHeads[k].className = "";
-    }
-    obj.className = "focus";
-    //body显隐
-    var tabSrc = obj.getAttribute( "tabSrc" );
-    for ( var j = 0, length = tabBodys.length; j < length; j++ ) {
-        var body = tabBodys[j],
-            id = body.getAttribute( "id" );
-        body.onclick = function(){
-            this.style.zoom = 1;
-        };
-        if ( id != tabSrc ) {
-            body.style.zIndex = 1;
-        } else {
-            body.style.zIndex = 200;
-        }
-    }
-
-}
-
-/**
- * TAB切换
- * @param tabParentId  tab的父节点ID或者对象本身
- */
-function switchTab( tabParentId ) {
-    var tabElements = $G( tabParentId ).children,
-        tabHeads = tabElements[0].children,
-        tabBodys = tabElements[1].children;
-
-    for ( var i = 0, length = tabHeads.length; i < length; i++ ) {
-        var head = tabHeads[i];
-        if ( head.className === "focus" )clickHandler(tabHeads,tabBodys, head );
-        head.onclick = function () {
-            clickHandler(tabHeads,tabBodys,this);
-        }
-    }
-}
-switchTab("helptab");
-
-document.getElementById('version').innerHTML = parent.UE.version;

+ 0 - 894
public/laravel-u-editor/dialogs/image/image.css

@@ -1,894 +0,0 @@
-@charset "utf-8";
-/* dialog样式 */
-.wrapper {
-    zoom: 1;
-    width: 630px;
-    *width: 626px;
-    height: 380px;
-    margin: 0 auto;
-    padding: 10px;
-    position: relative;
-    font-family: sans-serif;
-}
-
-/*tab样式框大小*/
-.tabhead {
-    float:left;
-}
-.tabbody {
-    width: 100%;
-    height: 346px;
-    position: relative;
-    clear: both;
-}
-
-.tabbody .panel {
-    position: absolute;
-    width: 0;
-    height: 0;
-    background: #fff;
-    overflow: hidden;
-    display: none;
-}
-
-.tabbody .panel.focus {
-    width: 100%;
-    height: 346px;
-    display: block;
-}
-
-/* 图片对齐方式 */
-.alignBar{
-    float:right;
-    margin-top: 5px;
-    position: relative;
-}
-
-.alignBar .algnLabel{
-    float:left;
-    height: 20px;
-    line-height: 20px;
-}
-
-.alignBar #alignIcon{
-    zoom:1;
-    _display: inline;
-    display: inline-block;
-    position: relative;
-}
-.alignBar #alignIcon span{
-    float: left;
-    cursor: pointer;
-    display: block;
-    width: 19px;
-    height: 17px;
-    margin-right: 3px;
-    margin-left: 3px;
-    background-image: url(./images/alignicon.jpg);
-}
-.alignBar #alignIcon .none-align{
-    background-position: 0 -18px;
-}
-.alignBar #alignIcon .left-align{
-    background-position: -20px -18px;
-}
-.alignBar #alignIcon .right-align{
-    background-position: -40px -18px;
-}
-.alignBar #alignIcon .center-align{
-    background-position: -60px -18px;
-}
-.alignBar #alignIcon .none-align.focus{
-    background-position: 0 0;
-}
-.alignBar #alignIcon .left-align.focus{
-    background-position: -20px 0;
-}
-.alignBar #alignIcon .right-align.focus{
-    background-position: -40px 0;
-}
-.alignBar #alignIcon .center-align.focus{
-    background-position: -60px 0;
-}
-
-
-
-
-/* 远程图片样式 */
-#remote {
-    z-index: 200;
-}
-
-#remote .top{
-    width: 100%;
-    margin-top: 25px;
-}
-#remote .left{
-    display: block;
-    float: left;
-    width: 300px;
-    height:10px;
-}
-#remote .right{
-    display: block;
-    float: right;
-    width: 300px;
-    height:10px;
-}
-#remote .row{
-    margin-left: 20px;
-    clear: both;
-    height: 40px;
-}
-
-#remote .row label{
-    text-align: center;
-    width: 50px;
-    zoom:1;
-    _display: inline;
-    display:inline-block;
-    vertical-align: middle;
-}
-#remote .row label.algnLabel{
-    float: left;
-
-}
-
-#remote input.text{
-    width: 150px;
-    padding: 3px 6px;
-    font-size: 14px;
-    line-height: 1.42857143;
-    color: #555;
-    background-color: #fff;
-    background-image: none;
-    border: 1px solid #ccc;
-    border-radius: 4px;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-#remote input.text:focus {
-    border-color: #66afe9;
-    outline: 0;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
-}
-#remote #url{
-    width: 500px;
-    margin-bottom: 2px;
-}
-#remote #width,
-#remote #height{
-    width: 20px;
-    margin-left: 2px;
-    margin-right: 2px;
-}
-#remote #border,
-#remote #vhSpace,
-#remote #title{
-    width: 180px;
-    margin-right: 5px;
-}
-#remote #lock{
-}
-#remote #lockicon{
-    zoom: 1;
-    _display:inline;
-    display: inline-block;
-    width: 20px;
-    height: 20px;
-    background: url("../../themes/default/images/lock.gif") -13px -13px no-repeat;
-    vertical-align: middle;
-}
-#remote #preview{
-    clear: both;
-    width: 260px;
-    height: 240px;
-    z-index: 9999;
-    margin-top: 10px;
-    background-color: #eee;
-    overflow: hidden;
-}
-
-/* 上传图片 */
-.tabbody #upload.panel {
-    width: 0;
-    height: 0;
-    overflow: hidden;
-    position: absolute !important;
-    clip: rect(1px, 1px, 1px, 1px);
-    background: #fff;
-    display: block;
-}
-
-.tabbody #upload.panel.focus {
-    width: 100%;
-    height: 346px;
-    display: block;
-    clip: auto;
-}
-
-#upload .queueList {
-    margin: 0;
-    width: 100%;
-    height: 100%;
-    position: absolute;
-    overflow: hidden;
-}
-
-#upload p {
-    margin: 0;
-}
-
-.element-invisible {
-    width: 0 !important;
-    height: 0 !important;
-    border: 0;
-    padding: 0;
-    margin: 0;
-    overflow: hidden;
-    position: absolute !important;
-    clip: rect(1px, 1px, 1px, 1px);
-}
-
-#upload .placeholder {
-    margin: 10px;
-    border: 2px dashed #e6e6e6;
-    *border: 0px dashed #e6e6e6;
-    height: 172px;
-    padding-top: 150px;
-    text-align: center;
-    background: url(./images/image.png) center 70px no-repeat;
-    color: #cccccc;
-    font-size: 18px;
-    position: relative;
-    top:0;
-    *top: 10px;
-}
-
-#upload .placeholder .webuploader-pick {
-    font-size: 18px;
-    background: #00b7ee;
-    border-radius: 3px;
-    line-height: 44px;
-    padding: 0 30px;
-    *width: 120px;
-    color: #fff;
-    display: inline-block;
-    margin: 0 auto 20px auto;
-    cursor: pointer;
-    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
-}
-
-#upload .placeholder .webuploader-pick-hover {
-    background: #00a2d4;
-}
-
-
-#filePickerContainer {
-    text-align: center;
-}
-
-#upload .placeholder .flashTip {
-    color: #666666;
-    font-size: 12px;
-    position: absolute;
-    width: 100%;
-    text-align: center;
-    bottom: 20px;
-}
-
-#upload .placeholder .flashTip a {
-    color: #0785d1;
-    text-decoration: none;
-}
-
-#upload .placeholder .flashTip a:hover {
-    text-decoration: underline;
-}
-
-#upload .placeholder.webuploader-dnd-over {
-    border-color: #999999;
-}
-
-#upload .filelist {
-    list-style: none;
-    margin: 0;
-    padding: 0;
-    overflow-x: hidden;
-    overflow-y: auto;
-    position: relative;
-    height: 300px;
-}
-
-#upload .filelist:after {
-    content: '';
-    display: block;
-    width: 0;
-    height: 0;
-    overflow: hidden;
-    clear: both;
-    position: relative;
-}
-
-#upload .filelist li {
-    width: 113px;
-    height: 113px;
-    background: url(./images/bg.png);
-    text-align: center;
-    margin: 9px 0 0 9px;
-    *margin: 6px 0 0 6px;
-    position: relative;
-    display: block;
-    float: left;
-    overflow: hidden;
-    font-size: 12px;
-}
-
-#upload .filelist li p.log {
-    position: relative;
-    top: -45px;
-}
-
-#upload .filelist li p.title {
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    overflow: hidden;
-    white-space: nowrap;
-    text-overflow: ellipsis;
-    top: 5px;
-    text-indent: 5px;
-    text-align: left;
-}
-
-#upload .filelist li p.progress {
-    position: absolute;
-    width: 100%;
-    bottom: 0;
-    left: 0;
-    height: 8px;
-    overflow: hidden;
-    z-index: 50;
-    margin: 0;
-    border-radius: 0;
-    background: none;
-    -webkit-box-shadow: 0 0 0;
-}
-
-#upload .filelist li p.progress span {
-    display: none;
-    overflow: hidden;
-    width: 0;
-    height: 100%;
-    background: #1483d8 url(./images/progress.png) repeat-x;
-
-    -webit-transition: width 200ms linear;
-    -moz-transition: width 200ms linear;
-    -o-transition: width 200ms linear;
-    -ms-transition: width 200ms linear;
-    transition: width 200ms linear;
-
-    -webkit-animation: progressmove 2s linear infinite;
-    -moz-animation: progressmove 2s linear infinite;
-    -o-animation: progressmove 2s linear infinite;
-    -ms-animation: progressmove 2s linear infinite;
-    animation: progressmove 2s linear infinite;
-
-    -webkit-transform: translateZ(0);
-}
-
-@-webkit-keyframes progressmove {
-    0% {
-        background-position: 0 0;
-    }
-    100% {
-        background-position: 17px 0;
-    }
-}
-
-@-moz-keyframes progressmove {
-    0% {
-        background-position: 0 0;
-    }
-    100% {
-        background-position: 17px 0;
-    }
-}
-
-@keyframes progressmove {
-    0% {
-        background-position: 0 0;
-    }
-    100% {
-        background-position: 17px 0;
-    }
-}
-
-#upload .filelist li p.imgWrap {
-    position: relative;
-    z-index: 2;
-    line-height: 113px;
-    vertical-align: middle;
-    overflow: hidden;
-    width: 113px;
-    height: 113px;
-
-    -webkit-transform-origin: 50% 50%;
-    -moz-transform-origin: 50% 50%;
-    -o-transform-origin: 50% 50%;
-    -ms-transform-origin: 50% 50%;
-    transform-origin: 50% 50%;
-
-    -webit-transition: 200ms ease-out;
-    -moz-transition: 200ms ease-out;
-    -o-transition: 200ms ease-out;
-    -ms-transition: 200ms ease-out;
-    transition: 200ms ease-out;
-}
-
-#upload .filelist li img {
-    width: 100%;
-}
-
-#upload .filelist li p.error {
-    background: #f43838;
-    color: #fff;
-    position: absolute;
-    bottom: 0;
-    left: 0;
-    height: 28px;
-    line-height: 28px;
-    width: 100%;
-    z-index: 100;
-    display:none;
-}
-
-#upload .filelist li .success {
-    display: block;
-    position: absolute;
-    left: 0;
-    bottom: 0;
-    height: 40px;
-    width: 100%;
-    z-index: 200;
-    background: url(./images/success.png) no-repeat right bottom;
-    background: url(./images/success.gif) no-repeat right bottom \9;
-}
-
-#upload .filelist li.filePickerBlock {
-    width: 113px;
-    height: 113px;
-    background: url(./images/image.png) no-repeat center 12px;
-    border: 1px solid #eeeeee;
-    border-radius: 0;
-}
-#upload .filelist li.filePickerBlock div.webuploader-pick  {
-    width: 100%;
-    height: 100%;
-    margin: 0;
-    padding: 0;
-    opacity: 0;
-    background: none;
-    font-size: 0;
-}
-
-#upload .filelist div.file-panel {
-    position: absolute;
-    height: 0;
-    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0;
-    background: rgba(0, 0, 0, 0.5);
-    width: 100%;
-    top: 0;
-    left: 0;
-    overflow: hidden;
-    z-index: 300;
-}
-
-#upload .filelist div.file-panel span {
-    width: 24px;
-    height: 24px;
-    display: inline;
-    float: right;
-    text-indent: -9999px;
-    overflow: hidden;
-    background: url(./images/icons.png) no-repeat;
-    background: url(./images/icons.gif) no-repeat \9;
-    margin: 5px 1px 1px;
-    cursor: pointer;
-    -webkit-tap-highlight-color: rgba(0,0,0,0);
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-}
-
-#upload .filelist div.file-panel span.rotateLeft {
-    display:none;
-    background-position: 0 -24px;
-}
-
-#upload .filelist div.file-panel span.rotateLeft:hover {
-    background-position: 0 0;
-}
-
-#upload .filelist div.file-panel span.rotateRight {
-    display:none;
-    background-position: -24px -24px;
-}
-
-#upload .filelist div.file-panel span.rotateRight:hover {
-    background-position: -24px 0;
-}
-
-#upload .filelist div.file-panel span.cancel {
-    background-position: -48px -24px;
-}
-
-#upload .filelist div.file-panel span.cancel:hover {
-    background-position: -48px 0;
-}
-
-#upload .statusBar {
-    height: 45px;
-    border-bottom: 1px solid #dadada;
-    margin: 0 10px;
-    padding: 0;
-    line-height: 45px;
-    vertical-align: middle;
-    position: relative;
-}
-
-#upload .statusBar .progress {
-    border: 1px solid #1483d8;
-    width: 198px;
-    background: #fff;
-    height: 18px;
-    position: absolute;
-    top: 12px;
-    display: none;
-    text-align: center;
-    line-height: 18px;
-    color: #6dbfff;
-    margin: 0 10px 0 0;
-}
-#upload .statusBar .progress span.percentage {
-    width: 0;
-    height: 100%;
-    left: 0;
-    top: 0;
-    background: #1483d8;
-    position: absolute;
-}
-#upload .statusBar .progress span.text {
-    position: relative;
-    z-index: 10;
-}
-
-#upload .statusBar .info {
-    display: inline-block;
-    font-size: 14px;
-    color: #666666;
-}
-
-#upload .statusBar .btns {
-    position: absolute;
-    top: 7px;
-    right: 0;
-    line-height: 30px;
-}
-
-#filePickerBtn {
-    display: inline-block;
-    float: left;
-}
-#upload .statusBar .btns .webuploader-pick,
-#upload .statusBar .btns .uploadBtn,
-#upload .statusBar .btns .uploadBtn.state-uploading,
-#upload .statusBar .btns .uploadBtn.state-paused {
-    background: #ffffff;
-    border: 1px solid #cfcfcf;
-    color: #565656;
-    padding: 0 18px;
-    display: inline-block;
-    border-radius: 3px;
-    margin-left: 10px;
-    cursor: pointer;
-    font-size: 14px;
-    float: left;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-}
-#upload .statusBar .btns .webuploader-pick-hover,
-#upload .statusBar .btns .uploadBtn:hover,
-#upload .statusBar .btns .uploadBtn.state-uploading:hover,
-#upload .statusBar .btns .uploadBtn.state-paused:hover {
-    background: #f0f0f0;
-}
-
-#upload .statusBar .btns .uploadBtn,
-#upload .statusBar .btns .uploadBtn.state-paused{
-    background: #00b7ee;
-    color: #fff;
-    border-color: transparent;
-}
-#upload .statusBar .btns .uploadBtn:hover,
-#upload .statusBar .btns .uploadBtn.state-paused:hover{
-    background: #00a2d4;
-}
-
-#upload .statusBar .btns .uploadBtn.disabled {
-    pointer-events: none;
-    filter:alpha(opacity=60);
-    -moz-opacity:0.6;
-    -khtml-opacity: 0.6;
-    opacity: 0.6;
-}
-
-
-
-/* 图片管理样式 */
-#online {
-    width: 100%;
-    height: 336px;
-    padding: 10px 0 0 0;
-}
-#online #imageList{
-    width: 100%;
-    height: 100%;
-    overflow-x: hidden;
-    overflow-y: auto;
-    position: relative;
-}
-#online ul {
-    display: block;
-    list-style: none;
-    margin: 0;
-    padding: 0;
-}
-#online li {
-    float: left;
-    display: block;
-    list-style: none;
-    padding: 0;
-    width: 113px;
-    height: 113px;
-    margin: 0 0 9px 9px;
-    *margin: 0 0 6px 6px;
-    background-color: #eee;
-    overflow: hidden;
-    cursor: pointer;
-    position: relative;
-}
-#online li.clearFloat {
-    float: none;
-    clear: both;
-    display: block;
-    width:0;
-    height:0;
-    margin: 0;
-    padding: 0;
-}
-#online li img {
-    cursor: pointer;
-}
-#online li .icon {
-    cursor: pointer;
-    width: 113px;
-    height: 113px;
-    position: absolute;
-    top: 0;
-    left: 0;
-    z-index: 2;
-    border: 0;
-    background-repeat: no-repeat;
-}
-#online li .icon:hover {
-    width: 107px;
-    height: 107px;
-    border: 3px solid #1094fa;
-}
-#online li.selected .icon {
-    background-image: url(images/success.png);
-    background-image: url(images/success.gif)\9;
-    background-position: 75px 75px;
-}
-#online li.selected .icon:hover {
-    width: 107px;
-    height: 107px;
-    border: 3px solid #1094fa;
-    background-position: 72px 72px;
-}
-
-
-/* 图片搜索样式 */
-#search .searchBar {
-    width: 100%;
-    height: 30px;
-    margin: 10px 0 5px 0;
-    padding: 0;
-}
-
-#search input.text{
-    width: 150px;
-    padding: 3px 6px;
-    font-size: 14px;
-    line-height: 1.42857143;
-    color: #555;
-    background-color: #fff;
-    background-image: none;
-    border: 1px solid #ccc;
-    border-radius: 4px;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-#search input.text:focus {
-    border-color: #66afe9;
-    outline: 0;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
-}
-#search input.searchTxt {
-    margin-left:5px;
-    padding-left: 5px;
-    background: #FFF;
-    width: 300px;
-    *width: 260px;
-    height: 21px;
-    line-height: 21px;
-    float: left;
-    dislay: block;
-}
-
-#search .searchType {
-    width: 65px;
-    height: 28px;
-    padding:0;
-    line-height: 28px;
-    border: 1px solid #d7d7d7;
-    border-radius: 0;
-    vertical-align: top;
-    margin-left: 5px;
-    float: left;
-    dislay: block;
-}
-
-#search #searchBtn,
-#search #searchReset {
-    display: inline-block;
-    margin-bottom: 0;
-    margin-right: 5px;
-    padding: 4px 10px;
-    font-weight: 400;
-    text-align: center;
-    vertical-align: middle;
-    cursor: pointer;
-    background-image: none;
-    border: 1px solid transparent;
-    white-space: nowrap;
-    font-size: 14px;
-    border-radius: 4px;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-    vertical-align: top;
-    float: right;
-}
-
-#search #searchBtn {
-    color: white;
-    border-color: #285e8e;
-    background-color: #3b97d7;
-}
-#search #searchReset {
-    color: #333;
-    border-color: #ccc;
-    background-color: #fff;
-}
-#search #searchBtn:hover {
-    background-color: #3276b1;
-}
-#search #searchReset:hover {
-    background-color: #eee;
-}
-
-#search .msg {
-    margin-left: 5px;
-}
-
-#search .searchList{
-    width: 100%;
-    height: 300px;
-    overflow: hidden;
-    clear: both;
-}
-#search .searchList ul{
-    margin:0;
-    padding:0;
-    list-style:none;
-    clear: both;
-    width: 100%;
-    height: 100%;
-    overflow-x: hidden;
-    overflow-y: auto;
-    zoom: 1;
-    position: relative;
-}
-
-#search .searchList li {
-    list-style:none;
-    float: left;
-    display: block;
-    width: 115px;
-    margin: 5px 10px 5px 20px;
-    *margin: 5px 10px 5px 15px;
-    padding:0;
-    font-size: 12px;
-    box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
-    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
-    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
-    position: relative;
-    vertical-align: top;
-    text-align: center;
-    overflow: hidden;
-    cursor: pointer;
-    filter: alpha(Opacity=100);
-    -moz-opacity: 1;
-    opacity: 1;
-    border: 2px solid #eee;
-}
-
-#search .searchList li.selected {
-    filter: alpha(Opacity=40);
-    -moz-opacity: 0.4;
-    opacity: 0.4;
-    border: 2px solid #00a0e9;
-}
-
-#search .searchList li p {
-    background-color: #eee;
-    margin: 0;
-    padding: 0;
-    position: relative;
-    width:100%;
-    height:115px;
-    overflow: hidden;
-}
-
-#search .searchList li p img {
-    cursor: pointer;
-    border: 0;
-}
-
-#search .searchList li a {
-    color: #999;
-    border-top: 1px solid #F2F2F2;
-    background: #FAFAFA;
-    text-align: center;
-    display: block;
-    padding: 0 5px;
-    width: 105px;
-    height:32px;
-    line-height:32px;
-    white-space:nowrap;
-    text-overflow:ellipsis;
-    text-decoration: none;
-    overflow: hidden;
-    word-break: break-all;
-}
-
-#search .searchList a:hover {
-    text-decoration: underline;
-    color: #333;
-}
-#search .searchList .clearFloat{
-    clear: both;
-}

+ 0 - 120
public/laravel-u-editor/dialogs/image/image.html

@@ -1,120 +0,0 @@
-<!doctype html>
-<html>
-<head>
-    <meta charset="UTF-8">
-    <title>ueditor图片对话框</title>
-    <script type="text/javascript" src="../internal.js"></script>
-
-    <!-- jquery -->
-    <script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>
-
-    <!-- webuploader -->
-    <script src="../../third-party/webuploader/webuploader.min.js"></script>
-    <link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">
-
-    <!-- image dialog -->
-    <link rel="stylesheet" href="image.css" type="text/css" />
-</head>
-<body>
-
-    <div class="wrapper">
-        <div id="tabhead" class="tabhead">
-            <span class="tab" data-content-id="remote"><var id="lang_tab_remote"></var></span>
-            <span class="tab focus" data-content-id="upload"><var id="lang_tab_upload"></var></span>
-            <span class="tab" data-content-id="online"><var id="lang_tab_online"></var></span>
-            <span class="tab" data-content-id="search"><var id="lang_tab_search"></var></span>
-        </div>
-        <div class="alignBar">
-            <label class="algnLabel"><var id="lang_input_align"></var></label>
-                    <span id="alignIcon">
-                        <span id="noneAlign" class="none-align focus" data-align="none"></span>
-                        <span id="leftAlign" class="left-align" data-align="left"></span>
-                        <span id="rightAlign" class="right-align" data-align="right"></span>
-                        <span id="centerAlign" class="center-align" data-align="center"></span>
-                    </span>
-            <input id="align" name="align" type="hidden" value="none"/>
-        </div>
-        <div id="tabbody" class="tabbody">
-
-            <!-- 远程图片 -->
-            <div id="remote" class="panel">
-                <div class="top">
-                    <div class="row">
-                        <label for="url"><var id="lang_input_url"></var></label>
-                        <span><input class="text" id="url" type="text"/></span>
-                    </div>
-                </div>
-                <div class="left">
-                    <div class="row">
-                        <label><var id="lang_input_size"></var></label>
-                        <span><var id="lang_input_width">&nbsp;&nbsp;</var><input class="text" type="text" id="width"/>px </span>
-                        <span><var id="lang_input_height">&nbsp;&nbsp;</var><input class="text" type="text" id="height"/>px </span>
-                        <span><input id="lock" type="checkbox" disabled="disabled"><span id="lockicon"></span></span>
-                    </div>
-                    <div class="row">
-                        <label><var id="lang_input_border"></var></label>
-                        <span><input class="text" type="text" id="border"/>px </span>
-                    </div>
-                    <div class="row">
-                        <label><var id="lang_input_vhspace"></var></label>
-                        <span><input class="text" type="text" id="vhSpace"/>px </span>
-                    </div>
-                    <div class="row">
-                        <label><var id="lang_input_title"></var></label>
-                        <span><input class="text" type="text" id="title"/></span>
-                    </div>
-                </div>
-                <div class="right"><div id="preview"></div></div>
-            </div>
-
-            <!-- 上传图片 -->
-            <div id="upload" class="panel focus">
-                <div id="queueList" class="queueList">
-                    <div class="statusBar element-invisible">
-                        <div class="progress">
-                            <span class="text">0%</span>
-                            <span class="percentage"></span>
-                        </div><div class="info"></div>
-                        <div class="btns">
-                            <div id="filePickerBtn"></div>
-                            <div class="uploadBtn"><var id="lang_start_upload"></var></div>
-                        </div>
-                    </div>
-                    <div id="dndArea" class="placeholder">
-                        <div class="filePickerContainer">
-                            <div id="filePickerReady"></div>
-                        </div>
-                    </div>
-                    <ul class="filelist element-invisible">
-                        <li id="filePickerBlock" class="filePickerBlock"></li>
-                    </ul>
-                </div>
-            </div>
-
-            <!-- 在线图片 -->
-            <div id="online" class="panel">
-                <div id="imageList"><var id="lang_imgLoading"></var></div>
-            </div>
-
-            <!-- 搜索图片 -->
-            <div id="search" class="panel">
-                <div class="searchBar">
-                    <input id="searchTxt" class="searchTxt text" type="text" />
-                    <select id="searchType" class="searchType">
-                        <option value="&s=4&z=0"></option>
-                        <option value="&s=1&z=19"></option>
-                        <option value="&s=2&z=0"></option>
-                        <option value="&s=3&z=0"></option>
-                    </select>
-                    <input id="searchReset" type="button"  />
-                    <input id="searchBtn" type="button"  />
-                </div>
-                <div id="searchList" class="searchList"><ul id="searchListUl"></ul></div>
-            </div>
-
-        </div>
-    </div>
-    <script type="text/javascript" src="image.js"></script>
-
-</body>
-</html>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 1025
public/laravel-u-editor/dialogs/image/image.js


BIN
public/laravel-u-editor/dialogs/image/images/alignicon.jpg


BIN
public/laravel-u-editor/dialogs/image/images/bg.png


BIN
public/laravel-u-editor/dialogs/image/images/icons.gif


BIN
public/laravel-u-editor/dialogs/image/images/icons.png


BIN
public/laravel-u-editor/dialogs/image/images/image.png


BIN
public/laravel-u-editor/dialogs/image/images/progress.png


BIN
public/laravel-u-editor/dialogs/image/images/success.gif


BIN
public/laravel-u-editor/dialogs/image/images/success.png


+ 0 - 98
public/laravel-u-editor/dialogs/insertframe/insertframe.html

@@ -1,98 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-    <title></title>
-    <script type="text/javascript" src="../internal.js"></script>
-    <style type="text/css">
-        .warp {width: 320px;height: 153px;margin-left:5px;padding: 20px 0 0 15px;position: relative;}
-        #url {width: 290px; margin-bottom: 2px; margin-left: -6px; margin-left: -2px\9;*margin-left:0;_margin-left:0; }
-        .format span{display: inline-block; width: 58px;text-align: center; zoom:1;}
-        table td{padding:5px 0;}
-        #align{width: 65px;height: 23px;line-height: 22px;}
-    </style>
-</head>
-<body>
-<div class="warp">
-        <table width="300" cellpadding="0" cellspacing="0">
-            <tr>
-                <td colspan="2" class="format">
-                    <span><var id="lang_input_address"></var></span>
-                    <input style="width:200px" id="url" type="text" value=""/>
-                </td>
-            </tr>
-            <tr>
-                <td colspan="2" class="format"><span><var id="lang_input_width"></var></span><input style="width:200px" type="text" id="width"/> px</td>
-
-            </tr>
-            <tr>
-                <td colspan="2" class="format"><span><var id="lang_input_height"></var></span><input style="width:200px" type="text" id="height"/> px</td>
-            </tr>
-            <tr>
-                <td><span><var id="lang_input_isScroll"></var></span><input type="checkbox" id="scroll"/> </td>
-                <td><span><var id="lang_input_frameborder"></var></span><input type="checkbox" id="frameborder"/> </td>
-            </tr>
-
-            <tr>
-                <td colspan="2"><span><var id="lang_input_alignMode"></var></span>
-                    <select id="align">
-                        <option value=""></option>
-                        <option value="left"></option>
-                        <option value="right"></option>
-                    </select>
-                </td>
-            </tr>
-        </table>
-</div>
-<script type="text/javascript">
-    var iframe = editor._iframe;
-    if(iframe){
-        $G("url").value = iframe.getAttribute("src")||"";
-        $G("width").value = iframe.getAttribute("width")||iframe.style.width.replace("px","")||"";
-        $G("height").value = iframe.getAttribute("height") || iframe.style.height.replace("px","") ||"";
-        $G("scroll").checked = (iframe.getAttribute("scrolling") == "yes") ? true : false;
-        $G("frameborder").checked = (iframe.getAttribute("frameborder") == "1") ? true : false;
-        $G("align").value = iframe.align ? iframe.align : "";
-    }
-    function queding(){
-        var  url = $G("url").value.replace(/^\s*|\s*$/ig,""),
-                width = $G("width").value,
-                height = $G("height").value,
-                scroll = $G("scroll"),
-                frameborder = $G("frameborder"),
-                float = $G("align").value,
-                newIframe = editor.document.createElement("iframe"),
-                div;
-        if(!url){
-            alert(lang.enterAddress);
-            return false;
-        }
-        newIframe.setAttribute("src",/http:\/\/|https:\/\//ig.test(url) ? url : "http://"+url);
-        /^[1-9]+[.]?\d*$/g.test( width ) ? newIframe.setAttribute("width",width) : "";
-        /^[1-9]+[.]?\d*$/g.test( height ) ? newIframe.setAttribute("height",height) : "";
-        scroll.checked ?  newIframe.setAttribute("scrolling","yes") : newIframe.setAttribute("scrolling","no");
-        frameborder.checked ?  newIframe.setAttribute("frameborder","1",0) : newIframe.setAttribute("frameborder","0",0);
-        float ? newIframe.setAttribute("align",float) :  newIframe.setAttribute("align","");
-        if(iframe){
-            iframe.parentNode.insertBefore(newIframe,iframe);
-            domUtils.remove(iframe);
-        }else{
-            div = editor.document.createElement("div");
-            div.appendChild(newIframe);
-            editor.execCommand("inserthtml",div.innerHTML);
-        }
-        editor._iframe = null;
-        dialog.close();
-    }
-    dialog.onok = queding;
-    $G("url").onkeydown = function(evt){
-        evt = evt || event;
-        if(evt.keyCode == 13){
-            queding();
-        }
-    };
-    $focus($G( "url" ));
-
-</script>
-</body>
-</html>

+ 0 - 81
public/laravel-u-editor/dialogs/internal.js

@@ -1,81 +0,0 @@
-(function () {
-    var parent = window.parent;
-    //dialog对象
-    dialog = parent.$EDITORUI[window.frameElement.id.replace( /_iframe$/, '' )];
-    //当前打开dialog的编辑器实例
-    editor = dialog.editor;
-
-    UE = parent.UE;
-
-    domUtils = UE.dom.domUtils;
-
-    utils = UE.utils;
-
-    browser = UE.browser;
-
-    ajax = UE.ajax;
-
-    $G = function ( id ) {
-        return document.getElementById( id )
-    };
-    //focus元素
-    $focus = function ( node ) {
-        setTimeout( function () {
-            if ( browser.ie ) {
-                var r = node.createTextRange();
-                r.collapse( false );
-                r.select();
-            } else {
-                node.focus()
-            }
-        }, 0 )
-    };
-    utils.loadFile(document,{
-        href:editor.options.themePath + editor.options.theme + "/dialogbase.css?cache="+Math.random(),
-        tag:"link",
-        type:"text/css",
-        rel:"stylesheet"
-    });
-    lang = editor.getLang(dialog.className.split( "-" )[2]);
-    if(lang){
-        domUtils.on(window,'load',function () {
-
-            var langImgPath = editor.options.langPath + editor.options.lang + "/images/";
-            //针对静态资源
-            for ( var i in lang["static"] ) {
-                var dom = $G( i );
-                if(!dom) continue;
-                var tagName = dom.tagName,
-                    content = lang["static"][i];
-                if(content.src){
-                    //clone
-                    content = utils.extend({},content,false);
-                    content.src = langImgPath + content.src;
-                }
-                if(content.style){
-                    content = utils.extend({},content,false);
-                    content.style = content.style.replace(/url\s*\(/g,"url(" + langImgPath)
-                }
-                switch ( tagName.toLowerCase() ) {
-                    case "var":
-                        dom.parentNode.replaceChild( document.createTextNode( content ), dom );
-                        break;
-                    case "select":
-                        var ops = dom.options;
-                        for ( var j = 0, oj; oj = ops[j]; ) {
-                            oj.innerHTML = content.options[j++];
-                        }
-                        for ( var p in content ) {
-                            p != "options" && dom.setAttribute( p, content[p] );
-                        }
-                        break;
-                    default :
-                        domUtils.setAttributes( dom, content);
-                }
-            }
-        } );
-    }
-
-
-})();
-

+ 0 - 126
public/laravel-u-editor/dialogs/link/link.html

@@ -1,126 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-        "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-    <title></title>
-    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
-    <script type="text/javascript" src="../internal.js"></script>
-    <style type="text/css">
-        *{margin:0;padding:0;color: #838383;}
-        table{font-size: 12px;margin: 10px;line-height: 30px}
-        .txt{width:300px;height:21px;line-height:21px;border:1px solid #d7d7d7;}
-    </style>
-</head>
-<body>
-    <table>
-        <tr>
-            <td><label for="text"> <var id="lang_input_text"></var></label></td>
-            <td><input class="txt" id="text" type="text" disabled="true"/></td>
-        </tr>
-        <tr>
-            <td><label for="href"> <var id="lang_input_url"></var></label></td>
-            <td><input class="txt" id="href" type="text" /></td>
-        </tr>
-        <tr>
-            <td><label for="title"> <var id="lang_input_title"></var></label></td>
-            <td><input class="txt" id="title" type="text"/></td>
-        </tr>
-        <tr>
-             <td colspan="2">
-                 <label for="target"><var id="lang_input_target"></var></label>
-                 <input id="target" type="checkbox"/>
-             </td>
-        </tr>
-        <tr>
-            <td colspan="2" id="msg"></td>
-        </tr>
-    </table>
-<script type="text/javascript">
-    var range = editor.selection.getRange(),
-        link = range.collapsed ? editor.queryCommandValue( "link" ) : editor.selection.getStart(),
-        url,
-        text = $G('text'),
-        rangeLink = domUtils.findParentByTagName(range.getCommonAncestor(),'a',true),
-        orgText;
-    link = domUtils.findParentByTagName( link, "a", true );
-    if(link){
-        url = utils.html(link.getAttribute( '_href' ) || link.getAttribute( 'href', 2 ));
-
-        if(rangeLink === link && !link.getElementsByTagName('img').length){
-            text.removeAttribute('disabled');
-            orgText = text.value = link[browser.ie ? 'innerText':'textContent'];
-        }else{
-            text.setAttribute('disabled','true');
-            text.value = lang.validLink;
-        }
-
-    }else{
-        if(range.collapsed){
-            text.removeAttribute('disabled');
-            text.value = '';
-        }else{
-            text.setAttribute('disabled','true');
-            text.value = lang.validLink;
-        }
-
-    }
-    $G("title").value = url ? link.title : "";
-    $G("href").value = url ? url: '';
-    $G("target").checked = url && link.target == "_blank" ? true :  false;
-    $focus($G("href"));
-
-    function handleDialogOk(){
-        var href =$G('href').value.replace(/^\s+|\s+$/g, '');
-        if(href){
-            if(!hrefStartWith(href,["http","/","ftp://",'#'])) {
-                href  = "http://" + href;
-            }
-            var obj = {
-                'href' : href,
-                'target' : $G("target").checked ? "_blank" : '_self',
-                'title' : $G("title").value.replace(/^\s+|\s+$/g, ''),
-                '_href':href
-            };
-            //修改链接内容的情况太特殊了,所以先做到这里了
-            //todo:情况多的时候,做到command里
-            if(orgText && text.value != orgText){
-                link[browser.ie ? 'innerText' : 'textContent'] =  obj.textValue = text.value;
-                range.selectNode(link).select()
-            }
-            if(range.collapsed){
-                obj.textValue = text.value;
-            }
-            editor.execCommand('link',utils.clearEmptyAttrs(obj) );
-            dialog.close();
-        }
-    }
-    dialog.onok = handleDialogOk;
-    $G('href').onkeydown = $G('title').onkeydown = function(evt){
-        evt = evt || window.event;
-        if (evt.keyCode == 13) {
-            handleDialogOk();
-            return false;
-        }
-    };
-    $G('href').onblur = function(){
-        if(!hrefStartWith(this.value,["http","/","ftp://",'#'])){
-            $G("msg").innerHTML = "<span style='color: red'>"+lang.httpPrompt+"</span>";
-        }else{
-            $G("msg").innerHTML = "";
-        }
-    };
-
-    function hrefStartWith(href,arr){
-        href = href.replace(/^\s+|\s+$/g, '');
-        for(var i=0,ai;ai=arr[i++];){
-            if(href.indexOf(ai)==0){
-                return true;
-            }
-        }
-        return false;
-    }
-
-
-</script>
-</body>
-</html>

+ 0 - 135
public/laravel-u-editor/dialogs/map/map.html

@@ -1,135 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title></title>
-    <script type="text/javascript" src="../internal.js"></script>
-    <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.1&services=true"></script>
-    <style type="text/css">
-        .content{width:530px; height: 350px;margin: 10px auto;}
-        .content table{width: 100%}
-        .content table td{vertical-align: middle;}
-        #city,#address{height:21px;background: #FFF;border:1px solid #d7d7d7; line-height: 21px;}
-        #city{width:60px}
-        #address{width:130px}
-        #is_dynamic_label span{vertical-align:middle;margin: 3px 0px 3px 3px;}
-        #is_dynamic_label input{vertical-align:middle;margin: 3px 3px 3px 50px;}
-    </style>
-</head>
-<body>
-<div class="content">
-    <table>
-        <tr>
-            <td><var id="lang_city"></var>:</td>
-            <td><input id="city" type="text" /></td>
-            <td><var id="lang_address"></var>:</td>
-            <td><input id="address" type="text" value="" /></td>
-            <td><a href="javascript:doSearch()" class="button"><var id="lang_search"></var></a></td>
-            <td><label id="is_dynamic_label" for="is_dynamic"><input id="is_dynamic" type="checkbox" name="is_dynamic" /><span><var id="lang_dynamicmap"></var></span></label></td>
-        </tr>
-    </table>
-    <div style="width:100%;height:340px;margin:5px auto;border:1px solid gray" id="container"></div>
-
-</div>
-<script type="text/javascript">
-    var map = new BMap.Map("container"),marker,point,styleStr;
-    map.enableScrollWheelZoom();
-    map.enableContinuousZoom();
-    function doSearch(){
-        if (!document.getElementById('city').value) {
-            alert(lang.cityMsg);
-            return;
-        }
-        var search = new BMap.LocalSearch(document.getElementById('city').value, {
-            onSearchComplete: function (results){
-                if (results && results.getNumPois()) {
-                    var points = [];
-                    for (var i=0; i<results.getCurrentNumPois(); i++) {
-                        points.push(results.getPoi(i).point);
-                    }
-                    if (points.length > 1) {
-                        map.setViewport(points);
-                    } else {
-                        map.centerAndZoom(points[0], 13);
-                    }
-                    point = map.getCenter();
-                    marker.setPoint(point);
-                } else {
-                    alert(lang.errorMsg);
-                }
-            }
-        });
-        search.search(document.getElementById('address').value || document.getElementById('city').value);
-    }
-    //获得参数
-    function getPars(str,par){
-        var reg = new RegExp(par+"=((\\d+|[.,])*)","g");
-        return reg.exec(str)[1];
-    }
-    function init(){
-        var mapNode = editor.selection.getRange().getClosedNode(),
-            isMapImg = mapNode && /api[.]map[.]baidu[.]com/ig.test(mapNode.getAttribute("src")),
-            isMapIframe = mapNode && domUtils.hasClass(mapNode, 'ueditor_baidumap');
-        if(isMapImg || isMapIframe){
-            var url, centerPos, markerPos;
-            if(isMapIframe) {
-                url = decodeURIComponent(mapNode.getAttribute("src"));
-                $G('is_dynamic').checked = true;
-                styleStr = mapNode.style.cssText;
-            } else {
-                url = mapNode.getAttribute("src");
-                styleStr = mapNode.style.cssText;
-            }
-
-            centerPos = getPars(url,"center").split(",");
-            markerPos = getPars(url, "markers").split(",");
-            point = new BMap.Point(Number(centerPos[0]),Number(centerPos[1]));
-            marker = new BMap.Marker(new BMap.Point(Number(markerPos[0]), Number(markerPos[1])));
-            map.addControl(new BMap.NavigationControl());
-            map.centerAndZoom(point, Number(getPars(url,"zoom")));
-        }else{
-            point = new BMap.Point(116.404, 39.915);    // 创建点坐标
-            marker = new BMap.Marker(point);
-            map.addControl(new BMap.NavigationControl());
-            map.centerAndZoom(point, 10);                     // 初始化地图,设置中心点坐标和地图级别。
-        }
-        marker.enableDragging();
-        map.addOverlay(marker);
-    }
-    init();
-    document.getElementById('address').onkeydown = function (evt){
-        evt = evt || event;
-        if (evt.keyCode == 13) {
-            doSearch();
-        }
-    };
-    dialog.onok = function (){
-        var center = map.getCenter();
-        var zoom = map.zoomLevel;
-        var size = map.getSize();
-        var mapWidth = size.width;
-        var mapHeight = size.height;
-        var point = marker.getPoint();
-
-        if($G('is_dynamic').checked) {
-            var URL = editor.options.UEDITOR_HOME_URL,
-                url = [URL + (/\/$/.test(URL) ? '':'/') + "dialogs/map/show.html" +
-                    '#center=' + center.lng + ',' + center.lat,
-                    '&zoom=' + zoom,
-                    '&width=' + mapWidth,
-                    '&height=' + mapHeight,
-                    '&markers=' + point.lng + ',' + point.lat,
-                    '&markerStyles=' + 'l,A'].join('');
-            editor.execCommand('inserthtml', '<iframe class="ueditor_baidumap" src="' + url + '"' + (styleStr ? ' style="' + styleStr + '"' :'') + ' frameborder="0" width="' + (mapWidth+4) + '" height="' + (mapHeight+4) + '"></iframe>');
-        } else {
-            var url = "http://api.map.baidu.com/staticimage?center=" + center.lng + ',' + center.lat +
-                    "&zoom=" + zoom + "&width=" + size.width + '&height=' + size.height + "&markers=" + point.lng + ',' + point.lat;
-            editor.execCommand('inserthtml', '<img width="'+ size.width +'"height="'+ size.height +'" src="' + url + '"' + (styleStr ? ' style="' + styleStr + '"' :'') + '/>');
-        }
-    };
-    document.getElementById("address").focus();
-</script>
-
-
-</body>
-</html>

+ 0 - 118
public/laravel-u-editor/dialogs/map/show.html

@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-    <meta charset="utf-8"/>
-    <meta name="keywords" content="百度地图,百度地图API,百度地图自定义工具,百度地图所见即所得工具"/>
-    <meta name="description" content="百度地图API自定义地图,帮助用户在可视化操作下生成百度地图"/>
-    <title>百度地图API自定义地图</title>
-    <!--引用百度地图API-->
-    <style type="text/css">
-        html, body {
-            margin: 0;
-            padding: 0;
-            overflow: hidden;
-        }
-    </style>
-    <script type="text/javascript" src="http://api.map.baidu.com/api?key=&v=1.1&services=true"></script>
-</head>
-
-<body onload="initMap();">
-<!--百度地图容器-->
-<div style="width:697px;height:550px;border:#ccc solid 1px;" id="dituContent"></div>
-</body>
-<script type="text/javascript">
-    function getParam(name) {
-        return location.href.match(new RegExp('[?#&]' + name + '=([^?#&]+)', 'i')) ? RegExp.$1 : '';
-    }
-    var map, marker;
-    var centerParam = getParam('center');
-    var zoomParam = getParam('zoom');
-    var widthParam = getParam('width');
-    var heightParam = getParam('height');
-    var markersParam = getParam('markers');
-    var markerStylesParam = getParam('markerStyles');
-
-    //创建和初始化地图函数:
-    function initMap() {
-        // [FF]切换模式后报错
-        if (!window.BMap) {
-            return;
-        }
-        var dituContent = document.getElementById('dituContent');
-        dituContent.style.width = widthParam + 'px';
-        dituContent.style.height = heightParam + 'px';
-
-        createMap();//创建地图
-        setMapEvent();//设置地图事件
-        addMapControl();//向地图添加控件
-
-        // 创建标注
-        var markersArr = markersParam.split(',');
-        var point = new BMap.Point(markersArr[0], markersArr[1]);
-        marker = new BMap.Marker(point);
-        marker.enableDragging();
-        map.addOverlay(marker); // 将标注添加到地图中
-
-        if(parent.editor && parent.document.body.contentEditable=="true") { //在编辑状态下
-            setMapListener();//地图改变修改外层的iframe标签src属性
-        }
-    }
-
-    //创建地图函数:
-    function createMap() {
-        map = new BMap.Map("dituContent");//在百度地图容器中创建一个地图
-        var centerArr = centerParam.split(',');
-        var point = new BMap.Point(parseFloat(centerArr[0]), parseFloat(centerArr[1]));//定义一个中心点坐标
-        map.centerAndZoom(point, parseInt(zoomParam));//设定地图的中心点和坐标并将地图显示在地图容器中
-    }
-
-    //地图事件设置函数:
-    function setMapEvent() {
-        map.enableDragging();//启用地图拖拽事件,默认启用(可不写)
-        map.enableScrollWheelZoom();//启用地图滚轮放大缩小
-        map.enableDoubleClickZoom();//启用鼠标双击放大,默认启用(可不写)
-        map.enableKeyboard();//启用键盘上下左右键移动地图
-    }
-
-    //地图控件添加函数:
-    function addMapControl() {
-        //向地图中添加缩放控件
-        var ctrl_nav = new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE});
-        map.addControl(ctrl_nav);
-        //向地图中添加缩略图控件
-        var ctrl_ove = new BMap.OverviewMapControl({anchor: BMAP_ANCHOR_BOTTOM_RIGHT, isOpen: 1});
-        map.addControl(ctrl_ove);
-        //向地图中添加比例尺控件
-        var ctrl_sca = new BMap.ScaleControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT});
-        map.addControl(ctrl_sca);
-    }
-
-    function setMapListener() {
-        var editor = parent.editor, containerIframe,
-            iframes = parent.document.getElementsByTagName('iframe');
-        for (var key in iframes) {
-            if (iframes[key].contentWindow == window) {
-                containerIframe = iframes[key];
-                break;
-            }
-        }
-        if (containerIframe) {
-            map.addEventListener('moveend', mapListenerHandler);
-            map.addEventListener('zoomend', mapListenerHandler);
-            marker.addEventListener('dragend', mapListenerHandler);
-        }
-
-        function mapListenerHandler() {
-            var zoom = map.getZoom(),
-                center = map.getCenter(),
-                marker = window.marker.getPoint();
-            containerIframe.src = containerIframe.src.
-                replace(new RegExp('([?#&])center=([^?#&]+)', 'i'), '$1center=' + center.lng + ',' + center.lat).
-                replace(new RegExp('([?#&])markers=([^?#&]+)', 'i'), '$1markers=' + marker.lng + ',' + marker.lat).
-                replace(new RegExp('([?#&])zoom=([^?#&]+)', 'i'), '$1zoom=' + zoom);
-            editor.fireEvent('saveScene');
-        }
-    }
-</script>
-</html>

+ 0 - 30
public/laravel-u-editor/dialogs/music/music.css

@@ -1,30 +0,0 @@
-.wrapper{margin: 5px 10px;}
-
-.searchBar{height:30px;padding:7px 0 3px;text-align:center;}
-.searchBtn{font-size:13px;height:24px;}
-
-.resultBar{width:460px;margin:5px auto;border: 1px solid #CCC;border-radius: 5px;box-shadow: 2px 2px 5px #D3D6DA;overflow: hidden;}
-
-.listPanel{overflow: hidden;}
-.panelon{display:block;}
-.paneloff{display:none}
-
-.page{width:220px;margin:20px auto;overflow: hidden;}
-.pageon{float:right;width:24px;line-height:24px;height:24px;margin-right: 5px;background: none;border: none;color: #000;font-weight: bold;text-align:center}
-.pageoff{float:right;width:24px;line-height:24px;height:24px;cursor:pointer;background-color: #fff;
-   border: 1px solid #E7ECF0;color: #2D64B3;margin-right: 5px;text-decoration: none;text-align:center;}
-
-.m-box{width:460px;}
-.m-m{float: left;line-height: 20px;height: 20px;}
-.m-h{height:24px;line-height:24px;padding-left: 46px;background-color:#FAFAFA;border-bottom: 1px solid #DAD8D8;font-weight: bold;font-size: 12px;color: #333;}
-.m-l{float:left;width:40px; }
-.m-t{float:left;width:140px;}
-.m-s{float:left;width:110px;}
-.m-z{float:left;width:100px;}
-.m-try-t{float: left;width: 60px;;}
-
-.m-try{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/try_music.gif') no-repeat ;}
-.m-trying{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/stop_music.gif') no-repeat ;}
-
-.loading{width:95px;height:7px;font-size:7px;margin:60px auto;background:url(http://static.tieba.baidu.com/tb/editor/images/loading.gif) no-repeat}
-.empty{width:300px;height:40px;padding:2px;margin:50px auto;line-height:40px; color:#006699;text-align:center;}

+ 0 - 32
public/laravel-u-editor/dialogs/music/music.html

@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8">
-    <title>插入音乐</title>
-    <script type="text/javascript" src="../internal.js"></script>
-    <link rel="stylesheet" type="text/css" href="music.css">
-</head>
-<body>
-<div class="wrapper">
-    <div class="searchBar">
-        <input id="J_searchName" type="text"/>
-        <input type="button" class="searchBtn" id="J_searchBtn">
-    </div>
-    <div class="resultBar" id="J_resultBar">
-        <div class="loading" style="display:none"></div>
-        <div class="empty"><var id="lang_input_tips"></var></div>
-    </div>
-    <div id="J_preview"></div>
-</div>
-<script type="text/javascript" src="music.js"></script>
-<script type="text/javascript">
-    var music = new Music;
-    dialog.onok = function () {
-        music.exec();
-    };
-    dialog.oncancel = function () {
-        $G('J_preview').innerHTML = "";
-    };
-</script>
-</body>
-</html>

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio