���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC readme.txt000064400000021261146731177160006561 0ustar00=== Advanced File Manager === Contributors: modalweb,filemanager Tags: file manager, wordpress file manager, wp file manager, file manager pro, document management,file-manager, wp-filemanager, elfinder, wp-file-manager, ftp, filemanager Requires at least: 4.0 Tested up to: 6.5.2 Requires PHP: 7.0 Stable tag: 5.2.4 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html File manager is a tool for wordpress provides you ability to Edit, Delete, Upload, Rename, Copy, Paste, Download, zip etc and multiple operations. == Description == Most powerful and user friendly file manager for wordpress. Edit, Delete, upload, delete, download, zip, copy etc multiple file operations, No need of any cpanel and FTP. You can access files inside and outside wordpress root directory. = Key Features = * **Editable Root Directory Path:** You can edit root directory path. * **Shortcodes:** Shortcodes for logged in and non logged in users with multiple attributes and features (allows users and users role access) are available for frontend (pro) * **Files Access:** Access files inside and outside wordpress root directory * **User Operations:** Upload, Download and Delete operations * **File Operations:** All operations with files and folders (copy, move, upload, create folder/file, rename, archive, extract, edit, etc.) * **PDF Preview:** PDF Preview feature available * **FTP Support:** Alternative to FTP * **Hide Files Real Path:** Feature to hide the files real and actual path. * **Trash:** Move to Trash Feature * **Themes:** Light and Elegant client UI * **Drag and drop:** Drag & Drop file upload support * **Icon View:** List and Icons view available * **Archives:** Archives create/extract (zip, rar, 7z, tar, gzip, bzip2) * **Image Edit:** Image and File Edit Support * **Preview:** Quicklook, preview for common file types * **Directory Size:** Calculate directory sizes * **Video and Audio:** Video and audio preview/play * **File Search:** Support file search and sort * **High Performance:** High performance server backend * **Local File System:** Uses local file system no need of database * **Keyboard shortcuts:** Keyboard shortcuts available * **Multi Selection:** Multiple file/folder selection * **Move Files:** Move/Copy files with Drag & Drop * **Toolbar:** Rich context menu and toolbar * **Thumbnails:** Thumbnails for image files * **Auto resize:** Auto resize on file upload. * **UTF-8:** UTF-8 Normalizer of file-name and file-path etc. * **Sanitizer:** Sanitizer of file-name and file-path etc. * **Folder upload:** Folder upload (supports on google chrome/Chromium) * **Chunked file upload:** Chunked file upload * **Upload:** Upload directly to the folder * **Creating Archive:** Creating the archive by specifying the file name * **Browsing History:** File browsing history * **Responsive:** Works on tablet and phone > [Buy Shortcode Addon](https://advancedfilemanager.com/pricing/) > [Demo of Shortcode Addon](https://advancedfilemanager.com/shortcode-demo/) = Key Features of Advanced File Manager Shortcode = * **File Manager Access for Logged in Users:** Logged in users can access and manage files on your website front end. * **File Manager Access for Non Logged in Users:** Non Logged in users or visitors can access and manage files on your website front end. * **User Role Restrictions:** You can restrict any user role to access file manager on your website front end. * **Users Restrictions:** You can restrict or block any user to access file manager on your website front end. * **Private Folder Path:** You can set private folder path where users can access files in shortcode. * **Hide files or folders:** You can hide folders or file from private file path for users in shortcode. * **Personal Folder:** User Personal Folder. * **Theme:** You can set theme for file manager in shortcode. * **Language:** You can set any country language for file manager in shortcode. * **Control User Operations:** You can control users operations in Shortcode. You can set operations for your users (upload,download etc). * **View:** Grid and list view for file manager in shortcode. == Installation == 1. Download and Upload the `file-manager-advanced` folder to the directory `/wp-content/plugins/` or simply search in your wordpress admin. 2. Then simply activate the plugin. 3. You can see File Manager Advanced menu in your wordpress admin menus. == Frequently asked questions == = Can we access folders outside wordpress directory ? = Yes you can, go to settings, change root path. ## How to use 1. Install Plugin 2. In Admin File Manager Advanced Menu will appear, click and thats all. == Screenshots == 1. File Manager View - Light Theme. 2. File Manager View - Dark Theme. 3. Settings 4. Image Editor 5. PDF Preview 6. Compress Files and Folders 7. Download Files 8. ACE Editor 9. Code Mirror 10. Multiple Themes for File Manager 11. Multiple Languages for File Manager == Changelog == = 5.2.4 (5th May, 2024) = * Minor Fixes * Compatible with 6.5.2 = 5.2.3 (25th Mar, 2024) = * Directory opening failure issue resolved. * Directory Traversal issues resolved. = 5.2.2 (25th Jan, 2024) = * Directory creation with special character issue fixes * Files restriction issue resolved. = 5.2.1 (21st Jan, 2024) = * Security Fixes = 5.2 (03 Dec, 2023) = * Compatible with wp 6.4 * Upload issue in firefox fixes * Directory traversal fixes = 5.1.2 (10 Sep, 2023) = * Compatible with wp 6.3.1 * Network sites access permitted to super admins and authorized roles. = 5.1.1 (09 Aug, 2023) = * Compatible with wp 6.3 * Directory Traversal bug fixes * Network sites access permitted to super admins. = 5.1 (11 June, 2023) = * Security fixes = 5.0.5 (22 May, 2023) = * Compatible with wp 6.2.2 = 5.0.4 (16 Apr, 2023) = * Compatible with wp 6.2 = 5.0.3 (07 Mar, 2023) = * Compatibility verified = 5.0.2 (07 Jan, 2023) = * Max upload limit field added in settings * User role compatibility added * Fixed firefox dragdrop issue * Performance enhancement = 5.0.1 (27 Nov, 2022) = * Compatible with wp 6.1.1 = 5.0 (25 Oct, 2022) = * Code updations and security fixes = 4.1.6 (11 Oct, 2022) = * Compatible with WP 6.0.2 = 4.1.5 (14 June, 2022) = * Compatible with WP 6.0 = 4.1.4 (19 May, 2022) = * Added Tags = 4.1.3 (18 Apr, 2022) = * Compatible with WP 5.9.3 = 4.1.2 (29 Jan, 2022) = * Removed warnings and compatible with WP 5.9. = 4.1.1 (13 Dec, 2021) = * Added mime check. = 4.1 (02 Oct, 2021) = * Fixed security issues, elFinder Library Update = 4.0 (18 July, 2021) = * Removed warnings and compatible with WP 5.8. = 3.9 (28 Mar, 2021) = * Userroles permissions added = 3.8 (13 Mar, 2021) = * compatible with 5.7 = 3.7 (19 Dec, 2020) = * compatible with 5.6 = 3.6 (31st Aug, 2020) = * compatible with 5.5 = 3.5 (19th July, 2020) = * compatible with 5.4.2 = 3.4 (1st Apr, 2020) = * compatible with 5.4 = 3.3 (23rd Feb, 2020) = * Minor Bug Fixes = 3.2 (16th Feb, 2020) = * Minor Bug Fixes = 3.1 (16th Oct, 2019) = * Minor Bug Fixes = 3.0 (10th Oct, 2019) = * Minor Bug Fixes = 2.9 (14th Sep, 2019) = * Minor Fixes = 2.8 (14th May, 2019) = * WordPress 5.2 compatible = 2.7 (24th Mar, 2019) = * Minor Fixes = 2.6 (21st Feb, 2019) = * Minor code fixes = 2.5 (21st Feb, 2019) = * El-finder Library Updations = 2.4 (23rd Jan, 2019) = * Minor Changes = 2.3 (13th Jan, 2019) = * minor css changes = 2.2 (3rd Jan, 2019) = * minor fixes = 2.1 (25th Dec, 2018) = * minor changes = 2.0 (24th Dec, 2018) = * php warning and errors resolved = 1.9 (29th Nov, 2018) = * Minor Fixes = 1.8 (28th Oct, 2018) = * Minor Fixes = 1.7 (16th Sep, 2018) = * Minor Fixes = 1.6 (17th May, 2018) = * Major Update - Delete issue fixed = 1.5 (25th Apr, 2018) = * Major Update - Elfinder missing jQuery fixes = 1.4.6 (04th Apr, 2018) = * Minor jQuery Changes = 1.4.5 (28th Mar, 2018) = * Minor Designing Changes = 1.4.4 (23rd Mar, 2018) = * Minor Updates = 1.4.3 (1st Mar, 2018) = * New Themes Added for File Manager = 1.4.2 (1st Mar, 2018) = * jQuery UI Conliction Resolved = 1.4.1 (24th Feb, 2018) = * New Field added in Settings = 1.4 (22th Feb, 2018) = * Elfinder Library Updated = 1.3.3 (16th Feb, 2018) = * Code editing issue resolved = 1.3.2 (13th Feb, 2018) = * Minor Updates = 1.3.1 (06th Feb, 2018) = * Editable root directory - please check in settings (controls menu) = 1.3 (30th Jan, 2018) = * Performance Improved * Shortcode Guide added = 1.2 (15th Dec, 2017) = * Code editor issue resolved * Language class confliction issue resolved = 1.1 (12th Dec, 2017) = * Settings added * Languages and File Manager Theme option added. == Minimum requirements for File Manager Advanced == * Wordpress 4.0+ * PHP > 7.0 * MySQL > 5.0 file_manager_advanced.php000064400000001776146731177160011543 0ustar00

Advanced File Manager, we always support you and provide better features for you, please spend some seconds to review our plugin.','file-manager-advanced')?>

| | Advanced File Manager. If you are happy then please ','file-manager-advanced')?>
application/pages/buy_shortcode.php000064400000033725146731177160013557 0ustar00

Advanced File Manager Shortcode Addon to make shortcode work for frontend. Buy Now','file-manager-advanced')?>

Click here for demo

[file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" hide="plugins" operations="upload,download" block_users="5" view="grid" theme="light" lang ="en" upload_allow="all" upload_max_size="2G"]

[file_manager_advanced login="no" path="wp-content" hide="plugins" operations="upload,download" view="grid" theme="light" lang ="en" upload_allow="all" upload_max_size="2G"]

[fma_user_role role="subscriber,editor"]
[file_manager_advanced login="yes" roles="subscriber,editor" path="wp-content" hide="plugins" operations="upload" view="list" theme="light" lang ="en"]
[/fma_user_role]
[fma_user_role role="administrator"]
[file_manager_advanced login="yes" roles="administrator" path="wp-content/plugins" operations="upload" view="list" theme="light" lang ="en"]
[/fma_user_role]

and many more conditions.

[fma_user user="1,2"]
[file_manager_advanced login="yes" roles="subscriber,editor" path="wp-content" hide="plugins" operations="upload" view="list" theme="light" lang ="en"]
[/fma_user]
[fma_user user="3"]
[file_manager_advanced login="yes" roles="administrator" path="wp-content/plugins" operations="upload" view="list" theme="light" lang ="en"]
[/fma_user]

and many more conditions.

Note: user="1,2" here 1,2 are user ids.

Parameter Value Description Usage
login yes/no yes -> For Logged In users, no -> For Non Logged In users [file_manager_advanced login="yes"] - logged in users

[file_manager_advanced login="no"] - non logged in users or visitors

You can use given parameters for both shortcodes.
roles all / administrator, author all -> Allow all user roles , use: roles="all" [file_manager_advanced login="yes" roles="author,editor,administrator"]
path

(1)Any Valid Folder Path. Eg. wp-content/uploads

(2) % - Root Directory

(3) $ - Will generate logged in users personal folder of their username (unique) under location "wp-content/uploads/file-manager-advanced/users", use path="$" in shortcode.

(4) wp-content/uploads/file-manager-advanced/users - you can view and access all user's personal folders under this path.

Any valid folder path or suggested symbols like % and $. [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content/uploads"]
Use given shortcode to auto assign their autogenerated folders to users. [file_manager_advanced login="yes" roles="author,editor,administrator" path="$"]
path_type inside/outside use "outside", if you want to use any directory (Folder) outside wordpress root directory, default: inside [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content/uploads" path_type="inside"]
Use "url" parameter with outside as url = "https://anyoutsidewebsite.com"
hide plugins will hide plugins folder [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins"]
operations all / mkdir, mkfile, rename, duplicate, paste, ban, archive, extract, copy, cut, edit, rm, download, upload, resize, search, info, help, empty all -> allow all operations, you can select according to your use [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins" operations="mkdir,download"]
block_users Any User ID like 1,5 Restrict any user to access file manager by assigning User's ID, Like block_users="1,5". Here 1 and 5 are the user's ids. [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins" operations="mkdir,download" block_users="1,5"]
view list / grid The option 'list' will return the file manager files layout in list format and the option 'grid' will return the file manager files layout in grid format. [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins" operations="mkdir,download" block_users="1,5" view="grid"]
theme light / dark / grey / windows10 / bootstrap With this option you can assign any theme to file manager to change file manager user experience (UX). [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins" operations="mkdir,download" block_users="1,5" view="grid" theme="light"]
lang en or any other language code. At the bottom of this page, there is a list of all languages with codes. You can copy the code and use like lang ="en". [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins" operations="mkdir,download" block_users="1,5" view="grid" theme="light" lang ="en"]
dateformat M d, Y h:i A Files creation or modification date format. You can change this formar as per your requirement. Example: dateformat : 'M d, Y h:i A' will return Mar 13, 2012 05:27 PM [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins" operations="mkdir,download" block_users="1,5" view="grid" theme="light" dateformat="M d, Y h:i A"]
hide_path yes/no The option 'yes' will hide the real file path on preview. Default: no [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins" operations="mkdir,download" block_users="1,5" view="grid" theme="light" dateformat="M d, Y h:i A" hide_path="no"]
enable_trash yes/no The option 'yes' will display trash in file manager on front shortcode page and all the deleted files will go to the trash folder. You can restore the deleted files from Trash. Default: no [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins" operations="mkdir,download" block_users="1,5" view="grid" theme="light" dateformat="M d, Y h:i A" hide_path="no" enable_trash="no"]
height 500 This option is used to adjust in file manager height on front shortcode page. Default: blank (auto) [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins" operations="mkdir,download" block_users="1,5" view="grid" theme="light" dateformat="M d, Y h:i A" hide_path="no" enable_trash="no" height=""]
width 800 This option is used to adjust in file manager width on front shortcode page. Default: blank (auto) [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins" operations="mkdir,download" block_users="1,5" view="grid" theme="light" dateformat="M d, Y h:i A" hide_path="no" enable_trash="no" height="" width=""]
ui With this option to can control the UI of the file manager. There are some options given.
1) files
2) toolbar
3) tree
4) path
5) stat
1) files -> This option will display only files (no toolbar, no left side bar) (use ui="files" in shortcode)
2) toolbar,tree,path,stat -> These options will display whole file manager ui like toolbar etc. Use: ui="toolbar,tree,path,stat". Also you can remove any option from the list as per your requirements. Default: blank (all)
[file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins" operations="mkdir,download" block_users="1,5" view="grid" theme="light" dateformat="M d, Y h:i A" hide_path="no" enable_trash="no" height="" width="" ui="toolbar,tree,path,stat"]
allowed_upload 1) If you want to upload all file formats then use upload_allow="all" option.
2) If you want to upload specific mime types like "image/png" then upload_allow= "image/vnd.adobe.photoshop,image/png". You can add more mime type separated by comma(,). Click here for more mime types.
By using this option you can allow and restrict specific file mime types to upload. Default: all [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins" operations="mkdir,download" block_users="1,5" view="grid" theme="light" dateformat="M d, Y h:i A" hide_path="no" enable_trash="no" height="" width="" ui="toolbar,tree,path,stat" upload_allow= "image/vnd.adobe.photoshop,image/png"]
upload_max_size If you want to restrict users to upload heavy files then use upload_allow="10M" option. Default: 0 (No Limit) Maximum upload file size. This size is per files. Can be set as number with unit like 10M, 500K, 1G. 0 means unlimited upload. By using this option you can restrict users to upload a specific size file. [file_manager_advanced login="yes" roles="author,editor,administrator" path="wp-content" path_type="inside" hide="plugins" operations="mkdir,download" block_users="1,5" view="grid" theme="light" dateformat="M d, Y h:i A" hide_path="no" enable_trash="no" height="" width="" ui="toolbar,tree,path,stat" upload_allow= "image/vnd.adobe.photoshop,image/png" upload_max_size="2G"]

'Create new directory or folder', 'mkfile' => 'Create new file', 'rename' => 'Rename a file or folder', 'duplicate' => 'Duplicate or clone a folder or file', 'paste' => 'Paste a file or folder', 'archive' => 'Create a archive or zip', 'extract' => 'Extract archive or zipped file', 'copy' => 'Copy files or folders', 'cut' => 'Simple cut a file or folder', 'edit' => 'Edit a file like php, js, html, text etc', 'rm' => 'Remove or delete files and folders', 'download' => 'Download files and folders', 'upload' => 'Upload files', 'search' => 'Search files and folders', 'info' => 'Info of files and folders', ); ?> $d){ ?>

langs->locales(); ?> $code) {?>
application/pages/controls.php000064400000022274146731177160012546 0ustar00get(); $locales = $this->langs->locales(); $path = str_replace('\\','/', ABSPATH); $url = site_url(); $type = (isset($_GET['status']) && !empty($_GET['status']) ? intval($_GET['status']) : '' ); $message = ($type == '2') ? 'Unable to save settings.' : 'Settings updated successfully.'; $roles = $this->wpUserRoles(); ?>

File Manager Advanced. If happy then ','file-manager-advanced')?>

save(); if(isset($type) && !empty($type)) { if($type == '1') { ?>


/>

$role) { $checked = ''; if(isset($settings['fma_user_roles'])): if(in_array($key, $settings['fma_user_roles'])) { $checked = 'checked=checked'; } endif; ?> />

Default:

Default:

/>

>

Default:

>

Default:

>

Default:

image/vnd.adobe.photoshop,image/png','file-manager-advanced')?>

Default:

application/pages/images/wait.gif000064400000004151146731177160013064 0ustar00GIF89a,,!,,,Pm[vʽ⨶fq@NZYoCq$KDSue[cyks}{CbxD&KfFSjzf[ncr|Fkvsz~{~ $,4FNV^fnv~'/7?GOW_gowP@ DPB >P%h1K5NnD>@$ DPe,^Ƥ`Rdn!E&Ȣृ D2%O,NZXuPn: ͢#sD@ pn`A |(ۗT'4WyP,S Rt ^ 4՗W^pY2|uiQV v1-ZdT;`;6L wnXs[ •"@,Q;% XcSRG lضc͎Z$%";Ku{UlӎbŠH(t < $URO: ff+HôbC>)qNl;+Ǚ&uن r3Ͳ=Bs/Rǚy[w`Bp-V 07 ,1 r bVE些E aBA x `A?pݘH'0_h`;v{>ҐDd"HF6ґd$%9+LXW iKO-6#Je#1 aSF):djI&!I:+L>tx>"FB# g<̢C$@+R$}XQs]e&7N?؇|!hM`y^"cG>P#F@9<0̧@P!ϑ4#Mcꅬ1`H&L(QFRZy%+re5;z*p)MC~& Rid$QÓu!I?_hŐSdP;/4h2=[ C8ŀJDCmhZ?dPFO;Y6;]DJ%Xɋx6'$NF%)X SQUpH+`qJ"8j|bj3БM&y0B޶*c29՚-W;ܧ2vrẗ́S_4c p.L@gHH,1l}X(INA”{mdUb/qet=hBЇFthF7яt%=iJWҗD;application/pages/images/rateme.png000064400000034674146731177160013431 0ustar00PNG  IHDR\rf IDATxwՕ[=iF " HFp` 2&,]/[{~϶0ص`FH#!$hbLwWP{:+uMwS9,-i`.t3@g=_g>I;=hu'lQhȷ}IwGwbmUJj ִ.P`Jzd'X< TW$|kھ1r(jT/=3SbUgB@oN OdthP> ,)fY`LR$t=kr ;< G\PU}kEF|hWsy4UMs;GVɉ5Ax36Cx#6u^:6Π&'r S0h0[b\ ߢкg7h=& Z)xGUz /l~ "Ճ|hv<Mca)ђ^S4`'A s-Ɓe Qÿ BM{@'Z.&&0raBrg?Sjz:]\7aa~:2J!o@0`-8HW bhدwxP?X|'!OrFx+Nzd]=(qP<zDZq&e0S4[]]wП qk+z,`τuksQOԆ_C mw |8wc]&_W@w+CL*x'Ľ:! jġ;FQտO :Got_N4eB z Z0!58W7~*bʉz|Uqcaw6v|Uk-@t z]KNd*}=ߗOӰ^ъ*/ruh/!&ri3YȢ&72Qѐ~pE-9s4 lޛb&؀ 5唫4_Z?hS>*C;KP#܅M@tri + B#\a,꽦Ru+>T޹o폘5_IE}wELݳ X.G֥_ &"DjLF i#V!_ f,Ywu;-&-ALtd4r)ׯ8Xs]D* u;OB5_nǿ>U64 cj)s w>Z&JN8s)d||h?\"i&w #|X2ITRk: 9@5];\a,T:jk: ]A7ӠK_Sdz;f,yE9D*52~i_sryLL!d}5j/uzQ uir脶@,U cΚ[ ٿ1iQehbȑW #N Ɯ@-n?{3?є?H MKU<5X/QAzHkvp򰓟KkMfbLZhqΧFS dp=Uyhm8p֋߄cSmc5EȁG,6+C?Nz\T8L/<[dd >=$fsU):Γ(1iʤ~B{{8 aD&fJ5?Fx;+U͸9f{Q݂NT4u@ePxu17D[;P"rF)Pŗ \F@bڦ:UD  ZTOΜFsſVq=Va(4 (<G5TÊV5WءjYCmE'+Goa" /ۀ=<Ǻ(48j?(J*jdAVA9/`*cv5dF,F]'v;`qJFhj +ziusa!Uo)Lia5BjVr(n P } !Zv8г||$[Rb̮fK K]7<jgQ@ZV4s\.A7ԚCtXpMvޒ@v!-N@S] vV< g nPjCT ;DTS7d0_7%*QȺXLrc9+*H:/5ǰ>YGg,DS=AlN٥q$=6c#0mjF3;^cL* Kvm⿝Sw7in-1iSsf Wenԫ;Lz,>g”U{Ttz5 ֯.RɑH Ud^'jWShR $O¼woD9B&Z}ɔY6l}bc<5a[7Xa+$y ÎfzGvfȤ85{f}~UvqM`2OvϙDۀ ޚp* c$G N S wklHfۙD=n~%@i/QRfR$cF,`/i}[ nM|OiGڿŦX+tmo>` Aܡ mTz9ܩ[FgLd`r~IC Am;ɱ2$əpd#3~#ŨaoMɤ,A_xâ{sglx O25|-zYIpd3 {jp2Ca8"T _Hѫ9!m'5HϬ QcT+*$6iXv# &2յ'%HDT $U*Rj H2`d]fepPfǺ&"ő0ЫRo UI4WB )o"BFϕezkkshƯ~hW J8UI8 3vOÏ,bqʋ{[bSF3m,Â$2D_F_Rd4U\@OQuWR"~KHp\ySm}3` !^Iod7;9;*ѕrR*#ɯь" H;~ԉ8M #I~_K%X6!SJ\iϑ`ƟU9/5Q-32vA?I$GUTJwg.Gj8Ȱ"SM(5;vj(c5)TjJ*# * JיNuZ9ɦWCF *RJlӣ!Y:-/I6/\B5>!PPt$˜NW=)GP̞E:g eG}?H֥ sN3ݛON]"\$ݓ"Yf}M(Ub 3:J+H&J?T-uTJ4!TjTk2pFQ299 :$Y[,"Ţ+[ʄs@hk׋7=teՒ^iuɸg(cсcBgp4yUeL⯾KUhFU9-EMΈQBg44ۡd' z:И.[xSm3kC`p7$/-,cnq3'9Lͨ=Ӻ!DiFwN)й}wO1[/q:D:nH.6vZfxb0 }z\7#9:KŒ? Era|dΌdFHߖ{,5K&ugbSӎt &~cAׁFuY3Ǚ3!4|0co"IW)T'/L)dK03U_y͢d=t/JW2jqfRq+~d#j]Zc, dzZߝv'\Q7¿a q^|mo3)NQG_\uTOpMԘX3=xvLzw4s?Pz-]G*~ Os"C$2HrFqfb絅j,䐘>X^|k3O=:48|o>O}vwzuޟg~Sc.bYkH誶::68D+YOe5np^ˈ}]0KLӨ 9gr&C%o&ɕN_o{񵋪GtwCҵd٥^0X #Ӎ>C2pgdδq. Xvgʍ^3T1GKs;v)D]뵄4YՖ:K5sFC1ĶRkR%S71Wyz- R ],ѬJ JԌBh)8l'̰?r$F3c,2MRiJAzM0_}:O{V[ZusX"ƏI쿴zkjXnjKбwci Zg >z96@8fĢIZ&^!8ba-Iv10uΤ] ʃٚ(zUFuv" GoS(>jKRDF%/_kcmE,"HJ\(X Ol]*F>3--ի3 Wzy>5r Q;<{ņRҙJ''iI6O̡Q_l{I&o 6ם^c <נƬJ"t mkm`a,!O뢊-o v;Hg~o]pWGc XrɔMQouI`tMd*.hK*s L6>Xu9K|{h>ck >#bٹ J~NG%ͣ#y{j(<~:1Ne;>.ͣÌeGy?d{E>,&?<|ԝΫ:szmx*ɠ_"\_0=DI6jUPs>0C 4)L;z6.zO9Hz3w :d&wy_c 5P.?k2JSQ5ut&œHAͣliU]f}azEws:=_uKt<|?:七Zn`G(?ki* V4)(QEIL RU.:ykx}֥']1tz8eiKy,ie55]Q㸃Z8p?zpPP_83|f2CT]k%}/cӦ/oy+Omo.>?[.`?ˉU3[5UW3'.rB@WmCAnx}ct}6\Ֆs9.  *rsdAwƸO;m>׭WN Td e `p)YS1 y#C%=cXdK5#f_ 3;ɭթ~ݛXqwvNY5[T<8nʽyp @0$_ ZL󫇇x"|9m8e$nT^GcO%)[if~$f(p[)$rE{Y2 7npQ 3L7FL|rj㶨ĝ2!R17Ә=tP]tuRSߍ]pdNY⯼T~B -G\(tN1΂ׂp{~ǻ[u@a~zpA}?KNq?y4jy)sm@ ēcM\w  \x.};Tgh#0AV=^­ lgwTʎk[-HU] -Q#k㪝a?G ǀOhkj M?oo*ڕ)A"D,^z6I ]l۳ۋWr 8`"*! b^:= 6Bn(H#v`??>]}1j?n[A$Dt#:^%b¹^"pM<~H8O|w^OA Goj>J?i0j#k|^l @U U{o=hX){uh=)SgwyYbzm˲L?>en7u ܛ> rM; p}@z;3JvSi^0wD'Z%5:⽚XFI(Bo*' 0;[B\ )HvL69x?'/j4_<} NnO3K|zR.q XY3s_ힰOn piar&q~%^AYd,>w8Sp [ۡ\;bn𡢀Ŧ@`Gw5D[@fɎ`,s'#QznQTCr~o?S>8CJ{;?㲶_w <40 5Na~rH IK8&l>{_偗$Tʓ|^i鬃=G_߳؛Ǖ/ ǓNC w[c%?޲-}jjpvxQ]@@͜ TkX X3wB>sG3m4{IJ.e7Z`i=EO<ւ:xdQPC?*K_)H*XrAϓI$n3{Sǝo;ϼG }v d=:Ӏz8b~ef{8˖1 EXn}g ݆㛧>v-2l,傞/7R9H|FxWujGj:RH,d9PDGonm %OI4.c; T+?Q/Ub.(Z.8ބJVq OǛh2' o}9^3E3:m-g`NɜNmS/1C>l6pl6mZ2Q Ư^rz$9sk= %2TejYH ;&{ЫApvZh) p '}D@/,h3⇖fA$#ވhH7, H,b$s> t5Ҷ!<!-+KXq%bO{y%'F¢ y )uE'^RA`jo ZB"Ōr/_1aQQbW7j)#`yE)DiTԲ;Q.cb.mx5'/ZϹ8 Ĥ&h )_+8٨Fb$8PMPj4C,w;q2'U)V͙ZK|9mFSH)Cme,m7R5 ^7gLSdBZK6\ vM:wo0rQPSAe#w?_fԴNS[zG!M m+˯~M9/ i)QƟ+nY%duc.n$We1է' iʂ{hF٦Uj|ԕ> Druhǥ/h7ug%>Ę4A/{mʬb󨂗\Td "ǷF7c9X ,7:bVvɵ.BMQHHU7PkԭX} j̍PN@ [wE+o@`eQ0:zذ2 |SE.' +gc"֬fj4YF9> |S+ +=R%-^D_hDɵoWi +~Kc͵8RSiX$_cFT_]zEC:VTٮ1}zEbbw-囆+$TEiXTwaƁCĘ>IL0d1:ս UqVv&eS[T4462Z{+'XuP=XT4o L>6Ј֎\CzףJ'+'UuP# dSո=!˱j(':X&X=U-ȼ!0E˰>.aʹbFv9;x#Xh1 zAbuE }rr:G@t* DOO6*1ҖȁQQOv6uoѡ~~t.-Soc1Pc 0&5х"%H{(rp,曏/tokt,ރV$jSQѪA^~`4m(__ Izp:jǣr^lM!Ln# HFazwy]C;X=8qֶELnV`RӄDJ !Bȡ1d g>ԊOLQ{`b*Xٽ"j] I9,2VpH5[};.֖U v >|XFAU݌>OF RJn@ =کF_~j3'50KON%f=fѤLD(0`-N䖩FPS4eG7Y'qL k%&q-NS߫jrGtn߮u#-{U- *M36PkMuAB-j4S#XhL ܔ!Tl{R|aX| 4d2<8L&W4K3LaŏO, ЅLS-] /eOy*0"hGА8H=Deh;Ԡrgr 1!.T#ښWM!pFkLسl6Rh47wKZۦrjךLea l^:,':u= ~$- 4L򢎰xBHc~B[mº50\&!LS ,UhjĄkЪzarliܩKS 0,LN~ɫ 80S,6y8DF F23E4t3ü3L7Xs;s8sM+׶.iz ~:UM6E8>W5Ͱy{J@: IU6 q;-t~i7w)uhyRӑp-*sBCwB!?鈅|r 39f"D2ۗ#P45X,ZDҜB0kP A}ēfCS?, Gsy܁@Gyb͙Y kA3.mـƎgÀNs(h.$1 pjPNd)4o m,_n- _+ 'F6hQx̼%O6$# Ъ2ϐ^3N5=O0-o[wȑŀ|~i7Eˏ OnN]Daλ4^0fGkߦZpEFg=j<s/`Mhwϩ>1O^Z.?.ߚg  5p#SB. ll_50O JZ8oX #`L kf:@ř[2 L4BeNL7CeRiMq6GA?3ר#-<A^/6 )Ram.8*3GF;iW#e s߱CG.;HfsW~ai:(ڜԹy::CW^/Wx+3]Z0V,4(>'<8jddZ6KC Jв1p4ھ{kȓ7C]'+0M S# ;_ mkײ|mK(d+.W 7wWk):= \뫋jJ(9\ڋ9yUi͓5i8OBK5ܮbaEJ0ϸ6624rD)hwe6h< Aa:-k.7LKbh:cBՉAwUM3 uFҴdk?g_UYJez"30FDuX 05]@|ǫ"#r4˷m1w|!Ea|uw'O9rSPs]_~אfXhk!͝ptuXhVJjm)wH4. <<: !}XPxqÙi59W*T ;K /׬=-G+" +dP>PdSC 52S<,vEe5!JT~B㚨t)ySPW:P]^lX,hBJi"~kapYi~ȉKŦ #c„zBp}!HEK Q +BƏ~zH,D,DRasmou9wXihem (_jܓz '  <yr'T CoD0YGg.bnFtDI!Ζ4P-߆GZ+G@{:<wg2~R!r$4s;9A3 :wFYhkh[v1-@]ddˉ TVl֘Xj6$vEzp  dhj"*6ZBI4Z;<$&TkWp]? Oٛ ]w-uyk֡M{xVu$# iA=7&f$%l~Fmk? O "MBo _07%3I$ZԴBtHa`CFV׈݁p߶sa2<")SͷA`r$iI) CG݅B;Ѐx=hDϫɃm~תߝ\fJ bhs#ㅕSbb#Uy#o?BMiDN_'׿/ŚͿ#%~fi _]66I(D恩i*.jQujU,awp <(7)C#>Sf+RHh9fXl,NzD֋d ÛxBڰ&Ob\hbTG K<Jhšw8;\[ȶ29qi:ҮEdͻaM TR#xĔ!@x«#M}'}$)ф77iKȘkKps-^֋#_oetzAQoQ@BbQZ8~`GA{NRӑ~8j~Ows:Y7+ηD0 tTf7:o 25ɃjaM:'\Zr!%m!%5T7MGʹNA7[k\%v^с#5K\/ }W#qtJ(Pk[\Q*:j<'bX] 3+M j-8yk(H.:4@NMx O@d+]eʷm*祈^Zի B, ~gB;GGK|^ΉSgV?9zͲ;zP:x;Cvc{;aQl:k9ϊ9R[?py=Lk0-%RYUk GA6Wsju=JHE(E HPVtx~?%OP-=+jBV pȀ]_G#7\Qy ȓ@XBTlw '/4 3S*:Zids7dbzqM?ץvď{fv; S>>07?xKhT|tH_K݀cC<>Ql0G1~pT#76QQ\pAc5DxʏO)<4Q\ pd}?.^_4 lנ혂~gūSs##QKG--Ej Ǒ%ѭiYBn$sR!(p%pzPP0YG9,O 7-}]vpիA1hmJ mG4dٷN,hhe9 %#)qN;Б;~? XrHz$m?v=#5IdD~;G Yđ@;i2[lcq43 &L-!c!aZT>W Bs"EK_TFZ~__濩 6x{ϣ24 7$bU+M?-1/]n_Zl% ?+2pn PhB1|w>]Y۲o/44ø47sߔ.bdLpW'NῪ[1dix^4NῬ]=|L2`LSr̐0`\BI8\X. G{8j P0Y_@9Z{+MaJdA'p4˕ـl R}cG9{w~i^xd~dd~fJ Xg%!# E_ZAvꬽZ;}eñL?uTY&qT H|BWZ]ʕx8:*lt< qT9p$|Il37:At4SAG Ut u6j wGUA t$~pTA(G%O˜utv!i|juY'G]ZRh45{&OQG8qT:'%#Tj#8dTd::9y9tIKGt$ԤL:Ӷ@Y>WA]P 578z k*!>պ4epURwފpd$aKF}">rq7ނ:hW@##5:k\M(8ɧ#Zh pqBo pwCI] mtop:zȝxwP^ PK`-{"DG6pn1Qa$68+7zb#RH8zWz.y{#p2@eI~ qQayAuܚ]h-0T5{՞ɕDf{Oi1Q|%|1ZҨHh贩DJuѾ S,Ҍkm%`= #NrtjtM 66GTi52w30X'񧎥b p$LϦPPGg2)ti l;>B 74h5ChБ5Kc2%j)'&ө>ϝvk)C8z<:R(J2G VB:B;m #:l1TbSI\`_cBHw-)qFh׽ "F-QT~桝uw(nk OVglY G`|$-@B:tTwB  |14\(np"ZtrhD2,;<mYBNf uf FVYC`5ddpg3мIr$8z#w9$_$%n(*o=-X=/=vw@5<% wGmW˔:)6hh^/oܠ谛'ԴzoVe \;q4Ã`hީMBތtDBݶP QPU;엙z+Gk&}b}*W-&RJmVёn.QYգ1H nՓSR|gĄ&l@nL>P/Ӥ : 0#.t:+YNhQ F,%|cP@)kT$RfOYt+M`53i\6 `>45 g#5#q$DÑ#s'زL[ݏf߰nȾT"O&W66tǑkpHXH *UZ롣DGO5-hڱahGmx<4βL&s'iU@*)up( MmA:JS2GhW}am;  +h,N^KaGoRrDu)7RMkɒ52t}p4bjKB&`8rһH{"ΞY>6;6}q7OuDЇ9ۅMbߨҏ n}1`y6}6WuJ p۱F:8x݇H'G~OotqMapkcwR@FL[?̑G~iڙԡ_T~੊B;MyݧHqDY-5к:WL3bi`pzmnN}< m6;ST~=P=UyY@(Mܙ.Pl}/3S(ӑZTKJ]9bVa#Pttێѝr7mJG`S mtz9pSn1&Fjd@hHU=½,P@yے鮳9ƍ oCZ)O?0G0?0O{Fm!ڤd-qWy2*4˸̚]p∦FchCiJON#p4Er\hg[|2+?7=IYhH ~!06;'] mj!pԦF.0|%a/$=Eud`/L7ܖ!W|ov fvi5t/:OwGz<vC|/ ˰+rFDգ/(5^w jY?q%C(G :r4;$І m…Hؓ| `f8h^Cs vkǀ(i`yEǁ"O0n-E/bMFEvDM>88RAwkQ E6T!Z=$i((VK)1!Ǧ({Y6O ʃS}w 1\XAycBn3'z.ڤk`-rOQG$fIG x7&\|!ohPYlqzTZ3e[Ye:P4ރAEB d#C9NK(@zh1G`kӣmK8|ӯFv΋'qWlC谐_rT9M7Fu\~NRյ$4ba_ŜͱN9NJ\éF[kv<;8\whsimik6=*msT1p mK<&\IZ;J-F-hŶf %, eGr)u4q74|Z"Z'i!k9׺/u)o!EE㌫^kđ'UB\vGK=,MV]&Q"Iwr:m = 8[SC%|9>2^i#@&{n}m׶ ,imBNgoZu1!T@˸['3.8xs:Pl2U7;(:׾,5u{Ϻ-hsA##σ,pȄড6DWf}ˋ ?WqVU?X7ܜx?p-iɣ5nZvk%|+ ֕|Vߍ|}_wtuؐ;izF&+&Ys#-r]pѲI=K踡?#*cv}kR@ m )  ?>rk wi/',y6pys*$t2CĤ MrVK4qL'6&w7"l<81Gpp'&P6EyqG}VVl<[&HhMK~6cCon:$.{X %ʗ.H^\S4'k].&*,ӬI~l5K; d84pcF;C*6Z`LL6wY"ͷ}!2~`f Sbh'p<} l\:w}%B7.6< n 6̷nKmg۵&IH }t% sî+7O)qk+J\QK P(2|ΏYd BN=Bm+2AF^' ;bV; j DU4"聓Lo[Wr7 x)Tl*PS,6|T}&A~ع RamByYG%\h&i),>&$PﲪUǹoTHmRC ~jhiz-__%,甉;pwpwGT[CyfU߰ZzU:^08>0wGoXrEZq mM4K`a1!}zAjQh^ ,t)44G5u=g;)Ov[n7u"-&GeF- H8K=浙Y?0M iR(8z_GL mg?Wos%& 52pM6b?#)a'8 HF;&:=9m.2a;n;nz?d=0GkC"#8֚KM'W i|! զI]&;$PD%*]YƖ7s66+, z22)w34DNR]t--[nֶžﴎWiJu(G;0u_+ Ls3Ñb$RG@mOoH`6,#|a' jǍH{Ϳ),0ڽQYjC6_/t8`DTl:9SC"wmN?z{ U?^6N(zht_{đShz+~sx .oixWšu=o;،xTIZ#zl Zh%6I;g64)*\0]#P_Zm.o{W|p3HÑ !pzjG*ĤyW^ݷMw8" ]E}ۜo=H62b'6NFzQlM{wyBuhG6yG(6b v<}`D+G,+cUGrGGOgC~fw4N(&*Os^?+rnu[ ZlpSq " phhkSh2SJPliRe;RPA k^#L?xn=VwHhMh6EN68­q{SGi)4j\*py‘qurŦ6s :iu; Zm'nK((_0%-kLi4M;2*N8%M!4ְᖀHZZ=;Gz]c m4 px}HָyZH j廓z!Mդ,5ЦA4% )]fֱFP ox c`j+RPNSmGSLL0vSPRAub#!XIM LMS]Y̑ldNvM!QL"%p=o5M*m74(8]Sy:`CM@6ksZN#Ң#xGH'Ʀ; eFk3z z[}ZTzy-Z;tDXn00Er{h#lK&Vȵn,X0$ G~o;(0j#ASm+(_a8FpV$rvn|Lk@(uuh+Jz\; imPǀ J1ykplb{j7MmC->ظWNj@/{u&cRoXRh;zi׽BHrjđFc6_9AM-0^"5#J’C-c̑g/F68T  c L-;M]b:7⡞+ Ct-4/$W(8bԀF`bk65,,6bCuޡ`_v :)ի7t:#tЁS`bb ]߆ ZluYp;+ ~ b ؞alrڬm ^iVe/\;(w T҃WOOOYû (ԆFu[S; *"-?ui^c:5ڼcC}vko+_pBu PlE^~d`h mK;lH\@S fҀrlP›;au"kwwf!60@ˑSJ|[m)W1Of&]{︣A68XSHHپkm+9ӫP7~m}例ɷ˜^UMBRiC}oYB[3 m4[L:m!Ob6ؕF"#>i]_vvP^CDT\O[T :M617}҆$8bdb2)pXR_N/XVTxeJV~3[m>uDhPhEFGh; A*$:J GhX#tndzfk7:Q9X+=Ѓ}59(<yYx}`{Y!:O-4=yMߑBwewx]}U6X^QE1_k:ZBf𣶹.+yԨJV,W? 'Ho6az圭"$3S hP80 ׊ϝYh:7-Ц quCН8L㬶VH6 G$N7}m kp/RV <)3fT/9J麬%pm)^ 3h-#I㗗./z72tp0@#-݈눾)bXIQ}{*I@5V]úVd-쯎ׇwջkYh7aIux ZIL#Sa!F X"&lt `IVRņ5IzCCNtph@7FYl@8 s|_9h8)4ұYy;ChÚi0-4JEP*,r%9e 21-]&J؄B8cs5?Lf=a)μB$10B/pD*:2G2﷈;k;!\) xB ,sg)pQVtpmi~gcBJt m:2 G0!GpmwƏ벌5^Nɂc{Fhva]<:=D&xXPC7Ц7!?[ mu4M ?"]eu|y܋_ qD24OrD20ځV?Lɝ4nMa͡SSh8 @.6r'(f?EHEg%c G1*A`f7{aR7})yr u6ߴ"+׭LUR(TC|<ʼn)w. =\+uwg޲/l;tT{Jzz |roX2c4>5B)RKY~m@n! h   j4A6;g:HuX;Ρ 0jdb"(Pp Vc8Z3G'g89&Gbbi7) (OP,wHo;GnyOmTk5sWG.~5((bx .|r wy'"eJ;@S2GĩQ|ن6O›ffdS1!izp%`1XM8Y|5/&+Kz M*47R.0pfRlcB{rx8h[2GRH̓t|Iv)tpB%iBM) xR ="Ԗ DI8Z a9Á -H vrG}𛶢/ԱJՑ#\Ál|\?B5qJgW}~ݷ1+{TX:r2ZV^ ibMR&-&pjO~V@wJk3fS]#@8->|PZ m$8"]9"0:?-vdJB!e9"cpp|{鈭v1/8p&&ugvw;pEFpfÈ_eA<_8PCsr)_߃}k] 8ZMTdpTX~İ q0rSgz_s):୿|_9Bu2G~}7V۱4 h)\Gt:#? |TpkO\.&ݰ4~3ZlpV=:!-PD/.>@b+T:֤5Ԩlnec!vd34_Kxl  B,8HBMI7[MsmMRJ ɼhÚ\h j?w*πțgU^pAf:.EF\AHL&ke(#`bKF)O:)m?ZW:M!@ G1ϟnq"}q9n.up94aHI|llx$]RtTG툉5%&*,{gUʗ.9m݁ jgaL:G 0ٜmok5(k m^x !r\͚YF#$T,tɕ笖& ܴigX }%e[ 'T sj}iaW$lAQ "&rߓ[,9_HNȶEI@F߈)R:tʾL#g`JF"x彩խ>N Ng&>sS^W;M5*}'vqPMSZ;€;]i8zKH|#'9}DwaiZ.X‘ Lk6wqxQg+7zdhN.=Vx2z_DB3#j/~\zݼZ@-BEaIOY~?V㫈xi\RZDMU;敧FlzN[nj偄 z[DŽKtD(jb|̧im Kn?Pl\D*Ա{,yֹU~d㖎:~5gi4 ;8Ӣ.EF8+8p24 r s  G!At,0|R AO+Pp^3K˳ \ުC>-GGNDŽLLpvpQl~?ؖ8Q5r3|Yё"GOJ̑RAC0%뭋3#N3R쑏 ^xa2 a'R8fs̆8"7x~vQLÑ/i"tC@ F*pps9FtZ:tRݎl0F<h<9b0=:8.]6O9Ā9k:>m8؀}C{;9P]stbqQ#kg8J! ~5jVM_]ZLhLG\r$oۮگgѓhMpԼ'Bszrk9Zk@w4O@@7mӢ*eX]h`-u6Xf zVۓcBCxT2!fFnIQ47ɮkOdfSpSkbǺSotpbIN)T M::́݅sD %D{O6ۊ|Yf*9TL2\|=˄0@ѣC Ñ{NdspM0):sg|ё}887$d5a`'l?96TG9Lסn(I#.:8ZÀb>3ޚɕ:Bie0-f~"~D:p߽s~Z-N KEh~w0?p)GV\auSB}{?&i,7zoe_L$5d/,Sz ~DԨXhiRv)CoNn,)Pr0i^>p {X H&]% Tp`3Τ17|?yfScsU m? pѵ5mCsC9tHULOKm,6@8ۆ)6N`f"OO:svT5QN?KFa@aZRQ:%4I]Zگ 4z0zq #<AUʧ.9JaMgr-?;oDo~BwAHtK9AN^HǕꕔ!C]tDϷ49q4Gj}dl_F V;y b[&W {j3aQI-ߙ:NH"¦43N5u9-N h]S:Afn۟ɾCl*T(8rx}ZL"HPl.czGI$P@45 ly ;s1Y:'S[.8H#ܢ66\L6F ep98 M(b~)QIcAK( =ygNgHq4mGJ9TPhǝ5Zl:O򋭞h*;:leS 0đ`ΔBO}͙Kv]dp.]::j{Σ]!jN3}MHUGr ^9F<*^+qW"sI9HOMˎf4,&s9ΓOC૫&\tlR̉8NpsFƣ/s9UhE=N݃cmvQ fW_})ոž |&!BŒS;6w!J" F$gfX,$}Iݚ ,W!dJ>wiA̕ A3)4n^{Mü$8 ƛC;m/ghR fdnIC "3U23?#RszuouQwxÅׇuX ܽAÀ/LV \͉Ѧt{&Qޤub\$w8+<9\:nF))&dZmpamt.¹tHMliS qD#9OmO릉Ӫ->Z9,0>v`H Mir*_<0>P-w%s o@h0EwZtA}C?Mj|iS:yzkRڭFi@3 m m NI7c/O6{dxK9R5 : jdHd3K 9p`Xt/^haU0lI 1F:p~U_=]$):8nbkh[*DhbS1IٱQabp.S!\;@ ` 8N%GYk? nwp6#Rh+ܽ<ոQ<+A%`K{OcZ 6ˏ#\õ% tp <~ YG~ 5ZC}vt,.3M ,[-JܯV= t(+sƓNt$?$F6yJw9.5ͷq將x#4ߵ $5u7w!d 58987P`;&s4ADH,Ԉ-+?jzxh%1)ؐRlaF7#f&Ԑ@TDX9n>% #\j?O׾0FYOJae$fBGGȴF-8y]%M:t,GM7 q!P$# ` ddJ#P3y"#\%CLmq؆rh%$ pP ֞.oC h @rPpC.)(p4o5ER[ ͱD#gG4]lhPnJt{hmc/Cɸҙ~b+0qBdKTw}@>)5w5: qT/{kycwNF*s ZNQGF?x_G\8Wp>Tz頫br`?N~$oAPzj85JBIM9w>?ʰ>fE*6^Oq+$݀,QگF.>@rƀf1։\(Xi9s4pfkr!SF;੉Y"Cۗ&!q4Y\'Qzt\˥)c ld.#P9̌-=: Y&Թ9c8KF:8JN'SAx:xX#p^>.76H0[$uцk4A=zN'N:<a];8ZBۉ$Su,w¡%&qgRM!=Y#-< kmvTL0u$iaol~XSyA:epU_pd-GZ؎<Ҫq49%mvX"ܭnYV,4)kv \=fdOvh%2fIld%A&an$ ɳW^1/sRsķ*%qh-4zu`W\Mws{|M}/c rl#F͏=#za1s`O{*2pMlbRh0;{S~\pK/ֈsvKP5$ߴ0\i.\Arq>a^Ú'4y߮^#PM=:8X-]J61ץ^ԉݏt?}C„{GZA9STxO/4yA݅Q|2r՚ƕӲ '&,~'s4E_?蚂c[fKP]j$$/NGjjt 4HBR^0j0.+cP4(.I@FF@B$!B-{<B7!ҹg@Dā)4NQ/}-J1J*ύ-uB@fv r8̏>{qk`Mwqm,WQ6ڸyK\@t5 U;t~aϾd/AP{3[Ow.V,Mr&ڶ\kK(@TU' iD]nK*6wG' 'I0h  Ρ+8qi<Mvw L9Fĵ1\MZ5f*GO@yď;E~sHE k*%C#j/ c8ǡ-7._>[.NrG>*w%:r'\m'-饣\jkkAЭCG =g~8gT%T7\ 4Z/F O}O/8dg0pwef >',#oRim wn}CcOgG3 ]:_C܎V.@∳|i~ql .qa:7@#P f&ԜDC'Ev|~pnV<ߧϕ)`qDbvȣNkC+lC c?)Vv)ٸjuqRk'pf Oxs8(?ۄ쵎$ yǑܽ5VhT9:{u Ez';NW200tp'FNjkT&&gb9uhõSp C0G$DБȓU"*zG% x5L poYYAAN:"~~q ^9,`цcO].3T:󻃉޺$j#.& Gר kOtuE_Bjϴz_FwrM"ݵ,506a)=A#<R} CL)6ZlM $h@ `dsy߈֫a`#!a KV&;zS~ }z5eG4 -6 pfē[x!LudmPԦs[}PV$r"*R `3Lx',#ؠbMwި5,mc& N{.~HE#E1?\80(dRGZ~zuhՃӻ&QS'TpkYhkB[~\U' '}ϰ %o/qZA2)p,H006t-4&nJqTE݇j:qD#S;36bZ)x#8934t_tDh#LV +k=Bp:U;< OBXՑRWK4wi刅F:+&rhPld̩S 1Ҩ^w7@w DšS f'h% n22= )8ҕqTd;#'kt*6 Ƞ.L0GQwGz1T#=µ~wZ?HѾ6H FE$wI7,w .0w8G4uHFȈ@ O:BeFÀ=C(7\(GA \dZh+65A9"ȑ .xCs∅F(_Fb5>iȦL 6.3#N= qCͬA#Tc:ԽaG & 'TK!ZrpDܚ͎h;XGd;#x. I~r;O6e6 iz cnL$tzF΀ڈC)\;`fD(^0Pvoy=Pp QNjx9B 1Tc:u6#s6Äk)pu<;PT?,5ЦDxXlzb m H#QT A܊)0*jСبѢ A -2'`P'`EAB̈́`@NjqR]'pw2GPNEG]]70pu#XhkDC ͲP0G>>T6tMz m.2̑ZDs+5u( VϸS` ps =#Sָ^gE3EJqT$3łj@ xzB€y@ bCBtl`JaeLȨkBB\T8jp'p qun~ׅ0:j,N/<;)@;TWjXG(Mz͓~Bx8 HEuMtD;bhs~߹Ss;5k:w*:bmA3MJ1UK Dё; Sd4CkPj'f~ Λ' ~tI:ZC< 5rkJS~w5BH(S;.tiMq=*u닧&#/z m5 c6ъNpK,L㉝;v߱B m ,100000000B m ,10000000B m ,100000000B m ,10000000B m ,100000000lw3O]IENDB`application/class_fma_connector.php000064400000011540146731177160013600 0ustar00 '1', 'driver' => 'Trash', 'path' => FMAFILEPATH.'application/library/files/.trash/', 'tmbURL' => site_url() . '/application/library/files/.trash/.tmb/', 'winHashFix' => DIRECTORY_SEPARATOR !== '/', // to make hash same to Linux one on windows too 'uploadDeny' => array(''), // Recomend the same settings as the original volume that uses the trash 'uploadAllow' => array('all'),// Same as above 'uploadOrder' => array('deny', 'allow'), // Same as above 'accessControl' => 'access', // Same as above 'attributes' => array( array( 'pattern' => '/.tmb/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false ), array( 'pattern' => '/.quarantine/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false ), array( 'pattern' => '/.gitkeep/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false ) ) ); $trash_f = 't1_Lw'; } else { $trash = array(); $trash_f = ''; } $hide_htaccess = array( 'pattern' => '/.htaccess/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false ); if(isset($settings['enable_htaccess']) && !empty($settings['enable_htaccess']) && $settings['enable_htaccess'] == '1') { $hide_htaccess = array(); } // getting allowed upload $allowUpload = array('all'); if(isset($settings['fma_upload_allow']) && !empty($settings['fma_upload_allow'])) { $allowUpload = explode(',',$settings['fma_upload_allow']); } // restricting max upload size $max_upload_size = isset($settings['upload_max_size']) ? $settings['upload_max_size'] : '0'; $opts = array( 'roots' => array( // Items volume array( 'driver' => 'LocalFileSystem', // driver for accessing file system (REQUIRED) 'path' => $path, // path to files (REQUIRED) 'URL' => $url, // URL to files (REQUIRED) 'trashHash' => $trash_f, // elFinder's hash of trash folder 'winHashFix' => DIRECTORY_SEPARATOR !== '/', // to make hash same to Linux one on windows too 'uploadDeny' => array('all'), // All Mimetypes not allowed to upload 'uploadAllow' => $allowUpload,// Mimetype `image` and `text/plain` allowed to upload 'uploadOrder' => array('deny', 'allow'), // allowed Mimetype `image` and `text/plain` only 'disabled' => array('help','preference'), 'accessControl' => 'access', 'acceptedName' => 'validName', 'uploadMaxSize' => $max_upload_size, 'attributes' => array( array( 'pattern' => '/.tmb/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false ), array( 'pattern' => '/.quarantine/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false ), array( 'pattern' => '/.gitkeep/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false ), $hide_htaccess ) ), $trash // Trash volume ) ); // run elFinder $fmaconnector = new elFinderConnector(new elFinder($opts)); $fmaconnector->run(); die; } public function access($attr, $path, $data, $volume, $isDir, $relpath) { $basename = basename($path); return $basename[0] === '.' // if file/folder begins with '.' (dot) && strlen($relpath) !== 1 // but with out volume root ? !($attr == 'read' || $attr == 'write') // set read+write to false, other (locked+hidden) set to true : null; // else elFinder decide it itself } }application/assets/icon/fma.png000064400000000473146731177160012573 0ustar00PNG  IHDRaIDATxcd011;O@4&J! *e`df`l ÜCt?]JcfFa>90"N3?/(0Q3 ɌP/0"0Xp2!9bw! 2/i.̀Sd` 3(X pLla&'h|<}031Oeƞ^p_NaȇiRe@|$[/K8IENDB`application/library/codemirror/lib/codemirror.css000064400000020166146731177160016327 0ustar00/* BASICS */ .CodeMirror { /* Set height, width, borders, and global font properties here */ font-family: monospace; height: inherit; color: black; } /* PADDING */ .CodeMirror-lines { padding: 4px 0; /* Vertical padding around content */ } .CodeMirror pre { padding: 0 4px; /* Horizontal padding of content */ } .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { background-color: white; /* The little square between H and V scrollbars */ } /* GUTTER */ .CodeMirror-gutters { border-right: 1px solid #ddd; background-color: #f7f7f7; white-space: nowrap; } .CodeMirror-linenumbers {} .CodeMirror-linenumber { padding: 0 3px 0 5px; min-width: 20px; text-align: right; color: #999; white-space: nowrap; } .CodeMirror-guttermarker { color: black; } .CodeMirror-guttermarker-subtle { color: #999; } /* CURSOR */ .CodeMirror-cursor { border-left: 1px solid black; border-right: none; width: 0; } /* Shown when moving in bi-directional text */ .CodeMirror div.CodeMirror-secondarycursor { border-left: 1px solid silver; } .cm-fat-cursor .CodeMirror-cursor { width: auto; border: 0 !important; background: #7e7; } .cm-fat-cursor div.CodeMirror-cursors { z-index: 1; } .cm-animate-fat-cursor { width: auto; border: 0; -webkit-animation: blink 1.06s steps(1) infinite; -moz-animation: blink 1.06s steps(1) infinite; animation: blink 1.06s steps(1) infinite; background-color: #7e7; } @-moz-keyframes blink { 0% {} 50% { background-color: transparent; } 100% {} } @-webkit-keyframes blink { 0% {} 50% { background-color: transparent; } 100% {} } @keyframes blink { 0% {} 50% { background-color: transparent; } 100% {} } /* Can style cursor different in overwrite (non-insert) mode */ .CodeMirror-overwrite .CodeMirror-cursor {} .cm-tab { display: inline-block; text-decoration: inherit; } .CodeMirror-rulers { position: absolute; left: 0; right: 0; top: -50px; bottom: -20px; overflow: hidden; } .CodeMirror-ruler { border-left: 1px solid #ccc; top: 0; bottom: 0; position: absolute; } /* DEFAULT THEME */ .cm-s-default .cm-header {color: blue;} .cm-s-default .cm-quote {color: #090;} .cm-negative {color: #d44;} .cm-positive {color: #292;} .cm-header, .cm-strong {font-weight: bold;} .cm-em {font-style: italic;} .cm-link {text-decoration: underline;} .cm-strikethrough {text-decoration: line-through;} .cm-s-default .cm-keyword {color: #708;} .cm-s-default .cm-atom {color: #219;} .cm-s-default .cm-number {color: #164;} .cm-s-default .cm-def {color: #00f;} .cm-s-default .cm-variable, .cm-s-default .cm-punctuation, .cm-s-default .cm-property, .cm-s-default .cm-operator {} .cm-s-default .cm-variable-2 {color: #05a;} .cm-s-default .cm-variable-3 {color: #085;} .cm-s-default .cm-comment {color: #a50;} .cm-s-default .cm-string {color: #a11;} .cm-s-default .cm-string-2 {color: #f50;} .cm-s-default .cm-meta {color: #555;} .cm-s-default .cm-qualifier {color: #555;} .cm-s-default .cm-builtin {color: #30a;} .cm-s-default .cm-bracket {color: #997;} .cm-s-default .cm-tag {color: #170;} .cm-s-default .cm-attribute {color: #00c;} .cm-s-default .cm-hr {color: #999;} .cm-s-default .cm-link {color: #00c;} .cm-s-default .cm-error {color: #f00;} .cm-invalidchar {color: #f00;} .CodeMirror-composing { border-bottom: 2px solid; } /* Default styles for common addons */ div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} .CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } .CodeMirror-activeline-background {background: #e8f2ff;} /* STOP */ /* The rest of this file contains styles related to the mechanics of the editor. You probably shouldn't touch them. */ .CodeMirror { position: relative; overflow: hidden; background: white; } .CodeMirror-scroll { overflow: scroll !important; /* Things will break if this is overridden */ /* 30px is the magic margin used to hide the element's real scrollbars */ /* See overflow: hidden in .CodeMirror */ margin-bottom: -30px; margin-right: -30px; padding-bottom: 30px; height: 100%; outline: none; /* Prevent dragging from highlighting the element */ position: relative; } .CodeMirror-sizer { position: relative; border-right: 30px solid transparent; } /* The fake, visible scrollbars. Used to force redraw during scrolling before actual scrolling happens, thus preventing shaking and flickering artifacts. */ .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { position: absolute; z-index: 6; display: none; } .CodeMirror-vscrollbar { right: 0; top: 0; overflow-x: hidden; overflow-y: scroll; } .CodeMirror-hscrollbar { bottom: 0; left: 0; overflow-y: hidden; overflow-x: scroll; } .CodeMirror-scrollbar-filler { right: 0; bottom: 0; } .CodeMirror-gutter-filler { left: 0; bottom: 0; } .CodeMirror-gutters { position: absolute; left: 0; top: 0; min-height: 100%; z-index: 3; } .CodeMirror-gutter { white-space: normal; height: 100%; display: inline-block; vertical-align: top; margin-bottom: -30px; /* Hack to make IE7 behave */ *zoom:1; *display:inline; } .CodeMirror-gutter-wrapper { position: absolute; z-index: 4; background: none !important; border: none !important; } .CodeMirror-gutter-background { position: absolute; top: 0; bottom: 0; z-index: 4; } .CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; } .CodeMirror-gutter-wrapper { -webkit-user-select: none; -moz-user-select: none; user-select: none; } .CodeMirror-lines { cursor: text; min-height: 1px; /* prevents collapsing before first draw */ } .CodeMirror pre { /* Reset some styles that the rest of the page might have set */ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border-width: 0; background: transparent; font-family: inherit; font-size: inherit; margin: 0; white-space: pre; word-wrap: normal; line-height: inherit; color: inherit; z-index: 2; position: relative; overflow: visible; -webkit-tap-highlight-color: transparent; -webkit-font-variant-ligatures: none; font-variant-ligatures: none; } .CodeMirror-wrap pre { word-wrap: break-word; white-space: pre-wrap; word-break: normal; } .CodeMirror-linebackground { position: absolute; left: 0; right: 0; top: 0; bottom: 0; z-index: 0; } .CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; } .CodeMirror-widget {} .CodeMirror-code { outline: none; } /* Force content-box sizing for the elements where we expect it */ .CodeMirror-scroll, .CodeMirror-sizer, .CodeMirror-gutter, .CodeMirror-gutters, .CodeMirror-linenumber { -moz-box-sizing: content-box; box-sizing: content-box; } .CodeMirror-measure { position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; } .CodeMirror-cursor { position: absolute; pointer-events: none; } .CodeMirror-measure pre { position: static; } div.CodeMirror-cursors { visibility: hidden; position: relative; z-index: 3; } div.CodeMirror-dragcursors { visibility: visible; } .CodeMirror-focused div.CodeMirror-cursors { visibility: visible; } .CodeMirror-selected { background: #d9d9d9; } .CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } .CodeMirror-crosshair { cursor: crosshair; } .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } .cm-searching { background: #ffa; background: rgba(255, 255, 0, .4); } /* IE7 hack to prevent it from returning funny offsetTops on the spans */ .CodeMirror span { *vertical-align: text-bottom; } /* Used to force a border model for a node */ .cm-force-border { padding-right: .1px; } @media print { /* Hide the cursor when printing */ .CodeMirror div.CodeMirror-cursors { visibility: hidden; } } /* See issue #2901 */ .cm-tab-wrap-hack:after { content: ''; } /* Help users use markselection to safely style text background */ span.CodeMirror-selectedtext { background: none; } application/library/codemirror/lib/codemirror.js000064400001271311146731177160016154 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // This is CodeMirror (http://codemirror.net), a code editor // implemented in JavaScript on top of the browser's DOM. // // You can find some technical background for some of the code below // at http://marijnhaverbeke.nl/blog/#cm-internals . (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS module.exports = mod(); else if (typeof define == "function" && define.amd) // AMD return define([], mod); else // Plain browser env (this || window).CodeMirror = mod(); })(function() { "use strict"; // BROWSER SNIFFING // Kludges for bugs and behavior differences that can't be feature // detected are enabled based on userAgent etc sniffing. var userAgent = navigator.userAgent; var platform = navigator.platform; var gecko = /gecko\/\d/i.test(userAgent); var ie_upto10 = /MSIE \d/.test(userAgent); var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); var ie = ie_upto10 || ie_11up; var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]); var webkit = /WebKit\//.test(userAgent); var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); var chrome = /Chrome\//.test(userAgent); var presto = /Opera\//.test(userAgent); var safari = /Apple Computer/.test(navigator.vendor); var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); var phantom = /PhantomJS/.test(userAgent); var ios = /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent); // This is woefully incomplete. Suggestions for alternative methods welcome. var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); var mac = ios || /Mac/.test(platform); var chromeOS = /\bCrOS\b/.test(userAgent); var windows = /win/i.test(platform); var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); if (presto_version) presto_version = Number(presto_version[1]); if (presto_version && presto_version >= 15) { presto = false; webkit = true; } // Some browsers use the wrong event properties to signal cmd/ctrl on OS X var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); var captureRightClick = gecko || (ie && ie_version >= 9); // Optimize some code when these features are not used. var sawReadOnlySpans = false, sawCollapsedSpans = false; // EDITOR CONSTRUCTOR // A CodeMirror instance represents an editor. This is the object // that user code is usually dealing with. function CodeMirror(place, options) { if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); this.options = options = options ? copyObj(options) : {}; // Determine effective options based on given values and defaults. copyObj(defaults, options, false); setGuttersForLineNumbers(options); var doc = options.value; if (typeof doc == "string") doc = new Doc(doc, options.mode, null, options.lineSeparator); this.doc = doc; var input = new CodeMirror.inputStyles[options.inputStyle](this); var display = this.display = new Display(place, doc, input); display.wrapper.CodeMirror = this; updateGutters(this); themeChanged(this); if (options.lineWrapping) this.display.wrapper.className += " CodeMirror-wrap"; if (options.autofocus && !mobile) display.input.focus(); initScrollbars(this); this.state = { keyMaps: [], // stores maps added by addKeyMap overlays: [], // highlighting overlays, as added by addOverlay modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info overwrite: false, delayingBlurEvent: false, focused: false, suppressEdits: false, // used to disable editing during key handlers when in readOnly mode pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll selectingText: false, draggingText: false, highlight: new Delayed(), // stores highlight worker timeout keySeq: null, // Unfinished key sequence specialChars: null }; var cm = this; // Override magic textarea content restore that IE sometimes does // on our hidden textarea on reload if (ie && ie_version < 11) setTimeout(function() { cm.display.input.reset(true); }, 20); registerEventHandlers(this); ensureGlobalHandlers(); startOperation(this); this.curOp.forceUpdate = true; attachDoc(this, doc); if ((options.autofocus && !mobile) || cm.hasFocus()) setTimeout(bind(onFocus, this), 20); else onBlur(this); for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt)) optionHandlers[opt](this, options[opt], Init); maybeUpdateLineNumberWidth(this); if (options.finishInit) options.finishInit(this); for (var i = 0; i < initHooks.length; ++i) initHooks[i](this); endOperation(this); // Suppress optimizelegibility in Webkit, since it breaks text // measuring on line wrapping boundaries. if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") display.lineDiv.style.textRendering = "auto"; } // DISPLAY CONSTRUCTOR // The display handles the DOM integration, both for input reading // and content drawing. It holds references to DOM nodes and // display-related state. function Display(place, doc, input) { var d = this; this.input = input; // Covers bottom-right square when both scrollbars are present. d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); d.scrollbarFiller.setAttribute("cm-not-content", "true"); // Covers bottom of gutter when coverGutterNextToScrollbar is on // and h scrollbar is present. d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); d.gutterFiller.setAttribute("cm-not-content", "true"); // Will contain the actual code, positioned to cover the viewport. d.lineDiv = elt("div", null, "CodeMirror-code"); // Elements are added to these to represent selection and cursors. d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); d.cursorDiv = elt("div", null, "CodeMirror-cursors"); // A visibility: hidden element used to find the size of things. d.measure = elt("div", null, "CodeMirror-measure"); // When lines outside of the viewport are measured, they are drawn in this. d.lineMeasure = elt("div", null, "CodeMirror-measure"); // Wraps everything that needs to exist inside the vertically-padded coordinate system d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, "position: relative; outline: none"); // Moved around its parent to cover visible view. d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); // Set to the height of the document, allowing scrolling. d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); d.sizerWidth = null; // Behavior of elts with overflow: auto and padding is // inconsistent across browsers. This is used to ensure the // scrollable area is big enough. d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); // Will contain the gutters, if any. d.gutters = elt("div", null, "CodeMirror-gutters"); d.lineGutter = null; // Actual scrollable element. d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); d.scroller.setAttribute("tabIndex", "-1"); // The element in which the editor lives. d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } if (!webkit && !(gecko && mobile)) d.scroller.draggable = true; if (place) { if (place.appendChild) place.appendChild(d.wrapper); else place(d.wrapper); } // Current rendered range (may be bigger than the view window). d.viewFrom = d.viewTo = doc.first; d.reportedViewFrom = d.reportedViewTo = doc.first; // Information about the rendered lines. d.view = []; d.renderedView = null; // Holds info about a single rendered line when it was rendered // for measurement, while not in view. d.externalMeasured = null; // Empty space (in pixels) above the view d.viewOffset = 0; d.lastWrapHeight = d.lastWrapWidth = 0; d.updateLineNumbers = null; d.nativeBarWidth = d.barHeight = d.barWidth = 0; d.scrollbarsClipped = false; // Used to only resize the line number gutter when necessary (when // the amount of lines crosses a boundary that makes its width change) d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; // Set to true when a non-horizontal-scrolling line widget is // added. As an optimization, line widget aligning is skipped when // this is false. d.alignWidgets = false; d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; // Tracks the maximum line length so that the horizontal scrollbar // can be kept static when scrolling. d.maxLine = null; d.maxLineLength = 0; d.maxLineChanged = false; // Used for measuring wheel scrolling granularity d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; // True when shift is held down. d.shift = false; // Used to track whether anything happened since the context menu // was opened. d.selForContextMenu = null; d.activeTouch = null; input.init(d); } // STATE UPDATES // Used to get the editor into a consistent state again when options change. function loadMode(cm) { cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); resetModeState(cm); } function resetModeState(cm) { cm.doc.iter(function(line) { if (line.stateAfter) line.stateAfter = null; if (line.styles) line.styles = null; }); cm.doc.frontier = cm.doc.first; startWorker(cm, 100); cm.state.modeGen++; if (cm.curOp) regChange(cm); } function wrappingChanged(cm) { if (cm.options.lineWrapping) { addClass(cm.display.wrapper, "CodeMirror-wrap"); cm.display.sizer.style.minWidth = ""; cm.display.sizerWidth = null; } else { rmClass(cm.display.wrapper, "CodeMirror-wrap"); findMaxLine(cm); } estimateLineHeights(cm); regChange(cm); clearCaches(cm); setTimeout(function(){updateScrollbars(cm);}, 100); } // Returns a function that estimates the height of a line, to use as // first approximation until the line becomes visible (and is thus // properly measurable). function estimateHeight(cm) { var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); return function(line) { if (lineIsHidden(cm.doc, line)) return 0; var widgetsHeight = 0; if (line.widgets) for (var i = 0; i < line.widgets.length; i++) { if (line.widgets[i].height) widgetsHeight += line.widgets[i].height; } if (wrapping) return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; else return widgetsHeight + th; }; } function estimateLineHeights(cm) { var doc = cm.doc, est = estimateHeight(cm); doc.iter(function(line) { var estHeight = est(line); if (estHeight != line.height) updateLineHeight(line, estHeight); }); } function themeChanged(cm) { cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); clearCaches(cm); } function guttersChanged(cm) { updateGutters(cm); regChange(cm); setTimeout(function(){alignHorizontally(cm);}, 20); } // Rebuild the gutter elements, ensure the margin to the left of the // code matches their width. function updateGutters(cm) { var gutters = cm.display.gutters, specs = cm.options.gutters; removeChildren(gutters); for (var i = 0; i < specs.length; ++i) { var gutterClass = specs[i]; var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); if (gutterClass == "CodeMirror-linenumbers") { cm.display.lineGutter = gElt; gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; } } gutters.style.display = i ? "" : "none"; updateGutterSpace(cm); } function updateGutterSpace(cm) { var width = cm.display.gutters.offsetWidth; cm.display.sizer.style.marginLeft = width + "px"; } // Compute the character length of a line, taking into account // collapsed ranges (see markText) that might hide parts, and join // other lines onto it. function lineLength(line) { if (line.height == 0) return 0; var len = line.text.length, merged, cur = line; while (merged = collapsedSpanAtStart(cur)) { var found = merged.find(0, true); cur = found.from.line; len += found.from.ch - found.to.ch; } cur = line; while (merged = collapsedSpanAtEnd(cur)) { var found = merged.find(0, true); len -= cur.text.length - found.from.ch; cur = found.to.line; len += cur.text.length - found.to.ch; } return len; } // Find the longest line in the document. function findMaxLine(cm) { var d = cm.display, doc = cm.doc; d.maxLine = getLine(doc, doc.first); d.maxLineLength = lineLength(d.maxLine); d.maxLineChanged = true; doc.iter(function(line) { var len = lineLength(line); if (len > d.maxLineLength) { d.maxLineLength = len; d.maxLine = line; } }); } // Make sure the gutters options contains the element // "CodeMirror-linenumbers" when the lineNumbers option is true. function setGuttersForLineNumbers(options) { var found = indexOf(options.gutters, "CodeMirror-linenumbers"); if (found == -1 && options.lineNumbers) { options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); } else if (found > -1 && !options.lineNumbers) { options.gutters = options.gutters.slice(0); options.gutters.splice(found, 1); } } // SCROLLBARS // Prepare DOM reads needed to update the scrollbars. Done in one // shot to minimize update/measure roundtrips. function measureForScrollbars(cm) { var d = cm.display, gutterW = d.gutters.offsetWidth; var docH = Math.round(cm.doc.height + paddingVert(cm.display)); return { clientHeight: d.scroller.clientHeight, viewHeight: d.wrapper.clientHeight, scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, viewWidth: d.wrapper.clientWidth, barLeft: cm.options.fixedGutter ? gutterW : 0, docHeight: docH, scrollHeight: docH + scrollGap(cm) + d.barHeight, nativeBarWidth: d.nativeBarWidth, gutterWidth: gutterW }; } function NativeScrollbars(place, scroll, cm) { this.cm = cm; var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); place(vert); place(horiz); on(vert, "scroll", function() { if (vert.clientHeight) scroll(vert.scrollTop, "vertical"); }); on(horiz, "scroll", function() { if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal"); }); this.checkedZeroWidth = false; // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; } NativeScrollbars.prototype = copyObj({ update: function(measure) { var needsH = measure.scrollWidth > measure.clientWidth + 1; var needsV = measure.scrollHeight > measure.clientHeight + 1; var sWidth = measure.nativeBarWidth; if (needsV) { this.vert.style.display = "block"; this.vert.style.bottom = needsH ? sWidth + "px" : "0"; var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); // A bug in IE8 can cause this value to be negative, so guard it. this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; } else { this.vert.style.display = ""; this.vert.firstChild.style.height = "0"; } if (needsH) { this.horiz.style.display = "block"; this.horiz.style.right = needsV ? sWidth + "px" : "0"; this.horiz.style.left = measure.barLeft + "px"; var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); this.horiz.firstChild.style.width = (measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; } else { this.horiz.style.display = ""; this.horiz.firstChild.style.width = "0"; } if (!this.checkedZeroWidth && measure.clientHeight > 0) { if (sWidth == 0) this.zeroWidthHack(); this.checkedZeroWidth = true; } return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}; }, setScrollLeft: function(pos) { if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos; if (this.disableHoriz) this.enableZeroWidthBar(this.horiz, this.disableHoriz); }, setScrollTop: function(pos) { if (this.vert.scrollTop != pos) this.vert.scrollTop = pos; if (this.disableVert) this.enableZeroWidthBar(this.vert, this.disableVert); }, zeroWidthHack: function() { var w = mac && !mac_geMountainLion ? "12px" : "18px"; this.horiz.style.height = this.vert.style.width = w; this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; this.disableHoriz = new Delayed; this.disableVert = new Delayed; }, enableZeroWidthBar: function(bar, delay) { bar.style.pointerEvents = "auto"; function maybeDisable() { // To find out whether the scrollbar is still visible, we // check whether the element under the pixel in the bottom // left corner of the scrollbar box is the scrollbar box // itself (when the bar is still visible) or its filler child // (when the bar is hidden). If it is still visible, we keep // it enabled, if it's hidden, we disable pointer events. var box = bar.getBoundingClientRect(); var elt = document.elementFromPoint(box.left + 1, box.bottom - 1); if (elt != bar) bar.style.pointerEvents = "none"; else delay.set(1000, maybeDisable); } delay.set(1000, maybeDisable); }, clear: function() { var parent = this.horiz.parentNode; parent.removeChild(this.horiz); parent.removeChild(this.vert); } }, NativeScrollbars.prototype); function NullScrollbars() {} NullScrollbars.prototype = copyObj({ update: function() { return {bottom: 0, right: 0}; }, setScrollLeft: function() {}, setScrollTop: function() {}, clear: function() {} }, NullScrollbars.prototype); CodeMirror.scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; function initScrollbars(cm) { if (cm.display.scrollbars) { cm.display.scrollbars.clear(); if (cm.display.scrollbars.addClass) rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); } cm.display.scrollbars = new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node) { cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); // Prevent clicks in the scrollbars from killing focus on(node, "mousedown", function() { if (cm.state.focused) setTimeout(function() { cm.display.input.focus(); }, 0); }); node.setAttribute("cm-not-content", "true"); }, function(pos, axis) { if (axis == "horizontal") setScrollLeft(cm, pos); else setScrollTop(cm, pos); }, cm); if (cm.display.scrollbars.addClass) addClass(cm.display.wrapper, cm.display.scrollbars.addClass); } function updateScrollbars(cm, measure) { if (!measure) measure = measureForScrollbars(cm); var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; updateScrollbarsInner(cm, measure); for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { if (startWidth != cm.display.barWidth && cm.options.lineWrapping) updateHeightsInViewport(cm); updateScrollbarsInner(cm, measureForScrollbars(cm)); startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; } } // Re-synchronize the fake scrollbars with the actual size of the // content. function updateScrollbarsInner(cm, measure) { var d = cm.display; var sizes = d.scrollbars.update(measure); d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent" if (sizes.right && sizes.bottom) { d.scrollbarFiller.style.display = "block"; d.scrollbarFiller.style.height = sizes.bottom + "px"; d.scrollbarFiller.style.width = sizes.right + "px"; } else d.scrollbarFiller.style.display = ""; if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { d.gutterFiller.style.display = "block"; d.gutterFiller.style.height = sizes.bottom + "px"; d.gutterFiller.style.width = measure.gutterWidth + "px"; } else d.gutterFiller.style.display = ""; } // Compute the lines that are visible in a given viewport (defaults // the the current scroll position). viewport may contain top, // height, and ensure (see op.scrollToPos) properties. function visibleLines(display, doc, viewport) { var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; top = Math.floor(top - paddingTop(display)); var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); // Ensure is a {from: {line, ch}, to: {line, ch}} object, and // forces those lines into the viewport (if possible). if (viewport && viewport.ensure) { var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; if (ensureFrom < from) { from = ensureFrom; to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); } else if (Math.min(ensureTo, doc.lastLine()) >= to) { from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); to = ensureTo; } } return {from: from, to: Math.max(to, from + 1)}; } // LINE NUMBERS // Re-align line numbers and gutter marks to compensate for // horizontal scrolling. function alignHorizontally(cm) { var display = cm.display, view = display.view; if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; var gutterW = display.gutters.offsetWidth, left = comp + "px"; for (var i = 0; i < view.length; i++) if (!view[i].hidden) { if (cm.options.fixedGutter) { if (view[i].gutter) view[i].gutter.style.left = left; if (view[i].gutterBackground) view[i].gutterBackground.style.left = left; } var align = view[i].alignable; if (align) for (var j = 0; j < align.length; j++) align[j].style.left = left; } if (cm.options.fixedGutter) display.gutters.style.left = (comp + gutterW) + "px"; } // Used to ensure that the line number gutter is still the right // size for the current document size. Returns true when an update // is needed. function maybeUpdateLineNumberWidth(cm) { if (!cm.options.lineNumbers) return false; var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; if (last.length != display.lineNumChars) { var test = display.measure.appendChild(elt("div", [elt("div", last)], "CodeMirror-linenumber CodeMirror-gutter-elt")); var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; display.lineGutter.style.width = ""; display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; display.lineNumWidth = display.lineNumInnerWidth + padding; display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; display.lineGutter.style.width = display.lineNumWidth + "px"; updateGutterSpace(cm); return true; } return false; } function lineNumberFor(options, i) { return String(options.lineNumberFormatter(i + options.firstLineNumber)); } // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, // but using getBoundingClientRect to get a sub-pixel-accurate // result. function compensateForHScroll(display) { return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; } // DISPLAY DRAWING function DisplayUpdate(cm, viewport, force) { var display = cm.display; this.viewport = viewport; // Store some values that we'll need later (but don't want to force a relayout for) this.visible = visibleLines(display, cm.doc, viewport); this.editorIsHidden = !display.wrapper.offsetWidth; this.wrapperHeight = display.wrapper.clientHeight; this.wrapperWidth = display.wrapper.clientWidth; this.oldDisplayWidth = displayWidth(cm); this.force = force; this.dims = getDimensions(cm); this.events = []; } DisplayUpdate.prototype.signal = function(emitter, type) { if (hasHandler(emitter, type)) this.events.push(arguments); }; DisplayUpdate.prototype.finish = function() { for (var i = 0; i < this.events.length; i++) signal.apply(null, this.events[i]); }; function maybeClipScrollbars(cm) { var display = cm.display; if (!display.scrollbarsClipped && display.scroller.offsetWidth) { display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; display.heightForcer.style.height = scrollGap(cm) + "px"; display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; display.scrollbarsClipped = true; } } // Does the actual updating of the line display. Bails out // (returning false) when there is nothing to be done and forced is // false. function updateDisplayIfNeeded(cm, update) { var display = cm.display, doc = cm.doc; if (update.editorIsHidden) { resetView(cm); return false; } // Bail out if the visible area is already rendered and nothing changed. if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) return false; if (maybeUpdateLineNumberWidth(cm)) { resetView(cm); update.dims = getDimensions(cm); } // Compute a suitable new viewport (from & to) var end = doc.first + doc.size; var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); var to = Math.min(end, update.visible.to + cm.options.viewportMargin); if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom); if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo); if (sawCollapsedSpans) { from = visualLineNo(cm.doc, from); to = visualLineEndNo(cm.doc, to); } var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; adjustView(cm, from, to); display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); // Position the mover div to align with the current scroll position cm.display.mover.style.top = display.viewOffset + "px"; var toUpdate = countDirtyView(cm); if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) return false; // For big changes, we hide the enclosing element during the // update, since that speeds up the operations on most browsers. var focused = activeElt(); if (toUpdate > 4) display.lineDiv.style.display = "none"; patchDisplay(cm, display.updateLineNumbers, update.dims); if (toUpdate > 4) display.lineDiv.style.display = ""; display.renderedView = display.view; // There might have been a widget with a focused element that got // hidden or updated, if so re-focus it. if (focused && activeElt() != focused && focused.offsetHeight) focused.focus(); // Prevent selection and cursors from interfering with the scroll // width and height. removeChildren(display.cursorDiv); removeChildren(display.selectionDiv); display.gutters.style.height = display.sizer.style.minHeight = 0; if (different) { display.lastWrapHeight = update.wrapperHeight; display.lastWrapWidth = update.wrapperWidth; startWorker(cm, 400); } display.updateLineNumbers = null; return true; } function postUpdateDisplay(cm, update) { var viewport = update.viewport; for (var first = true;; first = false) { if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { // Clip forced viewport to actual scrollable area. if (viewport && viewport.top != null) viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; // Updated line heights might result in the drawn area not // actually covering the viewport. Keep looping until it does. update.visible = visibleLines(cm.display, cm.doc, viewport); if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) break; } if (!updateDisplayIfNeeded(cm, update)) break; updateHeightsInViewport(cm); var barMeasure = measureForScrollbars(cm); updateSelection(cm); updateScrollbars(cm, barMeasure); setDocumentHeight(cm, barMeasure); } update.signal(cm, "update", cm); if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; } } function updateDisplaySimple(cm, viewport) { var update = new DisplayUpdate(cm, viewport); if (updateDisplayIfNeeded(cm, update)) { updateHeightsInViewport(cm); postUpdateDisplay(cm, update); var barMeasure = measureForScrollbars(cm); updateSelection(cm); updateScrollbars(cm, barMeasure); setDocumentHeight(cm, barMeasure); update.finish(); } } function setDocumentHeight(cm, measure) { cm.display.sizer.style.minHeight = measure.docHeight + "px"; cm.display.heightForcer.style.top = measure.docHeight + "px"; cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"; } // Read the actual heights of the rendered lines, and update their // stored heights to match. function updateHeightsInViewport(cm) { var display = cm.display; var prevBottom = display.lineDiv.offsetTop; for (var i = 0; i < display.view.length; i++) { var cur = display.view[i], height; if (cur.hidden) continue; if (ie && ie_version < 8) { var bot = cur.node.offsetTop + cur.node.offsetHeight; height = bot - prevBottom; prevBottom = bot; } else { var box = cur.node.getBoundingClientRect(); height = box.bottom - box.top; } var diff = cur.line.height - height; if (height < 2) height = textHeight(display); if (diff > .001 || diff < -.001) { updateLineHeight(cur.line, height); updateWidgetHeight(cur.line); if (cur.rest) for (var j = 0; j < cur.rest.length; j++) updateWidgetHeight(cur.rest[j]); } } } // Read and store the height of line widgets associated with the // given line. function updateWidgetHeight(line) { if (line.widgets) for (var i = 0; i < line.widgets.length; ++i) line.widgets[i].height = line.widgets[i].node.parentNode.offsetHeight; } // Do a bulk-read of the DOM positions and sizes needed to draw the // view, so that we don't interleave reading and writing to the DOM. function getDimensions(cm) { var d = cm.display, left = {}, width = {}; var gutterLeft = d.gutters.clientLeft; for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; width[cm.options.gutters[i]] = n.clientWidth; } return {fixedPos: compensateForHScroll(d), gutterTotalWidth: d.gutters.offsetWidth, gutterLeft: left, gutterWidth: width, wrapperWidth: d.wrapper.clientWidth}; } // Sync the actual display DOM structure with display.view, removing // nodes for lines that are no longer in view, and creating the ones // that are not there yet, and updating the ones that are out of // date. function patchDisplay(cm, updateNumbersFrom, dims) { var display = cm.display, lineNumbers = cm.options.lineNumbers; var container = display.lineDiv, cur = container.firstChild; function rm(node) { var next = node.nextSibling; // Works around a throw-scroll bug in OS X Webkit if (webkit && mac && cm.display.currentWheelTarget == node) node.style.display = "none"; else node.parentNode.removeChild(node); return next; } var view = display.view, lineN = display.viewFrom; // Loop over the elements in the view, syncing cur (the DOM nodes // in display.lineDiv) with the view as we go. for (var i = 0; i < view.length; i++) { var lineView = view[i]; if (lineView.hidden) { } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet var node = buildLineElement(cm, lineView, lineN, dims); container.insertBefore(node, cur); } else { // Already drawn while (cur != lineView.node) cur = rm(cur); var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber; if (lineView.changes) { if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false; updateLineForChanges(cm, lineView, lineN, dims); } if (updateNumber) { removeChildren(lineView.lineNumber); lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); } cur = lineView.node.nextSibling; } lineN += lineView.size; } while (cur) cur = rm(cur); } // When an aspect of a line changes, a string is added to // lineView.changes. This updates the relevant part of the line's // DOM structure. function updateLineForChanges(cm, lineView, lineN, dims) { for (var j = 0; j < lineView.changes.length; j++) { var type = lineView.changes[j]; if (type == "text") updateLineText(cm, lineView); else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims); else if (type == "class") updateLineClasses(lineView); else if (type == "widget") updateLineWidgets(cm, lineView, dims); } lineView.changes = null; } // Lines with gutter elements, widgets or a background class need to // be wrapped, and have the extra elements added to the wrapper div function ensureLineWrapped(lineView) { if (lineView.node == lineView.text) { lineView.node = elt("div", null, null, "position: relative"); if (lineView.text.parentNode) lineView.text.parentNode.replaceChild(lineView.node, lineView.text); lineView.node.appendChild(lineView.text); if (ie && ie_version < 8) lineView.node.style.zIndex = 2; } return lineView.node; } function updateLineBackground(lineView) { var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; if (cls) cls += " CodeMirror-linebackground"; if (lineView.background) { if (cls) lineView.background.className = cls; else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } } else if (cls) { var wrap = ensureLineWrapped(lineView); lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); } } // Wrapper around buildLineContent which will reuse the structure // in display.externalMeasured when possible. function getLineContent(cm, lineView) { var ext = cm.display.externalMeasured; if (ext && ext.line == lineView.line) { cm.display.externalMeasured = null; lineView.measure = ext.measure; return ext.built; } return buildLineContent(cm, lineView); } // Redraw the line's text. Interacts with the background and text // classes because the mode may output tokens that influence these // classes. function updateLineText(cm, lineView) { var cls = lineView.text.className; var built = getLineContent(cm, lineView); if (lineView.text == lineView.node) lineView.node = built.pre; lineView.text.parentNode.replaceChild(built.pre, lineView.text); lineView.text = built.pre; if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { lineView.bgClass = built.bgClass; lineView.textClass = built.textClass; updateLineClasses(lineView); } else if (cls) { lineView.text.className = cls; } } function updateLineClasses(lineView) { updateLineBackground(lineView); if (lineView.line.wrapClass) ensureLineWrapped(lineView).className = lineView.line.wrapClass; else if (lineView.node != lineView.text) lineView.node.className = ""; var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; lineView.text.className = textClass || ""; } function updateLineGutter(cm, lineView, lineN, dims) { if (lineView.gutter) { lineView.node.removeChild(lineView.gutter); lineView.gutter = null; } if (lineView.gutterBackground) { lineView.node.removeChild(lineView.gutterBackground); lineView.gutterBackground = null; } if (lineView.line.gutterClass) { var wrap = ensureLineWrapped(lineView); lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + dims.gutterTotalWidth + "px"); wrap.insertBefore(lineView.gutterBackground, lineView.text); } var markers = lineView.line.gutterMarkers; if (cm.options.lineNumbers || markers) { var wrap = ensureLineWrapped(lineView); var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"); cm.display.input.setUneditable(gutterWrap); wrap.insertBefore(gutterWrap, lineView.text); if (lineView.line.gutterClass) gutterWrap.className += " " + lineView.line.gutterClass; if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) lineView.lineNumber = gutterWrap.appendChild( elt("div", lineNumberFor(cm.options, lineN), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + cm.display.lineNumInnerWidth + "px")); if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) { var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; if (found) gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); } } } function updateLineWidgets(cm, lineView, dims) { if (lineView.alignable) lineView.alignable = null; for (var node = lineView.node.firstChild, next; node; node = next) { var next = node.nextSibling; if (node.className == "CodeMirror-linewidget") lineView.node.removeChild(node); } insertLineWidgets(cm, lineView, dims); } // Build a line's DOM representation from scratch function buildLineElement(cm, lineView, lineN, dims) { var built = getLineContent(cm, lineView); lineView.text = lineView.node = built.pre; if (built.bgClass) lineView.bgClass = built.bgClass; if (built.textClass) lineView.textClass = built.textClass; updateLineClasses(lineView); updateLineGutter(cm, lineView, lineN, dims); insertLineWidgets(cm, lineView, dims); return lineView.node; } // A lineView may contain multiple logical lines (when merged by // collapsed spans). The widgets for all of them need to be drawn. function insertLineWidgets(cm, lineView, dims) { insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { if (!line.widgets) return; var wrap = ensureLineWrapped(lineView); for (var i = 0, ws = line.widgets; i < ws.length; ++i) { var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true"); positionLineWidget(widget, node, lineView, dims); cm.display.input.setUneditable(node); if (allowAbove && widget.above) wrap.insertBefore(node, lineView.gutter || lineView.text); else wrap.appendChild(node); signalLater(widget, "redraw"); } } function positionLineWidget(widget, node, lineView, dims) { if (widget.noHScroll) { (lineView.alignable || (lineView.alignable = [])).push(node); var width = dims.wrapperWidth; node.style.left = dims.fixedPos + "px"; if (!widget.coverGutter) { width -= dims.gutterTotalWidth; node.style.paddingLeft = dims.gutterTotalWidth + "px"; } node.style.width = width + "px"; } if (widget.coverGutter) { node.style.zIndex = 5; node.style.position = "relative"; if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; } } // POSITION OBJECT // A Pos instance represents a position within the text. var Pos = CodeMirror.Pos = function(line, ch) { if (!(this instanceof Pos)) return new Pos(line, ch); this.line = line; this.ch = ch; }; // Compare two positions, return 0 if they are the same, a negative // number when a is less, and a positive number otherwise. var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; }; function copyPos(x) {return Pos(x.line, x.ch);} function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; } function minPos(a, b) { return cmp(a, b) < 0 ? a : b; } // INPUT HANDLING function ensureFocus(cm) { if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); } } // This will be set to a {lineWise: bool, text: [string]} object, so // that, when pasting, we know what kind of selections the copied // text was made out of. var lastCopied = null; function applyTextInput(cm, inserted, deleted, sel, origin) { var doc = cm.doc; cm.display.shift = false; if (!sel) sel = doc.sel; var paste = cm.state.pasteIncoming || origin == "paste"; var textLines = doc.splitLines(inserted), multiPaste = null // When pasing N lines into N selections, insert one line per selection if (paste && sel.ranges.length > 1) { if (lastCopied && lastCopied.text.join("\n") == inserted) { if (sel.ranges.length % lastCopied.text.length == 0) { multiPaste = []; for (var i = 0; i < lastCopied.text.length; i++) multiPaste.push(doc.splitLines(lastCopied.text[i])); } } else if (textLines.length == sel.ranges.length) { multiPaste = map(textLines, function(l) { return [l]; }); } } // Normal behavior is to insert the new text into every selection for (var i = sel.ranges.length - 1; i >= 0; i--) { var range = sel.ranges[i]; var from = range.from(), to = range.to(); if (range.empty()) { if (deleted && deleted > 0) // Handle deletion from = Pos(from.line, from.ch - deleted); else if (cm.state.overwrite && !paste) // Handle overwrite to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted) from = to = Pos(from.line, 0) } var updateInput = cm.curOp.updateInput; var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines, origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")}; makeChange(cm.doc, changeEvent); signalLater(cm, "inputRead", cm, changeEvent); } if (inserted && !paste) triggerElectric(cm, inserted); ensureCursorVisible(cm); cm.curOp.updateInput = updateInput; cm.curOp.typing = true; cm.state.pasteIncoming = cm.state.cutIncoming = false; } function handlePaste(e, cm) { var pasted = e.clipboardData && e.clipboardData.getData("Text"); if (pasted) { e.preventDefault(); if (!cm.isReadOnly() && !cm.options.disableInput) runInOp(cm, function() { applyTextInput(cm, pasted, 0, null, "paste"); }); return true; } } function triggerElectric(cm, inserted) { // When an 'electric' character is inserted, immediately trigger a reindent if (!cm.options.electricChars || !cm.options.smartIndent) return; var sel = cm.doc.sel; for (var i = sel.ranges.length - 1; i >= 0; i--) { var range = sel.ranges[i]; if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) continue; var mode = cm.getModeAt(range.head); var indented = false; if (mode.electricChars) { for (var j = 0; j < mode.electricChars.length; j++) if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { indented = indentLine(cm, range.head.line, "smart"); break; } } else if (mode.electricInput) { if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) indented = indentLine(cm, range.head.line, "smart"); } if (indented) signalLater(cm, "electricInput", cm, range.head.line); } } function copyableRanges(cm) { var text = [], ranges = []; for (var i = 0; i < cm.doc.sel.ranges.length; i++) { var line = cm.doc.sel.ranges[i].head.line; var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; ranges.push(lineRange); text.push(cm.getRange(lineRange.anchor, lineRange.head)); } return {text: text, ranges: ranges}; } function disableBrowserMagic(field, spellcheck) { field.setAttribute("autocorrect", "off"); field.setAttribute("autocapitalize", "off"); field.setAttribute("spellcheck", !!spellcheck); } // TEXTAREA INPUT STYLE function TextareaInput(cm) { this.cm = cm; // See input.poll and input.reset this.prevInput = ""; // Flag that indicates whether we expect input to appear real soon // now (after some event like 'keypress' or 'input') and are // polling intensively. this.pollingFast = false; // Self-resetting timeout for the poller this.polling = new Delayed(); // Tracks when input.reset has punted to just putting a short // string into the textarea instead of the full selection. this.inaccurateSelection = false; // Used to work around IE issue with selection being forgotten when focus moves away from textarea this.hasSelection = false; this.composing = null; }; function hiddenTextarea() { var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"); var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); // The textarea is kept positioned near the cursor to prevent the // fact that it'll be scrolled into view on input from scrolling // our fake cursor out of view. On webkit, when wrap=off, paste is // very slow. So make the area wide instead. if (webkit) te.style.width = "1000px"; else te.setAttribute("wrap", "off"); // If border: 0; -- iOS fails to open keyboard (issue #1287) if (ios) te.style.border = "1px solid black"; disableBrowserMagic(te); return div; } TextareaInput.prototype = copyObj({ init: function(display) { var input = this, cm = this.cm; // Wraps and hides input textarea var div = this.wrapper = hiddenTextarea(); // The semihidden textarea that is focused when the editor is // focused, and receives input. var te = this.textarea = div.firstChild; display.wrapper.insertBefore(div, display.wrapper.firstChild); // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) if (ios) te.style.width = "0px"; on(te, "input", function() { if (ie && ie_version >= 9 && input.hasSelection) input.hasSelection = null; input.poll(); }); on(te, "paste", function(e) { if (signalDOMEvent(cm, e) || handlePaste(e, cm)) return cm.state.pasteIncoming = true; input.fastPoll(); }); function prepareCopyCut(e) { if (signalDOMEvent(cm, e)) return if (cm.somethingSelected()) { lastCopied = {lineWise: false, text: cm.getSelections()}; if (input.inaccurateSelection) { input.prevInput = ""; input.inaccurateSelection = false; te.value = lastCopied.text.join("\n"); selectInput(te); } } else if (!cm.options.lineWiseCopyCut) { return; } else { var ranges = copyableRanges(cm); lastCopied = {lineWise: true, text: ranges.text}; if (e.type == "cut") { cm.setSelections(ranges.ranges, null, sel_dontScroll); } else { input.prevInput = ""; te.value = ranges.text.join("\n"); selectInput(te); } } if (e.type == "cut") cm.state.cutIncoming = true; } on(te, "cut", prepareCopyCut); on(te, "copy", prepareCopyCut); on(display.scroller, "paste", function(e) { if (eventInWidget(display, e) || signalDOMEvent(cm, e)) return; cm.state.pasteIncoming = true; input.focus(); }); // Prevent normal selection in the editor (we handle our own) on(display.lineSpace, "selectstart", function(e) { if (!eventInWidget(display, e)) e_preventDefault(e); }); on(te, "compositionstart", function() { var start = cm.getCursor("from"); if (input.composing) input.composing.range.clear() input.composing = { start: start, range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) }; }); on(te, "compositionend", function() { if (input.composing) { input.poll(); input.composing.range.clear(); input.composing = null; } }); }, prepareSelection: function() { // Redraw the selection and/or cursor var cm = this.cm, display = cm.display, doc = cm.doc; var result = prepareSelection(cm); // Move the hidden textarea near the cursor to prevent scrolling artifacts if (cm.options.moveInputWithCursor) { var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top)); result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left)); } return result; }, showSelection: function(drawn) { var cm = this.cm, display = cm.display; removeChildrenAndAdd(display.cursorDiv, drawn.cursors); removeChildrenAndAdd(display.selectionDiv, drawn.selection); if (drawn.teTop != null) { this.wrapper.style.top = drawn.teTop + "px"; this.wrapper.style.left = drawn.teLeft + "px"; } }, // Reset the input to correspond to the selection (or to be empty, // when not typing and nothing is selected) reset: function(typing) { if (this.contextMenuPending) return; var minimal, selected, cm = this.cm, doc = cm.doc; if (cm.somethingSelected()) { this.prevInput = ""; var range = doc.sel.primary(); minimal = hasCopyEvent && (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000); var content = minimal ? "-" : selected || cm.getSelection(); this.textarea.value = content; if (cm.state.focused) selectInput(this.textarea); if (ie && ie_version >= 9) this.hasSelection = content; } else if (!typing) { this.prevInput = this.textarea.value = ""; if (ie && ie_version >= 9) this.hasSelection = null; } this.inaccurateSelection = minimal; }, getField: function() { return this.textarea; }, supportsTouch: function() { return false; }, focus: function() { if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { try { this.textarea.focus(); } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM } }, blur: function() { this.textarea.blur(); }, resetPosition: function() { this.wrapper.style.top = this.wrapper.style.left = 0; }, receivedFocus: function() { this.slowPoll(); }, // Poll for input changes, using the normal rate of polling. This // runs as long as the editor is focused. slowPoll: function() { var input = this; if (input.pollingFast) return; input.polling.set(this.cm.options.pollInterval, function() { input.poll(); if (input.cm.state.focused) input.slowPoll(); }); }, // When an event has just come in that is likely to add or change // something in the input textarea, we poll faster, to ensure that // the change appears on the screen quickly. fastPoll: function() { var missed = false, input = this; input.pollingFast = true; function p() { var changed = input.poll(); if (!changed && !missed) {missed = true; input.polling.set(60, p);} else {input.pollingFast = false; input.slowPoll();} } input.polling.set(20, p); }, // Read input from the textarea, and update the document to match. // When something is selected, it is present in the textarea, and // selected (unless it is huge, in which case a placeholder is // used). When nothing is selected, the cursor sits after previously // seen text (can be empty), which is stored in prevInput (we must // not reset the textarea when typing, because that breaks IME). poll: function() { var cm = this.cm, input = this.textarea, prevInput = this.prevInput; // Since this is called a *lot*, try to bail out as cheaply as // possible when it is clear that nothing happened. hasSelection // will be the case when there is a lot of text in the textarea, // in which case reading its value would be expensive. if (this.contextMenuPending || !cm.state.focused || (hasSelection(input) && !prevInput && !this.composing) || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) return false; var text = input.value; // If nothing changed, bail. if (text == prevInput && !cm.somethingSelected()) return false; // Work around nonsensical selection resetting in IE9/10, and // inexplicable appearance of private area unicode characters on // some key combos in Mac (#2689). if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\uf700-\uf7ff]/.test(text)) { cm.display.input.reset(); return false; } if (cm.doc.sel == cm.display.selForContextMenu) { var first = text.charCodeAt(0); if (first == 0x200b && !prevInput) prevInput = "\u200b"; if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo"); } } // Find the part of the input that is actually new var same = 0, l = Math.min(prevInput.length, text.length); while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; var self = this; runInOp(cm, function() { applyTextInput(cm, text.slice(same), prevInput.length - same, null, self.composing ? "*compose" : null); // Don't leave long text in the textarea, since it makes further polling slow if (text.length > 1000 || text.indexOf("\n") > -1) input.value = self.prevInput = ""; else self.prevInput = text; if (self.composing) { self.composing.range.clear(); self.composing.range = cm.markText(self.composing.start, cm.getCursor("to"), {className: "CodeMirror-composing"}); } }); return true; }, ensurePolled: function() { if (this.pollingFast && this.poll()) this.pollingFast = false; }, onKeyPress: function() { if (ie && ie_version >= 9) this.hasSelection = null; this.fastPoll(); }, onContextMenu: function(e) { var input = this, cm = input.cm, display = cm.display, te = input.textarea; var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; if (!pos || presto) return; // Opera is difficult. // Reset the current text selection only if the click is done outside of the selection // and 'resetSelectionOnContextMenu' option is true. var reset = cm.options.resetSelectionOnContextMenu; if (reset && cm.doc.sel.contains(pos) == -1) operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText; input.wrapper.style.cssText = "position: absolute" var wrapperBox = input.wrapper.getBoundingClientRect() te.style.cssText = "position: absolute; width: 30px; height: 30px; top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px; z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712) display.input.focus(); if (webkit) window.scrollTo(null, oldScrollY); display.input.reset(); // Adds "Select all" to context menu in FF if (!cm.somethingSelected()) te.value = input.prevInput = " "; input.contextMenuPending = true; display.selForContextMenu = cm.doc.sel; clearTimeout(display.detectingSelectAll); // Select-all will be greyed out if there's nothing to select, so // this adds a zero-width space so that we can later check whether // it got selected. function prepareSelectAllHack() { if (te.selectionStart != null) { var selected = cm.somethingSelected(); var extval = "\u200b" + (selected ? te.value : ""); te.value = "\u21da"; // Used to catch context-menu undo te.value = extval; input.prevInput = selected ? "" : "\u200b"; te.selectionStart = 1; te.selectionEnd = extval.length; // Re-set this, in case some other handler touched the // selection in the meantime. display.selForContextMenu = cm.doc.sel; } } function rehide() { input.contextMenuPending = false; input.wrapper.style.cssText = oldWrapperCSS te.style.cssText = oldCSS; if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); // Try to detect the user choosing select-all if (te.selectionStart != null) { if (!ie || (ie && ie_version < 9)) prepareSelectAllHack(); var i = 0, poll = function() { if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == "\u200b") operation(cm, commands.selectAll)(cm); else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500); else display.input.reset(); }; display.detectingSelectAll = setTimeout(poll, 200); } } if (ie && ie_version >= 9) prepareSelectAllHack(); if (captureRightClick) { e_stop(e); var mouseup = function() { off(window, "mouseup", mouseup); setTimeout(rehide, 20); }; on(window, "mouseup", mouseup); } else { setTimeout(rehide, 50); } }, readOnlyChanged: function(val) { if (!val) this.reset(); }, setUneditable: nothing, needsContentAttribute: false }, TextareaInput.prototype); // CONTENTEDITABLE INPUT STYLE function ContentEditableInput(cm) { this.cm = cm; this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; this.polling = new Delayed(); this.gracePeriod = false; } ContentEditableInput.prototype = copyObj({ init: function(display) { var input = this, cm = input.cm; var div = input.div = display.lineDiv; disableBrowserMagic(div, cm.options.spellcheck); on(div, "paste", function(e) { if (signalDOMEvent(cm, e) || handlePaste(e, cm)) return // IE doesn't fire input events, so we schedule a read for the pasted content in this way if (ie_version <= 11) setTimeout(operation(cm, function() { if (!input.pollContent()) regChange(cm); }), 20) }) on(div, "compositionstart", function(e) { var data = e.data; input.composing = {sel: cm.doc.sel, data: data, startData: data}; if (!data) return; var prim = cm.doc.sel.primary(); var line = cm.getLine(prim.head.line); var found = line.indexOf(data, Math.max(0, prim.head.ch - data.length)); if (found > -1 && found <= prim.head.ch) input.composing.sel = simpleSelection(Pos(prim.head.line, found), Pos(prim.head.line, found + data.length)); }); on(div, "compositionupdate", function(e) { input.composing.data = e.data; }); on(div, "compositionend", function(e) { var ours = input.composing; if (!ours) return; if (e.data != ours.startData && !/\u200b/.test(e.data)) ours.data = e.data; // Need a small delay to prevent other code (input event, // selection polling) from doing damage when fired right after // compositionend. setTimeout(function() { if (!ours.handled) input.applyComposition(ours); if (input.composing == ours) input.composing = null; }, 50); }); on(div, "touchstart", function() { input.forceCompositionEnd(); }); on(div, "input", function() { if (input.composing) return; if (cm.isReadOnly() || !input.pollContent()) runInOp(input.cm, function() {regChange(cm);}); }); function onCopyCut(e) { if (signalDOMEvent(cm, e)) return if (cm.somethingSelected()) { lastCopied = {lineWise: false, text: cm.getSelections()}; if (e.type == "cut") cm.replaceSelection("", null, "cut"); } else if (!cm.options.lineWiseCopyCut) { return; } else { var ranges = copyableRanges(cm); lastCopied = {lineWise: true, text: ranges.text}; if (e.type == "cut") { cm.operation(function() { cm.setSelections(ranges.ranges, 0, sel_dontScroll); cm.replaceSelection("", null, "cut"); }); } } if (e.clipboardData) { e.clipboardData.clearData(); var content = lastCopied.text.join("\n") // iOS exposes the clipboard API, but seems to discard content inserted into it e.clipboardData.setData("Text", content); if (e.clipboardData.getData("Text") == content) { e.preventDefault(); return } } // Old-fashioned briefly-focus-a-textarea hack var kludge = hiddenTextarea(), te = kludge.firstChild; cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); te.value = lastCopied.text.join("\n"); var hadFocus = document.activeElement; selectInput(te); setTimeout(function() { cm.display.lineSpace.removeChild(kludge); hadFocus.focus(); if (hadFocus == div) input.showPrimarySelection() }, 50); } on(div, "copy", onCopyCut); on(div, "cut", onCopyCut); }, prepareSelection: function() { var result = prepareSelection(this.cm, false); result.focus = this.cm.state.focused; return result; }, showSelection: function(info, takeFocus) { if (!info || !this.cm.display.view.length) return; if (info.focus || takeFocus) this.showPrimarySelection(); this.showMultipleSelections(info); }, showPrimarySelection: function() { var sel = window.getSelection(), prim = this.cm.doc.sel.primary(); var curAnchor = domToPos(this.cm, sel.anchorNode, sel.anchorOffset); var curFocus = domToPos(this.cm, sel.focusNode, sel.focusOffset); if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), prim.from()) == 0 && cmp(maxPos(curAnchor, curFocus), prim.to()) == 0) return; var start = posToDOM(this.cm, prim.from()); var end = posToDOM(this.cm, prim.to()); if (!start && !end) return; var view = this.cm.display.view; var old = sel.rangeCount && sel.getRangeAt(0); if (!start) { start = {node: view[0].measure.map[2], offset: 0}; } else if (!end) { // FIXME dangerously hacky var measure = view[view.length - 1].measure; var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}; } try { var rng = range(start.node, start.offset, end.offset, end.node); } catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible if (rng) { if (!gecko && this.cm.state.focused) { sel.collapse(start.node, start.offset); if (!rng.collapsed) sel.addRange(rng); } else { sel.removeAllRanges(); sel.addRange(rng); } if (old && sel.anchorNode == null) sel.addRange(old); else if (gecko) this.startGracePeriod(); } this.rememberSelection(); }, startGracePeriod: function() { var input = this; clearTimeout(this.gracePeriod); this.gracePeriod = setTimeout(function() { input.gracePeriod = false; if (input.selectionChanged()) input.cm.operation(function() { input.cm.curOp.selectionChanged = true; }); }, 20); }, showMultipleSelections: function(info) { removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); }, rememberSelection: function() { var sel = window.getSelection(); this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; }, selectionInEditor: function() { var sel = window.getSelection(); if (!sel.rangeCount) return false; var node = sel.getRangeAt(0).commonAncestorContainer; return contains(this.div, node); }, focus: function() { if (this.cm.options.readOnly != "nocursor") this.div.focus(); }, blur: function() { this.div.blur(); }, getField: function() { return this.div; }, supportsTouch: function() { return true; }, receivedFocus: function() { var input = this; if (this.selectionInEditor()) this.pollSelection(); else runInOp(this.cm, function() { input.cm.curOp.selectionChanged = true; }); function poll() { if (input.cm.state.focused) { input.pollSelection(); input.polling.set(input.cm.options.pollInterval, poll); } } this.polling.set(this.cm.options.pollInterval, poll); }, selectionChanged: function() { var sel = window.getSelection(); return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset; }, pollSelection: function() { if (!this.composing && !this.gracePeriod && this.selectionChanged()) { var sel = window.getSelection(), cm = this.cm; this.rememberSelection(); var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); var head = domToPos(cm, sel.focusNode, sel.focusOffset); if (anchor && head) runInOp(cm, function() { setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); if (anchor.bad || head.bad) cm.curOp.selectionChanged = true; }); } }, pollContent: function() { var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); var from = sel.from(), to = sel.to(); if (from.line < display.viewFrom || to.line > display.viewTo - 1) return false; var fromIndex; if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { var fromLine = lineNo(display.view[0].line); var fromNode = display.view[0].node; } else { var fromLine = lineNo(display.view[fromIndex].line); var fromNode = display.view[fromIndex - 1].node.nextSibling; } var toIndex = findViewIndex(cm, to.line); if (toIndex == display.view.length - 1) { var toLine = display.viewTo - 1; var toNode = display.lineDiv.lastChild; } else { var toLine = lineNo(display.view[toIndex + 1].line) - 1; var toNode = display.view[toIndex + 1].node.previousSibling; } var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); while (newText.length > 1 && oldText.length > 1) { if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } else break; } var cutFront = 0, cutEnd = 0; var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) ++cutFront; var newBot = lst(newText), oldBot = lst(oldText); var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0)); while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) ++cutEnd; newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd); newText[0] = newText[0].slice(cutFront); var chFrom = Pos(fromLine, cutFront); var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { replaceRange(cm.doc, newText, chFrom, chTo, "+input"); return true; } }, ensurePolled: function() { this.forceCompositionEnd(); }, reset: function() { this.forceCompositionEnd(); }, forceCompositionEnd: function() { if (!this.composing || this.composing.handled) return; this.applyComposition(this.composing); this.composing.handled = true; this.div.blur(); this.div.focus(); }, applyComposition: function(composing) { if (this.cm.isReadOnly()) operation(this.cm, regChange)(this.cm) else if (composing.data && composing.data != composing.startData) operation(this.cm, applyTextInput)(this.cm, composing.data, 0, composing.sel); }, setUneditable: function(node) { node.contentEditable = "false" }, onKeyPress: function(e) { e.preventDefault(); if (!this.cm.isReadOnly()) operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }, readOnlyChanged: function(val) { this.div.contentEditable = String(val != "nocursor") }, onContextMenu: nothing, resetPosition: nothing, needsContentAttribute: true }, ContentEditableInput.prototype); function posToDOM(cm, pos) { var view = findViewForLine(cm, pos.line); if (!view || view.hidden) return null; var line = getLine(cm.doc, pos.line); var info = mapFromLineView(view, line, pos.line); var order = getOrder(line), side = "left"; if (order) { var partPos = getBidiPartAt(order, pos.ch); side = partPos % 2 ? "right" : "left"; } var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); result.offset = result.collapse == "right" ? result.end : result.start; return result; } function badPos(pos, bad) { if (bad) pos.bad = true; return pos; } function domToPos(cm, node, offset) { var lineNode; if (node == cm.display.lineDiv) { lineNode = cm.display.lineDiv.childNodes[offset]; if (!lineNode) return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); node = null; offset = 0; } else { for (lineNode = node;; lineNode = lineNode.parentNode) { if (!lineNode || lineNode == cm.display.lineDiv) return null; if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) break; } } for (var i = 0; i < cm.display.view.length; i++) { var lineView = cm.display.view[i]; if (lineView.node == lineNode) return locateNodeInLineView(lineView, node, offset); } } function locateNodeInLineView(lineView, node, offset) { var wrapper = lineView.text.firstChild, bad = false; if (!node || !contains(wrapper, node)) return badPos(Pos(lineNo(lineView.line), 0), true); if (node == wrapper) { bad = true; node = wrapper.childNodes[offset]; offset = 0; if (!node) { var line = lineView.rest ? lst(lineView.rest) : lineView.line; return badPos(Pos(lineNo(line), line.text.length), bad); } } var textNode = node.nodeType == 3 ? node : null, topNode = node; if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { textNode = node.firstChild; if (offset) offset = textNode.nodeValue.length; } while (topNode.parentNode != wrapper) topNode = topNode.parentNode; var measure = lineView.measure, maps = measure.maps; function find(textNode, topNode, offset) { for (var i = -1; i < (maps ? maps.length : 0); i++) { var map = i < 0 ? measure.map : maps[i]; for (var j = 0; j < map.length; j += 3) { var curNode = map[j + 2]; if (curNode == textNode || curNode == topNode) { var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); var ch = map[j] + offset; if (offset < 0 || curNode != textNode) ch = map[j + (offset ? 1 : 0)]; return Pos(line, ch); } } } } var found = find(textNode, topNode, offset); if (found) return badPos(found, bad); // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { found = find(after, after.firstChild, 0); if (found) return badPos(Pos(found.line, found.ch - dist), bad); else dist += after.textContent.length; } for (var before = topNode.previousSibling, dist = offset; before; before = before.previousSibling) { found = find(before, before.firstChild, -1); if (found) return badPos(Pos(found.line, found.ch + dist), bad); else dist += before.textContent.length; } } function domTextBetween(cm, from, to, fromLine, toLine) { var text = "", closing = false, lineSep = cm.doc.lineSeparator(); function recognizeMarker(id) { return function(marker) { return marker.id == id; }; } function walk(node) { if (node.nodeType == 1) { var cmText = node.getAttribute("cm-text"); if (cmText != null) { if (cmText == "") cmText = node.textContent.replace(/\u200b/g, ""); text += cmText; return; } var markerID = node.getAttribute("cm-marker"), range; if (markerID) { var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); if (found.length && (range = found[0].find())) text += getBetween(cm.doc, range.from, range.to).join(lineSep); return; } if (node.getAttribute("contenteditable") == "false") return; for (var i = 0; i < node.childNodes.length; i++) walk(node.childNodes[i]); if (/^(pre|div|p)$/i.test(node.nodeName)) closing = true; } else if (node.nodeType == 3) { var val = node.nodeValue; if (!val) return; if (closing) { text += lineSep; closing = false; } text += val; } } for (;;) { walk(from); if (from == to) break; from = from.nextSibling; } return text; } CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; // SELECTION / CURSOR // Selection objects are immutable. A new one is created every time // the selection changes. A selection is one or more non-overlapping // (and non-touching) ranges, sorted, and an integer that indicates // which one is the primary selection (the one that's scrolled into // view, that getCursor returns, etc). function Selection(ranges, primIndex) { this.ranges = ranges; this.primIndex = primIndex; } Selection.prototype = { primary: function() { return this.ranges[this.primIndex]; }, equals: function(other) { if (other == this) return true; if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false; for (var i = 0; i < this.ranges.length; i++) { var here = this.ranges[i], there = other.ranges[i]; if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false; } return true; }, deepCopy: function() { for (var out = [], i = 0; i < this.ranges.length; i++) out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); return new Selection(out, this.primIndex); }, somethingSelected: function() { for (var i = 0; i < this.ranges.length; i++) if (!this.ranges[i].empty()) return true; return false; }, contains: function(pos, end) { if (!end) end = pos; for (var i = 0; i < this.ranges.length; i++) { var range = this.ranges[i]; if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) return i; } return -1; } }; function Range(anchor, head) { this.anchor = anchor; this.head = head; } Range.prototype = { from: function() { return minPos(this.anchor, this.head); }, to: function() { return maxPos(this.anchor, this.head); }, empty: function() { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; } }; // Take an unsorted, potentially overlapping set of ranges, and // build a selection out of it. 'Consumes' ranges array (modifying // it). function normalizeSelection(ranges, primIndex) { var prim = ranges[primIndex]; ranges.sort(function(a, b) { return cmp(a.from(), b.from()); }); primIndex = indexOf(ranges, prim); for (var i = 1; i < ranges.length; i++) { var cur = ranges[i], prev = ranges[i - 1]; if (cmp(prev.to(), cur.from()) >= 0) { var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; if (i <= primIndex) --primIndex; ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); } } return new Selection(ranges, primIndex); } function simpleSelection(anchor, head) { return new Selection([new Range(anchor, head || anchor)], 0); } // Most of the external API clips given positions to make sure they // actually exist within the document. function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} function clipPos(doc, pos) { if (pos.line < doc.first) return Pos(doc.first, 0); var last = doc.first + doc.size - 1; if (pos.line > last) return Pos(last, getLine(doc, last).text.length); return clipToLen(pos, getLine(doc, pos.line).text.length); } function clipToLen(pos, linelen) { var ch = pos.ch; if (ch == null || ch > linelen) return Pos(pos.line, linelen); else if (ch < 0) return Pos(pos.line, 0); else return pos; } function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} function clipPosArray(doc, array) { for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]); return out; } // SELECTION UPDATES // The 'scroll' parameter given to many of these indicated whether // the new cursor position should be scrolled into view after // modifying the selection. // If shift is held or the extend flag is set, extends a range to // include a given position (and optionally a second position). // Otherwise, simply returns the range between the given positions. // Used for cursor motion and such. function extendRange(doc, range, head, other) { if (doc.cm && doc.cm.display.shift || doc.extend) { var anchor = range.anchor; if (other) { var posBefore = cmp(head, anchor) < 0; if (posBefore != (cmp(other, anchor) < 0)) { anchor = head; head = other; } else if (posBefore != (cmp(head, other) < 0)) { head = other; } } return new Range(anchor, head); } else { return new Range(other || head, head); } } // Extend the primary selection range, discard the rest. function extendSelection(doc, head, other, options) { setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options); } // Extend all selections (pos is an array of selections with length // equal the number of selections) function extendSelections(doc, heads, options) { for (var out = [], i = 0; i < doc.sel.ranges.length; i++) out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null); var newSel = normalizeSelection(out, doc.sel.primIndex); setSelection(doc, newSel, options); } // Updates a single range in the selection. function replaceOneSelection(doc, i, range, options) { var ranges = doc.sel.ranges.slice(0); ranges[i] = range; setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); } // Reset the selection to a single range. function setSimpleSelection(doc, anchor, head, options) { setSelection(doc, simpleSelection(anchor, head), options); } // Give beforeSelectionChange handlers a change to influence a // selection update. function filterSelectionChange(doc, sel, options) { var obj = { ranges: sel.ranges, update: function(ranges) { this.ranges = []; for (var i = 0; i < ranges.length; i++) this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), clipPos(doc, ranges[i].head)); }, origin: options && options.origin }; signal(doc, "beforeSelectionChange", doc, obj); if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1); else return sel; } function setSelectionReplaceHistory(doc, sel, options) { var done = doc.history.done, last = lst(done); if (last && last.ranges) { done[done.length - 1] = sel; setSelectionNoUndo(doc, sel, options); } else { setSelection(doc, sel, options); } } // Set a new selection. function setSelection(doc, sel, options) { setSelectionNoUndo(doc, sel, options); addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); } function setSelectionNoUndo(doc, sel, options) { if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) sel = filterSelectionChange(doc, sel, options); var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); if (!(options && options.scroll === false) && doc.cm) ensureCursorVisible(doc.cm); } function setSelectionInner(doc, sel) { if (sel.equals(doc.sel)) return; doc.sel = sel; if (doc.cm) { doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; signalCursorActivity(doc.cm); } signalLater(doc, "cursorActivity", doc); } // Verify that the selection does not partially select any atomic // marked ranges. function reCheckSelection(doc) { setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll); } // Return a selection that does not partially select any atomic // ranges. function skipAtomicInSelection(doc, sel, bias, mayClear) { var out; for (var i = 0; i < sel.ranges.length; i++) { var range = sel.ranges[i]; var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear); if (out || newAnchor != range.anchor || newHead != range.head) { if (!out) out = sel.ranges.slice(0, i); out[i] = new Range(newAnchor, newHead); } } return out ? normalizeSelection(out, sel.primIndex) : sel; } function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { var line = getLine(doc, pos.line); if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { var sp = line.markedSpans[i], m = sp.marker; if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) { if (mayClear) { signal(m, "beforeCursorEnter"); if (m.explicitlyCleared) { if (!line.markedSpans) break; else {--i; continue;} } } if (!m.atomic) continue; if (oldPos) { var near = m.find(dir < 0 ? 1 : -1), diff; if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft) near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) return skipAtomicInner(doc, near, pos, dir, mayClear); } var far = m.find(dir < 0 ? -1 : 1); if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight) far = movePos(doc, far, dir, far.line == pos.line ? line : null); return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null; } } return pos; } // Ensure a given position is not inside an atomic range. function skipAtomic(doc, pos, oldPos, bias, mayClear) { var dir = bias || 1; var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)); if (!found) { doc.cantEdit = true; return Pos(doc.first, 0); } return found; } function movePos(doc, pos, dir, line) { if (dir < 0 && pos.ch == 0) { if (pos.line > doc.first) return clipPos(doc, Pos(pos.line - 1)); else return null; } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { if (pos.line < doc.first + doc.size - 1) return Pos(pos.line + 1, 0); else return null; } else { return new Pos(pos.line, pos.ch + dir); } } // SELECTION DRAWING function updateSelection(cm) { cm.display.input.showSelection(cm.display.input.prepareSelection()); } function prepareSelection(cm, primary) { var doc = cm.doc, result = {}; var curFragment = result.cursors = document.createDocumentFragment(); var selFragment = result.selection = document.createDocumentFragment(); for (var i = 0; i < doc.sel.ranges.length; i++) { if (primary === false && i == doc.sel.primIndex) continue; var range = doc.sel.ranges[i]; if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) continue; var collapsed = range.empty(); if (collapsed || cm.options.showCursorWhenSelecting) drawSelectionCursor(cm, range.head, curFragment); if (!collapsed) drawSelectionRange(cm, range, selFragment); } return result; } // Draws a cursor for the given range function drawSelectionCursor(cm, head, output) { var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); cursor.style.left = pos.left + "px"; cursor.style.top = pos.top + "px"; cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; if (pos.other) { // Secondary cursor, shown when on a 'jump' in bi-directional text var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); otherCursor.style.display = ""; otherCursor.style.left = pos.other.left + "px"; otherCursor.style.top = pos.other.top + "px"; otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; } } // Draws the given range as a highlighted selection function drawSelectionRange(cm, range, output) { var display = cm.display, doc = cm.doc; var fragment = document.createDocumentFragment(); var padding = paddingH(cm.display), leftSide = padding.left; var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; function add(left, top, width, bottom) { if (top < 0) top = 0; top = Math.round(top); bottom = Math.round(bottom); fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px; height: " + (bottom - top) + "px")); } function drawForLine(line, fromArg, toArg) { var lineObj = getLine(doc, line); var lineLen = lineObj.text.length; var start, end; function coords(ch, bias) { return charCoords(cm, Pos(line, ch), "div", lineObj, bias); } iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { var leftPos = coords(from, "left"), rightPos, left, right; if (from == to) { rightPos = leftPos; left = right = leftPos.left; } else { rightPos = coords(to - 1, "right"); if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } left = leftPos.left; right = rightPos.right; } if (fromArg == null && from == 0) left = leftSide; if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part add(left, leftPos.top, null, leftPos.bottom); left = leftSide; if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); } if (toArg == null && to == lineLen) right = rightSide; if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) start = leftPos; if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) end = rightPos; if (left < leftSide + 1) left = leftSide; add(left, rightPos.top, right - left, rightPos.bottom); }); return {start: start, end: end}; } var sFrom = range.from(), sTo = range.to(); if (sFrom.line == sTo.line) { drawForLine(sFrom.line, sFrom.ch, sTo.ch); } else { var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); var singleVLine = visualLine(fromLine) == visualLine(toLine); var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; if (singleVLine) { if (leftEnd.top < rightStart.top - 2) { add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); } else { add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); } } if (leftEnd.bottom < rightStart.top) add(leftSide, leftEnd.bottom, null, rightStart.top); } output.appendChild(fragment); } // Cursor-blinking function restartBlink(cm) { if (!cm.state.focused) return; var display = cm.display; clearInterval(display.blinker); var on = true; display.cursorDiv.style.visibility = ""; if (cm.options.cursorBlinkRate > 0) display.blinker = setInterval(function() { display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; }, cm.options.cursorBlinkRate); else if (cm.options.cursorBlinkRate < 0) display.cursorDiv.style.visibility = "hidden"; } // HIGHLIGHT WORKER function startWorker(cm, time) { if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) cm.state.highlight.set(time, bind(highlightWorker, cm)); } function highlightWorker(cm) { var doc = cm.doc; if (doc.frontier < doc.first) doc.frontier = doc.first; if (doc.frontier >= cm.display.viewTo) return; var end = +new Date + cm.options.workTime; var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); var changedLines = []; doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) { if (doc.frontier >= cm.display.viewFrom) { // Visible var oldStyles = line.styles, tooLong = line.text.length > cm.options.maxHighlightLength; var highlighted = highlightLine(cm, line, tooLong ? copyState(doc.mode, state) : state, true); line.styles = highlighted.styles; var oldCls = line.styleClasses, newCls = highlighted.classes; if (newCls) line.styleClasses = newCls; else if (oldCls) line.styleClasses = null; var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; if (ischange) changedLines.push(doc.frontier); line.stateAfter = tooLong ? state : copyState(doc.mode, state); } else { if (line.text.length <= cm.options.maxHighlightLength) processLine(cm, line.text, state); line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; } ++doc.frontier; if (+new Date > end) { startWorker(cm, cm.options.workDelay); return true; } }); if (changedLines.length) runInOp(cm, function() { for (var i = 0; i < changedLines.length; i++) regLineChange(cm, changedLines[i], "text"); }); } // Finds the line to start with when starting a parse. Tries to // find a line with a stateAfter, so that it can start with a // valid state. If that fails, it returns the line with the // smallest indentation, which tends to need the least context to // parse correctly. function findStartLine(cm, n, precise) { var minindent, minline, doc = cm.doc; var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); for (var search = n; search > lim; --search) { if (search <= doc.first) return doc.first; var line = getLine(doc, search - 1); if (line.stateAfter && (!precise || search <= doc.frontier)) return search; var indented = countColumn(line.text, null, cm.options.tabSize); if (minline == null || minindent > indented) { minline = search - 1; minindent = indented; } } return minline; } function getStateBefore(cm, n, precise) { var doc = cm.doc, display = cm.display; if (!doc.mode.startState) return true; var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter; if (!state) state = startState(doc.mode); else state = copyState(doc.mode, state); doc.iter(pos, n, function(line) { processLine(cm, line.text, state); var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo; line.stateAfter = save ? copyState(doc.mode, state) : null; ++pos; }); if (precise) doc.frontier = pos; return state; } // POSITION MEASUREMENT function paddingTop(display) {return display.lineSpace.offsetTop;} function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} function paddingH(display) { if (display.cachedPaddingH) return display.cachedPaddingH; var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data; return data; } function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; } function displayWidth(cm) { return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; } function displayHeight(cm) { return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; } // Ensure the lineView.wrapping.heights array is populated. This is // an array of bottom offsets for the lines that make up a drawn // line. When lineWrapping is on, there might be more than one // height. function ensureLineHeights(cm, lineView, rect) { var wrapping = cm.options.lineWrapping; var curWidth = wrapping && displayWidth(cm); if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { var heights = lineView.measure.heights = []; if (wrapping) { lineView.measure.width = curWidth; var rects = lineView.text.firstChild.getClientRects(); for (var i = 0; i < rects.length - 1; i++) { var cur = rects[i], next = rects[i + 1]; if (Math.abs(cur.bottom - next.bottom) > 2) heights.push((cur.bottom + next.top) / 2 - rect.top); } } heights.push(rect.bottom - rect.top); } } // Find a line map (mapping character offsets to text nodes) and a // measurement cache for the given line number. (A line view might // contain multiple lines when collapsed ranges are present.) function mapFromLineView(lineView, line, lineN) { if (lineView.line == line) return {map: lineView.measure.map, cache: lineView.measure.cache}; for (var i = 0; i < lineView.rest.length; i++) if (lineView.rest[i] == line) return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]}; for (var i = 0; i < lineView.rest.length; i++) if (lineNo(lineView.rest[i]) > lineN) return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true}; } // Render a line into the hidden node display.externalMeasured. Used // when measurement is needed for a line that's not in the viewport. function updateExternalMeasurement(cm, line) { line = visualLine(line); var lineN = lineNo(line); var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); view.lineN = lineN; var built = view.built = buildLineContent(cm, view); view.text = built.pre; removeChildrenAndAdd(cm.display.lineMeasure, built.pre); return view; } // Get a {top, bottom, left, right} box (in line-local coordinates) // for a given character. function measureChar(cm, line, ch, bias) { return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); } // Find a line view that corresponds to the given line number. function findViewForLine(cm, lineN) { if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) return cm.display.view[findViewIndex(cm, lineN)]; var ext = cm.display.externalMeasured; if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) return ext; } // Measurement can be split in two steps, the set-up work that // applies to the whole line, and the measurement of the actual // character. Functions like coordsChar, that need to do a lot of // measurements in a row, can thus ensure that the set-up work is // only done once. function prepareMeasureForLine(cm, line) { var lineN = lineNo(line); var view = findViewForLine(cm, lineN); if (view && !view.text) { view = null; } else if (view && view.changes) { updateLineForChanges(cm, view, lineN, getDimensions(cm)); cm.curOp.forceUpdate = true; } if (!view) view = updateExternalMeasurement(cm, line); var info = mapFromLineView(view, line, lineN); return { line: line, view: view, rect: null, map: info.map, cache: info.cache, before: info.before, hasHeights: false }; } // Given a prepared measurement object, measures the position of an // actual character (or fetches it from the cache). function measureCharPrepared(cm, prepared, ch, bias, varHeight) { if (prepared.before) ch = -1; var key = ch + (bias || ""), found; if (prepared.cache.hasOwnProperty(key)) { found = prepared.cache[key]; } else { if (!prepared.rect) prepared.rect = prepared.view.text.getBoundingClientRect(); if (!prepared.hasHeights) { ensureLineHeights(cm, prepared.view, prepared.rect); prepared.hasHeights = true; } found = measureCharInner(cm, prepared, ch, bias); if (!found.bogus) prepared.cache[key] = found; } return {left: found.left, right: found.right, top: varHeight ? found.rtop : found.top, bottom: varHeight ? found.rbottom : found.bottom}; } var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; function nodeAndOffsetInLineMap(map, ch, bias) { var node, start, end, collapse; // First, search the line map for the text node corresponding to, // or closest to, the target character. for (var i = 0; i < map.length; i += 3) { var mStart = map[i], mEnd = map[i + 1]; if (ch < mStart) { start = 0; end = 1; collapse = "left"; } else if (ch < mEnd) { start = ch - mStart; end = start + 1; } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { end = mEnd - mStart; start = end - 1; if (ch >= mEnd) collapse = "right"; } if (start != null) { node = map[i + 2]; if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) collapse = bias; if (bias == "left" && start == 0) while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { node = map[(i -= 3) + 2]; collapse = "left"; } if (bias == "right" && start == mEnd - mStart) while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { node = map[(i += 3) + 2]; collapse = "right"; } break; } } return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}; } function getUsefulRect(rects, bias) { var rect = nullRect if (bias == "left") for (var i = 0; i < rects.length; i++) { if ((rect = rects[i]).left != rect.right) break } else for (var i = rects.length - 1; i >= 0; i--) { if ((rect = rects[i]).left != rect.right) break } return rect } function measureCharInner(cm, prepared, ch, bias) { var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); var node = place.node, start = place.start, end = place.end, collapse = place.collapse; var rect; if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start; while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end; if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) rect = node.parentNode.getBoundingClientRect(); else rect = getUsefulRect(range(node, start, end).getClientRects(), bias) if (rect.left || rect.right || start == 0) break; end = start; start = start - 1; collapse = "right"; } if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect); } else { // If it is a widget, simply get the box for the whole widget. if (start > 0) collapse = bias = "right"; var rects; if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) rect = rects[bias == "right" ? rects.length - 1 : 0]; else rect = node.getBoundingClientRect(); } if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { var rSpan = node.parentNode.getClientRects()[0]; if (rSpan) rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; else rect = nullRect; } var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; var mid = (rtop + rbot) / 2; var heights = prepared.view.measure.heights; for (var i = 0; i < heights.length - 1; i++) if (mid < heights[i]) break; var top = i ? heights[i - 1] : 0, bot = heights[i]; var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, top: top, bottom: bot}; if (!rect.left && !rect.right) result.bogus = true; if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } return result; } // Work around problem with bounding client rects on ranges being // returned incorrectly when zoomed on IE10 and below. function maybeUpdateRectForZooming(measure, rect) { if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) return rect; var scaleX = screen.logicalXDPI / screen.deviceXDPI; var scaleY = screen.logicalYDPI / screen.deviceYDPI; return {left: rect.left * scaleX, right: rect.right * scaleX, top: rect.top * scaleY, bottom: rect.bottom * scaleY}; } function clearLineMeasurementCacheFor(lineView) { if (lineView.measure) { lineView.measure.cache = {}; lineView.measure.heights = null; if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) lineView.measure.caches[i] = {}; } } function clearLineMeasurementCache(cm) { cm.display.externalMeasure = null; removeChildren(cm.display.lineMeasure); for (var i = 0; i < cm.display.view.length; i++) clearLineMeasurementCacheFor(cm.display.view[i]); } function clearCaches(cm) { clearLineMeasurementCache(cm); cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; cm.display.lineNumChars = null; } function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; } function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; } // Converts a {top, bottom, left, right} box from line-local // coordinates into another coordinate system. Context may be one of // "line", "div" (display.lineDiv), "local"/null (editor), "window", // or "page". function intoCoordSystem(cm, lineObj, rect, context) { if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { var size = widgetHeight(lineObj.widgets[i]); rect.top += size; rect.bottom += size; } if (context == "line") return rect; if (!context) context = "local"; var yOff = heightAtLine(lineObj); if (context == "local") yOff += paddingTop(cm.display); else yOff -= cm.display.viewOffset; if (context == "page" || context == "window") { var lOff = cm.display.lineSpace.getBoundingClientRect(); yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); rect.left += xOff; rect.right += xOff; } rect.top += yOff; rect.bottom += yOff; return rect; } // Coverts a box from "div" coords to another coordinate system. // Context may be "window", "page", "div", or "local"/null. function fromCoordSystem(cm, coords, context) { if (context == "div") return coords; var left = coords.left, top = coords.top; // First move into "page" coordinate system if (context == "page") { left -= pageScrollX(); top -= pageScrollY(); } else if (context == "local" || !context) { var localBox = cm.display.sizer.getBoundingClientRect(); left += localBox.left; top += localBox.top; } var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}; } function charCoords(cm, pos, context, lineObj, bias) { if (!lineObj) lineObj = getLine(cm.doc, pos.line); return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); } // Returns a box for a given cursor position, which may have an // 'other' property containing the position of the secondary cursor // on a bidi boundary. function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { lineObj = lineObj || getLine(cm.doc, pos.line); if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); function get(ch, right) { var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); if (right) m.left = m.right; else m.right = m.left; return intoCoordSystem(cm, lineObj, m, context); } function getBidi(ch, partPos) { var part = order[partPos], right = part.level % 2; if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { part = order[--partPos]; ch = bidiRight(part) - (part.level % 2 ? 0 : 1); right = true; } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { part = order[++partPos]; ch = bidiLeft(part) - part.level % 2; right = false; } if (right && ch == part.to && ch > part.from) return get(ch - 1); return get(ch, right); } var order = getOrder(lineObj), ch = pos.ch; if (!order) return get(ch); var partPos = getBidiPartAt(order, ch); var val = getBidi(ch, partPos); if (bidiOther != null) val.other = getBidi(ch, bidiOther); return val; } // Used to cheaply estimate the coordinates for a position. Used for // intermediate scroll updates. function estimateCoords(cm, pos) { var left = 0, pos = clipPos(cm.doc, pos); if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch; var lineObj = getLine(cm.doc, pos.line); var top = heightAtLine(lineObj) + paddingTop(cm.display); return {left: left, right: left, top: top, bottom: top + lineObj.height}; } // Positions returned by coordsChar contain some extra information. // xRel is the relative x position of the input coordinates compared // to the found position (so xRel > 0 means the coordinates are to // the right of the character position, for example). When outside // is true, that means the coordinates lie outside the line's // vertical range. function PosWithInfo(line, ch, outside, xRel) { var pos = Pos(line, ch); pos.xRel = xRel; if (outside) pos.outside = true; return pos; } // Compute the character position closest to the given coordinates. // Input must be lineSpace-local ("div" coordinate system). function coordsChar(cm, x, y) { var doc = cm.doc; y += cm.display.viewOffset; if (y < 0) return PosWithInfo(doc.first, 0, true, -1); var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; if (lineN > last) return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1); if (x < 0) x = 0; var lineObj = getLine(doc, lineN); for (;;) { var found = coordsCharInner(cm, lineObj, lineN, x, y); var merged = collapsedSpanAtEnd(lineObj); var mergedPos = merged && merged.find(0, true); if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) lineN = lineNo(lineObj = mergedPos.to.line); else return found; } } function coordsCharInner(cm, lineObj, lineNo, x, y) { var innerOff = y - heightAtLine(lineObj); var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; var preparedMeasure = prepareMeasureForLine(cm, lineObj); function getX(ch) { var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure); wrongLine = true; if (innerOff > sp.bottom) return sp.left - adjust; else if (innerOff < sp.top) return sp.left + adjust; else wrongLine = false; return sp.left; } var bidi = getOrder(lineObj), dist = lineObj.text.length; var from = lineLeft(lineObj), to = lineRight(lineObj); var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1); // Do a binary search between these bounds. for (;;) { if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { var ch = x < fromX || x - fromX <= toX - x ? from : to; var outside = ch == from ? fromOutside : toOutside var xDiff = x - (ch == from ? fromX : toX); // This is a kludge to handle the case where the coordinates // are after a line-wrapped line. We should replace it with a // more general handling of cursor positions around line // breaks. (Issue #4078) if (toOutside && !bidi && !/\s/.test(lineObj.text.charAt(ch)) && xDiff > 0 && ch < lineObj.text.length && preparedMeasure.view.measure.heights.length > 1) { var charSize = measureCharPrepared(cm, preparedMeasure, ch, "right"); if (innerOff <= charSize.bottom && innerOff >= charSize.top && Math.abs(x - charSize.right) < xDiff) { outside = false ch++ xDiff = x - charSize.right } } while (isExtendingChar(lineObj.text.charAt(ch))) ++ch; var pos = PosWithInfo(lineNo, ch, outside, xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0); return pos; } var step = Math.ceil(dist / 2), middle = from + step; if (bidi) { middle = from; for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); } var middleX = getX(middle); if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} } } var measureText; // Compute the default text height. function textHeight(display) { if (display.cachedTextHeight != null) return display.cachedTextHeight; if (measureText == null) { measureText = elt("pre"); // Measure a bunch of lines, for browsers that compute // fractional heights. for (var i = 0; i < 49; ++i) { measureText.appendChild(document.createTextNode("x")); measureText.appendChild(elt("br")); } measureText.appendChild(document.createTextNode("x")); } removeChildrenAndAdd(display.measure, measureText); var height = measureText.offsetHeight / 50; if (height > 3) display.cachedTextHeight = height; removeChildren(display.measure); return height || 1; } // Compute the default character width. function charWidth(display) { if (display.cachedCharWidth != null) return display.cachedCharWidth; var anchor = elt("span", "xxxxxxxxxx"); var pre = elt("pre", [anchor]); removeChildrenAndAdd(display.measure, pre); var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; if (width > 2) display.cachedCharWidth = width; return width || 10; } // OPERATIONS // Operations are used to wrap a series of changes to the editor // state in such a way that each change won't have to update the // cursor and display (which would be awkward, slow, and // error-prone). Instead, display updates are batched and then all // combined and executed at once. var operationGroup = null; var nextOpId = 0; // Start a new operation. function startOperation(cm) { cm.curOp = { cm: cm, viewChanged: false, // Flag that indicates that lines might need to be redrawn startHeight: cm.doc.height, // Used to detect need to update scrollbar forceUpdate: false, // Used to force a redraw updateInput: null, // Whether to reset the input textarea typing: false, // Whether this reset should be careful to leave existing text (for compositing) changeObjs: null, // Accumulated changes, for firing change events cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already selectionChanged: false, // Whether the selection needs to be redrawn updateMaxLine: false, // Set when the widest line needs to be determined anew scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet scrollToPos: null, // Used to scroll to a specific position focus: false, id: ++nextOpId // Unique ID }; if (operationGroup) { operationGroup.ops.push(cm.curOp); } else { cm.curOp.ownsGroup = operationGroup = { ops: [cm.curOp], delayedCallbacks: [] }; } } function fireCallbacksForOps(group) { // Calls delayed callbacks and cursorActivity handlers until no // new ones appear var callbacks = group.delayedCallbacks, i = 0; do { for (; i < callbacks.length; i++) callbacks[i].call(null); for (var j = 0; j < group.ops.length; j++) { var op = group.ops[j]; if (op.cursorActivityHandlers) while (op.cursorActivityCalled < op.cursorActivityHandlers.length) op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } } while (i < callbacks.length); } // Finish an operation, updating the display and signalling delayed events function endOperation(cm) { var op = cm.curOp, group = op.ownsGroup; if (!group) return; try { fireCallbacksForOps(group); } finally { operationGroup = null; for (var i = 0; i < group.ops.length; i++) group.ops[i].cm.curOp = null; endOperations(group); } } // The DOM updates done when an operation finishes are batched so // that the minimum number of relayouts are required. function endOperations(group) { var ops = group.ops; for (var i = 0; i < ops.length; i++) // Read DOM endOperation_R1(ops[i]); for (var i = 0; i < ops.length; i++) // Write DOM (maybe) endOperation_W1(ops[i]); for (var i = 0; i < ops.length; i++) // Read DOM endOperation_R2(ops[i]); for (var i = 0; i < ops.length; i++) // Write DOM (maybe) endOperation_W2(ops[i]); for (var i = 0; i < ops.length; i++) // Read DOM endOperation_finish(ops[i]); } function endOperation_R1(op) { var cm = op.cm, display = cm.display; maybeClipScrollbars(cm); if (op.updateMaxLine) findMaxLine(cm); op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping; op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); } function endOperation_W1(op) { op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); } function endOperation_R2(op) { var cm = op.cm, display = cm.display; if (op.updatedDisplay) updateHeightsInViewport(cm); op.barMeasure = measureForScrollbars(cm); // If the max line changed since it was last measured, measure it, // and ensure the document's width matches it. // updateDisplay_W2 will use these properties to do the actual resizing if (display.maxLineChanged && !cm.options.lineWrapping) { op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; cm.display.sizerWidth = op.adjustWidthTo; op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); } if (op.updatedDisplay || op.selectionChanged) op.preparedSelection = display.input.prepareSelection(op.focus); } function endOperation_W2(op) { var cm = op.cm; if (op.adjustWidthTo != null) { cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; if (op.maxScrollLeft < cm.doc.scrollLeft) setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); cm.display.maxLineChanged = false; } var takeFocus = op.focus && op.focus == activeElt() && (!document.hasFocus || document.hasFocus()) if (op.preparedSelection) cm.display.input.showSelection(op.preparedSelection, takeFocus); if (op.updatedDisplay || op.startHeight != cm.doc.height) updateScrollbars(cm, op.barMeasure); if (op.updatedDisplay) setDocumentHeight(cm, op.barMeasure); if (op.selectionChanged) restartBlink(cm); if (cm.state.focused && op.updateInput) cm.display.input.reset(op.typing); if (takeFocus) ensureFocus(op.cm); } function endOperation_finish(op) { var cm = op.cm, display = cm.display, doc = cm.doc; if (op.updatedDisplay) postUpdateDisplay(cm, op.update); // Abort mouse wheel delta measurement, when scrolling explicitly if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) display.wheelStartX = display.wheelStartY = null; // Propagate the scroll position to the actual DOM scroller if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)); display.scrollbars.setScrollTop(doc.scrollTop); display.scroller.scrollTop = doc.scrollTop; } if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft)); display.scrollbars.setScrollLeft(doc.scrollLeft); display.scroller.scrollLeft = doc.scrollLeft; alignHorizontally(cm); } // If we need to scroll a specific position into view, do so. if (op.scrollToPos) { var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords); } // Fire events for markers that are hidden/unidden by editing or // undoing var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; if (hidden) for (var i = 0; i < hidden.length; ++i) if (!hidden[i].lines.length) signal(hidden[i], "hide"); if (unhidden) for (var i = 0; i < unhidden.length; ++i) if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); if (display.wrapper.offsetHeight) doc.scrollTop = cm.display.scroller.scrollTop; // Fire change events, and delayed event handlers if (op.changeObjs) signal(cm, "changes", cm, op.changeObjs); if (op.update) op.update.finish(); } // Run the given function in an operation function runInOp(cm, f) { if (cm.curOp) return f(); startOperation(cm); try { return f(); } finally { endOperation(cm); } } // Wraps a function in an operation. Returns the wrapped function. function operation(cm, f) { return function() { if (cm.curOp) return f.apply(cm, arguments); startOperation(cm); try { return f.apply(cm, arguments); } finally { endOperation(cm); } }; } // Used to add methods to editor and doc instances, wrapping them in // operations. function methodOp(f) { return function() { if (this.curOp) return f.apply(this, arguments); startOperation(this); try { return f.apply(this, arguments); } finally { endOperation(this); } }; } function docMethodOp(f) { return function() { var cm = this.cm; if (!cm || cm.curOp) return f.apply(this, arguments); startOperation(cm); try { return f.apply(this, arguments); } finally { endOperation(cm); } }; } // VIEW TRACKING // These objects are used to represent the visible (currently drawn) // part of the document. A LineView may correspond to multiple // logical lines, if those are connected by collapsed ranges. function LineView(doc, line, lineN) { // The starting line this.line = line; // Continuing lines, if any this.rest = visualLineContinued(line); // Number of logical lines in this visual line this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; this.node = this.text = null; this.hidden = lineIsHidden(doc, line); } // Create a range of LineView objects for the given lines. function buildViewArray(cm, from, to) { var array = [], nextPos; for (var pos = from; pos < to; pos = nextPos) { var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); nextPos = pos + view.size; array.push(view); } return array; } // Updates the display.view data structure for a given change to the // document. From and to are in pre-change coordinates. Lendiff is // the amount of lines added or subtracted by the change. This is // used for changes that span multiple lines, or change the way // lines are divided into visual lines. regLineChange (below) // registers single-line changes. function regChange(cm, from, to, lendiff) { if (from == null) from = cm.doc.first; if (to == null) to = cm.doc.first + cm.doc.size; if (!lendiff) lendiff = 0; var display = cm.display; if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) display.updateLineNumbers = from; cm.curOp.viewChanged = true; if (from >= display.viewTo) { // Change after if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) resetView(cm); } else if (to <= display.viewFrom) { // Change before if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { resetView(cm); } else { display.viewFrom += lendiff; display.viewTo += lendiff; } } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap resetView(cm); } else if (from <= display.viewFrom) { // Top overlap var cut = viewCuttingPoint(cm, to, to + lendiff, 1); if (cut) { display.view = display.view.slice(cut.index); display.viewFrom = cut.lineN; display.viewTo += lendiff; } else { resetView(cm); } } else if (to >= display.viewTo) { // Bottom overlap var cut = viewCuttingPoint(cm, from, from, -1); if (cut) { display.view = display.view.slice(0, cut.index); display.viewTo = cut.lineN; } else { resetView(cm); } } else { // Gap in the middle var cutTop = viewCuttingPoint(cm, from, from, -1); var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); if (cutTop && cutBot) { display.view = display.view.slice(0, cutTop.index) .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) .concat(display.view.slice(cutBot.index)); display.viewTo += lendiff; } else { resetView(cm); } } var ext = display.externalMeasured; if (ext) { if (to < ext.lineN) ext.lineN += lendiff; else if (from < ext.lineN + ext.size) display.externalMeasured = null; } } // Register a change to a single line. Type must be one of "text", // "gutter", "class", "widget" function regLineChange(cm, line, type) { cm.curOp.viewChanged = true; var display = cm.display, ext = cm.display.externalMeasured; if (ext && line >= ext.lineN && line < ext.lineN + ext.size) display.externalMeasured = null; if (line < display.viewFrom || line >= display.viewTo) return; var lineView = display.view[findViewIndex(cm, line)]; if (lineView.node == null) return; var arr = lineView.changes || (lineView.changes = []); if (indexOf(arr, type) == -1) arr.push(type); } // Clear the view. function resetView(cm) { cm.display.viewFrom = cm.display.viewTo = cm.doc.first; cm.display.view = []; cm.display.viewOffset = 0; } // Find the view element corresponding to a given line. Return null // when the line isn't visible. function findViewIndex(cm, n) { if (n >= cm.display.viewTo) return null; n -= cm.display.viewFrom; if (n < 0) return null; var view = cm.display.view; for (var i = 0; i < view.length; i++) { n -= view[i].size; if (n < 0) return i; } } function viewCuttingPoint(cm, oldN, newN, dir) { var index = findViewIndex(cm, oldN), diff, view = cm.display.view; if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) return {index: index, lineN: newN}; for (var i = 0, n = cm.display.viewFrom; i < index; i++) n += view[i].size; if (n != oldN) { if (dir > 0) { if (index == view.length - 1) return null; diff = (n + view[index].size) - oldN; index++; } else { diff = n - oldN; } oldN += diff; newN += diff; } while (visualLineNo(cm.doc, newN) != newN) { if (index == (dir < 0 ? 0 : view.length - 1)) return null; newN += dir * view[index - (dir < 0 ? 1 : 0)].size; index += dir; } return {index: index, lineN: newN}; } // Force the view to cover a given range, adding empty view element // or clipping off existing ones as needed. function adjustView(cm, from, to) { var display = cm.display, view = display.view; if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { display.view = buildViewArray(cm, from, to); display.viewFrom = from; } else { if (display.viewFrom > from) display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); else if (display.viewFrom < from) display.view = display.view.slice(findViewIndex(cm, from)); display.viewFrom = from; if (display.viewTo < to) display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); else if (display.viewTo > to) display.view = display.view.slice(0, findViewIndex(cm, to)); } display.viewTo = to; } // Count the number of lines in the view whose DOM representation is // out of date (or nonexistent). function countDirtyView(cm) { var view = cm.display.view, dirty = 0; for (var i = 0; i < view.length; i++) { var lineView = view[i]; if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty; } return dirty; } // EVENT HANDLERS // Attach the necessary event handlers when initializing the editor function registerEventHandlers(cm) { var d = cm.display; on(d.scroller, "mousedown", operation(cm, onMouseDown)); // Older IE's will not fire a second mousedown for a double click if (ie && ie_version < 11) on(d.scroller, "dblclick", operation(cm, function(e) { if (signalDOMEvent(cm, e)) return; var pos = posFromMouse(cm, e); if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; e_preventDefault(e); var word = cm.findWordAt(pos); extendSelection(cm.doc, word.anchor, word.head); })); else on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); }); // Some browsers fire contextmenu *after* opening the menu, at // which point we can't mess with it anymore. Context menu is // handled in onMouseDown for these browsers. if (!captureRightClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); // Used to suppress mouse event handling when a touch happens var touchFinished, prevTouch = {end: 0}; function finishTouch() { if (d.activeTouch) { touchFinished = setTimeout(function() {d.activeTouch = null;}, 1000); prevTouch = d.activeTouch; prevTouch.end = +new Date; } }; function isMouseLikeTouchEvent(e) { if (e.touches.length != 1) return false; var touch = e.touches[0]; return touch.radiusX <= 1 && touch.radiusY <= 1; } function farAway(touch, other) { if (other.left == null) return true; var dx = other.left - touch.left, dy = other.top - touch.top; return dx * dx + dy * dy > 20 * 20; } on(d.scroller, "touchstart", function(e) { if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e)) { clearTimeout(touchFinished); var now = +new Date; d.activeTouch = {start: now, moved: false, prev: now - prevTouch.end <= 300 ? prevTouch : null}; if (e.touches.length == 1) { d.activeTouch.left = e.touches[0].pageX; d.activeTouch.top = e.touches[0].pageY; } } }); on(d.scroller, "touchmove", function() { if (d.activeTouch) d.activeTouch.moved = true; }); on(d.scroller, "touchend", function(e) { var touch = d.activeTouch; if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date - touch.start < 300) { var pos = cm.coordsChar(d.activeTouch, "page"), range; if (!touch.prev || farAway(touch, touch.prev)) // Single tap range = new Range(pos, pos); else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap range = cm.findWordAt(pos); else // Triple tap range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); cm.setSelection(range.anchor, range.head); cm.focus(); e_preventDefault(e); } finishTouch(); }); on(d.scroller, "touchcancel", finishTouch); // Sync scrolling between fake scrollbars and real scrollable // area, ensure viewport is updated when scrolling. on(d.scroller, "scroll", function() { if (d.scroller.clientHeight) { setScrollTop(cm, d.scroller.scrollTop); setScrollLeft(cm, d.scroller.scrollLeft, true); signal(cm, "scroll", cm); } }); // Listen to wheel events in order to try and update the viewport on time. on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); // Prevent wrapper from ever scrolling on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); d.dragFunctions = { enter: function(e) {if (!signalDOMEvent(cm, e)) e_stop(e);}, over: function(e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }}, start: function(e){onDragStart(cm, e);}, drop: operation(cm, onDrop), leave: function(e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }} }; var inp = d.input.getField(); on(inp, "keyup", function(e) { onKeyUp.call(cm, e); }); on(inp, "keydown", operation(cm, onKeyDown)); on(inp, "keypress", operation(cm, onKeyPress)); on(inp, "focus", bind(onFocus, cm)); on(inp, "blur", bind(onBlur, cm)); } function dragDropChanged(cm, value, old) { var wasOn = old && old != CodeMirror.Init; if (!value != !wasOn) { var funcs = cm.display.dragFunctions; var toggle = value ? on : off; toggle(cm.display.scroller, "dragstart", funcs.start); toggle(cm.display.scroller, "dragenter", funcs.enter); toggle(cm.display.scroller, "dragover", funcs.over); toggle(cm.display.scroller, "dragleave", funcs.leave); toggle(cm.display.scroller, "drop", funcs.drop); } } // Called when the window resizes function onResize(cm) { var d = cm.display; if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) return; // Might be a text scaling operation, clear size caches. d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; d.scrollbarsClipped = false; cm.setSize(); } // MOUSE EVENTS // Return true when the given mouse event happened in a widget function eventInWidget(display, e) { for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || (n.parentNode == display.sizer && n != display.mover)) return true; } } // Given a mouse event, find the corresponding position. If liberal // is false, it checks whether a gutter or scrollbar was clicked, // and returns null if it was. forRect is used by rectangular // selections, and tries to estimate a character position even for // coordinates beyond the right of the text. function posFromMouse(cm, e, liberal, forRect) { var display = cm.display; if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") return null; var x, y, space = display.lineSpace.getBoundingClientRect(); // Fails unpredictably on IE[67] when mouse is dragged around quickly. try { x = e.clientX - space.left; y = e.clientY - space.top; } catch (e) { return null; } var coords = coordsChar(cm, x, y), line; if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); } return coords; } // A mouse down can be a single click, double click, triple click, // start of selection drag, start of text drag, new cursor // (ctrl-click), rectangle drag (alt-drag), or xwin // middle-click-paste. Or it might be a click on something we should // not interfere with, such as a scrollbar or widget. function onMouseDown(e) { var cm = this, display = cm.display; if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) return; display.shift = e.shiftKey; if (eventInWidget(display, e)) { if (!webkit) { // Briefly turn off draggability, to allow widgets to do // normal dragging things. display.scroller.draggable = false; setTimeout(function(){display.scroller.draggable = true;}, 100); } return; } if (clickInGutter(cm, e)) return; var start = posFromMouse(cm, e); window.focus(); switch (e_button(e)) { case 1: // #3261: make sure, that we're not starting a second selection if (cm.state.selectingText) cm.state.selectingText(e); else if (start) leftButtonDown(cm, e, start); else if (e_target(e) == display.scroller) e_preventDefault(e); break; case 2: if (webkit) cm.state.lastMiddleDown = +new Date; if (start) extendSelection(cm.doc, start); setTimeout(function() {display.input.focus();}, 20); e_preventDefault(e); break; case 3: if (captureRightClick) onContextMenu(cm, e); else delayBlurEvent(cm); break; } } var lastClick, lastDoubleClick; function leftButtonDown(cm, e, start) { if (ie) setTimeout(bind(ensureFocus, cm), 0); else cm.curOp.focus = activeElt(); var now = +new Date, type; if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { type = "triple"; } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { type = "double"; lastDoubleClick = {time: now, pos: start}; } else { type = "single"; lastClick = {time: now, pos: start}; } var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained; if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && type == "single" && (contained = sel.contains(start)) > -1 && (cmp((contained = sel.ranges[contained]).from(), start) < 0 || start.xRel > 0) && (cmp(contained.to(), start) > 0 || start.xRel < 0)) leftButtonStartDrag(cm, e, start, modifier); else leftButtonSelect(cm, e, start, type, modifier); } // Start a text drag. When it ends, see if any dragging actually // happen, and treat as a click if it didn't. function leftButtonStartDrag(cm, e, start, modifier) { var display = cm.display, startTime = +new Date; var dragEnd = operation(cm, function(e2) { if (webkit) display.scroller.draggable = false; cm.state.draggingText = false; off(document, "mouseup", dragEnd); off(display.scroller, "drop", dragEnd); if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { e_preventDefault(e2); if (!modifier && +new Date - 200 < startTime) extendSelection(cm.doc, start); // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) if (webkit || ie && ie_version == 9) setTimeout(function() {document.body.focus(); display.input.focus();}, 20); else display.input.focus(); } }); // Let the drag handler handle this. if (webkit) display.scroller.draggable = true; cm.state.draggingText = dragEnd; dragEnd.copy = mac ? e.altKey : e.ctrlKey // IE's approach to draggable if (display.scroller.dragDrop) display.scroller.dragDrop(); on(document, "mouseup", dragEnd); on(display.scroller, "drop", dragEnd); } // Normal selection, as opposed to text dragging. function leftButtonSelect(cm, e, start, type, addNew) { var display = cm.display, doc = cm.doc; e_preventDefault(e); var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; if (addNew && !e.shiftKey) { ourIndex = doc.sel.contains(start); if (ourIndex > -1) ourRange = ranges[ourIndex]; else ourRange = new Range(start, start); } else { ourRange = doc.sel.primary(); ourIndex = doc.sel.primIndex; } if (chromeOS ? e.shiftKey && e.metaKey : e.altKey) { type = "rect"; if (!addNew) ourRange = new Range(start, start); start = posFromMouse(cm, e, true, true); ourIndex = -1; } else if (type == "double") { var word = cm.findWordAt(start); if (cm.display.shift || doc.extend) ourRange = extendRange(doc, ourRange, word.anchor, word.head); else ourRange = word; } else if (type == "triple") { var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))); if (cm.display.shift || doc.extend) ourRange = extendRange(doc, ourRange, line.anchor, line.head); else ourRange = line; } else { ourRange = extendRange(doc, ourRange, start); } if (!addNew) { ourIndex = 0; setSelection(doc, new Selection([ourRange], 0), sel_mouse); startSel = doc.sel; } else if (ourIndex == -1) { ourIndex = ranges.length; setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), {scroll: false, origin: "*mouse"}); } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) { setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), {scroll: false, origin: "*mouse"}); startSel = doc.sel; } else { replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); } var lastPos = start; function extendTo(pos) { if (cmp(lastPos, pos) == 0) return; lastPos = pos; if (type == "rect") { var ranges = [], tabSize = cm.options.tabSize; var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) { var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); if (left == right) ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); else if (text.length > leftPos) ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); } if (!ranges.length) ranges.push(new Range(start, start)); setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), {origin: "*mouse", scroll: false}); cm.scrollIntoView(pos); } else { var oldRange = ourRange; var anchor = oldRange.anchor, head = pos; if (type != "single") { if (type == "double") var range = cm.findWordAt(pos); else var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))); if (cmp(range.anchor, anchor) > 0) { head = range.head; anchor = minPos(oldRange.from(), range.anchor); } else { head = range.anchor; anchor = maxPos(oldRange.to(), range.head); } } var ranges = startSel.ranges.slice(0); ranges[ourIndex] = new Range(clipPos(doc, anchor), head); setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse); } } var editorSize = display.wrapper.getBoundingClientRect(); // Used to ensure timeout re-tries don't fire when another extend // happened in the meantime (clearTimeout isn't reliable -- at // least on Chrome, the timeouts still happen even when cleared, // if the clear happens after their scheduled firing time). var counter = 0; function extend(e) { var curCount = ++counter; var cur = posFromMouse(cm, e, true, type == "rect"); if (!cur) return; if (cmp(cur, lastPos) != 0) { cm.curOp.focus = activeElt(); extendTo(cur); var visible = visibleLines(display, doc); if (cur.line >= visible.to || cur.line < visible.from) setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); } else { var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; if (outside) setTimeout(operation(cm, function() { if (counter != curCount) return; display.scroller.scrollTop += outside; extend(e); }), 50); } } function done(e) { cm.state.selectingText = false; counter = Infinity; e_preventDefault(e); display.input.focus(); off(document, "mousemove", move); off(document, "mouseup", up); doc.history.lastSelOrigin = null; } var move = operation(cm, function(e) { if (!e_button(e)) done(e); else extend(e); }); var up = operation(cm, done); cm.state.selectingText = up; on(document, "mousemove", move); on(document, "mouseup", up); } // Determines whether an event happened in the gutter, and fires the // handlers for the corresponding event. function gutterEvent(cm, e, type, prevent) { try { var mX = e.clientX, mY = e.clientY; } catch(e) { return false; } if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false; if (prevent) e_preventDefault(e); var display = cm.display; var lineBox = display.lineDiv.getBoundingClientRect(); if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e); mY -= lineBox.top - display.viewOffset; for (var i = 0; i < cm.options.gutters.length; ++i) { var g = display.gutters.childNodes[i]; if (g && g.getBoundingClientRect().right >= mX) { var line = lineAtHeight(cm.doc, mY); var gutter = cm.options.gutters[i]; signal(cm, type, cm, line, gutter, e); return e_defaultPrevented(e); } } } function clickInGutter(cm, e) { return gutterEvent(cm, e, "gutterClick", true); } // Kludge to work around strange IE behavior where it'll sometimes // re-fire a series of drag-related events right after the drop (#1551) var lastDrop = 0; function onDrop(e) { var cm = this; clearDragCursor(cm); if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; e_preventDefault(e); if (ie) lastDrop = +new Date; var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; if (!pos || cm.isReadOnly()) return; // Might be a file drop, in which case we simply extract the text // and insert it. if (files && files.length && window.FileReader && window.File) { var n = files.length, text = Array(n), read = 0; var loadFile = function(file, i) { if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) return; var reader = new FileReader; reader.onload = operation(cm, function() { var content = reader.result; if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) content = ""; text[i] = content; if (++read == n) { pos = clipPos(cm.doc, pos); var change = {from: pos, to: pos, text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())), origin: "paste"}; makeChange(cm.doc, change); setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); } }); reader.readAsText(file); }; for (var i = 0; i < n; ++i) loadFile(files[i], i); } else { // Normal drop // Don't do a replace if the drop happened inside of the selected text. if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { cm.state.draggingText(e); // Ensure the editor is re-focused setTimeout(function() {cm.display.input.focus();}, 20); return; } try { var text = e.dataTransfer.getData("Text"); if (text) { if (cm.state.draggingText && !cm.state.draggingText.copy) var selected = cm.listSelections(); setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); if (selected) for (var i = 0; i < selected.length; ++i) replaceRange(cm.doc, "", selected[i].anchor, selected[i].head, "drag"); cm.replaceSelection(text, "around", "paste"); cm.display.input.focus(); } } catch(e){} } } function onDragStart(cm, e) { if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; } if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; e.dataTransfer.setData("Text", cm.getSelection()); e.dataTransfer.effectAllowed = "copyMove" // Use dummy image instead of default browsers image. // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. if (e.dataTransfer.setDragImage && !safari) { var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; if (presto) { img.width = img.height = 1; cm.display.wrapper.appendChild(img); // Force a relayout, or Opera won't use our image for some obscure reason img._top = img.offsetTop; } e.dataTransfer.setDragImage(img, 0, 0); if (presto) img.parentNode.removeChild(img); } } function onDragOver(cm, e) { var pos = posFromMouse(cm, e); if (!pos) return; var frag = document.createDocumentFragment(); drawSelectionCursor(cm, pos, frag); if (!cm.display.dragCursor) { cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); } removeChildrenAndAdd(cm.display.dragCursor, frag); } function clearDragCursor(cm) { if (cm.display.dragCursor) { cm.display.lineSpace.removeChild(cm.display.dragCursor); cm.display.dragCursor = null; } } // SCROLL EVENTS // Sync the scrollable area and scrollbars, ensure the viewport // covers the visible area. function setScrollTop(cm, val) { if (Math.abs(cm.doc.scrollTop - val) < 2) return; cm.doc.scrollTop = val; if (!gecko) updateDisplaySimple(cm, {top: val}); if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; cm.display.scrollbars.setScrollTop(val); if (gecko) updateDisplaySimple(cm); startWorker(cm, 100); } // Sync scroller and scrollbar, ensure the gutter elements are // aligned. function setScrollLeft(cm, val, isScroller) { if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); cm.doc.scrollLeft = val; alignHorizontally(cm); if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; cm.display.scrollbars.setScrollLeft(val); } // Since the delta values reported on mouse wheel events are // unstandardized between browsers and even browser versions, and // generally horribly unpredictable, this code starts by measuring // the scroll effect that the first few mouse wheel events have, // and, from that, detects the way it can convert deltas to pixel // offsets afterwards. // // The reason we want to know the amount a wheel event will scroll // is that it gives us a chance to update the display before the // actual scrolling happens, reducing flickering. var wheelSamples = 0, wheelPixelsPerUnit = null; // Fill in a browser-detected starting value on browsers where we // know one. These don't have to be accurate -- the result of them // being wrong would just be a slight flicker on the first wheel // scroll (if it is large enough). if (ie) wheelPixelsPerUnit = -.53; else if (gecko) wheelPixelsPerUnit = 15; else if (chrome) wheelPixelsPerUnit = -.7; else if (safari) wheelPixelsPerUnit = -1/3; var wheelEventDelta = function(e) { var dx = e.wheelDeltaX, dy = e.wheelDeltaY; if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; else if (dy == null) dy = e.wheelDelta; return {x: dx, y: dy}; }; CodeMirror.wheelEventPixels = function(e) { var delta = wheelEventDelta(e); delta.x *= wheelPixelsPerUnit; delta.y *= wheelPixelsPerUnit; return delta; }; function onScrollWheel(cm, e) { var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; var display = cm.display, scroll = display.scroller; // Quit if there's nothing to scroll here var canScrollX = scroll.scrollWidth > scroll.clientWidth; var canScrollY = scroll.scrollHeight > scroll.clientHeight; if (!(dx && canScrollX || dy && canScrollY)) return; // Webkit browsers on OS X abort momentum scrolls when the target // of the scroll event is removed from the scrollable element. // This hack (see related code in patchDisplay) makes sure the // element is kept around. if (dy && mac && webkit) { outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { for (var i = 0; i < view.length; i++) { if (view[i].node == cur) { cm.display.currentWheelTarget = cur; break outer; } } } } // On some browsers, horizontal scrolling will cause redraws to // happen before the gutter has been realigned, causing it to // wriggle around in a most unseemly way. When we have an // estimated pixels/delta value, we just handle horizontal // scrolling entirely here. It'll be slightly off from native, but // better than glitching out. if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { if (dy && canScrollY) setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); // Only prevent default scrolling if vertical scrolling is // actually possible. Otherwise, it causes vertical scroll // jitter on OSX trackpads when deltaX is small and deltaY // is large (issue #3579) if (!dy || (dy && canScrollY)) e_preventDefault(e); display.wheelStartX = null; // Abort measurement, if in progress return; } // 'Project' the visible viewport to cover the area that is being // scrolled into view (if we know enough to estimate it). if (dy && wheelPixelsPerUnit != null) { var pixels = dy * wheelPixelsPerUnit; var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; if (pixels < 0) top = Math.max(0, top + pixels - 50); else bot = Math.min(cm.doc.height, bot + pixels + 50); updateDisplaySimple(cm, {top: top, bottom: bot}); } if (wheelSamples < 20) { if (display.wheelStartX == null) { display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; display.wheelDX = dx; display.wheelDY = dy; setTimeout(function() { if (display.wheelStartX == null) return; var movedX = scroll.scrollLeft - display.wheelStartX; var movedY = scroll.scrollTop - display.wheelStartY; var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || (movedX && display.wheelDX && movedX / display.wheelDX); display.wheelStartX = display.wheelStartY = null; if (!sample) return; wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); ++wheelSamples; }, 200); } else { display.wheelDX += dx; display.wheelDY += dy; } } } // KEY EVENTS // Run a handler that was bound to a key. function doHandleBinding(cm, bound, dropShift) { if (typeof bound == "string") { bound = commands[bound]; if (!bound) return false; } // Ensure previous input has been read, so that the handler sees a // consistent view of the document cm.display.input.ensurePolled(); var prevShift = cm.display.shift, done = false; try { if (cm.isReadOnly()) cm.state.suppressEdits = true; if (dropShift) cm.display.shift = false; done = bound(cm) != Pass; } finally { cm.display.shift = prevShift; cm.state.suppressEdits = false; } return done; } function lookupKeyForEditor(cm, name, handle) { for (var i = 0; i < cm.state.keyMaps.length; i++) { var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); if (result) return result; } return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) || lookupKey(name, cm.options.keyMap, handle, cm); } var stopSeq = new Delayed; function dispatchKey(cm, name, e, handle) { var seq = cm.state.keySeq; if (seq) { if (isModifierKey(name)) return "handled"; stopSeq.set(50, function() { if (cm.state.keySeq == seq) { cm.state.keySeq = null; cm.display.input.reset(); } }); name = seq + " " + name; } var result = lookupKeyForEditor(cm, name, handle); if (result == "multi") cm.state.keySeq = name; if (result == "handled") signalLater(cm, "keyHandled", cm, name, e); if (result == "handled" || result == "multi") { e_preventDefault(e); restartBlink(cm); } if (seq && !result && /\'$/.test(name)) { e_preventDefault(e); return true; } return !!result; } // Handle a key from the keydown event. function handleKeyBinding(cm, e) { var name = keyName(e, true); if (!name) return false; if (e.shiftKey && !cm.state.keySeq) { // First try to resolve full name (including 'Shift-'). Failing // that, see if there is a cursor-motion command (starting with // 'go') bound to the keyname without 'Shift-'. return dispatchKey(cm, "Shift-" + name, e, function(b) {return doHandleBinding(cm, b, true);}) || dispatchKey(cm, name, e, function(b) { if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) return doHandleBinding(cm, b); }); } else { return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); }); } } // Handle a key from the keypress event function handleCharBinding(cm, e, ch) { return dispatchKey(cm, "'" + ch + "'", e, function(b) { return doHandleBinding(cm, b, true); }); } var lastStoppedKey = null; function onKeyDown(e) { var cm = this; cm.curOp.focus = activeElt(); if (signalDOMEvent(cm, e)) return; // IE does strange things with escape. if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false; var code = e.keyCode; cm.display.shift = code == 16 || e.shiftKey; var handled = handleKeyBinding(cm, e); if (presto) { lastStoppedKey = handled ? code : null; // Opera has no cut event... we try to at least catch the key combo if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) cm.replaceSelection("", null, "cut"); } // Turn mouse into crosshair when Alt is held on Mac. if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) showCrossHair(cm); } function showCrossHair(cm) { var lineDiv = cm.display.lineDiv; addClass(lineDiv, "CodeMirror-crosshair"); function up(e) { if (e.keyCode == 18 || !e.altKey) { rmClass(lineDiv, "CodeMirror-crosshair"); off(document, "keyup", up); off(document, "mouseover", up); } } on(document, "keyup", up); on(document, "mouseover", up); } function onKeyUp(e) { if (e.keyCode == 16) this.doc.sel.shift = false; signalDOMEvent(this, e); } function onKeyPress(e) { var cm = this; if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return; var keyCode = e.keyCode, charCode = e.charCode; if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) return; var ch = String.fromCharCode(charCode == null ? keyCode : charCode); if (handleCharBinding(cm, e, ch)) return; cm.display.input.onKeyPress(e); } // FOCUS/BLUR EVENTS function delayBlurEvent(cm) { cm.state.delayingBlurEvent = true; setTimeout(function() { if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; onBlur(cm); } }, 100); } function onFocus(cm) { if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false; if (cm.options.readOnly == "nocursor") return; if (!cm.state.focused) { signal(cm, "focus", cm); cm.state.focused = true; addClass(cm.display.wrapper, "CodeMirror-focused"); // This test prevents this from firing when a context // menu is closed (since the input reset would kill the // select-all detection hack) if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { cm.display.input.reset(); if (webkit) setTimeout(function() { cm.display.input.reset(true); }, 20); // Issue #1730 } cm.display.input.receivedFocus(); } restartBlink(cm); } function onBlur(cm) { if (cm.state.delayingBlurEvent) return; if (cm.state.focused) { signal(cm, "blur", cm); cm.state.focused = false; rmClass(cm.display.wrapper, "CodeMirror-focused"); } clearInterval(cm.display.blinker); setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150); } // CONTEXT MENU HANDLING // To make the context menu work, we need to briefly unhide the // textarea (making it as unobtrusive as possible) to let the // right-click take effect on it. function onContextMenu(cm, e) { if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return; if (signalDOMEvent(cm, e, "contextmenu")) return; cm.display.input.onContextMenu(e); } function contextMenuInGutter(cm, e) { if (!hasHandler(cm, "gutterContextMenu")) return false; return gutterEvent(cm, e, "gutterContextMenu", false); } // UPDATING // Compute the position of the end of a change (its 'to' property // refers to the pre-change end). var changeEnd = CodeMirror.changeEnd = function(change) { if (!change.text) return change.to; return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); }; // Adjust a position to refer to the post-change position of the // same text, or the end of the change if the change covers it. function adjustForChange(pos, change) { if (cmp(pos, change.from) < 0) return pos; if (cmp(pos, change.to) <= 0) return changeEnd(change); var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch; return Pos(line, ch); } function computeSelAfterChange(doc, change) { var out = []; for (var i = 0; i < doc.sel.ranges.length; i++) { var range = doc.sel.ranges[i]; out.push(new Range(adjustForChange(range.anchor, change), adjustForChange(range.head, change))); } return normalizeSelection(out, doc.sel.primIndex); } function offsetPos(pos, old, nw) { if (pos.line == old.line) return Pos(nw.line, pos.ch - old.ch + nw.ch); else return Pos(nw.line + (pos.line - old.line), pos.ch); } // Used by replaceSelections to allow moving the selection to the // start or around the replaced test. Hint may be "start" or "around". function computeReplacedSel(doc, changes, hint) { var out = []; var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; for (var i = 0; i < changes.length; i++) { var change = changes[i]; var from = offsetPos(change.from, oldPrev, newPrev); var to = offsetPos(changeEnd(change), oldPrev, newPrev); oldPrev = change.to; newPrev = to; if (hint == "around") { var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; out[i] = new Range(inv ? to : from, inv ? from : to); } else { out[i] = new Range(from, from); } } return new Selection(out, doc.sel.primIndex); } // Allow "beforeChange" event handlers to influence a change function filterChange(doc, change, update) { var obj = { canceled: false, from: change.from, to: change.to, text: change.text, origin: change.origin, cancel: function() { this.canceled = true; } }; if (update) obj.update = function(from, to, text, origin) { if (from) this.from = clipPos(doc, from); if (to) this.to = clipPos(doc, to); if (text) this.text = text; if (origin !== undefined) this.origin = origin; }; signal(doc, "beforeChange", doc, obj); if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); if (obj.canceled) return null; return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; } // Apply a change to a document, and add it to the document's // history, and propagating it to all linked documents. function makeChange(doc, change, ignoreReadOnly) { if (doc.cm) { if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); if (doc.cm.state.suppressEdits) return; } if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { change = filterChange(doc, change, true); if (!change) return; } // Possibly split or suppress the update based on the presence // of read-only spans in its range. var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); if (split) { for (var i = split.length - 1; i >= 0; --i) makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}); } else { makeChangeInner(doc, change); } } function makeChangeInner(doc, change) { if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return; var selAfter = computeSelAfterChange(doc, change); addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); var rebased = []; linkedDocs(doc, function(doc, sharedHist) { if (!sharedHist && indexOf(rebased, doc.history) == -1) { rebaseHist(doc.history, change); rebased.push(doc.history); } makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); }); } // Revert a change stored in a document's history. function makeChangeFromHistory(doc, type, allowSelectionOnly) { if (doc.cm && doc.cm.state.suppressEdits && !allowSelectionOnly) return; var hist = doc.history, event, selAfter = doc.sel; var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; // Verify that there is a useable event (so that ctrl-z won't // needlessly clear selection events) for (var i = 0; i < source.length; i++) { event = source[i]; if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) break; } if (i == source.length) return; hist.lastOrigin = hist.lastSelOrigin = null; for (;;) { event = source.pop(); if (event.ranges) { pushSelectionToHistory(event, dest); if (allowSelectionOnly && !event.equals(doc.sel)) { setSelection(doc, event, {clearRedo: false}); return; } selAfter = event; } else break; } // Build up a reverse change object to add to the opposite history // stack (redo when undoing, and vice versa). var antiChanges = []; pushSelectionToHistory(selAfter, dest); dest.push({changes: antiChanges, generation: hist.generation}); hist.generation = event.generation || ++hist.maxGeneration; var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); for (var i = event.changes.length - 1; i >= 0; --i) { var change = event.changes[i]; change.origin = type; if (filter && !filterChange(doc, change, false)) { source.length = 0; return; } antiChanges.push(historyChangeFromChange(doc, change)); var after = i ? computeSelAfterChange(doc, change) : lst(source); makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); var rebased = []; // Propagate to the linked documents linkedDocs(doc, function(doc, sharedHist) { if (!sharedHist && indexOf(rebased, doc.history) == -1) { rebaseHist(doc.history, change); rebased.push(doc.history); } makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); }); } } // Sub-views need their line numbers shifted when text is added // above or below them in the parent document. function shiftDoc(doc, distance) { if (distance == 0) return; doc.first += distance; doc.sel = new Selection(map(doc.sel.ranges, function(range) { return new Range(Pos(range.anchor.line + distance, range.anchor.ch), Pos(range.head.line + distance, range.head.ch)); }), doc.sel.primIndex); if (doc.cm) { regChange(doc.cm, doc.first, doc.first - distance, distance); for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) regLineChange(doc.cm, l, "gutter"); } } // More lower-level change function, handling only a single document // (not linked ones). function makeChangeSingleDoc(doc, change, selAfter, spans) { if (doc.cm && !doc.cm.curOp) return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); if (change.to.line < doc.first) { shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); return; } if (change.from.line > doc.lastLine()) return; // Clip the change to the size of this doc if (change.from.line < doc.first) { var shift = change.text.length - 1 - (doc.first - change.from.line); shiftDoc(doc, shift); change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), text: [lst(change.text)], origin: change.origin}; } var last = doc.lastLine(); if (change.to.line > last) { change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), text: [change.text[0]], origin: change.origin}; } change.removed = getBetween(doc, change.from, change.to); if (!selAfter) selAfter = computeSelAfterChange(doc, change); if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans); else updateDoc(doc, change, spans); setSelectionNoUndo(doc, selAfter, sel_dontScroll); } // Handle the interaction of a change to a document with the editor // that this document is part of. function makeChangeSingleDocInEditor(cm, change, spans) { var doc = cm.doc, display = cm.display, from = change.from, to = change.to; var recomputeMaxLength = false, checkWidthStart = from.line; if (!cm.options.lineWrapping) { checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); doc.iter(checkWidthStart, to.line + 1, function(line) { if (line == display.maxLine) { recomputeMaxLength = true; return true; } }); } if (doc.sel.contains(change.from, change.to) > -1) signalCursorActivity(cm); updateDoc(doc, change, spans, estimateHeight(cm)); if (!cm.options.lineWrapping) { doc.iter(checkWidthStart, from.line + change.text.length, function(line) { var len = lineLength(line); if (len > display.maxLineLength) { display.maxLine = line; display.maxLineLength = len; display.maxLineChanged = true; recomputeMaxLength = false; } }); if (recomputeMaxLength) cm.curOp.updateMaxLine = true; } // Adjust frontier, schedule worker doc.frontier = Math.min(doc.frontier, from.line); startWorker(cm, 400); var lendiff = change.text.length - (to.line - from.line) - 1; // Remember that these lines changed, for updating the display if (change.full) regChange(cm); else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) regLineChange(cm, from.line, "text"); else regChange(cm, from.line, to.line + 1, lendiff); var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); if (changeHandler || changesHandler) { var obj = { from: from, to: to, text: change.text, removed: change.removed, origin: change.origin }; if (changeHandler) signalLater(cm, "change", cm, obj); if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); } cm.display.selForContextMenu = null; } function replaceRange(doc, code, from, to, origin) { if (!to) to = from; if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; } if (typeof code == "string") code = doc.splitLines(code); makeChange(doc, {from: from, to: to, text: code, origin: origin}); } // SCROLLING THINGS INTO VIEW // If an editor sits on the top or bottom of the window, partially // scrolled out of view, this ensures that the cursor is visible. function maybeScrollWindow(cm, coords) { if (signalDOMEvent(cm, "scrollCursorIntoView")) return; var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; if (coords.top + box.top < 0) doScroll = true; else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; if (doScroll != null && !phantom) { var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " + (coords.top - display.viewOffset - paddingTop(cm.display)) + "px; height: " + (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + "px; left: " + coords.left + "px; width: 2px;"); cm.display.lineSpace.appendChild(scrollNode); scrollNode.scrollIntoView(doScroll); cm.display.lineSpace.removeChild(scrollNode); } } // Scroll a given position into view (immediately), verifying that // it actually became visible (as line heights are accurately // measured, the position of something may 'drift' during drawing). function scrollPosIntoView(cm, pos, end, margin) { if (margin == null) margin = 0; for (var limit = 0; limit < 5; limit++) { var changed = false, coords = cursorCoords(cm, pos); var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left), Math.min(coords.top, endCoords.top) - margin, Math.max(coords.left, endCoords.left), Math.max(coords.bottom, endCoords.bottom) + margin); var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; if (scrollPos.scrollTop != null) { setScrollTop(cm, scrollPos.scrollTop); if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; } if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; } if (!changed) break; } return coords; } // Scroll a given set of coordinates into view (immediately). function scrollIntoView(cm, x1, y1, x2, y2) { var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); } // Calculate a new scroll position needed to scroll the given // rectangle into view. Returns an object with scrollTop and // scrollLeft properties. When these are undefined, the // vertical/horizontal position does not need to be adjusted. function calculateScrollPos(cm, x1, y1, x2, y2) { var display = cm.display, snapMargin = textHeight(cm.display); if (y1 < 0) y1 = 0; var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; var screen = displayHeight(cm), result = {}; if (y2 - y1 > screen) y2 = y1 + screen; var docBottom = cm.doc.height + paddingVert(display); var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin; if (y1 < screentop) { result.scrollTop = atTop ? 0 : y1; } else if (y2 > screentop + screen) { var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); if (newTop != screentop) result.scrollTop = newTop; } var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); var tooWide = x2 - x1 > screenw; if (tooWide) x2 = x1 + screenw; if (x1 < 10) result.scrollLeft = 0; else if (x1 < screenleft) result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10)); else if (x2 > screenw + screenleft - 3) result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw; return result; } // Store a relative adjustment to the scroll position in the current // operation (to be applied when the operation finishes). function addToScrollPos(cm, left, top) { if (left != null || top != null) resolveScrollToPos(cm); if (left != null) cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left; if (top != null) cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; } // Make sure that at the end of the operation the current cursor is // shown. function ensureCursorVisible(cm) { resolveScrollToPos(cm); var cur = cm.getCursor(), from = cur, to = cur; if (!cm.options.lineWrapping) { from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur; to = Pos(cur.line, cur.ch + 1); } cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true}; } // When an operation has its scrollToPos property set, and another // scroll action is applied before the end of the operation, this // 'simulates' scrolling that position into view in a cheap way, so // that the effect of intermediate scroll commands is not ignored. function resolveScrollToPos(cm) { var range = cm.curOp.scrollToPos; if (range) { cm.curOp.scrollToPos = null; var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); var sPos = calculateScrollPos(cm, Math.min(from.left, to.left), Math.min(from.top, to.top) - range.margin, Math.max(from.right, to.right), Math.max(from.bottom, to.bottom) + range.margin); cm.scrollTo(sPos.scrollLeft, sPos.scrollTop); } } // API UTILITIES // Indent the given line. The how parameter can be "smart", // "add"/null, "subtract", or "prev". When aggressive is false // (typically set to true for forced single-line indents), empty // lines are not indented, and places where the mode returns Pass // are left alone. function indentLine(cm, n, how, aggressive) { var doc = cm.doc, state; if (how == null) how = "add"; if (how == "smart") { // Fall back to "prev" when the mode doesn't have an indentation // method. if (!doc.mode.indent) how = "prev"; else state = getStateBefore(cm, n); } var tabSize = cm.options.tabSize; var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); if (line.stateAfter) line.stateAfter = null; var curSpaceString = line.text.match(/^\s*/)[0], indentation; if (!aggressive && !/\S/.test(line.text)) { indentation = 0; how = "not"; } else if (how == "smart") { indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); if (indentation == Pass || indentation > 150) { if (!aggressive) return; how = "prev"; } } if (how == "prev") { if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); else indentation = 0; } else if (how == "add") { indentation = curSpace + cm.options.indentUnit; } else if (how == "subtract") { indentation = curSpace - cm.options.indentUnit; } else if (typeof how == "number") { indentation = curSpace + how; } indentation = Math.max(0, indentation); var indentString = "", pos = 0; if (cm.options.indentWithTabs) for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} if (pos < indentation) indentString += spaceStr(indentation - pos); if (indentString != curSpaceString) { replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); line.stateAfter = null; return true; } else { // Ensure that, if the cursor was in the whitespace at the start // of the line, it is moved to the end of that space. for (var i = 0; i < doc.sel.ranges.length; i++) { var range = doc.sel.ranges[i]; if (range.head.line == n && range.head.ch < curSpaceString.length) { var pos = Pos(n, curSpaceString.length); replaceOneSelection(doc, i, new Range(pos, pos)); break; } } } } // Utility for applying a change to a line by handle or number, // returning the number and optionally registering the line as // changed. function changeLine(doc, handle, changeType, op) { var no = handle, line = handle; if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); else no = lineNo(handle); if (no == null) return null; if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType); return line; } // Helper for deleting text near the selection(s), used to implement // backspace, delete, and similar functionality. function deleteNearSelection(cm, compute) { var ranges = cm.doc.sel.ranges, kill = []; // Build up a set of ranges to kill first, merging overlapping // ranges. for (var i = 0; i < ranges.length; i++) { var toKill = compute(ranges[i]); while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { var replaced = kill.pop(); if (cmp(replaced.from, toKill.from) < 0) { toKill.from = replaced.from; break; } } kill.push(toKill); } // Next, remove those actual ranges. runInOp(cm, function() { for (var i = kill.length - 1; i >= 0; i--) replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); ensureCursorVisible(cm); }); } // Used for horizontal relative motion. Dir is -1 or 1 (left or // right), unit can be "char", "column" (like char, but doesn't // cross line boundaries), "word" (across next word), or "group" (to // the start of next group of word or non-word-non-whitespace // chars). The visually param controls whether, in right-to-left // text, direction 1 means to move towards the next index in the // string, or towards the character to the right of the current // position. The resulting position will have a hitSide=true // property if it reached the end of the document. function findPosH(doc, pos, dir, unit, visually) { var line = pos.line, ch = pos.ch, origDir = dir; var lineObj = getLine(doc, line); function findNextLine() { var l = line + dir; if (l < doc.first || l >= doc.first + doc.size) return false line = l; return lineObj = getLine(doc, l); } function moveOnce(boundToLine) { var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); if (next == null) { if (!boundToLine && findNextLine()) { if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); else ch = dir < 0 ? lineObj.text.length : 0; } else return false } else ch = next; return true; } if (unit == "char") { moveOnce() } else if (unit == "column") { moveOnce(true) } else if (unit == "word" || unit == "group") { var sawType = null, group = unit == "group"; var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); for (var first = true;; first = false) { if (dir < 0 && !moveOnce(!first)) break; var cur = lineObj.text.charAt(ch) || "\n"; var type = isWordChar(cur, helper) ? "w" : group && cur == "\n" ? "n" : !group || /\s/.test(cur) ? null : "p"; if (group && !first && !type) type = "s"; if (sawType && sawType != type) { if (dir < 0) {dir = 1; moveOnce();} break; } if (type) sawType = type; if (dir > 0 && !moveOnce(!first)) break; } } var result = skipAtomic(doc, Pos(line, ch), pos, origDir, true); if (!cmp(pos, result)) result.hitSide = true; return result; } // For relative vertical movement. Dir may be -1 or 1. Unit can be // "page" or "line". The resulting position will have a hitSide=true // property if it reached the end of the document. function findPosV(cm, pos, dir, unit) { var doc = cm.doc, x = pos.left, y; if (unit == "page") { var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); } else if (unit == "line") { y = dir > 0 ? pos.bottom + 3 : pos.top - 3; } for (;;) { var target = coordsChar(cm, x, y); if (!target.outside) break; if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } y += dir * 5; } return target; } // EDITOR METHODS // The publicly visible API. Note that methodOp(f) means // 'wrap f in an operation, performed on its `this` parameter'. // This is not the complete set of editor methods. Most of the // methods defined on the Doc type are also injected into // CodeMirror.prototype, for backwards compatibility and // convenience. CodeMirror.prototype = { constructor: CodeMirror, focus: function(){window.focus(); this.display.input.focus();}, setOption: function(option, value) { var options = this.options, old = options[option]; if (options[option] == value && option != "mode") return; options[option] = value; if (optionHandlers.hasOwnProperty(option)) operation(this, optionHandlers[option])(this, value, old); }, getOption: function(option) {return this.options[option];}, getDoc: function() {return this.doc;}, addKeyMap: function(map, bottom) { this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); }, removeKeyMap: function(map) { var maps = this.state.keyMaps; for (var i = 0; i < maps.length; ++i) if (maps[i] == map || maps[i].name == map) { maps.splice(i, 1); return true; } }, addOverlay: methodOp(function(spec, options) { var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); if (mode.startState) throw new Error("Overlays may not be stateful."); insertSorted(this.state.overlays, {mode: mode, modeSpec: spec, opaque: options && options.opaque, priority: (options && options.priority) || 0}, function(overlay) { return overlay.priority }) this.state.modeGen++; regChange(this); }), removeOverlay: methodOp(function(spec) { var overlays = this.state.overlays; for (var i = 0; i < overlays.length; ++i) { var cur = overlays[i].modeSpec; if (cur == spec || typeof spec == "string" && cur.name == spec) { overlays.splice(i, 1); this.state.modeGen++; regChange(this); return; } } }), indentLine: methodOp(function(n, dir, aggressive) { if (typeof dir != "string" && typeof dir != "number") { if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; else dir = dir ? "add" : "subtract"; } if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); }), indentSelection: methodOp(function(how) { var ranges = this.doc.sel.ranges, end = -1; for (var i = 0; i < ranges.length; i++) { var range = ranges[i]; if (!range.empty()) { var from = range.from(), to = range.to(); var start = Math.max(end, from.line); end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; for (var j = start; j < end; ++j) indentLine(this, j, how); var newRanges = this.doc.sel.ranges; if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); } else if (range.head.line > end) { indentLine(this, range.head.line, how, true); end = range.head.line; if (i == this.doc.sel.primIndex) ensureCursorVisible(this); } } }), // Fetch the parser token for a given character. Useful for hacks // that want to inspect the mode state (say, for completion). getTokenAt: function(pos, precise) { return takeToken(this, pos, precise); }, getLineTokens: function(line, precise) { return takeToken(this, Pos(line), precise, true); }, getTokenTypeAt: function(pos) { pos = clipPos(this.doc, pos); var styles = getLineStyles(this, getLine(this.doc, pos.line)); var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; var type; if (ch == 0) type = styles[2]; else for (;;) { var mid = (before + after) >> 1; if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; else if (styles[mid * 2 + 1] < ch) before = mid + 1; else { type = styles[mid * 2 + 2]; break; } } var cut = type ? type.indexOf("cm-overlay ") : -1; return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); }, getModeAt: function(pos) { var mode = this.doc.mode; if (!mode.innerMode) return mode; return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; }, getHelper: function(pos, type) { return this.getHelpers(pos, type)[0]; }, getHelpers: function(pos, type) { var found = []; if (!helpers.hasOwnProperty(type)) return found; var help = helpers[type], mode = this.getModeAt(pos); if (typeof mode[type] == "string") { if (help[mode[type]]) found.push(help[mode[type]]); } else if (mode[type]) { for (var i = 0; i < mode[type].length; i++) { var val = help[mode[type][i]]; if (val) found.push(val); } } else if (mode.helperType && help[mode.helperType]) { found.push(help[mode.helperType]); } else if (help[mode.name]) { found.push(help[mode.name]); } for (var i = 0; i < help._global.length; i++) { var cur = help._global[i]; if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) found.push(cur.val); } return found; }, getStateAfter: function(line, precise) { var doc = this.doc; line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); return getStateBefore(this, line + 1, precise); }, cursorCoords: function(start, mode) { var pos, range = this.doc.sel.primary(); if (start == null) pos = range.head; else if (typeof start == "object") pos = clipPos(this.doc, start); else pos = start ? range.from() : range.to(); return cursorCoords(this, pos, mode || "page"); }, charCoords: function(pos, mode) { return charCoords(this, clipPos(this.doc, pos), mode || "page"); }, coordsChar: function(coords, mode) { coords = fromCoordSystem(this, coords, mode || "page"); return coordsChar(this, coords.left, coords.top); }, lineAtHeight: function(height, mode) { height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; return lineAtHeight(this.doc, height + this.display.viewOffset); }, heightAtLine: function(line, mode) { var end = false, lineObj; if (typeof line == "number") { var last = this.doc.first + this.doc.size - 1; if (line < this.doc.first) line = this.doc.first; else if (line > last) { line = last; end = true; } lineObj = getLine(this.doc, line); } else { lineObj = line; } return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top + (end ? this.doc.height - heightAtLine(lineObj) : 0); }, defaultTextHeight: function() { return textHeight(this.display); }, defaultCharWidth: function() { return charWidth(this.display); }, setGutterMarker: methodOp(function(line, gutterID, value) { return changeLine(this.doc, line, "gutter", function(line) { var markers = line.gutterMarkers || (line.gutterMarkers = {}); markers[gutterID] = value; if (!value && isEmpty(markers)) line.gutterMarkers = null; return true; }); }), clearGutter: methodOp(function(gutterID) { var cm = this, doc = cm.doc, i = doc.first; doc.iter(function(line) { if (line.gutterMarkers && line.gutterMarkers[gutterID]) { line.gutterMarkers[gutterID] = null; regLineChange(cm, i, "gutter"); if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; } ++i; }); }), lineInfo: function(line) { if (typeof line == "number") { if (!isLine(this.doc, line)) return null; var n = line; line = getLine(this.doc, line); if (!line) return null; } else { var n = lineNo(line); if (n == null) return null; } return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, widgets: line.widgets}; }, getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};}, addWidget: function(pos, node, scroll, vert, horiz) { var display = this.display; pos = cursorCoords(this, clipPos(this.doc, pos)); var top = pos.bottom, left = pos.left; node.style.position = "absolute"; node.setAttribute("cm-ignore-events", "true"); this.display.input.setUneditable(node); display.sizer.appendChild(node); if (vert == "over") { top = pos.top; } else if (vert == "above" || vert == "near") { var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); // Default to positioning above (if specified and possible); otherwise default to positioning below if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) top = pos.top - node.offsetHeight; else if (pos.bottom + node.offsetHeight <= vspace) top = pos.bottom; if (left + node.offsetWidth > hspace) left = hspace - node.offsetWidth; } node.style.top = top + "px"; node.style.left = node.style.right = ""; if (horiz == "right") { left = display.sizer.clientWidth - node.offsetWidth; node.style.right = "0px"; } else { if (horiz == "left") left = 0; else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; node.style.left = left + "px"; } if (scroll) scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); }, triggerOnKeyDown: methodOp(onKeyDown), triggerOnKeyPress: methodOp(onKeyPress), triggerOnKeyUp: onKeyUp, execCommand: function(cmd) { if (commands.hasOwnProperty(cmd)) return commands[cmd].call(null, this); }, triggerElectric: methodOp(function(text) { triggerElectric(this, text); }), findPosH: function(from, amount, unit, visually) { var dir = 1; if (amount < 0) { dir = -1; amount = -amount; } for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { cur = findPosH(this.doc, cur, dir, unit, visually); if (cur.hitSide) break; } return cur; }, moveH: methodOp(function(dir, unit) { var cm = this; cm.extendSelectionsBy(function(range) { if (cm.display.shift || cm.doc.extend || range.empty()) return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually); else return dir < 0 ? range.from() : range.to(); }, sel_move); }), deleteH: methodOp(function(dir, unit) { var sel = this.doc.sel, doc = this.doc; if (sel.somethingSelected()) doc.replaceSelection("", null, "+delete"); else deleteNearSelection(this, function(range) { var other = findPosH(doc, range.head, dir, unit, false); return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}; }); }), findPosV: function(from, amount, unit, goalColumn) { var dir = 1, x = goalColumn; if (amount < 0) { dir = -1; amount = -amount; } for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { var coords = cursorCoords(this, cur, "div"); if (x == null) x = coords.left; else coords.left = x; cur = findPosV(this, coords, dir, unit); if (cur.hitSide) break; } return cur; }, moveV: methodOp(function(dir, unit) { var cm = this, doc = this.doc, goals = []; var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected(); doc.extendSelectionsBy(function(range) { if (collapse) return dir < 0 ? range.from() : range.to(); var headPos = cursorCoords(cm, range.head, "div"); if (range.goalColumn != null) headPos.left = range.goalColumn; goals.push(headPos.left); var pos = findPosV(cm, headPos, dir, unit); if (unit == "page" && range == doc.sel.primary()) addToScrollPos(cm, null, charCoords(cm, pos, "div").top - headPos.top); return pos; }, sel_move); if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++) doc.sel.ranges[i].goalColumn = goals[i]; }), // Find the word at the given position (as returned by coordsChar). findWordAt: function(pos) { var doc = this.doc, line = getLine(doc, pos.line).text; var start = pos.ch, end = pos.ch; if (line) { var helper = this.getHelper(pos, "wordChars"); if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end; var startChar = line.charAt(start); var check = isWordChar(startChar, helper) ? function(ch) { return isWordChar(ch, helper); } : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; while (start > 0 && check(line.charAt(start - 1))) --start; while (end < line.length && check(line.charAt(end))) ++end; } return new Range(Pos(pos.line, start), Pos(pos.line, end)); }, toggleOverwrite: function(value) { if (value != null && value == this.state.overwrite) return; if (this.state.overwrite = !this.state.overwrite) addClass(this.display.cursorDiv, "CodeMirror-overwrite"); else rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); signal(this, "overwriteToggle", this, this.state.overwrite); }, hasFocus: function() { return this.display.input.getField() == activeElt(); }, isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit); }, scrollTo: methodOp(function(x, y) { if (x != null || y != null) resolveScrollToPos(this); if (x != null) this.curOp.scrollLeft = x; if (y != null) this.curOp.scrollTop = y; }), getScrollInfo: function() { var scroller = this.display.scroller; return {left: scroller.scrollLeft, top: scroller.scrollTop, height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, clientHeight: displayHeight(this), clientWidth: displayWidth(this)}; }, scrollIntoView: methodOp(function(range, margin) { if (range == null) { range = {from: this.doc.sel.primary().head, to: null}; if (margin == null) margin = this.options.cursorScrollMargin; } else if (typeof range == "number") { range = {from: Pos(range, 0), to: null}; } else if (range.from == null) { range = {from: range, to: null}; } if (!range.to) range.to = range.from; range.margin = margin || 0; if (range.from.line != null) { resolveScrollToPos(this); this.curOp.scrollToPos = range; } else { var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left), Math.min(range.from.top, range.to.top) - range.margin, Math.max(range.from.right, range.to.right), Math.max(range.from.bottom, range.to.bottom) + range.margin); this.scrollTo(sPos.scrollLeft, sPos.scrollTop); } }), setSize: methodOp(function(width, height) { var cm = this; function interpret(val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; } if (width != null) cm.display.wrapper.style.width = interpret(width); if (height != null) cm.display.wrapper.style.height = interpret(height); if (cm.options.lineWrapping) clearLineMeasurementCache(this); var lineNo = cm.display.viewFrom; cm.doc.iter(lineNo, cm.display.viewTo, function(line) { if (line.widgets) for (var i = 0; i < line.widgets.length; i++) if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, "widget"); break; } ++lineNo; }); cm.curOp.forceUpdate = true; signal(cm, "refresh", this); }), operation: function(f){return runInOp(this, f);}, refresh: methodOp(function() { var oldHeight = this.display.cachedTextHeight; regChange(this); this.curOp.forceUpdate = true; clearCaches(this); this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop); updateGutterSpace(this); if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) estimateLineHeights(this); signal(this, "refresh", this); }), swapDoc: methodOp(function(doc) { var old = this.doc; old.cm = null; attachDoc(this, doc); clearCaches(this); this.display.input.reset(); this.scrollTo(doc.scrollLeft, doc.scrollTop); this.curOp.forceScroll = true; signalLater(this, "swapDoc", this, old); return old; }), getInputField: function(){return this.display.input.getField();}, getWrapperElement: function(){return this.display.wrapper;}, getScrollerElement: function(){return this.display.scroller;}, getGutterElement: function(){return this.display.gutters;} }; eventMixin(CodeMirror); // OPTION DEFAULTS // The default configuration options. var defaults = CodeMirror.defaults = {}; // Functions to run when options are changed. var optionHandlers = CodeMirror.optionHandlers = {}; function option(name, deflt, handle, notOnInit) { CodeMirror.defaults[name] = deflt; if (handle) optionHandlers[name] = notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; } // Passed to option handlers when there is no old value. var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; // These two are, on init, called from the constructor because they // have to be initialized before the editor can start at all. option("value", "", function(cm, val) { cm.setValue(val); }, true); option("mode", null, function(cm, val) { cm.doc.modeOption = val; loadMode(cm); }, true); option("indentUnit", 2, loadMode, true); option("indentWithTabs", false); option("smartIndent", true); option("tabSize", 4, function(cm) { resetModeState(cm); clearCaches(cm); regChange(cm); }, true); option("lineSeparator", null, function(cm, val) { cm.doc.lineSep = val; if (!val) return; var newBreaks = [], lineNo = cm.doc.first; cm.doc.iter(function(line) { for (var pos = 0;;) { var found = line.text.indexOf(val, pos); if (found == -1) break; pos = found + val.length; newBreaks.push(Pos(lineNo, found)); } lineNo++; }); for (var i = newBreaks.length - 1; i >= 0; i--) replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)) }); option("specialChars", /[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function(cm, val, old) { cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); if (old != CodeMirror.Init) cm.refresh(); }); option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true); option("electricChars", true); option("inputStyle", mobile ? "contenteditable" : "textarea", function() { throw new Error("inputStyle can not (yet) be changed in a running editor"); // FIXME }, true); option("spellcheck", false, function(cm, val) { cm.getInputField().spellcheck = val }, true); option("rtlMoveVisually", !windows); option("wholeLineUpdateBefore", true); option("theme", "default", function(cm) { themeChanged(cm); guttersChanged(cm); }, true); option("keyMap", "default", function(cm, val, old) { var next = getKeyMap(val); var prev = old != CodeMirror.Init && getKeyMap(old); if (prev && prev.detach) prev.detach(cm, next); if (next.attach) next.attach(cm, prev || null); }); option("extraKeys", null); option("lineWrapping", false, wrappingChanged, true); option("gutters", [], function(cm) { setGuttersForLineNumbers(cm.options); guttersChanged(cm); }, true); option("fixedGutter", true, function(cm, val) { cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; cm.refresh(); }, true); option("coverGutterNextToScrollbar", false, function(cm) {updateScrollbars(cm);}, true); option("scrollbarStyle", "native", function(cm) { initScrollbars(cm); updateScrollbars(cm); cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); }, true); option("lineNumbers", false, function(cm) { setGuttersForLineNumbers(cm.options); guttersChanged(cm); }, true); option("firstLineNumber", 1, guttersChanged, true); option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); option("showCursorWhenSelecting", false, updateSelection, true); option("resetSelectionOnContextMenu", true); option("lineWiseCopyCut", true); option("readOnly", false, function(cm, val) { if (val == "nocursor") { onBlur(cm); cm.display.input.blur(); cm.display.disabled = true; } else { cm.display.disabled = false; } cm.display.input.readOnlyChanged(val) }); option("disableInput", false, function(cm, val) {if (!val) cm.display.input.reset();}, true); option("dragDrop", true, dragDropChanged); option("allowDropFileTypes", null); option("cursorBlinkRate", 530); option("cursorScrollMargin", 0); option("cursorHeight", 1, updateSelection, true); option("singleCursorHeightPerLine", true, updateSelection, true); option("workTime", 100); option("workDelay", 100); option("flattenSpans", true, resetModeState, true); option("addModeClass", false, resetModeState, true); option("pollInterval", 100); option("undoDepth", 200, function(cm, val){cm.doc.history.undoDepth = val;}); option("historyEventDelay", 1250); option("viewportMargin", 10, function(cm){cm.refresh();}, true); option("maxHighlightLength", 10000, resetModeState, true); option("moveInputWithCursor", true, function(cm, val) { if (!val) cm.display.input.resetPosition(); }); option("tabindex", null, function(cm, val) { cm.display.input.getField().tabIndex = val || ""; }); option("autofocus", null); // MODE DEFINITION AND QUERYING // Known modes, by name and by MIME var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; // Extra arguments are stored as the mode's dependencies, which is // used by (legacy) mechanisms like loadmode.js to automatically // load a mode. (Preferred mechanism is the require/define calls.) CodeMirror.defineMode = function(name, mode) { if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; if (arguments.length > 2) mode.dependencies = Array.prototype.slice.call(arguments, 2); modes[name] = mode; }; CodeMirror.defineMIME = function(mime, spec) { mimeModes[mime] = spec; }; // Given a MIME type, a {name, ...options} config object, or a name // string, return a mode config object. CodeMirror.resolveMode = function(spec) { if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { spec = mimeModes[spec]; } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { var found = mimeModes[spec.name]; if (typeof found == "string") found = {name: found}; spec = createObj(found, spec); spec.name = found.name; } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { return CodeMirror.resolveMode("application/xml"); } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { return CodeMirror.resolveMode("application/json"); } if (typeof spec == "string") return {name: spec}; else return spec || {name: "null"}; }; // Given a mode spec (anything that resolveMode accepts), find and // initialize an actual mode object. CodeMirror.getMode = function(options, spec) { var spec = CodeMirror.resolveMode(spec); var mfactory = modes[spec.name]; if (!mfactory) return CodeMirror.getMode(options, "text/plain"); var modeObj = mfactory(options, spec); if (modeExtensions.hasOwnProperty(spec.name)) { var exts = modeExtensions[spec.name]; for (var prop in exts) { if (!exts.hasOwnProperty(prop)) continue; if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; modeObj[prop] = exts[prop]; } } modeObj.name = spec.name; if (spec.helperType) modeObj.helperType = spec.helperType; if (spec.modeProps) for (var prop in spec.modeProps) modeObj[prop] = spec.modeProps[prop]; return modeObj; }; // Minimal default mode. CodeMirror.defineMode("null", function() { return {token: function(stream) {stream.skipToEnd();}}; }); CodeMirror.defineMIME("text/plain", "null"); // This can be used to attach properties to mode objects from // outside the actual mode definition. var modeExtensions = CodeMirror.modeExtensions = {}; CodeMirror.extendMode = function(mode, properties) { var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); copyObj(properties, exts); }; // EXTENSIONS CodeMirror.defineExtension = function(name, func) { CodeMirror.prototype[name] = func; }; CodeMirror.defineDocExtension = function(name, func) { Doc.prototype[name] = func; }; CodeMirror.defineOption = option; var initHooks = []; CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; var helpers = CodeMirror.helpers = {}; CodeMirror.registerHelper = function(type, name, value) { if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []}; helpers[type][name] = value; }; CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { CodeMirror.registerHelper(type, name, value); helpers[type]._global.push({pred: predicate, val: value}); }; // MODE STATE HANDLING // Utility functions for working with state. Exported because nested // modes need to do this for their inner modes. var copyState = CodeMirror.copyState = function(mode, state) { if (state === true) return state; if (mode.copyState) return mode.copyState(state); var nstate = {}; for (var n in state) { var val = state[n]; if (val instanceof Array) val = val.concat([]); nstate[n] = val; } return nstate; }; var startState = CodeMirror.startState = function(mode, a1, a2) { return mode.startState ? mode.startState(a1, a2) : true; }; // Given a mode and a state (for that mode), find the inner mode and // state at the position that the state refers to. CodeMirror.innerMode = function(mode, state) { while (mode.innerMode) { var info = mode.innerMode(state); if (!info || info.mode == mode) break; state = info.state; mode = info.mode; } return info || {mode: mode, state: state}; }; // STANDARD COMMANDS // Commands are parameter-less actions that can be performed on an // editor, mostly used for keybindings. var commands = CodeMirror.commands = { selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);}, singleSelection: function(cm) { cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, killLine: function(cm) { deleteNearSelection(cm, function(range) { if (range.empty()) { var len = getLine(cm.doc, range.head.line).text.length; if (range.head.ch == len && range.head.line < cm.lastLine()) return {from: range.head, to: Pos(range.head.line + 1, 0)}; else return {from: range.head, to: Pos(range.head.line, len)}; } else { return {from: range.from(), to: range.to()}; } }); }, deleteLine: function(cm) { deleteNearSelection(cm, function(range) { return {from: Pos(range.from().line, 0), to: clipPos(cm.doc, Pos(range.to().line + 1, 0))}; }); }, delLineLeft: function(cm) { deleteNearSelection(cm, function(range) { return {from: Pos(range.from().line, 0), to: range.from()}; }); }, delWrappedLineLeft: function(cm) { deleteNearSelection(cm, function(range) { var top = cm.charCoords(range.head, "div").top + 5; var leftPos = cm.coordsChar({left: 0, top: top}, "div"); return {from: leftPos, to: range.from()}; }); }, delWrappedLineRight: function(cm) { deleteNearSelection(cm, function(range) { var top = cm.charCoords(range.head, "div").top + 5; var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); return {from: range.from(), to: rightPos }; }); }, undo: function(cm) {cm.undo();}, redo: function(cm) {cm.redo();}, undoSelection: function(cm) {cm.undoSelection();}, redoSelection: function(cm) {cm.redoSelection();}, goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, goLineStart: function(cm) { cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); }, {origin: "+move", bias: 1}); }, goLineStartSmart: function(cm) { cm.extendSelectionsBy(function(range) { return lineStartSmart(cm, range.head); }, {origin: "+move", bias: 1}); }, goLineEnd: function(cm) { cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); }, {origin: "+move", bias: -1}); }, goLineRight: function(cm) { cm.extendSelectionsBy(function(range) { var top = cm.charCoords(range.head, "div").top + 5; return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); }, sel_move); }, goLineLeft: function(cm) { cm.extendSelectionsBy(function(range) { var top = cm.charCoords(range.head, "div").top + 5; return cm.coordsChar({left: 0, top: top}, "div"); }, sel_move); }, goLineLeftSmart: function(cm) { cm.extendSelectionsBy(function(range) { var top = cm.charCoords(range.head, "div").top + 5; var pos = cm.coordsChar({left: 0, top: top}, "div"); if (pos.ch < cm.getLine(pos.line).search(/\S/)) return lineStartSmart(cm, range.head); return pos; }, sel_move); }, goLineUp: function(cm) {cm.moveV(-1, "line");}, goLineDown: function(cm) {cm.moveV(1, "line");}, goPageUp: function(cm) {cm.moveV(-1, "page");}, goPageDown: function(cm) {cm.moveV(1, "page");}, goCharLeft: function(cm) {cm.moveH(-1, "char");}, goCharRight: function(cm) {cm.moveH(1, "char");}, goColumnLeft: function(cm) {cm.moveH(-1, "column");}, goColumnRight: function(cm) {cm.moveH(1, "column");}, goWordLeft: function(cm) {cm.moveH(-1, "word");}, goGroupRight: function(cm) {cm.moveH(1, "group");}, goGroupLeft: function(cm) {cm.moveH(-1, "group");}, goWordRight: function(cm) {cm.moveH(1, "word");}, delCharBefore: function(cm) {cm.deleteH(-1, "char");}, delCharAfter: function(cm) {cm.deleteH(1, "char");}, delWordBefore: function(cm) {cm.deleteH(-1, "word");}, delWordAfter: function(cm) {cm.deleteH(1, "word");}, delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, delGroupAfter: function(cm) {cm.deleteH(1, "group");}, indentAuto: function(cm) {cm.indentSelection("smart");}, indentMore: function(cm) {cm.indentSelection("add");}, indentLess: function(cm) {cm.indentSelection("subtract");}, insertTab: function(cm) {cm.replaceSelection("\t");}, insertSoftTab: function(cm) { var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; for (var i = 0; i < ranges.length; i++) { var pos = ranges[i].from(); var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); spaces.push(spaceStr(tabSize - col % tabSize)); } cm.replaceSelections(spaces); }, defaultTab: function(cm) { if (cm.somethingSelected()) cm.indentSelection("add"); else cm.execCommand("insertTab"); }, transposeChars: function(cm) { runInOp(cm, function() { var ranges = cm.listSelections(), newSel = []; for (var i = 0; i < ranges.length; i++) { var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; if (line) { if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1); if (cur.ch > 0) { cur = new Pos(cur.line, cur.ch + 1); cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, "+transpose"); } else if (cur.line > cm.doc.first) { var prev = getLine(cm.doc, cur.line - 1).text; if (prev) cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), "+transpose"); } } newSel.push(new Range(cur, cur)); } cm.setSelections(newSel); }); }, newlineAndIndent: function(cm) { runInOp(cm, function() { var len = cm.listSelections().length; for (var i = 0; i < len; i++) { var range = cm.listSelections()[i]; cm.replaceRange(cm.doc.lineSeparator(), range.anchor, range.head, "+input"); cm.indentLine(range.from().line + 1, null, true); } ensureCursorVisible(cm); }); }, openLine: function(cm) {cm.replaceSelection("\n", "start")}, toggleOverwrite: function(cm) {cm.toggleOverwrite();} }; // STANDARD KEYMAPS var keyMap = CodeMirror.keyMap = {}; keyMap.basic = { "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", "Tab": "defaultTab", "Shift-Tab": "indentAuto", "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", "Esc": "singleSelection" }; // Note that the save and find-related commands aren't defined by // default. User code or addons can define them. Unknown commands // are simply ignored. keyMap.pcDefault = { "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", fallthrough: "basic" }; // Very basic readline/emacs-style bindings, which are standard on Mac. keyMap.emacsy = { "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars", "Ctrl-O": "openLine" }; keyMap.macDefault = { "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", fallthrough: ["basic", "emacsy"] }; keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; // KEYMAP DISPATCH function normalizeKeyName(name) { var parts = name.split(/-(?!$)/), name = parts[parts.length - 1]; var alt, ctrl, shift, cmd; for (var i = 0; i < parts.length - 1; i++) { var mod = parts[i]; if (/^(cmd|meta|m)$/i.test(mod)) cmd = true; else if (/^a(lt)?$/i.test(mod)) alt = true; else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true; else if (/^s(hift)$/i.test(mod)) shift = true; else throw new Error("Unrecognized modifier name: " + mod); } if (alt) name = "Alt-" + name; if (ctrl) name = "Ctrl-" + name; if (cmd) name = "Cmd-" + name; if (shift) name = "Shift-" + name; return name; } // This is a kludge to keep keymaps mostly working as raw objects // (backwards compatibility) while at the same time support features // like normalization and multi-stroke key bindings. It compiles a // new normalized keymap, and then updates the old object to reflect // this. CodeMirror.normalizeKeyMap = function(keymap) { var copy = {}; for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) { var value = keymap[keyname]; if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue; if (value == "...") { delete keymap[keyname]; continue; } var keys = map(keyname.split(" "), normalizeKeyName); for (var i = 0; i < keys.length; i++) { var val, name; if (i == keys.length - 1) { name = keys.join(" "); val = value; } else { name = keys.slice(0, i + 1).join(" "); val = "..."; } var prev = copy[name]; if (!prev) copy[name] = val; else if (prev != val) throw new Error("Inconsistent bindings for " + name); } delete keymap[keyname]; } for (var prop in copy) keymap[prop] = copy[prop]; return keymap; }; var lookupKey = CodeMirror.lookupKey = function(key, map, handle, context) { map = getKeyMap(map); var found = map.call ? map.call(key, context) : map[key]; if (found === false) return "nothing"; if (found === "...") return "multi"; if (found != null && handle(found)) return "handled"; if (map.fallthrough) { if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") return lookupKey(key, map.fallthrough, handle, context); for (var i = 0; i < map.fallthrough.length; i++) { var result = lookupKey(key, map.fallthrough[i], handle, context); if (result) return result; } } }; // Modifier key presses don't count as 'real' key presses for the // purpose of keymap fallthrough. var isModifierKey = CodeMirror.isModifierKey = function(value) { var name = typeof value == "string" ? value : keyNames[value.keyCode]; return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; }; // Look up the name of a key as indicated by an event object. var keyName = CodeMirror.keyName = function(event, noShift) { if (presto && event.keyCode == 34 && event["char"]) return false; var base = keyNames[event.keyCode], name = base; if (name == null || event.altGraphKey) return false; if (event.altKey && base != "Alt") name = "Alt-" + name; if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") name = "Ctrl-" + name; if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") name = "Cmd-" + name; if (!noShift && event.shiftKey && base != "Shift") name = "Shift-" + name; return name; }; function getKeyMap(val) { return typeof val == "string" ? keyMap[val] : val; } // FROMTEXTAREA CodeMirror.fromTextArea = function(textarea, options) { options = options ? copyObj(options) : {}; options.value = textarea.value; if (!options.tabindex && textarea.tabIndex) options.tabindex = textarea.tabIndex; if (!options.placeholder && textarea.placeholder) options.placeholder = textarea.placeholder; // Set autofocus to true if this textarea is focused, or if it has // autofocus and no other element is focused. if (options.autofocus == null) { var hasFocus = activeElt(); options.autofocus = hasFocus == textarea || textarea.getAttribute("autofocus") != null && hasFocus == document.body; } function save() {textarea.value = cm.getValue();} if (textarea.form) { on(textarea.form, "submit", save); // Deplorable hack to make the submit method do the right thing. if (!options.leaveSubmitMethodAlone) { var form = textarea.form, realSubmit = form.submit; try { var wrappedSubmit = form.submit = function() { save(); form.submit = realSubmit; form.submit(); form.submit = wrappedSubmit; }; } catch(e) {} } } options.finishInit = function(cm) { cm.save = save; cm.getTextArea = function() { return textarea; }; cm.toTextArea = function() { cm.toTextArea = isNaN; // Prevent this from being ran twice save(); textarea.parentNode.removeChild(cm.getWrapperElement()); textarea.style.display = ""; if (textarea.form) { off(textarea.form, "submit", save); if (typeof textarea.form.submit == "function") textarea.form.submit = realSubmit; } }; }; textarea.style.display = "none"; var cm = CodeMirror(function(node) { textarea.parentNode.insertBefore(node, textarea.nextSibling); }, options); return cm; }; // STRING STREAM // Fed to the mode parsers, provides helper functions to make // parsers more succinct. var StringStream = CodeMirror.StringStream = function(string, tabSize) { this.pos = this.start = 0; this.string = string; this.tabSize = tabSize || 8; this.lastColumnPos = this.lastColumnValue = 0; this.lineStart = 0; }; StringStream.prototype = { eol: function() {return this.pos >= this.string.length;}, sol: function() {return this.pos == this.lineStart;}, peek: function() {return this.string.charAt(this.pos) || undefined;}, next: function() { if (this.pos < this.string.length) return this.string.charAt(this.pos++); }, eat: function(match) { var ch = this.string.charAt(this.pos); if (typeof match == "string") var ok = ch == match; else var ok = ch && (match.test ? match.test(ch) : match(ch)); if (ok) {++this.pos; return ch;} }, eatWhile: function(match) { var start = this.pos; while (this.eat(match)){} return this.pos > start; }, eatSpace: function() { var start = this.pos; while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; return this.pos > start; }, skipToEnd: function() {this.pos = this.string.length;}, skipTo: function(ch) { var found = this.string.indexOf(ch, this.pos); if (found > -1) {this.pos = found; return true;} }, backUp: function(n) {this.pos -= n;}, column: function() { if (this.lastColumnPos < this.start) { this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); this.lastColumnPos = this.start; } return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); }, indentation: function() { return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); }, match: function(pattern, consume, caseInsensitive) { if (typeof pattern == "string") { var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; var substr = this.string.substr(this.pos, pattern.length); if (cased(substr) == cased(pattern)) { if (consume !== false) this.pos += pattern.length; return true; } } else { var match = this.string.slice(this.pos).match(pattern); if (match && match.index > 0) return null; if (match && consume !== false) this.pos += match[0].length; return match; } }, current: function(){return this.string.slice(this.start, this.pos);}, hideFirstChars: function(n, inner) { this.lineStart += n; try { return inner(); } finally { this.lineStart -= n; } } }; // TEXTMARKERS // Created with markText and setBookmark methods. A TextMarker is a // handle that can be used to clear or find a marked position in the // document. Line objects hold arrays (markedSpans) containing // {from, to, marker} object pointing to such marker objects, and // indicating that such a marker is present on that line. Multiple // lines may point to the same marker when it spans across lines. // The spans will have null for their from/to properties when the // marker continues beyond the start/end of the line. Markers have // links back to the lines they currently touch. var nextMarkerId = 0; var TextMarker = CodeMirror.TextMarker = function(doc, type) { this.lines = []; this.type = type; this.doc = doc; this.id = ++nextMarkerId; }; eventMixin(TextMarker); // Clear the marker. TextMarker.prototype.clear = function() { if (this.explicitlyCleared) return; var cm = this.doc.cm, withOp = cm && !cm.curOp; if (withOp) startOperation(cm); if (hasHandler(this, "clear")) { var found = this.find(); if (found) signalLater(this, "clear", found.from, found.to); } var min = null, max = null; for (var i = 0; i < this.lines.length; ++i) { var line = this.lines[i]; var span = getMarkedSpanFor(line.markedSpans, this); if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text"); else if (cm) { if (span.to != null) max = lineNo(line); if (span.from != null) min = lineNo(line); } line.markedSpans = removeMarkedSpan(line.markedSpans, span); if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) updateLineHeight(line, textHeight(cm.display)); } if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { var visual = visualLine(this.lines[i]), len = lineLength(visual); if (len > cm.display.maxLineLength) { cm.display.maxLine = visual; cm.display.maxLineLength = len; cm.display.maxLineChanged = true; } } if (min != null && cm && this.collapsed) regChange(cm, min, max + 1); this.lines.length = 0; this.explicitlyCleared = true; if (this.atomic && this.doc.cantEdit) { this.doc.cantEdit = false; if (cm) reCheckSelection(cm.doc); } if (cm) signalLater(cm, "markerCleared", cm, this); if (withOp) endOperation(cm); if (this.parent) this.parent.clear(); }; // Find the position of the marker in the document. Returns a {from, // to} object by default. Side can be passed to get a specific side // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the // Pos objects returned contain a line object, rather than a line // number (used to prevent looking up the same line twice). TextMarker.prototype.find = function(side, lineObj) { if (side == null && this.type == "bookmark") side = 1; var from, to; for (var i = 0; i < this.lines.length; ++i) { var line = this.lines[i]; var span = getMarkedSpanFor(line.markedSpans, this); if (span.from != null) { from = Pos(lineObj ? line : lineNo(line), span.from); if (side == -1) return from; } if (span.to != null) { to = Pos(lineObj ? line : lineNo(line), span.to); if (side == 1) return to; } } return from && {from: from, to: to}; }; // Signals that the marker's widget changed, and surrounding layout // should be recomputed. TextMarker.prototype.changed = function() { var pos = this.find(-1, true), widget = this, cm = this.doc.cm; if (!pos || !cm) return; runInOp(cm, function() { var line = pos.line, lineN = lineNo(pos.line); var view = findViewForLine(cm, lineN); if (view) { clearLineMeasurementCacheFor(view); cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; } cm.curOp.updateMaxLine = true; if (!lineIsHidden(widget.doc, line) && widget.height != null) { var oldHeight = widget.height; widget.height = null; var dHeight = widgetHeight(widget) - oldHeight; if (dHeight) updateLineHeight(line, line.height + dHeight); } }); }; TextMarker.prototype.attachLine = function(line) { if (!this.lines.length && this.doc.cm) { var op = this.doc.cm.curOp; if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); } this.lines.push(line); }; TextMarker.prototype.detachLine = function(line) { this.lines.splice(indexOf(this.lines, line), 1); if (!this.lines.length && this.doc.cm) { var op = this.doc.cm.curOp; (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); } }; // Collapsed markers have unique ids, in order to be able to order // them, which is needed for uniquely determining an outer marker // when they overlap (they may nest, but not partially overlap). var nextMarkerId = 0; // Create a marker, wire it up to the right lines, and function markText(doc, from, to, options, type) { // Shared markers (across linked documents) are handled separately // (markTextShared will call out to this again, once per // document). if (options && options.shared) return markTextShared(doc, from, to, options, type); // Ensure we are in an operation. if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); var marker = new TextMarker(doc, type), diff = cmp(from, to); if (options) copyObj(options, marker, false); // Don't connect empty markers unless clearWhenEmpty is false if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) return marker; if (marker.replacedWith) { // Showing up as a widget implies collapsed (widget replaces text) marker.collapsed = true; marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget"); if (!options.handleMouseEvents) marker.widgetNode.setAttribute("cm-ignore-events", "true"); if (options.insertLeft) marker.widgetNode.insertLeft = true; } if (marker.collapsed) { if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) throw new Error("Inserting collapsed marker partially overlapping an existing one"); sawCollapsedSpans = true; } if (marker.addToHistory) addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); var curLine = from.line, cm = doc.cm, updateMaxLine; doc.iter(curLine, to.line + 1, function(line) { if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) updateMaxLine = true; if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0); addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null)); ++curLine; }); // lineIsHidden depends on the presence of the spans, so needs a second pass if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { if (lineIsHidden(doc, line)) updateLineHeight(line, 0); }); if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); if (marker.readOnly) { sawReadOnlySpans = true; if (doc.history.done.length || doc.history.undone.length) doc.clearHistory(); } if (marker.collapsed) { marker.id = ++nextMarkerId; marker.atomic = true; } if (cm) { // Sync editor state if (updateMaxLine) cm.curOp.updateMaxLine = true; if (marker.collapsed) regChange(cm, from.line, to.line + 1); else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, "text"); if (marker.atomic) reCheckSelection(cm.doc); signalLater(cm, "markerAdded", cm, marker); } return marker; } // SHARED TEXTMARKERS // A shared marker spans multiple linked documents. It is // implemented as a meta-marker-object controlling multiple normal // markers. var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) { this.markers = markers; this.primary = primary; for (var i = 0; i < markers.length; ++i) markers[i].parent = this; }; eventMixin(SharedTextMarker); SharedTextMarker.prototype.clear = function() { if (this.explicitlyCleared) return; this.explicitlyCleared = true; for (var i = 0; i < this.markers.length; ++i) this.markers[i].clear(); signalLater(this, "clear"); }; SharedTextMarker.prototype.find = function(side, lineObj) { return this.primary.find(side, lineObj); }; function markTextShared(doc, from, to, options, type) { options = copyObj(options); options.shared = false; var markers = [markText(doc, from, to, options, type)], primary = markers[0]; var widget = options.widgetNode; linkedDocs(doc, function(doc) { if (widget) options.widgetNode = widget.cloneNode(true); markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); for (var i = 0; i < doc.linked.length; ++i) if (doc.linked[i].isParent) return; primary = lst(markers); }); return new SharedTextMarker(markers, primary); } function findSharedMarkers(doc) { return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function(m) { return m.parent; }); } function copySharedMarkers(doc, markers) { for (var i = 0; i < markers.length; i++) { var marker = markers[i], pos = marker.find(); var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); if (cmp(mFrom, mTo)) { var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); marker.markers.push(subMark); subMark.parent = marker; } } } function detachSharedMarkers(markers) { for (var i = 0; i < markers.length; i++) { var marker = markers[i], linked = [marker.primary.doc];; linkedDocs(marker.primary.doc, function(d) { linked.push(d); }); for (var j = 0; j < marker.markers.length; j++) { var subMarker = marker.markers[j]; if (indexOf(linked, subMarker.doc) == -1) { subMarker.parent = null; marker.markers.splice(j--, 1); } } } } // TEXTMARKER SPANS function MarkedSpan(marker, from, to) { this.marker = marker; this.from = from; this.to = to; } // Search an array of spans for a span matching the given marker. function getMarkedSpanFor(spans, marker) { if (spans) for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if (span.marker == marker) return span; } } // Remove a span from an array, returning undefined if no spans are // left (we don't store arrays for lines without spans). function removeMarkedSpan(spans, span) { for (var r, i = 0; i < spans.length; ++i) if (spans[i] != span) (r || (r = [])).push(spans[i]); return r; } // Add a span to a line. function addMarkedSpan(line, span) { line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; span.marker.attachLine(line); } // Used for the algorithm that adjusts markers for a change in the // document. These functions cut an array of spans at a given // character position, returning an array of remaining chunks (or // undefined if nothing remains). function markedSpansBefore(old, startCh, isInsert) { if (old) for (var i = 0, nw; i < old.length; ++i) { var span = old[i], marker = span.marker; var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); } } return nw; } function markedSpansAfter(old, endCh, isInsert) { if (old) for (var i = 0, nw; i < old.length; ++i) { var span = old[i], marker = span.marker; var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh)); } } return nw; } // Given a change object, compute the new set of marker spans that // cover the line in which the change took place. Removes spans // entirely within the change, reconnects spans belonging to the // same marker that appear on both sides of the change, and cuts off // spans partially within the change. Returns an array of span // arrays with one element for each line in (after) the change. function stretchSpansOverChange(doc, change) { if (change.full) return null; var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; if (!oldFirst && !oldLast) return null; var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; // Get the spans that 'stick out' on both sides var first = markedSpansBefore(oldFirst, startCh, isInsert); var last = markedSpansAfter(oldLast, endCh, isInsert); // Next, merge those two ends var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); if (first) { // Fix up .to properties of first for (var i = 0; i < first.length; ++i) { var span = first[i]; if (span.to == null) { var found = getMarkedSpanFor(last, span.marker); if (!found) span.to = startCh; else if (sameLine) span.to = found.to == null ? null : found.to + offset; } } } if (last) { // Fix up .from in last (or move them into first in case of sameLine) for (var i = 0; i < last.length; ++i) { var span = last[i]; if (span.to != null) span.to += offset; if (span.from == null) { var found = getMarkedSpanFor(first, span.marker); if (!found) { span.from = offset; if (sameLine) (first || (first = [])).push(span); } } else { span.from += offset; if (sameLine) (first || (first = [])).push(span); } } } // Make sure we didn't create any zero-length spans if (first) first = clearEmptySpans(first); if (last && last != first) last = clearEmptySpans(last); var newMarkers = [first]; if (!sameLine) { // Fill gap with whole-line-spans var gap = change.text.length - 2, gapMarkers; if (gap > 0 && first) for (var i = 0; i < first.length; ++i) if (first[i].to == null) (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null)); for (var i = 0; i < gap; ++i) newMarkers.push(gapMarkers); newMarkers.push(last); } return newMarkers; } // Remove spans that are empty and don't have a clearWhenEmpty // option of false. function clearEmptySpans(spans) { for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) spans.splice(i--, 1); } if (!spans.length) return null; return spans; } // Used for un/re-doing changes from the history. Combines the // result of computing the existing spans with the set of spans that // existed in the history (so that deleting around a span and then // undoing brings back the span). function mergeOldSpans(doc, change) { var old = getOldSpans(doc, change); var stretched = stretchSpansOverChange(doc, change); if (!old) return stretched; if (!stretched) return old; for (var i = 0; i < old.length; ++i) { var oldCur = old[i], stretchCur = stretched[i]; if (oldCur && stretchCur) { spans: for (var j = 0; j < stretchCur.length; ++j) { var span = stretchCur[j]; for (var k = 0; k < oldCur.length; ++k) if (oldCur[k].marker == span.marker) continue spans; oldCur.push(span); } } else if (stretchCur) { old[i] = stretchCur; } } return old; } // Used to 'clip' out readOnly ranges when making a change. function removeReadOnlyRanges(doc, from, to) { var markers = null; doc.iter(from.line, to.line + 1, function(line) { if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { var mark = line.markedSpans[i].marker; if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) (markers || (markers = [])).push(mark); } }); if (!markers) return null; var parts = [{from: from, to: to}]; for (var i = 0; i < markers.length; ++i) { var mk = markers[i], m = mk.find(0); for (var j = 0; j < parts.length; ++j) { var p = parts[j]; if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue; var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) newParts.push({from: p.from, to: m.from}); if (dto > 0 || !mk.inclusiveRight && !dto) newParts.push({from: m.to, to: p.to}); parts.splice.apply(parts, newParts); j += newParts.length - 1; } } return parts; } // Connect or disconnect spans from a line. function detachMarkedSpans(line) { var spans = line.markedSpans; if (!spans) return; for (var i = 0; i < spans.length; ++i) spans[i].marker.detachLine(line); line.markedSpans = null; } function attachMarkedSpans(line, spans) { if (!spans) return; for (var i = 0; i < spans.length; ++i) spans[i].marker.attachLine(line); line.markedSpans = spans; } // Helpers used when computing which overlapping collapsed span // counts as the larger one. function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; } function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; } // Returns a number indicating which of two overlapping collapsed // spans is larger (and thus includes the other). Falls back to // comparing ids when the spans cover exactly the same range. function compareCollapsedMarkers(a, b) { var lenDiff = a.lines.length - b.lines.length; if (lenDiff != 0) return lenDiff; var aPos = a.find(), bPos = b.find(); var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); if (fromCmp) return -fromCmp; var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); if (toCmp) return toCmp; return b.id - a.id; } // Find out whether a line ends or starts in a collapsed span. If // so, return the marker for that span. function collapsedSpanAtSide(line, start) { var sps = sawCollapsedSpans && line.markedSpans, found; if (sps) for (var sp, i = 0; i < sps.length; ++i) { sp = sps[i]; if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) found = sp.marker; } return found; } function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); } function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); } // Test whether there exists a collapsed span that partially // overlaps (covers the start or end, but not both) of a new span. // Such overlap is not allowed. function conflictingCollapsedRange(doc, lineNo, from, to, marker) { var line = getLine(doc, lineNo); var sps = sawCollapsedSpans && line.markedSpans; if (sps) for (var i = 0; i < sps.length; ++i) { var sp = sps[i]; if (!sp.marker.collapsed) continue; var found = sp.marker.find(0); var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue; if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) return true; } } // A visual line is a line as drawn on the screen. Folding, for // example, can cause multiple logical lines to appear on the same // visual line. This finds the start of the visual line that the // given line is part of (usually that is the line itself). function visualLine(line) { var merged; while (merged = collapsedSpanAtStart(line)) line = merged.find(-1, true).line; return line; } // Returns an array of logical lines that continue the visual line // started by the argument, or undefined if there are no such lines. function visualLineContinued(line) { var merged, lines; while (merged = collapsedSpanAtEnd(line)) { line = merged.find(1, true).line; (lines || (lines = [])).push(line); } return lines; } // Get the line number of the start of the visual line that the // given line number is part of. function visualLineNo(doc, lineN) { var line = getLine(doc, lineN), vis = visualLine(line); if (line == vis) return lineN; return lineNo(vis); } // Get the line number of the start of the next visual line after // the given line. function visualLineEndNo(doc, lineN) { if (lineN > doc.lastLine()) return lineN; var line = getLine(doc, lineN), merged; if (!lineIsHidden(doc, line)) return lineN; while (merged = collapsedSpanAtEnd(line)) line = merged.find(1, true).line; return lineNo(line) + 1; } // Compute whether a line is hidden. Lines count as hidden when they // are part of a visual line that starts with another line, or when // they are entirely covered by collapsed, non-widget span. function lineIsHidden(doc, line) { var sps = sawCollapsedSpans && line.markedSpans; if (sps) for (var sp, i = 0; i < sps.length; ++i) { sp = sps[i]; if (!sp.marker.collapsed) continue; if (sp.from == null) return true; if (sp.marker.widgetNode) continue; if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) return true; } } function lineIsHiddenInner(doc, line, span) { if (span.to == null) { var end = span.marker.find(1, true); return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); } if (span.marker.inclusiveRight && span.to == line.text.length) return true; for (var sp, i = 0; i < line.markedSpans.length; ++i) { sp = line.markedSpans[i]; if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) return true; } } // LINE WIDGETS // Line widgets are block elements displayed above or below a line. var LineWidget = CodeMirror.LineWidget = function(doc, node, options) { if (options) for (var opt in options) if (options.hasOwnProperty(opt)) this[opt] = options[opt]; this.doc = doc; this.node = node; }; eventMixin(LineWidget); function adjustScrollWhenAboveVisible(cm, line, diff) { if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) addToScrollPos(cm, null, diff); } LineWidget.prototype.clear = function() { var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); if (no == null || !ws) return; for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); if (!ws.length) line.widgets = null; var height = widgetHeight(this); updateLineHeight(line, Math.max(0, line.height - height)); if (cm) runInOp(cm, function() { adjustScrollWhenAboveVisible(cm, line, -height); regLineChange(cm, no, "widget"); }); }; LineWidget.prototype.changed = function() { var oldH = this.height, cm = this.doc.cm, line = this.line; this.height = null; var diff = widgetHeight(this) - oldH; if (!diff) return; updateLineHeight(line, line.height + diff); if (cm) runInOp(cm, function() { cm.curOp.forceUpdate = true; adjustScrollWhenAboveVisible(cm, line, diff); }); }; function widgetHeight(widget) { if (widget.height != null) return widget.height; var cm = widget.doc.cm; if (!cm) return 0; if (!contains(document.body, widget.node)) { var parentStyle = "position: relative;"; if (widget.coverGutter) parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; if (widget.noHScroll) parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); } return widget.height = widget.node.parentNode.offsetHeight; } function addLineWidget(doc, handle, node, options) { var widget = new LineWidget(doc, node, options); var cm = doc.cm; if (cm && widget.noHScroll) cm.display.alignWidgets = true; changeLine(doc, handle, "widget", function(line) { var widgets = line.widgets || (line.widgets = []); if (widget.insertAt == null) widgets.push(widget); else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); widget.line = line; if (cm && !lineIsHidden(doc, line)) { var aboveVisible = heightAtLine(line) < doc.scrollTop; updateLineHeight(line, line.height + widgetHeight(widget)); if (aboveVisible) addToScrollPos(cm, null, widget.height); cm.curOp.forceUpdate = true; } return true; }); return widget; } // LINE DATA STRUCTURE // Line objects. These hold state related to a line, including // highlighting info (the styles array). var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) { this.text = text; attachMarkedSpans(this, markedSpans); this.height = estimateHeight ? estimateHeight(this) : 1; }; eventMixin(Line); Line.prototype.lineNo = function() { return lineNo(this); }; // Change the content (text, markers) of a line. Automatically // invalidates cached information and tries to re-estimate the // line's height. function updateLine(line, text, markedSpans, estimateHeight) { line.text = text; if (line.stateAfter) line.stateAfter = null; if (line.styles) line.styles = null; if (line.order != null) line.order = null; detachMarkedSpans(line); attachMarkedSpans(line, markedSpans); var estHeight = estimateHeight ? estimateHeight(line) : 1; if (estHeight != line.height) updateLineHeight(line, estHeight); } // Detach a line from the document tree and its markers. function cleanUpLine(line) { line.parent = null; detachMarkedSpans(line); } function extractLineClasses(type, output) { if (type) for (;;) { var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); if (!lineClass) break; type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); var prop = lineClass[1] ? "bgClass" : "textClass"; if (output[prop] == null) output[prop] = lineClass[2]; else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) output[prop] += " " + lineClass[2]; } return type; } function callBlankLine(mode, state) { if (mode.blankLine) return mode.blankLine(state); if (!mode.innerMode) return; var inner = CodeMirror.innerMode(mode, state); if (inner.mode.blankLine) return inner.mode.blankLine(inner.state); } function readToken(mode, stream, state, inner) { for (var i = 0; i < 10; i++) { if (inner) inner[0] = CodeMirror.innerMode(mode, state).mode; var style = mode.token(stream, state); if (stream.pos > stream.start) return style; } throw new Error("Mode " + mode.name + " failed to advance stream."); } // Utility for getTokenAt and getLineTokens function takeToken(cm, pos, precise, asArray) { function getObj(copy) { return {start: stream.start, end: stream.pos, string: stream.current(), type: style || null, state: copy ? copyState(doc.mode, state) : state}; } var doc = cm.doc, mode = doc.mode, style; pos = clipPos(doc, pos); var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise); var stream = new StringStream(line.text, cm.options.tabSize), tokens; if (asArray) tokens = []; while ((asArray || stream.pos < pos.ch) && !stream.eol()) { stream.start = stream.pos; style = readToken(mode, stream, state); if (asArray) tokens.push(getObj(true)); } return asArray ? tokens : getObj(); } // Run the given mode's parser over a line, calling f for each token. function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { var flattenSpans = mode.flattenSpans; if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; var curStart = 0, curStyle = null; var stream = new StringStream(text, cm.options.tabSize), style; var inner = cm.options.addModeClass && [null]; if (text == "") extractLineClasses(callBlankLine(mode, state), lineClasses); while (!stream.eol()) { if (stream.pos > cm.options.maxHighlightLength) { flattenSpans = false; if (forceToEnd) processLine(cm, text, state, stream.pos); stream.pos = text.length; style = null; } else { style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses); } if (inner) { var mName = inner[0].name; if (mName) style = "m-" + (style ? mName + " " + style : mName); } if (!flattenSpans || curStyle != style) { while (curStart < stream.start) { curStart = Math.min(stream.start, curStart + 50000); f(curStart, curStyle); } curStyle = style; } stream.start = stream.pos; } while (curStart < stream.pos) { // Webkit seems to refuse to render text nodes longer than 57444 characters var pos = Math.min(stream.pos, curStart + 50000); f(pos, curStyle); curStart = pos; } } // Compute a style array (an array starting with a mode generation // -- for invalidation -- followed by pairs of end positions and // style strings), which is used to highlight the tokens on the // line. function highlightLine(cm, line, state, forceToEnd) { // A styles array always starts with a number identifying the // mode/overlays that it is based on (for easy invalidation). var st = [cm.state.modeGen], lineClasses = {}; // Compute the base array of styles runMode(cm, line.text, cm.doc.mode, state, function(end, style) { st.push(end, style); }, lineClasses, forceToEnd); // Run overlays, adjust style array. for (var o = 0; o < cm.state.overlays.length; ++o) { var overlay = cm.state.overlays[o], i = 1, at = 0; runMode(cm, line.text, overlay.mode, true, function(end, style) { var start = i; // Ensure there's a token end at the current position, and that i points at it while (at < end) { var i_end = st[i]; if (i_end > end) st.splice(i, 1, end, st[i+1], i_end); i += 2; at = Math.min(end, i_end); } if (!style) return; if (overlay.opaque) { st.splice(start, i - start, end, "cm-overlay " + style); i = start + 2; } else { for (; start < i; start += 2) { var cur = st[start+1]; st[start+1] = (cur ? cur + " " : "") + "cm-overlay " + style; } } }, lineClasses); } return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}; } function getLineStyles(cm, line, updateFrontier) { if (!line.styles || line.styles[0] != cm.state.modeGen) { var state = getStateBefore(cm, lineNo(line)); var result = highlightLine(cm, line, line.text.length > cm.options.maxHighlightLength ? copyState(cm.doc.mode, state) : state); line.stateAfter = state; line.styles = result.styles; if (result.classes) line.styleClasses = result.classes; else if (line.styleClasses) line.styleClasses = null; if (updateFrontier === cm.doc.frontier) cm.doc.frontier++; } return line.styles; } // Lightweight form of highlight -- proceed over this line and // update state, but don't save a style array. Used for lines that // aren't currently visible. function processLine(cm, text, state, startAt) { var mode = cm.doc.mode; var stream = new StringStream(text, cm.options.tabSize); stream.start = stream.pos = startAt || 0; if (text == "") callBlankLine(mode, state); while (!stream.eol()) { readToken(mode, stream, state); stream.start = stream.pos; } } // Convert a style as returned by a mode (either null, or a string // containing one or more styles) to a CSS style. This is cached, // and also looks for line-wide styles. var styleToClassCache = {}, styleToClassCacheWithMode = {}; function interpretTokenStyle(style, options) { if (!style || /^\s*$/.test(style)) return null; var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; return cache[style] || (cache[style] = style.replace(/\S+/g, "cm-$&")); } // Render the DOM representation of the text of a line. Also builds // up a 'line map', which points at the DOM nodes that represent // specific stretches of text, and is used by the measuring code. // The returned object contains the DOM node, this map, and // information about line-wide styles that were set by the mode. function buildLineContent(cm, lineView) { // The padding-right forces the element to have a 'border', which // is needed on Webkit to be able to get line-level bounding // rectangles for it (in measureChar). var content = elt("span", null, null, webkit ? "padding-right: .1px" : null); var builder = {pre: elt("pre", [content], "CodeMirror-line"), content: content, col: 0, pos: 0, cm: cm, trailingSpace: false, splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")}; lineView.measure = {}; // Iterate over the logical lines that make up this visual line. for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { var line = i ? lineView.rest[i - 1] : lineView.line, order; builder.pos = 0; builder.addToken = buildToken; // Optionally wire in some hacks into the token-rendering // algorithm, to deal with browser quirks. if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line))) builder.addToken = buildTokenBadBidi(builder.addToken, order); builder.map = []; var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); if (line.styleClasses) { if (line.styleClasses.bgClass) builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); if (line.styleClasses.textClass) builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); } // Ensure at least a single node is present, for measuring. if (builder.map.length == 0) builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); // Store the map and a cache object for the current logical line if (i == 0) { lineView.measure.map = builder.map; lineView.measure.cache = {}; } else { (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); (lineView.measure.caches || (lineView.measure.caches = [])).push({}); } } // See issue #2901 if (webkit) { var last = builder.content.lastChild if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) builder.content.className = "cm-tab-wrap-hack"; } signal(cm, "renderLine", cm, lineView.line, builder.pre); if (builder.pre.className) builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); return builder; } function defaultSpecialCharPlaceholder(ch) { var token = elt("span", "\u2022", "cm-invalidchar"); token.title = "\\u" + ch.charCodeAt(0).toString(16); token.setAttribute("aria-label", token.title); return token; } // Build up the DOM representation for a single token, and add it to // the line map. Takes care to render special characters separately. function buildToken(builder, text, style, startStyle, endStyle, title, css) { if (!text) return; var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text var special = builder.cm.state.specialChars, mustWrap = false; if (!special.test(text)) { builder.col += text.length; var content = document.createTextNode(displayText); builder.map.push(builder.pos, builder.pos + text.length, content); if (ie && ie_version < 9) mustWrap = true; builder.pos += text.length; } else { var content = document.createDocumentFragment(), pos = 0; while (true) { special.lastIndex = pos; var m = special.exec(text); var skipped = m ? m.index - pos : text.length - pos; if (skipped) { var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); else content.appendChild(txt); builder.map.push(builder.pos, builder.pos + skipped, txt); builder.col += skipped; builder.pos += skipped; } if (!m) break; pos += skipped + 1; if (m[0] == "\t") { var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; var txt = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); txt.setAttribute("role", "presentation"); txt.setAttribute("cm-text", "\t"); builder.col += tabWidth; } else if (m[0] == "\r" || m[0] == "\n") { var txt = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")); txt.setAttribute("cm-text", m[0]); builder.col += 1; } else { var txt = builder.cm.options.specialCharPlaceholder(m[0]); txt.setAttribute("cm-text", m[0]); if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); else content.appendChild(txt); builder.col += 1; } builder.map.push(builder.pos, builder.pos + 1, txt); builder.pos++; } } builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32 if (style || startStyle || endStyle || mustWrap || css) { var fullStyle = style || ""; if (startStyle) fullStyle += startStyle; if (endStyle) fullStyle += endStyle; var token = elt("span", [content], fullStyle, css); if (title) token.title = title; return builder.content.appendChild(token); } builder.content.appendChild(content); } function splitSpaces(text, trailingBefore) { if (text.length > 1 && !/ /.test(text)) return text var spaceBefore = trailingBefore, result = "" for (var i = 0; i < text.length; i++) { var ch = text.charAt(i) if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) ch = "\u00a0" result += ch spaceBefore = ch == " " } return result } // Work around nonsense dimensions being reported for stretches of // right-to-left text. function buildTokenBadBidi(inner, order) { return function(builder, text, style, startStyle, endStyle, title, css) { style = style ? style + " cm-force-border" : "cm-force-border"; var start = builder.pos, end = start + text.length; for (;;) { // Find the part that overlaps with the start of this text for (var i = 0; i < order.length; i++) { var part = order[i]; if (part.to > start && part.from <= start) break; } if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title, css); inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css); startStyle = null; text = text.slice(part.to - start); start = part.to; } }; } function buildCollapsedSpan(builder, size, marker, ignoreWidget) { var widget = !ignoreWidget && marker.widgetNode; if (widget) builder.map.push(builder.pos, builder.pos + size, widget); if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { if (!widget) widget = builder.content.appendChild(document.createElement("span")); widget.setAttribute("cm-marker", marker.id); } if (widget) { builder.cm.display.input.setUneditable(widget); builder.content.appendChild(widget); } builder.pos += size; builder.trailingSpace = false } // Outputs a number of spans to make up a line, taking highlighting // and marked text into account. function insertLineContent(line, builder, styles) { var spans = line.markedSpans, allText = line.text, at = 0; if (!spans) { for (var i = 1; i < styles.length; i+=2) builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options)); return; } var len = allText.length, pos = 0, i = 1, text = "", style, css; var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; for (;;) { if (nextChange == pos) { // Update current marker set spanStyle = spanEndStyle = spanStartStyle = title = css = ""; collapsed = null; nextChange = Infinity; var foundBookmarks = [], endStyles for (var j = 0; j < spans.length; ++j) { var sp = spans[j], m = sp.marker; if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { foundBookmarks.push(m); } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { if (sp.to != null && sp.to != pos && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } if (m.className) spanStyle += " " + m.className; if (m.css) css = (css ? css + ";" : "") + m.css; if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; if (m.endStyle && sp.to == nextChange) (endStyles || (endStyles = [])).push(m.endStyle, sp.to) if (m.title && !title) title = m.title; if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) collapsed = sp; } else if (sp.from > pos && nextChange > sp.from) { nextChange = sp.from; } } if (endStyles) for (var j = 0; j < endStyles.length; j += 2) if (endStyles[j + 1] == nextChange) spanEndStyle += " " + endStyles[j] if (!collapsed || collapsed.from == pos) for (var j = 0; j < foundBookmarks.length; ++j) buildCollapsedSpan(builder, 0, foundBookmarks[j]); if (collapsed && (collapsed.from || 0) == pos) { buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null); if (collapsed.to == null) return; if (collapsed.to == pos) collapsed = false; } } if (pos >= len) break; var upto = Math.min(len, nextChange); while (true) { if (text) { var end = pos + text.length; if (!collapsed) { var tokenText = end > upto ? text.slice(0, upto - pos) : text; builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css); } if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} pos = end; spanStartStyle = ""; } text = allText.slice(at, at = styles[i++]); style = interpretTokenStyle(styles[i++], builder.cm.options); } } } // DOCUMENT DATA STRUCTURE // By default, updates that start and end at the beginning of a line // are treated specially, in order to make the association of line // widgets and marker elements with the text behave more intuitive. function isWholeLineUpdate(doc, change) { return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore); } // Perform a change on the document data structure. function updateDoc(doc, change, markedSpans, estimateHeight) { function spansFor(n) {return markedSpans ? markedSpans[n] : null;} function update(line, text, spans) { updateLine(line, text, spans, estimateHeight); signalLater(line, "change", line, change); } function linesFor(start, end) { for (var i = start, result = []; i < end; ++i) result.push(new Line(text[i], spansFor(i), estimateHeight)); return result; } var from = change.from, to = change.to, text = change.text; var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; // Adjust the line structure if (change.full) { doc.insert(0, linesFor(0, text.length)); doc.remove(text.length, doc.size - text.length); } else if (isWholeLineUpdate(doc, change)) { // This is a whole-line replace. Treated specially to make // sure line objects move the way they are supposed to. var added = linesFor(0, text.length - 1); update(lastLine, lastLine.text, lastSpans); if (nlines) doc.remove(from.line, nlines); if (added.length) doc.insert(from.line, added); } else if (firstLine == lastLine) { if (text.length == 1) { update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); } else { var added = linesFor(1, text.length - 1); added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); doc.insert(from.line + 1, added); } } else if (text.length == 1) { update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); doc.remove(from.line + 1, nlines); } else { update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); var added = linesFor(1, text.length - 1); if (nlines > 1) doc.remove(from.line + 1, nlines - 1); doc.insert(from.line + 1, added); } signalLater(doc, "change", doc, change); } // The document is represented as a BTree consisting of leaves, with // chunk of lines in them, and branches, with up to ten leaves or // other branch nodes below them. The top node is always a branch // node, and is the document object itself (meaning it has // additional methods and properties). // // All nodes have parent links. The tree is used both to go from // line numbers to line objects, and to go from objects to numbers. // It also indexes by height, and is used to convert between height // and line object, and to find the total height of the document. // // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html function LeafChunk(lines) { this.lines = lines; this.parent = null; for (var i = 0, height = 0; i < lines.length; ++i) { lines[i].parent = this; height += lines[i].height; } this.height = height; } LeafChunk.prototype = { chunkSize: function() { return this.lines.length; }, // Remove the n lines at offset 'at'. removeInner: function(at, n) { for (var i = at, e = at + n; i < e; ++i) { var line = this.lines[i]; this.height -= line.height; cleanUpLine(line); signalLater(line, "delete"); } this.lines.splice(at, n); }, // Helper used to collapse a small branch into a single leaf. collapse: function(lines) { lines.push.apply(lines, this.lines); }, // Insert the given array of lines at offset 'at', count them as // having the given height. insertInner: function(at, lines, height) { this.height += height; this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); for (var i = 0; i < lines.length; ++i) lines[i].parent = this; }, // Used to iterate over a part of the tree. iterN: function(at, n, op) { for (var e = at + n; at < e; ++at) if (op(this.lines[at])) return true; } }; function BranchChunk(children) { this.children = children; var size = 0, height = 0; for (var i = 0; i < children.length; ++i) { var ch = children[i]; size += ch.chunkSize(); height += ch.height; ch.parent = this; } this.size = size; this.height = height; this.parent = null; } BranchChunk.prototype = { chunkSize: function() { return this.size; }, removeInner: function(at, n) { this.size -= n; for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at < sz) { var rm = Math.min(n, sz - at), oldHeight = child.height; child.removeInner(at, rm); this.height -= oldHeight - child.height; if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } if ((n -= rm) == 0) break; at = 0; } else at -= sz; } // If the result is smaller than 25 lines, ensure that it is a // single leaf node. if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { var lines = []; this.collapse(lines); this.children = [new LeafChunk(lines)]; this.children[0].parent = this; } }, collapse: function(lines) { for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines); }, insertInner: function(at, lines, height) { this.size += lines.length; this.height += height; for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at <= sz) { child.insertInner(at, lines, height); if (child.lines && child.lines.length > 50) { // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. var remaining = child.lines.length % 25 + 25 for (var pos = remaining; pos < child.lines.length;) { var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); child.height -= leaf.height; this.children.splice(++i, 0, leaf); leaf.parent = this; } child.lines = child.lines.slice(0, remaining); this.maybeSpill(); } break; } at -= sz; } }, // When a node has grown, check whether it should be split. maybeSpill: function() { if (this.children.length <= 10) return; var me = this; do { var spilled = me.children.splice(me.children.length - 5, 5); var sibling = new BranchChunk(spilled); if (!me.parent) { // Become the parent node var copy = new BranchChunk(me.children); copy.parent = me; me.children = [copy, sibling]; me = copy; } else { me.size -= sibling.size; me.height -= sibling.height; var myIndex = indexOf(me.parent.children, me); me.parent.children.splice(myIndex + 1, 0, sibling); } sibling.parent = me.parent; } while (me.children.length > 10); me.parent.maybeSpill(); }, iterN: function(at, n, op) { for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at < sz) { var used = Math.min(n, sz - at); if (child.iterN(at, used, op)) return true; if ((n -= used) == 0) break; at = 0; } else at -= sz; } } }; var nextDocId = 0; var Doc = CodeMirror.Doc = function(text, mode, firstLine, lineSep) { if (!(this instanceof Doc)) return new Doc(text, mode, firstLine, lineSep); if (firstLine == null) firstLine = 0; BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); this.first = firstLine; this.scrollTop = this.scrollLeft = 0; this.cantEdit = false; this.cleanGeneration = 1; this.frontier = firstLine; var start = Pos(firstLine, 0); this.sel = simpleSelection(start); this.history = new History(null); this.id = ++nextDocId; this.modeOption = mode; this.lineSep = lineSep; this.extend = false; if (typeof text == "string") text = this.splitLines(text); updateDoc(this, {from: start, to: start, text: text}); setSelection(this, simpleSelection(start), sel_dontScroll); }; Doc.prototype = createObj(BranchChunk.prototype, { constructor: Doc, // Iterate over the document. Supports two forms -- with only one // argument, it calls that for each line in the document. With // three, it iterates over the range given by the first two (with // the second being non-inclusive). iter: function(from, to, op) { if (op) this.iterN(from - this.first, to - from, op); else this.iterN(this.first, this.first + this.size, from); }, // Non-public interface for adding and removing lines. insert: function(at, lines) { var height = 0; for (var i = 0; i < lines.length; ++i) height += lines[i].height; this.insertInner(at - this.first, lines, height); }, remove: function(at, n) { this.removeInner(at - this.first, n); }, // From here, the methods are part of the public interface. Most // are also available from CodeMirror (editor) instances. getValue: function(lineSep) { var lines = getLines(this, this.first, this.first + this.size); if (lineSep === false) return lines; return lines.join(lineSep || this.lineSeparator()); }, setValue: docMethodOp(function(code) { var top = Pos(this.first, 0), last = this.first + this.size - 1; makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), text: this.splitLines(code), origin: "setValue", full: true}, true); setSelection(this, simpleSelection(top)); }), replaceRange: function(code, from, to, origin) { from = clipPos(this, from); to = to ? clipPos(this, to) : from; replaceRange(this, code, from, to, origin); }, getRange: function(from, to, lineSep) { var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); if (lineSep === false) return lines; return lines.join(lineSep || this.lineSeparator()); }, getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, getLineNumber: function(line) {return lineNo(line);}, getLineHandleVisualStart: function(line) { if (typeof line == "number") line = getLine(this, line); return visualLine(line); }, lineCount: function() {return this.size;}, firstLine: function() {return this.first;}, lastLine: function() {return this.first + this.size - 1;}, clipPos: function(pos) {return clipPos(this, pos);}, getCursor: function(start) { var range = this.sel.primary(), pos; if (start == null || start == "head") pos = range.head; else if (start == "anchor") pos = range.anchor; else if (start == "end" || start == "to" || start === false) pos = range.to(); else pos = range.from(); return pos; }, listSelections: function() { return this.sel.ranges; }, somethingSelected: function() {return this.sel.somethingSelected();}, setCursor: docMethodOp(function(line, ch, options) { setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); }), setSelection: docMethodOp(function(anchor, head, options) { setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); }), extendSelection: docMethodOp(function(head, other, options) { extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); }), extendSelections: docMethodOp(function(heads, options) { extendSelections(this, clipPosArray(this, heads), options); }), extendSelectionsBy: docMethodOp(function(f, options) { var heads = map(this.sel.ranges, f); extendSelections(this, clipPosArray(this, heads), options); }), setSelections: docMethodOp(function(ranges, primary, options) { if (!ranges.length) return; for (var i = 0, out = []; i < ranges.length; i++) out[i] = new Range(clipPos(this, ranges[i].anchor), clipPos(this, ranges[i].head)); if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex); setSelection(this, normalizeSelection(out, primary), options); }), addSelection: docMethodOp(function(anchor, head, options) { var ranges = this.sel.ranges.slice(0); ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); }), getSelection: function(lineSep) { var ranges = this.sel.ranges, lines; for (var i = 0; i < ranges.length; i++) { var sel = getBetween(this, ranges[i].from(), ranges[i].to()); lines = lines ? lines.concat(sel) : sel; } if (lineSep === false) return lines; else return lines.join(lineSep || this.lineSeparator()); }, getSelections: function(lineSep) { var parts = [], ranges = this.sel.ranges; for (var i = 0; i < ranges.length; i++) { var sel = getBetween(this, ranges[i].from(), ranges[i].to()); if (lineSep !== false) sel = sel.join(lineSep || this.lineSeparator()); parts[i] = sel; } return parts; }, replaceSelection: function(code, collapse, origin) { var dup = []; for (var i = 0; i < this.sel.ranges.length; i++) dup[i] = code; this.replaceSelections(dup, collapse, origin || "+input"); }, replaceSelections: docMethodOp(function(code, collapse, origin) { var changes = [], sel = this.sel; for (var i = 0; i < sel.ranges.length; i++) { var range = sel.ranges[i]; changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin}; } var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); for (var i = changes.length - 1; i >= 0; i--) makeChange(this, changes[i]); if (newSel) setSelectionReplaceHistory(this, newSel); else if (this.cm) ensureCursorVisible(this.cm); }), undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), setExtending: function(val) {this.extend = val;}, getExtending: function() {return this.extend;}, historySize: function() { var hist = this.history, done = 0, undone = 0; for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done; for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone; return {undo: done, redo: undone}; }, clearHistory: function() {this.history = new History(this.history.maxGeneration);}, markClean: function() { this.cleanGeneration = this.changeGeneration(true); }, changeGeneration: function(forceSplit) { if (forceSplit) this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; return this.history.generation; }, isClean: function (gen) { return this.history.generation == (gen || this.cleanGeneration); }, getHistory: function() { return {done: copyHistoryArray(this.history.done), undone: copyHistoryArray(this.history.undone)}; }, setHistory: function(histData) { var hist = this.history = new History(this.history.maxGeneration); hist.done = copyHistoryArray(histData.done.slice(0), null, true); hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); }, addLineClass: docMethodOp(function(handle, where, cls) { return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; if (!line[prop]) line[prop] = cls; else if (classTest(cls).test(line[prop])) return false; else line[prop] += " " + cls; return true; }); }), removeLineClass: docMethodOp(function(handle, where, cls) { return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; var cur = line[prop]; if (!cur) return false; else if (cls == null) line[prop] = null; else { var found = cur.match(classTest(cls)); if (!found) return false; var end = found.index + found[0].length; line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; } return true; }); }), addLineWidget: docMethodOp(function(handle, node, options) { return addLineWidget(this, handle, node, options); }), removeLineWidget: function(widget) { widget.clear(); }, markText: function(from, to, options) { return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range"); }, setBookmark: function(pos, options) { var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), insertLeft: options && options.insertLeft, clearWhenEmpty: false, shared: options && options.shared, handleMouseEvents: options && options.handleMouseEvents}; pos = clipPos(this, pos); return markText(this, pos, pos, realOpts, "bookmark"); }, findMarksAt: function(pos) { pos = clipPos(this, pos); var markers = [], spans = getLine(this, pos.line).markedSpans; if (spans) for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) markers.push(span.marker.parent || span.marker); } return markers; }, findMarks: function(from, to, filter) { from = clipPos(this, from); to = clipPos(this, to); var found = [], lineNo = from.line; this.iter(from.line, to.line + 1, function(line) { var spans = line.markedSpans; if (spans) for (var i = 0; i < spans.length; i++) { var span = spans[i]; if (!(span.to != null && lineNo == from.line && from.ch >= span.to || span.from == null && lineNo != from.line || span.from != null && lineNo == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) found.push(span.marker.parent || span.marker); } ++lineNo; }); return found; }, getAllMarks: function() { var markers = []; this.iter(function(line) { var sps = line.markedSpans; if (sps) for (var i = 0; i < sps.length; ++i) if (sps[i].from != null) markers.push(sps[i].marker); }); return markers; }, posFromIndex: function(off) { var ch, lineNo = this.first, sepSize = this.lineSeparator().length; this.iter(function(line) { var sz = line.text.length + sepSize; if (sz > off) { ch = off; return true; } off -= sz; ++lineNo; }); return clipPos(this, Pos(lineNo, ch)); }, indexFromPos: function (coords) { coords = clipPos(this, coords); var index = coords.ch; if (coords.line < this.first || coords.ch < 0) return 0; var sepSize = this.lineSeparator().length; this.iter(this.first, coords.line, function (line) { index += line.text.length + sepSize; }); return index; }, copy: function(copyHistory) { var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep); doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; doc.sel = this.sel; doc.extend = false; if (copyHistory) { doc.history.undoDepth = this.history.undoDepth; doc.setHistory(this.getHistory()); } return doc; }, linkedDoc: function(options) { if (!options) options = {}; var from = this.first, to = this.first + this.size; if (options.from != null && options.from > from) from = options.from; if (options.to != null && options.to < to) to = options.to; var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep); if (options.sharedHist) copy.history = this.history; (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; copySharedMarkers(copy, findSharedMarkers(this)); return copy; }, unlinkDoc: function(other) { if (other instanceof CodeMirror) other = other.doc; if (this.linked) for (var i = 0; i < this.linked.length; ++i) { var link = this.linked[i]; if (link.doc != other) continue; this.linked.splice(i, 1); other.unlinkDoc(this); detachSharedMarkers(findSharedMarkers(this)); break; } // If the histories were shared, split them again if (other.history == this.history) { var splitIds = [other.id]; linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); other.history = new History(null); other.history.done = copyHistoryArray(this.history.done, splitIds); other.history.undone = copyHistoryArray(this.history.undone, splitIds); } }, iterLinkedDocs: function(f) {linkedDocs(this, f);}, getMode: function() {return this.mode;}, getEditor: function() {return this.cm;}, splitLines: function(str) { if (this.lineSep) return str.split(this.lineSep); return splitLinesAuto(str); }, lineSeparator: function() { return this.lineSep || "\n"; } }); // Public alias. Doc.prototype.eachLine = Doc.prototype.iter; // Set up methods on CodeMirror's prototype to redirect to the editor's document. var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) CodeMirror.prototype[prop] = (function(method) { return function() {return method.apply(this.doc, arguments);}; })(Doc.prototype[prop]); eventMixin(Doc); // Call f for all linked documents. function linkedDocs(doc, f, sharedHistOnly) { function propagate(doc, skip, sharedHist) { if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { var rel = doc.linked[i]; if (rel.doc == skip) continue; var shared = sharedHist && rel.sharedHist; if (sharedHistOnly && !shared) continue; f(rel.doc, shared); propagate(rel.doc, doc, shared); } } propagate(doc, null, true); } // Attach a document to an editor. function attachDoc(cm, doc) { if (doc.cm) throw new Error("This document is already in use."); cm.doc = doc; doc.cm = cm; estimateLineHeights(cm); loadMode(cm); if (!cm.options.lineWrapping) findMaxLine(cm); cm.options.mode = doc.modeOption; regChange(cm); } // LINE UTILITIES // Find the line object corresponding to the given line number. function getLine(doc, n) { n -= doc.first; if (n < 0 || n >= doc.size) throw new Error("There is no line " + (n + doc.first) + " in the document."); for (var chunk = doc; !chunk.lines;) { for (var i = 0;; ++i) { var child = chunk.children[i], sz = child.chunkSize(); if (n < sz) { chunk = child; break; } n -= sz; } } return chunk.lines[n]; } // Get the part of a document between two positions, as an array of // strings. function getBetween(doc, start, end) { var out = [], n = start.line; doc.iter(start.line, end.line + 1, function(line) { var text = line.text; if (n == end.line) text = text.slice(0, end.ch); if (n == start.line) text = text.slice(start.ch); out.push(text); ++n; }); return out; } // Get the lines between from and to, as array of strings. function getLines(doc, from, to) { var out = []; doc.iter(from, to, function(line) { out.push(line.text); }); return out; } // Update the height of a line, propagating the height change // upwards to parent nodes. function updateLineHeight(line, height) { var diff = height - line.height; if (diff) for (var n = line; n; n = n.parent) n.height += diff; } // Given a line object, find its line number by walking up through // its parent links. function lineNo(line) { if (line.parent == null) return null; var cur = line.parent, no = indexOf(cur.lines, line); for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { for (var i = 0;; ++i) { if (chunk.children[i] == cur) break; no += chunk.children[i].chunkSize(); } } return no + cur.first; } // Find the line at the given vertical position, using the height // information in the document tree. function lineAtHeight(chunk, h) { var n = chunk.first; outer: do { for (var i = 0; i < chunk.children.length; ++i) { var child = chunk.children[i], ch = child.height; if (h < ch) { chunk = child; continue outer; } h -= ch; n += child.chunkSize(); } return n; } while (!chunk.lines); for (var i = 0; i < chunk.lines.length; ++i) { var line = chunk.lines[i], lh = line.height; if (h < lh) break; h -= lh; } return n + i; } // Find the height above the given line. function heightAtLine(lineObj) { lineObj = visualLine(lineObj); var h = 0, chunk = lineObj.parent; for (var i = 0; i < chunk.lines.length; ++i) { var line = chunk.lines[i]; if (line == lineObj) break; else h += line.height; } for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { for (var i = 0; i < p.children.length; ++i) { var cur = p.children[i]; if (cur == chunk) break; else h += cur.height; } } return h; } // Get the bidi ordering for the given line (and cache it). Returns // false for lines that are fully left-to-right, and an array of // BidiSpan objects otherwise. function getOrder(line) { var order = line.order; if (order == null) order = line.order = bidiOrdering(line.text); return order; } // HISTORY function History(startGen) { // Arrays of change events and selections. Doing something adds an // event to done and clears undo. Undoing moves events from done // to undone, redoing moves them in the other direction. this.done = []; this.undone = []; this.undoDepth = Infinity; // Used to track when changes can be merged into a single undo // event this.lastModTime = this.lastSelTime = 0; this.lastOp = this.lastSelOp = null; this.lastOrigin = this.lastSelOrigin = null; // Used by the isClean() method this.generation = this.maxGeneration = startGen || 1; } // Create a history change event from an updateDoc-style change // object. function historyChangeFromChange(doc, change) { var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); return histChange; } // Pop all selection events off the end of a history array. Stop at // a change event. function clearSelectionEvents(array) { while (array.length) { var last = lst(array); if (last.ranges) array.pop(); else break; } } // Find the top change event in the history. Pop off selection // events that are in the way. function lastChangeEvent(hist, force) { if (force) { clearSelectionEvents(hist.done); return lst(hist.done); } else if (hist.done.length && !lst(hist.done).ranges) { return lst(hist.done); } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { hist.done.pop(); return lst(hist.done); } } // Register a change in the history. Merges changes that are within // a single operation, or are close together with an origin that // allows merging (starting with "+") into a single event. function addChangeToHistory(doc, change, selAfter, opId) { var hist = doc.history; hist.undone.length = 0; var time = +new Date, cur; if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || change.origin.charAt(0) == "*")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) { // Merge this change into the last event var last = lst(cur.changes); if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { // Optimized case for simple insertion -- don't want to add // new changesets for every character typed last.to = changeEnd(change); } else { // Add new sub-event cur.changes.push(historyChangeFromChange(doc, change)); } } else { // Can not be merged, start a new event. var before = lst(hist.done); if (!before || !before.ranges) pushSelectionToHistory(doc.sel, hist.done); cur = {changes: [historyChangeFromChange(doc, change)], generation: hist.generation}; hist.done.push(cur); while (hist.done.length > hist.undoDepth) { hist.done.shift(); if (!hist.done[0].ranges) hist.done.shift(); } } hist.done.push(selAfter); hist.generation = ++hist.maxGeneration; hist.lastModTime = hist.lastSelTime = time; hist.lastOp = hist.lastSelOp = opId; hist.lastOrigin = hist.lastSelOrigin = change.origin; if (!last) signal(doc, "historyAdded"); } function selectionEventCanBeMerged(doc, origin, prev, sel) { var ch = origin.charAt(0); return ch == "*" || ch == "+" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); } // Called whenever the selection changes, sets the new selection as // the pending selection in the history, and pushes the old pending // selection into the 'done' array when it was significantly // different (in number of selected ranges, emptiness, or time). function addSelectionToHistory(doc, sel, opId, options) { var hist = doc.history, origin = options && options.origin; // A new event is started when the previous origin does not match // the current, or the origins don't allow matching. Origins // starting with * are always merged, those starting with + are // merged when similar and close together in time. if (opId == hist.lastSelOp || (origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) hist.done[hist.done.length - 1] = sel; else pushSelectionToHistory(sel, hist.done); hist.lastSelTime = +new Date; hist.lastSelOrigin = origin; hist.lastSelOp = opId; if (options && options.clearRedo !== false) clearSelectionEvents(hist.undone); } function pushSelectionToHistory(sel, dest) { var top = lst(dest); if (!(top && top.ranges && top.equals(sel))) dest.push(sel); } // Used to store marked span information in the history. function attachLocalSpans(doc, change, from, to) { var existing = change["spans_" + doc.id], n = 0; doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { if (line.markedSpans) (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; ++n; }); } // When un/re-doing restores text containing marked spans, those // that have been explicitly cleared should not be restored. function removeClearedSpans(spans) { if (!spans) return null; for (var i = 0, out; i < spans.length; ++i) { if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } else if (out) out.push(spans[i]); } return !out ? spans : out.length ? out : null; } // Retrieve and filter the old marked spans stored in a change event. function getOldSpans(doc, change) { var found = change["spans_" + doc.id]; if (!found) return null; for (var i = 0, nw = []; i < change.text.length; ++i) nw.push(removeClearedSpans(found[i])); return nw; } // Used both to provide a JSON-safe object in .getHistory, and, when // detaching a document, to split the history in two function copyHistoryArray(events, newGroup, instantiateSel) { for (var i = 0, copy = []; i < events.length; ++i) { var event = events[i]; if (event.ranges) { copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); continue; } var changes = event.changes, newChanges = []; copy.push({changes: newChanges}); for (var j = 0; j < changes.length; ++j) { var change = changes[j], m; newChanges.push({from: change.from, to: change.to, text: change.text}); if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { if (indexOf(newGroup, Number(m[1])) > -1) { lst(newChanges)[prop] = change[prop]; delete change[prop]; } } } } return copy; } // Rebasing/resetting history to deal with externally-sourced changes function rebaseHistSelSingle(pos, from, to, diff) { if (to < pos.line) { pos.line += diff; } else if (from < pos.line) { pos.line = from; pos.ch = 0; } } // Tries to rebase an array of history events given a change in the // document. If the change touches the same lines as the event, the // event, and everything 'behind' it, is discarded. If the change is // before the event, the event's positions are updated. Uses a // copy-on-write scheme for the positions, to avoid having to // reallocate them all on every rebase, but also avoid problems with // shared position objects being unsafely updated. function rebaseHistArray(array, from, to, diff) { for (var i = 0; i < array.length; ++i) { var sub = array[i], ok = true; if (sub.ranges) { if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } for (var j = 0; j < sub.ranges.length; j++) { rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); } continue; } for (var j = 0; j < sub.changes.length; ++j) { var cur = sub.changes[j]; if (to < cur.from.line) { cur.from = Pos(cur.from.line + diff, cur.from.ch); cur.to = Pos(cur.to.line + diff, cur.to.ch); } else if (from <= cur.to.line) { ok = false; break; } } if (!ok) { array.splice(0, i + 1); i = 0; } } } function rebaseHist(hist, change) { var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; rebaseHistArray(hist.done, from, to, diff); rebaseHistArray(hist.undone, from, to, diff); } // EVENT UTILITIES // Due to the fact that we still support jurassic IE versions, some // compatibility wrappers are needed. var e_preventDefault = CodeMirror.e_preventDefault = function(e) { if (e.preventDefault) e.preventDefault(); else e.returnValue = false; }; var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) { if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; }; function e_defaultPrevented(e) { return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; } var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);}; function e_target(e) {return e.target || e.srcElement;} function e_button(e) { var b = e.which; if (b == null) { if (e.button & 1) b = 1; else if (e.button & 2) b = 3; else if (e.button & 4) b = 2; } if (mac && e.ctrlKey && b == 1) b = 3; return b; } // EVENT HANDLING // Lightweight event framework. on/off also work on DOM nodes, // registering native DOM handlers. var on = CodeMirror.on = function(emitter, type, f) { if (emitter.addEventListener) emitter.addEventListener(type, f, false); else if (emitter.attachEvent) emitter.attachEvent("on" + type, f); else { var map = emitter._handlers || (emitter._handlers = {}); var arr = map[type] || (map[type] = []); arr.push(f); } }; var noHandlers = [] function getHandlers(emitter, type, copy) { var arr = emitter._handlers && emitter._handlers[type] if (copy) return arr && arr.length > 0 ? arr.slice() : noHandlers else return arr || noHandlers } var off = CodeMirror.off = function(emitter, type, f) { if (emitter.removeEventListener) emitter.removeEventListener(type, f, false); else if (emitter.detachEvent) emitter.detachEvent("on" + type, f); else { var handlers = getHandlers(emitter, type, false) for (var i = 0; i < handlers.length; ++i) if (handlers[i] == f) { handlers.splice(i, 1); break; } } }; var signal = CodeMirror.signal = function(emitter, type /*, values...*/) { var handlers = getHandlers(emitter, type, true) if (!handlers.length) return; var args = Array.prototype.slice.call(arguments, 2); for (var i = 0; i < handlers.length; ++i) handlers[i].apply(null, args); }; var orphanDelayedCallbacks = null; // Often, we want to signal events at a point where we are in the // middle of some work, but don't want the handler to start calling // other methods on the editor, which might be in an inconsistent // state or simply not expect any other events to happen. // signalLater looks whether there are any handlers, and schedules // them to be executed when the last operation ends, or, if no // operation is active, when a timeout fires. function signalLater(emitter, type /*, values...*/) { var arr = getHandlers(emitter, type, false) if (!arr.length) return; var args = Array.prototype.slice.call(arguments, 2), list; if (operationGroup) { list = operationGroup.delayedCallbacks; } else if (orphanDelayedCallbacks) { list = orphanDelayedCallbacks; } else { list = orphanDelayedCallbacks = []; setTimeout(fireOrphanDelayed, 0); } function bnd(f) {return function(){f.apply(null, args);};}; for (var i = 0; i < arr.length; ++i) list.push(bnd(arr[i])); } function fireOrphanDelayed() { var delayed = orphanDelayedCallbacks; orphanDelayedCallbacks = null; for (var i = 0; i < delayed.length; ++i) delayed[i](); } // The DOM events that CodeMirror handles can be overridden by // registering a (non-DOM) handler on the editor for the event name, // and preventDefault-ing the event in that handler. function signalDOMEvent(cm, e, override) { if (typeof e == "string") e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; signal(cm, override || e.type, cm, e); return e_defaultPrevented(e) || e.codemirrorIgnore; } function signalCursorActivity(cm) { var arr = cm._handlers && cm._handlers.cursorActivity; if (!arr) return; var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1) set.push(arr[i]); } function hasHandler(emitter, type) { return getHandlers(emitter, type).length > 0 } // Add on and off methods to a constructor's prototype, to make // registering events on such objects more convenient. function eventMixin(ctor) { ctor.prototype.on = function(type, f) {on(this, type, f);}; ctor.prototype.off = function(type, f) {off(this, type, f);}; } // MISC UTILITIES // Number of pixels added to scroller and sizer to hide scrollbar var scrollerGap = 30; // Returned or thrown by various protocols to signal 'I'm not // handling this'. var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; // Reused option objects for setSelection & friends var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; function Delayed() {this.id = null;} Delayed.prototype.set = function(ms, f) { clearTimeout(this.id); this.id = setTimeout(f, ms); }; // Counts the column offset in a string, taking tabs into account. // Used mostly to find indentation. var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) { if (end == null) { end = string.search(/[^\s\u00a0]/); if (end == -1) end = string.length; } for (var i = startIndex || 0, n = startValue || 0;;) { var nextTab = string.indexOf("\t", i); if (nextTab < 0 || nextTab >= end) return n + (end - i); n += nextTab - i; n += tabSize - (n % tabSize); i = nextTab + 1; } }; // The inverse of countColumn -- find the offset that corresponds to // a particular column. var findColumn = CodeMirror.findColumn = function(string, goal, tabSize) { for (var pos = 0, col = 0;;) { var nextTab = string.indexOf("\t", pos); if (nextTab == -1) nextTab = string.length; var skipped = nextTab - pos; if (nextTab == string.length || col + skipped >= goal) return pos + Math.min(skipped, goal - col); col += nextTab - pos; col += tabSize - (col % tabSize); pos = nextTab + 1; if (col >= goal) return pos; } } var spaceStrs = [""]; function spaceStr(n) { while (spaceStrs.length <= n) spaceStrs.push(lst(spaceStrs) + " "); return spaceStrs[n]; } function lst(arr) { return arr[arr.length-1]; } var selectInput = function(node) { node.select(); }; if (ios) // Mobile Safari apparently has a bug where select() is broken. selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; else if (ie) // Suppress mysterious IE10 errors selectInput = function(node) { try { node.select(); } catch(_e) {} }; function indexOf(array, elt) { for (var i = 0; i < array.length; ++i) if (array[i] == elt) return i; return -1; } function map(array, f) { var out = []; for (var i = 0; i < array.length; i++) out[i] = f(array[i], i); return out; } function insertSorted(array, value, score) { var pos = 0, priority = score(value) while (pos < array.length && score(array[pos]) <= priority) pos++ array.splice(pos, 0, value) } function nothing() {} function createObj(base, props) { var inst; if (Object.create) { inst = Object.create(base); } else { nothing.prototype = base; inst = new nothing(); } if (props) copyObj(props, inst); return inst; }; function copyObj(obj, target, overwrite) { if (!target) target = {}; for (var prop in obj) if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) target[prop] = obj[prop]; return target; } function bind(f) { var args = Array.prototype.slice.call(arguments, 1); return function(){return f.apply(null, args);}; } var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; var isWordCharBasic = CodeMirror.isWordChar = function(ch) { return /\w/.test(ch) || ch > "\x80" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); }; function isWordChar(ch, helper) { if (!helper) return isWordCharBasic(ch); if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) return true; return helper.test(ch); } function isEmpty(obj) { for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; return true; } // Extending unicode characters. A series of a non-extending char + // any number of extending chars is treated as a single unit as far // as editing and measuring is concerned. This is not fully correct, // since some scripts/fonts/browsers also treat other configurations // of code points as a group. var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); } // DOM UTILITIES function elt(tag, content, className, style) { var e = document.createElement(tag); if (className) e.className = className; if (style) e.style.cssText = style; if (typeof content == "string") e.appendChild(document.createTextNode(content)); else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); return e; } var range; if (document.createRange) range = function(node, start, end, endNode) { var r = document.createRange(); r.setEnd(endNode || node, end); r.setStart(node, start); return r; }; else range = function(node, start, end) { var r = document.body.createTextRange(); try { r.moveToElementText(node.parentNode); } catch(e) { return r; } r.collapse(true); r.moveEnd("character", end); r.moveStart("character", start); return r; }; function removeChildren(e) { for (var count = e.childNodes.length; count > 0; --count) e.removeChild(e.firstChild); return e; } function removeChildrenAndAdd(parent, e) { return removeChildren(parent).appendChild(e); } var contains = CodeMirror.contains = function(parent, child) { if (child.nodeType == 3) // Android browser always returns false when child is a textnode child = child.parentNode; if (parent.contains) return parent.contains(child); do { if (child.nodeType == 11) child = child.host; if (child == parent) return true; } while (child = child.parentNode); }; function activeElt() { var activeElement = document.activeElement; while (activeElement && activeElement.root && activeElement.root.activeElement) activeElement = activeElement.root.activeElement; return activeElement; } // Older versions of IE throws unspecified error when touching // document.activeElement in some cases (during loading, in iframe) if (ie && ie_version < 11) activeElt = function() { try { return document.activeElement; } catch(e) { return document.body; } }; function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); } var rmClass = CodeMirror.rmClass = function(node, cls) { var current = node.className; var match = classTest(cls).exec(current); if (match) { var after = current.slice(match.index + match[0].length); node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); } }; var addClass = CodeMirror.addClass = function(node, cls) { var current = node.className; if (!classTest(cls).test(current)) node.className += (current ? " " : "") + cls; }; function joinClasses(a, b) { var as = a.split(" "); for (var i = 0; i < as.length; i++) if (as[i] && !classTest(as[i]).test(b)) b += " " + as[i]; return b; } // WINDOW-WIDE EVENTS // These must be handled carefully, because naively registering a // handler for each editor will cause the editors to never be // garbage collected. function forEachCodeMirror(f) { if (!document.body.getElementsByClassName) return; var byClass = document.body.getElementsByClassName("CodeMirror"); for (var i = 0; i < byClass.length; i++) { var cm = byClass[i].CodeMirror; if (cm) f(cm); } } var globalsRegistered = false; function ensureGlobalHandlers() { if (globalsRegistered) return; registerGlobalHandlers(); globalsRegistered = true; } function registerGlobalHandlers() { // When the window resizes, we need to refresh active editors. var resizeTimer; on(window, "resize", function() { if (resizeTimer == null) resizeTimer = setTimeout(function() { resizeTimer = null; forEachCodeMirror(onResize); }, 100); }); // When the window loses focus, we want to show the editor as blurred on(window, "blur", function() { forEachCodeMirror(onBlur); }); } // FEATURE DETECTION // Detect drag-and-drop var dragAndDrop = function() { // There is *some* kind of drag-and-drop support in IE6-8, but I // couldn't get it to work yet. if (ie && ie_version < 9) return false; var div = elt('div'); return "draggable" in div || "dragDrop" in div; }(); var zwspSupported; function zeroWidthElement(measure) { if (zwspSupported == null) { var test = elt("span", "\u200b"); removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); if (measure.firstChild.offsetHeight != 0) zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); } var node = zwspSupported ? elt("span", "\u200b") : elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); node.setAttribute("cm-text", ""); return node; } // Feature-detect IE's crummy client rect reporting for bidi text var badBidiRects; function hasBadBidiRects(measure) { if (badBidiRects != null) return badBidiRects; var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); var r0 = range(txt, 0, 1).getBoundingClientRect(); var r1 = range(txt, 1, 2).getBoundingClientRect(); removeChildren(measure); if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780) return badBidiRects = (r1.right - r0.right < 3); } // See if "".split is the broken IE version, if so, provide an // alternative way to split lines. var splitLinesAuto = CodeMirror.splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { var pos = 0, result = [], l = string.length; while (pos <= l) { var nl = string.indexOf("\n", pos); if (nl == -1) nl = string.length; var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); var rt = line.indexOf("\r"); if (rt != -1) { result.push(line.slice(0, rt)); pos += rt + 1; } else { result.push(line); pos = nl + 1; } } return result; } : function(string){return string.split(/\r\n?|\n/);}; var hasSelection = window.getSelection ? function(te) { try { return te.selectionStart != te.selectionEnd; } catch(e) { return false; } } : function(te) { try {var range = te.ownerDocument.selection.createRange();} catch(e) {} if (!range || range.parentElement() != te) return false; return range.compareEndPoints("StartToEnd", range) != 0; }; var hasCopyEvent = (function() { var e = elt("div"); if ("oncopy" in e) return true; e.setAttribute("oncopy", "return;"); return typeof e.oncopy == "function"; })(); var badZoomedRects = null; function hasBadZoomedRects(measure) { if (badZoomedRects != null) return badZoomedRects; var node = removeChildrenAndAdd(measure, elt("span", "x")); var normal = node.getBoundingClientRect(); var fromRange = range(node, 0, 1).getBoundingClientRect(); return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; } // KEY NAMES var keyNames = CodeMirror.keyNames = { 3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete", 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" }; (function() { // Number keys for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i); // Alphabetic keys for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); // Function keys for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; })(); // BIDI HELPERS function iterateBidiSections(order, from, to, f) { if (!order) return f(from, to, "ltr"); var found = false; for (var i = 0; i < order.length; ++i) { var part = order[i]; if (part.from < to && part.to > from || from == to && part.to == from) { f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); found = true; } } if (!found) f(from, to, "ltr"); } function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } function bidiRight(part) { return part.level % 2 ? part.from : part.to; } function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } function lineRight(line) { var order = getOrder(line); if (!order) return line.text.length; return bidiRight(lst(order)); } function lineStart(cm, lineN) { var line = getLine(cm.doc, lineN); var visual = visualLine(line); if (visual != line) lineN = lineNo(visual); var order = getOrder(visual); var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); return Pos(lineN, ch); } function lineEnd(cm, lineN) { var merged, line = getLine(cm.doc, lineN); while (merged = collapsedSpanAtEnd(line)) { line = merged.find(1, true).line; lineN = null; } var order = getOrder(line); var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); return Pos(lineN == null ? lineNo(line) : lineN, ch); } function lineStartSmart(cm, pos) { var start = lineStart(cm, pos.line); var line = getLine(cm.doc, start.line); var order = getOrder(line); if (!order || order[0].level == 0) { var firstNonWS = Math.max(0, line.text.search(/\S/)); var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; return Pos(start.line, inWS ? 0 : firstNonWS); } return start; } function compareBidiLevel(order, a, b) { var linedir = order[0].level; if (a == linedir) return true; if (b == linedir) return false; return a < b; } var bidiOther; function getBidiPartAt(order, pos) { bidiOther = null; for (var i = 0, found; i < order.length; ++i) { var cur = order[i]; if (cur.from < pos && cur.to > pos) return i; if ((cur.from == pos || cur.to == pos)) { if (found == null) { found = i; } else if (compareBidiLevel(order, cur.level, order[found].level)) { if (cur.from != cur.to) bidiOther = found; return i; } else { if (cur.from != cur.to) bidiOther = i; return found; } } } return found; } function moveInLine(line, pos, dir, byUnit) { if (!byUnit) return pos + dir; do pos += dir; while (pos > 0 && isExtendingChar(line.text.charAt(pos))); return pos; } // This is needed in order to move 'visually' through bi-directional // text -- i.e., pressing left should make the cursor go left, even // when in RTL text. The tricky part is the 'jumps', where RTL and // LTR text touch each other. This often requires the cursor offset // to move more than one unit, in order to visually move one unit. function moveVisually(line, start, dir, byUnit) { var bidi = getOrder(line); if (!bidi) return moveLogically(line, start, dir, byUnit); var pos = getBidiPartAt(bidi, start), part = bidi[pos]; var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); for (;;) { if (target > part.from && target < part.to) return target; if (target == part.from || target == part.to) { if (getBidiPartAt(bidi, target) == pos) return target; part = bidi[pos += dir]; return (dir > 0) == part.level % 2 ? part.to : part.from; } else { part = bidi[pos += dir]; if (!part) return null; if ((dir > 0) == part.level % 2) target = moveInLine(line, part.to, -1, byUnit); else target = moveInLine(line, part.from, 1, byUnit); } } } function moveLogically(line, start, dir, byUnit) { var target = start + dir; if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir; return target < 0 || target > line.text.length ? null : target; } // Bidirectional ordering algorithm // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm // that this (partially) implements. // One-char codes used for character types: // L (L): Left-to-Right // R (R): Right-to-Left // r (AL): Right-to-Left Arabic // 1 (EN): European Number // + (ES): European Number Separator // % (ET): European Number Terminator // n (AN): Arabic Number // , (CS): Common Number Separator // m (NSM): Non-Spacing Mark // b (BN): Boundary Neutral // s (B): Paragraph Separator // t (S): Segment Separator // w (WS): Whitespace // N (ON): Other Neutrals // Returns null if characters are ordered as they appear // (left-to-right), or an array of sections ({from, to, level} // objects) in the order in which they occur visually. var bidiOrdering = (function() { // Character types for codepoints 0 to 0xff var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; // Character types for codepoints 0x600 to 0x6ff var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm"; function charType(code) { if (code <= 0xf7) return lowTypes.charAt(code); else if (0x590 <= code && code <= 0x5f4) return "R"; else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600); else if (0x6ee <= code && code <= 0x8ac) return "r"; else if (0x2000 <= code && code <= 0x200b) return "w"; else if (code == 0x200c) return "b"; else return "L"; } var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; // Browsers seem to always treat the boundaries of block elements as being L. var outerType = "L"; function BidiSpan(level, from, to) { this.level = level; this.from = from; this.to = to; } return function(str) { if (!bidiRE.test(str)) return false; var len = str.length, types = []; for (var i = 0, type; i < len; ++i) types.push(type = charType(str.charCodeAt(i))); // W1. Examine each non-spacing mark (NSM) in the level run, and // change the type of the NSM to the type of the previous // character. If the NSM is at the start of the level run, it will // get the type of sor. for (var i = 0, prev = outerType; i < len; ++i) { var type = types[i]; if (type == "m") types[i] = prev; else prev = type; } // W2. Search backwards from each instance of a European number // until the first strong type (R, L, AL, or sor) is found. If an // AL is found, change the type of the European number to Arabic // number. // W3. Change all ALs to R. for (var i = 0, cur = outerType; i < len; ++i) { var type = types[i]; if (type == "1" && cur == "r") types[i] = "n"; else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } } // W4. A single European separator between two European numbers // changes to a European number. A single common separator between // two numbers of the same type changes to that type. for (var i = 1, prev = types[0]; i < len - 1; ++i) { var type = types[i]; if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; else if (type == "," && prev == types[i+1] && (prev == "1" || prev == "n")) types[i] = prev; prev = type; } // W5. A sequence of European terminators adjacent to European // numbers changes to all European numbers. // W6. Otherwise, separators and terminators change to Other // Neutral. for (var i = 0; i < len; ++i) { var type = types[i]; if (type == ",") types[i] = "N"; else if (type == "%") { for (var end = i + 1; end < len && types[end] == "%"; ++end) {} var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; for (var j = i; j < end; ++j) types[j] = replace; i = end - 1; } } // W7. Search backwards from each instance of a European number // until the first strong type (R, L, or sor) is found. If an L is // found, then change the type of the European number to L. for (var i = 0, cur = outerType; i < len; ++i) { var type = types[i]; if (cur == "L" && type == "1") types[i] = "L"; else if (isStrong.test(type)) cur = type; } // N1. A sequence of neutrals takes the direction of the // surrounding strong text if the text on both sides has the same // direction. European and Arabic numbers act as if they were R in // terms of their influence on neutrals. Start-of-level-run (sor) // and end-of-level-run (eor) are used at level run boundaries. // N2. Any remaining neutrals take the embedding direction. for (var i = 0; i < len; ++i) { if (isNeutral.test(types[i])) { for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} var before = (i ? types[i-1] : outerType) == "L"; var after = (end < len ? types[end] : outerType) == "L"; var replace = before || after ? "L" : "R"; for (var j = i; j < end; ++j) types[j] = replace; i = end - 1; } } // Here we depart from the documented algorithm, in order to avoid // building up an actual levels array. Since there are only three // levels (0, 1, 2) in an implementation that doesn't take // explicit embedding into account, we can build up the order on // the fly, without following the level-based algorithm. var order = [], m; for (var i = 0; i < len;) { if (countsAsLeft.test(types[i])) { var start = i; for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} order.push(new BidiSpan(0, start, i)); } else { var pos = i, at = order.length; for (++i; i < len && types[i] != "L"; ++i) {} for (var j = pos; j < i;) { if (countsAsNum.test(types[j])) { if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j)); var nstart = j; for (++j; j < i && countsAsNum.test(types[j]); ++j) {} order.splice(at, 0, new BidiSpan(2, nstart, j)); pos = j; } else ++j; } if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i)); } } if (order[0].level == 1 && (m = str.match(/^\s+/))) { order[0].from = m[0].length; order.unshift(new BidiSpan(0, 0, m[0].length)); } if (lst(order).level == 1 && (m = str.match(/\s+$/))) { lst(order).to -= m[0].length; order.push(new BidiSpan(0, len - m[0].length, len)); } if (order[0].level == 2) order.unshift(new BidiSpan(1, order[0].to, order[0].to)); if (order[0].level != lst(order).level) order.push(new BidiSpan(order[0].level, len, len)); return order; }; })(); // THE END CodeMirror.version = "5.18.2"; return CodeMirror; }); application/library/codemirror/mode/puppet/puppet.js000064400000016620146731177160017016 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("puppet", function () { // Stores the words from the define method var words = {}; // Taken, mostly, from the Puppet official variable standards regex var variable_regex = /({)?([a-z][a-z0-9_]*)?((::[a-z][a-z0-9_]*)*::)?[a-zA-Z0-9_]+(})?/; // Takes a string of words separated by spaces and adds them as // keys with the value of the first argument 'style' function define(style, string) { var split = string.split(' '); for (var i = 0; i < split.length; i++) { words[split[i]] = style; } } // Takes commonly known puppet types/words and classifies them to a style define('keyword', 'class define site node include import inherits'); define('keyword', 'case if else in and elsif default or'); define('atom', 'false true running present absent file directory undef'); define('builtin', 'action augeas burst chain computer cron destination dport exec ' + 'file filebucket group host icmp iniface interface jump k5login limit log_level ' + 'log_prefix macauthorization mailalias maillist mcx mount nagios_command ' + 'nagios_contact nagios_contactgroup nagios_host nagios_hostdependency ' + 'nagios_hostescalation nagios_hostextinfo nagios_hostgroup nagios_service ' + 'nagios_servicedependency nagios_serviceescalation nagios_serviceextinfo ' + 'nagios_servicegroup nagios_timeperiod name notify outiface package proto reject ' + 'resources router schedule scheduled_task selboolean selmodule service source ' + 'sport ssh_authorized_key sshkey stage state table tidy todest toports tosource ' + 'user vlan yumrepo zfs zone zpool'); // After finding a start of a string ('|") this function attempts to find the end; // If a variable is encountered along the way, we display it differently when it // is encapsulated in a double-quoted string. function tokenString(stream, state) { var current, prev, found_var = false; while (!stream.eol() && (current = stream.next()) != state.pending) { if (current === '$' && prev != '\\' && state.pending == '"') { found_var = true; break; } prev = current; } if (found_var) { stream.backUp(1); } if (current == state.pending) { state.continueString = false; } else { state.continueString = true; } return "string"; } // Main function function tokenize(stream, state) { // Matches one whole word var word = stream.match(/[\w]+/, false); // Matches attributes (i.e. ensure => present ; 'ensure' would be matched) var attribute = stream.match(/(\s+)?\w+\s+=>.*/, false); // Matches non-builtin resource declarations // (i.e. "apache::vhost {" or "mycustomclasss {" would be matched) var resource = stream.match(/(\s+)?[\w:_]+(\s+)?{/, false); // Matches virtual and exported resources (i.e. @@user { ; and the like) var special_resource = stream.match(/(\s+)?[@]{1,2}[\w:_]+(\s+)?{/, false); // Finally advance the stream var ch = stream.next(); // Have we found a variable? if (ch === '$') { if (stream.match(variable_regex)) { // If so, and its in a string, assign it a different color return state.continueString ? 'variable-2' : 'variable'; } // Otherwise return an invalid variable return "error"; } // Should we still be looking for the end of a string? if (state.continueString) { // If so, go through the loop again stream.backUp(1); return tokenString(stream, state); } // Are we in a definition (class, node, define)? if (state.inDefinition) { // If so, return def (i.e. for 'class myclass {' ; 'myclass' would be matched) if (stream.match(/(\s+)?[\w:_]+(\s+)?/)) { return 'def'; } // Match the rest it the next time around stream.match(/\s+{/); state.inDefinition = false; } // Are we in an 'include' statement? if (state.inInclude) { // Match and return the included class stream.match(/(\s+)?\S+(\s+)?/); state.inInclude = false; return 'def'; } // Do we just have a function on our hands? // In 'ensure_resource("myclass")', 'ensure_resource' is matched if (stream.match(/(\s+)?\w+\(/)) { stream.backUp(1); return 'def'; } // Have we matched the prior attribute regex? if (attribute) { stream.match(/(\s+)?\w+/); return 'tag'; } // Do we have Puppet specific words? if (word && words.hasOwnProperty(word)) { // Negates the initial next() stream.backUp(1); // rs move the stream stream.match(/[\w]+/); // We want to process these words differently // do to the importance they have in Puppet if (stream.match(/\s+\S+\s+{/, false)) { state.inDefinition = true; } if (word == 'include') { state.inInclude = true; } // Returns their value as state in the prior define methods return words[word]; } // Is there a match on a reference? if (/(^|\s+)[A-Z][\w:_]+/.test(word)) { // Negate the next() stream.backUp(1); // Match the full reference stream.match(/(^|\s+)[A-Z][\w:_]+/); return 'def'; } // Have we matched the prior resource regex? if (resource) { stream.match(/(\s+)?[\w:_]+/); return 'def'; } // Have we matched the prior special_resource regex? if (special_resource) { stream.match(/(\s+)?[@]{1,2}/); return 'special'; } // Match all the comments. All of them. if (ch == "#") { stream.skipToEnd(); return "comment"; } // Have we found a string? if (ch == "'" || ch == '"') { // Store the type (single or double) state.pending = ch; // Perform the looping function to find the end return tokenString(stream, state); } // Match all the brackets if (ch == '{' || ch == '}') { return 'bracket'; } // Match characters that we are going to assume // are trying to be regex if (ch == '/') { stream.match(/.*?\//); return 'variable-3'; } // Match all the numbers if (ch.match(/[0-9]/)) { stream.eatWhile(/[0-9]+/); return 'number'; } // Match the '=' and '=>' operators if (ch == '=') { if (stream.peek() == '>') { stream.next(); } return "operator"; } // Keep advancing through all the rest stream.eatWhile(/[\w-]/); // Return a blank line for everything else return null; } // Start it all return { startState: function () { var state = {}; state.inDefinition = false; state.inInclude = false; state.continueString = false; state.pending = false; return state; }, token: function (stream, state) { // Strip the spaces, but regex will account for them eitherway if (stream.eatSpace()) return null; // Go through the main process return tokenize(stream, state); } }; }); CodeMirror.defineMIME("text/x-puppet", "puppet"); }); application/library/codemirror/mode/puppet/index.html000064400000006274146731177160017144 0ustar00 CodeMirror: Puppet mode

Puppet mode

MIME types defined: text/x-puppet.

application/library/codemirror/mode/z80/z80.js000064400000006771146731177160015234 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('z80', function(_config, parserConfig) { var ez80 = parserConfig.ez80; var keywords1, keywords2; if (ez80) { keywords1 = /^(exx?|(ld|cp)([di]r?)?|[lp]ea|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|[de]i|halt|im|in([di]mr?|ir?|irx|2r?)|ot(dmr?|[id]rx|imr?)|out(0?|[di]r?|[di]2r?)|tst(io)?|slp)(\.([sl]?i)?[sl])?\b/i; keywords2 = /^(((call|j[pr]|rst|ret[in]?)(\.([sl]?i)?[sl])?)|(rs|st)mix)\b/i; } else { keywords1 = /^(exx?|(ld|cp|in)([di]r?)?|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|rst|[de]i|halt|im|ot[di]r|out[di]?)\b/i; keywords2 = /^(call|j[pr]|ret[in]?|b_?(call|jump))\b/i; } var variables1 = /^(af?|bc?|c|de?|e|hl?|l|i[xy]?|r|sp)\b/i; var variables2 = /^(n?[zc]|p[oe]?|m)\b/i; var errors = /^([hl][xy]|i[xy][hl]|slia|sll)\b/i; var numbers = /^([\da-f]+h|[0-7]+o|[01]+b|\d+d?)\b/i; return { startState: function() { return { context: 0 }; }, token: function(stream, state) { if (!stream.column()) state.context = 0; if (stream.eatSpace()) return null; var w; if (stream.eatWhile(/\w/)) { if (ez80 && stream.eat('.')) { stream.eatWhile(/\w/); } w = stream.current(); if (stream.indentation()) { if ((state.context == 1 || state.context == 4) && variables1.test(w)) { state.context = 4; return 'var2'; } if (state.context == 2 && variables2.test(w)) { state.context = 4; return 'var3'; } if (keywords1.test(w)) { state.context = 1; return 'keyword'; } else if (keywords2.test(w)) { state.context = 2; return 'keyword'; } else if (state.context == 4 && numbers.test(w)) { return 'number'; } if (errors.test(w)) return 'error'; } else if (stream.match(numbers)) { return 'number'; } else { return null; } } else if (stream.eat(';')) { stream.skipToEnd(); return 'comment'; } else if (stream.eat('"')) { while (w = stream.next()) { if (w == '"') break; if (w == '\\') stream.next(); } return 'string'; } else if (stream.eat('\'')) { if (stream.match(/\\?.'/)) return 'number'; } else if (stream.eat('.') || stream.sol() && stream.eat('#')) { state.context = 5; if (stream.eatWhile(/\w/)) return 'def'; } else if (stream.eat('$')) { if (stream.eatWhile(/[\da-f]/i)) return 'number'; } else if (stream.eat('%')) { if (stream.eatWhile(/[01]/)) return 'number'; } else { stream.next(); } return null; } }; }); CodeMirror.defineMIME("text/x-z80", "z80"); CodeMirror.defineMIME("text/x-ez80", { name: "z80", ez80: true }); }); application/library/codemirror/mode/z80/index.html000064400000002576146731177160016251 0ustar00 CodeMirror: Z80 assembly mode

Z80 assembly mode

MIME types defined: text/x-z80, text/x-ez80.

application/library/codemirror/mode/scheme/scheme.js000064400000032177146731177160016701 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Author: Koh Zi Han, based on implementation by Koh Zi Chun */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("scheme", function () { var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", ATOM = "atom", NUMBER = "number", BRACKET = "bracket"; var INDENT_WORD_SKIP = 2; function makeKeywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = makeKeywords("λ case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"); var indentKeys = makeKeywords("define let letrec let* lambda"); function stateStack(indent, type, prev) { // represents a state stack object this.indent = indent; this.type = type; this.prev = prev; } function pushStack(state, indent, type) { state.indentStack = new stateStack(indent, type, state.indentStack); } function popStack(state) { state.indentStack = state.indentStack.prev; } var binaryMatcher = new RegExp(/^(?:[-+]i|[-+][01]+#*(?:\/[01]+#*)?i|[-+]?[01]+#*(?:\/[01]+#*)?@[-+]?[01]+#*(?:\/[01]+#*)?|[-+]?[01]+#*(?:\/[01]+#*)?[-+](?:[01]+#*(?:\/[01]+#*)?)?i|[-+]?[01]+#*(?:\/[01]+#*)?)(?=[()\s;"]|$)/i); var octalMatcher = new RegExp(/^(?:[-+]i|[-+][0-7]+#*(?:\/[0-7]+#*)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?@[-+]?[0-7]+#*(?:\/[0-7]+#*)?|[-+]?[0-7]+#*(?:\/[0-7]+#*)?[-+](?:[0-7]+#*(?:\/[0-7]+#*)?)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?)(?=[()\s;"]|$)/i); var hexMatcher = new RegExp(/^(?:[-+]i|[-+][\da-f]+#*(?:\/[\da-f]+#*)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?@[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?[-+](?:[\da-f]+#*(?:\/[\da-f]+#*)?)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?)(?=[()\s;"]|$)/i); var decimalMatcher = new RegExp(/^(?:[-+]i|[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)i|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)@[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)?i|(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*))(?=[()\s;"]|$)/i); function isBinaryNumber (stream) { return stream.match(binaryMatcher); } function isOctalNumber (stream) { return stream.match(octalMatcher); } function isDecimalNumber (stream, backup) { if (backup === true) { stream.backUp(1); } return stream.match(decimalMatcher); } function isHexNumber (stream) { return stream.match(hexMatcher); } return { startState: function () { return { indentStack: null, indentation: 0, mode: false, sExprComment: false }; }, token: function (stream, state) { if (state.indentStack == null && stream.sol()) { // update indentation, but only if indentStack is empty state.indentation = stream.indentation(); } // skip spaces if (stream.eatSpace()) { return null; } var returnType = null; switch(state.mode){ case "string": // multi-line string parsing mode var next, escaped = false; while ((next = stream.next()) != null) { if (next == "\"" && !escaped) { state.mode = false; break; } escaped = !escaped && next == "\\"; } returnType = STRING; // continue on in scheme-string mode break; case "comment": // comment parsing mode var next, maybeEnd = false; while ((next = stream.next()) != null) { if (next == "#" && maybeEnd) { state.mode = false; break; } maybeEnd = (next == "|"); } returnType = COMMENT; break; case "s-expr-comment": // s-expr commenting mode state.mode = false; if(stream.peek() == "(" || stream.peek() == "["){ // actually start scheme s-expr commenting mode state.sExprComment = 0; }else{ // if not we just comment the entire of the next token stream.eatWhile(/[^/s]/); // eat non spaces returnType = COMMENT; break; } default: // default parsing mode var ch = stream.next(); if (ch == "\"") { state.mode = "string"; returnType = STRING; } else if (ch == "'") { returnType = ATOM; } else if (ch == '#') { if (stream.eat("|")) { // Multi-line comment state.mode = "comment"; // toggle to comment mode returnType = COMMENT; } else if (stream.eat(/[tf]/i)) { // #t/#f (atom) returnType = ATOM; } else if (stream.eat(';')) { // S-Expr comment state.mode = "s-expr-comment"; returnType = COMMENT; } else { var numTest = null, hasExactness = false, hasRadix = true; if (stream.eat(/[ei]/i)) { hasExactness = true; } else { stream.backUp(1); // must be radix specifier } if (stream.match(/^#b/i)) { numTest = isBinaryNumber; } else if (stream.match(/^#o/i)) { numTest = isOctalNumber; } else if (stream.match(/^#x/i)) { numTest = isHexNumber; } else if (stream.match(/^#d/i)) { numTest = isDecimalNumber; } else if (stream.match(/^[-+0-9.]/, false)) { hasRadix = false; numTest = isDecimalNumber; // re-consume the intial # if all matches failed } else if (!hasExactness) { stream.eat('#'); } if (numTest != null) { if (hasRadix && !hasExactness) { // consume optional exactness after radix stream.match(/^#[ei]/i); } if (numTest(stream)) returnType = NUMBER; } } } else if (/^[-+0-9.]/.test(ch) && isDecimalNumber(stream, true)) { // match non-prefixed number, must be decimal returnType = NUMBER; } else if (ch == ";") { // comment stream.skipToEnd(); // rest of the line is a comment returnType = COMMENT; } else if (ch == "(" || ch == "[") { var keyWord = ''; var indentTemp = stream.column(), letter; /** Either (indent-word .. (non-indent-word .. (;something else, bracket, etc. */ while ((letter = stream.eat(/[^\s\(\[\;\)\]]/)) != null) { keyWord += letter; } if (keyWord.length > 0 && indentKeys.propertyIsEnumerable(keyWord)) { // indent-word pushStack(state, indentTemp + INDENT_WORD_SKIP, ch); } else { // non-indent word // we continue eating the spaces stream.eatSpace(); if (stream.eol() || stream.peek() == ";") { // nothing significant after // we restart indentation 1 space after pushStack(state, indentTemp + 1, ch); } else { pushStack(state, indentTemp + stream.current().length, ch); // else we match } } stream.backUp(stream.current().length - 1); // undo all the eating if(typeof state.sExprComment == "number") state.sExprComment++; returnType = BRACKET; } else if (ch == ")" || ch == "]") { returnType = BRACKET; if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : "[")) { popStack(state); if(typeof state.sExprComment == "number"){ if(--state.sExprComment == 0){ returnType = COMMENT; // final closing bracket state.sExprComment = false; // turn off s-expr commenting mode } } } } else { stream.eatWhile(/[\w\$_\-!$%&*+\.\/:<=>?@\^~]/); if (keywords && keywords.propertyIsEnumerable(stream.current())) { returnType = BUILTIN; } else returnType = "variable"; } } return (typeof state.sExprComment == "number") ? COMMENT : returnType; }, indent: function (state) { if (state.indentStack == null) return state.indentation; return state.indentStack.indent; }, closeBrackets: {pairs: "()[]{}\"\""}, lineComment: ";;" }; }); CodeMirror.defineMIME("text/x-scheme", "scheme"); }); application/library/codemirror/mode/scheme/index.html000064400000004772146731177160017074 0ustar00 CodeMirror: Scheme mode

Scheme mode

MIME types defined: text/x-scheme.

application/library/codemirror/mode/htmlembedded/htmlembedded.js000064400000002611146731177160021213 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../../addon/mode/multiplex")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../../addon/mode/multiplex"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("htmlembedded", function(config, parserConfig) { return CodeMirror.multiplexingMode(CodeMirror.getMode(config, "htmlmixed"), { open: parserConfig.open || parserConfig.scriptStartRegex || "<%", close: parserConfig.close || parserConfig.scriptEndRegex || "%>", mode: CodeMirror.getMode(config, parserConfig.scriptingModeSpec) }); }, "htmlmixed"); CodeMirror.defineMIME("application/x-ejs", {name: "htmlembedded", scriptingModeSpec:"javascript"}); CodeMirror.defineMIME("application/x-aspx", {name: "htmlembedded", scriptingModeSpec:"text/x-csharp"}); CodeMirror.defineMIME("application/x-jsp", {name: "htmlembedded", scriptingModeSpec:"text/x-java"}); CodeMirror.defineMIME("application/x-erb", {name: "htmlembedded", scriptingModeSpec:"ruby"}); }); application/library/codemirror/mode/htmlembedded/index.html000064400000004046146731177160020240 0ustar00 CodeMirror: Html Embedded Scripts mode

Html Embedded Scripts mode

Mode for html embedded scripts like JSP and ASP.NET. Depends on multiplex and HtmlMixed which in turn depends on JavaScript, CSS and XML.
Other dependencies include those of the scripting language chosen.

MIME types defined: application/x-aspx (ASP.NET), application/x-ejs (Embedded Javascript), application/x-jsp (JavaServer Pages) and application/x-erb

application/library/codemirror/mode/julia/index.html000064400000004507146731177160016730 0ustar00 CodeMirror: Julia mode

Julia mode

MIME types defined: text/x-julia.

application/library/codemirror/mode/julia/julia.js000064400000026246146731177160016401 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("julia", function(_conf, parserConf) { var ERRORCLASS = 'error'; function wordRegexp(words, end) { if (typeof end === 'undefined') { end = "\\b"; } return new RegExp("^((" + words.join(")|(") + "))" + end); } var octChar = "\\\\[0-7]{1,3}"; var hexChar = "\\\\x[A-Fa-f0-9]{1,2}"; var specialChar = "\\\\[abfnrtv0%?'\"\\\\]"; var singleChar = "([^\\u0027\\u005C\\uD800-\\uDFFF]|[\\uD800-\\uDFFF][\\uDC00-\\uDFFF])"; var operators = parserConf.operators || /^\.?[|&^\\%*+\-<>!=\/]=?|\?|~|:|\$|\.[<>]|<<=?|>>>?=?|\.[<>=]=|->?|\/\/|\bin\b(?!\()|[\u2208\u2209](?!\()/; var delimiters = parserConf.delimiters || /^[;,()[\]{}]/; var identifiers = parserConf.identifiers || /^[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/; var charsList = [octChar, hexChar, specialChar, singleChar]; var blockOpeners = ["begin", "function", "type", "immutable", "let", "macro", "for", "while", "quote", "if", "else", "elseif", "try", "finally", "catch", "do"]; var blockClosers = ["end", "else", "elseif", "catch", "finally"]; var keywordList = ['if', 'else', 'elseif', 'while', 'for', 'begin', 'let', 'end', 'do', 'try', 'catch', 'finally', 'return', 'break', 'continue', 'global', 'local', 'const', 'export', 'import', 'importall', 'using', 'function', 'macro', 'module', 'baremodule', 'type', 'immutable', 'quote', 'typealias', 'abstract', 'bitstype']; var builtinList = ['true', 'false', 'nothing', 'NaN', 'Inf']; //var stringPrefixes = new RegExp("^[br]?('|\")") var stringPrefixes = /^(`|"{3}|([brv]?"))/; var chars = wordRegexp(charsList, "'"); var keywords = wordRegexp(keywordList); var builtins = wordRegexp(builtinList); var openers = wordRegexp(blockOpeners); var closers = wordRegexp(blockClosers); var macro = /^@[_A-Za-z][\w]*/; var symbol = /^:[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/; var typeAnnotation = /^::[^,;"{()=$\s]+({[^}]*}+)*/; function inArray(state) { var ch = currentScope(state); if (ch == '[') { return true; } return false; } function currentScope(state) { if (state.scopes.length == 0) { return null; } return state.scopes[state.scopes.length - 1]; } // tokenizers function tokenBase(stream, state) { // Handle multiline comments if (stream.match(/^#=/, false)) { state.tokenize = tokenComment; return state.tokenize(stream, state); } // Handle scope changes var leavingExpr = state.leavingExpr; if (stream.sol()) { leavingExpr = false; } state.leavingExpr = false; if (leavingExpr) { if (stream.match(/^'+/)) { return 'operator'; } } if (stream.match(/^\.{2,3}/)) { return 'operator'; } if (stream.eatSpace()) { return null; } var ch = stream.peek(); // Handle single line comments if (ch === '#') { stream.skipToEnd(); return 'comment'; } if (ch === '[') { state.scopes.push('['); } if (ch === '(') { state.scopes.push('('); } var scope = currentScope(state); if (scope == '[' && ch === ']') { state.scopes.pop(); state.leavingExpr = true; } if (scope == '(' && ch === ')') { state.scopes.pop(); state.leavingExpr = true; } var match; if (!inArray(state) && (match=stream.match(openers, false))) { state.scopes.push(match); } if (!inArray(state) && stream.match(closers, false)) { state.scopes.pop(); } if (inArray(state)) { if (state.lastToken == 'end' && stream.match(/^:/)) { return 'operator'; } if (stream.match(/^end/)) { return 'number'; } } if (stream.match(/^=>/)) { return 'operator'; } // Handle Number Literals if (stream.match(/^[0-9\.]/, false)) { var imMatcher = RegExp(/^im\b/); var numberLiteral = false; // Floats if (stream.match(/^\d*\.(?!\.)\d*([Eef][\+\-]?\d+)?/i)) { numberLiteral = true; } if (stream.match(/^\d+\.(?!\.)\d*/)) { numberLiteral = true; } if (stream.match(/^\.\d+/)) { numberLiteral = true; } if (stream.match(/^0x\.[0-9a-f]+p[\+\-]?\d+/i)) { numberLiteral = true; } // Integers if (stream.match(/^0x[0-9a-f]+/i)) { numberLiteral = true; } // Hex if (stream.match(/^0b[01]+/i)) { numberLiteral = true; } // Binary if (stream.match(/^0o[0-7]+/i)) { numberLiteral = true; } // Octal if (stream.match(/^[1-9]\d*(e[\+\-]?\d+)?/)) { numberLiteral = true; } // Decimal // Zero by itself with no other piece of number. if (stream.match(/^0(?![\dx])/i)) { numberLiteral = true; } if (numberLiteral) { // Integer literals may be "long" stream.match(imMatcher); state.leavingExpr = true; return 'number'; } } if (stream.match(/^<:/)) { return 'operator'; } if (stream.match(typeAnnotation)) { return 'builtin'; } // Handle symbols if (!leavingExpr && stream.match(symbol) || stream.match(/:\./)) { return 'builtin'; } // Handle parametric types if (stream.match(/^{[^}]*}(?=\()/)) { return 'builtin'; } // Handle operators and Delimiters if (stream.match(operators)) { return 'operator'; } // Handle Chars if (stream.match(/^'/)) { state.tokenize = tokenChar; return state.tokenize(stream, state); } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } if (stream.match(macro)) { return 'meta'; } if (stream.match(delimiters)) { return null; } if (stream.match(keywords)) { return 'keyword'; } if (stream.match(builtins)) { return 'builtin'; } var isDefinition = state.isDefinition || state.lastToken == 'function' || state.lastToken == 'macro' || state.lastToken == 'type' || state.lastToken == 'immutable'; if (stream.match(identifiers)) { if (isDefinition) { if (stream.peek() === '.') { state.isDefinition = true; return 'variable'; } state.isDefinition = false; return 'def'; } if (stream.match(/^({[^}]*})*\(/, false)) { return callOrDef(stream, state); } state.leavingExpr = true; return 'variable'; } // Handle non-detected items stream.next(); return ERRORCLASS; } function callOrDef(stream, state) { var match = stream.match(/^(\(\s*)/); if (match) { if (state.firstParenPos < 0) state.firstParenPos = state.scopes.length; state.scopes.push('('); state.charsAdvanced += match[1].length; } if (currentScope(state) == '(' && stream.match(/^\)/)) { state.scopes.pop(); state.charsAdvanced += 1; if (state.scopes.length <= state.firstParenPos) { var isDefinition = stream.match(/^\s*?=(?!=)/, false); stream.backUp(state.charsAdvanced); state.firstParenPos = -1; state.charsAdvanced = 0; if (isDefinition) return 'def'; return 'builtin'; } } // Unfortunately javascript does not support multiline strings, so we have // to undo anything done upto here if a function call or definition splits // over two or more lines. if (stream.match(/^$/g, false)) { stream.backUp(state.charsAdvanced); while (state.scopes.length > state.firstParenPos) state.scopes.pop(); state.firstParenPos = -1; state.charsAdvanced = 0; return 'builtin'; } state.charsAdvanced += stream.match(/^([^()]*)/)[1].length; return callOrDef(stream, state); } function tokenComment(stream, state) { if (stream.match(/^#=/)) { state.weakScopes++; } if (!stream.match(/.*?(?=(#=|=#))/)) { stream.skipToEnd(); } if (stream.match(/^=#/)) { state.weakScopes--; if (state.weakScopes == 0) state.tokenize = tokenBase; } return 'comment'; } function tokenChar(stream, state) { var isChar = false, match; if (stream.match(chars)) { isChar = true; } else if (match = stream.match(/\\u([a-f0-9]{1,4})(?=')/i)) { var value = parseInt(match[1], 16); if (value <= 55295 || value >= 57344) { // (U+0,U+D7FF), (U+E000,U+FFFF) isChar = true; stream.next(); } } else if (match = stream.match(/\\U([A-Fa-f0-9]{5,8})(?=')/)) { var value = parseInt(match[1], 16); if (value <= 1114111) { // U+10FFFF isChar = true; stream.next(); } } if (isChar) { state.leavingExpr = true; state.tokenize = tokenBase; return 'string'; } if (!stream.match(/^[^']+(?=')/)) { stream.skipToEnd(); } if (stream.match(/^'/)) { state.tokenize = tokenBase; } return ERRORCLASS; } function tokenStringFactory(delimiter) { while ('bruv'.indexOf(delimiter.charAt(0).toLowerCase()) >= 0) { delimiter = delimiter.substr(1); } var OUTCLASS = 'string'; function tokenString(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^"\\]/); if (stream.eat('\\')) { stream.next(); } else if (stream.match(delimiter)) { state.tokenize = tokenBase; state.leavingExpr = true; return OUTCLASS; } else { stream.eat(/["]/); } } return OUTCLASS; } tokenString.isString = true; return tokenString; } var external = { startState: function() { return { tokenize: tokenBase, scopes: [], weakScopes: 0, lastToken: null, leavingExpr: false, isDefinition: false, charsAdvanced: 0, firstParenPos: -1 }; }, token: function(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); if (current && style) { state.lastToken = current; } // Handle '.' connected identifiers if (current === '.') { style = stream.match(identifiers, false) || stream.match(macro, false) || stream.match(/\(/, false) ? 'operator' : ERRORCLASS; } return style; }, indent: function(state, textAfter) { var delta = 0; if (textAfter == "]" || textAfter == ")" || textAfter == "end" || textAfter == "else" || textAfter == "elseif" || textAfter == "catch" || textAfter == "finally") { delta = -1; } return (state.scopes.length + delta) * _conf.indentUnit; }, electricInput: /(end|else(if)?|catch|finally)$/, lineComment: "#", fold: "indent" }; return external; }); CodeMirror.defineMIME("text/x-julia", "julia"); }); application/library/codemirror/mode/rust/test.js000064400000001740146731177160016135 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 4}, "rust"); function MT(name) {test.mode(name, mode, Array.prototype.slice.call(arguments, 1));} MT('integer_test', '[number 123i32]', '[number 123u32]', '[number 123_u32]', '[number 0xff_u8]', '[number 0o70_i16]', '[number 0b1111_1111_1001_0000_i32]', '[number 0usize]'); MT('float_test', '[number 123.0f64]', '[number 0.1f64]', '[number 0.1f32]', '[number 12E+99_f64]'); MT('string-literals-test', '[string "foo"]', '[string r"foo"]', '[string "\\"foo\\""]', '[string r#""foo""#]', '[string "foo #\\"# bar"]', '[string b"foo"]', '[string br"foo"]', '[string b"\\"foo\\""]', '[string br#""foo""#]', '[string br##"foo #" bar"##]', "[string-2 'h']", "[string-2 b'h']"); })(); application/library/codemirror/mode/rust/index.html000064400000002774146731177160016625 0ustar00 CodeMirror: Rust mode

Rust mode

MIME types defined: text/x-rustsrc.

application/library/codemirror/mode/rust/rust.js000064400000005721146731177160016156 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../addon/mode/simple"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineSimpleMode("rust",{ start: [ // string and byte string {regex: /b?"/, token: "string", next: "string"}, // raw string and raw byte string {regex: /b?r"/, token: "string", next: "string_raw"}, {regex: /b?r#+"/, token: "string", next: "string_raw_hash"}, // character {regex: /'(?:[^'\\]|\\(?:[nrt0'"]|x[\da-fA-F]{2}|u\{[\da-fA-F]{6}\}))'/, token: "string-2"}, // byte {regex: /b'(?:[^']|\\(?:['\\nrt0]|x[\da-fA-F]{2}))'/, token: "string-2"}, {regex: /(?:(?:[0-9][0-9_]*)(?:(?:[Ee][+-]?[0-9_]+)|\.[0-9_]+(?:[Ee][+-]?[0-9_]+)?)(?:f32|f64)?)|(?:0(?:b[01_]+|(?:o[0-7_]+)|(?:x[0-9a-fA-F_]+))|(?:[0-9][0-9_]*))(?:u8|u16|u32|u64|i8|i16|i32|i64|isize|usize)?/, token: "number"}, {regex: /(let(?:\s+mut)?|fn|enum|mod|struct|type)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/, token: ["keyword", null, "def"]}, {regex: /(?:abstract|alignof|as|box|break|continue|const|crate|do|else|enum|extern|fn|for|final|if|impl|in|loop|macro|match|mod|move|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\b/, token: "keyword"}, {regex: /\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|f16|f32|f64|i8|i16|i32|i64|str|Option)\b/, token: "atom"}, {regex: /\b(?:true|false|Some|None|Ok|Err)\b/, token: "builtin"}, {regex: /\b(fn)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/, token: ["keyword", null ,"def"]}, {regex: /#!?\[.*\]/, token: "meta"}, {regex: /\/\/.*/, token: "comment"}, {regex: /\/\*/, token: "comment", next: "comment"}, {regex: /[-+\/*=<>!]+/, token: "operator"}, {regex: /[a-zA-Z_]\w*!/,token: "variable-3"}, {regex: /[a-zA-Z_]\w*/, token: "variable"}, {regex: /[\{\[\(]/, indent: true}, {regex: /[\}\]\)]/, dedent: true} ], string: [ {regex: /"/, token: "string", next: "start"}, {regex: /(?:[^\\"]|\\(?:.|$))*/, token: "string"} ], string_raw: [ {regex: /"/, token: "string", next: "start"}, {regex: /[^"]*/, token: "string"} ], string_raw_hash: [ {regex: /"#+/, token: "string", next: "start"}, {regex: /(?:[^"]|"(?!#))*/, token: "string"} ], comment: [ {regex: /.*?\*\//, token: "comment", next: "start"}, {regex: /.*/, token: "comment"} ], meta: { dontIndentStates: ["comment"], electricInput: /^\s*\}$/, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", fold: "brace" } }); CodeMirror.defineMIME("text/x-rustsrc", "rust"); }); application/library/codemirror/mode/meta.js000064400000034327146731177160015116 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.modeInfo = [ {name: "APL", mime: "text/apl", mode: "apl", ext: ["dyalog", "apl"]}, {name: "PGP", mimes: ["application/pgp", "application/pgp-keys", "application/pgp-signature"], mode: "asciiarmor", ext: ["pgp"]}, {name: "ASN.1", mime: "text/x-ttcn-asn", mode: "asn.1", ext: ["asn", "asn1"]}, {name: "Asterisk", mime: "text/x-asterisk", mode: "asterisk", file: /^extensions\.conf$/i}, {name: "Brainfuck", mime: "text/x-brainfuck", mode: "brainfuck", ext: ["b", "bf"]}, {name: "C", mime: "text/x-csrc", mode: "clike", ext: ["c", "h"]}, {name: "C++", mime: "text/x-c++src", mode: "clike", ext: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"], alias: ["cpp"]}, {name: "Cobol", mime: "text/x-cobol", mode: "cobol", ext: ["cob", "cpy"]}, {name: "C#", mime: "text/x-csharp", mode: "clike", ext: ["cs"], alias: ["csharp"]}, {name: "Clojure", mime: "text/x-clojure", mode: "clojure", ext: ["clj", "cljc", "cljx"]}, {name: "ClojureScript", mime: "text/x-clojurescript", mode: "clojure", ext: ["cljs"]}, {name: "Closure Stylesheets (GSS)", mime: "text/x-gss", mode: "css", ext: ["gss"]}, {name: "CMake", mime: "text/x-cmake", mode: "cmake", ext: ["cmake", "cmake.in"], file: /^CMakeLists.txt$/}, {name: "CoffeeScript", mime: "text/x-coffeescript", mode: "coffeescript", ext: ["coffee"], alias: ["coffee", "coffee-script"]}, {name: "Common Lisp", mime: "text/x-common-lisp", mode: "commonlisp", ext: ["cl", "lisp", "el"], alias: ["lisp"]}, {name: "Cypher", mime: "application/x-cypher-query", mode: "cypher", ext: ["cyp", "cypher"]}, {name: "Cython", mime: "text/x-cython", mode: "python", ext: ["pyx", "pxd", "pxi"]}, {name: "Crystal", mime: "text/x-crystal", mode: "crystal", ext: ["cr"]}, {name: "CSS", mime: "text/css", mode: "css", ext: ["css"]}, {name: "CQL", mime: "text/x-cassandra", mode: "sql", ext: ["cql"]}, {name: "D", mime: "text/x-d", mode: "d", ext: ["d"]}, {name: "Dart", mimes: ["application/dart", "text/x-dart"], mode: "dart", ext: ["dart"]}, {name: "diff", mime: "text/x-diff", mode: "diff", ext: ["diff", "patch"]}, {name: "Django", mime: "text/x-django", mode: "django"}, {name: "Dockerfile", mime: "text/x-dockerfile", mode: "dockerfile", file: /^Dockerfile$/}, {name: "DTD", mime: "application/xml-dtd", mode: "dtd", ext: ["dtd"]}, {name: "Dylan", mime: "text/x-dylan", mode: "dylan", ext: ["dylan", "dyl", "intr"]}, {name: "EBNF", mime: "text/x-ebnf", mode: "ebnf"}, {name: "ECL", mime: "text/x-ecl", mode: "ecl", ext: ["ecl"]}, {name: "edn", mime: "application/edn", mode: "clojure", ext: ["edn"]}, {name: "Eiffel", mime: "text/x-eiffel", mode: "eiffel", ext: ["e"]}, {name: "Elm", mime: "text/x-elm", mode: "elm", ext: ["elm"]}, {name: "Embedded Javascript", mime: "application/x-ejs", mode: "htmlembedded", ext: ["ejs"]}, {name: "Embedded Ruby", mime: "application/x-erb", mode: "htmlembedded", ext: ["erb"]}, {name: "Erlang", mime: "text/x-erlang", mode: "erlang", ext: ["erl"]}, {name: "Factor", mime: "text/x-factor", mode: "factor", ext: ["factor"]}, {name: "FCL", mime: "text/x-fcl", mode: "fcl"}, {name: "Forth", mime: "text/x-forth", mode: "forth", ext: ["forth", "fth", "4th"]}, {name: "Fortran", mime: "text/x-fortran", mode: "fortran", ext: ["f", "for", "f77", "f90"]}, {name: "F#", mime: "text/x-fsharp", mode: "mllike", ext: ["fs"], alias: ["fsharp"]}, {name: "Gas", mime: "text/x-gas", mode: "gas", ext: ["s"]}, {name: "Gherkin", mime: "text/x-feature", mode: "gherkin", ext: ["feature"]}, {name: "GitHub Flavored Markdown", mime: "text/x-gfm", mode: "gfm", file: /^(readme|contributing|history).md$/i}, {name: "Go", mime: "text/x-go", mode: "go", ext: ["go"]}, {name: "Groovy", mime: "text/x-groovy", mode: "groovy", ext: ["groovy", "gradle"]}, {name: "HAML", mime: "text/x-haml", mode: "haml", ext: ["haml"]}, {name: "Haskell", mime: "text/x-haskell", mode: "haskell", ext: ["hs"]}, {name: "Haskell (Literate)", mime: "text/x-literate-haskell", mode: "haskell-literate", ext: ["lhs"]}, {name: "Haxe", mime: "text/x-haxe", mode: "haxe", ext: ["hx"]}, {name: "HXML", mime: "text/x-hxml", mode: "haxe", ext: ["hxml"]}, {name: "ASP.NET", mime: "application/x-aspx", mode: "htmlembedded", ext: ["aspx"], alias: ["asp", "aspx"]}, {name: "HTML", mime: "text/html", mode: "htmlmixed", ext: ["html", "htm"], alias: ["xhtml"]}, {name: "HTTP", mime: "message/http", mode: "http"}, {name: "IDL", mime: "text/x-idl", mode: "idl", ext: ["pro"]}, {name: "Pug", mime: "text/x-pug", mode: "pug", ext: ["jade", "pug"], alias: ["jade"]}, {name: "Java", mime: "text/x-java", mode: "clike", ext: ["java"]}, {name: "Java Server Pages", mime: "application/x-jsp", mode: "htmlembedded", ext: ["jsp"], alias: ["jsp"]}, {name: "JavaScript", mimes: ["text/javascript", "text/ecmascript", "application/javascript", "application/x-javascript", "application/ecmascript"], mode: "javascript", ext: ["js"], alias: ["ecmascript", "js", "node"]}, {name: "JSON", mimes: ["application/json", "application/x-json"], mode: "javascript", ext: ["json", "map"], alias: ["json5"]}, {name: "JSON-LD", mime: "application/ld+json", mode: "javascript", ext: ["jsonld"], alias: ["jsonld"]}, {name: "JSX", mime: "text/jsx", mode: "jsx", ext: ["jsx"]}, {name: "Jinja2", mime: "null", mode: "jinja2"}, {name: "Julia", mime: "text/x-julia", mode: "julia", ext: ["jl"]}, {name: "Kotlin", mime: "text/x-kotlin", mode: "clike", ext: ["kt"]}, {name: "LESS", mime: "text/x-less", mode: "css", ext: ["less"]}, {name: "LiveScript", mime: "text/x-livescript", mode: "livescript", ext: ["ls"], alias: ["ls"]}, {name: "Lua", mime: "text/x-lua", mode: "lua", ext: ["lua"]}, {name: "Markdown", mime: "text/x-markdown", mode: "markdown", ext: ["markdown", "md", "mkd"]}, {name: "mIRC", mime: "text/mirc", mode: "mirc"}, {name: "MariaDB SQL", mime: "text/x-mariadb", mode: "sql"}, {name: "Mathematica", mime: "text/x-mathematica", mode: "mathematica", ext: ["m", "nb"]}, {name: "Modelica", mime: "text/x-modelica", mode: "modelica", ext: ["mo"]}, {name: "MUMPS", mime: "text/x-mumps", mode: "mumps", ext: ["mps"]}, {name: "MS SQL", mime: "text/x-mssql", mode: "sql"}, {name: "mbox", mime: "application/mbox", mode: "mbox", ext: ["mbox"]}, {name: "MySQL", mime: "text/x-mysql", mode: "sql"}, {name: "Nginx", mime: "text/x-nginx-conf", mode: "nginx", file: /nginx.*\.conf$/i}, {name: "NSIS", mime: "text/x-nsis", mode: "nsis", ext: ["nsh", "nsi"]}, {name: "NTriples", mime: "text/n-triples", mode: "ntriples", ext: ["nt"]}, {name: "Objective C", mime: "text/x-objectivec", mode: "clike", ext: ["m", "mm"], alias: ["objective-c", "objc"]}, {name: "OCaml", mime: "text/x-ocaml", mode: "mllike", ext: ["ml", "mli", "mll", "mly"]}, {name: "Octave", mime: "text/x-octave", mode: "octave", ext: ["m"]}, {name: "Oz", mime: "text/x-oz", mode: "oz", ext: ["oz"]}, {name: "Pascal", mime: "text/x-pascal", mode: "pascal", ext: ["p", "pas"]}, {name: "PEG.js", mime: "null", mode: "pegjs", ext: ["jsonld"]}, {name: "Perl", mime: "text/x-perl", mode: "perl", ext: ["pl", "pm"]}, {name: "PHP", mime: "application/x-httpd-php", mode: "php", ext: ["php", "php3", "php4", "php5", "phtml"]}, {name: "Pig", mime: "text/x-pig", mode: "pig", ext: ["pig"]}, {name: "Plain Text", mime: "text/plain", mode: "null", ext: ["txt", "text", "conf", "def", "list", "log"]}, {name: "PLSQL", mime: "text/x-plsql", mode: "sql", ext: ["pls"]}, {name: "PowerShell", mime: "application/x-powershell", mode: "powershell", ext: ["ps1", "psd1", "psm1"]}, {name: "Properties files", mime: "text/x-properties", mode: "properties", ext: ["properties", "ini", "in"], alias: ["ini", "properties"]}, {name: "ProtoBuf", mime: "text/x-protobuf", mode: "protobuf", ext: ["proto"]}, {name: "Python", mime: "text/x-python", mode: "python", ext: ["BUILD", "bzl", "py", "pyw"], file: /^(BUCK|BUILD)$/}, {name: "Puppet", mime: "text/x-puppet", mode: "puppet", ext: ["pp"]}, {name: "Q", mime: "text/x-q", mode: "q", ext: ["q"]}, {name: "R", mime: "text/x-rsrc", mode: "r", ext: ["r"], alias: ["rscript"]}, {name: "reStructuredText", mime: "text/x-rst", mode: "rst", ext: ["rst"], alias: ["rst"]}, {name: "RPM Changes", mime: "text/x-rpm-changes", mode: "rpm"}, {name: "RPM Spec", mime: "text/x-rpm-spec", mode: "rpm", ext: ["spec"]}, {name: "Ruby", mime: "text/x-ruby", mode: "ruby", ext: ["rb"], alias: ["jruby", "macruby", "rake", "rb", "rbx"]}, {name: "Rust", mime: "text/x-rustsrc", mode: "rust", ext: ["rs"]}, {name: "SAS", mime: "text/x-sas", mode: "sas", ext: ["sas"]}, {name: "Sass", mime: "text/x-sass", mode: "sass", ext: ["sass"]}, {name: "Scala", mime: "text/x-scala", mode: "clike", ext: ["scala"]}, {name: "Scheme", mime: "text/x-scheme", mode: "scheme", ext: ["scm", "ss"]}, {name: "SCSS", mime: "text/x-scss", mode: "css", ext: ["scss"]}, {name: "Shell", mime: "text/x-sh", mode: "shell", ext: ["sh", "ksh", "bash"], alias: ["bash", "sh", "zsh"], file: /^PKGBUILD$/}, {name: "Sieve", mime: "application/sieve", mode: "sieve", ext: ["siv", "sieve"]}, {name: "Slim", mimes: ["text/x-slim", "application/x-slim"], mode: "slim", ext: ["slim"]}, {name: "Smalltalk", mime: "text/x-stsrc", mode: "smalltalk", ext: ["st"]}, {name: "Smarty", mime: "text/x-smarty", mode: "smarty", ext: ["tpl"]}, {name: "Solr", mime: "text/x-solr", mode: "solr"}, {name: "Soy", mime: "text/x-soy", mode: "soy", ext: ["soy"], alias: ["closure template"]}, {name: "SPARQL", mime: "application/sparql-query", mode: "sparql", ext: ["rq", "sparql"], alias: ["sparul"]}, {name: "Spreadsheet", mime: "text/x-spreadsheet", mode: "spreadsheet", alias: ["excel", "formula"]}, {name: "SQL", mime: "text/x-sql", mode: "sql", ext: ["sql"]}, {name: "Squirrel", mime: "text/x-squirrel", mode: "clike", ext: ["nut"]}, {name: "Swift", mime: "text/x-swift", mode: "swift", ext: ["swift"]}, {name: "sTeX", mime: "text/x-stex", mode: "stex"}, {name: "LaTeX", mime: "text/x-latex", mode: "stex", ext: ["text", "ltx"], alias: ["tex"]}, {name: "SystemVerilog", mime: "text/x-systemverilog", mode: "verilog", ext: ["v"]}, {name: "Tcl", mime: "text/x-tcl", mode: "tcl", ext: ["tcl"]}, {name: "Textile", mime: "text/x-textile", mode: "textile", ext: ["textile"]}, {name: "TiddlyWiki ", mime: "text/x-tiddlywiki", mode: "tiddlywiki"}, {name: "Tiki wiki", mime: "text/tiki", mode: "tiki"}, {name: "TOML", mime: "text/x-toml", mode: "toml", ext: ["toml"]}, {name: "Tornado", mime: "text/x-tornado", mode: "tornado"}, {name: "troff", mime: "text/troff", mode: "troff", ext: ["1", "2", "3", "4", "5", "6", "7", "8", "9"]}, {name: "TTCN", mime: "text/x-ttcn", mode: "ttcn", ext: ["ttcn", "ttcn3", "ttcnpp"]}, {name: "TTCN_CFG", mime: "text/x-ttcn-cfg", mode: "ttcn-cfg", ext: ["cfg"]}, {name: "Turtle", mime: "text/turtle", mode: "turtle", ext: ["ttl"]}, {name: "TypeScript", mime: "application/typescript", mode: "javascript", ext: ["ts"], alias: ["ts"]}, {name: "Twig", mime: "text/x-twig", mode: "twig"}, {name: "Web IDL", mime: "text/x-webidl", mode: "webidl", ext: ["webidl"]}, {name: "VB.NET", mime: "text/x-vb", mode: "vb", ext: ["vb"]}, {name: "VBScript", mime: "text/vbscript", mode: "vbscript", ext: ["vbs"]}, {name: "Velocity", mime: "text/velocity", mode: "velocity", ext: ["vtl"]}, {name: "Verilog", mime: "text/x-verilog", mode: "verilog", ext: ["v"]}, {name: "VHDL", mime: "text/x-vhdl", mode: "vhdl", ext: ["vhd", "vhdl"]}, {name: "XML", mimes: ["application/xml", "text/xml"], mode: "xml", ext: ["xml", "xsl", "xsd"], alias: ["rss", "wsdl", "xsd"]}, {name: "XQuery", mime: "application/xquery", mode: "xquery", ext: ["xy", "xquery"]}, {name: "Yacas", mime: "text/x-yacas", mode: "yacas", ext: ["ys"]}, {name: "YAML", mime: "text/x-yaml", mode: "yaml", ext: ["yaml", "yml"], alias: ["yml"]}, {name: "Z80", mime: "text/x-z80", mode: "z80", ext: ["z80"]}, {name: "mscgen", mime: "text/x-mscgen", mode: "mscgen", ext: ["mscgen", "mscin", "msc"]}, {name: "xu", mime: "text/x-xu", mode: "mscgen", ext: ["xu"]}, {name: "msgenny", mime: "text/x-msgenny", mode: "mscgen", ext: ["msgenny"]} ]; // Ensure all modes have a mime property for backwards compatibility for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.mimes) info.mime = info.mimes[0]; } CodeMirror.findModeByMIME = function(mime) { mime = mime.toLowerCase(); for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.mime == mime) return info; if (info.mimes) for (var j = 0; j < info.mimes.length; j++) if (info.mimes[j] == mime) return info; } }; CodeMirror.findModeByExtension = function(ext) { for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.ext) for (var j = 0; j < info.ext.length; j++) if (info.ext[j] == ext) return info; } }; CodeMirror.findModeByFileName = function(filename) { for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.file && info.file.test(filename)) return info; } var dot = filename.lastIndexOf("."); var ext = dot > -1 && filename.substring(dot + 1, filename.length); if (ext) return CodeMirror.findModeByExtension(ext); }; CodeMirror.findModeByName = function(name) { name = name.toLowerCase(); for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.name.toLowerCase() == name) return info; if (info.alias) for (var j = 0; j < info.alias.length; j++) if (info.alias[j].toLowerCase() == name) return info; } }; }); application/library/codemirror/mode/sql/sql.js000064400000102632146731177160015561 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sql", function(config, parserConfig) { "use strict"; var client = parserConfig.client || {}, atoms = parserConfig.atoms || {"false": true, "true": true, "null": true}, builtin = parserConfig.builtin || {}, keywords = parserConfig.keywords || {}, operatorChars = parserConfig.operatorChars || /^[*+\-%<>!=&|~^]/, support = parserConfig.support || {}, hooks = parserConfig.hooks || {}, dateSQL = parserConfig.dateSQL || {"date" : true, "time" : true, "timestamp" : true}; function tokenBase(stream, state) { var ch = stream.next(); // call hooks from the mime type if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (support.hexNumber == true && ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || (ch == "x" || ch == "X") && stream.match(/^'[0-9a-fA-F]+'/))) { // hex // ref: http://dev.mysql.com/doc/refman/5.5/en/hexadecimal-literals.html return "number"; } else if (support.binaryNumber == true && (((ch == "b" || ch == "B") && stream.match(/^'[01]+'/)) || (ch == "0" && stream.match(/^b[01]+/)))) { // bitstring // ref: http://dev.mysql.com/doc/refman/5.5/en/bit-field-literals.html return "number"; } else if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) { // numbers // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html stream.match(/^[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/); support.decimallessFloat == true && stream.eat('.'); return "number"; } else if (ch == "?" && (stream.eatSpace() || stream.eol() || stream.eat(";"))) { // placeholders return "variable-3"; } else if (ch == "'" || (ch == '"' && support.doubleQuote)) { // strings // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html state.tokenize = tokenLiteral(ch); return state.tokenize(stream, state); } else if ((((support.nCharCast == true && (ch == "n" || ch == "N")) || (support.charsetCast == true && ch == "_" && stream.match(/[a-z][a-z0-9]*/i))) && (stream.peek() == "'" || stream.peek() == '"'))) { // charset casting: _utf8'str', N'str', n'str' // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html return "keyword"; } else if (/^[\(\),\;\[\]]/.test(ch)) { // no highlighting return null; } else if (support.commentSlashSlash && ch == "/" && stream.eat("/")) { // 1-line comment stream.skipToEnd(); return "comment"; } else if ((support.commentHash && ch == "#") || (ch == "-" && stream.eat("-") && (!support.commentSpaceRequired || stream.eat(" ")))) { // 1-line comments // ref: https://kb.askmonty.org/en/comment-syntax/ stream.skipToEnd(); return "comment"; } else if (ch == "/" && stream.eat("*")) { // multi-line comments // ref: https://kb.askmonty.org/en/comment-syntax/ state.tokenize = tokenComment; return state.tokenize(stream, state); } else if (ch == ".") { // .1 for 0.1 if (support.zerolessFloat == true && stream.match(/^(?:\d+(?:e[+-]?\d+)?)/i)) { return "number"; } // .table_name (ODBC) // // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html if (support.ODBCdotTable == true && stream.match(/^[a-zA-Z_]+/)) { return "variable-2"; } } else if (operatorChars.test(ch)) { // operators stream.eatWhile(operatorChars); return null; } else if (ch == '{' && (stream.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || stream.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/))) { // dates (weird ODBC syntax) // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html return "number"; } else { stream.eatWhile(/^[_\w\d]/); var word = stream.current().toLowerCase(); // dates (standard SQL syntax) // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/))) return "number"; if (atoms.hasOwnProperty(word)) return "atom"; if (builtin.hasOwnProperty(word)) return "builtin"; if (keywords.hasOwnProperty(word)) return "keyword"; if (client.hasOwnProperty(word)) return "string-2"; return null; } } // 'string', with char specified in quote escaped by '\' function tokenLiteral(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return "string"; }; } function tokenComment(stream, state) { while (true) { if (stream.skipTo("*")) { stream.next(); if (stream.eat("/")) { state.tokenize = tokenBase; break; } } else { stream.skipToEnd(); break; } } return "comment"; } function pushContext(stream, state, type) { state.context = { prev: state.context, indent: stream.indentation(), col: stream.column(), type: type }; } function popContext(state) { state.indent = state.context.indent; state.context = state.context.prev; } return { startState: function() { return {tokenize: tokenBase, context: null}; }, token: function(stream, state) { if (stream.sol()) { if (state.context && state.context.align == null) state.context.align = false; } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style == "comment") return style; if (state.context && state.context.align == null) state.context.align = true; var tok = stream.current(); if (tok == "(") pushContext(stream, state, ")"); else if (tok == "[") pushContext(stream, state, "]"); else if (state.context && state.context.type == tok) popContext(state); return style; }, indent: function(state, textAfter) { var cx = state.context; if (!cx) return CodeMirror.Pass; var closing = textAfter.charAt(0) == cx.type; if (cx.align) return cx.col + (closing ? 0 : 1); else return cx.indent + (closing ? 0 : config.indentUnit); }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: support.commentSlashSlash ? "//" : support.commentHash ? "#" : null }; }); (function() { "use strict"; // `identifier` function hookIdentifier(stream) { // MySQL/MariaDB identifiers // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html var ch; while ((ch = stream.next()) != null) { if (ch == "`" && !stream.eat("`")) return "variable-2"; } stream.backUp(stream.current().length - 1); return stream.eatWhile(/\w/) ? "variable-2" : null; } // variable token function hookVar(stream) { // variables // @@prefix.varName @varName // varName can be quoted with ` or ' or " // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html if (stream.eat("@")) { stream.match(/^session\./); stream.match(/^local\./); stream.match(/^global\./); } if (stream.eat("'")) { stream.match(/^.*'/); return "variable-2"; } else if (stream.eat('"')) { stream.match(/^.*"/); return "variable-2"; } else if (stream.eat("`")) { stream.match(/^.*`/); return "variable-2"; } else if (stream.match(/^[0-9a-zA-Z$\.\_]+/)) { return "variable-2"; } return null; }; // short client keyword token function hookClient(stream) { // \N means NULL // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html if (stream.eat("N")) { return "atom"; } // \g, etc // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null; } // these keywords are used by all SQL dialects (however, a mode can still overwrite it) var sqlKeywords = "alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit "; // turn a space-separated list into an array function set(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } // A generic SQL Mode. It's not a standard, it just try to support what is generally supported CodeMirror.defineMIME("text/x-sql", { name: "sql", keywords: set(sqlKeywords + "begin"), builtin: set("bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") }); CodeMirror.defineMIME("text/x-mssql", { name: "sql", client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), keywords: set(sqlKeywords + "begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare"), builtin: set("bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table "), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=]/, dateSQL: set("date datetimeoffset datetime2 smalldatetime datetime time"), hooks: { "@": hookVar } }); CodeMirror.defineMIME("text/x-mysql", { name: "sql", client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), keywords: set(sqlKeywords + "accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=&|^]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), hooks: { "@": hookVar, "`": hookIdentifier, "\\": hookClient } }); CodeMirror.defineMIME("text/x-mariadb", { name: "sql", client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), keywords: set(sqlKeywords + "accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group groupby_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=&|^]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), hooks: { "@": hookVar, "`": hookIdentifier, "\\": hookClient } }); // the query language used by Apache Cassandra is called CQL, but this mime type // is called Cassandra to avoid confusion with Contextual Query Language CodeMirror.defineMIME("text/x-cassandra", { name: "sql", client: { }, keywords: set("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"), builtin: set("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"), atoms: set("false true infinity NaN"), operatorChars: /^[<>=]/, dateSQL: { }, support: set("commentSlashSlash decimallessFloat"), hooks: { } }); // this is based on Peter Raganitsch's 'plsql' mode CodeMirror.defineMIME("text/x-plsql", { name: "sql", client: set("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"), keywords: set("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"), builtin: set("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"), operatorChars: /^[*+\-%<>!=~]/, dateSQL: set("date time timestamp"), support: set("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber") }); // Created to support specific hive keywords CodeMirror.defineMIME("text/x-hive", { name: "sql", keywords: set("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external false fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger true unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with"), builtin: set("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=]/, dateSQL: set("date timestamp"), support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") }); CodeMirror.defineMIME("text/x-pgsql", { name: "sql", client: set("source"), // http://www.postgresql.org/docs/9.5/static/sql-keywords-appendix.html keywords: set(sqlKeywords + "a abort abs absent absolute access according action ada add admin after aggregate all allocate also always analyse analyze any are array array_agg array_max_cardinality asensitive assertion assignment asymmetric at atomic attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli binary bit_length blob blocked bom both breadth c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain characteristics characters character_length character_set_catalog character_set_name character_set_schema char_length check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column columns column_name command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constraint constraints constraint_catalog constraint_name constraint_schema constructor contains content continue control conversion convert copy corr corresponding cost covar_pop covar_samp cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datetime_interval_code datetime_interval_precision day db deallocate dec declare default defaults deferrable deferred defined definer degree delimiter delimiters dense_rank depth deref derived describe descriptor deterministic diagnostics dictionary disable discard disconnect dispatch dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain dynamic dynamic_function dynamic_function_code each element else empty enable encoding encrypted end end-exec end_frame end_partition enforced enum equals escape event every except exception exclude excluding exclusive exec execute exists exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreign fortran forward found frame_row free freeze fs full function functions fusion g general generated get global go goto grant granted greatest grouping groups handler header hex hierarchy hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import including increment indent index indexes indicator inherit inherits initially inline inner inout input insensitive instance instantiable instead integrity intersect intersection invoker isnull isolation k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like_regex link listen ln load local localtime localtimestamp location locator lock locked logged lower m map mapping match matched materialized max maxvalue max_cardinality member merge message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized nothing notify notnull nowait nth_value ntile null nullable nullif nulls number object occurrences_regex octets octet_length of off offset oids old only open operator option options ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password percent percentile_cont percentile_disc percent_rank period permission placing plans pli policy portion position position_regex power precedes preceding prepare prepared preserve primary prior privileges procedural procedure program public quote range rank read reads reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns revoke right role rollback rollup routine routine_catalog routine_name routine_schema row rows row_count row_number rule savepoint scale schema schema_name scope scope_catalog scope_name scope_schema scroll search second section security selective self sensitive sequence sequences serializable server server_name session session_user setof sets share show similar simple size skip snapshot some source space specific specifictype specific_name sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset substring substring_regex succeeds sum symmetric sysid system system_time system_user t tables tablesample tablespace table_name temp template temporary then ties timezone_hour timezone_minute to token top_level_count trailing transaction transactions_committed transactions_rolled_back transaction_active transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted unique unknown unlink unlisten unlogged unnamed unnest until untyped upper uri usage user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of varbinary variadic var_pop var_samp verbose version versioning view views volatile when whenever whitespace width_bucket window within work wrapper write xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes loop repeat"), // http://www.postgresql.org/docs/9.5/static/datatype.html builtin: set("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=&|^\/#@?~]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast") }); // Google's SQL-like query language, GQL CodeMirror.defineMIME("text/x-gql", { name: "sql", keywords: set("ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where"), atoms: set("false true"), builtin: set("blob datetime first key __key__ string integer double boolean null"), operatorChars: /^[*+\-%<>!=]/ }); }()); }); /* How Properties of Mime Types are used by SQL Mode ================================================= keywords: A list of keywords you want to be highlighted. builtin: A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword"). operatorChars: All characters that must be handled as operators. client: Commands parsed and executed by the client (not the server). support: A list of supported syntaxes which are not common, but are supported by more than 1 DBMS. * ODBCdotTable: .tableName * zerolessFloat: .1 * doubleQuote * nCharCast: N'string' * charsetCast: _utf8'string' * commentHash: use # char for comments * commentSlashSlash: use // for comments * commentSpaceRequired: require a space after -- for comments atoms: Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others: UNKNOWN, INFINITY, UNDERFLOW, NaN... dateSQL: Used for date/time SQL standard syntax, because not all DBMS's support same temporal types. */ application/library/codemirror/mode/sql/index.html000064400000005657146731177160016432 0ustar00 CodeMirror: SQL Mode for CodeMirror

SQL Mode for CodeMirror

MIME types defined: text/x-sql, text/x-mysql, text/x-mariadb, text/x-cassandra, text/x-plsql, text/x-mssql, text/x-hive, text/x-pgsql, text/x-gql.

application/library/codemirror/mode/vhdl/index.html000064400000004666146731177160016567 0ustar00 CodeMirror: VHDL mode

VHDL mode

Syntax highlighting and indentation for the VHDL language.

Configuration options:

  • atoms - List of atom words. Default: "null"
  • hooks - List of meta hooks. Default: ["`", "$"]
  • multiLineStrings - Whether multi-line strings are accepted. Default: false

MIME types defined: text/x-vhdl.

application/library/codemirror/mode/vhdl/vhdl.js000064400000015060146731177160016053 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Originally written by Alf Nielsen, re-written by Michael Zhou (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function words(str) { var obj = {}, words = str.split(","); for (var i = 0; i < words.length; ++i) { var allCaps = words[i].toUpperCase(); var firstCap = words[i].charAt(0).toUpperCase() + words[i].slice(1); obj[words[i]] = true; obj[allCaps] = true; obj[firstCap] = true; } return obj; } function metaHook(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; } CodeMirror.defineMode("vhdl", function(config, parserConfig) { var indentUnit = config.indentUnit, atoms = parserConfig.atoms || words("null"), hooks = parserConfig.hooks || {"`": metaHook, "$": metaHook}, multiLineStrings = parserConfig.multiLineStrings; var keywords = words("abs,access,after,alias,all,and,architecture,array,assert,attribute,begin,block," + "body,buffer,bus,case,component,configuration,constant,disconnect,downto,else,elsif,end,end block,end case," + "end component,end for,end generate,end if,end loop,end process,end record,end units,entity,exit,file,for," + "function,generate,generic,generic map,group,guarded,if,impure,in,inertial,inout,is,label,library,linkage," + "literal,loop,map,mod,nand,new,next,nor,null,of,on,open,or,others,out,package,package body,port,port map," + "postponed,procedure,process,pure,range,record,register,reject,rem,report,return,rol,ror,select,severity,signal," + "sla,sll,sra,srl,subtype,then,to,transport,type,unaffected,units,until,use,variable,wait,when,while,with,xnor,xor"); var blockKeywords = words("architecture,entity,begin,case,port,else,elsif,end,for,function,if"); var isOperatorChar = /[&|~>!@'\\\\]"); var singleDelimiters = new RegExp('^[\\(\\[\\{\\},:=;]'); var doubleOperators = new RegExp("^((==)|(~=)|(<=)|(>=)|(<<)|(>>)|(\\.[\\+\\-\\*/\\^\\\\]))"); var doubleDelimiters = new RegExp("^((!=)|(\\+=)|(\\-=)|(\\*=)|(/=)|(&=)|(\\|=)|(\\^=))"); var tripleDelimiters = new RegExp("^((>>=)|(<<=))"); var expressionEnd = new RegExp("^[\\]\\)]"); var identifiers = new RegExp("^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*"); var builtins = wordRegexp([ 'error', 'eval', 'function', 'abs', 'acos', 'atan', 'asin', 'cos', 'cosh', 'exp', 'log', 'prod', 'sum', 'log10', 'max', 'min', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'reshape', 'break', 'zeros', 'default', 'margin', 'round', 'ones', 'rand', 'syn', 'ceil', 'floor', 'size', 'clear', 'zeros', 'eye', 'mean', 'std', 'cov', 'det', 'eig', 'inv', 'norm', 'rank', 'trace', 'expm', 'logm', 'sqrtm', 'linspace', 'plot', 'title', 'xlabel', 'ylabel', 'legend', 'text', 'grid', 'meshgrid', 'mesh', 'num2str', 'fft', 'ifft', 'arrayfun', 'cellfun', 'input', 'fliplr', 'flipud', 'ismember' ]); var keywords = wordRegexp([ 'return', 'case', 'switch', 'else', 'elseif', 'end', 'endif', 'endfunction', 'if', 'otherwise', 'do', 'for', 'while', 'try', 'catch', 'classdef', 'properties', 'events', 'methods', 'global', 'persistent', 'endfor', 'endwhile', 'printf', 'sprintf', 'disp', 'until', 'continue', 'pkg' ]); // tokenizers function tokenTranspose(stream, state) { if (!stream.sol() && stream.peek() === '\'') { stream.next(); state.tokenize = tokenBase; return 'operator'; } state.tokenize = tokenBase; return tokenBase(stream, state); } function tokenComment(stream, state) { if (stream.match(/^.*%}/)) { state.tokenize = tokenBase; return 'comment'; }; stream.skipToEnd(); return 'comment'; } function tokenBase(stream, state) { // whitespaces if (stream.eatSpace()) return null; // Handle one line Comments if (stream.match('%{')){ state.tokenize = tokenComment; stream.skipToEnd(); return 'comment'; } if (stream.match(/^[%#]/)){ stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^[0-9\.+-]/, false)) { if (stream.match(/^[+-]?0x[0-9a-fA-F]+[ij]?/)) { stream.tokenize = tokenBase; return 'number'; }; if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?[ij]?/)) { return 'number'; }; if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?[ij]?/)) { return 'number'; }; } if (stream.match(wordRegexp(['nan','NaN','inf','Inf']))) { return 'number'; }; // Handle Strings if (stream.match(/^"([^"]|(""))*"/)) { return 'string'; } ; if (stream.match(/^'([^']|(''))*'/)) { return 'string'; } ; // Handle words if (stream.match(keywords)) { return 'keyword'; } ; if (stream.match(builtins)) { return 'builtin'; } ; if (stream.match(identifiers)) { return 'variable'; } ; if (stream.match(singleOperators) || stream.match(doubleOperators)) { return 'operator'; }; if (stream.match(singleDelimiters) || stream.match(doubleDelimiters) || stream.match(tripleDelimiters)) { return null; }; if (stream.match(expressionEnd)) { state.tokenize = tokenTranspose; return null; }; // Handle non-detected items stream.next(); return 'error'; }; return { startState: function() { return { tokenize: tokenBase }; }, token: function(stream, state) { var style = state.tokenize(stream, state); if (style === 'number' || style === 'variable'){ state.tokenize = tokenTranspose; } return style; } }; }); CodeMirror.defineMIME("text/x-octave", "octave"); }); application/library/codemirror/mode/octave/index.html000064400000003415146731177160017102 0ustar00 CodeMirror: Octave mode

Octave mode

MIME types defined: text/x-octave.

application/library/codemirror/mode/asciiarmor/asciiarmor.js000064400000004512146731177160020443 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function errorIfNotEmpty(stream) { var nonWS = stream.match(/^\s*\S/); stream.skipToEnd(); return nonWS ? "error" : null; } CodeMirror.defineMode("asciiarmor", function() { return { token: function(stream, state) { var m; if (state.state == "top") { if (stream.sol() && (m = stream.match(/^-----BEGIN (.*)?-----\s*$/))) { state.state = "headers"; state.type = m[1]; return "tag"; } return errorIfNotEmpty(stream); } else if (state.state == "headers") { if (stream.sol() && stream.match(/^\w+:/)) { state.state = "header"; return "atom"; } else { var result = errorIfNotEmpty(stream); if (result) state.state = "body"; return result; } } else if (state.state == "header") { stream.skipToEnd(); state.state = "headers"; return "string"; } else if (state.state == "body") { if (stream.sol() && (m = stream.match(/^-----END (.*)?-----\s*$/))) { if (m[1] != state.type) return "error"; state.state = "end"; return "tag"; } else { if (stream.eatWhile(/[A-Za-z0-9+\/=]/)) { return null; } else { stream.next(); return "error"; } } } else if (state.state == "end") { return errorIfNotEmpty(stream); } }, blankLine: function(state) { if (state.state == "headers") state.state = "body"; }, startState: function() { return {state: "top", type: null}; } }; }); CodeMirror.defineMIME("application/pgp", "asciiarmor"); CodeMirror.defineMIME("application/pgp-keys", "asciiarmor"); CodeMirror.defineMIME("application/pgp-signature", "asciiarmor"); }); application/library/codemirror/mode/asciiarmor/index.html000064400000002411146731177160017745 0ustar00 CodeMirror: ASCII Armor (PGP) mode

ASCII Armor (PGP) mode

MIME types defined: application/pgp, application/pgp-keys, application/pgp-signature

application/library/codemirror/mode/commonlisp/index.html000064400000015043146731177160020001 0ustar00 CodeMirror: Common Lisp mode

Common Lisp mode

MIME types defined: text/x-common-lisp.

application/library/codemirror/mode/commonlisp/commonlisp.js000064400000010610146731177160020515 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("commonlisp", function (config) { var specialForm = /^(block|let*|return-from|catch|load-time-value|setq|eval-when|locally|symbol-macrolet|flet|macrolet|tagbody|function|multiple-value-call|the|go|multiple-value-prog1|throw|if|progn|unwind-protect|labels|progv|let|quote)$/; var assumeBody = /^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/; var numLiteral = /^(?:[+\-]?(?:\d+|\d*\.\d+)(?:[efd][+\-]?\d+)?|[+\-]?\d+(?:\/[+\-]?\d+)?|#b[+\-]?[01]+|#o[+\-]?[0-7]+|#x[+\-]?[\da-f]+)/; var symbol = /[^\s'`,@()\[\]";]/; var type; function readSym(stream) { var ch; while (ch = stream.next()) { if (ch == "\\") stream.next(); else if (!symbol.test(ch)) { stream.backUp(1); break; } } return stream.current(); } function base(stream, state) { if (stream.eatSpace()) {type = "ws"; return null;} if (stream.match(numLiteral)) return "number"; var ch = stream.next(); if (ch == "\\") ch = stream.next(); if (ch == '"') return (state.tokenize = inString)(stream, state); else if (ch == "(") { type = "open"; return "bracket"; } else if (ch == ")" || ch == "]") { type = "close"; return "bracket"; } else if (ch == ";") { stream.skipToEnd(); type = "ws"; return "comment"; } else if (/['`,@]/.test(ch)) return null; else if (ch == "|") { if (stream.skipTo("|")) { stream.next(); return "symbol"; } else { stream.skipToEnd(); return "error"; } } else if (ch == "#") { var ch = stream.next(); if (ch == "[") { type = "open"; return "bracket"; } else if (/[+\-=\.']/.test(ch)) return null; else if (/\d/.test(ch) && stream.match(/^\d*#/)) return null; else if (ch == "|") return (state.tokenize = inComment)(stream, state); else if (ch == ":") { readSym(stream); return "meta"; } else return "error"; } else { var name = readSym(stream); if (name == ".") return null; type = "symbol"; if (name == "nil" || name == "t" || name.charAt(0) == ":") return "atom"; if (state.lastType == "open" && (specialForm.test(name) || assumeBody.test(name))) return "keyword"; if (name.charAt(0) == "&") return "variable-2"; return "variable"; } } function inString(stream, state) { var escaped = false, next; while (next = stream.next()) { if (next == '"' && !escaped) { state.tokenize = base; break; } escaped = !escaped && next == "\\"; } return "string"; } function inComment(stream, state) { var next, last; while (next = stream.next()) { if (next == "#" && last == "|") { state.tokenize = base; break; } last = next; } type = "ws"; return "comment"; } return { startState: function () { return {ctx: {prev: null, start: 0, indentTo: 0}, lastType: null, tokenize: base}; }, token: function (stream, state) { if (stream.sol() && typeof state.ctx.indentTo != "number") state.ctx.indentTo = state.ctx.start + 1; type = null; var style = state.tokenize(stream, state); if (type != "ws") { if (state.ctx.indentTo == null) { if (type == "symbol" && assumeBody.test(stream.current())) state.ctx.indentTo = state.ctx.start + config.indentUnit; else state.ctx.indentTo = "next"; } else if (state.ctx.indentTo == "next") { state.ctx.indentTo = stream.column(); } state.lastType = type; } if (type == "open") state.ctx = {prev: state.ctx, start: stream.column(), indentTo: null}; else if (type == "close") state.ctx = state.ctx.prev || state.ctx; return style; }, indent: function (state, _textAfter) { var i = state.ctx.indentTo; return typeof i == "number" ? i : state.ctx.start + 1; }, closeBrackets: {pairs: "()[]{}\"\""}, lineComment: ";;", blockCommentStart: "#|", blockCommentEnd: "|#" }; }); CodeMirror.defineMIME("text/x-common-lisp", "commonlisp"); }); application/library/codemirror/mode/livescript/livescript.js000064400000016764146731177160020545 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Link to the project's GitHub page: * https://github.com/duralog/CodeMirror */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('livescript', function(){ var tokenBase = function(stream, state) { var next_rule = state.next || "start"; if (next_rule) { state.next = state.next; var nr = Rules[next_rule]; if (nr.splice) { for (var i$ = 0; i$ < nr.length; ++i$) { var r = nr[i$]; if (r.regex && stream.match(r.regex)) { state.next = r.next || state.next; return r.token; } } stream.next(); return 'error'; } if (stream.match(r = Rules[next_rule])) { if (r.regex && stream.match(r.regex)) { state.next = r.next; return r.token; } else { stream.next(); return 'error'; } } } stream.next(); return 'error'; }; var external = { startState: function(){ return { next: 'start', lastToken: {style: null, indent: 0, content: ""} }; }, token: function(stream, state){ while (stream.pos == stream.start) var style = tokenBase(stream, state); state.lastToken = { style: style, indent: stream.indentation(), content: stream.current() }; return style.replace(/\./g, ' '); }, indent: function(state){ var indentation = state.lastToken.indent; if (state.lastToken.content.match(indenter)) { indentation += 2; } return indentation; } }; return external; }); var identifier = '(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*'; var indenter = RegExp('(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*' + identifier + ')?))\\s*$'); var keywordend = '(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))'; var stringfill = { token: 'string', regex: '.+' }; var Rules = { start: [ { token: 'comment.doc', regex: '/\\*', next: 'comment' }, { token: 'comment', regex: '#.*' }, { token: 'keyword', regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend }, { token: 'constant.language', regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend }, { token: 'invalid.illegal', regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend }, { token: 'language.support.class', regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend }, { token: 'language.support.function', regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend }, { token: 'variable.language', regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend }, { token: 'identifier', regex: identifier + '\\s*:(?![:=])' }, { token: 'variable', regex: identifier }, { token: 'keyword.operator', regex: '(?:\\.{3}|\\s+\\?)' }, { token: 'keyword.variable', regex: '(?:@+|::|\\.\\.)', next: 'key' }, { token: 'keyword.operator', regex: '\\.\\s*', next: 'key' }, { token: 'string', regex: '\\\\\\S[^\\s,;)}\\]]*' }, { token: 'string.doc', regex: '\'\'\'', next: 'qdoc' }, { token: 'string.doc', regex: '"""', next: 'qqdoc' }, { token: 'string', regex: '\'', next: 'qstring' }, { token: 'string', regex: '"', next: 'qqstring' }, { token: 'string', regex: '`', next: 'js' }, { token: 'string', regex: '<\\[', next: 'words' }, { token: 'string.regex', regex: '//', next: 'heregex' }, { token: 'string.regex', regex: '\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}', next: 'key' }, { token: 'constant.numeric', regex: '(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)' }, { token: 'lparen', regex: '[({[]' }, { token: 'rparen', regex: '[)}\\]]', next: 'key' }, { token: 'keyword.operator', regex: '\\S+' }, { token: 'text', regex: '\\s+' } ], heregex: [ { token: 'string.regex', regex: '.*?//[gimy$?]{0,4}', next: 'start' }, { token: 'string.regex', regex: '\\s*#{' }, { token: 'comment.regex', regex: '\\s+(?:#.*)?' }, { token: 'string.regex', regex: '\\S+' } ], key: [ { token: 'keyword.operator', regex: '[.?@!]+' }, { token: 'identifier', regex: identifier, next: 'start' }, { token: 'text', regex: '', next: 'start' } ], comment: [ { token: 'comment.doc', regex: '.*?\\*/', next: 'start' }, { token: 'comment.doc', regex: '.+' } ], qdoc: [ { token: 'string', regex: ".*?'''", next: 'key' }, stringfill ], qqdoc: [ { token: 'string', regex: '.*?"""', next: 'key' }, stringfill ], qstring: [ { token: 'string', regex: '[^\\\\\']*(?:\\\\.[^\\\\\']*)*\'', next: 'key' }, stringfill ], qqstring: [ { token: 'string', regex: '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"', next: 'key' }, stringfill ], js: [ { token: 'string', regex: '[^\\\\`]*(?:\\\\.[^\\\\`]*)*`', next: 'key' }, stringfill ], words: [ { token: 'string', regex: '.*?\\]>', next: 'key' }, stringfill ] }; for (var idx in Rules) { var r = Rules[idx]; if (r.splice) { for (var i = 0, len = r.length; i < len; ++i) { var rr = r[i]; if (typeof rr.regex === 'string') { Rules[idx][i].regex = new RegExp('^' + rr.regex); } } } else if (typeof rr.regex === 'string') { Rules[idx].regex = new RegExp('^' + r.regex); } } CodeMirror.defineMIME('text/x-livescript', 'livescript'); }); application/library/codemirror/mode/livescript/index.html000064400000023163146731177160020007 0ustar00 CodeMirror: LiveScript mode

LiveScript mode

MIME types defined: text/x-livescript.

The LiveScript mode was written by Kenneth Bentley.

application/library/codemirror/mode/pegjs/index.html000064400000003542146731177160016732 0ustar00 CodeMirror: PEG.js Mode

PEG.js Mode

The PEG.js Mode

Created by Forbes Lindesay.

application/library/codemirror/mode/pegjs/pegjs.js000064400000006771146731177160016412 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../javascript/javascript")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../javascript/javascript"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("pegjs", function (config) { var jsMode = CodeMirror.getMode(config, "javascript"); function identifier(stream) { return stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/); } return { startState: function () { return { inString: false, stringType: null, inComment: false, inCharacterClass: false, braced: 0, lhs: true, localState: null }; }, token: function (stream, state) { if (stream) //check for state changes if (!state.inString && !state.inComment && ((stream.peek() == '"') || (stream.peek() == "'"))) { state.stringType = stream.peek(); stream.next(); // Skip quote state.inString = true; // Update state } if (!state.inString && !state.inComment && stream.match(/^\/\*/)) { state.inComment = true; } //return state if (state.inString) { while (state.inString && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.inString = false; // Clear flag } else if (stream.peek() === '\\') { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return state.lhs ? "property string" : "string"; // Token style } else if (state.inComment) { while (state.inComment && !stream.eol()) { if (stream.match(/\*\//)) { state.inComment = false; // Clear flag } else { stream.match(/^.[^\*]*/); } } return "comment"; } else if (state.inCharacterClass) { while (state.inCharacterClass && !stream.eol()) { if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) { state.inCharacterClass = false; } } } else if (stream.peek() === '[') { stream.next(); state.inCharacterClass = true; return 'bracket'; } else if (stream.match(/^\/\//)) { stream.skipToEnd(); return "comment"; } else if (state.braced || stream.peek() === '{') { if (state.localState === null) { state.localState = CodeMirror.startState(jsMode); } var token = jsMode.token(stream, state.localState); var text = stream.current(); if (!token) { for (var i = 0; i < text.length; i++) { if (text[i] === '{') { state.braced++; } else if (text[i] === '}') { state.braced--; } }; } return token; } else if (identifier(stream)) { if (stream.peek() === ':') { return 'variable'; } return 'variable-2'; } else if (['[', ']', '(', ')'].indexOf(stream.peek()) != -1) { stream.next(); return 'bracket'; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }, "javascript"); }); application/library/codemirror/mode/gherkin/gherkin.js000064400000031711146731177160017240 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* Gherkin mode - http://www.cukes.info/ Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues */ // Following Objs from Brackets implementation: https://github.com/tregusti/brackets-gherkin/blob/master/main.js //var Quotes = { // SINGLE: 1, // DOUBLE: 2 //}; //var regex = { // keywords: /(Feature| {2}(Scenario|In order to|As|I)| {4}(Given|When|Then|And))/ //}; (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("gherkin", function () { return { startState: function () { return { lineNumber: 0, tableHeaderLine: false, allowFeature: true, allowBackground: false, allowScenario: false, allowSteps: false, allowPlaceholders: false, allowMultilineArgument: false, inMultilineString: false, inMultilineTable: false, inKeywordLine: false }; }, token: function (stream, state) { if (stream.sol()) { state.lineNumber++; state.inKeywordLine = false; if (state.inMultilineTable) { state.tableHeaderLine = false; if (!stream.match(/\s*\|/, false)) { state.allowMultilineArgument = false; state.inMultilineTable = false; } } } stream.eatSpace(); if (state.allowMultilineArgument) { // STRING if (state.inMultilineString) { if (stream.match('"""')) { state.inMultilineString = false; state.allowMultilineArgument = false; } else { stream.match(/.*/); } return "string"; } // TABLE if (state.inMultilineTable) { if (stream.match(/\|\s*/)) { return "bracket"; } else { stream.match(/[^\|]*/); return state.tableHeaderLine ? "header" : "string"; } } // DETECT START if (stream.match('"""')) { // String state.inMultilineString = true; return "string"; } else if (stream.match("|")) { // Table state.inMultilineTable = true; state.tableHeaderLine = true; return "bracket"; } } // LINE COMMENT if (stream.match(/#.*/)) { return "comment"; // TAG } else if (!state.inKeywordLine && stream.match(/@\S+/)) { return "tag"; // FEATURE } else if (!state.inKeywordLine && state.allowFeature && stream.match(/(機能|功能|フィーチャ|기능|โครงหลัก|ความสามารถ|ความต้องการทางธุรกิจ|ಹೆಚ್ಚಳ|గుణము|ਮੁਹਾਂਦਰਾ|ਨਕਸ਼ ਨੁਹਾਰ|ਖਾਸੀਅਤ|रूप लेख|وِیژگی|خاصية|תכונה|Функціонал|Функция|Функционалност|Функционал|Үзенчәлеклелек|Свойство|Особина|Мөмкинлек|Могућност|Λειτουργία|Δυνατότητα|Właściwość|Vlastnosť|Trajto|Tính năng|Savybė|Pretty much|Požiadavka|Požadavek|Potrzeba biznesowa|Özellik|Osobina|Ominaisuus|Omadus|OH HAI|Mogućnost|Mogucnost|Jellemző|Hwæt|Hwaet|Funzionalità|Funktionalitéit|Funktionalität|Funkcja|Funkcionalnost|Funkcionalitāte|Funkcia|Fungsi|Functionaliteit|Funcționalitate|Funcţionalitate|Functionalitate|Funcionalitat|Funcionalidade|Fonctionnalité|Fitur|Fīča|Feature|Eiginleiki|Egenskap|Egenskab|Característica|Caracteristica|Business Need|Aspekt|Arwedd|Ahoy matey!|Ability):/)) { state.allowScenario = true; state.allowBackground = true; state.allowPlaceholders = false; state.allowSteps = false; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // BACKGROUND } else if (!state.inKeywordLine && state.allowBackground && stream.match(/(背景|배경|แนวคิด|ಹಿನ್ನೆಲೆ|నేపథ్యం|ਪਿਛੋਕੜ|पृष्ठभूमि|زمینه|الخلفية|רקע|Тарих|Предыстория|Предистория|Позадина|Передумова|Основа|Контекст|Кереш|Υπόβαθρο|Założenia|Yo\-ho\-ho|Tausta|Taust|Situācija|Rerefons|Pozadina|Pozadie|Pozadí|Osnova|Latar Belakang|Kontext|Konteksts|Kontekstas|Kontekst|Háttér|Hannergrond|Grundlage|Geçmiş|Fundo|Fono|First off|Dis is what went down|Dasar|Contexto|Contexte|Context|Contesto|Cenário de Fundo|Cenario de Fundo|Cefndir|Bối cảnh|Bakgrunnur|Bakgrunn|Bakgrund|Baggrund|Background|B4|Antecedents|Antecedentes|Ær|Aer|Achtergrond):/)) { state.allowPlaceholders = false; state.allowSteps = true; state.allowBackground = false; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // SCENARIO OUTLINE } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景大綱|场景大纲|劇本大綱|剧本大纲|テンプレ|シナリオテンプレート|シナリオテンプレ|シナリオアウトライン|시나리오 개요|สรุปเหตุการณ์|โครงสร้างของเหตุการณ์|ವಿವರಣೆ|కథనం|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਟਕਥਾ ਢਾਂਚਾ|परिदृश्य रूपरेखा|سيناريو مخطط|الگوی سناریو|תבנית תרחיש|Сценарийның төзелеше|Сценарий структураси|Структура сценарію|Структура сценария|Структура сценарија|Скица|Рамка на сценарий|Концепт|Περιγραφή Σεναρίου|Wharrimean is|Template Situai|Template Senario|Template Keadaan|Tapausaihio|Szenariogrundriss|Szablon scenariusza|Swa hwær swa|Swa hwaer swa|Struktura scenarija|Structură scenariu|Structura scenariu|Skica|Skenario konsep|Shiver me timbers|Senaryo taslağı|Schema dello scenario|Scenariomall|Scenariomal|Scenario Template|Scenario Outline|Scenario Amlinellol|Scenārijs pēc parauga|Scenarijaus šablonas|Reckon it's like|Raamstsenaarium|Plang vum Szenario|Plan du Scénario|Plan du scénario|Osnova scénáře|Osnova Scenára|Náčrt Scenáru|Náčrt Scénáře|Náčrt Scenára|MISHUN SRSLY|Menggariskan Senario|Lýsing Dæma|Lýsing Atburðarásar|Konturo de la scenaro|Koncept|Khung tình huống|Khung kịch bản|Forgatókönyv vázlat|Esquema do Cenário|Esquema do Cenario|Esquema del escenario|Esquema de l'escenari|Esbozo do escenario|Delineação do Cenário|Delineacao do Cenario|All y'all|Abstrakt Scenario|Abstract Scenario):/)) { state.allowPlaceholders = true; state.allowSteps = true; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // EXAMPLES } else if (state.allowScenario && stream.match(/(例子|例|サンプル|예|ชุดของเหตุการณ์|ชุดของตัวอย่าง|ಉದಾಹರಣೆಗಳು|ఉదాహరణలు|ਉਦਾਹਰਨਾਂ|उदाहरण|نمونه ها|امثلة|דוגמאות|Үрнәкләр|Сценарији|Примеры|Примери|Приклади|Мисоллар|Мисаллар|Σενάρια|Παραδείγματα|You'll wanna|Voorbeelden|Variantai|Tapaukset|Se þe|Se the|Se ðe|Scenarios|Scenariji|Scenarijai|Przykłady|Primjeri|Primeri|Příklady|Príklady|Piemēri|Példák|Pavyzdžiai|Paraugs|Örnekler|Juhtumid|Exemplos|Exemples|Exemple|Exempel|EXAMPLZ|Examples|Esempi|Enghreifftiau|Ekzemploj|Eksempler|Ejemplos|Dữ liệu|Dead men tell no tales|Dæmi|Contoh|Cenários|Cenarios|Beispiller|Beispiele|Atburðarásir):/)) { state.allowPlaceholders = false; state.allowSteps = true; state.allowBackground = false; state.allowMultilineArgument = true; return "keyword"; // SCENARIO } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景|场景|劇本|剧本|シナリオ|시나리오|เหตุการณ์|ಕಥಾಸಾರಾಂಶ|సన్నివేశం|ਪਟਕਥਾ|परिदृश्य|سيناريو|سناریو|תרחיש|Сценарій|Сценарио|Сценарий|Пример|Σενάριο|Tình huống|The thing of it is|Tapaus|Szenario|Swa|Stsenaarium|Skenario|Situai|Senaryo|Senario|Scenaro|Scenariusz|Scenariu|Scénario|Scenario|Scenarijus|Scenārijs|Scenarij|Scenarie|Scénář|Scenár|Primer|MISHUN|Kịch bản|Keadaan|Heave to|Forgatókönyv|Escenario|Escenari|Cenário|Cenario|Awww, look mate|Atburðarás):/)) { state.allowPlaceholders = false; state.allowSteps = true; state.allowBackground = false; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // STEPS } else if (!state.inKeywordLine && state.allowSteps && stream.match(/(那麼|那么|而且|當|当|并且|同時|同时|前提|假设|假設|假定|假如|但是|但し|並且|もし|ならば|ただし|しかし|かつ|하지만|조건|먼저|만일|만약|단|그리고|그러면|และ |เมื่อ |แต่ |ดังนั้น |กำหนดให้ |ಸ್ಥಿತಿಯನ್ನು |ಮತ್ತು |ನೀಡಿದ |ನಂತರ |ಆದರೆ |మరియు |చెప్పబడినది |కాని |ఈ పరిస్థితిలో |అప్పుడు |ਪਰ |ਤਦ |ਜੇਕਰ |ਜਿਵੇਂ ਕਿ |ਜਦੋਂ |ਅਤੇ |यदि |परन्तु |पर |तब |तदा |तथा |जब |चूंकि |किन्तु |कदा |और |अगर |و |هنگامی |متى |لكن |عندما |ثم |بفرض |با فرض |اما |اذاً |آنگاه |כאשר |וגם |בהינתן |אזי |אז |אבל |Якщо |Һәм |Унда |Тоді |Тогда |То |Также |Та |Пусть |Припустимо, що |Припустимо |Онда |Но |Нехай |Нәтиҗәдә |Лекин |Ләкин |Коли |Когда |Когато |Када |Кад |К тому же |І |И |Задато |Задати |Задате |Если |Допустим |Дано |Дадено |Вә |Ва |Бирок |Әмма |Әйтик |Әгәр |Аммо |Али |Але |Агар |А також |А |Τότε |Όταν |Και |Δεδομένου |Αλλά |Þurh |Þegar |Þa þe |Þá |Þa |Zatati |Zakładając |Zadato |Zadate |Zadano |Zadani |Zadan |Za předpokladu |Za predpokladu |Youse know when youse got |Youse know like when |Yna |Yeah nah |Y'know |Y |Wun |Wtedy |When y'all |When |Wenn |WEN |wann |Ve |Và |Und |Un |ugeholl |Too right |Thurh |Thì |Then y'all |Then |Tha the |Tha |Tetapi |Tapi |Tak |Tada |Tad |Stel |Soit |Siis |Și |Şi |Si |Sed |Se |Så |Quando |Quand |Quan |Pryd |Potom |Pokud |Pokiaľ |Però |Pero |Pak |Oraz |Onda |Ond |Oletetaan |Og |Och |O zaman |Niin |Nhưng |När |Når |Mutta |Men |Mas |Maka |Majd |Mając |Mais |Maar |mä |Ma |Lorsque |Lorsqu'|Logo |Let go and haul |Kun |Kuid |Kui |Kiedy |Khi |Ketika |Kemudian |Keď |Když |Kaj |Kai |Kada |Kad |Jeżeli |Jeśli |Ja |It's just unbelievable |Ir |I CAN HAZ |I |Ha |Givun |Givet |Given y'all |Given |Gitt |Gegeven |Gegeben seien |Gegeben sei |Gdy |Gangway! |Fakat |Étant donnés |Etant donnés |Étant données |Etant données |Étant donnée |Etant donnée |Étant donné |Etant donné |Et |És |Entonces |Entón |Então |Entao |En |Eğer ki |Ef |Eeldades |E |Ðurh |Duota |Dun |Donitaĵo |Donat |Donada |Do |Diyelim ki |Diberi |Dengan |Den youse gotta |DEN |De |Dato |Dați fiind |Daţi fiind |Dati fiind |Dati |Date fiind |Date |Data |Dat fiind |Dar |Dann |dann |Dan |Dados |Dado |Dadas |Dada |Ða ðe |Ða |Cuando |Cho |Cando |Când |Cand |Cal |But y'all |But at the end of the day I reckon |BUT |But |Buh |Blimey! |Biết |Bet |Bagi |Aye |awer |Avast! |Atunci |Atesa |Atès |Apabila |Anrhegedig a |Angenommen |And y'all |And |AN |An |an |Amikor |Amennyiben |Ama |Als |Alors |Allora |Ali |Aleshores |Ale |Akkor |Ak |Adott |Ac |Aber |A zároveň |A tiež |A taktiež |A také |A |a |7 |\* )/)) { state.inStep = true; state.allowPlaceholders = true; state.allowMultilineArgument = true; state.inKeywordLine = true; return "keyword"; // INLINE STRING } else if (stream.match(/"[^"]*"?/)) { return "string"; // PLACEHOLDER } else if (state.allowPlaceholders && stream.match(/<[^>]*>?/)) { return "variable"; // Fall through } else { stream.next(); stream.eatWhile(/[^@"<#]/); return null; } } }; }); CodeMirror.defineMIME("text/x-feature", "gherkin"); }); application/library/codemirror/mode/gherkin/index.html000064400000003036146731177160017247 0ustar00 CodeMirror: Gherkin mode

Gherkin mode

MIME types defined: text/x-feature.

application/library/codemirror/mode/dtd/dtd.js000064400000011316146731177160015507 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* DTD mode Ported to CodeMirror by Peter Kroon Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues GitHub: @peterkroon */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("dtd", function(config) { var indentUnit = config.indentUnit, type; function ret(style, tp) {type = tp; return style;} function tokenBase(stream, state) { var ch = stream.next(); if (ch == "<" && stream.eat("!") ) { if (stream.eatWhile(/[\-]/)) { state.tokenize = tokenSGMLComment; return tokenSGMLComment(stream, state); } else if (stream.eatWhile(/[\w]/)) return ret("keyword", "doindent"); } else if (ch == "<" && stream.eat("?")) { //xml declaration state.tokenize = inBlock("meta", "?>"); return ret("meta", ch); } else if (ch == "#" && stream.eatWhile(/[\w]/)) return ret("atom", "tag"); else if (ch == "|") return ret("keyword", "seperator"); else if (ch.match(/[\(\)\[\]\-\.,\+\?>]/)) return ret(null, ch);//if(ch === ">") return ret(null, "endtag"); else else if (ch.match(/[\[\]]/)) return ret("rule", ch); else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (stream.eatWhile(/[a-zA-Z\?\+\d]/)) { var sc = stream.current(); if( sc.substr(sc.length-1,sc.length).match(/\?|\+/) !== null )stream.backUp(1); return ret("tag", "tag"); } else if (ch == "%" || ch == "*" ) return ret("number", "number"); else { stream.eatWhile(/[\w\\\-_%.{,]/); return ret(null, null); } } function tokenSGMLComment(stream, state) { var dashes = 0, ch; while ((ch = stream.next()) != null) { if (dashes >= 2 && ch == ">") { state.tokenize = tokenBase; break; } dashes = (ch == "-") ? dashes + 1 : 0; } return ret("comment", "comment"); } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return ret("string", "tag"); }; } function inBlock(style, terminator) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { state.tokenize = tokenBase; break; } stream.next(); } return style; }; } return { startState: function(base) { return {tokenize: tokenBase, baseIndent: base || 0, stack: []}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); var context = state.stack[state.stack.length-1]; if (stream.current() == "[" || type === "doindent" || type == "[") state.stack.push("rule"); else if (type === "endtag") state.stack[state.stack.length-1] = "endtag"; else if (stream.current() == "]" || type == "]" || (type == ">" && context == "rule")) state.stack.pop(); else if (type == "[") state.stack.push("["); return style; }, indent: function(state, textAfter) { var n = state.stack.length; if( textAfter.match(/\]\s+|\]/) )n=n-1; else if(textAfter.substr(textAfter.length-1, textAfter.length) === ">"){ if(textAfter.substr(0,1) === "<") {} else if( type == "doindent" && textAfter.length > 1 ) {} else if( type == "doindent")n--; else if( type == ">" && textAfter.length > 1) {} else if( type == "tag" && textAfter !== ">") {} else if( type == "tag" && state.stack[state.stack.length-1] == "rule")n--; else if( type == "tag")n++; else if( textAfter === ">" && state.stack[state.stack.length-1] == "rule" && type === ">")n--; else if( textAfter === ">" && state.stack[state.stack.length-1] == "rule") {} else if( textAfter.substr(0,1) !== "<" && textAfter.substr(0,1) === ">" )n=n-1; else if( textAfter === ">") {} else n=n-1; //over rule them all if(type == null || type == "]")n--; } return state.baseIndent + n * indentUnit; }, electricChars: "]>" }; }); CodeMirror.defineMIME("application/xml-dtd", "dtd"); }); application/library/codemirror/mode/dtd/index.html000064400000006411146731177160016373 0ustar00 CodeMirror: DTD mode

DTD mode

MIME types defined: application/xml-dtd.

application/library/codemirror/mode/mbox/mbox.js000064400000007101146731177160016070 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var rfc2822 = [ "From", "Sender", "Reply-To", "To", "Cc", "Bcc", "Message-ID", "In-Reply-To", "References", "Resent-From", "Resent-Sender", "Resent-To", "Resent-Cc", "Resent-Bcc", "Resent-Message-ID", "Return-Path", "Received" ]; var rfc2822NoEmail = [ "Date", "Subject", "Comments", "Keywords", "Resent-Date" ]; CodeMirror.registerHelper("hintWords", "mbox", rfc2822.concat(rfc2822NoEmail)); var whitespace = /^[ \t]/; var separator = /^From /; // See RFC 4155 var rfc2822Header = new RegExp("^(" + rfc2822.join("|") + "): "); var rfc2822HeaderNoEmail = new RegExp("^(" + rfc2822NoEmail.join("|") + "): "); var header = /^[^:]+:/; // Optional fields defined in RFC 2822 var email = /^[^ ]+@[^ ]+/; var untilEmail = /^.*?(?=[^ ]+?@[^ ]+)/; var bracketedEmail = /^<.*?>/; var untilBracketedEmail = /^.*?(?=<.*>)/; function styleForHeader(header) { if (header === "Subject") return "header"; return "string"; } function readToken(stream, state) { if (stream.sol()) { // From last line state.inSeparator = false; if (state.inHeader && stream.match(whitespace)) { // Header folding return null; } else { state.inHeader = false; state.header = null; } if (stream.match(separator)) { state.inHeaders = true; state.inSeparator = true; return "atom"; } var match; var emailPermitted = false; if ((match = stream.match(rfc2822HeaderNoEmail)) || (emailPermitted = true) && (match = stream.match(rfc2822Header))) { state.inHeaders = true; state.inHeader = true; state.emailPermitted = emailPermitted; state.header = match[1]; return "atom"; } // Use vim's heuristics: recognize custom headers only if the line is in a // block of legitimate headers. if (state.inHeaders && (match = stream.match(header))) { state.inHeader = true; state.emailPermitted = true; state.header = match[1]; return "atom"; } state.inHeaders = false; stream.skipToEnd(); return null; } if (state.inSeparator) { if (stream.match(email)) return "link"; if (stream.match(untilEmail)) return "atom"; stream.skipToEnd(); return "atom"; } if (state.inHeader) { var style = styleForHeader(state.header); if (state.emailPermitted) { if (stream.match(bracketedEmail)) return style + " link"; if (stream.match(untilBracketedEmail)) return style; } stream.skipToEnd(); return style; } stream.skipToEnd(); return null; }; CodeMirror.defineMode("mbox", function() { return { startState: function() { return { // Is in a mbox separator inSeparator: false, // Is in a mail header inHeader: false, // If bracketed email is permitted. Only applicable when inHeader emailPermitted: false, // Name of current header header: null, // Is in a region of mail headers inHeaders: false }; }, token: readToken, blankLine: function(state) { state.inHeaders = state.inSeparator = state.inHeader = false; } }; }); CodeMirror.defineMIME("application/mbox", "mbox"); }); application/library/codemirror/mode/mbox/index.html000064400000002415146731177160016565 0ustar00 CodeMirror: mbox mode

mbox mode

MIME types defined: application/mbox.

application/library/codemirror/mode/nginx/nginx.js000064400000023664146731177160016440 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("nginx", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words( /* ngxDirectiveControl */ "break return rewrite set" + /* ngxDirective */ " accept_mutex accept_mutex_delay access_log add_after_body add_before_body add_header addition_types aio alias allow ancient_browser ancient_browser_value auth_basic auth_basic_user_file auth_http auth_http_header auth_http_timeout autoindex autoindex_exact_size autoindex_localtime charset charset_types client_body_buffer_size client_body_in_file_only client_body_in_single_buffer client_body_temp_path client_body_timeout client_header_buffer_size client_header_timeout client_max_body_size connection_pool_size create_full_put_path daemon dav_access dav_methods debug_connection debug_points default_type degradation degrade deny devpoll_changes devpoll_events directio directio_alignment empty_gif env epoll_events error_log eventport_events expires fastcgi_bind fastcgi_buffer_size fastcgi_buffers fastcgi_busy_buffers_size fastcgi_cache fastcgi_cache_key fastcgi_cache_methods fastcgi_cache_min_uses fastcgi_cache_path fastcgi_cache_use_stale fastcgi_cache_valid fastcgi_catch_stderr fastcgi_connect_timeout fastcgi_hide_header fastcgi_ignore_client_abort fastcgi_ignore_headers fastcgi_index fastcgi_intercept_errors fastcgi_max_temp_file_size fastcgi_next_upstream fastcgi_param fastcgi_pass_header fastcgi_pass_request_body fastcgi_pass_request_headers fastcgi_read_timeout fastcgi_send_lowat fastcgi_send_timeout fastcgi_split_path_info fastcgi_store fastcgi_store_access fastcgi_temp_file_write_size fastcgi_temp_path fastcgi_upstream_fail_timeout fastcgi_upstream_max_fails flv geoip_city geoip_country google_perftools_profiles gzip gzip_buffers gzip_comp_level gzip_disable gzip_hash gzip_http_version gzip_min_length gzip_no_buffer gzip_proxied gzip_static gzip_types gzip_vary gzip_window if_modified_since ignore_invalid_headers image_filter image_filter_buffer image_filter_jpeg_quality image_filter_transparency imap_auth imap_capabilities imap_client_buffer index ip_hash keepalive_requests keepalive_timeout kqueue_changes kqueue_events large_client_header_buffers limit_conn limit_conn_log_level limit_rate limit_rate_after limit_req limit_req_log_level limit_req_zone limit_zone lingering_time lingering_timeout lock_file log_format log_not_found log_subrequest map_hash_bucket_size map_hash_max_size master_process memcached_bind memcached_buffer_size memcached_connect_timeout memcached_next_upstream memcached_read_timeout memcached_send_timeout memcached_upstream_fail_timeout memcached_upstream_max_fails merge_slashes min_delete_depth modern_browser modern_browser_value msie_padding msie_refresh multi_accept open_file_cache open_file_cache_errors open_file_cache_events open_file_cache_min_uses open_file_cache_valid open_log_file_cache output_buffers override_charset perl perl_modules perl_require perl_set pid pop3_auth pop3_capabilities port_in_redirect postpone_gzipping postpone_output protocol proxy proxy_bind proxy_buffer proxy_buffer_size proxy_buffering proxy_buffers proxy_busy_buffers_size proxy_cache proxy_cache_key proxy_cache_methods proxy_cache_min_uses proxy_cache_path proxy_cache_use_stale proxy_cache_valid proxy_connect_timeout proxy_headers_hash_bucket_size proxy_headers_hash_max_size proxy_hide_header proxy_ignore_client_abort proxy_ignore_headers proxy_intercept_errors proxy_max_temp_file_size proxy_method proxy_next_upstream proxy_pass_error_message proxy_pass_header proxy_pass_request_body proxy_pass_request_headers proxy_read_timeout proxy_redirect proxy_send_lowat proxy_send_timeout proxy_set_body proxy_set_header proxy_ssl_session_reuse proxy_store proxy_store_access proxy_temp_file_write_size proxy_temp_path proxy_timeout proxy_upstream_fail_timeout proxy_upstream_max_fails random_index read_ahead real_ip_header recursive_error_pages request_pool_size reset_timedout_connection resolver resolver_timeout rewrite_log rtsig_overflow_events rtsig_overflow_test rtsig_overflow_threshold rtsig_signo satisfy secure_link_secret send_lowat send_timeout sendfile sendfile_max_chunk server_name_in_redirect server_names_hash_bucket_size server_names_hash_max_size server_tokens set_real_ip_from smtp_auth smtp_capabilities smtp_client_buffer smtp_greeting_delay so_keepalive source_charset ssi ssi_ignore_recycled_buffers ssi_min_file_chunk ssi_silent_errors ssi_types ssi_value_length ssl ssl_certificate ssl_certificate_key ssl_ciphers ssl_client_certificate ssl_crl ssl_dhparam ssl_engine ssl_prefer_server_ciphers ssl_protocols ssl_session_cache ssl_session_timeout ssl_verify_client ssl_verify_depth starttls stub_status sub_filter sub_filter_once sub_filter_types tcp_nodelay tcp_nopush thread_stack_size timeout timer_resolution types_hash_bucket_size types_hash_max_size underscores_in_headers uninitialized_variable_warn use user userid userid_domain userid_expires userid_mark userid_name userid_p3p userid_path userid_service valid_referers variables_hash_bucket_size variables_hash_max_size worker_connections worker_cpu_affinity worker_priority worker_processes worker_rlimit_core worker_rlimit_nofile worker_rlimit_sigpending worker_threads working_directory xclient xml_entities xslt_stylesheet xslt_typesdrew@li229-23" ); var keywords_block = words( /* ngxDirectiveBlock */ "http mail events server types location upstream charset_map limit_except if geo map" ); var keywords_important = words( /* ngxDirectiveImportant */ "include root server server_name listen internal proxy_pass memcached_pass fastcgi_pass try_files" ); var indentUnit = config.indentUnit, type; function ret(style, tp) {type = tp; return style;} function tokenBase(stream, state) { stream.eatWhile(/[\w\$_]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) { return "keyword"; } else if (keywords_block.propertyIsEnumerable(cur)) { return "variable-2"; } else if (keywords_important.propertyIsEnumerable(cur)) { return "string-2"; } /**/ var ch = stream.next(); if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("meta", stream.current());} else if (ch == "/" && stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else if (ch == "<" && stream.eat("!")) { state.tokenize = tokenSGMLComment; return tokenSGMLComment(stream, state); } else if (ch == "=") ret(null, "compare"); else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare"); else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "#") { stream.skipToEnd(); return ret("comment", "comment"); } else if (ch == "!") { stream.match(/^\s*\w*/); return ret("keyword", "important"); } else if (/\d/.test(ch)) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (/[,.+>*\/]/.test(ch)) { return ret(null, "select-op"); } else if (/[;{}:\[\]]/.test(ch)) { return ret(null, ch); } else { stream.eatWhile(/[\w\\\-]/); return ret("variable", "variable"); } } function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } function tokenSGMLComment(stream, state) { var dashes = 0, ch; while ((ch = stream.next()) != null) { if (dashes >= 2 && ch == ">") { state.tokenize = tokenBase; break; } dashes = (ch == "-") ? dashes + 1 : 0; } return ret("comment", "comment"); } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) break; escaped = !escaped && ch == "\\"; } if (!escaped) state.tokenize = tokenBase; return ret("string", "string"); }; } return { startState: function(base) { return {tokenize: tokenBase, baseIndent: base || 0, stack: []}; }, token: function(stream, state) { if (stream.eatSpace()) return null; type = null; var style = state.tokenize(stream, state); var context = state.stack[state.stack.length-1]; if (type == "hash" && context == "rule") style = "atom"; else if (style == "variable") { if (context == "rule") style = "number"; else if (!context || context == "@media{") style = "tag"; } if (context == "rule" && /^[\{\};]$/.test(type)) state.stack.pop(); if (type == "{") { if (context == "@media") state.stack[state.stack.length-1] = "@media{"; else state.stack.push("{"); } else if (type == "}") state.stack.pop(); else if (type == "@media") state.stack.push("@media"); else if (context == "{" && type != "comment") state.stack.push("rule"); return style; }, indent: function(state, textAfter) { var n = state.stack.length; if (/^\}/.test(textAfter)) n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1; return state.baseIndent + n * indentUnit; }, electricChars: "}" }; }); CodeMirror.defineMIME("text/x-nginx-conf", "nginx"); }); application/library/codemirror/mode/nginx/index.html000064400000012167146731177160016750 0ustar00 CodeMirror: NGINX mode

NGINX mode

MIME types defined: text/nginx.

application/library/codemirror/mode/haxe/haxe.js000064400000042240146731177160016033 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("haxe", function(config, parserConfig) { var indentUnit = config.indentUnit; // Tokenizer function kw(type) {return {type: type, style: "keyword"};} var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); var operator = kw("operator"), atom = {type: "atom", style: "atom"}, attribute = {type:"attribute", style: "attribute"}; var type = kw("typedef"); var keywords = { "if": A, "while": A, "else": B, "do": B, "try": B, "return": C, "break": C, "continue": C, "new": C, "throw": C, "var": kw("var"), "inline":attribute, "static": attribute, "using":kw("import"), "public": attribute, "private": attribute, "cast": kw("cast"), "import": kw("import"), "macro": kw("macro"), "function": kw("function"), "catch": kw("catch"), "untyped": kw("untyped"), "callback": kw("cb"), "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), "in": operator, "never": kw("property_access"), "trace":kw("trace"), "class": type, "abstract":type, "enum":type, "interface":type, "typedef":type, "extends":type, "implements":type, "dynamic":type, "true": atom, "false": atom, "null": atom }; var isOperatorChar = /[+\-*&%=<>!?|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function toUnescaped(stream, end) { var escaped = false, next; while ((next = stream.next()) != null) { if (next == end && !escaped) return true; escaped = !escaped && next == "\\"; } } // Used as scratch variables to communicate multiple values without // consing up tons of objects. var type, content; function ret(tp, style, cont) { type = tp; content = cont; return style; } function haxeTokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { return chain(stream, state, haxeTokenString(ch)); } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { return ret(ch); } else if (ch == "0" && stream.eat(/x/i)) { stream.eatWhile(/[\da-f]/i); return ret("number", "number"); } else if (/\d/.test(ch) || ch == "-" && stream.eat(/\d/)) { stream.match(/^\d*(?:\.\d*(?!\.))?(?:[eE][+\-]?\d+)?/); return ret("number", "number"); } else if (state.reAllowed && (ch == "~" && stream.eat(/\//))) { toUnescaped(stream, "/"); stream.eatWhile(/[gimsu]/); return ret("regexp", "string-2"); } else if (ch == "/") { if (stream.eat("*")) { return chain(stream, state, haxeTokenComment); } else if (stream.eat("/")) { stream.skipToEnd(); return ret("comment", "comment"); } else { stream.eatWhile(isOperatorChar); return ret("operator", null, stream.current()); } } else if (ch == "#") { stream.skipToEnd(); return ret("conditional", "meta"); } else if (ch == "@") { stream.eat(/:/); stream.eatWhile(/[\w_]/); return ret ("metadata", "meta"); } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return ret("operator", null, stream.current()); } else { var word; if(/[A-Z]/.test(ch)) { stream.eatWhile(/[\w_<>]/); word = stream.current(); return ret("type", "variable-3", word); } else { stream.eatWhile(/[\w_]/); var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; return (known && state.kwAllowed) ? ret(known.type, known.style, word) : ret("variable", "variable", word); } } } function haxeTokenString(quote) { return function(stream, state) { if (toUnescaped(stream, quote)) state.tokenize = haxeTokenBase; return ret("string", "string"); }; } function haxeTokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = haxeTokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } // Parser var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true}; function HaxeLexical(indented, column, type, align, prev, info) { this.indented = indented; this.column = column; this.type = type; this.prev = prev; this.info = info; if (align != null) this.align = align; } function inScope(state, varname) { for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; } function parseHaxe(state, style, type, content, stream) { var cc = state.cc; // Communicate our context to the combinators. // (Less wasteful than consing up a hundred closures on every call.) cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; while(true) { var combinator = cc.length ? cc.pop() : statement; if (combinator(type, content)) { while(cc.length && cc[cc.length - 1].lex) cc.pop()(); if (cx.marked) return cx.marked; if (type == "variable" && inScope(state, content)) return "variable-2"; if (type == "variable" && imported(state, content)) return "variable-3"; return style; } } } function imported(state, typename) { if (/[a-z]/.test(typename.charAt(0))) return false; var len = state.importedtypes.length; for (var i = 0; i= 0; i--) cx.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function inList(name, list) { for (var v = list; v; v = v.next) if (v.name == name) return true; return false; } function register(varname) { var state = cx.state; if (state.context) { cx.marked = "def"; if (inList(varname, state.localVars)) return; state.localVars = {name: varname, next: state.localVars}; } else if (state.globalVars) { if (inList(varname, state.globalVars)) return; state.globalVars = {name: varname, next: state.globalVars}; } } // Combinators var defaultVars = {name: "this", next: null}; function pushcontext() { if (!cx.state.context) cx.state.localVars = defaultVars; cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; } function popcontext() { cx.state.localVars = cx.state.context.vars; cx.state.context = cx.state.context.prev; } popcontext.lex = true; function pushlex(type, info) { var result = function() { var state = cx.state; state.lexical = new HaxeLexical(state.indented, cx.stream.column(), type, null, state.lexical, info); }; result.lex = true; return result; } function poplex() { var state = cx.state; if (state.lexical.prev) { if (state.lexical.type == ")") state.indented = state.lexical.indented; state.lexical = state.lexical.prev; } } poplex.lex = true; function expect(wanted) { function f(type) { if (type == wanted) return cont(); else if (wanted == ";") return pass(); else return cont(f); } return f; } function statement(type) { if (type == "@") return cont(metadef); if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex); if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); if (type == "keyword b") return cont(pushlex("form"), statement, poplex); if (type == "{") return cont(pushlex("}"), pushcontext, block, poplex, popcontext); if (type == ";") return cont(); if (type == "attribute") return cont(maybeattribute); if (type == "function") return cont(functiondef); if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"), poplex, statement, poplex); if (type == "variable") return cont(pushlex("stat"), maybelabel); if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), block, poplex, poplex); if (type == "case") return cont(expression, expect(":")); if (type == "default") return cont(expect(":")); if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), statement, poplex, popcontext); if (type == "import") return cont(importdef, expect(";")); if (type == "typedef") return cont(typedef); return pass(pushlex("stat"), expression, expect(";"), poplex); } function expression(type) { if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator); if (type == "type" ) return cont(maybeoperator); if (type == "function") return cont(functiondef); if (type == "keyword c") return cont(maybeexpression); if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeoperator); if (type == "operator") return cont(expression); if (type == "[") return cont(pushlex("]"), commasep(maybeexpression, "]"), poplex, maybeoperator); if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeoperator); return cont(); } function maybeexpression(type) { if (type.match(/[;\}\)\],]/)) return pass(); return pass(expression); } function maybeoperator(type, value) { if (type == "operator" && /\+\+|--/.test(value)) return cont(maybeoperator); if (type == "operator" || type == ":") return cont(expression); if (type == ";") return; if (type == "(") return cont(pushlex(")"), commasep(expression, ")"), poplex, maybeoperator); if (type == ".") return cont(property, maybeoperator); if (type == "[") return cont(pushlex("]"), expression, expect("]"), poplex, maybeoperator); } function maybeattribute(type) { if (type == "attribute") return cont(maybeattribute); if (type == "function") return cont(functiondef); if (type == "var") return cont(vardef1); } function metadef(type) { if(type == ":") return cont(metadef); if(type == "variable") return cont(metadef); if(type == "(") return cont(pushlex(")"), commasep(metaargs, ")"), poplex, statement); } function metaargs(type) { if(type == "variable") return cont(); } function importdef (type, value) { if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } else if(type == "variable" || type == "property" || type == "." || value == "*") return cont(importdef); } function typedef (type, value) { if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } else if (type == "type" && /[A-Z]/.test(value.charAt(0))) { return cont(); } } function maybelabel(type) { if (type == ":") return cont(poplex, statement); return pass(maybeoperator, expect(";"), poplex); } function property(type) { if (type == "variable") {cx.marked = "property"; return cont();} } function objprop(type) { if (type == "variable") cx.marked = "property"; if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expression); } function commasep(what, end) { function proceed(type) { if (type == ",") return cont(what, proceed); if (type == end) return cont(); return cont(expect(end)); } return function(type) { if (type == end) return cont(); else return pass(what, proceed); }; } function block(type) { if (type == "}") return cont(); return pass(statement, block); } function vardef1(type, value) { if (type == "variable"){register(value); return cont(typeuse, vardef2);} return cont(); } function vardef2(type, value) { if (value == "=") return cont(expression, vardef2); if (type == ",") return cont(vardef1); } function forspec1(type, value) { if (type == "variable") { register(value); return cont(forin, expression) } else { return pass() } } function forin(_type, value) { if (value == "in") return cont(); } function functiondef(type, value) { //function names starting with upper-case letters are recognised as types, so cludging them together here. if (type == "variable" || type == "type") {register(value); return cont(functiondef);} if (value == "new") return cont(functiondef); if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, typeuse, statement, popcontext); } function typeuse(type) { if(type == ":") return cont(typestring); } function typestring(type) { if(type == "type") return cont(); if(type == "variable") return cont(); if(type == "{") return cont(pushlex("}"), commasep(typeprop, "}"), poplex); } function typeprop(type) { if(type == "variable") return cont(typeuse); } function funarg(type, value) { if (type == "variable") {register(value); return cont(typeuse);} } // Interface return { startState: function(basecolumn) { var defaulttypes = ["Int", "Float", "String", "Void", "Std", "Bool", "Dynamic", "Array"]; var state = { tokenize: haxeTokenBase, reAllowed: true, kwAllowed: true, cc: [], lexical: new HaxeLexical((basecolumn || 0) - indentUnit, 0, "block", false), localVars: parserConfig.localVars, importedtypes: defaulttypes, context: parserConfig.localVars && {vars: parserConfig.localVars}, indented: 0 }; if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars; return state; }, token: function(stream, state) { if (stream.sol()) { if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; state.indented = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (type == "comment") return style; state.reAllowed = !!(type == "operator" || type == "keyword c" || type.match(/^[\[{}\(,;:]$/)); state.kwAllowed = type != '.'; return parseHaxe(state, style, type, content, stream); }, indent: function(state, textAfter) { if (state.tokenize != haxeTokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; var type = lexical.type, closing = firstChar == type; if (type == "vardef") return lexical.indented + 4; else if (type == "form" && firstChar == "{") return lexical.indented; else if (type == "stat" || type == "form") return lexical.indented + indentUnit; else if (lexical.info == "switch" && !closing) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); else if (lexical.align) return lexical.column + (closing ? 0 : 1); else return lexical.indented + (closing ? 0 : indentUnit); }, electricChars: "{}", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-haxe", "haxe"); CodeMirror.defineMode("hxml", function () { return { startState: function () { return { define: false, inString: false }; }, token: function (stream, state) { var ch = stream.peek(); var sol = stream.sol(); ///* comments */ if (ch == "#") { stream.skipToEnd(); return "comment"; } if (sol && ch == "-") { var style = "variable-2"; stream.eat(/-/); if (stream.peek() == "-") { stream.eat(/-/); style = "keyword a"; } if (stream.peek() == "D") { stream.eat(/[D]/); style = "keyword c"; state.define = true; } stream.eatWhile(/[A-Z]/i); return style; } var ch = stream.peek(); if (state.inString == false && ch == "'") { state.inString = true; ch = stream.next(); } if (state.inString == true) { if (stream.skipTo("'")) { } else { stream.skipToEnd(); } if (stream.peek() == "'") { stream.next(); state.inString = false; } return "string"; } stream.next(); return null; }, lineComment: "#" }; }); CodeMirror.defineMIME("text/x-hxml", "hxml"); }); application/library/codemirror/mode/haxe/index.html000064400000005021146731177160016541 0ustar00 CodeMirror: Haxe mode

Haxe mode

Hxml mode:

MIME types defined: text/x-haxe, text/x-hxml.

application/library/codemirror/mode/modelica/modelica.js000064400000015422146731177160017515 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Modelica support for CodeMirror, copyright (c) by Lennart Ochel (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { "use strict"; CodeMirror.defineMode("modelica", function(config, parserConfig) { var indentUnit = config.indentUnit; var keywords = parserConfig.keywords || {}; var builtin = parserConfig.builtin || {}; var atoms = parserConfig.atoms || {}; var isSingleOperatorChar = /[;=\(:\),{}.*<>+\-\/^\[\]]/; var isDoubleOperatorChar = /(:=|<=|>=|==|<>|\.\+|\.\-|\.\*|\.\/|\.\^)/; var isDigit = /[0-9]/; var isNonDigit = /[_a-zA-Z]/; function tokenLineComment(stream, state) { stream.skipToEnd(); state.tokenize = null; return "comment"; } function tokenBlockComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (maybeEnd && ch == "/") { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenString(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == '"' && !escaped) { state.tokenize = null; state.sol = false; break; } escaped = !escaped && ch == "\\"; } return "string"; } function tokenIdent(stream, state) { stream.eatWhile(isDigit); while (stream.eat(isDigit) || stream.eat(isNonDigit)) { } var cur = stream.current(); if(state.sol && (cur == "package" || cur == "model" || cur == "when" || cur == "connector")) state.level++; else if(state.sol && cur == "end" && state.level > 0) state.level--; state.tokenize = null; state.sol = false; if (keywords.propertyIsEnumerable(cur)) return "keyword"; else if (builtin.propertyIsEnumerable(cur)) return "builtin"; else if (atoms.propertyIsEnumerable(cur)) return "atom"; else return "variable"; } function tokenQIdent(stream, state) { while (stream.eat(/[^']/)) { } state.tokenize = null; state.sol = false; if(stream.eat("'")) return "variable"; else return "error"; } function tokenUnsignedNuber(stream, state) { stream.eatWhile(isDigit); if (stream.eat('.')) { stream.eatWhile(isDigit); } if (stream.eat('e') || stream.eat('E')) { if (!stream.eat('-')) stream.eat('+'); stream.eatWhile(isDigit); } state.tokenize = null; state.sol = false; return "number"; } // Interface return { startState: function() { return { tokenize: null, level: 0, sol: true }; }, token: function(stream, state) { if(state.tokenize != null) { return state.tokenize(stream, state); } if(stream.sol()) { state.sol = true; } // WHITESPACE if(stream.eatSpace()) { state.tokenize = null; return null; } var ch = stream.next(); // LINECOMMENT if(ch == '/' && stream.eat('/')) { state.tokenize = tokenLineComment; } // BLOCKCOMMENT else if(ch == '/' && stream.eat('*')) { state.tokenize = tokenBlockComment; } // TWO SYMBOL TOKENS else if(isDoubleOperatorChar.test(ch+stream.peek())) { stream.next(); state.tokenize = null; return "operator"; } // SINGLE SYMBOL TOKENS else if(isSingleOperatorChar.test(ch)) { state.tokenize = null; return "operator"; } // IDENT else if(isNonDigit.test(ch)) { state.tokenize = tokenIdent; } // Q-IDENT else if(ch == "'" && stream.peek() && stream.peek() != "'") { state.tokenize = tokenQIdent; } // STRING else if(ch == '"') { state.tokenize = tokenString; } // UNSIGNED_NUBER else if(isDigit.test(ch)) { state.tokenize = tokenUnsignedNuber; } // ERROR else { state.tokenize = null; return "error"; } return state.tokenize(stream, state); }, indent: function(state, textAfter) { if (state.tokenize != null) return CodeMirror.Pass; var level = state.level; if(/(algorithm)/.test(textAfter)) level--; if(/(equation)/.test(textAfter)) level--; if(/(initial algorithm)/.test(textAfter)) level--; if(/(initial equation)/.test(textAfter)) level--; if(/(end)/.test(textAfter)) level--; if(level > 0) return indentUnit*level; else return 0; }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i=0; i CodeMirror: Modelica mode

Modelica mode

Simple mode that tries to handle Modelica as well as it can.

MIME types defined: text/x-modelica (Modlica code).

application/library/codemirror/mode/xml/xml.js000064400000030432146731177160015561 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var htmlConfig = { autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true, 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true, 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true, 'track': true, 'wbr': true, 'menuitem': true}, implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true, 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true, 'th': true, 'tr': true}, contextGrabbers: { 'dd': {'dd': true, 'dt': true}, 'dt': {'dd': true, 'dt': true}, 'li': {'li': true}, 'option': {'option': true, 'optgroup': true}, 'optgroup': {'optgroup': true}, 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true, 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true, 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true, 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true, 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true}, 'rp': {'rp': true, 'rt': true}, 'rt': {'rp': true, 'rt': true}, 'tbody': {'tbody': true, 'tfoot': true}, 'td': {'td': true, 'th': true}, 'tfoot': {'tbody': true}, 'th': {'td': true, 'th': true}, 'thead': {'tbody': true, 'tfoot': true}, 'tr': {'tr': true} }, doNotIndent: {"pre": true}, allowUnquoted: true, allowMissing: true, caseFold: true } var xmlConfig = { autoSelfClosers: {}, implicitlyClosed: {}, contextGrabbers: {}, doNotIndent: {}, allowUnquoted: false, allowMissing: false, caseFold: false } CodeMirror.defineMode("xml", function(editorConf, config_) { var indentUnit = editorConf.indentUnit var config = {} var defaults = config_.htmlMode ? htmlConfig : xmlConfig for (var prop in defaults) config[prop] = defaults[prop] for (var prop in config_) config[prop] = config_[prop] // Return variables for tokenizers var type, setStyle; function inText(stream, state) { function chain(parser) { state.tokenize = parser; return parser(stream, state); } var ch = stream.next(); if (ch == "<") { if (stream.eat("!")) { if (stream.eat("[")) { if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); else return null; } else if (stream.match("--")) { return chain(inBlock("comment", "-->")); } else if (stream.match("DOCTYPE", true, true)) { stream.eatWhile(/[\w\._\-]/); return chain(doctype(1)); } else { return null; } } else if (stream.eat("?")) { stream.eatWhile(/[\w\._\-]/); state.tokenize = inBlock("meta", "?>"); return "meta"; } else { type = stream.eat("/") ? "closeTag" : "openTag"; state.tokenize = inTag; return "tag bracket"; } } else if (ch == "&") { var ok; if (stream.eat("#")) { if (stream.eat("x")) { ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); } else { ok = stream.eatWhile(/[\d]/) && stream.eat(";"); } } else { ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); } return ok ? "atom" : "error"; } else { stream.eatWhile(/[^&<]/); return null; } } inText.isInText = true; function inTag(stream, state) { var ch = stream.next(); if (ch == ">" || (ch == "/" && stream.eat(">"))) { state.tokenize = inText; type = ch == ">" ? "endTag" : "selfcloseTag"; return "tag bracket"; } else if (ch == "=") { type = "equals"; return null; } else if (ch == "<") { state.tokenize = inText; state.state = baseState; state.tagName = state.tagStart = null; var next = state.tokenize(stream, state); return next ? next + " tag error" : "tag error"; } else if (/[\'\"]/.test(ch)) { state.tokenize = inAttribute(ch); state.stringStartCol = stream.column(); return state.tokenize(stream, state); } else { stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/); return "word"; } } function inAttribute(quote) { var closure = function(stream, state) { while (!stream.eol()) { if (stream.next() == quote) { state.tokenize = inTag; break; } } return "string"; }; closure.isInAttribute = true; return closure; } function inBlock(style, terminator) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { state.tokenize = inText; break; } stream.next(); } return style; }; } function doctype(depth) { return function(stream, state) { var ch; while ((ch = stream.next()) != null) { if (ch == "<") { state.tokenize = doctype(depth + 1); return state.tokenize(stream, state); } else if (ch == ">") { if (depth == 1) { state.tokenize = inText; break; } else { state.tokenize = doctype(depth - 1); return state.tokenize(stream, state); } } } return "meta"; }; } function Context(state, tagName, startOfLine) { this.prev = state.context; this.tagName = tagName; this.indent = state.indented; this.startOfLine = startOfLine; if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent)) this.noIndent = true; } function popContext(state) { if (state.context) state.context = state.context.prev; } function maybePopContext(state, nextTagName) { var parentTagName; while (true) { if (!state.context) { return; } parentTagName = state.context.tagName; if (!config.contextGrabbers.hasOwnProperty(parentTagName) || !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) { return; } popContext(state); } } function baseState(type, stream, state) { if (type == "openTag") { state.tagStart = stream.column(); return tagNameState; } else if (type == "closeTag") { return closeTagNameState; } else { return baseState; } } function tagNameState(type, stream, state) { if (type == "word") { state.tagName = stream.current(); setStyle = "tag"; return attrState; } else { setStyle = "error"; return tagNameState; } } function closeTagNameState(type, stream, state) { if (type == "word") { var tagName = stream.current(); if (state.context && state.context.tagName != tagName && config.implicitlyClosed.hasOwnProperty(state.context.tagName)) popContext(state); if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) { setStyle = "tag"; return closeState; } else { setStyle = "tag error"; return closeStateErr; } } else { setStyle = "error"; return closeStateErr; } } function closeState(type, _stream, state) { if (type != "endTag") { setStyle = "error"; return closeState; } popContext(state); return baseState; } function closeStateErr(type, stream, state) { setStyle = "error"; return closeState(type, stream, state); } function attrState(type, _stream, state) { if (type == "word") { setStyle = "attribute"; return attrEqState; } else if (type == "endTag" || type == "selfcloseTag") { var tagName = state.tagName, tagStart = state.tagStart; state.tagName = state.tagStart = null; if (type == "selfcloseTag" || config.autoSelfClosers.hasOwnProperty(tagName)) { maybePopContext(state, tagName); } else { maybePopContext(state, tagName); state.context = new Context(state, tagName, tagStart == state.indented); } return baseState; } setStyle = "error"; return attrState; } function attrEqState(type, stream, state) { if (type == "equals") return attrValueState; if (!config.allowMissing) setStyle = "error"; return attrState(type, stream, state); } function attrValueState(type, stream, state) { if (type == "string") return attrContinuedState; if (type == "word" && config.allowUnquoted) {setStyle = "string"; return attrState;} setStyle = "error"; return attrState(type, stream, state); } function attrContinuedState(type, stream, state) { if (type == "string") return attrContinuedState; return attrState(type, stream, state); } return { startState: function(baseIndent) { var state = {tokenize: inText, state: baseState, indented: baseIndent || 0, tagName: null, tagStart: null, context: null} if (baseIndent != null) state.baseIndent = baseIndent return state }, token: function(stream, state) { if (!state.tagName && stream.sol()) state.indented = stream.indentation(); if (stream.eatSpace()) return null; type = null; var style = state.tokenize(stream, state); if ((style || type) && style != "comment") { setStyle = null; state.state = state.state(type || style, stream, state); if (setStyle) style = setStyle == "error" ? style + " error" : setStyle; } return style; }, indent: function(state, textAfter, fullLine) { var context = state.context; // Indent multi-line strings (e.g. css). if (state.tokenize.isInAttribute) { if (state.tagStart == state.indented) return state.stringStartCol + 1; else return state.indented + indentUnit; } if (context && context.noIndent) return CodeMirror.Pass; if (state.tokenize != inTag && state.tokenize != inText) return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; // Indent the starts of attribute names. if (state.tagName) { if (config.multilineTagIndentPastTag !== false) return state.tagStart + state.tagName.length + 2; else return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1); } if (config.alignCDATA && /$/, blockCommentStart: "", configuration: config.htmlMode ? "html" : "xml", helperType: config.htmlMode ? "html" : "xml", skipAttribute: function(state) { if (state.state == attrValueState) state.state = attrState } }; }); CodeMirror.defineMIME("text/xml", "xml"); CodeMirror.defineMIME("application/xml", "xml"); if (!CodeMirror.mimeModes.hasOwnProperty("text/html")) CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true}); }); application/library/codemirror/mode/xml/test.js000064400000003336146731177160015743 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "xml"), mname = "xml"; function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), mname); } MT("matching", "[tag&bracket <][tag top][tag&bracket >]", " text", " [tag&bracket <][tag inner][tag&bracket />]", "[tag&bracket ]"); MT("nonmatching", "[tag&bracket <][tag top][tag&bracket >]", " [tag&bracket <][tag inner][tag&bracket />]", " [tag&bracket ]"); MT("doctype", "[meta ]", "[tag&bracket <][tag top][tag&bracket />]"); MT("cdata", "[tag&bracket <][tag top][tag&bracket >]", " [atom ]", "[tag&bracket ]"); // HTML tests mode = CodeMirror.getMode({indentUnit: 2}, "text/html"); MT("selfclose", "[tag&bracket <][tag html][tag&bracket >]", " [tag&bracket <][tag link] [attribute rel]=[string stylesheet] [attribute href]=[string \"/foobar\"][tag&bracket >]", "[tag&bracket ]"); MT("list", "[tag&bracket <][tag ol][tag&bracket >]", " [tag&bracket <][tag li][tag&bracket >]one", " [tag&bracket <][tag li][tag&bracket >]two", "[tag&bracket ]"); MT("valueless", "[tag&bracket <][tag input] [attribute type]=[string checkbox] [attribute checked][tag&bracket />]"); MT("pThenArticle", "[tag&bracket <][tag p][tag&bracket >]", " foo", "[tag&bracket <][tag article][tag&bracket >]bar"); })(); application/library/codemirror/mode/xml/index.html000064400000004173146731177160016423 0ustar00 CodeMirror: XML mode

XML mode

The XML mode supports these configuration parameters:

htmlMode (boolean)
This switches the mode to parse HTML instead of XML. This means attributes do not have to be quoted, and some elements (such as br) do not require a closing tag.
matchClosing (boolean)
Controls whether the mode checks that close tags match the corresponding opening tag, and highlights mismatches as errors. Defaults to true.
alignCDATA (boolean)
Setting this to true will force the opening tag of CDATA blocks to not be indented.

MIME types defined: application/xml, text/html.

application/library/codemirror/mode/mirc/mirc.js000064400000023542146731177160016051 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE //mIRC mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMIME("text/mirc", "mirc"); CodeMirror.defineMode("mirc", function() { function parseWords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var specials = parseWords("$! $$ $& $? $+ $abook $abs $active $activecid " + "$activewid $address $addtok $agent $agentname $agentstat $agentver " + "$alias $and $anick $ansi2mirc $aop $appactive $appstate $asc $asctime " + "$asin $atan $avoice $away $awaymsg $awaytime $banmask $base $bfind " + "$binoff $biton $bnick $bvar $bytes $calc $cb $cd $ceil $chan $chanmodes " + "$chantypes $chat $chr $cid $clevel $click $cmdbox $cmdline $cnick $color " + "$com $comcall $comchan $comerr $compact $compress $comval $cos $count " + "$cr $crc $creq $crlf $ctime $ctimer $ctrlenter $date $day $daylight " + "$dbuh $dbuw $dccignore $dccport $dde $ddename $debug $decode $decompress " + "$deltok $devent $dialog $did $didreg $didtok $didwm $disk $dlevel $dll " + "$dllcall $dname $dns $duration $ebeeps $editbox $emailaddr $encode $error " + "$eval $event $exist $feof $ferr $fgetc $file $filename $filtered $finddir " + "$finddirn $findfile $findfilen $findtok $fline $floor $fopen $fread $fserve " + "$fulladdress $fulldate $fullname $fullscreen $get $getdir $getdot $gettok $gmt " + "$group $halted $hash $height $hfind $hget $highlight $hnick $hotline " + "$hotlinepos $ial $ialchan $ibl $idle $iel $ifmatch $ignore $iif $iil " + "$inelipse $ini $inmidi $inpaste $inpoly $input $inrect $inroundrect " + "$insong $instok $int $inwave $ip $isalias $isbit $isdde $isdir $isfile " + "$isid $islower $istok $isupper $keychar $keyrpt $keyval $knick $lactive " + "$lactivecid $lactivewid $left $len $level $lf $line $lines $link $lock " + "$lock $locked $log $logstamp $logstampfmt $longfn $longip $lower $ltimer " + "$maddress $mask $matchkey $matchtok $md5 $me $menu $menubar $menucontext " + "$menutype $mid $middir $mircdir $mircexe $mircini $mklogfn $mnick $mode " + "$modefirst $modelast $modespl $mouse $msfile $network $newnick $nick $nofile " + "$nopath $noqt $not $notags $notify $null $numeric $numok $oline $onpoly " + "$opnick $or $ord $os $passivedcc $pic $play $pnick $port $portable $portfree " + "$pos $prefix $prop $protect $puttok $qt $query $rand $r $rawmsg $read $readomo " + "$readn $regex $regml $regsub $regsubex $remove $remtok $replace $replacex " + "$reptok $result $rgb $right $round $scid $scon $script $scriptdir $scriptline " + "$sdir $send $server $serverip $sfile $sha1 $shortfn $show $signal $sin " + "$site $sline $snick $snicks $snotify $sock $sockbr $sockerr $sockname " + "$sorttok $sound $sqrt $ssl $sreq $sslready $status $strip $str $stripped " + "$syle $submenu $switchbar $tan $target $ticks $time $timer $timestamp " + "$timestampfmt $timezone $tip $titlebar $toolbar $treebar $trust $ulevel " + "$ulist $upper $uptime $url $usermode $v1 $v2 $var $vcmd $vcmdstat $vcmdver " + "$version $vnick $vol $wid $width $wildsite $wildtok $window $wrap $xor"); var keywords = parseWords("abook ajinvite alias aline ame amsg anick aop auser autojoin avoice " + "away background ban bcopy beep bread break breplace bset btrunc bunset bwrite " + "channel clear clearall cline clipboard close cnick color comclose comopen " + "comreg continue copy creq ctcpreply ctcps dcc dccserver dde ddeserver " + "debug dec describe dialog did didtok disable disconnect dlevel dline dll " + "dns dqwindow drawcopy drawdot drawfill drawline drawpic drawrect drawreplace " + "drawrot drawsave drawscroll drawtext ebeeps echo editbox emailaddr enable " + "events exit fclose filter findtext finger firewall flash flist flood flush " + "flushini font fopen fseek fsend fserve fullname fwrite ghide gload gmove " + "gopts goto gplay gpoint gqreq groups gshow gsize gstop gtalk gunload hadd " + "halt haltdef hdec hdel help hfree hinc hload hmake hop hsave ial ialclear " + "ialmark identd if ignore iline inc invite iuser join kick linesep links list " + "load loadbuf localinfo log mdi me menubar mkdir mnick mode msg nick noop notice " + "notify omsg onotice part partall pdcc perform play playctrl pop protect pvoice " + "qme qmsg query queryn quit raw reload remini remote remove rename renwin " + "reseterror resetidle return rlevel rline rmdir run ruser save savebuf saveini " + "say scid scon server set showmirc signam sline sockaccept sockclose socklist " + "socklisten sockmark sockopen sockpause sockread sockrename sockudp sockwrite " + "sound speak splay sreq strip switchbar timer timestamp titlebar tnick tokenize " + "toolbar topic tray treebar ulist unload unset unsetall updatenl url uwho " + "var vcadd vcmd vcrem vol while whois window winhelp write writeint if isalnum " + "isalpha isaop isavoice isban ischan ishop isignore isin isincs isletter islower " + "isnotify isnum ison isop isprotect isreg isupper isvoice iswm iswmcs " + "elseif else goto menu nicklist status title icon size option text edit " + "button check radio box scroll list combo link tab item"); var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var beforeParams = state.beforeParams; state.beforeParams = false; var ch = stream.next(); if (/[\[\]{}\(\),\.]/.test(ch)) { if (ch == "(" && beforeParams) state.inParams = true; else if (ch == ")") state.inParams = false; return null; } else if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } else if (ch == "\\") { stream.eat("\\"); stream.eat(/./); return "number"; } else if (ch == "/" && stream.eat("*")) { return chain(stream, state, tokenComment); } else if (ch == ";" && stream.match(/ *\( *\(/)) { return chain(stream, state, tokenUnparsed); } else if (ch == ";" && !state.inParams) { stream.skipToEnd(); return "comment"; } else if (ch == '"') { stream.eat(/"/); return "keyword"; } else if (ch == "$") { stream.eatWhile(/[$_a-z0-9A-Z\.:]/); if (specials && specials.propertyIsEnumerable(stream.current().toLowerCase())) { return "keyword"; } else { state.beforeParams = true; return "builtin"; } } else if (ch == "%") { stream.eatWhile(/[^,^\s^\(^\)]/); state.beforeParams = true; return "string"; } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } else { stream.eatWhile(/[\w\$_{}]/); var word = stream.current().toLowerCase(); if (keywords && keywords.propertyIsEnumerable(word)) return "keyword"; if (functions && functions.propertyIsEnumerable(word)) { state.beforeParams = true; return "keyword"; } return null; } } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenUnparsed(stream, state) { var maybeEnd = 0, ch; while (ch = stream.next()) { if (ch == ";" && maybeEnd == 2) { state.tokenize = tokenBase; break; } if (ch == ")") maybeEnd++; else if (ch != " ") maybeEnd = 0; } return "meta"; } return { startState: function() { return { tokenize: tokenBase, beforeParams: false, inParams: false }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); } }; }); }); application/library/codemirror/mode/mirc/index.html000064400000013246146731177160016556 0ustar00 CodeMirror: mIRC mode

mIRC mode

MIME types defined: text/mirc.

application/library/codemirror/mode/tiddlywiki/tiddlywiki.js000064400000020476146731177160020522 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /*** |''Name''|tiddlywiki.js| |''Description''|Enables TiddlyWikiy syntax highlighting using CodeMirror| |''Author''|PMario| |''Version''|0.1.7| |''Status''|''stable''| |''Source''|[[GitHub|https://github.com/pmario/CodeMirror2/blob/tw-syntax/mode/tiddlywiki]]| |''Documentation''|http://codemirror.tiddlyspace.com/| |''License''|[[MIT License|http://www.opensource.org/licenses/mit-license.php]]| |''CoreVersion''|2.5.0| |''Requires''|codemirror.js| |''Keywords''|syntax highlighting color code mirror codemirror| ! Info CoreVersion parameter is needed for TiddlyWiki only! ***/ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("tiddlywiki", function () { // Tokenizer var textwords = {}; var keywords = { "allTags": true, "closeAll": true, "list": true, "newJournal": true, "newTiddler": true, "permaview": true, "saveChanges": true, "search": true, "slider": true, "tabs": true, "tag": true, "tagging": true, "tags": true, "tiddler": true, "timeline": true, "today": true, "version": true, "option": true, "with": true, "filter": true }; var isSpaceName = /[\w_\-]/i, reHR = /^\-\-\-\-+$/, //
reWikiCommentStart = /^\/\*\*\*$/, // /*** reWikiCommentStop = /^\*\*\*\/$/, // ***/ reBlockQuote = /^<<<$/, reJsCodeStart = /^\/\/\{\{\{$/, // //{{{ js block start reJsCodeStop = /^\/\/\}\}\}$/, // //}}} js stop reXmlCodeStart = /^$/, // xml block start reXmlCodeStop = /^$/, // xml stop reCodeBlockStart = /^\{\{\{$/, // {{{ TW text div block start reCodeBlockStop = /^\}\}\}$/, // }}} TW text stop reUntilCodeStop = /.*?\}\}\}/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var sol = stream.sol(), ch = stream.peek(); state.block = false; // indicates the start of a code block. // check start of blocks if (sol && /[<\/\*{}\-]/.test(ch)) { if (stream.match(reCodeBlockStart)) { state.block = true; return chain(stream, state, twTokenCode); } if (stream.match(reBlockQuote)) return 'quote'; if (stream.match(reWikiCommentStart) || stream.match(reWikiCommentStop)) return 'comment'; if (stream.match(reJsCodeStart) || stream.match(reJsCodeStop) || stream.match(reXmlCodeStart) || stream.match(reXmlCodeStop)) return 'comment'; if (stream.match(reHR)) return 'hr'; } stream.next(); if (sol && /[\/\*!#;:>|]/.test(ch)) { if (ch == "!") { // tw header stream.skipToEnd(); return "header"; } if (ch == "*") { // tw list stream.eatWhile('*'); return "comment"; } if (ch == "#") { // tw numbered list stream.eatWhile('#'); return "comment"; } if (ch == ";") { // definition list, term stream.eatWhile(';'); return "comment"; } if (ch == ":") { // definition list, description stream.eatWhile(':'); return "comment"; } if (ch == ">") { // single line quote stream.eatWhile(">"); return "quote"; } if (ch == '|') return 'header'; } if (ch == '{' && stream.match(/\{\{/)) return chain(stream, state, twTokenCode); // rudimentary html:// file:// link matching. TW knows much more ... if (/[hf]/i.test(ch) && /[ti]/i.test(stream.peek()) && stream.match(/\b(ttps?|tp|ile):\/\/[\-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i)) return "link"; // just a little string indicator, don't want to have the whole string covered if (ch == '"') return 'string'; if (ch == '~') // _no_ CamelCase indicator should be bold return 'brace'; if (/[\[\]]/.test(ch) && stream.match(ch)) // check for [[..]] return 'brace'; if (ch == "@") { // check for space link. TODO fix @@...@@ highlighting stream.eatWhile(isSpaceName); return "link"; } if (/\d/.test(ch)) { // numbers stream.eatWhile(/\d/); return "number"; } if (ch == "/") { // tw invisible comment if (stream.eat("%")) { return chain(stream, state, twTokenComment); } else if (stream.eat("/")) { // return chain(stream, state, twTokenEm); } } if (ch == "_" && stream.eat("_")) // tw underline return chain(stream, state, twTokenUnderline); // strikethrough and mdash handling if (ch == "-" && stream.eat("-")) { // if strikethrough looks ugly, change CSS. if (stream.peek() != ' ') return chain(stream, state, twTokenStrike); // mdash if (stream.peek() == ' ') return 'brace'; } if (ch == "'" && stream.eat("'")) // tw bold return chain(stream, state, twTokenStrong); if (ch == "<" && stream.eat("<")) // tw macro return chain(stream, state, twTokenMacro); // core macro handling stream.eatWhile(/[\w\$_]/); return textwords.propertyIsEnumerable(stream.current()) ? "keyword" : null } // tw invisible comment function twTokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "%"); } return "comment"; } // tw strong / bold function twTokenStrong(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "'" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "'"); } return "strong"; } // tw code function twTokenCode(stream, state) { var sb = state.block; if (sb && stream.current()) { return "comment"; } if (!sb && stream.match(reUntilCodeStop)) { state.tokenize = tokenBase; return "comment"; } if (sb && stream.sol() && stream.match(reCodeBlockStop)) { state.tokenize = tokenBase; return "comment"; } stream.next(); return "comment"; } // tw em / italic function twTokenEm(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "/"); } return "em"; } // tw underlined text function twTokenUnderline(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "_" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "_"); } return "underlined"; } // tw strike through text looks ugly // change CSS if needed function twTokenStrike(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "-" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "-"); } return "strikethrough"; } // macro function twTokenMacro(stream, state) { if (stream.current() == '<<') { return 'macro'; } var ch = stream.next(); if (!ch) { state.tokenize = tokenBase; return null; } if (ch == ">") { if (stream.peek() == '>') { stream.next(); state.tokenize = tokenBase; return "macro"; } } stream.eatWhile(/[\w\$_]/); return keywords.propertyIsEnumerable(stream.current()) ? "keyword" : null } // Interface return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; } }; }); CodeMirror.defineMIME("text/x-tiddlywiki", "tiddlywiki"); }); application/library/codemirror/mode/tiddlywiki/tiddlywiki.css000064400000000334146731177160020665 0ustar00span.cm-underlined { text-decoration: underline; } span.cm-strikethrough { text-decoration: line-through; } span.cm-brace { color: #170; font-weight: bold; } span.cm-table { color: blue; font-weight: bold; } application/library/codemirror/mode/tiddlywiki/index.html000064400000010743146731177160020000 0ustar00 CodeMirror: TiddlyWiki mode

TiddlyWiki mode

TiddlyWiki mode supports a single configuration.

MIME types defined: text/x-tiddlywiki.

application/library/codemirror/mode/javascript/javascript.js000064400000070217146731177160020502 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function expressionAllowed(stream, state, backUp) { return /^(?:operator|sof|keyword c|case|new|[\[{}\(,;:]|=>)$/.test(state.lastType) || (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0)))) } CodeMirror.defineMode("javascript", function(config, parserConfig) { var indentUnit = config.indentUnit; var statementIndent = parserConfig.statementIndent; var jsonldMode = parserConfig.jsonld; var jsonMode = parserConfig.json || jsonldMode; var isTS = parserConfig.typescript; var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; // Tokenizer var keywords = function(){ function kw(type) {return {type: type, style: "keyword"};} var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); var operator = kw("operator"), atom = {type: "atom", style: "atom"}; var jsKeywords = { "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, "return": C, "break": C, "continue": C, "new": kw("new"), "delete": C, "throw": C, "debugger": C, "var": kw("var"), "const": kw("var"), "let": kw("var"), "function": kw("function"), "catch": kw("catch"), "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), "in": operator, "typeof": operator, "instanceof": operator, "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, "this": kw("this"), "class": kw("class"), "super": kw("atom"), "yield": C, "export": kw("export"), "import": kw("import"), "extends": C, "await": C, "async": kw("async") }; // Extend the 'normal' keywords with the TypeScript language extensions if (isTS) { var type = {type: "variable", style: "variable-3"}; var tsKeywords = { // object-like things "interface": kw("class"), "implements": C, "namespace": C, "module": kw("module"), "enum": kw("module"), // scope modifiers "public": kw("modifier"), "private": kw("modifier"), "protected": kw("modifier"), "abstract": kw("modifier"), // operators "as": operator, // types "string": type, "number": type, "boolean": type, "any": type }; for (var attr in tsKeywords) { jsKeywords[attr] = tsKeywords[attr]; } } return jsKeywords; }(); var isOperatorChar = /[+\-*&%=<>!?|~^]/; var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; function readRegexp(stream) { var escaped = false, next, inSet = false; while ((next = stream.next()) != null) { if (!escaped) { if (next == "/" && !inSet) return; if (next == "[") inSet = true; else if (inSet && next == "]") inSet = false; } escaped = !escaped && next == "\\"; } } // Used as scratch variables to communicate multiple values without // consing up tons of objects. var type, content; function ret(tp, style, cont) { type = tp; content = cont; return style; } function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) { return ret("number", "number"); } else if (ch == "." && stream.match("..")) { return ret("spread", "meta"); } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { return ret(ch); } else if (ch == "=" && stream.eat(">")) { return ret("=>", "operator"); } else if (ch == "0" && stream.eat(/x/i)) { stream.eatWhile(/[\da-f]/i); return ret("number", "number"); } else if (ch == "0" && stream.eat(/o/i)) { stream.eatWhile(/[0-7]/i); return ret("number", "number"); } else if (ch == "0" && stream.eat(/b/i)) { stream.eatWhile(/[01]/i); return ret("number", "number"); } else if (/\d/.test(ch)) { stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); return ret("number", "number"); } else if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } else if (stream.eat("/")) { stream.skipToEnd(); return ret("comment", "comment"); } else if (expressionAllowed(stream, state, 1)) { readRegexp(stream); stream.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/); return ret("regexp", "string-2"); } else { stream.eatWhile(isOperatorChar); return ret("operator", "operator", stream.current()); } } else if (ch == "`") { state.tokenize = tokenQuasi; return tokenQuasi(stream, state); } else if (ch == "#") { stream.skipToEnd(); return ret("error", "error"); } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return ret("operator", "operator", stream.current()); } else if (wordRE.test(ch)) { stream.eatWhile(wordRE); var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; return (known && state.lastType != ".") ? ret(known.type, known.style, word) : ret("variable", "variable", word); } } function tokenString(quote) { return function(stream, state) { var escaped = false, next; if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){ state.tokenize = tokenBase; return ret("jsonld-keyword", "meta"); } while ((next = stream.next()) != null) { if (next == quote && !escaped) break; escaped = !escaped && next == "\\"; } if (!escaped) state.tokenize = tokenBase; return ret("string", "string"); }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } function tokenQuasi(stream, state) { var escaped = false, next; while ((next = stream.next()) != null) { if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { state.tokenize = tokenBase; break; } escaped = !escaped && next == "\\"; } return ret("quasi", "string-2", stream.current()); } var brackets = "([{}])"; // This is a crude lookahead trick to try and notice that we're // parsing the argument patterns for a fat-arrow function before we // actually hit the arrow token. It only works if the arrow is on // the same line as the arguments and there's no strange noise // (comments) in between. Fallback is to only notice when we hit the // arrow, and not declare the arguments as locals for the arrow // body. function findFatArrow(stream, state) { if (state.fatArrowAt) state.fatArrowAt = null; var arrow = stream.string.indexOf("=>", stream.start); if (arrow < 0) return; var depth = 0, sawSomething = false; for (var pos = arrow - 1; pos >= 0; --pos) { var ch = stream.string.charAt(pos); var bracket = brackets.indexOf(ch); if (bracket >= 0 && bracket < 3) { if (!depth) { ++pos; break; } if (--depth == 0) { if (ch == "(") sawSomething = true; break; } } else if (bracket >= 3 && bracket < 6) { ++depth; } else if (wordRE.test(ch)) { sawSomething = true; } else if (/["'\/]/.test(ch)) { return; } else if (sawSomething && !depth) { ++pos; break; } } if (sawSomething && !depth) state.fatArrowAt = pos; } // Parser var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true}; function JSLexical(indented, column, type, align, prev, info) { this.indented = indented; this.column = column; this.type = type; this.prev = prev; this.info = info; if (align != null) this.align = align; } function inScope(state, varname) { for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; for (var cx = state.context; cx; cx = cx.prev) { for (var v = cx.vars; v; v = v.next) if (v.name == varname) return true; } } function parseJS(state, style, type, content, stream) { var cc = state.cc; // Communicate our context to the combinators. // (Less wasteful than consing up a hundred closures on every call.) cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style; if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; while(true) { var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; if (combinator(type, content)) { while(cc.length && cc[cc.length - 1].lex) cc.pop()(); if (cx.marked) return cx.marked; if (type == "variable" && inScope(state, content)) return "variable-2"; return style; } } } // Combinator utils var cx = {state: null, column: null, marked: null, cc: null}; function pass() { for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function register(varname) { function inList(list) { for (var v = list; v; v = v.next) if (v.name == varname) return true; return false; } var state = cx.state; cx.marked = "def"; if (state.context) { if (inList(state.localVars)) return; state.localVars = {name: varname, next: state.localVars}; } else { if (inList(state.globalVars)) return; if (parserConfig.globalVars) state.globalVars = {name: varname, next: state.globalVars}; } } // Combinators var defaultVars = {name: "this", next: {name: "arguments"}}; function pushcontext() { cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; cx.state.localVars = defaultVars; } function popcontext() { cx.state.localVars = cx.state.context.vars; cx.state.context = cx.state.context.prev; } function pushlex(type, info) { var result = function() { var state = cx.state, indent = state.indented; if (state.lexical.type == "stat") indent = state.lexical.indented; else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) indent = outer.indented; state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); }; result.lex = true; return result; } function poplex() { var state = cx.state; if (state.lexical.prev) { if (state.lexical.type == ")") state.indented = state.lexical.indented; state.lexical = state.lexical.prev; } } poplex.lex = true; function expect(wanted) { function exp(type) { if (type == wanted) return cont(); else if (wanted == ";") return pass(); else return cont(exp); }; return exp; } function statement(type, value) { if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex); if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); if (type == "keyword b") return cont(pushlex("form"), statement, poplex); if (type == "{") return cont(pushlex("}"), block, poplex); if (type == ";") return cont(); if (type == "if") { if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) cx.state.cc.pop()(); return cont(pushlex("form"), expression, statement, poplex, maybeelse); } if (type == "function") return cont(functiondef); if (type == "for") return cont(pushlex("form"), forspec, statement, poplex); if (type == "variable") return cont(pushlex("stat"), maybelabel); if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), block, poplex, poplex); if (type == "case") return cont(expression, expect(":")); if (type == "default") return cont(expect(":")); if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), statement, poplex, popcontext); if (type == "class") return cont(pushlex("form"), className, poplex); if (type == "export") return cont(pushlex("stat"), afterExport, poplex); if (type == "import") return cont(pushlex("stat"), afterImport, poplex); if (type == "module") return cont(pushlex("form"), pattern, pushlex("}"), expect("{"), block, poplex, poplex) if (type == "async") return cont(statement) return pass(pushlex("stat"), expression, expect(";"), poplex); } function expression(type) { return expressionInner(type, false); } function expressionNoComma(type) { return expressionInner(type, true); } function expressionInner(type, noComma) { if (cx.state.fatArrowAt == cx.stream.start) { var body = noComma ? arrowBodyNoComma : arrowBody; if (type == "(") return cont(pushcontext, pushlex(")"), commasep(pattern, ")"), poplex, expect("=>"), body, popcontext); else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); } var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); if (type == "function") return cont(functiondef, maybeop); if (type == "keyword c" || type == "async") return cont(noComma ? maybeexpressionNoComma : maybeexpression); if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); if (type == "{") return contCommasep(objprop, "}", null, maybeop); if (type == "quasi") return pass(quasi, maybeop); if (type == "new") return cont(maybeTarget(noComma)); return cont(); } function maybeexpression(type) { if (type.match(/[;\}\)\],]/)) return pass(); return pass(expression); } function maybeexpressionNoComma(type) { if (type.match(/[;\}\)\],]/)) return pass(); return pass(expressionNoComma); } function maybeoperatorComma(type, value) { if (type == ",") return cont(expression); return maybeoperatorNoComma(type, value, false); } function maybeoperatorNoComma(type, value, noComma) { var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; var expr = noComma == false ? expression : expressionNoComma; if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); if (type == "operator") { if (/\+\+|--/.test(value)) return cont(me); if (value == "?") return cont(expression, expect(":"), expr); return cont(expr); } if (type == "quasi") { return pass(quasi, me); } if (type == ";") return; if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); if (type == ".") return cont(property, me); if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); } function quasi(type, value) { if (type != "quasi") return pass(); if (value.slice(value.length - 2) != "${") return cont(quasi); return cont(expression, continueQuasi); } function continueQuasi(type) { if (type == "}") { cx.marked = "string-2"; cx.state.tokenize = tokenQuasi; return cont(quasi); } } function arrowBody(type) { findFatArrow(cx.stream, cx.state); return pass(type == "{" ? statement : expression); } function arrowBodyNoComma(type) { findFatArrow(cx.stream, cx.state); return pass(type == "{" ? statement : expressionNoComma); } function maybeTarget(noComma) { return function(type) { if (type == ".") return cont(noComma ? targetNoComma : target); else return pass(noComma ? expressionNoComma : expression); }; } function target(_, value) { if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); } } function targetNoComma(_, value) { if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); } } function maybelabel(type) { if (type == ":") return cont(poplex, statement); return pass(maybeoperatorComma, expect(";"), poplex); } function property(type) { if (type == "variable") {cx.marked = "property"; return cont();} } function objprop(type, value) { if (type == "async") { cx.marked = "property"; return cont(objprop); } else if (type == "variable" || cx.style == "keyword") { cx.marked = "property"; if (value == "get" || value == "set") return cont(getterSetter); return cont(afterprop); } else if (type == "number" || type == "string") { cx.marked = jsonldMode ? "property" : (cx.style + " property"); return cont(afterprop); } else if (type == "jsonld-keyword") { return cont(afterprop); } else if (type == "modifier") { return cont(objprop) } else if (type == "[") { return cont(expression, expect("]"), afterprop); } else if (type == "spread") { return cont(expression); } else if (type == ":") { return pass(afterprop) } } function getterSetter(type) { if (type != "variable") return pass(afterprop); cx.marked = "property"; return cont(functiondef); } function afterprop(type) { if (type == ":") return cont(expressionNoComma); if (type == "(") return pass(functiondef); } function commasep(what, end) { function proceed(type, value) { if (type == ",") { var lex = cx.state.lexical; if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; return cont(function(type, value) { if (type == end || value == end) return pass() return pass(what) }, proceed); } if (type == end || value == end) return cont(); return cont(expect(end)); } return function(type, value) { if (type == end || value == end) return cont(); return pass(what, proceed); }; } function contCommasep(what, end, info) { for (var i = 3; i < arguments.length; i++) cx.cc.push(arguments[i]); return cont(pushlex(end, info), commasep(what, end), poplex); } function block(type) { if (type == "}") return cont(); return pass(statement, block); } function maybetype(type) { if (isTS && type == ":") return cont(typeexpr); } function maybedefault(_, value) { if (value == "=") return cont(expressionNoComma); } function typeexpr(type) { if (type == "variable") {cx.marked = "variable-3"; return cont(afterType);} if (type == "{") return cont(commasep(typeprop, "}")) if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType) } function maybeReturnType(type) { if (type == "=>") return cont(typeexpr) } function typeprop(type) { if (type == "variable" || cx.style == "keyword") { cx.marked = "property" return cont(typeprop) } else if (type == ":") { return cont(typeexpr) } } function typearg(type) { if (type == "variable") return cont(typearg) else if (type == ":") return cont(typeexpr) } function afterType(type, value) { if (value == "<") return cont(commasep(typeexpr, ">"), afterType) if (type == "[") return cont(expect("]"), afterType) } function vardef() { return pass(pattern, maybetype, maybeAssign, vardefCont); } function pattern(type, value) { if (type == "modifier") return cont(pattern) if (type == "variable") { register(value); return cont(); } if (type == "spread") return cont(pattern); if (type == "[") return contCommasep(pattern, "]"); if (type == "{") return contCommasep(proppattern, "}"); } function proppattern(type, value) { if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { register(value); return cont(maybeAssign); } if (type == "variable") cx.marked = "property"; if (type == "spread") return cont(pattern); if (type == "}") return pass(); return cont(expect(":"), pattern, maybeAssign); } function maybeAssign(_type, value) { if (value == "=") return cont(expressionNoComma); } function vardefCont(type) { if (type == ",") return cont(vardef); } function maybeelse(type, value) { if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); } function forspec(type) { if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex); } function forspec1(type) { if (type == "var") return cont(vardef, expect(";"), forspec2); if (type == ";") return cont(forspec2); if (type == "variable") return cont(formaybeinof); return pass(expression, expect(";"), forspec2); } function formaybeinof(_type, value) { if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } return cont(maybeoperatorComma, forspec2); } function forspec2(type, value) { if (type == ";") return cont(forspec3); if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } return pass(expression, expect(";"), forspec3); } function forspec3(type) { if (type != ")") cont(expression); } function functiondef(type, value) { if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} if (type == "variable") {register(value); return cont(functiondef);} if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, maybetype, statement, popcontext); } function funarg(type) { if (type == "spread") return cont(funarg); return pass(pattern, maybetype, maybedefault); } function className(type, value) { if (type == "variable") {register(value); return cont(classNameAfter);} } function classNameAfter(type, value) { if (value == "extends") return cont(isTS ? typeexpr : expression, classNameAfter); if (type == "{") return cont(pushlex("}"), classBody, poplex); } function classBody(type, value) { if (type == "variable" || cx.style == "keyword") { if (value == "static") { cx.marked = "keyword"; return cont(classBody); } cx.marked = "property"; if (value == "get" || value == "set") return cont(classGetterSetter, functiondef, classBody); return cont(functiondef, classBody); } if (value == "*") { cx.marked = "keyword"; return cont(classBody); } if (type == ";") return cont(classBody); if (type == "}") return cont(); } function classGetterSetter(type) { if (type != "variable") return pass(); cx.marked = "property"; return cont(); } function afterExport(_type, value) { if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } return pass(statement); } function afterImport(type) { if (type == "string") return cont(); return pass(importSpec, maybeFrom); } function importSpec(type, value) { if (type == "{") return contCommasep(importSpec, "}"); if (type == "variable") register(value); if (value == "*") cx.marked = "keyword"; return cont(maybeAs); } function maybeAs(_type, value) { if (value == "as") { cx.marked = "keyword"; return cont(importSpec); } } function maybeFrom(_type, value) { if (value == "from") { cx.marked = "keyword"; return cont(expression); } } function arrayLiteral(type) { if (type == "]") return cont(); return pass(commasep(expressionNoComma, "]")); } function isContinuedStatement(state, textAfter) { return state.lastType == "operator" || state.lastType == "," || isOperatorChar.test(textAfter.charAt(0)) || /[,.]/.test(textAfter.charAt(0)); } // Interface return { startState: function(basecolumn) { var state = { tokenize: tokenBase, lastType: "sof", cc: [], lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), localVars: parserConfig.localVars, context: parserConfig.localVars && {vars: parserConfig.localVars}, indented: basecolumn || 0 }; if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars; return state; }, token: function(stream, state) { if (stream.sol()) { if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; state.indented = stream.indentation(); findFatArrow(stream, state); } if (state.tokenize != tokenComment && stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (type == "comment") return style; state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; return parseJS(state, style, type, content, stream); }, indent: function(state, textAfter) { if (state.tokenize == tokenComment) return CodeMirror.Pass; if (state.tokenize != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; // Kludge to prevent 'maybelse' from blocking lexical scope pops if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { var c = state.cc[i]; if (c == poplex) lexical = lexical.prev; else if (c != maybeelse) break; } if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") lexical = lexical.prev; var type = lexical.type, closing = firstChar == type; if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0); else if (type == "form" && firstChar == "{") return lexical.indented; else if (type == "form") return lexical.indented + indentUnit; else if (type == "stat") return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); else if (lexical.align) return lexical.column + (closing ? 0 : 1); else return lexical.indented + (closing ? 0 : indentUnit); }, electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, blockCommentStart: jsonMode ? null : "/*", blockCommentEnd: jsonMode ? null : "*/", lineComment: jsonMode ? null : "//", fold: "brace", closeBrackets: "()[]{}''\"\"``", helperType: jsonMode ? "json" : "javascript", jsonldMode: jsonldMode, jsonMode: jsonMode, expressionAllowed: expressionAllowed, skipExpression: function(state) { var top = state.cc[state.cc.length - 1] if (top == expression || top == expressionNoComma) state.cc.pop() } }; }); CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); CodeMirror.defineMIME("text/javascript", "javascript"); CodeMirror.defineMIME("text/ecmascript", "javascript"); CodeMirror.defineMIME("application/javascript", "javascript"); CodeMirror.defineMIME("application/x-javascript", "javascript"); CodeMirror.defineMIME("application/ecmascript", "javascript"); CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true}); CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); }); application/library/codemirror/mode/javascript/typescript.html000064400000003013146731177160021060 0ustar00 CodeMirror: TypeScript mode

TypeScript mode

This is a specialization of the JavaScript mode.

application/library/codemirror/mode/javascript/test.js000064400000017221146731177160017307 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "javascript"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("locals", "[keyword function] [def foo]([def a], [def b]) { [keyword var] [def c] [operator =] [number 10]; [keyword return] [variable-2 a] [operator +] [variable-2 c] [operator +] [variable d]; }"); MT("comma-and-binop", "[keyword function](){ [keyword var] [def x] [operator =] [number 1] [operator +] [number 2], [def y]; }"); MT("destructuring", "([keyword function]([def a], [[[def b], [def c] ]]) {", " [keyword let] {[def d], [property foo]: [def c][operator =][number 10], [def x]} [operator =] [variable foo]([variable-2 a]);", " [[[variable-2 c], [variable y] ]] [operator =] [variable-2 c];", "})();"); MT("destructure_trailing_comma", "[keyword let] {[def a], [def b],} [operator =] [variable foo];", "[keyword let] [def c];"); // Parser still in good state? MT("class_body", "[keyword class] [def Foo] {", " [property constructor]() {}", " [property sayName]() {", " [keyword return] [string-2 `foo${][variable foo][string-2 }oo`];", " }", "}"); MT("class", "[keyword class] [def Point] [keyword extends] [variable SuperThing] {", " [property get] [property prop]() { [keyword return] [number 24]; }", " [property constructor]([def x], [def y]) {", " [keyword super]([string 'something']);", " [keyword this].[property x] [operator =] [variable-2 x];", " }", "}"); MT("import", "[keyword function] [def foo]() {", " [keyword import] [def $] [keyword from] [string 'jquery'];", " [keyword import] { [def encrypt], [def decrypt] } [keyword from] [string 'crypto'];", "}"); MT("import_trailing_comma", "[keyword import] {[def foo], [def bar],} [keyword from] [string 'baz']") MT("const", "[keyword function] [def f]() {", " [keyword const] [[ [def a], [def b] ]] [operator =] [[ [number 1], [number 2] ]];", "}"); MT("for/of", "[keyword for]([keyword let] [def of] [keyword of] [variable something]) {}"); MT("generator", "[keyword function*] [def repeat]([def n]) {", " [keyword for]([keyword var] [def i] [operator =] [number 0]; [variable-2 i] [operator <] [variable-2 n]; [operator ++][variable-2 i])", " [keyword yield] [variable-2 i];", "}"); MT("quotedStringAddition", "[keyword let] [def f] [operator =] [variable a] [operator +] [string 'fatarrow'] [operator +] [variable c];"); MT("quotedFatArrow", "[keyword let] [def f] [operator =] [variable a] [operator +] [string '=>'] [operator +] [variable c];"); MT("fatArrow", "[variable array].[property filter]([def a] [operator =>] [variable-2 a] [operator +] [number 1]);", "[variable a];", // No longer in scope "[keyword let] [def f] [operator =] ([[ [def a], [def b] ]], [def c]) [operator =>] [variable-2 a] [operator +] [variable-2 c];", "[variable c];"); MT("spread", "[keyword function] [def f]([def a], [meta ...][def b]) {", " [variable something]([variable-2 a], [meta ...][variable-2 b]);", "}"); MT("quasi", "[variable re][string-2 `fofdlakj${][variable x] [operator +] ([variable re][string-2 `foo`]) [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); MT("quasi_no_function", "[variable x] [operator =] [string-2 `fofdlakj${][variable x] [operator +] [string-2 `foo`] [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); MT("indent_statement", "[keyword var] [def x] [operator =] [number 10]", "[variable x] [operator +=] [variable y] [operator +]", " [atom Infinity]", "[keyword debugger];"); MT("indent_if", "[keyword if] ([number 1])", " [keyword break];", "[keyword else] [keyword if] ([number 2])", " [keyword continue];", "[keyword else]", " [number 10];", "[keyword if] ([number 1]) {", " [keyword break];", "} [keyword else] [keyword if] ([number 2]) {", " [keyword continue];", "} [keyword else] {", " [number 10];", "}"); MT("indent_for", "[keyword for] ([keyword var] [def i] [operator =] [number 0];", " [variable i] [operator <] [number 100];", " [variable i][operator ++])", " [variable doSomething]([variable i]);", "[keyword debugger];"); MT("indent_c_style", "[keyword function] [def foo]()", "{", " [keyword debugger];", "}"); MT("indent_else", "[keyword for] (;;)", " [keyword if] ([variable foo])", " [keyword if] ([variable bar])", " [number 1];", " [keyword else]", " [number 2];", " [keyword else]", " [number 3];"); MT("indent_funarg", "[variable foo]([number 10000],", " [keyword function]([def a]) {", " [keyword debugger];", "};"); MT("indent_below_if", "[keyword for] (;;)", " [keyword if] ([variable foo])", " [number 1];", "[number 2];"); MT("multilinestring", "[keyword var] [def x] [operator =] [string 'foo\\]", "[string bar'];"); MT("scary_regexp", "[string-2 /foo[[/]]bar/];"); MT("indent_strange_array", "[keyword var] [def x] [operator =] [[", " [number 1],,", " [number 2],", "]];", "[number 10];"); MT("param_default", "[keyword function] [def foo]([def x] [operator =] [string-2 `foo${][number 10][string-2 }bar`]) {", " [keyword return] [variable-2 x];", "}"); MT("new_target", "[keyword function] [def F]([def target]) {", " [keyword if] ([variable-2 target] [operator &&] [keyword new].[keyword target].[property name]) {", " [keyword return] [keyword new]", " .[keyword target];", " }", "}"); var ts_mode = CodeMirror.getMode({indentUnit: 2}, "application/typescript") function TS(name) { test.mode(name, ts_mode, Array.prototype.slice.call(arguments, 1)) } TS("extend_type", "[keyword class] [def Foo] [keyword extends] [variable-3 Some][operator <][variable-3 Type][operator >] {}") TS("arrow_type", "[keyword let] [def x]: ([variable arg]: [variable-3 Type]) [operator =>] [variable-3 ReturnType]") var jsonld_mode = CodeMirror.getMode( {indentUnit: 2}, {name: "javascript", jsonld: true} ); function LD(name) { test.mode(name, jsonld_mode, Array.prototype.slice.call(arguments, 1)); } LD("json_ld_keywords", '{', ' [meta "@context"]: {', ' [meta "@base"]: [string "http://example.com"],', ' [meta "@vocab"]: [string "http://xmlns.com/foaf/0.1/"],', ' [property "likesFlavor"]: {', ' [meta "@container"]: [meta "@list"]', ' [meta "@reverse"]: [string "@beFavoriteOf"]', ' },', ' [property "nick"]: { [meta "@container"]: [meta "@set"] },', ' [property "nick"]: { [meta "@container"]: [meta "@index"] }', ' },', ' [meta "@graph"]: [[ {', ' [meta "@id"]: [string "http://dbpedia.org/resource/John_Lennon"],', ' [property "name"]: [string "John Lennon"],', ' [property "modified"]: {', ' [meta "@value"]: [string "2010-05-29T14:17:39+02:00"],', ' [meta "@type"]: [string "http://www.w3.org/2001/XMLSchema#dateTime"]', ' }', ' } ]]', '}'); LD("json_ld_fake", '{', ' [property "@fake"]: [string "@fake"],', ' [property "@contextual"]: [string "@identifier"],', ' [property "user@domain.com"]: [string "@graphical"],', ' [property "@ID"]: [string "@@ID"]', '}'); })(); application/library/codemirror/mode/javascript/index.html000064400000010141146731177160017761 0ustar00 CodeMirror: JavaScript mode

JavaScript mode

JavaScript mode supports several configuration options:

  • json which will set the mode to expect JSON data rather than a JavaScript program.
  • jsonld which will set the mode to expect JSON-LD linked data rather than a JavaScript program (demo).
  • typescript which will activate additional syntax highlighting and some other things for TypeScript code (demo).
  • statementIndent which (given a number) will determine the amount of indentation to use for statements continued on a new line.
  • wordCharacters, a regexp that indicates which characters should be considered part of an identifier. Defaults to /[\w$]/, which does not handle non-ASCII identifiers. Can be set to something more elaborate to improve Unicode support.

MIME types defined: text/javascript, application/json, application/ld+json, text/typescript, application/typescript.

application/library/codemirror/mode/javascript/json-ld.html000064400000004146146731177160020230 0ustar00 CodeMirror: JSON-LD mode

JSON-LD mode

This is a specialization of the JavaScript mode.

application/library/codemirror/mode/css/less_test.js000064400000003517146731177160016762 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { "use strict"; var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-less"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "less"); } MT("variable", "[variable-2 @base]: [atom #f04615];", "[qualifier .class] {", " [property width]: [variable percentage]([number 0.5]); [comment // returns `50%`]", " [property color]: [variable saturate]([variable-2 @base], [number 5%]);", "}"); MT("amp", "[qualifier .child], [qualifier .sibling] {", " [qualifier .parent] [atom &] {", " [property color]: [keyword black];", " }", " [atom &] + [atom &] {", " [property color]: [keyword red];", " }", "}"); MT("mixin", "[qualifier .mixin] ([variable dark]; [variable-2 @color]) {", " [property color]: [atom darken]([variable-2 @color], [number 10%]);", "}", "[qualifier .mixin] ([variable light]; [variable-2 @color]) {", " [property color]: [atom lighten]([variable-2 @color], [number 10%]);", "}", "[qualifier .mixin] ([variable-2 @_]; [variable-2 @color]) {", " [property display]: [atom block];", "}", "[variable-2 @switch]: [variable light];", "[qualifier .class] {", " [qualifier .mixin]([variable-2 @switch]; [atom #888]);", "}"); MT("nest", "[qualifier .one] {", " [def @media] ([property width]: [number 400px]) {", " [property font-size]: [number 1.2em];", " [def @media] [attribute print] [keyword and] [property color] {", " [property color]: [keyword blue];", " }", " }", "}"); MT("interpolation", ".@{[variable foo]} { [property font-weight]: [atom bold]; }"); })(); application/library/codemirror/mode/css/scss_test.js000064400000006064146731177160016767 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-scss"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "scss"); } MT('url_with_quotation', "[tag foo] { [property background]:[atom url]([string test.jpg]) }"); MT('url_with_double_quotes', "[tag foo] { [property background]:[atom url]([string \"test.jpg\"]) }"); MT('url_with_single_quotes', "[tag foo] { [property background]:[atom url]([string \'test.jpg\']) }"); MT('string', "[def @import] [string \"compass/css3\"]"); MT('important_keyword', "[tag foo] { [property background]:[atom url]([string \'test.jpg\']) [keyword !important] }"); MT('variable', "[variable-2 $blue]:[atom #333]"); MT('variable_as_attribute', "[tag foo] { [property color]:[variable-2 $blue] }"); MT('numbers', "[tag foo] { [property padding]:[number 10px] [number 10] [number 10em] [number 8in] }"); MT('number_percentage', "[tag foo] { [property width]:[number 80%] }"); MT('selector', "[builtin #hello][qualifier .world]{}"); MT('singleline_comment', "[comment // this is a comment]"); MT('multiline_comment', "[comment /*foobar*/]"); MT('attribute_with_hyphen', "[tag foo] { [property font-size]:[number 10px] }"); MT('string_after_attribute', "[tag foo] { [property content]:[string \"::\"] }"); MT('directives', "[def @include] [qualifier .mixin]"); MT('basic_structure', "[tag p] { [property background]:[keyword red]; }"); MT('nested_structure', "[tag p] { [tag a] { [property color]:[keyword red]; } }"); MT('mixin', "[def @mixin] [tag table-base] {}"); MT('number_without_semicolon', "[tag p] {[property width]:[number 12]}", "[tag a] {[property color]:[keyword red];}"); MT('atom_in_nested_block', "[tag p] { [tag a] { [property color]:[atom #000]; } }"); MT('interpolation_in_property', "[tag foo] { #{[variable-2 $hello]}:[number 2]; }"); MT('interpolation_in_selector', "[tag foo]#{[variable-2 $hello]} { [property color]:[atom #000]; }"); MT('interpolation_error', "[tag foo]#{[variable foo]} { [property color]:[atom #000]; }"); MT("divide_operator", "[tag foo] { [property width]:[number 4] [operator /] [number 2] }"); MT('nested_structure_with_id_selector', "[tag p] { [builtin #hello] { [property color]:[keyword red]; } }"); MT('indent_mixin', "[def @mixin] [tag container] (", " [variable-2 $a]: [number 10],", " [variable-2 $b]: [number 10])", "{}"); MT('indent_nested', "[tag foo] {", " [tag bar] {", " }", "}"); MT('indent_parentheses', "[tag foo] {", " [property color]: [atom darken]([variable-2 $blue],", " [number 9%]);", "}"); MT('indent_vardef', "[variable-2 $name]:", " [string 'val'];", "[tag tag] {", " [tag inner] {", " [property margin]: [number 3px];", " }", "}"); })(); application/library/codemirror/mode/css/css.js000064400000110535146731177160015544 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("css", function(config, parserConfig) { var inline = parserConfig.inline if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css"); var indentUnit = config.indentUnit, tokenHooks = parserConfig.tokenHooks, documentTypes = parserConfig.documentTypes || {}, mediaTypes = parserConfig.mediaTypes || {}, mediaFeatures = parserConfig.mediaFeatures || {}, mediaValueKeywords = parserConfig.mediaValueKeywords || {}, propertyKeywords = parserConfig.propertyKeywords || {}, nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {}, fontProperties = parserConfig.fontProperties || {}, counterDescriptors = parserConfig.counterDescriptors || {}, colorKeywords = parserConfig.colorKeywords || {}, valueKeywords = parserConfig.valueKeywords || {}, allowNested = parserConfig.allowNested, supportsAtComponent = parserConfig.supportsAtComponent === true; var type, override; function ret(style, tp) { type = tp; return style; } // Tokenizers function tokenBase(stream, state) { var ch = stream.next(); if (tokenHooks[ch]) { var result = tokenHooks[ch](stream, state); if (result !== false) return result; } if (ch == "@") { stream.eatWhile(/[\w\\\-]/); return ret("def", stream.current()); } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) { return ret(null, "compare"); } else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "#") { stream.eatWhile(/[\w\\\-]/); return ret("atom", "hash"); } else if (ch == "!") { stream.match(/^\s*\w*/); return ret("keyword", "important"); } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (ch === "-") { if (/[\d.]/.test(stream.peek())) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (stream.match(/^-[\w\\\-]+/)) { stream.eatWhile(/[\w\\\-]/); if (stream.match(/^\s*:/, false)) return ret("variable-2", "variable-definition"); return ret("variable-2", "variable"); } else if (stream.match(/^\w+-/)) { return ret("meta", "meta"); } } else if (/[,+>*\/]/.test(ch)) { return ret(null, "select-op"); } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { return ret("qualifier", "qualifier"); } else if (/[:;{}\[\]\(\)]/.test(ch)) { return ret(null, ch); } else if ((ch == "u" && stream.match(/rl(-prefix)?\(/)) || (ch == "d" && stream.match("omain(")) || (ch == "r" && stream.match("egexp("))) { stream.backUp(1); state.tokenize = tokenParenthesized; return ret("property", "word"); } else if (/[\w\\\-]/.test(ch)) { stream.eatWhile(/[\w\\\-]/); return ret("property", "word"); } else { return ret(null, null); } } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { if (quote == ")") stream.backUp(1); break; } escaped = !escaped && ch == "\\"; } if (ch == quote || !escaped && quote != ")") state.tokenize = null; return ret("string", "string"); }; } function tokenParenthesized(stream, state) { stream.next(); // Must be '(' if (!stream.match(/\s*[\"\')]/, false)) state.tokenize = tokenString(")"); else state.tokenize = null; return ret(null, "("); } // Context management function Context(type, indent, prev) { this.type = type; this.indent = indent; this.prev = prev; } function pushContext(state, stream, type, indent) { state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context); return type; } function popContext(state) { if (state.context.prev) state.context = state.context.prev; return state.context.type; } function pass(type, stream, state) { return states[state.context.type](type, stream, state); } function popAndPass(type, stream, state, n) { for (var i = n || 1; i > 0; i--) state.context = state.context.prev; return pass(type, stream, state); } // Parser function wordAsValue(stream) { var word = stream.current().toLowerCase(); if (valueKeywords.hasOwnProperty(word)) override = "atom"; else if (colorKeywords.hasOwnProperty(word)) override = "keyword"; else override = "variable"; } var states = {}; states.top = function(type, stream, state) { if (type == "{") { return pushContext(state, stream, "block"); } else if (type == "}" && state.context.prev) { return popContext(state); } else if (supportsAtComponent && /@component/.test(type)) { return pushContext(state, stream, "atComponentBlock"); } else if (/^@(-moz-)?document$/.test(type)) { return pushContext(state, stream, "documentTypes"); } else if (/^@(media|supports|(-moz-)?document|import)$/.test(type)) { return pushContext(state, stream, "atBlock"); } else if (/^@(font-face|counter-style)/.test(type)) { state.stateArg = type; return "restricted_atBlock_before"; } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) { return "keyframes"; } else if (type && type.charAt(0) == "@") { return pushContext(state, stream, "at"); } else if (type == "hash") { override = "builtin"; } else if (type == "word") { override = "tag"; } else if (type == "variable-definition") { return "maybeprop"; } else if (type == "interpolation") { return pushContext(state, stream, "interpolation"); } else if (type == ":") { return "pseudo"; } else if (allowNested && type == "(") { return pushContext(state, stream, "parens"); } return state.context.type; }; states.block = function(type, stream, state) { if (type == "word") { var word = stream.current().toLowerCase(); if (propertyKeywords.hasOwnProperty(word)) { override = "property"; return "maybeprop"; } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) { override = "string-2"; return "maybeprop"; } else if (allowNested) { override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag"; return "block"; } else { override += " error"; return "maybeprop"; } } else if (type == "meta") { return "block"; } else if (!allowNested && (type == "hash" || type == "qualifier")) { override = "error"; return "block"; } else { return states.top(type, stream, state); } }; states.maybeprop = function(type, stream, state) { if (type == ":") return pushContext(state, stream, "prop"); return pass(type, stream, state); }; states.prop = function(type, stream, state) { if (type == ";") return popContext(state); if (type == "{" && allowNested) return pushContext(state, stream, "propBlock"); if (type == "}" || type == "{") return popAndPass(type, stream, state); if (type == "(") return pushContext(state, stream, "parens"); if (type == "hash" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) { override += " error"; } else if (type == "word") { wordAsValue(stream); } else if (type == "interpolation") { return pushContext(state, stream, "interpolation"); } return "prop"; }; states.propBlock = function(type, _stream, state) { if (type == "}") return popContext(state); if (type == "word") { override = "property"; return "maybeprop"; } return state.context.type; }; states.parens = function(type, stream, state) { if (type == "{" || type == "}") return popAndPass(type, stream, state); if (type == ")") return popContext(state); if (type == "(") return pushContext(state, stream, "parens"); if (type == "interpolation") return pushContext(state, stream, "interpolation"); if (type == "word") wordAsValue(stream); return "parens"; }; states.pseudo = function(type, stream, state) { if (type == "word") { override = "variable-3"; return state.context.type; } return pass(type, stream, state); }; states.documentTypes = function(type, stream, state) { if (type == "word" && documentTypes.hasOwnProperty(stream.current())) { override = "tag"; return state.context.type; } else { return states.atBlock(type, stream, state); } }; states.atBlock = function(type, stream, state) { if (type == "(") return pushContext(state, stream, "atBlock_parens"); if (type == "}" || type == ";") return popAndPass(type, stream, state); if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); if (type == "interpolation") return pushContext(state, stream, "interpolation"); if (type == "word") { var word = stream.current().toLowerCase(); if (word == "only" || word == "not" || word == "and" || word == "or") override = "keyword"; else if (mediaTypes.hasOwnProperty(word)) override = "attribute"; else if (mediaFeatures.hasOwnProperty(word)) override = "property"; else if (mediaValueKeywords.hasOwnProperty(word)) override = "keyword"; else if (propertyKeywords.hasOwnProperty(word)) override = "property"; else if (nonStandardPropertyKeywords.hasOwnProperty(word)) override = "string-2"; else if (valueKeywords.hasOwnProperty(word)) override = "atom"; else if (colorKeywords.hasOwnProperty(word)) override = "keyword"; else override = "error"; } return state.context.type; }; states.atComponentBlock = function(type, stream, state) { if (type == "}") return popAndPass(type, stream, state); if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false); if (type == "word") override = "error"; return state.context.type; }; states.atBlock_parens = function(type, stream, state) { if (type == ")") return popContext(state); if (type == "{" || type == "}") return popAndPass(type, stream, state, 2); return states.atBlock(type, stream, state); }; states.restricted_atBlock_before = function(type, stream, state) { if (type == "{") return pushContext(state, stream, "restricted_atBlock"); if (type == "word" && state.stateArg == "@counter-style") { override = "variable"; return "restricted_atBlock_before"; } return pass(type, stream, state); }; states.restricted_atBlock = function(type, stream, state) { if (type == "}") { state.stateArg = null; return popContext(state); } if (type == "word") { if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) || (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase()))) override = "error"; else override = "property"; return "maybeprop"; } return "restricted_atBlock"; }; states.keyframes = function(type, stream, state) { if (type == "word") { override = "variable"; return "keyframes"; } if (type == "{") return pushContext(state, stream, "top"); return pass(type, stream, state); }; states.at = function(type, stream, state) { if (type == ";") return popContext(state); if (type == "{" || type == "}") return popAndPass(type, stream, state); if (type == "word") override = "tag"; else if (type == "hash") override = "builtin"; return "at"; }; states.interpolation = function(type, stream, state) { if (type == "}") return popContext(state); if (type == "{" || type == ";") return popAndPass(type, stream, state); if (type == "word") override = "variable"; else if (type != "variable" && type != "(" && type != ")") override = "error"; return "interpolation"; }; return { startState: function(base) { return {tokenize: null, state: inline ? "block" : "top", stateArg: null, context: new Context(inline ? "block" : "top", base || 0, null)}; }, token: function(stream, state) { if (!state.tokenize && stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style && typeof style == "object") { type = style[1]; style = style[0]; } override = style; state.state = states[state.state](type, stream, state); return override; }, indent: function(state, textAfter) { var cx = state.context, ch = textAfter && textAfter.charAt(0); var indent = cx.indent; if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev; if (cx.prev) { if (ch == "}" && (cx.type == "block" || cx.type == "top" || cx.type == "interpolation" || cx.type == "restricted_atBlock")) { // Resume indentation from parent context. cx = cx.prev; indent = cx.indent; } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || ch == "{" && (cx.type == "at" || cx.type == "atBlock")) { // Dedent relative to current context. indent = Math.max(0, cx.indent - indentUnit); cx = cx.prev; } } return indent; }, electricChars: "}", blockCommentStart: "/*", blockCommentEnd: "*/", fold: "brace" }; }); function keySet(array) { var keys = {}; for (var i = 0; i < array.length; ++i) { keys[array[i]] = true; } return keys; } var documentTypes_ = [ "domain", "regexp", "url", "url-prefix" ], documentTypes = keySet(documentTypes_); var mediaTypes_ = [ "all", "aural", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "embossed" ], mediaTypes = keySet(mediaTypes_); var mediaFeatures_ = [ "width", "min-width", "max-width", "height", "min-height", "max-height", "device-width", "min-device-width", "max-device-width", "device-height", "min-device-height", "max-device-height", "aspect-ratio", "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", "max-color", "color-index", "min-color-index", "max-color-index", "monochrome", "min-monochrome", "max-monochrome", "resolution", "min-resolution", "max-resolution", "scan", "grid", "orientation", "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio", "pointer", "any-pointer", "hover", "any-hover" ], mediaFeatures = keySet(mediaFeatures_); var mediaValueKeywords_ = [ "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover", "interlace", "progressive" ], mediaValueKeywords = keySet(mediaValueKeywords_); var propertyKeywords_ = [ "align-content", "align-items", "align-self", "alignment-adjust", "alignment-baseline", "anchor-point", "animation", "animation-delay", "animation-direction", "animation-duration", "animation-fill-mode", "animation-iteration-count", "animation-name", "animation-play-state", "animation-timing-function", "appearance", "azimuth", "backface-visibility", "background", "background-attachment", "background-blend-mode", "background-clip", "background-color", "background-image", "background-origin", "background-position", "background-repeat", "background-size", "baseline-shift", "binding", "bleed", "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target", "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius", "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", "border-collapse", "border-color", "border-image", "border-image-outset", "border-image-repeat", "border-image-slice", "border-image-source", "border-image-width", "border-left", "border-left-color", "border-left-style", "border-left-width", "border-radius", "border-right", "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", "border-top", "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-style", "border-top-width", "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", "caption-side", "clear", "clip", "color", "color-profile", "column-count", "column-fill", "column-gap", "column-rule", "column-rule-color", "column-rule-style", "column-rule-width", "column-span", "column-width", "columns", "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after", "cue-before", "cursor", "direction", "display", "dominant-baseline", "drop-initial-after-adjust", "drop-initial-after-align", "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size", "drop-initial-value", "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings", "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-synthesis", "font-variant", "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", "font-variant-position", "font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-gap", "grid-column-start", "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns", "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon", "image-orientation", "image-rendering", "image-resolution", "inline-box-align", "justify-content", "left", "letter-spacing", "line-break", "line-height", "line-stacking", "line-stacking-ruby", "line-stacking-shift", "line-stacking-strategy", "list-style", "list-style-image", "list-style-position", "list-style-type", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "marker-offset", "marks", "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed", "marquee-style", "max-height", "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", "nav-left", "nav-right", "nav-up", "object-fit", "object-position", "opacity", "order", "orphans", "outline", "outline-color", "outline-offset", "outline-style", "outline-width", "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", "page", "page-break-after", "page-break-before", "page-break-inside", "page-policy", "pause", "pause-after", "pause-before", "perspective", "perspective-origin", "pitch", "pitch-range", "play-during", "position", "presentation-level", "punctuation-trim", "quotes", "region-break-after", "region-break-before", "region-break-inside", "region-fragment", "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span", "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside", "size", "speak", "speak-as", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size", "table-layout", "target", "target-name", "target-new", "target-position", "text-align", "text-align-last", "text-decoration", "text-decoration-color", "text-decoration-line", "text-decoration-skip", "text-decoration-style", "text-emphasis", "text-emphasis-color", "text-emphasis-position", "text-emphasis-style", "text-height", "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow", "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", "text-wrap", "top", "transform", "transform-origin", "transform-style", "transition", "transition-delay", "transition-duration", "transition-property", "transition-timing-function", "unicode-bidi", "vertical-align", "visibility", "voice-balance", "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", "voice-volume", "volume", "white-space", "widows", "width", "word-break", "word-spacing", "word-wrap", "z-index", // SVG-specific "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", "color-interpolation", "color-interpolation-filters", "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", "glyph-orientation-vertical", "text-anchor", "writing-mode" ], propertyKeywords = keySet(propertyKeywords_); var nonStandardPropertyKeywords_ = [ "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", "scrollbar-3d-light-color", "scrollbar-track-color", "shape-inside", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "zoom" ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_); var fontProperties_ = [ "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", "font-stretch", "font-weight", "font-style" ], fontProperties = keySet(fontProperties_); var counterDescriptors_ = [ "additive-symbols", "fallback", "negative", "pad", "prefix", "range", "speak-as", "suffix", "symbols", "system" ], counterDescriptors = keySet(counterDescriptors_); var colorKeywords_ = [ "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen" ], colorKeywords = keySet(colorKeywords_); var valueKeywords_ = [ "above", "absolute", "activeborder", "additive", "activecaption", "afar", "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", "arabic-indic", "armenian", "asterisks", "attr", "auto", "avoid", "avoid-column", "avoid-page", "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary", "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", "compact", "condensed", "contain", "content", "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", "destination-in", "destination-out", "destination-over", "devanagari", "difference", "disc", "discard", "disclosure-closed", "disclosure-open", "document", "dot-dash", "dot-dot-dash", "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", "ethiopic-halehame-gez", "ethiopic-halehame-om-et", "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", "forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove", "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew", "help", "hidden", "hide", "higher", "highlight", "highlighttext", "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore", "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", "italic", "japanese-formal", "japanese-informal", "justify", "kannada", "katakana", "katakana-iroha", "keep-all", "khmer", "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "match", "matrix", "matrix3d", "media-controls-background", "media-current-time-display", "media-fullscreen-button", "media-mute-button", "media-play-button", "media-return-to-realtime-button", "media-rewind-button", "media-seek-back-button", "media-seek-forward-button", "media-slider", "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", "media-volume-slider-container", "media-volume-sliderthumb", "medium", "menu", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", "mix", "mongolian", "monospace", "move", "multiple", "multiply", "myanmar", "n-resize", "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote", "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", "painted", "page", "paused", "persian", "perspective", "plus-darker", "plus-lighter", "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", "radial-gradient", "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region", "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", "scroll", "scrollbar", "se-resize", "searchfield", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", "simp-chinese-formal", "simp-chinese-informal", "single", "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "spell-out", "square", "square-button", "start", "static", "status-bar", "stretch", "stroke", "sub", "subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "tamil", "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", "trad-chinese-formal", "trad-chinese-informal", "translate", "translate3d", "translateX", "translateY", "translateZ", "transparent", "ultra-condensed", "ultra-expanded", "underline", "up", "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", "var", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", "xx-large", "xx-small" ], valueKeywords = keySet(valueKeywords_); var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_) .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_) .concat(valueKeywords_); CodeMirror.registerHelper("hintWords", "css", allWords); function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return ["comment", "comment"]; } CodeMirror.defineMIME("text/css", { documentTypes: documentTypes, mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, mediaValueKeywords: mediaValueKeywords, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, fontProperties: fontProperties, counterDescriptors: counterDescriptors, colorKeywords: colorKeywords, valueKeywords: valueKeywords, tokenHooks: { "/": function(stream, state) { if (!stream.eat("*")) return false; state.tokenize = tokenCComment; return tokenCComment(stream, state); } }, name: "css" }); CodeMirror.defineMIME("text/x-scss", { mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, mediaValueKeywords: mediaValueKeywords, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, colorKeywords: colorKeywords, valueKeywords: valueKeywords, fontProperties: fontProperties, allowNested: true, tokenHooks: { "/": function(stream, state) { if (stream.eat("/")) { stream.skipToEnd(); return ["comment", "comment"]; } else if (stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else { return ["operator", "operator"]; } }, ":": function(stream) { if (stream.match(/\s*\{/)) return [null, "{"]; return false; }, "$": function(stream) { stream.match(/^[\w-]+/); if (stream.match(/^\s*:/, false)) return ["variable-2", "variable-definition"]; return ["variable-2", "variable"]; }, "#": function(stream) { if (!stream.eat("{")) return false; return [null, "interpolation"]; } }, name: "css", helperType: "scss" }); CodeMirror.defineMIME("text/x-less", { mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, mediaValueKeywords: mediaValueKeywords, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, colorKeywords: colorKeywords, valueKeywords: valueKeywords, fontProperties: fontProperties, allowNested: true, tokenHooks: { "/": function(stream, state) { if (stream.eat("/")) { stream.skipToEnd(); return ["comment", "comment"]; } else if (stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else { return ["operator", "operator"]; } }, "@": function(stream) { if (stream.eat("{")) return [null, "interpolation"]; if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/, false)) return false; stream.eatWhile(/[\w\\\-]/); if (stream.match(/^\s*:/, false)) return ["variable-2", "variable-definition"]; return ["variable-2", "variable"]; }, "&": function() { return ["atom", "atom"]; } }, name: "css", helperType: "less" }); CodeMirror.defineMIME("text/x-gss", { documentTypes: documentTypes, mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, fontProperties: fontProperties, counterDescriptors: counterDescriptors, colorKeywords: colorKeywords, valueKeywords: valueKeywords, supportsAtComponent: true, tokenHooks: { "/": function(stream, state) { if (!stream.eat("*")) return false; state.tokenize = tokenCComment; return tokenCComment(stream, state); } }, name: "css", helperType: "gss" }); }); application/library/codemirror/mode/css/gss_test.js000064400000000714146731177160016604 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { "use strict"; var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-gss"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "gss"); } MT("atComponent", "[def @component] {", "[tag foo] {", " [property color]: [keyword black];", "}", "}"); })(); application/library/codemirror/mode/css/test.js000064400000015201146731177160015725 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "css"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } // Error, because "foobarhello" is neither a known type or property, but // property was expected (after "and"), and it should be in parentheses. MT("atMediaUnknownType", "[def @media] [attribute screen] [keyword and] [error foobarhello] { }"); // Soft error, because "foobarhello" is not a known property or type. MT("atMediaUnknownProperty", "[def @media] [attribute screen] [keyword and] ([error foobarhello]) { }"); // Make sure nesting works with media queries MT("atMediaMaxWidthNested", "[def @media] [attribute screen] [keyword and] ([property max-width]: [number 25px]) { [tag foo] { } }"); MT("atMediaFeatureValueKeyword", "[def @media] ([property orientation]: [keyword landscape]) { }"); MT("atMediaUnknownFeatureValueKeyword", "[def @media] ([property orientation]: [error upsidedown]) { }"); MT("tagSelector", "[tag foo] { }"); MT("classSelector", "[qualifier .foo-bar_hello] { }"); MT("idSelector", "[builtin #foo] { [error #foo] }"); MT("tagSelectorUnclosed", "[tag foo] { [property margin]: [number 0] } [tag bar] { }"); MT("tagStringNoQuotes", "[tag foo] { [property font-family]: [variable hello] [variable world]; }"); MT("tagStringDouble", "[tag foo] { [property font-family]: [string \"hello world\"]; }"); MT("tagStringSingle", "[tag foo] { [property font-family]: [string 'hello world']; }"); MT("tagColorKeyword", "[tag foo] {", " [property color]: [keyword black];", " [property color]: [keyword navy];", " [property color]: [keyword yellow];", "}"); MT("tagColorHex3", "[tag foo] { [property background]: [atom #fff]; }"); MT("tagColorHex4", "[tag foo] { [property background]: [atom #ffff]; }"); MT("tagColorHex6", "[tag foo] { [property background]: [atom #ffffff]; }"); MT("tagColorHex8", "[tag foo] { [property background]: [atom #ffffffff]; }"); MT("tagColorHex5Invalid", "[tag foo] { [property background]: [atom&error #fffff]; }"); MT("tagColorHexInvalid", "[tag foo] { [property background]: [atom&error #ffg]; }"); MT("tagNegativeNumber", "[tag foo] { [property margin]: [number -5px]; }"); MT("tagPositiveNumber", "[tag foo] { [property padding]: [number 5px]; }"); MT("tagVendor", "[tag foo] { [meta -foo-][property box-sizing]: [meta -foo-][atom border-box]; }"); MT("tagBogusProperty", "[tag foo] { [property&error barhelloworld]: [number 0]; }"); MT("tagTwoProperties", "[tag foo] { [property margin]: [number 0]; [property padding]: [number 0]; }"); MT("tagTwoPropertiesURL", "[tag foo] { [property background]: [atom url]([string //example.com/foo.png]); [property padding]: [number 0]; }"); MT("indent_tagSelector", "[tag strong], [tag em] {", " [property background]: [atom rgba](", " [number 255], [number 255], [number 0], [number .2]", " );", "}"); MT("indent_atMedia", "[def @media] {", " [tag foo] {", " [property color]:", " [keyword yellow];", " }", "}"); MT("indent_comma", "[tag foo] {", " [property font-family]: [variable verdana],", " [atom sans-serif];", "}"); MT("indent_parentheses", "[tag foo]:[variable-3 before] {", " [property background]: [atom url](", "[string blahblah]", "[string etc]", "[string ]) [keyword !important];", "}"); MT("font_face", "[def @font-face] {", " [property font-family]: [string 'myfont'];", " [error nonsense]: [string 'abc'];", " [property src]: [atom url]([string http://blah]),", " [atom url]([string http://foo]);", "}"); MT("empty_url", "[def @import] [atom url]() [attribute screen];"); MT("parens", "[qualifier .foo] {", " [property background-image]: [variable fade]([atom #000], [number 20%]);", " [property border-image]: [atom linear-gradient](", " [atom to] [atom bottom],", " [variable fade]([atom #000], [number 20%]) [number 0%],", " [variable fade]([atom #000], [number 20%]) [number 100%]", " );", "}"); MT("css_variable", ":[variable-3 root] {", " [variable-2 --main-color]: [atom #06c];", "}", "[tag h1][builtin #foo] {", " [property color]: [atom var]([variable-2 --main-color]);", "}"); MT("supports", "[def @supports] ([keyword not] (([property text-align-last]: [atom justify]) [keyword or] ([meta -moz-][property text-align-last]: [atom justify])) {", " [property text-align-last]: [atom justify];", "}"); MT("document", "[def @document] [tag url]([string http://blah]),", " [tag url-prefix]([string https://]),", " [tag domain]([string blah.com]),", " [tag regexp]([string \".*blah.+\"]) {", " [builtin #id] {", " [property background-color]: [keyword white];", " }", " [tag foo] {", " [property font-family]: [variable Verdana], [atom sans-serif];", " }", "}"); MT("document_url", "[def @document] [tag url]([string http://blah]) { [qualifier .class] { } }"); MT("document_urlPrefix", "[def @document] [tag url-prefix]([string https://]) { [builtin #id] { } }"); MT("document_domain", "[def @document] [tag domain]([string blah.com]) { [tag foo] { } }"); MT("document_regexp", "[def @document] [tag regexp]([string \".*blah.+\"]) { [builtin #id] { } }"); MT("counter-style", "[def @counter-style] [variable binary] {", " [property system]: [atom numeric];", " [property symbols]: [number 0] [number 1];", " [property suffix]: [string \".\"];", " [property range]: [atom infinite];", " [property speak-as]: [atom numeric];", "}"); MT("counter-style-additive-symbols", "[def @counter-style] [variable simple-roman] {", " [property system]: [atom additive];", " [property additive-symbols]: [number 10] [variable X], [number 5] [variable V], [number 1] [variable I];", " [property range]: [number 1] [number 49];", "}"); MT("counter-style-use", "[tag ol][qualifier .roman] { [property list-style]: [variable simple-roman]; }"); MT("counter-style-symbols", "[tag ol] { [property list-style]: [atom symbols]([atom cyclic] [string \"*\"] [string \"\\2020\"] [string \"\\2021\"] [string \"\\A7\"]); }"); })(); application/library/codemirror/mode/css/scss.html000064400000005266146731177160016263 0ustar00 CodeMirror: SCSS mode

SCSS mode

The SCSS mode is a sub-mode of the CSS mode (defined in css.js).

Parsing/Highlighting Tests: normal, verbose.

application/library/codemirror/mode/css/index.html000064400000003570146731177160016413 0ustar00 CodeMirror: CSS mode

CSS mode

MIME types defined: text/css, text/x-scss (demo), text/x-less (demo).

Parsing/Highlighting Tests: normal, verbose.

application/library/codemirror/mode/css/less.html000064400000007742146731177160016257 0ustar00 CodeMirror: LESS mode

LESS mode

The LESS mode is a sub-mode of the CSS mode (defined in css.js).

Parsing/Highlighting Tests: normal, verbose.

application/library/codemirror/mode/css/gss.html000064400000005334146731177160016100 0ustar00 CodeMirror: Closure Stylesheets (GSS) mode

Closure Stylesheets (GSS) mode

A mode for Closure Stylesheets (GSS).

MIME type defined: text/x-gss.

Parsing/Highlighting Tests: normal, verbose.

application/library/codemirror/mode/mllike/mllike.js000064400000011632146731177160016714 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('mllike', function(_config, parserConfig) { var words = { 'let': 'keyword', 'rec': 'keyword', 'in': 'keyword', 'of': 'keyword', 'and': 'keyword', 'if': 'keyword', 'then': 'keyword', 'else': 'keyword', 'for': 'keyword', 'to': 'keyword', 'while': 'keyword', 'do': 'keyword', 'done': 'keyword', 'fun': 'keyword', 'function': 'keyword', 'val': 'keyword', 'type': 'keyword', 'mutable': 'keyword', 'match': 'keyword', 'with': 'keyword', 'try': 'keyword', 'open': 'builtin', 'ignore': 'builtin', 'begin': 'keyword', 'end': 'keyword' }; var extraWords = parserConfig.extraWords || {}; for (var prop in extraWords) { if (extraWords.hasOwnProperty(prop)) { words[prop] = parserConfig.extraWords[prop]; } } function tokenBase(stream, state) { var ch = stream.next(); if (ch === '"') { state.tokenize = tokenString; return state.tokenize(stream, state); } if (ch === '(') { if (stream.eat('*')) { state.commentLevel++; state.tokenize = tokenComment; return state.tokenize(stream, state); } } if (ch === '~') { stream.eatWhile(/\w/); return 'variable-2'; } if (ch === '`') { stream.eatWhile(/\w/); return 'quote'; } if (ch === '/' && parserConfig.slashComments && stream.eat('/')) { stream.skipToEnd(); return 'comment'; } if (/\d/.test(ch)) { stream.eatWhile(/[\d]/); if (stream.eat('.')) { stream.eatWhile(/[\d]/); } return 'number'; } if ( /[+\-*&%=<>!?|]/.test(ch)) { return 'operator'; } stream.eatWhile(/\w/); var cur = stream.current(); return words.hasOwnProperty(cur) ? words[cur] : 'variable'; } function tokenString(stream, state) { var next, end = false, escaped = false; while ((next = stream.next()) != null) { if (next === '"' && !escaped) { end = true; break; } escaped = !escaped && next === '\\'; } if (end && !escaped) { state.tokenize = tokenBase; } return 'string'; }; function tokenComment(stream, state) { var prev, next; while(state.commentLevel > 0 && (next = stream.next()) != null) { if (prev === '(' && next === '*') state.commentLevel++; if (prev === '*' && next === ')') state.commentLevel--; prev = next; } if (state.commentLevel <= 0) { state.tokenize = tokenBase; } return 'comment'; } return { startState: function() {return {tokenize: tokenBase, commentLevel: 0};}, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, blockCommentStart: "(*", blockCommentEnd: "*)", lineComment: parserConfig.slashComments ? "//" : null }; }); CodeMirror.defineMIME('text/x-ocaml', { name: 'mllike', extraWords: { 'succ': 'keyword', 'trace': 'builtin', 'exit': 'builtin', 'print_string': 'builtin', 'print_endline': 'builtin', 'true': 'atom', 'false': 'atom', 'raise': 'keyword' } }); CodeMirror.defineMIME('text/x-fsharp', { name: 'mllike', extraWords: { 'abstract': 'keyword', 'as': 'keyword', 'assert': 'keyword', 'base': 'keyword', 'class': 'keyword', 'default': 'keyword', 'delegate': 'keyword', 'downcast': 'keyword', 'downto': 'keyword', 'elif': 'keyword', 'exception': 'keyword', 'extern': 'keyword', 'finally': 'keyword', 'global': 'keyword', 'inherit': 'keyword', 'inline': 'keyword', 'interface': 'keyword', 'internal': 'keyword', 'lazy': 'keyword', 'let!': 'keyword', 'member' : 'keyword', 'module': 'keyword', 'namespace': 'keyword', 'new': 'keyword', 'null': 'keyword', 'override': 'keyword', 'private': 'keyword', 'public': 'keyword', 'return': 'keyword', 'return!': 'keyword', 'select': 'keyword', 'static': 'keyword', 'struct': 'keyword', 'upcast': 'keyword', 'use': 'keyword', 'use!': 'keyword', 'val': 'keyword', 'when': 'keyword', 'yield': 'keyword', 'yield!': 'keyword', 'List': 'builtin', 'Seq': 'builtin', 'Map': 'builtin', 'Set': 'builtin', 'int': 'builtin', 'string': 'builtin', 'raise': 'builtin', 'failwith': 'builtin', 'not': 'builtin', 'true': 'builtin', 'false': 'builtin' }, slashComments: true }); }); application/library/codemirror/mode/mllike/index.html000064400000010524146731177160017075 0ustar00 CodeMirror: ML-like mode

OCaml mode

F# mode

MIME types defined: text/x-ocaml (OCaml) and text/x-fsharp (F#).

application/library/codemirror/mode/verilog/verilog.js000064400000045414146731177160017305 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("verilog", function(config, parserConfig) { var indentUnit = config.indentUnit, statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, dontAlignCalls = parserConfig.dontAlignCalls, noIndentKeywords = parserConfig.noIndentKeywords || [], multiLineStrings = parserConfig.multiLineStrings, hooks = parserConfig.hooks || {}; function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } /** * Keywords from IEEE 1800-2012 */ var keywords = words( "accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind " + "bins binsof bit break buf bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config " + "const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable " + "dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup " + "endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask " + "enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin " + "function generate genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import " + "incdir include initial inout input inside instance int integer interconnect interface intersect join join_any " + "join_none large let liblist library local localparam logic longint macromodule matches medium modport module " + "nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 null or output package packed " + "parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup " + "pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg " + "reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime " + "s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify " + "specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on " + "table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior " + "trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void " + "wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor"); /** Operators from IEEE 1800-2012 unary_operator ::= + | - | ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~ binary_operator ::= + | - | * | / | % | == | != | === | !== | ==? | !=? | && | || | ** | < | <= | > | >= | & | | | ^ | ^~ | ~^ | >> | << | >>> | <<< | -> | <-> inc_or_dec_operator ::= ++ | -- unary_module_path_operator ::= ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~ binary_module_path_operator ::= == | != | && | || | & | | | ^ | ^~ | ~^ */ var isOperatorChar = /[\+\-\*\/!~&|^%=?:]/; var isBracketChar = /[\[\]{}()]/; var unsignedNumber = /\d[0-9_]*/; var decimalLiteral = /\d*\s*'s?d\s*\d[0-9_]*/i; var binaryLiteral = /\d*\s*'s?b\s*[xz01][xz01_]*/i; var octLiteral = /\d*\s*'s?o\s*[xz0-7][xz0-7_]*/i; var hexLiteral = /\d*\s*'s?h\s*[0-9a-fxz?][0-9a-fxz?_]*/i; var realLiteral = /(\d[\d_]*(\.\d[\d_]*)?E-?[\d_]+)|(\d[\d_]*\.\d[\d_]*)/i; var closingBracketOrWord = /^((\w+)|[)}\]])/; var closingBracket = /[)}\]]/; var curPunc; var curKeyword; // Block openings which are closed by a matching keyword in the form of ("end" + keyword) // E.g. "task" => "endtask" var blockKeywords = words( "case checker class clocking config function generate interface module package" + "primitive program property specify sequence table task" ); // Opening/closing pairs var openClose = {}; for (var keyword in blockKeywords) { openClose[keyword] = "end" + keyword; } openClose["begin"] = "end"; openClose["casex"] = "endcase"; openClose["casez"] = "endcase"; openClose["do" ] = "while"; openClose["fork" ] = "join;join_any;join_none"; openClose["covergroup"] = "endgroup"; for (var i in noIndentKeywords) { var keyword = noIndentKeywords[i]; if (openClose[keyword]) { openClose[keyword] = undefined; } } // Keywords which open statements that are ended with a semi-colon var statementKeywords = words("always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while"); function tokenBase(stream, state) { var ch = stream.peek(), style; if (hooks[ch] && (style = hooks[ch](stream, state)) != false) return style; if (hooks.tokenBase && (style = hooks.tokenBase(stream, state)) != false) return style; if (/[,;:\.]/.test(ch)) { curPunc = stream.next(); return null; } if (isBracketChar.test(ch)) { curPunc = stream.next(); return "bracket"; } // Macros (tick-defines) if (ch == '`') { stream.next(); if (stream.eatWhile(/[\w\$_]/)) { return "def"; } else { return null; } } // System calls if (ch == '$') { stream.next(); if (stream.eatWhile(/[\w\$_]/)) { return "meta"; } else { return null; } } // Time literals if (ch == '#') { stream.next(); stream.eatWhile(/[\d_.]/); return "def"; } // Strings if (ch == '"') { stream.next(); state.tokenize = tokenString(ch); return state.tokenize(stream, state); } // Comments if (ch == "/") { stream.next(); if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } stream.backUp(1); } // Numeric literals if (stream.match(realLiteral) || stream.match(decimalLiteral) || stream.match(binaryLiteral) || stream.match(octLiteral) || stream.match(hexLiteral) || stream.match(unsignedNumber) || stream.match(realLiteral)) { return "number"; } // Operators if (stream.eatWhile(isOperatorChar)) { return "meta"; } // Keywords / plain variables if (stream.eatWhile(/[\w\$_]/)) { var cur = stream.current(); if (keywords[cur]) { if (openClose[cur]) { curPunc = "newblock"; } if (statementKeywords[cur]) { curPunc = "newstatement"; } curKeyword = cur; return "keyword"; } return "variable"; } stream.next(); return null; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; var c = new Context(indent, col, type, null, state.context); return state.context = c; } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") { state.indented = state.context.indented; } return state.context = state.context.prev; } function isClosing(text, contextClosing) { if (text == contextClosing) { return true; } else { // contextClosing may be multiple keywords separated by ; var closingKeywords = contextClosing.split(";"); for (var i in closingKeywords) { if (text == closingKeywords[i]) { return true; } } return false; } } function buildElectricInputRegEx() { // Reindentation should occur on any bracket char: {}()[] // or on a match of any of the block closing keywords, at // the end of a line var allClosings = []; for (var i in openClose) { if (openClose[i]) { var closings = openClose[i].split(";"); for (var j in closings) { allClosings.push(closings[j]); } } } var re = new RegExp("[{}()\\[\\]]|(" + allClosings.join("|") + ")$"); return re; } // Interface return { // Regex to force current line to reindent electricInput: buildElectricInputRegEx(), startState: function(basecolumn) { var state = { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; if (hooks.startState) hooks.startState(state); return state; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (hooks.token) hooks.token(stream, state); if (stream.eatSpace()) return null; curPunc = null; curKeyword = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta" || style == "variable") return style; if (ctx.align == null) ctx.align = true; if (curPunc == ctx.type) { popContext(state); } else if ((curPunc == ";" && ctx.type == "statement") || (ctx.type && isClosing(curKeyword, ctx.type))) { ctx = popContext(state); while (ctx && ctx.type == "statement") ctx = popContext(state); } else if (curPunc == "{") { pushContext(state, stream.column(), "}"); } else if (curPunc == "[") { pushContext(state, stream.column(), "]"); } else if (curPunc == "(") { pushContext(state, stream.column(), ")"); } else if (ctx && ctx.type == "endcase" && curPunc == ":") { pushContext(state, stream.column(), "statement"); } else if (curPunc == "newstatement") { pushContext(state, stream.column(), "statement"); } else if (curPunc == "newblock") { if (curKeyword == "function" && ctx && (ctx.type == "statement" || ctx.type == "endgroup")) { // The 'function' keyword can appear in some other contexts where it actually does not // indicate a function (import/export DPI and covergroup definitions). // Do nothing in this case } else if (curKeyword == "task" && ctx && ctx.type == "statement") { // Same thing for task } else { var close = openClose[curKeyword]; pushContext(state, stream.column(), close); } } state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; if (hooks.indent) { var fromHook = hooks.indent(state); if (fromHook >= 0) return fromHook; } var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; var closing = false; var possibleClosing = textAfter.match(closingBracketOrWord); if (possibleClosing) closing = isClosing(possibleClosing[0], ctx.type); if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); else if (closingBracket.test(ctx.type) && ctx.align && !dontAlignCalls) return ctx.column + (closing ? 0 : 1); else if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit; else return ctx.indented + (closing ? 0 : indentUnit); }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-verilog", { name: "verilog" }); CodeMirror.defineMIME("text/x-systemverilog", { name: "verilog" }); // TLVVerilog mode var tlvchScopePrefixes = { ">": "property", "->": "property", "-": "hr", "|": "link", "?$": "qualifier", "?*": "qualifier", "@-": "variable-3", "@": "variable-3", "?": "qualifier" }; function tlvGenIndent(stream, state) { var tlvindentUnit = 2; var rtnIndent = -1, indentUnitRq = 0, curIndent = stream.indentation(); switch (state.tlvCurCtlFlowChar) { case "\\": curIndent = 0; break; case "|": if (state.tlvPrevPrevCtlFlowChar == "@") { indentUnitRq = -2; //-2 new pipe rq after cur pipe break; } if (tlvchScopePrefixes[state.tlvPrevCtlFlowChar]) indentUnitRq = 1; // +1 new scope break; case "M": // m4 if (state.tlvPrevPrevCtlFlowChar == "@") { indentUnitRq = -2; //-2 new inst rq after pipe break; } if (tlvchScopePrefixes[state.tlvPrevCtlFlowChar]) indentUnitRq = 1; // +1 new scope break; case "@": if (state.tlvPrevCtlFlowChar == "S") indentUnitRq = -1; // new pipe stage after stmts if (state.tlvPrevCtlFlowChar == "|") indentUnitRq = 1; // 1st pipe stage break; case "S": if (state.tlvPrevCtlFlowChar == "@") indentUnitRq = 1; // flow in pipe stage if (tlvchScopePrefixes[state.tlvPrevCtlFlowChar]) indentUnitRq = 1; // +1 new scope break; } var statementIndentUnit = tlvindentUnit; rtnIndent = curIndent + (indentUnitRq*statementIndentUnit); return rtnIndent >= 0 ? rtnIndent : curIndent; } CodeMirror.defineMIME("text/x-tlv", { name: "verilog", hooks: { "\\": function(stream, state) { var vxIndent = 0, style = false; var curPunc = stream.string; if ((stream.sol()) && ((/\\SV/.test(stream.string)) || (/\\TLV/.test(stream.string)))) { curPunc = (/\\TLV_version/.test(stream.string)) ? "\\TLV_version" : stream.string; stream.skipToEnd(); if (curPunc == "\\SV" && state.vxCodeActive) {state.vxCodeActive = false;}; if ((/\\TLV/.test(curPunc) && !state.vxCodeActive) || (curPunc=="\\TLV_version" && state.vxCodeActive)) {state.vxCodeActive = true;}; style = "keyword"; state.tlvCurCtlFlowChar = state.tlvPrevPrevCtlFlowChar = state.tlvPrevCtlFlowChar = ""; if (state.vxCodeActive == true) { state.tlvCurCtlFlowChar = "\\"; vxIndent = tlvGenIndent(stream, state); } state.vxIndentRq = vxIndent; } return style; }, tokenBase: function(stream, state) { var vxIndent = 0, style = false; var tlvisOperatorChar = /[\[\]=:]/; var tlvkpScopePrefixs = { "**":"variable-2", "*":"variable-2", "$$":"variable", "$":"variable", "^^":"attribute", "^":"attribute"}; var ch = stream.peek(); var vxCurCtlFlowCharValueAtStart = state.tlvCurCtlFlowChar; if (state.vxCodeActive == true) { if (/[\[\]{}\(\);\:]/.test(ch)) { // bypass nesting and 1 char punc style = "meta"; stream.next(); } else if (ch == "/") { stream.next(); if (stream.eat("/")) { stream.skipToEnd(); style = "comment"; state.tlvCurCtlFlowChar = "S"; } else { stream.backUp(1); } } else if (ch == "@") { // pipeline stage style = tlvchScopePrefixes[ch]; state.tlvCurCtlFlowChar = "@"; stream.next(); stream.eatWhile(/[\w\$_]/); } else if (stream.match(/\b[mM]4+/, true)) { // match: function(pattern, consume, caseInsensitive) // m4 pre proc stream.skipTo("("); style = "def"; state.tlvCurCtlFlowChar = "M"; } else if (ch == "!" && stream.sol()) { // v stmt in tlv region // state.tlvCurCtlFlowChar = "S"; style = "comment"; stream.next(); } else if (tlvisOperatorChar.test(ch)) { // operators stream.eatWhile(tlvisOperatorChar); style = "operator"; } else if (ch == "#") { // phy hier state.tlvCurCtlFlowChar = (state.tlvCurCtlFlowChar == "") ? ch : state.tlvCurCtlFlowChar; stream.next(); stream.eatWhile(/[+-]\d/); style = "tag"; } else if (tlvkpScopePrefixs.propertyIsEnumerable(ch)) { // special TLV operators style = tlvkpScopePrefixs[ch]; state.tlvCurCtlFlowChar = state.tlvCurCtlFlowChar == "" ? "S" : state.tlvCurCtlFlowChar; // stmt stream.next(); stream.match(/[a-zA-Z_0-9]+/); } else if (style = tlvchScopePrefixes[ch] || false) { // special TLV operators state.tlvCurCtlFlowChar = state.tlvCurCtlFlowChar == "" ? ch : state.tlvCurCtlFlowChar; stream.next(); stream.match(/[a-zA-Z_0-9]+/); } if (state.tlvCurCtlFlowChar != vxCurCtlFlowCharValueAtStart) { // flow change vxIndent = tlvGenIndent(stream, state); state.vxIndentRq = vxIndent; } } return style; }, token: function(stream, state) { if (state.vxCodeActive == true && stream.sol() && state.tlvCurCtlFlowChar != "") { state.tlvPrevPrevCtlFlowChar = state.tlvPrevCtlFlowChar; state.tlvPrevCtlFlowChar = state.tlvCurCtlFlowChar; state.tlvCurCtlFlowChar = ""; } }, indent: function(state) { return (state.vxCodeActive == true) ? state.vxIndentRq : -1; }, startState: function(state) { state.tlvCurCtlFlowChar = ""; state.tlvPrevCtlFlowChar = ""; state.tlvPrevPrevCtlFlowChar = ""; state.vxCodeActive = true; state.vxIndentRq = 0; } } }); }); application/library/codemirror/mode/verilog/test.js000064400000015171146731177160016612 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 4}, "verilog"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("binary_literals", "[number 1'b0]", "[number 1'b1]", "[number 1'bx]", "[number 1'bz]", "[number 1'bX]", "[number 1'bZ]", "[number 1'B0]", "[number 1'B1]", "[number 1'Bx]", "[number 1'Bz]", "[number 1'BX]", "[number 1'BZ]", "[number 1'b0]", "[number 1'b1]", "[number 2'b01]", "[number 2'bxz]", "[number 2'b11]", "[number 2'b10]", "[number 2'b1Z]", "[number 12'b0101_0101_0101]", "[number 1'b 0]", "[number 'b0101]" ); MT("octal_literals", "[number 3'o7]", "[number 3'O7]", "[number 3'so7]", "[number 3'SO7]" ); MT("decimal_literals", "[number 0]", "[number 1]", "[number 7]", "[number 123_456]", "[number 'd33]", "[number 8'd255]", "[number 8'D255]", "[number 8'sd255]", "[number 8'SD255]", "[number 32'd123]", "[number 32 'd123]", "[number 32 'd 123]" ); MT("hex_literals", "[number 4'h0]", "[number 4'ha]", "[number 4'hF]", "[number 4'hx]", "[number 4'hz]", "[number 4'hX]", "[number 4'hZ]", "[number 32'hdc78]", "[number 32'hDC78]", "[number 32 'hDC78]", "[number 32'h DC78]", "[number 32 'h DC78]", "[number 32'h44x7]", "[number 32'hFFF?]" ); MT("real_number_literals", "[number 1.2]", "[number 0.1]", "[number 2394.26331]", "[number 1.2E12]", "[number 1.2e12]", "[number 1.30e-2]", "[number 0.1e-0]", "[number 23E10]", "[number 29E-2]", "[number 236.123_763_e-12]" ); MT("operators", "[meta ^]" ); MT("keywords", "[keyword logic]", "[keyword logic] [variable foo]", "[keyword reg] [variable abc]" ); MT("variables", "[variable _leading_underscore]", "[variable _if]", "[number 12] [variable foo]", "[variable foo] [number 14]" ); MT("tick_defines", "[def `FOO]", "[def `foo]", "[def `FOO_bar]" ); MT("system_calls", "[meta $display]", "[meta $vpi_printf]" ); MT("line_comment", "[comment // Hello world]"); // Alignment tests MT("align_port_map_style1", /** * mod mod(.a(a), * .b(b) * ); */ "[variable mod] [variable mod][bracket (].[variable a][bracket (][variable a][bracket )],", " .[variable b][bracket (][variable b][bracket )]", " [bracket )];", "" ); MT("align_port_map_style2", /** * mod mod( * .a(a), * .b(b) * ); */ "[variable mod] [variable mod][bracket (]", " .[variable a][bracket (][variable a][bracket )],", " .[variable b][bracket (][variable b][bracket )]", "[bracket )];", "" ); // Indentation tests MT("indent_single_statement_if", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword break];", "" ); MT("no_indent_after_single_line_if", "[keyword if] [bracket (][variable foo][bracket )] [keyword break];", "" ); MT("indent_after_if_begin_same_line", "[keyword if] [bracket (][variable foo][bracket )] [keyword begin]", " [keyword break];", " [keyword break];", "[keyword end]", "" ); MT("indent_after_if_begin_next_line", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword begin]", " [keyword break];", " [keyword break];", " [keyword end]", "" ); MT("indent_single_statement_if_else", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword break];", "[keyword else]", " [keyword break];", "" ); MT("indent_if_else_begin_same_line", "[keyword if] [bracket (][variable foo][bracket )] [keyword begin]", " [keyword break];", " [keyword break];", "[keyword end] [keyword else] [keyword begin]", " [keyword break];", " [keyword break];", "[keyword end]", "" ); MT("indent_if_else_begin_next_line", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword begin]", " [keyword break];", " [keyword break];", " [keyword end]", "[keyword else]", " [keyword begin]", " [keyword break];", " [keyword break];", " [keyword end]", "" ); MT("indent_if_nested_without_begin", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword if] [bracket (][variable foo][bracket )]", " [keyword if] [bracket (][variable foo][bracket )]", " [keyword break];", "" ); MT("indent_case", "[keyword case] [bracket (][variable state][bracket )]", " [variable FOO]:", " [keyword break];", " [variable BAR]:", " [keyword break];", "[keyword endcase]", "" ); MT("unindent_after_end_with_preceding_text", "[keyword begin]", " [keyword break]; [keyword end]", "" ); MT("export_function_one_line_does_not_indent", "[keyword export] [string \"DPI-C\"] [keyword function] [variable helloFromSV];", "" ); MT("export_task_one_line_does_not_indent", "[keyword export] [string \"DPI-C\"] [keyword task] [variable helloFromSV];", "" ); MT("export_function_two_lines_indents_properly", "[keyword export]", " [string \"DPI-C\"] [keyword function] [variable helloFromSV];", "" ); MT("export_task_two_lines_indents_properly", "[keyword export]", " [string \"DPI-C\"] [keyword task] [variable helloFromSV];", "" ); MT("import_function_one_line_does_not_indent", "[keyword import] [string \"DPI-C\"] [keyword function] [variable helloFromC];", "" ); MT("import_task_one_line_does_not_indent", "[keyword import] [string \"DPI-C\"] [keyword task] [variable helloFromC];", "" ); MT("import_package_single_line_does_not_indent", "[keyword import] [variable p]::[variable x];", "[keyword import] [variable p]::[variable y];", "" ); MT("covergroup_with_function_indents_properly", "[keyword covergroup] [variable cg] [keyword with] [keyword function] [variable sample][bracket (][keyword bit] [variable b][bracket )];", " [variable c] : [keyword coverpoint] [variable c];", "[keyword endgroup]: [variable cg]", "" ); })(); application/library/codemirror/mode/verilog/index.html000064400000005073146731177160017272 0ustar00 CodeMirror: Verilog/SystemVerilog mode

SystemVerilog mode

Syntax highlighting and indentation for the Verilog and SystemVerilog languages (IEEE 1800).

Configuration options:

  • noIndentKeywords - List of keywords which should not cause indentation to increase. E.g. ["package", "module"]. Default: None

MIME types defined: text/x-verilog and text/x-systemverilog.

application/library/codemirror/mode/eiffel/index.html000064400000031616146731177160017057 0ustar00 CodeMirror: Eiffel mode

Eiffel mode

MIME types defined: text/x-eiffel.

Created by YNH.

application/library/codemirror/mode/eiffel/eiffel.js000064400000007240146731177160016646 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("eiffel", function() { function wordObj(words) { var o = {}; for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; return o; } var keywords = wordObj([ 'note', 'across', 'when', 'variant', 'until', 'unique', 'undefine', 'then', 'strip', 'select', 'retry', 'rescue', 'require', 'rename', 'reference', 'redefine', 'prefix', 'once', 'old', 'obsolete', 'loop', 'local', 'like', 'is', 'inspect', 'infix', 'include', 'if', 'frozen', 'from', 'external', 'export', 'ensure', 'end', 'elseif', 'else', 'do', 'creation', 'create', 'check', 'alias', 'agent', 'separate', 'invariant', 'inherit', 'indexing', 'feature', 'expanded', 'deferred', 'class', 'Void', 'True', 'Result', 'Precursor', 'False', 'Current', 'create', 'attached', 'detachable', 'as', 'and', 'implies', 'not', 'or' ]); var operators = wordObj([":=", "and then","and", "or","<<",">>"]); function chain(newtok, stream, state) { state.tokenize.push(newtok); return newtok(stream, state); } function tokenBase(stream, state) { if (stream.eatSpace()) return null; var ch = stream.next(); if (ch == '"'||ch == "'") { return chain(readQuoted(ch, "string"), stream, state); } else if (ch == "-"&&stream.eat("-")) { stream.skipToEnd(); return "comment"; } else if (ch == ":"&&stream.eat("=")) { return "operator"; } else if (/[0-9]/.test(ch)) { stream.eatWhile(/[xXbBCc0-9\.]/); stream.eat(/[\?\!]/); return "ident"; } else if (/[a-zA-Z_0-9]/.test(ch)) { stream.eatWhile(/[a-zA-Z_0-9]/); stream.eat(/[\?\!]/); return "ident"; } else if (/[=+\-\/*^%<>~]/.test(ch)) { stream.eatWhile(/[=+\-\/*^%<>~]/); return "operator"; } else { return null; } } function readQuoted(quote, style, unescaped) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && (unescaped || !escaped)) { state.tokenize.pop(); break; } escaped = !escaped && ch == "%"; } return style; }; } return { startState: function() { return {tokenize: [tokenBase]}; }, token: function(stream, state) { var style = state.tokenize[state.tokenize.length-1](stream, state); if (style == "ident") { var word = stream.current(); style = keywords.propertyIsEnumerable(stream.current()) ? "keyword" : operators.propertyIsEnumerable(stream.current()) ? "operator" : /^[A-Z][A-Z_0-9]*$/g.test(word) ? "tag" : /^0[bB][0-1]+$/g.test(word) ? "number" : /^0[cC][0-7]+$/g.test(word) ? "number" : /^0[xX][a-fA-F0-9]+$/g.test(word) ? "number" : /^([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)$/g.test(word) ? "number" : /^[0-9]+$/g.test(word) ? "number" : "variable"; } return style; }, lineComment: "--" }; }); CodeMirror.defineMIME("text/x-eiffel", "eiffel"); }); application/library/codemirror/mode/vbscript/vbscript.js000064400000032741146731177160017656 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* For extra ASP classic objects, initialize CodeMirror instance with this option: isASP: true E.G.: var editor = CodeMirror.fromTextArea(document.getElementById("code"), { lineNumbers: true, isASP: true }); */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("vbscript", function(conf, parserConf) { var ERRORCLASS = 'error'; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); } var singleOperators = new RegExp("^[\\+\\-\\*/&\\\\\\^<>=]"); var doubleOperators = new RegExp("^((<>)|(<=)|(>=))"); var singleDelimiters = new RegExp('^[\\.,]'); var brakets = new RegExp('^[\\(\\)]'); var identifiers = new RegExp("^[A-Za-z][_A-Za-z0-9]*"); var openingKeywords = ['class','sub','select','while','if','function', 'property', 'with', 'for']; var middleKeywords = ['else','elseif','case']; var endKeywords = ['next','loop','wend']; var wordOperators = wordRegexp(['and', 'or', 'not', 'xor', 'is', 'mod', 'eqv', 'imp']); var commonkeywords = ['dim', 'redim', 'then', 'until', 'randomize', 'byval','byref','new','property', 'exit', 'in', 'const','private', 'public', 'get','set','let', 'stop', 'on error resume next', 'on error goto 0', 'option explicit', 'call', 'me']; //This list was from: http://msdn.microsoft.com/en-us/library/f8tbc79x(v=vs.84).aspx var atomWords = ['true', 'false', 'nothing', 'empty', 'null']; //This list was from: http://msdn.microsoft.com/en-us/library/3ca8tfek(v=vs.84).aspx var builtinFuncsWords = ['abs', 'array', 'asc', 'atn', 'cbool', 'cbyte', 'ccur', 'cdate', 'cdbl', 'chr', 'cint', 'clng', 'cos', 'csng', 'cstr', 'date', 'dateadd', 'datediff', 'datepart', 'dateserial', 'datevalue', 'day', 'escape', 'eval', 'execute', 'exp', 'filter', 'formatcurrency', 'formatdatetime', 'formatnumber', 'formatpercent', 'getlocale', 'getobject', 'getref', 'hex', 'hour', 'inputbox', 'instr', 'instrrev', 'int', 'fix', 'isarray', 'isdate', 'isempty', 'isnull', 'isnumeric', 'isobject', 'join', 'lbound', 'lcase', 'left', 'len', 'loadpicture', 'log', 'ltrim', 'rtrim', 'trim', 'maths', 'mid', 'minute', 'month', 'monthname', 'msgbox', 'now', 'oct', 'replace', 'rgb', 'right', 'rnd', 'round', 'scriptengine', 'scriptenginebuildversion', 'scriptenginemajorversion', 'scriptengineminorversion', 'second', 'setlocale', 'sgn', 'sin', 'space', 'split', 'sqr', 'strcomp', 'string', 'strreverse', 'tan', 'time', 'timer', 'timeserial', 'timevalue', 'typename', 'ubound', 'ucase', 'unescape', 'vartype', 'weekday', 'weekdayname', 'year']; //This list was from: http://msdn.microsoft.com/en-us/library/ydz4cfk3(v=vs.84).aspx var builtinConsts = ['vbBlack', 'vbRed', 'vbGreen', 'vbYellow', 'vbBlue', 'vbMagenta', 'vbCyan', 'vbWhite', 'vbBinaryCompare', 'vbTextCompare', 'vbSunday', 'vbMonday', 'vbTuesday', 'vbWednesday', 'vbThursday', 'vbFriday', 'vbSaturday', 'vbUseSystemDayOfWeek', 'vbFirstJan1', 'vbFirstFourDays', 'vbFirstFullWeek', 'vbGeneralDate', 'vbLongDate', 'vbShortDate', 'vbLongTime', 'vbShortTime', 'vbObjectError', 'vbOKOnly', 'vbOKCancel', 'vbAbortRetryIgnore', 'vbYesNoCancel', 'vbYesNo', 'vbRetryCancel', 'vbCritical', 'vbQuestion', 'vbExclamation', 'vbInformation', 'vbDefaultButton1', 'vbDefaultButton2', 'vbDefaultButton3', 'vbDefaultButton4', 'vbApplicationModal', 'vbSystemModal', 'vbOK', 'vbCancel', 'vbAbort', 'vbRetry', 'vbIgnore', 'vbYes', 'vbNo', 'vbCr', 'VbCrLf', 'vbFormFeed', 'vbLf', 'vbNewLine', 'vbNullChar', 'vbNullString', 'vbTab', 'vbVerticalTab', 'vbUseDefault', 'vbTrue', 'vbFalse', 'vbEmpty', 'vbNull', 'vbInteger', 'vbLong', 'vbSingle', 'vbDouble', 'vbCurrency', 'vbDate', 'vbString', 'vbObject', 'vbError', 'vbBoolean', 'vbVariant', 'vbDataObject', 'vbDecimal', 'vbByte', 'vbArray']; //This list was from: http://msdn.microsoft.com/en-us/library/hkc375ea(v=vs.84).aspx var builtinObjsWords = ['WScript', 'err', 'debug', 'RegExp']; var knownProperties = ['description', 'firstindex', 'global', 'helpcontext', 'helpfile', 'ignorecase', 'length', 'number', 'pattern', 'source', 'value', 'count']; var knownMethods = ['clear', 'execute', 'raise', 'replace', 'test', 'write', 'writeline', 'close', 'open', 'state', 'eof', 'update', 'addnew', 'end', 'createobject', 'quit']; var aspBuiltinObjsWords = ['server', 'response', 'request', 'session', 'application']; var aspKnownProperties = ['buffer', 'cachecontrol', 'charset', 'contenttype', 'expires', 'expiresabsolute', 'isclientconnected', 'pics', 'status', //response 'clientcertificate', 'cookies', 'form', 'querystring', 'servervariables', 'totalbytes', //request 'contents', 'staticobjects', //application 'codepage', 'lcid', 'sessionid', 'timeout', //session 'scripttimeout']; //server var aspKnownMethods = ['addheader', 'appendtolog', 'binarywrite', 'end', 'flush', 'redirect', //response 'binaryread', //request 'remove', 'removeall', 'lock', 'unlock', //application 'abandon', //session 'getlasterror', 'htmlencode', 'mappath', 'transfer', 'urlencode']; //server var knownWords = knownMethods.concat(knownProperties); builtinObjsWords = builtinObjsWords.concat(builtinConsts); if (conf.isASP){ builtinObjsWords = builtinObjsWords.concat(aspBuiltinObjsWords); knownWords = knownWords.concat(aspKnownMethods, aspKnownProperties); }; var keywords = wordRegexp(commonkeywords); var atoms = wordRegexp(atomWords); var builtinFuncs = wordRegexp(builtinFuncsWords); var builtinObjs = wordRegexp(builtinObjsWords); var known = wordRegexp(knownWords); var stringPrefixes = '"'; var opening = wordRegexp(openingKeywords); var middle = wordRegexp(middleKeywords); var closing = wordRegexp(endKeywords); var doubleClosing = wordRegexp(['end']); var doOpening = wordRegexp(['do']); var noIndentWords = wordRegexp(['on error resume next', 'exit']); var comment = wordRegexp(['rem']); function indent(_stream, state) { state.currentIndent++; } function dedent(_stream, state) { state.currentIndent--; } // tokenizers function tokenBase(stream, state) { if (stream.eatSpace()) { return 'space'; //return null; } var ch = stream.peek(); // Handle Comments if (ch === "'") { stream.skipToEnd(); return 'comment'; } if (stream.match(comment)){ stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^((&H)|(&O))?[0-9\.]/i, false) && !stream.match(/^((&H)|(&O))?[0-9\.]+[a-z_]/i, false)) { var floatLiteral = false; // Floats if (stream.match(/^\d*\.\d+/i)) { floatLiteral = true; } else if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } else if (stream.match(/^\.\d+/)) { floatLiteral = true; } if (floatLiteral) { // Float literals may be "imaginary" stream.eat(/J/i); return 'number'; } // Integers var intLiteral = false; // Hex if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } // Octal else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } // Decimal else if (stream.match(/^[1-9]\d*F?/)) { // Decimal literals may be "imaginary" stream.eat(/J/i); // TODO - Can you have imaginary longs? intLiteral = true; } // Zero by itself with no other piece of number. else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } if (intLiteral) { // Integer literals may be "long" stream.eat(/L/i); return 'number'; } } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } // Handle operators and Delimiters if (stream.match(doubleOperators) || stream.match(singleOperators) || stream.match(wordOperators)) { return 'operator'; } if (stream.match(singleDelimiters)) { return null; } if (stream.match(brakets)) { return "bracket"; } if (stream.match(noIndentWords)) { state.doInCurrentLine = true; return 'keyword'; } if (stream.match(doOpening)) { indent(stream,state); state.doInCurrentLine = true; return 'keyword'; } if (stream.match(opening)) { if (! state.doInCurrentLine) indent(stream,state); else state.doInCurrentLine = false; return 'keyword'; } if (stream.match(middle)) { return 'keyword'; } if (stream.match(doubleClosing)) { dedent(stream,state); dedent(stream,state); return 'keyword'; } if (stream.match(closing)) { if (! state.doInCurrentLine) dedent(stream,state); else state.doInCurrentLine = false; return 'keyword'; } if (stream.match(keywords)) { return 'keyword'; } if (stream.match(atoms)) { return 'atom'; } if (stream.match(known)) { return 'variable-2'; } if (stream.match(builtinFuncs)) { return 'builtin'; } if (stream.match(builtinObjs)){ return 'variable-2'; } if (stream.match(identifiers)) { return 'variable'; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenStringFactory(delimiter) { var singleline = delimiter.length == 1; var OUTCLASS = 'string'; return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"]/); if (stream.match(delimiter)) { state.tokenize = tokenBase; return OUTCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) { return ERRORCLASS; } else { state.tokenize = tokenBase; } } return OUTCLASS; }; } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); // Handle '.' connected identifiers if (current === '.') { style = state.tokenize(stream, state); current = stream.current(); if (style && (style.substr(0, 8) === 'variable' || style==='builtin' || style==='keyword')){//|| knownWords.indexOf(current.substring(1)) > -1) { if (style === 'builtin' || style === 'keyword') style='variable'; if (knownWords.indexOf(current.substr(1)) > -1) style='variable-2'; return style; } else { return ERRORCLASS; } } return style; } var external = { electricChars:"dDpPtTfFeE ", startState: function() { return { tokenize: tokenBase, lastToken: null, currentIndent: 0, nextLineIndent: 0, doInCurrentLine: false, ignoreKeyword: false }; }, token: function(stream, state) { if (stream.sol()) { state.currentIndent += state.nextLineIndent; state.nextLineIndent = 0; state.doInCurrentLine = 0; } var style = tokenLexer(stream, state); state.lastToken = {style:style, content: stream.current()}; if (style==='space') style=null; return style; }, indent: function(state, textAfter) { var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); if(state.currentIndent < 0) return 0; return state.currentIndent * conf.indentUnit; } }; return external; }); CodeMirror.defineMIME("text/vbscript", "vbscript"); }); application/library/codemirror/mode/vbscript/index.html000064400000002755146731177160017463 0ustar00 CodeMirror: VBScript mode

VBScript mode

MIME types defined: text/vbscript.

application/library/codemirror/mode/swift/swift.js000064400000014430146731177160016451 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Swift mode created by Michael Kaminsky https://github.com/mkaminsky11 (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require("../../lib/codemirror")) else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod) else mod(CodeMirror) })(function(CodeMirror) { "use strict" function wordSet(words) { var set = {} for (var i = 0; i < words.length; i++) set[words[i]] = true return set } var keywords = wordSet(["var","let","class","deinit","enum","extension","func","import","init","protocol", "static","struct","subscript","typealias","as","dynamicType","is","new","super", "self","Self","Type","__COLUMN__","__FILE__","__FUNCTION__","__LINE__","break","case", "continue","default","do","else","fallthrough","if","in","for","return","switch", "where","while","associativity","didSet","get","infix","inout","left","mutating", "none","nonmutating","operator","override","postfix","precedence","prefix","right", "set","unowned","weak","willSet"]) var definingKeywords = wordSet(["var","let","class","enum","extension","func","import","protocol","struct", "typealias","dynamicType","for"]) var atoms = wordSet(["Infinity","NaN","undefined","null","true","false","on","off","yes","no","nil","null", "this","super"]) var types = wordSet(["String","bool","int","string","double","Double","Int","Float","float","public", "private","extension"]) var operators = "+-/*%=|&<>#" var punc = ";,.(){}[]" var number = /^-?(?:(?:[\d_]+\.[_\d]*|\.[_\d]+|0o[0-7_\.]+|0b[01_\.]+)(?:e-?[\d_]+)?|0x[\d_a-f\.]+(?:p-?[\d_]+)?)/i var identifier = /^[_A-Za-z$][_A-Za-z$0-9]*/ var property = /^[@\.][_A-Za-z$][_A-Za-z$0-9]*/ var regexp = /^\/(?!\s)(?:\/\/)?(?:\\.|[^\/])+\// function tokenBase(stream, state, prev) { if (stream.sol()) state.indented = stream.indentation() if (stream.eatSpace()) return null var ch = stream.peek() if (ch == "/") { if (stream.match("//")) { stream.skipToEnd() return "comment" } if (stream.match("/*")) { state.tokenize.push(tokenComment) return tokenComment(stream, state) } if (stream.match(regexp)) return "string-2" } if (operators.indexOf(ch) > -1) { stream.next() return "operator" } if (punc.indexOf(ch) > -1) { stream.next() stream.match("..") return "punctuation" } if (ch == '"' || ch == "'") { stream.next() var tokenize = tokenString(ch) state.tokenize.push(tokenize) return tokenize(stream, state) } if (stream.match(number)) return "number" if (stream.match(property)) return "property" if (stream.match(identifier)) { var ident = stream.current() if (keywords.hasOwnProperty(ident)) { if (definingKeywords.hasOwnProperty(ident)) state.prev = "define" return "keyword" } if (types.hasOwnProperty(ident)) return "variable-2" if (atoms.hasOwnProperty(ident)) return "atom" if (prev == "define") return "def" return "variable" } stream.next() return null } function tokenUntilClosingParen() { var depth = 0 return function(stream, state, prev) { var inner = tokenBase(stream, state, prev) if (inner == "punctuation") { if (stream.current() == "(") ++depth else if (stream.current() == ")") { if (depth == 0) { stream.backUp(1) state.tokenize.pop() return state.tokenize[state.tokenize.length - 1](stream, state) } else --depth } } return inner } } function tokenString(quote) { return function(stream, state) { var ch, escaped = false while (ch = stream.next()) { if (escaped) { if (ch == "(") { state.tokenize.push(tokenUntilClosingParen()) return "string" } escaped = false } else if (ch == quote) { break } else { escaped = ch == "\\" } } state.tokenize.pop() return "string" } } function tokenComment(stream, state) { stream.match(/^(?:[^*]|\*(?!\/))*/) if (stream.match("*/")) state.tokenize.pop() return "comment" } function Context(prev, align, indented) { this.prev = prev this.align = align this.indented = indented } function pushContext(state, stream) { var align = stream.match(/^\s*($|\/[\/\*])/, false) ? null : stream.column() + 1 state.context = new Context(state.context, align, state.indented) } function popContext(state) { if (state.context) { state.indented = state.context.indented state.context = state.context.prev } } CodeMirror.defineMode("swift", function(config) { return { startState: function() { return { prev: null, context: null, indented: 0, tokenize: [] } }, token: function(stream, state) { var prev = state.prev state.prev = null var tokenize = state.tokenize[state.tokenize.length - 1] || tokenBase var style = tokenize(stream, state, prev) if (!style || style == "comment") state.prev = prev else if (!state.prev) state.prev = style if (style == "punctuation") { var bracket = /[\(\[\{]|([\]\)\}])/.exec(stream.current()) if (bracket) (bracket[1] ? popContext : pushContext)(state, stream) } return style }, indent: function(state, textAfter) { var cx = state.context if (!cx) return 0 var closing = /^[\]\}\)]/.test(textAfter) if (cx.align != null) return cx.align - (closing ? 1 : 0) return cx.indented + (closing ? 0 : config.indentUnit) }, electricInput: /^\s*[\)\}\]]$/, lineComment: "//", blockCommentStart: "/*", blockCommentEnd: "*/" } }) CodeMirror.defineMIME("text/x-swift","swift") }); application/library/codemirror/mode/swift/index.html000064400000004045146731177160016755 0ustar00 CodeMirror: Swift mode

Swift mode

A simple mode for Swift

MIME types defined: text/x-swift (Swift code)

application/library/codemirror/mode/spreadsheet/spreadsheet.js000064400000006103146731177160020775 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("spreadsheet", function () { return { startState: function () { return { stringType: null, stack: [] }; }, token: function (stream, state) { if (!stream) return; //check for state changes if (state.stack.length === 0) { //strings if ((stream.peek() == '"') || (stream.peek() == "'")) { state.stringType = stream.peek(); stream.next(); // Skip quote state.stack.unshift("string"); } } //return state //stack has switch (state.stack[0]) { case "string": while (state.stack[0] === "string" && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.stack.shift(); // Clear flag } else if (stream.peek() === "\\") { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return "string"; case "characterClass": while (state.stack[0] === "characterClass" && !stream.eol()) { if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) state.stack.shift(); } return "operator"; } var peek = stream.peek(); //no stack switch (peek) { case "[": stream.next(); state.stack.unshift("characterClass"); return "bracket"; case ":": stream.next(); return "operator"; case "\\": if (stream.match(/\\[a-z]+/)) return "string-2"; else { stream.next(); return "atom"; } case ".": case ",": case ";": case "*": case "-": case "+": case "^": case "<": case "/": case "=": stream.next(); return "atom"; case "$": stream.next(); return "builtin"; } if (stream.match(/\d+/)) { if (stream.match(/^\w+/)) return "error"; return "number"; } else if (stream.match(/^[a-zA-Z_]\w*/)) { if (stream.match(/(?=[\(.])/, false)) return "keyword"; return "variable-2"; } else if (["[", "]", "(", ")", "{", "}"].indexOf(peek) != -1) { stream.next(); return "bracket"; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }); CodeMirror.defineMIME("text/x-spreadsheet", "spreadsheet"); }); application/library/codemirror/mode/spreadsheet/index.html000064400000002560146731177160020130 0ustar00 CodeMirror: Spreadsheet mode

Spreadsheet mode

MIME types defined: text/x-spreadsheet.

The Spreadsheet Mode

Created by Robert Plummer

application/library/codemirror/mode/asterisk/asterisk.js000064400000016415146731177160017640 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* * ===================================================================================== * * Filename: mode/asterisk/asterisk.js * * Description: CodeMirror mode for Asterisk dialplan * * Created: 05/17/2012 09:20:25 PM * Revision: none * * Author: Stas Kobzar (stas@modulis.ca), * Company: Modulis.ca Inc. * * ===================================================================================== */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("asterisk", function() { var atoms = ["exten", "same", "include","ignorepat","switch"], dpcmd = ["#include","#exec"], apps = [ "addqueuemember","adsiprog","aelsub","agentlogin","agentmonitoroutgoing","agi", "alarmreceiver","amd","answer","authenticate","background","backgrounddetect", "bridge","busy","callcompletioncancel","callcompletionrequest","celgenuserevent", "changemonitor","chanisavail","channelredirect","chanspy","clearhash","confbridge", "congestion","continuewhile","controlplayback","dahdiacceptr2call","dahdibarge", "dahdiras","dahdiscan","dahdisendcallreroutingfacility","dahdisendkeypadfacility", "datetime","dbdel","dbdeltree","deadagi","dial","dictate","directory","disa", "dumpchan","eagi","echo","endwhile","exec","execif","execiftime","exitwhile","extenspy", "externalivr","festival","flash","followme","forkcdr","getcpeid","gosub","gosubif", "goto","gotoif","gotoiftime","hangup","iax2provision","ices","importvar","incomplete", "ivrdemo","jabberjoin","jabberleave","jabbersend","jabbersendgroup","jabberstatus", "jack","log","macro","macroexclusive","macroexit","macroif","mailboxexists","meetme", "meetmeadmin","meetmechanneladmin","meetmecount","milliwatt","minivmaccmess","minivmdelete", "minivmgreet","minivmmwi","minivmnotify","minivmrecord","mixmonitor","monitor","morsecode", "mp3player","mset","musiconhold","nbscat","nocdr","noop","odbc","odbc","odbcfinish", "originate","ospauth","ospfinish","osplookup","ospnext","page","park","parkandannounce", "parkedcall","pausemonitor","pausequeuemember","pickup","pickupchan","playback","playtones", "privacymanager","proceeding","progress","queue","queuelog","raiseexception","read","readexten", "readfile","receivefax","receivefax","receivefax","record","removequeuemember", "resetcdr","retrydial","return","ringing","sayalpha","saycountedadj","saycountednoun", "saycountpl","saydigits","saynumber","sayphonetic","sayunixtime","senddtmf","sendfax", "sendfax","sendfax","sendimage","sendtext","sendurl","set","setamaflags", "setcallerpres","setmusiconhold","sipaddheader","sipdtmfmode","sipremoveheader","skel", "slastation","slatrunk","sms","softhangup","speechactivategrammar","speechbackground", "speechcreate","speechdeactivategrammar","speechdestroy","speechloadgrammar","speechprocessingsound", "speechstart","speechunloadgrammar","stackpop","startmusiconhold","stopmixmonitor","stopmonitor", "stopmusiconhold","stopplaytones","system","testclient","testserver","transfer","tryexec", "trysystem","unpausemonitor","unpausequeuemember","userevent","verbose","vmauthenticate", "vmsayname","voicemail","voicemailmain","wait","waitexten","waitfornoise","waitforring", "waitforsilence","waitmusiconhold","waituntil","while","zapateller" ]; function basicToken(stream,state){ var cur = ''; var ch = stream.next(); // comment if(ch == ";") { stream.skipToEnd(); return "comment"; } // context if(ch == '[') { stream.skipTo(']'); stream.eat(']'); return "header"; } // string if(ch == '"') { stream.skipTo('"'); return "string"; } if(ch == "'") { stream.skipTo("'"); return "string-2"; } // dialplan commands if(ch == '#') { stream.eatWhile(/\w/); cur = stream.current(); if(dpcmd.indexOf(cur) !== -1) { stream.skipToEnd(); return "strong"; } } // application args if(ch == '$'){ var ch1 = stream.peek(); if(ch1 == '{'){ stream.skipTo('}'); stream.eat('}'); return "variable-3"; } } // extension stream.eatWhile(/\w/); cur = stream.current(); if(atoms.indexOf(cur) !== -1) { state.extenStart = true; switch(cur) { case 'same': state.extenSame = true; break; case 'include': case 'switch': case 'ignorepat': state.extenInclude = true;break; default:break; } return "atom"; } } return { startState: function() { return { extenStart: false, extenSame: false, extenInclude: false, extenExten: false, extenPriority: false, extenApplication: false }; }, token: function(stream, state) { var cur = ''; if(stream.eatSpace()) return null; // extension started if(state.extenStart){ stream.eatWhile(/[^\s]/); cur = stream.current(); if(/^=>?$/.test(cur)){ state.extenExten = true; state.extenStart = false; return "strong"; } else { state.extenStart = false; stream.skipToEnd(); return "error"; } } else if(state.extenExten) { // set exten and priority state.extenExten = false; state.extenPriority = true; stream.eatWhile(/[^,]/); if(state.extenInclude) { stream.skipToEnd(); state.extenPriority = false; state.extenInclude = false; } if(state.extenSame) { state.extenPriority = false; state.extenSame = false; state.extenApplication = true; } return "tag"; } else if(state.extenPriority) { state.extenPriority = false; state.extenApplication = true; stream.next(); // get comma if(state.extenSame) return null; stream.eatWhile(/[^,]/); return "number"; } else if(state.extenApplication) { stream.eatWhile(/,/); cur = stream.current(); if(cur === ',') return null; stream.eatWhile(/\w/); cur = stream.current().toLowerCase(); state.extenApplication = false; if(apps.indexOf(cur) !== -1){ return "def strong"; } } else{ return basicToken(stream,state); } return null; } }; }); CodeMirror.defineMIME("text/x-asterisk", "asterisk"); }); application/library/codemirror/mode/asterisk/index.html000064400000010757146731177160017455 0ustar00 CodeMirror: Asterisk dialplan mode

Asterisk dialplan mode

MIME types defined: text/x-asterisk.

application/library/codemirror/mode/smalltalk/smalltalk.js000064400000010677146731177160020142 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('smalltalk', function(config) { var specialChars = /[+\-\/\\*~<>=@%|&?!.,:;^]/; var keywords = /true|false|nil|self|super|thisContext/; var Context = function(tokenizer, parent) { this.next = tokenizer; this.parent = parent; }; var Token = function(name, context, eos) { this.name = name; this.context = context; this.eos = eos; }; var State = function() { this.context = new Context(next, null); this.expectVariable = true; this.indentation = 0; this.userIndentationDelta = 0; }; State.prototype.userIndent = function(indentation) { this.userIndentationDelta = indentation > 0 ? (indentation / config.indentUnit - this.indentation) : 0; }; var next = function(stream, context, state) { var token = new Token(null, context, false); var aChar = stream.next(); if (aChar === '"') { token = nextComment(stream, new Context(nextComment, context)); } else if (aChar === '\'') { token = nextString(stream, new Context(nextString, context)); } else if (aChar === '#') { if (stream.peek() === '\'') { stream.next(); token = nextSymbol(stream, new Context(nextSymbol, context)); } else { if (stream.eatWhile(/[^\s.{}\[\]()]/)) token.name = 'string-2'; else token.name = 'meta'; } } else if (aChar === '$') { if (stream.next() === '<') { stream.eatWhile(/[^\s>]/); stream.next(); } token.name = 'string-2'; } else if (aChar === '|' && state.expectVariable) { token.context = new Context(nextTemporaries, context); } else if (/[\[\]{}()]/.test(aChar)) { token.name = 'bracket'; token.eos = /[\[{(]/.test(aChar); if (aChar === '[') { state.indentation++; } else if (aChar === ']') { state.indentation = Math.max(0, state.indentation - 1); } } else if (specialChars.test(aChar)) { stream.eatWhile(specialChars); token.name = 'operator'; token.eos = aChar !== ';'; // ; cascaded message expression } else if (/\d/.test(aChar)) { stream.eatWhile(/[\w\d]/); token.name = 'number'; } else if (/[\w_]/.test(aChar)) { stream.eatWhile(/[\w\d_]/); token.name = state.expectVariable ? (keywords.test(stream.current()) ? 'keyword' : 'variable') : null; } else { token.eos = state.expectVariable; } return token; }; var nextComment = function(stream, context) { stream.eatWhile(/[^"]/); return new Token('comment', stream.eat('"') ? context.parent : context, true); }; var nextString = function(stream, context) { stream.eatWhile(/[^']/); return new Token('string', stream.eat('\'') ? context.parent : context, false); }; var nextSymbol = function(stream, context) { stream.eatWhile(/[^']/); return new Token('string-2', stream.eat('\'') ? context.parent : context, false); }; var nextTemporaries = function(stream, context) { var token = new Token(null, context, false); var aChar = stream.next(); if (aChar === '|') { token.context = context.parent; token.eos = true; } else { stream.eatWhile(/[^|]/); token.name = 'variable'; } return token; }; return { startState: function() { return new State; }, token: function(stream, state) { state.userIndent(stream.indentation()); if (stream.eatSpace()) { return null; } var token = state.context.next(stream, state.context, state); state.context = token.context; state.expectVariable = token.eos; return token.name; }, blankLine: function(state) { state.userIndent(0); }, indent: function(state, textAfter) { var i = state.context.next === next && textAfter && textAfter.charAt(0) === ']' ? -1 : state.userIndentationDelta; return (state.indentation + i) * config.indentUnit; }, electricChars: ']' }; }); CodeMirror.defineMIME('text/x-stsrc', {name: 'smalltalk'}); }); application/library/codemirror/mode/smalltalk/index.html000064400000003560146731177160017606 0ustar00 CodeMirror: Smalltalk mode

Smalltalk mode

Simple Smalltalk mode.

MIME types defined: text/x-stsrc.

application/library/codemirror/mode/ttcn-cfg/ttcn-cfg.js000064400000017261146731177160017400 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ttcn-cfg", function(config, parserConfig) { var indentUnit = config.indentUnit, keywords = parserConfig.keywords || {}, fileNCtrlMaskOptions = parserConfig.fileNCtrlMaskOptions || {}, externalCommands = parserConfig.externalCommands || {}, multiLineStrings = parserConfig.multiLineStrings, indentStatements = parserConfig.indentStatements !== false; var isOperatorChar = /[\|]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[:=]/.test(ch)) { curPunc = ch; return "punctuation"; } if (ch == "#"){ stream.skipToEnd(); return "comment"; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } if (ch == "["){ stream.eatWhile(/[\w_\]]/); return "number sectionTitle"; } stream.eatWhile(/[\w\$_]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (fileNCtrlMaskOptions.propertyIsEnumerable(cur)) return "negative fileNCtrlMaskOptions"; if (externalCommands.propertyIsEnumerable(cur)) return "negative externalCommands"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped){ var afterNext = stream.peek(); //look if the character if the quote is like the B in '10100010'B if (afterNext){ afterNext = afterNext.toLowerCase(); if(afterNext == "b" || afterNext == "h" || afterNext == "o") stream.next(); } end = true; break; } escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } //Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement"){ popContext(state); } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement"))) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, electricChars: "{}", lineComment: "#", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } CodeMirror.defineMIME("text/x-ttcn-cfg", { name: "ttcn-cfg", keywords: words("Yes No LogFile FileMask ConsoleMask AppendFile" + " TimeStampFormat LogEventTypes SourceInfoFormat" + " LogEntityName LogSourceInfo DiskFullAction" + " LogFileNumber LogFileSize MatchingHints Detailed" + " Compact SubCategories Stack Single None Seconds" + " DateTime Time Stop Error Retry Delete TCPPort KillTimer" + " NumHCs UnixSocketsEnabled LocalAddress"), fileNCtrlMaskOptions: words("TTCN_EXECUTOR TTCN_ERROR TTCN_WARNING" + " TTCN_PORTEVENT TTCN_TIMEROP TTCN_VERDICTOP" + " TTCN_DEFAULTOP TTCN_TESTCASE TTCN_ACTION" + " TTCN_USER TTCN_FUNCTION TTCN_STATISTICS" + " TTCN_PARALLEL TTCN_MATCHING TTCN_DEBUG" + " EXECUTOR ERROR WARNING PORTEVENT TIMEROP" + " VERDICTOP DEFAULTOP TESTCASE ACTION USER" + " FUNCTION STATISTICS PARALLEL MATCHING DEBUG" + " LOG_ALL LOG_NOTHING ACTION_UNQUALIFIED" + " DEBUG_ENCDEC DEBUG_TESTPORT" + " DEBUG_UNQUALIFIED DEFAULTOP_ACTIVATE" + " DEFAULTOP_DEACTIVATE DEFAULTOP_EXIT" + " DEFAULTOP_UNQUALIFIED ERROR_UNQUALIFIED" + " EXECUTOR_COMPONENT EXECUTOR_CONFIGDATA" + " EXECUTOR_EXTCOMMAND EXECUTOR_LOGOPTIONS" + " EXECUTOR_RUNTIME EXECUTOR_UNQUALIFIED" + " FUNCTION_RND FUNCTION_UNQUALIFIED" + " MATCHING_DONE MATCHING_MCSUCCESS" + " MATCHING_MCUNSUCC MATCHING_MMSUCCESS" + " MATCHING_MMUNSUCC MATCHING_PCSUCCESS" + " MATCHING_PCUNSUCC MATCHING_PMSUCCESS" + " MATCHING_PMUNSUCC MATCHING_PROBLEM" + " MATCHING_TIMEOUT MATCHING_UNQUALIFIED" + " PARALLEL_PORTCONN PARALLEL_PORTMAP" + " PARALLEL_PTC PARALLEL_UNQUALIFIED" + " PORTEVENT_DUALRECV PORTEVENT_DUALSEND" + " PORTEVENT_MCRECV PORTEVENT_MCSEND" + " PORTEVENT_MMRECV PORTEVENT_MMSEND" + " PORTEVENT_MQUEUE PORTEVENT_PCIN" + " PORTEVENT_PCOUT PORTEVENT_PMIN" + " PORTEVENT_PMOUT PORTEVENT_PQUEUE" + " PORTEVENT_STATE PORTEVENT_UNQUALIFIED" + " STATISTICS_UNQUALIFIED STATISTICS_VERDICT" + " TESTCASE_FINISH TESTCASE_START" + " TESTCASE_UNQUALIFIED TIMEROP_GUARD" + " TIMEROP_READ TIMEROP_START TIMEROP_STOP" + " TIMEROP_TIMEOUT TIMEROP_UNQUALIFIED" + " USER_UNQUALIFIED VERDICTOP_FINAL" + " VERDICTOP_GETVERDICT VERDICTOP_SETVERDICT" + " VERDICTOP_UNQUALIFIED WARNING_UNQUALIFIED"), externalCommands: words("BeginControlPart EndControlPart BeginTestCase" + " EndTestCase"), multiLineStrings: true }); });application/library/codemirror/mode/ttcn-cfg/index.html000064400000007025146731177160017327 0ustar00 CodeMirror: TTCN-CFG mode

TTCN-CFG example


Language: Testing and Test Control Notation - Configuration files (TTCN-CFG)

MIME types defined: text/x-ttcn-cfg.


The development of this mode has been sponsored by Ericsson .

Coded by Asmelash Tsegay Gebretsadkan

application/library/codemirror/mode/q/index.html000064400000021401146731177160016054 0ustar00 CodeMirror: Q mode

Q mode

MIME type defined: text/x-q.

application/library/codemirror/mode/q/q.js000064400000014731146731177160014665 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("q",function(config){ var indentUnit=config.indentUnit, curPunc, keywords=buildRE(["abs","acos","aj","aj0","all","and","any","asc","asin","asof","atan","attr","avg","avgs","bin","by","ceiling","cols","cor","cos","count","cov","cross","csv","cut","delete","deltas","desc","dev","differ","distinct","div","do","each","ej","enlist","eval","except","exec","exit","exp","fby","fills","first","fkeys","flip","floor","from","get","getenv","group","gtime","hclose","hcount","hdel","hopen","hsym","iasc","idesc","if","ij","in","insert","inter","inv","key","keys","last","like","list","lj","load","log","lower","lsq","ltime","ltrim","mavg","max","maxs","mcount","md5","mdev","med","meta","min","mins","mmax","mmin","mmu","mod","msum","neg","next","not","null","or","over","parse","peach","pj","plist","prd","prds","prev","prior","rand","rank","ratios","raze","read0","read1","reciprocal","reverse","rload","rotate","rsave","rtrim","save","scan","select","set","setenv","show","signum","sin","sqrt","ss","ssr","string","sublist","sum","sums","sv","system","tables","tan","til","trim","txf","type","uj","ungroup","union","update","upper","upsert","value","var","view","views","vs","wavg","where","where","while","within","wj","wj1","wsum","xasc","xbar","xcol","xcols","xdesc","xexp","xgroup","xkey","xlog","xprev","xrank"]), E=/[|/&^!+:\\\-*%$=~#;@><,?_\'\"\[\(\]\)\s{}]/; function buildRE(w){return new RegExp("^("+w.join("|")+")$");} function tokenBase(stream,state){ var sol=stream.sol(),c=stream.next(); curPunc=null; if(sol) if(c=="/") return(state.tokenize=tokenLineComment)(stream,state); else if(c=="\\"){ if(stream.eol()||/\s/.test(stream.peek())) return stream.skipToEnd(),/^\\\s*$/.test(stream.current())?(state.tokenize=tokenCommentToEOF)(stream, state):state.tokenize=tokenBase,"comment"; else return state.tokenize=tokenBase,"builtin"; } if(/\s/.test(c)) return stream.peek()=="/"?(stream.skipToEnd(),"comment"):"whitespace"; if(c=='"') return(state.tokenize=tokenString)(stream,state); if(c=='`') return stream.eatWhile(/[A-Z|a-z|\d|_|:|\/|\.]/),"symbol"; if(("."==c&&/\d/.test(stream.peek()))||/\d/.test(c)){ var t=null; stream.backUp(1); if(stream.match(/^\d{4}\.\d{2}(m|\.\d{2}([D|T](\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)?)?)/) || stream.match(/^\d+D(\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)/) || stream.match(/^\d{2}:\d{2}(:\d{2}(\.\d{1,9})?)?/) || stream.match(/^\d+[ptuv]{1}/)) t="temporal"; else if(stream.match(/^0[NwW]{1}/) || stream.match(/^0x[\d|a-f|A-F]*/) || stream.match(/^[0|1]+[b]{1}/) || stream.match(/^\d+[chijn]{1}/) || stream.match(/-?\d*(\.\d*)?(e[+\-]?\d+)?(e|f)?/)) t="number"; return(t&&(!(c=stream.peek())||E.test(c)))?t:(stream.next(),"error"); } if(/[A-Z|a-z]|\./.test(c)) return stream.eatWhile(/[A-Z|a-z|\.|_|\d]/),keywords.test(stream.current())?"keyword":"variable"; if(/[|/&^!+:\\\-*%$=~#;@><\.,?_\']/.test(c)) return null; if(/[{}\(\[\]\)]/.test(c)) return null; return"error"; } function tokenLineComment(stream,state){ return stream.skipToEnd(),/\/\s*$/.test(stream.current())?(state.tokenize=tokenBlockComment)(stream,state):(state.tokenize=tokenBase),"comment"; } function tokenBlockComment(stream,state){ var f=stream.sol()&&stream.peek()=="\\"; stream.skipToEnd(); if(f&&/^\\\s*$/.test(stream.current())) state.tokenize=tokenBase; return"comment"; } function tokenCommentToEOF(stream){return stream.skipToEnd(),"comment";} function tokenString(stream,state){ var escaped=false,next,end=false; while((next=stream.next())){ if(next=="\""&&!escaped){end=true;break;} escaped=!escaped&&next=="\\"; } if(end)state.tokenize=tokenBase; return"string"; } function pushContext(state,type,col){state.context={prev:state.context,indent:state.indent,col:col,type:type};} function popContext(state){state.indent=state.context.indent;state.context=state.context.prev;} return{ startState:function(){ return{tokenize:tokenBase, context:null, indent:0, col:0}; }, token:function(stream,state){ if(stream.sol()){ if(state.context&&state.context.align==null) state.context.align=false; state.indent=stream.indentation(); } //if (stream.eatSpace()) return null; var style=state.tokenize(stream,state); if(style!="comment"&&state.context&&state.context.align==null&&state.context.type!="pattern"){ state.context.align=true; } if(curPunc=="(")pushContext(state,")",stream.column()); else if(curPunc=="[")pushContext(state,"]",stream.column()); else if(curPunc=="{")pushContext(state,"}",stream.column()); else if(/[\]\}\)]/.test(curPunc)){ while(state.context&&state.context.type=="pattern")popContext(state); if(state.context&&curPunc==state.context.type)popContext(state); } else if(curPunc=="."&&state.context&&state.context.type=="pattern")popContext(state); else if(/atom|string|variable/.test(style)&&state.context){ if(/[\}\]]/.test(state.context.type)) pushContext(state,"pattern",stream.column()); else if(state.context.type=="pattern"&&!state.context.align){ state.context.align=true; state.context.col=stream.column(); } } return style; }, indent:function(state,textAfter){ var firstChar=textAfter&&textAfter.charAt(0); var context=state.context; if(/[\]\}]/.test(firstChar)) while (context&&context.type=="pattern")context=context.prev; var closing=context&&firstChar==context.type; if(!context) return 0; else if(context.type=="pattern") return context.col; else if(context.align) return context.col+(closing?0:1); else return context.indent+(closing?0:indentUnit); } }; }); CodeMirror.defineMIME("text/x-q","q"); }); application/library/codemirror/mode/dart/dart.js000064400000011772146731177160016053 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../clike/clike")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../clike/clike"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var keywords = ("this super static final const abstract class extends external factory " + "implements get native operator set typedef with enum throw rethrow " + "assert break case continue default in return new deferred async await " + "try catch finally do else for if switch while import library export " + "part of show hide is as").split(" "); var blockKeywords = "try catch finally do else for if switch while".split(" "); var atoms = "true false null".split(" "); var builtins = "void bool num int double dynamic var String".split(" "); function set(words) { var obj = {}; for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function pushInterpolationStack(state) { (state.interpolationStack || (state.interpolationStack = [])).push(state.tokenize); } function popInterpolationStack(state) { return (state.interpolationStack || (state.interpolationStack = [])).pop(); } function sizeInterpolationStack(state) { return state.interpolationStack ? state.interpolationStack.length : 0; } CodeMirror.defineMIME("application/dart", { name: "clike", keywords: set(keywords), blockKeywords: set(blockKeywords), builtin: set(builtins), atoms: set(atoms), hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_\.]/); return "meta"; }, // custom string handling to deal with triple-quoted strings and string interpolation "'": function(stream, state) { return tokenString("'", stream, state, false); }, "\"": function(stream, state) { return tokenString("\"", stream, state, false); }, "r": function(stream, state) { var peek = stream.peek(); if (peek == "'" || peek == "\"") { return tokenString(stream.next(), stream, state, true); } return false; }, "}": function(_stream, state) { // "}" is end of interpolation, if interpolation stack is non-empty if (sizeInterpolationStack(state) > 0) { state.tokenize = popInterpolationStack(state); return null; } return false; }, "/": function(stream, state) { if (!stream.eat("*")) return false state.tokenize = tokenNestedComment(1) return state.tokenize(stream, state) } } }); function tokenString(quote, stream, state, raw) { var tripleQuoted = false; if (stream.eat(quote)) { if (stream.eat(quote)) tripleQuoted = true; else return "string"; //empty string } function tokenStringHelper(stream, state) { var escaped = false; while (!stream.eol()) { if (!raw && !escaped && stream.peek() == "$") { pushInterpolationStack(state); state.tokenize = tokenInterpolation; return "string"; } var next = stream.next(); if (next == quote && !escaped && (!tripleQuoted || stream.match(quote + quote))) { state.tokenize = null; break; } escaped = !raw && !escaped && next == "\\"; } return "string"; } state.tokenize = tokenStringHelper; return tokenStringHelper(stream, state); } function tokenInterpolation(stream, state) { stream.eat("$"); if (stream.eat("{")) { // let clike handle the content of ${...}, // we take over again when "}" appears (see hooks). state.tokenize = null; } else { state.tokenize = tokenInterpolationIdentifier; } return null; } function tokenInterpolationIdentifier(stream, state) { stream.eatWhile(/[\w_]/); state.tokenize = popInterpolationStack(state); return "variable"; } function tokenNestedComment(depth) { return function (stream, state) { var ch while (ch = stream.next()) { if (ch == "*" && stream.eat("/")) { if (depth == 1) { state.tokenize = null break } else { state.tokenize = tokenNestedComment(depth - 1) return state.tokenize(stream, state) } } else if (ch == "/" && stream.eat("*")) { state.tokenize = tokenNestedComment(depth + 1) return state.tokenize(stream, state) } } return "comment" } } CodeMirror.registerHelper("hintWords", "application/dart", keywords.concat(atoms).concat(builtins)); // This is needed to make loading through meta.js work. CodeMirror.defineMode("dart", function(conf) { return CodeMirror.getMode(conf, "application/dart"); }, "clike"); }); application/library/codemirror/mode/dart/index.html000064400000003133146731177160016550 0ustar00 CodeMirror: Dart mode

Dart mode

application/library/codemirror/mode/slim/slim.js000064400000043152146731177160016074 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Slim Highlighting for CodeMirror copyright (c) HicknHack Software Gmbh (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../ruby/ruby")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../ruby/ruby"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("slim", function(config) { var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"}); var rubyMode = CodeMirror.getMode(config, "ruby"); var modes = { html: htmlMode, ruby: rubyMode }; var embedded = { ruby: "ruby", javascript: "javascript", css: "text/css", sass: "text/x-sass", scss: "text/x-scss", less: "text/x-less", styl: "text/x-styl", // no highlighting so far coffee: "coffeescript", asciidoc: "text/x-asciidoc", markdown: "text/x-markdown", textile: "text/x-textile", // no highlighting so far creole: "text/x-creole", // no highlighting so far wiki: "text/x-wiki", // no highlighting so far mediawiki: "text/x-mediawiki", // no highlighting so far rdoc: "text/x-rdoc", // no highlighting so far builder: "text/x-builder", // no highlighting so far nokogiri: "text/x-nokogiri", // no highlighting so far erb: "application/x-erb" }; var embeddedRegexp = function(map){ var arr = []; for(var key in map) arr.push(key); return new RegExp("^("+arr.join('|')+"):"); }(embedded); var styleMap = { "commentLine": "comment", "slimSwitch": "operator special", "slimTag": "tag", "slimId": "attribute def", "slimClass": "attribute qualifier", "slimAttribute": "attribute", "slimSubmode": "keyword special", "closeAttributeTag": null, "slimDoctype": null, "lineContinuation": null }; var closing = { "{": "}", "[": "]", "(": ")" }; var nameStartChar = "_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD"; var nameChar = nameStartChar + "\\-0-9\xB7\u0300-\u036F\u203F-\u2040"; var nameRegexp = new RegExp("^[:"+nameStartChar+"](?::["+nameChar+"]|["+nameChar+"]*)"); var attributeNameRegexp = new RegExp("^[:"+nameStartChar+"][:\\."+nameChar+"]*(?=\\s*=)"); var wrappedAttributeNameRegexp = new RegExp("^[:"+nameStartChar+"][:\\."+nameChar+"]*"); var classNameRegexp = /^\.-?[_a-zA-Z]+[\w\-]*/; var classIdRegexp = /^#[_a-zA-Z]+[\w\-]*/; function backup(pos, tokenize, style) { var restore = function(stream, state) { state.tokenize = tokenize; if (stream.pos < pos) { stream.pos = pos; return style; } return state.tokenize(stream, state); }; return function(stream, state) { state.tokenize = restore; return tokenize(stream, state); }; } function maybeBackup(stream, state, pat, offset, style) { var cur = stream.current(); var idx = cur.search(pat); if (idx > -1) { state.tokenize = backup(stream.pos, state.tokenize, style); stream.backUp(cur.length - idx - offset); } return style; } function continueLine(state, column) { state.stack = { parent: state.stack, style: "continuation", indented: column, tokenize: state.line }; state.line = state.tokenize; } function finishContinue(state) { if (state.line == state.tokenize) { state.line = state.stack.tokenize; state.stack = state.stack.parent; } } function lineContinuable(column, tokenize) { return function(stream, state) { finishContinue(state); if (stream.match(/^\\$/)) { continueLine(state, column); return "lineContinuation"; } var style = tokenize(stream, state); if (stream.eol() && stream.current().match(/(?:^|[^\\])(?:\\\\)*\\$/)) { stream.backUp(1); } return style; }; } function commaContinuable(column, tokenize) { return function(stream, state) { finishContinue(state); var style = tokenize(stream, state); if (stream.eol() && stream.current().match(/,$/)) { continueLine(state, column); } return style; }; } function rubyInQuote(endQuote, tokenize) { // TODO: add multi line support return function(stream, state) { var ch = stream.peek(); if (ch == endQuote && state.rubyState.tokenize.length == 1) { // step out of ruby context as it seems to complete processing all the braces stream.next(); state.tokenize = tokenize; return "closeAttributeTag"; } else { return ruby(stream, state); } }; } function startRubySplat(tokenize) { var rubyState; var runSplat = function(stream, state) { if (state.rubyState.tokenize.length == 1 && !state.rubyState.context.prev) { stream.backUp(1); if (stream.eatSpace()) { state.rubyState = rubyState; state.tokenize = tokenize; return tokenize(stream, state); } stream.next(); } return ruby(stream, state); }; return function(stream, state) { rubyState = state.rubyState; state.rubyState = CodeMirror.startState(rubyMode); state.tokenize = runSplat; return ruby(stream, state); }; } function ruby(stream, state) { return rubyMode.token(stream, state.rubyState); } function htmlLine(stream, state) { if (stream.match(/^\\$/)) { return "lineContinuation"; } return html(stream, state); } function html(stream, state) { if (stream.match(/^#\{/)) { state.tokenize = rubyInQuote("}", state.tokenize); return null; } return maybeBackup(stream, state, /[^\\]#\{/, 1, htmlMode.token(stream, state.htmlState)); } function startHtmlLine(lastTokenize) { return function(stream, state) { var style = htmlLine(stream, state); if (stream.eol()) state.tokenize = lastTokenize; return style; }; } function startHtmlMode(stream, state, offset) { state.stack = { parent: state.stack, style: "html", indented: stream.column() + offset, // pipe + space tokenize: state.line }; state.line = state.tokenize = html; return null; } function comment(stream, state) { stream.skipToEnd(); return state.stack.style; } function commentMode(stream, state) { state.stack = { parent: state.stack, style: "comment", indented: state.indented + 1, tokenize: state.line }; state.line = comment; return comment(stream, state); } function attributeWrapper(stream, state) { if (stream.eat(state.stack.endQuote)) { state.line = state.stack.line; state.tokenize = state.stack.tokenize; state.stack = state.stack.parent; return null; } if (stream.match(wrappedAttributeNameRegexp)) { state.tokenize = attributeWrapperAssign; return "slimAttribute"; } stream.next(); return null; } function attributeWrapperAssign(stream, state) { if (stream.match(/^==?/)) { state.tokenize = attributeWrapperValue; return null; } return attributeWrapper(stream, state); } function attributeWrapperValue(stream, state) { var ch = stream.peek(); if (ch == '"' || ch == "\'") { state.tokenize = readQuoted(ch, "string", true, false, attributeWrapper); stream.next(); return state.tokenize(stream, state); } if (ch == '[') { return startRubySplat(attributeWrapper)(stream, state); } if (stream.match(/^(true|false|nil)\b/)) { state.tokenize = attributeWrapper; return "keyword"; } return startRubySplat(attributeWrapper)(stream, state); } function startAttributeWrapperMode(state, endQuote, tokenize) { state.stack = { parent: state.stack, style: "wrapper", indented: state.indented + 1, tokenize: tokenize, line: state.line, endQuote: endQuote }; state.line = state.tokenize = attributeWrapper; return null; } function sub(stream, state) { if (stream.match(/^#\{/)) { state.tokenize = rubyInQuote("}", state.tokenize); return null; } var subStream = new CodeMirror.StringStream(stream.string.slice(state.stack.indented), stream.tabSize); subStream.pos = stream.pos - state.stack.indented; subStream.start = stream.start - state.stack.indented; subStream.lastColumnPos = stream.lastColumnPos - state.stack.indented; subStream.lastColumnValue = stream.lastColumnValue - state.stack.indented; var style = state.subMode.token(subStream, state.subState); stream.pos = subStream.pos + state.stack.indented; return style; } function firstSub(stream, state) { state.stack.indented = stream.column(); state.line = state.tokenize = sub; return state.tokenize(stream, state); } function createMode(mode) { var query = embedded[mode]; var spec = CodeMirror.mimeModes[query]; if (spec) { return CodeMirror.getMode(config, spec); } var factory = CodeMirror.modes[query]; if (factory) { return factory(config, {name: query}); } return CodeMirror.getMode(config, "null"); } function getMode(mode) { if (!modes.hasOwnProperty(mode)) { return modes[mode] = createMode(mode); } return modes[mode]; } function startSubMode(mode, state) { var subMode = getMode(mode); var subState = CodeMirror.startState(subMode); state.subMode = subMode; state.subState = subState; state.stack = { parent: state.stack, style: "sub", indented: state.indented + 1, tokenize: state.line }; state.line = state.tokenize = firstSub; return "slimSubmode"; } function doctypeLine(stream, _state) { stream.skipToEnd(); return "slimDoctype"; } function startLine(stream, state) { var ch = stream.peek(); if (ch == '<') { return (state.tokenize = startHtmlLine(state.tokenize))(stream, state); } if (stream.match(/^[|']/)) { return startHtmlMode(stream, state, 1); } if (stream.match(/^\/(!|\[\w+])?/)) { return commentMode(stream, state); } if (stream.match(/^(-|==?[<>]?)/)) { state.tokenize = lineContinuable(stream.column(), commaContinuable(stream.column(), ruby)); return "slimSwitch"; } if (stream.match(/^doctype\b/)) { state.tokenize = doctypeLine; return "keyword"; } var m = stream.match(embeddedRegexp); if (m) { return startSubMode(m[1], state); } return slimTag(stream, state); } function slim(stream, state) { if (state.startOfLine) { return startLine(stream, state); } return slimTag(stream, state); } function slimTag(stream, state) { if (stream.eat('*')) { state.tokenize = startRubySplat(slimTagExtras); return null; } if (stream.match(nameRegexp)) { state.tokenize = slimTagExtras; return "slimTag"; } return slimClass(stream, state); } function slimTagExtras(stream, state) { if (stream.match(/^(<>?|> state.indented && state.last != "slimSubmode") { state.line = state.tokenize = state.stack.tokenize; state.stack = state.stack.parent; state.subMode = null; state.subState = null; } } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); state.startOfLine = false; if (style) state.last = style; return styleMap.hasOwnProperty(style) ? styleMap[style] : style; }, blankLine: function(state) { if (state.subMode && state.subMode.blankLine) { return state.subMode.blankLine(state.subState); } }, innerMode: function(state) { if (state.subMode) return {state: state.subState, mode: state.subMode}; return {state: state, mode: mode}; } //indent: function(state) { // return state.indented; //} }; return mode; }, "htmlmixed", "ruby"); CodeMirror.defineMIME("text/x-slim", "slim"); CodeMirror.defineMIME("application/x-slim", "slim"); }); application/library/codemirror/mode/slim/test.js000064400000006072146731177160016107 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Slim Highlighting for CodeMirror copyright (c) HicknHack Software Gmbh (function() { var mode = CodeMirror.getMode({tabSize: 4, indentUnit: 2}, "slim"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } // Requires at least one media query MT("elementName", "[tag h1] Hey There"); MT("oneElementPerLine", "[tag h1] Hey There .h2"); MT("idShortcut", "[attribute&def #test] Hey There"); MT("tagWithIdShortcuts", "[tag h1][attribute&def #test] Hey There"); MT("classShortcut", "[attribute&qualifier .hello] Hey There"); MT("tagWithIdAndClassShortcuts", "[tag h1][attribute&def #test][attribute&qualifier .hello] Hey There"); MT("docType", "[keyword doctype] xml"); MT("comment", "[comment / Hello WORLD]"); MT("notComment", "[tag h1] This is not a / comment "); MT("attributes", "[tag a]([attribute title]=[string \"test\"]) [attribute href]=[string \"link\"]}"); MT("multiLineAttributes", "[tag a]([attribute title]=[string \"test\"]", " ) [attribute href]=[string \"link\"]}"); MT("htmlCode", "[tag&bracket <][tag h1][tag&bracket >]Title[tag&bracket ]"); MT("rubyBlock", "[operator&special =][variable-2 @item]"); MT("selectorRubyBlock", "[tag a][attribute&qualifier .test][operator&special =] [variable-2 @item]"); MT("nestedRubyBlock", "[tag a]", " [operator&special =][variable puts] [string \"test\"]"); MT("multilinePlaintext", "[tag p]", " | Hello,", " World"); MT("multilineRuby", "[tag p]", " [comment /# this is a comment]", " [comment and this is a comment too]", " | Date/Time", " [operator&special -] [variable now] [operator =] [tag DateTime][operator .][property now]", " [tag strong][operator&special =] [variable now]", " [operator&special -] [keyword if] [variable now] [operator >] [tag DateTime][operator .][property parse]([string \"December 31, 2006\"])", " [operator&special =][string \"Happy\"]", " [operator&special =][string \"Belated\"]", " [operator&special =][string \"Birthday\"]"); MT("multilineComment", "[comment /]", " [comment Multiline]", " [comment Comment]"); MT("hamlAfterRubyTag", "[attribute&qualifier .block]", " [tag strong][operator&special =] [variable now]", " [attribute&qualifier .test]", " [operator&special =][variable now]", " [attribute&qualifier .right]"); MT("stretchedRuby", "[operator&special =] [variable puts] [string \"Hello\"],", " [string \"World\"]"); MT("interpolationInHashAttribute", "[tag div]{[attribute id] = [string \"]#{[variable test]}[string _]#{[variable ting]}[string \"]} test"); MT("interpolationInHTMLAttribute", "[tag div]([attribute title]=[string \"]#{[variable test]}[string _]#{[variable ting]()}[string \"]) Test"); })(); application/library/codemirror/mode/slim/index.html000064400000005550146731177160016567 0ustar00 CodeMirror: SLIM mode

SLIM mode

MIME types defined: application/x-slim.

Parsing/Highlighting Tests: normal, verbose.

application/library/codemirror/mode/mathematica/mathematica.js000064400000012754146731177160020722 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Mathematica mode copyright (c) 2015 by Calin Barbat // Based on code by Patrick Scheibe (halirutan) // See: https://github.com/halirutan/Mathematica-Source-Highlighting/tree/master/src/lang-mma.js (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('mathematica', function(_config, _parserConfig) { // used pattern building blocks var Identifier = '[a-zA-Z\\$][a-zA-Z0-9\\$]*'; var pBase = "(?:\\d+)"; var pFloat = "(?:\\.\\d+|\\d+\\.\\d*|\\d+)"; var pFloatBase = "(?:\\.\\w+|\\w+\\.\\w*|\\w+)"; var pPrecision = "(?:`(?:`?"+pFloat+")?)"; // regular expressions var reBaseForm = new RegExp('(?:'+pBase+'(?:\\^\\^'+pFloatBase+pPrecision+'?(?:\\*\\^[+-]?\\d+)?))'); var reFloatForm = new RegExp('(?:' + pFloat + pPrecision + '?(?:\\*\\^[+-]?\\d+)?)'); var reIdInContext = new RegExp('(?:`?)(?:' + Identifier + ')(?:`(?:' + Identifier + '))*(?:`?)'); function tokenBase(stream, state) { var ch; // get next character ch = stream.next(); // string if (ch === '"') { state.tokenize = tokenString; return state.tokenize(stream, state); } // comment if (ch === '(') { if (stream.eat('*')) { state.commentLevel++; state.tokenize = tokenComment; return state.tokenize(stream, state); } } // go back one character stream.backUp(1); // look for numbers // Numbers in a baseform if (stream.match(reBaseForm, true, false)) { return 'number'; } // Mathematica numbers. Floats (1.2, .2, 1.) can have optionally a precision (`float) or an accuracy definition // (``float). Note: while 1.2` is possible 1.2`` is not. At the end an exponent (float*^+12) can follow. if (stream.match(reFloatForm, true, false)) { return 'number'; } /* In[23] and Out[34] */ if (stream.match(/(?:In|Out)\[[0-9]*\]/, true, false)) { return 'atom'; } // usage if (stream.match(/([a-zA-Z\$]+(?:`?[a-zA-Z0-9\$])*::usage)/, true, false)) { return 'meta'; } // message if (stream.match(/([a-zA-Z\$]+(?:`?[a-zA-Z0-9\$])*::[a-zA-Z\$][a-zA-Z0-9\$]*):?/, true, false)) { return 'string-2'; } // this makes a look-ahead match for something like variable:{_Integer} // the match is then forwarded to the mma-patterns tokenizer. if (stream.match(/([a-zA-Z\$][a-zA-Z0-9\$]*\s*:)(?:(?:[a-zA-Z\$][a-zA-Z0-9\$]*)|(?:[^:=>~@\^\&\*\)\[\]'\?,\|])).*/, true, false)) { return 'variable-2'; } // catch variables which are used together with Blank (_), BlankSequence (__) or BlankNullSequence (___) // Cannot start with a number, but can have numbers at any other position. Examples // blub__Integer, a1_, b34_Integer32 if (stream.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+[a-zA-Z\$][a-zA-Z0-9\$]*/, true, false)) { return 'variable-2'; } if (stream.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+/, true, false)) { return 'variable-2'; } if (stream.match(/_+[a-zA-Z\$][a-zA-Z0-9\$]*/, true, false)) { return 'variable-2'; } // Named characters in Mathematica, like \[Gamma]. if (stream.match(/\\\[[a-zA-Z\$][a-zA-Z0-9\$]*\]/, true, false)) { return 'variable-3'; } // Match all braces separately if (stream.match(/(?:\[|\]|{|}|\(|\))/, true, false)) { return 'bracket'; } // Catch Slots (#, ##, #3, ##9 and the V10 named slots #name). I have never seen someone using more than one digit after #, so we match // only one. if (stream.match(/(?:#[a-zA-Z\$][a-zA-Z0-9\$]*|#+[0-9]?)/, true, false)) { return 'variable-2'; } // Literals like variables, keywords, functions if (stream.match(reIdInContext, true, false)) { return 'keyword'; } // operators. Note that operators like @@ or /; are matched separately for each symbol. if (stream.match(/(?:\\|\+|\-|\*|\/|,|;|\.|:|@|~|=|>|<|&|\||_|`|'|\^|\?|!|%)/, true, false)) { return 'operator'; } // everything else is an error stream.next(); // advance the stream. return 'error'; } function tokenString(stream, state) { var next, end = false, escaped = false; while ((next = stream.next()) != null) { if (next === '"' && !escaped) { end = true; break; } escaped = !escaped && next === '\\'; } if (end && !escaped) { state.tokenize = tokenBase; } return 'string'; }; function tokenComment(stream, state) { var prev, next; while(state.commentLevel > 0 && (next = stream.next()) != null) { if (prev === '(' && next === '*') state.commentLevel++; if (prev === '*' && next === ')') state.commentLevel--; prev = next; } if (state.commentLevel <= 0) { state.tokenize = tokenBase; } return 'comment'; } return { startState: function() {return {tokenize: tokenBase, commentLevel: 0};}, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, blockCommentStart: "(*", blockCommentEnd: "*)" }; }); CodeMirror.defineMIME('text/x-mathematica', { name: 'mathematica' }); }); application/library/codemirror/mode/mathematica/index.html000064400000004316146731177160020077 0ustar00 CodeMirror: Mathematica mode

Mathematica mode

MIME types defined: text/x-mathematica (Mathematica).

application/library/codemirror/mode/stylus/stylus.js000064400000122210146731177160017063 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Stylus mode created by Dmitry Kiselyov http://git.io/AaRB (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("stylus", function(config) { var indentUnit = config.indentUnit, tagKeywords = keySet(tagKeywords_), tagVariablesRegexp = /^(a|b|i|s|col|em)$/i, propertyKeywords = keySet(propertyKeywords_), nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_), valueKeywords = keySet(valueKeywords_), colorKeywords = keySet(colorKeywords_), documentTypes = keySet(documentTypes_), documentTypesRegexp = wordRegexp(documentTypes_), mediaFeatures = keySet(mediaFeatures_), mediaTypes = keySet(mediaTypes_), fontProperties = keySet(fontProperties_), operatorsRegexp = /^\s*([.]{2,3}|&&|\|\||\*\*|[?!=:]?=|[-+*\/%<>]=?|\?:|\~)/, wordOperatorKeywordsRegexp = wordRegexp(wordOperatorKeywords_), blockKeywords = keySet(blockKeywords_), vendorPrefixesRegexp = new RegExp(/^\-(moz|ms|o|webkit)-/i), commonAtoms = keySet(commonAtoms_), firstWordMatch = "", states = {}, ch, style, type, override; /** * Tokenizers */ function tokenBase(stream, state) { firstWordMatch = stream.string.match(/(^[\w-]+\s*=\s*$)|(^\s*[\w-]+\s*=\s*[\w-])|(^\s*(\.|#|@|\$|\&|\[|\d|\+|::?|\{|\>|~|\/)?\s*[\w-]*([a-z0-9-]|\*|\/\*)(\(|,)?)/); state.context.line.firstWord = firstWordMatch ? firstWordMatch[0].replace(/^\s*/, "") : ""; state.context.line.indent = stream.indentation(); ch = stream.peek(); // Line comment if (stream.match("//")) { stream.skipToEnd(); return ["comment", "comment"]; } // Block comment if (stream.match("/*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } // String if (ch == "\"" || ch == "'") { stream.next(); state.tokenize = tokenString(ch); return state.tokenize(stream, state); } // Def if (ch == "@") { stream.next(); stream.eatWhile(/[\w\\-]/); return ["def", stream.current()]; } // ID selector or Hex color if (ch == "#") { stream.next(); // Hex color if (stream.match(/^[0-9a-f]{6}|[0-9a-f]{3}/i)) { return ["atom", "atom"]; } // ID selector if (stream.match(/^[a-z][\w-]*/i)) { return ["builtin", "hash"]; } } // Vendor prefixes if (stream.match(vendorPrefixesRegexp)) { return ["meta", "vendor-prefixes"]; } // Numbers if (stream.match(/^-?[0-9]?\.?[0-9]/)) { stream.eatWhile(/[a-z%]/i); return ["number", "unit"]; } // !important|optional if (ch == "!") { stream.next(); return [stream.match(/^(important|optional)/i) ? "keyword": "operator", "important"]; } // Class if (ch == "." && stream.match(/^\.[a-z][\w-]*/i)) { return ["qualifier", "qualifier"]; } // url url-prefix domain regexp if (stream.match(documentTypesRegexp)) { if (stream.peek() == "(") state.tokenize = tokenParenthesized; return ["property", "word"]; } // Mixins / Functions if (stream.match(/^[a-z][\w-]*\(/i)) { stream.backUp(1); return ["keyword", "mixin"]; } // Block mixins if (stream.match(/^(\+|-)[a-z][\w-]*\(/i)) { stream.backUp(1); return ["keyword", "block-mixin"]; } // Parent Reference BEM naming if (stream.string.match(/^\s*&/) && stream.match(/^[-_]+[a-z][\w-]*/)) { return ["qualifier", "qualifier"]; } // / Root Reference & Parent Reference if (stream.match(/^(\/|&)(-|_|:|\.|#|[a-z])/)) { stream.backUp(1); return ["variable-3", "reference"]; } if (stream.match(/^&{1}\s*$/)) { return ["variable-3", "reference"]; } // Word operator if (stream.match(wordOperatorKeywordsRegexp)) { return ["operator", "operator"]; } // Word if (stream.match(/^\$?[-_]*[a-z0-9]+[\w-]*/i)) { // Variable if (stream.match(/^(\.|\[)[\w-\'\"\]]+/i, false)) { if (!wordIsTag(stream.current())) { stream.match(/\./); return ["variable-2", "variable-name"]; } } return ["variable-2", "word"]; } // Operators if (stream.match(operatorsRegexp)) { return ["operator", stream.current()]; } // Delimiters if (/[:;,{}\[\]\(\)]/.test(ch)) { stream.next(); return [null, ch]; } // Non-detected items stream.next(); return [null, null]; } /** * Token comment */ function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return ["comment", "comment"]; } /** * Token string */ function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { if (quote == ")") stream.backUp(1); break; } escaped = !escaped && ch == "\\"; } if (ch == quote || !escaped && quote != ")") state.tokenize = null; return ["string", "string"]; }; } /** * Token parenthesized */ function tokenParenthesized(stream, state) { stream.next(); // Must be "(" if (!stream.match(/\s*[\"\')]/, false)) state.tokenize = tokenString(")"); else state.tokenize = null; return [null, "("]; } /** * Context management */ function Context(type, indent, prev, line) { this.type = type; this.indent = indent; this.prev = prev; this.line = line || {firstWord: "", indent: 0}; } function pushContext(state, stream, type, indent) { indent = indent >= 0 ? indent : indentUnit; state.context = new Context(type, stream.indentation() + indent, state.context); return type; } function popContext(state, currentIndent) { var contextIndent = state.context.indent - indentUnit; currentIndent = currentIndent || false; state.context = state.context.prev; if (currentIndent) state.context.indent = contextIndent; return state.context.type; } function pass(type, stream, state) { return states[state.context.type](type, stream, state); } function popAndPass(type, stream, state, n) { for (var i = n || 1; i > 0; i--) state.context = state.context.prev; return pass(type, stream, state); } /** * Parser */ function wordIsTag(word) { return word.toLowerCase() in tagKeywords; } function wordIsProperty(word) { word = word.toLowerCase(); return word in propertyKeywords || word in fontProperties; } function wordIsBlock(word) { return word.toLowerCase() in blockKeywords; } function wordIsVendorPrefix(word) { return word.toLowerCase().match(vendorPrefixesRegexp); } function wordAsValue(word) { var wordLC = word.toLowerCase(); var override = "variable-2"; if (wordIsTag(word)) override = "tag"; else if (wordIsBlock(word)) override = "block-keyword"; else if (wordIsProperty(word)) override = "property"; else if (wordLC in valueKeywords || wordLC in commonAtoms) override = "atom"; else if (wordLC == "return" || wordLC in colorKeywords) override = "keyword"; // Font family else if (word.match(/^[A-Z]/)) override = "string"; return override; } function typeIsBlock(type, stream) { return ((endOfLine(stream) && (type == "{" || type == "]" || type == "hash" || type == "qualifier")) || type == "block-mixin"); } function typeIsInterpolation(type, stream) { return type == "{" && stream.match(/^\s*\$?[\w-]+/i, false); } function typeIsPseudo(type, stream) { return type == ":" && stream.match(/^[a-z-]+/, false); } function startOfLine(stream) { return stream.sol() || stream.string.match(new RegExp("^\\s*" + escapeRegExp(stream.current()))); } function endOfLine(stream) { return stream.eol() || stream.match(/^\s*$/, false); } function firstWordOfLine(line) { var re = /^\s*[-_]*[a-z0-9]+[\w-]*/i; var result = typeof line == "string" ? line.match(re) : line.string.match(re); return result ? result[0].replace(/^\s*/, "") : ""; } /** * Block */ states.block = function(type, stream, state) { if ((type == "comment" && startOfLine(stream)) || (type == "," && endOfLine(stream)) || type == "mixin") { return pushContext(state, stream, "block", 0); } if (typeIsInterpolation(type, stream)) { return pushContext(state, stream, "interpolation"); } if (endOfLine(stream) && type == "]") { if (!/^\s*(\.|#|:|\[|\*|&)/.test(stream.string) && !wordIsTag(firstWordOfLine(stream))) { return pushContext(state, stream, "block", 0); } } if (typeIsBlock(type, stream, state)) { return pushContext(state, stream, "block"); } if (type == "}" && endOfLine(stream)) { return pushContext(state, stream, "block", 0); } if (type == "variable-name") { if (stream.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/) || wordIsBlock(firstWordOfLine(stream))) { return pushContext(state, stream, "variableName"); } else { return pushContext(state, stream, "variableName", 0); } } if (type == "=") { if (!endOfLine(stream) && !wordIsBlock(firstWordOfLine(stream))) { return pushContext(state, stream, "block", 0); } return pushContext(state, stream, "block"); } if (type == "*") { if (endOfLine(stream) || stream.match(/\s*(,|\.|#|\[|:|{)/,false)) { override = "tag"; return pushContext(state, stream, "block"); } } if (typeIsPseudo(type, stream)) { return pushContext(state, stream, "pseudo"); } if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) { return pushContext(state, stream, endOfLine(stream) ? "block" : "atBlock"); } if (/@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) { return pushContext(state, stream, "keyframes"); } if (/@extends?/.test(type)) { return pushContext(state, stream, "extend", 0); } if (type && type.charAt(0) == "@") { // Property Lookup if (stream.indentation() > 0 && wordIsProperty(stream.current().slice(1))) { override = "variable-2"; return "block"; } if (/(@import|@require|@charset)/.test(type)) { return pushContext(state, stream, "block", 0); } return pushContext(state, stream, "block"); } if (type == "reference" && endOfLine(stream)) { return pushContext(state, stream, "block"); } if (type == "(") { return pushContext(state, stream, "parens"); } if (type == "vendor-prefixes") { return pushContext(state, stream, "vendorPrefixes"); } if (type == "word") { var word = stream.current(); override = wordAsValue(word); if (override == "property") { if (startOfLine(stream)) { return pushContext(state, stream, "block", 0); } else { override = "atom"; return "block"; } } if (override == "tag") { // tag is a css value if (/embed|menu|pre|progress|sub|table/.test(word)) { if (wordIsProperty(firstWordOfLine(stream))) { override = "atom"; return "block"; } } // tag is an attribute if (stream.string.match(new RegExp("\\[\\s*" + word + "|" + word +"\\s*\\]"))) { override = "atom"; return "block"; } // tag is a variable if (tagVariablesRegexp.test(word)) { if ((startOfLine(stream) && stream.string.match(/=/)) || (!startOfLine(stream) && !stream.string.match(/^(\s*\.|#|\&|\[|\/|>|\*)/) && !wordIsTag(firstWordOfLine(stream)))) { override = "variable-2"; if (wordIsBlock(firstWordOfLine(stream))) return "block"; return pushContext(state, stream, "block", 0); } } if (endOfLine(stream)) return pushContext(state, stream, "block"); } if (override == "block-keyword") { override = "keyword"; // Postfix conditionals if (stream.current(/(if|unless)/) && !startOfLine(stream)) { return "block"; } return pushContext(state, stream, "block"); } if (word == "return") return pushContext(state, stream, "block", 0); // Placeholder selector if (override == "variable-2" && stream.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/)) { return pushContext(state, stream, "block"); } } return state.context.type; }; /** * Parens */ states.parens = function(type, stream, state) { if (type == "(") return pushContext(state, stream, "parens"); if (type == ")") { if (state.context.prev.type == "parens") { return popContext(state); } if ((stream.string.match(/^[a-z][\w-]*\(/i) && endOfLine(stream)) || wordIsBlock(firstWordOfLine(stream)) || /(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(firstWordOfLine(stream)) || (!stream.string.match(/^-?[a-z][\w-\.\[\]\'\"]*\s*=/) && wordIsTag(firstWordOfLine(stream)))) { return pushContext(state, stream, "block"); } if (stream.string.match(/^[\$-]?[a-z][\w-\.\[\]\'\"]*\s*=/) || stream.string.match(/^\s*(\(|\)|[0-9])/) || stream.string.match(/^\s+[a-z][\w-]*\(/i) || stream.string.match(/^\s+[\$-]?[a-z]/i)) { return pushContext(state, stream, "block", 0); } if (endOfLine(stream)) return pushContext(state, stream, "block"); else return pushContext(state, stream, "block", 0); } if (type && type.charAt(0) == "@" && wordIsProperty(stream.current().slice(1))) { override = "variable-2"; } if (type == "word") { var word = stream.current(); override = wordAsValue(word); if (override == "tag" && tagVariablesRegexp.test(word)) { override = "variable-2"; } if (override == "property" || word == "to") override = "atom"; } if (type == "variable-name") { return pushContext(state, stream, "variableName"); } if (typeIsPseudo(type, stream)) { return pushContext(state, stream, "pseudo"); } return state.context.type; }; /** * Vendor prefixes */ states.vendorPrefixes = function(type, stream, state) { if (type == "word") { override = "property"; return pushContext(state, stream, "block", 0); } return popContext(state); }; /** * Pseudo */ states.pseudo = function(type, stream, state) { if (!wordIsProperty(firstWordOfLine(stream.string))) { stream.match(/^[a-z-]+/); override = "variable-3"; if (endOfLine(stream)) return pushContext(state, stream, "block"); return popContext(state); } return popAndPass(type, stream, state); }; /** * atBlock */ states.atBlock = function(type, stream, state) { if (type == "(") return pushContext(state, stream, "atBlock_parens"); if (typeIsBlock(type, stream, state)) { return pushContext(state, stream, "block"); } if (typeIsInterpolation(type, stream)) { return pushContext(state, stream, "interpolation"); } if (type == "word") { var word = stream.current().toLowerCase(); if (/^(only|not|and|or)$/.test(word)) override = "keyword"; else if (documentTypes.hasOwnProperty(word)) override = "tag"; else if (mediaTypes.hasOwnProperty(word)) override = "attribute"; else if (mediaFeatures.hasOwnProperty(word)) override = "property"; else if (nonStandardPropertyKeywords.hasOwnProperty(word)) override = "string-2"; else override = wordAsValue(stream.current()); if (override == "tag" && endOfLine(stream)) { return pushContext(state, stream, "block"); } } if (type == "operator" && /^(not|and|or)$/.test(stream.current())) { override = "keyword"; } return state.context.type; }; states.atBlock_parens = function(type, stream, state) { if (type == "{" || type == "}") return state.context.type; if (type == ")") { if (endOfLine(stream)) return pushContext(state, stream, "block"); else return pushContext(state, stream, "atBlock"); } if (type == "word") { var word = stream.current().toLowerCase(); override = wordAsValue(word); if (/^(max|min)/.test(word)) override = "property"; if (override == "tag") { tagVariablesRegexp.test(word) ? override = "variable-2" : override = "atom"; } return state.context.type; } return states.atBlock(type, stream, state); }; /** * Keyframes */ states.keyframes = function(type, stream, state) { if (stream.indentation() == "0" && ((type == "}" && startOfLine(stream)) || type == "]" || type == "hash" || type == "qualifier" || wordIsTag(stream.current()))) { return popAndPass(type, stream, state); } if (type == "{") return pushContext(state, stream, "keyframes"); if (type == "}") { if (startOfLine(stream)) return popContext(state, true); else return pushContext(state, stream, "keyframes"); } if (type == "unit" && /^[0-9]+\%$/.test(stream.current())) { return pushContext(state, stream, "keyframes"); } if (type == "word") { override = wordAsValue(stream.current()); if (override == "block-keyword") { override = "keyword"; return pushContext(state, stream, "keyframes"); } } if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) { return pushContext(state, stream, endOfLine(stream) ? "block" : "atBlock"); } if (type == "mixin") { return pushContext(state, stream, "block", 0); } return state.context.type; }; /** * Interpolation */ states.interpolation = function(type, stream, state) { if (type == "{") popContext(state) && pushContext(state, stream, "block"); if (type == "}") { if (stream.string.match(/^\s*(\.|#|:|\[|\*|&|>|~|\+|\/)/i) || (stream.string.match(/^\s*[a-z]/i) && wordIsTag(firstWordOfLine(stream)))) { return pushContext(state, stream, "block"); } if (!stream.string.match(/^(\{|\s*\&)/) || stream.match(/\s*[\w-]/,false)) { return pushContext(state, stream, "block", 0); } return pushContext(state, stream, "block"); } if (type == "variable-name") { return pushContext(state, stream, "variableName", 0); } if (type == "word") { override = wordAsValue(stream.current()); if (override == "tag") override = "atom"; } return state.context.type; }; /** * Extend/s */ states.extend = function(type, stream, state) { if (type == "[" || type == "=") return "extend"; if (type == "]") return popContext(state); if (type == "word") { override = wordAsValue(stream.current()); return "extend"; } return popContext(state); }; /** * Variable name */ states.variableName = function(type, stream, state) { if (type == "string" || type == "[" || type == "]" || stream.current().match(/^(\.|\$)/)) { if (stream.current().match(/^\.[\w-]+/i)) override = "variable-2"; return "variableName"; } return popAndPass(type, stream, state); }; return { startState: function(base) { return { tokenize: null, state: "block", context: new Context("block", base || 0, null) }; }, token: function(stream, state) { if (!state.tokenize && stream.eatSpace()) return null; style = (state.tokenize || tokenBase)(stream, state); if (style && typeof style == "object") { type = style[1]; style = style[0]; } override = style; state.state = states[state.state](type, stream, state); return override; }, indent: function(state, textAfter, line) { var cx = state.context, ch = textAfter && textAfter.charAt(0), indent = cx.indent, lineFirstWord = firstWordOfLine(textAfter), lineIndent = line.length - line.replace(/^\s*/, "").length, prevLineFirstWord = state.context.prev ? state.context.prev.line.firstWord : "", prevLineIndent = state.context.prev ? state.context.prev.line.indent : lineIndent; if (cx.prev && (ch == "}" && (cx.type == "block" || cx.type == "atBlock" || cx.type == "keyframes") || ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || ch == "{" && (cx.type == "at"))) { indent = cx.indent - indentUnit; cx = cx.prev; } else if (!(/(\})/.test(ch))) { if (/@|\$|\d/.test(ch) || /^\{/.test(textAfter) || /^\s*\/(\/|\*)/.test(textAfter) || /^\s*\/\*/.test(prevLineFirstWord) || /^\s*[\w-\.\[\]\'\"]+\s*(\?|:|\+)?=/i.test(textAfter) || /^(\+|-)?[a-z][\w-]*\(/i.test(textAfter) || /^return/.test(textAfter) || wordIsBlock(lineFirstWord)) { indent = lineIndent; } else if (/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(ch) || wordIsTag(lineFirstWord)) { if (/\,\s*$/.test(prevLineFirstWord)) { indent = prevLineIndent; } else if (/^\s+/.test(line) && (/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(prevLineFirstWord) || wordIsTag(prevLineFirstWord))) { indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit; } else { indent = lineIndent; } } else if (!/,\s*$/.test(line) && (wordIsVendorPrefix(lineFirstWord) || wordIsProperty(lineFirstWord))) { if (wordIsBlock(prevLineFirstWord)) { indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit; } else if (/^\{/.test(prevLineFirstWord)) { indent = lineIndent <= prevLineIndent ? lineIndent : prevLineIndent + indentUnit; } else if (wordIsVendorPrefix(prevLineFirstWord) || wordIsProperty(prevLineFirstWord)) { indent = lineIndent >= prevLineIndent ? prevLineIndent : lineIndent; } else if (/^(\.|#|:|\[|\*|&|@|\+|\-|>|~|\/)/.test(prevLineFirstWord) || /=\s*$/.test(prevLineFirstWord) || wordIsTag(prevLineFirstWord) || /^\$[\w-\.\[\]\'\"]/.test(prevLineFirstWord)) { indent = prevLineIndent + indentUnit; } else { indent = lineIndent; } } } return indent; }, electricChars: "}", lineComment: "//", fold: "indent" }; }); // developer.mozilla.org/en-US/docs/Web/HTML/Element var tagKeywords_ = ["a","abbr","address","area","article","aside","audio", "b", "base","bdi", "bdo","bgsound","blockquote","body","br","button","canvas","caption","cite", "code","col","colgroup","data","datalist","dd","del","details","dfn","div", "dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1", "h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe", "img","input","ins","kbd","keygen","label","legend","li","link","main","map", "mark","marquee","menu","menuitem","meta","meter","nav","nobr","noframes", "noscript","object","ol","optgroup","option","output","p","param","pre", "progress","q","rp","rt","ruby","s","samp","script","section","select", "small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track", "u","ul","var","video"]; // github.com/codemirror/CodeMirror/blob/master/mode/css/css.js var documentTypes_ = ["domain", "regexp", "url", "url-prefix"]; var mediaTypes_ = ["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"]; var mediaFeatures_ = ["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid"]; var propertyKeywords_ = ["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-position","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode","font-smoothing","osx-font-smoothing"]; var nonStandardPropertyKeywords_ = ["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"]; var fontProperties_ = ["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]; var colorKeywords_ = ["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"]; var valueKeywords_ = ["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","contain","content","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scale","scale3d","scaleX","scaleY","scaleZ","scroll","scrollbar","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","x-large","x-small","xor","xx-large","xx-small","bicubic","optimizespeed","grayscale","row","row-reverse","wrap","wrap-reverse","column-reverse","flex-start","flex-end","space-between","space-around"]; var wordOperatorKeywords_ = ["in","and","or","not","is not","is a","is","isnt","defined","if unless"], blockKeywords_ = ["for","if","else","unless", "from", "to"], commonAtoms_ = ["null","true","false","href","title","type","not-allowed","readonly","disabled"], commonDef_ = ["@font-face", "@keyframes", "@media", "@viewport", "@page", "@host", "@supports", "@block", "@css"]; var hintWords = tagKeywords_.concat(documentTypes_,mediaTypes_,mediaFeatures_, propertyKeywords_,nonStandardPropertyKeywords_, colorKeywords_,valueKeywords_,fontProperties_, wordOperatorKeywords_,blockKeywords_, commonAtoms_,commonDef_); function wordRegexp(words) { words = words.sort(function(a,b){return b > a;}); return new RegExp("^((" + words.join(")|(") + "))\\b"); } function keySet(array) { var keys = {}; for (var i = 0; i < array.length; ++i) keys[array[i]] = true; return keys; } function escapeRegExp(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); } CodeMirror.registerHelper("hintWords", "stylus", hintWords); CodeMirror.defineMIME("text/x-styl", "stylus"); }); application/library/codemirror/mode/stylus/index.html000064400000004650146731177160017166 0ustar00 CodeMirror: Stylus mode

Stylus mode

MIME types defined: text/x-styl.

Created by Dmitry Kiselyov

application/library/codemirror/mode/python/python.js000064400000030225146731177160017023 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var wordOperators = wordRegexp(["and", "or", "not", "is"]); var commonKeywords = ["as", "assert", "break", "class", "continue", "def", "del", "elif", "else", "except", "finally", "for", "from", "global", "if", "import", "lambda", "pass", "raise", "return", "try", "while", "with", "yield", "in"]; var commonBuiltins = ["abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr", "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", "enumerate", "eval", "filter", "float", "format", "frozenset", "getattr", "globals", "hasattr", "hash", "help", "hex", "id", "input", "int", "isinstance", "issubclass", "iter", "len", "list", "locals", "map", "max", "memoryview", "min", "next", "object", "oct", "open", "ord", "pow", "property", "range", "repr", "reversed", "round", "set", "setattr", "slice", "sorted", "staticmethod", "str", "sum", "super", "tuple", "type", "vars", "zip", "__import__", "NotImplemented", "Ellipsis", "__debug__"]; CodeMirror.registerHelper("hintWords", "python", commonKeywords.concat(commonBuiltins)); function top(state) { return state.scopes[state.scopes.length - 1]; } CodeMirror.defineMode("python", function(conf, parserConf) { var ERRORCLASS = "error"; var singleDelimiters = parserConf.singleDelimiters || /^[\(\)\[\]\{\}@,:`=;\.]/; var doubleOperators = parserConf.doubleOperators || /^([!<>]==|<>|<<|>>|\/\/|\*\*)/; var doubleDelimiters = parserConf.doubleDelimiters || /^(\+=|\-=|\*=|%=|\/=|&=|\|=|\^=)/; var tripleDelimiters = parserConf.tripleDelimiters || /^(\/\/=|>>=|<<=|\*\*=)/; var hangingIndent = parserConf.hangingIndent || conf.indentUnit; var myKeywords = commonKeywords, myBuiltins = commonBuiltins; if (parserConf.extra_keywords != undefined) myKeywords = myKeywords.concat(parserConf.extra_keywords); if (parserConf.extra_builtins != undefined) myBuiltins = myBuiltins.concat(parserConf.extra_builtins); var py3 = !(parserConf.version && Number(parserConf.version) < 3) if (py3) { // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator var singleOperators = parserConf.singleOperators || /^[\+\-\*\/%&|\^~<>!@]/; var identifiers = parserConf.identifiers|| /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*/; myKeywords = myKeywords.concat(["nonlocal", "False", "True", "None", "async", "await"]); myBuiltins = myBuiltins.concat(["ascii", "bytes", "exec", "print"]); var stringPrefixes = new RegExp("^(([rbuf]|(br))?('{3}|\"{3}|['\"]))", "i"); } else { var singleOperators = parserConf.singleOperators || /^[\+\-\*\/%&|\^~<>!]/; var identifiers = parserConf.identifiers|| /^[_A-Za-z][_A-Za-z0-9]*/; myKeywords = myKeywords.concat(["exec", "print"]); myBuiltins = myBuiltins.concat(["apply", "basestring", "buffer", "cmp", "coerce", "execfile", "file", "intern", "long", "raw_input", "reduce", "reload", "unichr", "unicode", "xrange", "False", "True", "None"]); var stringPrefixes = new RegExp("^(([rub]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i"); } var keywords = wordRegexp(myKeywords); var builtins = wordRegexp(myBuiltins); // tokenizers function tokenBase(stream, state) { if (stream.sol()) state.indent = stream.indentation() // Handle scope changes if (stream.sol() && top(state).type == "py") { var scopeOffset = top(state).offset; if (stream.eatSpace()) { var lineOffset = stream.indentation(); if (lineOffset > scopeOffset) pushPyScope(state); else if (lineOffset < scopeOffset && dedent(stream, state)) state.errorToken = true; return null; } else { var style = tokenBaseInner(stream, state); if (scopeOffset > 0 && dedent(stream, state)) style += " " + ERRORCLASS; return style; } } return tokenBaseInner(stream, state); } function tokenBaseInner(stream, state) { if (stream.eatSpace()) return null; var ch = stream.peek(); // Handle Comments if (ch == "#") { stream.skipToEnd(); return "comment"; } // Handle Number Literals if (stream.match(/^[0-9\.]/, false)) { var floatLiteral = false; // Floats if (stream.match(/^\d*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } if (stream.match(/^\.\d+/)) { floatLiteral = true; } if (floatLiteral) { // Float literals may be "imaginary" stream.eat(/J/i); return "number"; } // Integers var intLiteral = false; // Hex if (stream.match(/^0x[0-9a-f]+/i)) intLiteral = true; // Binary if (stream.match(/^0b[01]+/i)) intLiteral = true; // Octal if (stream.match(/^0o[0-7]+/i)) intLiteral = true; // Decimal if (stream.match(/^[1-9]\d*(e[\+\-]?\d+)?/)) { // Decimal literals may be "imaginary" stream.eat(/J/i); // TODO - Can you have imaginary longs? intLiteral = true; } // Zero by itself with no other piece of number. if (stream.match(/^0(?![\dx])/i)) intLiteral = true; if (intLiteral) { // Integer literals may be "long" stream.eat(/L/i); return "number"; } } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } // Handle operators and Delimiters if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) return "punctuation"; if (stream.match(doubleOperators) || stream.match(singleOperators)) return "operator"; if (stream.match(singleDelimiters)) return "punctuation"; if (state.lastToken == "." && stream.match(identifiers)) return "property"; if (stream.match(keywords) || stream.match(wordOperators)) return "keyword"; if (stream.match(builtins)) return "builtin"; if (stream.match(/^(self|cls)\b/)) return "variable-2"; if (stream.match(identifiers)) { if (state.lastToken == "def" || state.lastToken == "class") return "def"; return "variable"; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenStringFactory(delimiter) { while ("rubf".indexOf(delimiter.charAt(0).toLowerCase()) >= 0) delimiter = delimiter.substr(1); var singleline = delimiter.length == 1; var OUTCLASS = "string"; function tokenString(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"\\]/); if (stream.eat("\\")) { stream.next(); if (singleline && stream.eol()) return OUTCLASS; } else if (stream.match(delimiter)) { state.tokenize = tokenBase; return OUTCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) return ERRORCLASS; else state.tokenize = tokenBase; } return OUTCLASS; } tokenString.isString = true; return tokenString; } function pushPyScope(state) { while (top(state).type != "py") state.scopes.pop() state.scopes.push({offset: top(state).offset + conf.indentUnit, type: "py", align: null}) } function pushBracketScope(stream, state, type) { var align = stream.match(/^([\s\[\{\(]|#.*)*$/, false) ? null : stream.column() + 1 state.scopes.push({offset: state.indent + hangingIndent, type: type, align: align}) } function dedent(stream, state) { var indented = stream.indentation(); while (state.scopes.length > 1 && top(state).offset > indented) { if (top(state).type != "py") return true; state.scopes.pop(); } return top(state).offset != indented; } function tokenLexer(stream, state) { if (stream.sol()) state.beginningOfLine = true; var style = state.tokenize(stream, state); var current = stream.current(); // Handle decorators if (state.beginningOfLine && current == "@") return stream.match(identifiers, false) ? "meta" : py3 ? "operator" : ERRORCLASS; if (/\S/.test(current)) state.beginningOfLine = false; if ((style == "variable" || style == "builtin") && state.lastToken == "meta") style = "meta"; // Handle scope changes. if (current == "pass" || current == "return") state.dedent += 1; if (current == "lambda") state.lambda = true; if (current == ":" && !state.lambda && top(state).type == "py") pushPyScope(state); var delimiter_index = current.length == 1 ? "[({".indexOf(current) : -1; if (delimiter_index != -1) pushBracketScope(stream, state, "])}".slice(delimiter_index, delimiter_index+1)); delimiter_index = "])}".indexOf(current); if (delimiter_index != -1) { if (top(state).type == current) state.indent = state.scopes.pop().offset - hangingIndent else return ERRORCLASS; } if (state.dedent > 0 && stream.eol() && top(state).type == "py") { if (state.scopes.length > 1) state.scopes.pop(); state.dedent -= 1; } return style; } var external = { startState: function(basecolumn) { return { tokenize: tokenBase, scopes: [{offset: basecolumn || 0, type: "py", align: null}], indent: basecolumn || 0, lastToken: null, lambda: false, dedent: 0 }; }, token: function(stream, state) { var addErr = state.errorToken; if (addErr) state.errorToken = false; var style = tokenLexer(stream, state); if (style && style != "comment") state.lastToken = (style == "keyword" || style == "punctuation") ? stream.current() : style; if (style == "punctuation") style = null; if (stream.eol() && state.lambda) state.lambda = false; return addErr ? style + " " + ERRORCLASS : style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase) return state.tokenize.isString ? CodeMirror.Pass : 0; var scope = top(state), closing = scope.type == textAfter.charAt(0) if (scope.align != null) return scope.align - (closing ? 1 : 0) else return scope.offset - (closing ? hangingIndent : 0) }, electricInput: /^\s*[\}\]\)]$/, closeBrackets: {triples: "'\""}, lineComment: "#", fold: "indent" }; return external; }); CodeMirror.defineMIME("text/x-python", "python"); var words = function(str) { return str.split(" "); }; CodeMirror.defineMIME("text/x-cython", { name: "python", extra_keywords: words("by cdef cimport cpdef ctypedef enum except"+ "extern gil include nogil property public"+ "readonly struct union DEF IF ELIF ELSE") }); }); application/library/codemirror/mode/python/test.js000064400000002223146731177160016456 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 4}, {name: "python", version: 3, singleLineStringErrors: false}); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } // Error, because "foobarhello" is neither a known type or property, but // property was expected (after "and"), and it should be in parentheses. MT("decoratorStartOfLine", "[meta @dec]", "[keyword def] [def function]():", " [keyword pass]"); MT("decoratorIndented", "[keyword class] [def Foo]:", " [meta @dec]", " [keyword def] [def function]():", " [keyword pass]"); MT("matmulWithSpace:", "[variable a] [operator @] [variable b]"); MT("matmulWithoutSpace:", "[variable a][operator @][variable b]"); MT("matmulSpaceBefore:", "[variable a] [operator @][variable b]"); MT("fValidStringPrefix", "[string f'this is a {formatted} string']"); MT("uValidStringPrefix", "[string u'this is an unicode string']"); })(); application/library/codemirror/mode/python/index.html000064400000013476146731177160017152 0ustar00 CodeMirror: Python mode

Python mode

Cython mode

Configuration Options for Python mode:

  • version - 2/3 - The version of Python to recognize. Default is 2.
  • singleLineStringErrors - true/false - If you have a single-line string that is not terminated at the end of the line, this will show subsequent lines as errors if true, otherwise it will consider the newline as the end of the string. Default is false.
  • hangingIndent - int - If you want to write long arguments to a function starting on a new line, how much that line should be indented. Defaults to one normal indentation unit.

Advanced Configuration Options:

Usefull for superset of python syntax like Enthought enaml, IPython magics and questionmark help

  • singleOperators - RegEx - Regular Expression for single operator matching, default :
    ^[\\+\\-\\*/%&|\\^~<>!]
    including
    @
    on Python 3
  • singleDelimiters - RegEx - Regular Expression for single delimiter matching, default :
    ^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]
  • doubleOperators - RegEx - Regular Expression for double operators matching, default :
    ^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))
  • doubleDelimiters - RegEx - Regular Expression for double delimiters matching, default :
    ^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))
  • tripleDelimiters - RegEx - Regular Expression for triple delimiters matching, default :
    ^((//=)|(>>=)|(<<=)|(\\*\\*=))
  • identifiers - RegEx - Regular Expression for identifier, default :
    ^[_A-Za-z][_A-Za-z0-9]*
    on Python 2 and
    ^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*
    on Python 3.
  • extra_keywords - list of string - List of extra words ton consider as keywords
  • extra_builtins - list of string - List of extra words ton consider as builtins

MIME types defined: text/x-python and text/x-cython.

application/library/codemirror/mode/sass/sass.js000064400000023513146731177160016105 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sass", function(config) { function tokenRegexp(words) { return new RegExp("^" + words.join("|")); } var keywords = ["true", "false", "null", "auto"]; var keywordsRegexp = new RegExp("^" + keywords.join("|")); var operators = ["\\(", "\\)", "=", ">", "<", "==", ">=", "<=", "\\+", "-", "\\!=", "/", "\\*", "%", "and", "or", "not", ";","\\{","\\}",":"]; var opRegexp = tokenRegexp(operators); var pseudoElementsRegexp = /^::?[a-zA-Z_][\w\-]*/; function urlTokens(stream, state) { var ch = stream.peek(); if (ch === ")") { stream.next(); state.tokenizer = tokenBase; return "operator"; } else if (ch === "(") { stream.next(); stream.eatSpace(); return "operator"; } else if (ch === "'" || ch === '"') { state.tokenizer = buildStringTokenizer(stream.next()); return "string"; } else { state.tokenizer = buildStringTokenizer(")", false); return "string"; } } function comment(indentation, multiLine) { return function(stream, state) { if (stream.sol() && stream.indentation() <= indentation) { state.tokenizer = tokenBase; return tokenBase(stream, state); } if (multiLine && stream.skipTo("*/")) { stream.next(); stream.next(); state.tokenizer = tokenBase; } else { stream.skipToEnd(); } return "comment"; }; } function buildStringTokenizer(quote, greedy) { if (greedy == null) { greedy = true; } function stringTokenizer(stream, state) { var nextChar = stream.next(); var peekChar = stream.peek(); var previousChar = stream.string.charAt(stream.pos-2); var endingString = ((nextChar !== "\\" && peekChar === quote) || (nextChar === quote && previousChar !== "\\")); if (endingString) { if (nextChar !== quote && greedy) { stream.next(); } state.tokenizer = tokenBase; return "string"; } else if (nextChar === "#" && peekChar === "{") { state.tokenizer = buildInterpolationTokenizer(stringTokenizer); stream.next(); return "operator"; } else { return "string"; } } return stringTokenizer; } function buildInterpolationTokenizer(currentTokenizer) { return function(stream, state) { if (stream.peek() === "}") { stream.next(); state.tokenizer = currentTokenizer; return "operator"; } else { return tokenBase(stream, state); } }; } function indent(state) { if (state.indentCount == 0) { state.indentCount++; var lastScopeOffset = state.scopes[0].offset; var currentOffset = lastScopeOffset + config.indentUnit; state.scopes.unshift({ offset:currentOffset }); } } function dedent(state) { if (state.scopes.length == 1) return; state.scopes.shift(); } function tokenBase(stream, state) { var ch = stream.peek(); // Comment if (stream.match("/*")) { state.tokenizer = comment(stream.indentation(), true); return state.tokenizer(stream, state); } if (stream.match("//")) { state.tokenizer = comment(stream.indentation(), false); return state.tokenizer(stream, state); } // Interpolation if (stream.match("#{")) { state.tokenizer = buildInterpolationTokenizer(tokenBase); return "operator"; } // Strings if (ch === '"' || ch === "'") { stream.next(); state.tokenizer = buildStringTokenizer(ch); return "string"; } if(!state.cursorHalf){// state.cursorHalf === 0 // first half i.e. before : for key-value pairs // including selectors if (ch === ".") { stream.next(); if (stream.match(/^[\w-]+/)) { indent(state); return "atom"; } else if (stream.peek() === "#") { indent(state); return "atom"; } } if (ch === "#") { stream.next(); // ID selectors if (stream.match(/^[\w-]+/)) { indent(state); return "atom"; } if (stream.peek() === "#") { indent(state); return "atom"; } } // Variables if (ch === "$") { stream.next(); stream.eatWhile(/[\w-]/); return "variable-2"; } // Numbers if (stream.match(/^-?[0-9\.]+/)) return "number"; // Units if (stream.match(/^(px|em|in)\b/)) return "unit"; if (stream.match(keywordsRegexp)) return "keyword"; if (stream.match(/^url/) && stream.peek() === "(") { state.tokenizer = urlTokens; return "atom"; } if (ch === "=") { // Match shortcut mixin definition if (stream.match(/^=[\w-]+/)) { indent(state); return "meta"; } } if (ch === "+") { // Match shortcut mixin definition if (stream.match(/^\+[\w-]+/)){ return "variable-3"; } } if(ch === "@"){ if(stream.match(/@extend/)){ if(!stream.match(/\s*[\w]/)) dedent(state); } } // Indent Directives if (stream.match(/^@(else if|if|media|else|for|each|while|mixin|function)/)) { indent(state); return "meta"; } // Other Directives if (ch === "@") { stream.next(); stream.eatWhile(/[\w-]/); return "meta"; } if (stream.eatWhile(/[\w-]/)){ if(stream.match(/ *: *[\w-\+\$#!\("']/,false)){ return "property"; } else if(stream.match(/ *:/,false)){ indent(state); state.cursorHalf = 1; return "atom"; } else if(stream.match(/ *,/,false)){ return "atom"; } else{ indent(state); return "atom"; } } if(ch === ":"){ if (stream.match(pseudoElementsRegexp)){ // could be a pseudo-element return "keyword"; } stream.next(); state.cursorHalf=1; return "operator"; } } // cursorHalf===0 ends here else{ if (ch === "#") { stream.next(); // Hex numbers if (stream.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)){ if(!stream.peek()){ state.cursorHalf = 0; } return "number"; } } // Numbers if (stream.match(/^-?[0-9\.]+/)){ if(!stream.peek()){ state.cursorHalf = 0; } return "number"; } // Units if (stream.match(/^(px|em|in)\b/)){ if(!stream.peek()){ state.cursorHalf = 0; } return "unit"; } if (stream.match(keywordsRegexp)){ if(!stream.peek()){ state.cursorHalf = 0; } return "keyword"; } if (stream.match(/^url/) && stream.peek() === "(") { state.tokenizer = urlTokens; if(!stream.peek()){ state.cursorHalf = 0; } return "atom"; } // Variables if (ch === "$") { stream.next(); stream.eatWhile(/[\w-]/); if(!stream.peek()){ state.cursorHalf = 0; } return "variable-3"; } // bang character for !important, !default, etc. if (ch === "!") { stream.next(); if(!stream.peek()){ state.cursorHalf = 0; } return stream.match(/^[\w]+/) ? "keyword": "operator"; } if (stream.match(opRegexp)){ if(!stream.peek()){ state.cursorHalf = 0; } return "operator"; } // attributes if (stream.eatWhile(/[\w-]/)) { if(!stream.peek()){ state.cursorHalf = 0; } return "attribute"; } //stream.eatSpace(); if(!stream.peek()){ state.cursorHalf = 0; return null; } } // else ends here if (stream.match(opRegexp)) return "operator"; // If we haven't returned by now, we move 1 character // and return an error stream.next(); return null; } function tokenLexer(stream, state) { if (stream.sol()) state.indentCount = 0; var style = state.tokenizer(stream, state); var current = stream.current(); if (current === "@return" || current === "}"){ dedent(state); } if (style !== null) { var startOfToken = stream.pos - current.length; var withCurrentIndent = startOfToken + (config.indentUnit * state.indentCount); var newScopes = []; for (var i = 0; i < state.scopes.length; i++) { var scope = state.scopes[i]; if (scope.offset <= withCurrentIndent) newScopes.push(scope); } state.scopes = newScopes; } return style; } return { startState: function() { return { tokenizer: tokenBase, scopes: [{offset: 0, type: "sass"}], indentCount: 0, cursorHalf: 0, // cursor half tells us if cursor lies after (1) // or before (0) colon (well... more or less) definedVars: [], definedMixins: [] }; }, token: function(stream, state) { var style = tokenLexer(stream, state); state.lastToken = { style: style, content: stream.current() }; return style; }, indent: function(state) { return state.scopes[0].offset; } }; }); CodeMirror.defineMIME("text/x-sass", "sass"); }); application/library/codemirror/mode/sass/index.html000064400000003043146731177160016567 0ustar00 CodeMirror: Sass mode

Sass mode

MIME types defined: text/x-sass.

application/library/codemirror/mode/jinja2/jinja2.js000064400000010274146731177160016515 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("jinja2", function() { var keywords = ["and", "as", "block", "endblock", "by", "cycle", "debug", "else", "elif", "extends", "filter", "endfilter", "firstof", "for", "endfor", "if", "endif", "ifchanged", "endifchanged", "ifequal", "endifequal", "ifnotequal", "endifnotequal", "in", "include", "load", "not", "now", "or", "parsed", "regroup", "reversed", "spaceless", "endspaceless", "ssi", "templatetag", "openblock", "closeblock", "openvariable", "closevariable", "openbrace", "closebrace", "opencomment", "closecomment", "widthratio", "url", "with", "endwith", "get_current_language", "trans", "endtrans", "noop", "blocktrans", "endblocktrans", "get_available_languages", "get_current_language_bidi", "plural"], operator = /^[+\-*&%=<>!?|~^]/, sign = /^[:\[\(\{]/, atom = ["true", "false"], number = /^(\d[+\-\*\/])?\d+(\.\d+)?/; keywords = new RegExp("((" + keywords.join(")|(") + "))\\b"); atom = new RegExp("((" + atom.join(")|(") + "))\\b"); function tokenBase (stream, state) { var ch = stream.peek(); //Comment if (state.incomment) { if(!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Tag } else if (state.intag) { //After operator if(state.operator) { state.operator = false; if(stream.match(atom)) { return "atom"; } if(stream.match(number)) { return "number"; } } //After sign if(state.sign) { state.sign = false; if(stream.match(atom)) { return "atom"; } if(stream.match(number)) { return "number"; } } if(state.instring) { if(ch == state.instring) { state.instring = false; } stream.next(); return "string"; } else if(ch == "'" || ch == '"') { state.instring = ch; stream.next(); return "string"; } else if(stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) { state.intag = false; return "tag"; } else if(stream.match(operator)) { state.operator = true; return "operator"; } else if(stream.match(sign)) { state.sign = true; } else { if(stream.eat(" ") || stream.sol()) { if(stream.match(keywords)) { return "keyword"; } if(stream.match(atom)) { return "atom"; } if(stream.match(number)) { return "number"; } if(stream.sol()) { stream.next(); } } else { stream.next(); } } return "variable"; } else if (stream.eat("{")) { if (ch = stream.eat("#")) { state.incomment = true; if(!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Open tag } else if (ch = stream.eat(/\{|%/)) { //Cache close tag state.intag = ch; if(ch == "{") { state.intag = "}"; } stream.eat("-"); return "tag"; } } stream.next(); }; return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { return state.tokenize(stream, state); } }; }); }); application/library/codemirror/mode/jinja2/index.html000064400000003333146731177160016775 0ustar00 CodeMirror: Jinja2 mode

Jinja2 mode

application/library/codemirror/mode/idl/idl.js000064400000035051146731177160015503 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function wordRegexp(words) { return new RegExp('^((' + words.join(')|(') + '))\\b', 'i'); }; var builtinArray = [ 'a_correlate', 'abs', 'acos', 'adapt_hist_equal', 'alog', 'alog2', 'alog10', 'amoeba', 'annotate', 'app_user_dir', 'app_user_dir_query', 'arg_present', 'array_equal', 'array_indices', 'arrow', 'ascii_template', 'asin', 'assoc', 'atan', 'axis', 'axis', 'bandpass_filter', 'bandreject_filter', 'barplot', 'bar_plot', 'beseli', 'beselj', 'beselk', 'besely', 'beta', 'biginteger', 'bilinear', 'bin_date', 'binary_template', 'bindgen', 'binomial', 'bit_ffs', 'bit_population', 'blas_axpy', 'blk_con', 'boolarr', 'boolean', 'boxplot', 'box_cursor', 'breakpoint', 'broyden', 'bubbleplot', 'butterworth', 'bytarr', 'byte', 'byteorder', 'bytscl', 'c_correlate', 'calendar', 'caldat', 'call_external', 'call_function', 'call_method', 'call_procedure', 'canny', 'catch', 'cd', 'cdf', 'ceil', 'chebyshev', 'check_math', 'chisqr_cvf', 'chisqr_pdf', 'choldc', 'cholsol', 'cindgen', 'cir_3pnt', 'clipboard', 'close', 'clust_wts', 'cluster', 'cluster_tree', 'cmyk_convert', 'code_coverage', 'color_convert', 'color_exchange', 'color_quan', 'color_range_map', 'colorbar', 'colorize_sample', 'colormap_applicable', 'colormap_gradient', 'colormap_rotation', 'colortable', 'comfit', 'command_line_args', 'common', 'compile_opt', 'complex', 'complexarr', 'complexround', 'compute_mesh_normals', 'cond', 'congrid', 'conj', 'constrained_min', 'contour', 'contour', 'convert_coord', 'convol', 'convol_fft', 'coord2to3', 'copy_lun', 'correlate', 'cos', 'cosh', 'cpu', 'cramer', 'createboxplotdata', 'create_cursor', 'create_struct', 'create_view', 'crossp', 'crvlength', 'ct_luminance', 'cti_test', 'cursor', 'curvefit', 'cv_coord', 'cvttobm', 'cw_animate', 'cw_animate_getp', 'cw_animate_load', 'cw_animate_run', 'cw_arcball', 'cw_bgroup', 'cw_clr_index', 'cw_colorsel', 'cw_defroi', 'cw_field', 'cw_filesel', 'cw_form', 'cw_fslider', 'cw_light_editor', 'cw_light_editor_get', 'cw_light_editor_set', 'cw_orient', 'cw_palette_editor', 'cw_palette_editor_get', 'cw_palette_editor_set', 'cw_pdmenu', 'cw_rgbslider', 'cw_tmpl', 'cw_zoom', 'db_exists', 'dblarr', 'dcindgen', 'dcomplex', 'dcomplexarr', 'define_key', 'define_msgblk', 'define_msgblk_from_file', 'defroi', 'defsysv', 'delvar', 'dendro_plot', 'dendrogram', 'deriv', 'derivsig', 'determ', 'device', 'dfpmin', 'diag_matrix', 'dialog_dbconnect', 'dialog_message', 'dialog_pickfile', 'dialog_printersetup', 'dialog_printjob', 'dialog_read_image', 'dialog_write_image', 'dictionary', 'digital_filter', 'dilate', 'dindgen', 'dissolve', 'dist', 'distance_measure', 'dlm_load', 'dlm_register', 'doc_library', 'double', 'draw_roi', 'edge_dog', 'efont', 'eigenql', 'eigenvec', 'ellipse', 'elmhes', 'emboss', 'empty', 'enable_sysrtn', 'eof', 'eos', 'erase', 'erf', 'erfc', 'erfcx', 'erode', 'errorplot', 'errplot', 'estimator_filter', 'execute', 'exit', 'exp', 'expand', 'expand_path', 'expint', 'extrac', 'extract_slice', 'f_cvf', 'f_pdf', 'factorial', 'fft', 'file_basename', 'file_chmod', 'file_copy', 'file_delete', 'file_dirname', 'file_expand_path', 'file_gunzip', 'file_gzip', 'file_info', 'file_lines', 'file_link', 'file_mkdir', 'file_move', 'file_poll_input', 'file_readlink', 'file_same', 'file_search', 'file_tar', 'file_test', 'file_untar', 'file_unzip', 'file_which', 'file_zip', 'filepath', 'findgen', 'finite', 'fix', 'flick', 'float', 'floor', 'flow3', 'fltarr', 'flush', 'format_axis_values', 'forward_function', 'free_lun', 'fstat', 'fulstr', 'funct', 'function', 'fv_test', 'fx_root', 'fz_roots', 'gamma', 'gamma_ct', 'gauss_cvf', 'gauss_pdf', 'gauss_smooth', 'gauss2dfit', 'gaussfit', 'gaussian_function', 'gaussint', 'get_drive_list', 'get_dxf_objects', 'get_kbrd', 'get_login_info', 'get_lun', 'get_screen_size', 'getenv', 'getwindows', 'greg2jul', 'grib', 'grid_input', 'grid_tps', 'grid3', 'griddata', 'gs_iter', 'h_eq_ct', 'h_eq_int', 'hanning', 'hash', 'hdf', 'hdf5', 'heap_free', 'heap_gc', 'heap_nosave', 'heap_refcount', 'heap_save', 'help', 'hilbert', 'hist_2d', 'hist_equal', 'histogram', 'hls', 'hough', 'hqr', 'hsv', 'i18n_multibytetoutf8', 'i18n_multibytetowidechar', 'i18n_utf8tomultibyte', 'i18n_widechartomultibyte', 'ibeta', 'icontour', 'iconvertcoord', 'idelete', 'identity', 'idl_base64', 'idl_container', 'idl_validname', 'idlexbr_assistant', 'idlitsys_createtool', 'idlunit', 'iellipse', 'igamma', 'igetcurrent', 'igetdata', 'igetid', 'igetproperty', 'iimage', 'image', 'image_cont', 'image_statistics', 'image_threshold', 'imaginary', 'imap', 'indgen', 'int_2d', 'int_3d', 'int_tabulated', 'intarr', 'interpol', 'interpolate', 'interval_volume', 'invert', 'ioctl', 'iopen', 'ir_filter', 'iplot', 'ipolygon', 'ipolyline', 'iputdata', 'iregister', 'ireset', 'iresolve', 'irotate', 'isa', 'isave', 'iscale', 'isetcurrent', 'isetproperty', 'ishft', 'isocontour', 'isosurface', 'isurface', 'itext', 'itranslate', 'ivector', 'ivolume', 'izoom', 'journal', 'json_parse', 'json_serialize', 'jul2greg', 'julday', 'keyword_set', 'krig2d', 'kurtosis', 'kw_test', 'l64indgen', 'la_choldc', 'la_cholmprove', 'la_cholsol', 'la_determ', 'la_eigenproblem', 'la_eigenql', 'la_eigenvec', 'la_elmhes', 'la_gm_linear_model', 'la_hqr', 'la_invert', 'la_least_square_equality', 'la_least_squares', 'la_linear_equation', 'la_ludc', 'la_lumprove', 'la_lusol', 'la_svd', 'la_tridc', 'la_trimprove', 'la_triql', 'la_trired', 'la_trisol', 'label_date', 'label_region', 'ladfit', 'laguerre', 'lambda', 'lambdap', 'lambertw', 'laplacian', 'least_squares_filter', 'leefilt', 'legend', 'legendre', 'linbcg', 'lindgen', 'linfit', 'linkimage', 'list', 'll_arc_distance', 'lmfit', 'lmgr', 'lngamma', 'lnp_test', 'loadct', 'locale_get', 'logical_and', 'logical_or', 'logical_true', 'lon64arr', 'lonarr', 'long', 'long64', 'lsode', 'lu_complex', 'ludc', 'lumprove', 'lusol', 'm_correlate', 'machar', 'make_array', 'make_dll', 'make_rt', 'map', 'mapcontinents', 'mapgrid', 'map_2points', 'map_continents', 'map_grid', 'map_image', 'map_patch', 'map_proj_forward', 'map_proj_image', 'map_proj_info', 'map_proj_init', 'map_proj_inverse', 'map_set', 'matrix_multiply', 'matrix_power', 'max', 'md_test', 'mean', 'meanabsdev', 'mean_filter', 'median', 'memory', 'mesh_clip', 'mesh_decimate', 'mesh_issolid', 'mesh_merge', 'mesh_numtriangles', 'mesh_obj', 'mesh_smooth', 'mesh_surfacearea', 'mesh_validate', 'mesh_volume', 'message', 'min', 'min_curve_surf', 'mk_html_help', 'modifyct', 'moment', 'morph_close', 'morph_distance', 'morph_gradient', 'morph_hitormiss', 'morph_open', 'morph_thin', 'morph_tophat', 'multi', 'n_elements', 'n_params', 'n_tags', 'ncdf', 'newton', 'noise_hurl', 'noise_pick', 'noise_scatter', 'noise_slur', 'norm', 'obj_class', 'obj_destroy', 'obj_hasmethod', 'obj_isa', 'obj_new', 'obj_valid', 'objarr', 'on_error', 'on_ioerror', 'online_help', 'openr', 'openu', 'openw', 'oplot', 'oploterr', 'orderedhash', 'p_correlate', 'parse_url', 'particle_trace', 'path_cache', 'path_sep', 'pcomp', 'plot', 'plot3d', 'plot', 'plot_3dbox', 'plot_field', 'ploterr', 'plots', 'polar_contour', 'polar_surface', 'polyfill', 'polyshade', 'pnt_line', 'point_lun', 'polarplot', 'poly', 'poly_2d', 'poly_area', 'poly_fit', 'polyfillv', 'polygon', 'polyline', 'polywarp', 'popd', 'powell', 'pref_commit', 'pref_get', 'pref_set', 'prewitt', 'primes', 'print', 'printf', 'printd', 'pro', 'product', 'profile', 'profiler', 'profiles', 'project_vol', 'ps_show_fonts', 'psafm', 'pseudo', 'ptr_free', 'ptr_new', 'ptr_valid', 'ptrarr', 'pushd', 'qgrid3', 'qhull', 'qromb', 'qromo', 'qsimp', 'query_*', 'query_ascii', 'query_bmp', 'query_csv', 'query_dicom', 'query_gif', 'query_image', 'query_jpeg', 'query_jpeg2000', 'query_mrsid', 'query_pict', 'query_png', 'query_ppm', 'query_srf', 'query_tiff', 'query_video', 'query_wav', 'r_correlate', 'r_test', 'radon', 'randomn', 'randomu', 'ranks', 'rdpix', 'read', 'readf', 'read_ascii', 'read_binary', 'read_bmp', 'read_csv', 'read_dicom', 'read_gif', 'read_image', 'read_interfile', 'read_jpeg', 'read_jpeg2000', 'read_mrsid', 'read_pict', 'read_png', 'read_ppm', 'read_spr', 'read_srf', 'read_sylk', 'read_tiff', 'read_video', 'read_wav', 'read_wave', 'read_x11_bitmap', 'read_xwd', 'reads', 'readu', 'real_part', 'rebin', 'recall_commands', 'recon3', 'reduce_colors', 'reform', 'region_grow', 'register_cursor', 'regress', 'replicate', 'replicate_inplace', 'resolve_all', 'resolve_routine', 'restore', 'retall', 'return', 'reverse', 'rk4', 'roberts', 'rot', 'rotate', 'round', 'routine_filepath', 'routine_info', 'rs_test', 's_test', 'save', 'savgol', 'scale3', 'scale3d', 'scatterplot', 'scatterplot3d', 'scope_level', 'scope_traceback', 'scope_varfetch', 'scope_varname', 'search2d', 'search3d', 'sem_create', 'sem_delete', 'sem_lock', 'sem_release', 'set_plot', 'set_shading', 'setenv', 'sfit', 'shade_surf', 'shade_surf_irr', 'shade_volume', 'shift', 'shift_diff', 'shmdebug', 'shmmap', 'shmunmap', 'shmvar', 'show3', 'showfont', 'signum', 'simplex', 'sin', 'sindgen', 'sinh', 'size', 'skewness', 'skip_lun', 'slicer3', 'slide_image', 'smooth', 'sobel', 'socket', 'sort', 'spawn', 'sph_4pnt', 'sph_scat', 'spher_harm', 'spl_init', 'spl_interp', 'spline', 'spline_p', 'sprsab', 'sprsax', 'sprsin', 'sprstp', 'sqrt', 'standardize', 'stddev', 'stop', 'strarr', 'strcmp', 'strcompress', 'streamline', 'streamline', 'stregex', 'stretch', 'string', 'strjoin', 'strlen', 'strlowcase', 'strmatch', 'strmessage', 'strmid', 'strpos', 'strput', 'strsplit', 'strtrim', 'struct_assign', 'struct_hide', 'strupcase', 'surface', 'surface', 'surfr', 'svdc', 'svdfit', 'svsol', 'swap_endian', 'swap_endian_inplace', 'symbol', 'systime', 't_cvf', 't_pdf', 't3d', 'tag_names', 'tan', 'tanh', 'tek_color', 'temporary', 'terminal_size', 'tetra_clip', 'tetra_surface', 'tetra_volume', 'text', 'thin', 'thread', 'threed', 'tic', 'time_test2', 'timegen', 'timer', 'timestamp', 'timestamptovalues', 'tm_test', 'toc', 'total', 'trace', 'transpose', 'tri_surf', 'triangulate', 'trigrid', 'triql', 'trired', 'trisol', 'truncate_lun', 'ts_coef', 'ts_diff', 'ts_fcast', 'ts_smooth', 'tv', 'tvcrs', 'tvlct', 'tvrd', 'tvscl', 'typename', 'uindgen', 'uint', 'uintarr', 'ul64indgen', 'ulindgen', 'ulon64arr', 'ulonarr', 'ulong', 'ulong64', 'uniq', 'unsharp_mask', 'usersym', 'value_locate', 'variance', 'vector', 'vector_field', 'vel', 'velovect', 'vert_t3d', 'voigt', 'volume', 'voronoi', 'voxel_proj', 'wait', 'warp_tri', 'watershed', 'wdelete', 'wf_draw', 'where', 'widget_base', 'widget_button', 'widget_combobox', 'widget_control', 'widget_displaycontextmenu', 'widget_draw', 'widget_droplist', 'widget_event', 'widget_info', 'widget_label', 'widget_list', 'widget_propertysheet', 'widget_slider', 'widget_tab', 'widget_table', 'widget_text', 'widget_tree', 'widget_tree_move', 'widget_window', 'wiener_filter', 'window', 'window', 'write_bmp', 'write_csv', 'write_gif', 'write_image', 'write_jpeg', 'write_jpeg2000', 'write_nrif', 'write_pict', 'write_png', 'write_ppm', 'write_spr', 'write_srf', 'write_sylk', 'write_tiff', 'write_video', 'write_wav', 'write_wave', 'writeu', 'wset', 'wshow', 'wtn', 'wv_applet', 'wv_cwt', 'wv_cw_wavelet', 'wv_denoise', 'wv_dwt', 'wv_fn_coiflet', 'wv_fn_daubechies', 'wv_fn_gaussian', 'wv_fn_haar', 'wv_fn_morlet', 'wv_fn_paul', 'wv_fn_symlet', 'wv_import_data', 'wv_import_wavelet', 'wv_plot3d_wps', 'wv_plot_multires', 'wv_pwt', 'wv_tool_denoise', 'xbm_edit', 'xdisplayfile', 'xdxf', 'xfont', 'xinteranimate', 'xloadct', 'xmanager', 'xmng_tmpl', 'xmtool', 'xobjview', 'xobjview_rotate', 'xobjview_write_image', 'xpalette', 'xpcolor', 'xplot3d', 'xregistered', 'xroi', 'xsq_test', 'xsurface', 'xvaredit', 'xvolume', 'xvolume_rotate', 'xvolume_write_image', 'xyouts', 'zlib_compress', 'zlib_uncompress', 'zoom', 'zoom_24' ]; var builtins = wordRegexp(builtinArray); var keywordArray = [ 'begin', 'end', 'endcase', 'endfor', 'endwhile', 'endif', 'endrep', 'endforeach', 'break', 'case', 'continue', 'for', 'foreach', 'goto', 'if', 'then', 'else', 'repeat', 'until', 'switch', 'while', 'do', 'pro', 'function' ]; var keywords = wordRegexp(keywordArray); CodeMirror.registerHelper("hintWords", "idl", builtinArray.concat(keywordArray)); var identifiers = new RegExp('^[_a-z\xa1-\uffff][_a-z0-9\xa1-\uffff]*', 'i'); var singleOperators = /[+\-*&=<>\/@#~$]/; var boolOperators = new RegExp('(and|or|eq|lt|le|gt|ge|ne|not)', 'i'); function tokenBase(stream) { // whitespaces if (stream.eatSpace()) return null; // Handle one line Comments if (stream.match(';')) { stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^[0-9\.+-]/, false)) { if (stream.match(/^[+-]?0x[0-9a-fA-F]+/)) return 'number'; if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)) return 'number'; if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/)) return 'number'; } // Handle Strings if (stream.match(/^"([^"]|(""))*"/)) { return 'string'; } if (stream.match(/^'([^']|(''))*'/)) { return 'string'; } // Handle words if (stream.match(keywords)) { return 'keyword'; } if (stream.match(builtins)) { return 'builtin'; } if (stream.match(identifiers)) { return 'variable'; } if (stream.match(singleOperators) || stream.match(boolOperators)) { return 'operator'; } // Handle non-detected items stream.next(); return null; }; CodeMirror.defineMode('idl', function() { return { token: function(stream) { return tokenBase(stream); } }; }); CodeMirror.defineMIME('text/x-idl', 'idl'); }); application/library/codemirror/mode/idl/index.html000064400000003141146731177160016365 0ustar00 CodeMirror: IDL mode

IDL mode

MIME types defined: text/x-idl.

application/library/codemirror/mode/clojure/index.html000064400000004766146731177160017276 0ustar00 CodeMirror: Clojure mode

Clojure mode

MIME types defined: text/x-clojure.

application/library/codemirror/mode/clojure/clojure.js000064400000037205146731177160017274 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Author: Hans Engel * Branched from CodeMirror's Scheme mode (by Koh Zi Han, based on implementation by Koh Zi Chun) */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("clojure", function (options) { var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", CHARACTER = "string-2", ATOM = "atom", NUMBER = "number", BRACKET = "bracket", KEYWORD = "keyword", VAR = "variable"; var INDENT_WORD_SKIP = options.indentUnit || 2; var NORMAL_INDENT_UNIT = options.indentUnit || 2; function makeKeywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var atoms = makeKeywords("true false nil"); var keywords = makeKeywords( "defn defn- def def- defonce defmulti defmethod defmacro defstruct deftype defprotocol defrecord defproject deftest " + "slice defalias defhinted defmacro- defn-memo defnk defnk defonce- defunbound defunbound- defvar defvar- let letfn " + "do case cond condp for loop recur when when-not when-let when-first if if-let if-not . .. -> ->> doto and or dosync " + "doseq dotimes dorun doall load import unimport ns in-ns refer try catch finally throw with-open with-local-vars " + "binding gen-class gen-and-load-class gen-and-save-class handler-case handle"); var builtins = makeKeywords( "* *' *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* " + "*compile-path* *compiler-options* *data-readers* *e *err* *file* *flush-on-newline* *fn-loader* *in* " + "*math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* " + "*source-path* *unchecked-math* *use-context-classloader* *verbose-defrecords* *warn-on-reflection* + +' - -' -> " + "->> ->ArrayChunk ->Vec ->VecNode ->VecSeq -cache-protocol-fn -reset-methods .. / < <= = == > >= EMPTY-NODE accessor " + "aclone add-classpath add-watch agent agent-error agent-errors aget alength alias all-ns alter alter-meta! " + "alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double " + "aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 " + "bases bean bigdec bigint biginteger binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set " + "bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* bound? butlast " + "byte byte-array bytes case cat cast char char-array char-escape-string char-name-string char? chars chunk chunk-append " + "chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors " + "clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement completing concat cond condp " + "conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec dec' decimal? " + "declare dedupe default-data-readers definline definterface defmacro defmethod defmulti defn defn- defonce defprotocol " + "defrecord defstruct deftype delay delay? deliver denominator deref derive descendants destructure disj disj! dissoc " + "dissoc! distinct distinct? doall dorun doseq dosync dotimes doto double double-array doubles drop drop-last " + "drop-while eduction empty empty? ensure enumeration-seq error-handler error-mode eval even? every-pred every? ex-data ex-info " + "extend extend-protocol extend-type extenders extends? false? ffirst file-seq filter filterv find find-keyword " + "find-ns find-protocol-impl find-protocol-method find-var first flatten float float-array float? floats flush fn fn? " + "fnext fnil for force format frequencies future future-call future-cancel future-cancelled? future-done? future? " + "gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator group-by hash " + "hash-combine hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc inc' init-proxy instance? " + "int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt keep " + "keep-indexed key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file " + "load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array " + "make-hierarchy map map-indexed map? mapcat mapv max max-key memfn memoize merge merge-with meta method-sig methods " + "min min-key mod munge name namespace namespace-munge neg? newline next nfirst nil? nnext not not-any? not-empty " + "not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias " + "ns-unmap nth nthnext nthrest num number? numerator object-array odd? or parents partial partition partition-all " + "partition-by pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers " + "primitives-classnames print print-ctor print-dup print-method print-simple print-str printf println println-str " + "prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues " + "quot rand rand-int rand-nth random-sample range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern " + "re-seq read read-line read-string realized? reduce reduce-kv reductions ref ref-history-count ref-max-history " + "ref-min-history ref-set refer refer-clojure reify release-pending-sends rem remove remove-all-methods " + "remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest " + "restart-agent resultset-seq reverse reversible? rseq rsubseq satisfies? second select-keys send send-off seq seq? " + "seque sequence sequential? set set-error-handler! set-error-mode! set-validator! set? short short-array shorts " + "shuffle shutdown-agents slurp some some-fn sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? " + "special-symbol? spit split-at split-with str string? struct struct-map subs subseq subvec supers swap! symbol " + "symbol? sync take take-last take-nth take-while test the-ns thread-bound? time to-array to-array-2d trampoline transduce " + "transient tree-seq true? type unchecked-add unchecked-add-int unchecked-byte unchecked-char unchecked-dec " + "unchecked-dec-int unchecked-divide-int unchecked-double unchecked-float unchecked-inc unchecked-inc-int " + "unchecked-int unchecked-long unchecked-multiply unchecked-multiply-int unchecked-negate unchecked-negate-int "+ "unchecked-remainder-int unchecked-short unchecked-subtract unchecked-subtract-int underive unquote " + "unquote-splicing update update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector-of " + "vector? volatile! volatile? vreset! vswap! when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context " + "with-local-vars with-meta with-open with-out-str with-precision with-redefs with-redefs-fn xml-seq zero? zipmap " + "*default-data-reader-fn* as-> cond-> cond->> reduced reduced? send-via set-agent-send-executor! " + "set-agent-send-off-executor! some-> some->>"); var indentKeys = makeKeywords( // Built-ins "ns fn def defn defmethod bound-fn if if-not case condp when while when-not when-first do future comment doto " + "locking proxy with-open with-precision reify deftype defrecord defprotocol extend extend-protocol extend-type " + "try catch " + // Binding forms "let letfn binding loop for doseq dotimes when-let if-let " + // Data structures "defstruct struct-map assoc " + // clojure.test "testing deftest " + // contrib "handler-case handle dotrace deftrace"); var tests = { digit: /\d/, digit_or_colon: /[\d:]/, hex: /[0-9a-f]/i, sign: /[+-]/, exponent: /e/i, keyword_char: /[^\s\(\[\;\)\]]/, symbol: /[\w*+!\-\._?:<>\/\xa1-\uffff]/, block_indent: /^(?:def|with)[^\/]+$|\/(?:def|with)/ }; function stateStack(indent, type, prev) { // represents a state stack object this.indent = indent; this.type = type; this.prev = prev; } function pushStack(state, indent, type) { state.indentStack = new stateStack(indent, type, state.indentStack); } function popStack(state) { state.indentStack = state.indentStack.prev; } function isNumber(ch, stream){ // hex if ( ch === '0' && stream.eat(/x/i) ) { stream.eatWhile(tests.hex); return true; } // leading sign if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) { stream.eat(tests.sign); ch = stream.next(); } if ( tests.digit.test(ch) ) { stream.eat(ch); stream.eatWhile(tests.digit); if ( '.' == stream.peek() ) { stream.eat('.'); stream.eatWhile(tests.digit); } else if ('/' == stream.peek() ) { stream.eat('/'); stream.eatWhile(tests.digit); } if ( stream.eat(tests.exponent) ) { stream.eat(tests.sign); stream.eatWhile(tests.digit); } return true; } return false; } // Eat character that starts after backslash \ function eatCharacter(stream) { var first = stream.next(); // Read special literals: backspace, newline, space, return. // Just read all lowercase letters. if (first && first.match(/[a-z]/) && stream.match(/[a-z]+/, true)) { return; } // Read unicode character: \u1000 \uA0a1 if (first === "u") { stream.match(/[0-9a-z]{4}/i, true); } } return { startState: function () { return { indentStack: null, indentation: 0, mode: false }; }, token: function (stream, state) { if (state.indentStack == null && stream.sol()) { // update indentation, but only if indentStack is empty state.indentation = stream.indentation(); } // skip spaces if (state.mode != "string" && stream.eatSpace()) { return null; } var returnType = null; switch(state.mode){ case "string": // multi-line string parsing mode var next, escaped = false; while ((next = stream.next()) != null) { if (next == "\"" && !escaped) { state.mode = false; break; } escaped = !escaped && next == "\\"; } returnType = STRING; // continue on in string mode break; default: // default parsing mode var ch = stream.next(); if (ch == "\"") { state.mode = "string"; returnType = STRING; } else if (ch == "\\") { eatCharacter(stream); returnType = CHARACTER; } else if (ch == "'" && !( tests.digit_or_colon.test(stream.peek()) )) { returnType = ATOM; } else if (ch == ";") { // comment stream.skipToEnd(); // rest of the line is a comment returnType = COMMENT; } else if (isNumber(ch,stream)){ returnType = NUMBER; } else if (ch == "(" || ch == "[" || ch == "{" ) { var keyWord = '', indentTemp = stream.column(), letter; /** Either (indent-word .. (non-indent-word .. (;something else, bracket, etc. */ if (ch == "(") while ((letter = stream.eat(tests.keyword_char)) != null) { keyWord += letter; } if (keyWord.length > 0 && (indentKeys.propertyIsEnumerable(keyWord) || tests.block_indent.test(keyWord))) { // indent-word pushStack(state, indentTemp + INDENT_WORD_SKIP, ch); } else { // non-indent word // we continue eating the spaces stream.eatSpace(); if (stream.eol() || stream.peek() == ";") { // nothing significant after // we restart indentation the user defined spaces after pushStack(state, indentTemp + NORMAL_INDENT_UNIT, ch); } else { pushStack(state, indentTemp + stream.current().length, ch); // else we match } } stream.backUp(stream.current().length - 1); // undo all the eating returnType = BRACKET; } else if (ch == ")" || ch == "]" || ch == "}") { returnType = BRACKET; if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : (ch == "]" ? "[" :"{"))) { popStack(state); } } else if ( ch == ":" ) { stream.eatWhile(tests.symbol); return ATOM; } else { stream.eatWhile(tests.symbol); if (keywords && keywords.propertyIsEnumerable(stream.current())) { returnType = KEYWORD; } else if (builtins && builtins.propertyIsEnumerable(stream.current())) { returnType = BUILTIN; } else if (atoms && atoms.propertyIsEnumerable(stream.current())) { returnType = ATOM; } else { returnType = VAR; } } } return returnType; }, indent: function (state) { if (state.indentStack == null) return state.indentation; return state.indentStack.indent; }, closeBrackets: {pairs: "()[]{}\"\""}, lineComment: ";;" }; }); CodeMirror.defineMIME("text/x-clojure", "clojure"); CodeMirror.defineMIME("text/x-clojurescript", "clojure"); CodeMirror.defineMIME("application/edn", "clojure"); }); application/library/codemirror/mode/ecl/ecl.js000064400000021213146731177160015464 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ecl", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function metaHook(stream, state) { if (!state.startOfLine) return false; stream.skipToEnd(); return "meta"; } var indentUnit = config.indentUnit; var keyword = words("abs acos allnodes ascii asin asstring atan atan2 ave case choose choosen choosesets clustersize combine correlation cos cosh count covariance cron dataset dedup define denormalize distribute distributed distribution ebcdic enth error evaluate event eventextra eventname exists exp failcode failmessage fetch fromunicode getisvalid global graph group hash hash32 hash64 hashcrc hashmd5 having if index intformat isvalid iterate join keyunicode length library limit ln local log loop map matched matchlength matchposition matchtext matchunicode max merge mergejoin min nolocal nonempty normalize parse pipe power preload process project pull random range rank ranked realformat recordof regexfind regexreplace regroup rejected rollup round roundup row rowdiff sample set sin sinh sizeof soapcall sort sorted sqrt stepped stored sum table tan tanh thisnode topn tounicode transfer trim truncate typeof ungroup unicodeorder variance which workunit xmldecode xmlencode xmltext xmlunicode"); var variable = words("apply assert build buildindex evaluate fail keydiff keypatch loadxml nothor notify output parallel sequential soapcall wait"); var variable_2 = words("__compressed__ all and any as atmost before beginc++ best between case const counter csv descend encrypt end endc++ endmacro except exclusive expire export extend false few first flat from full function group header heading hole ifblock import in interface joined keep keyed last left limit load local locale lookup macro many maxcount maxlength min skew module named nocase noroot noscan nosort not of only opt or outer overwrite packed partition penalty physicallength pipe quote record relationship repeat return right scan self separator service shared skew skip sql store terminator thor threshold token transform trim true type unicodeorder unsorted validate virtual whole wild within xml xpath"); var variable_3 = words("ascii big_endian boolean data decimal ebcdic integer pattern qstring real record rule set of string token udecimal unicode unsigned varstring varunicode"); var builtin = words("checkpoint deprecated failcode failmessage failure global independent onwarning persist priority recovery stored success wait when"); var blockKeywords = words("catch class do else finally for if switch try while"); var atoms = words("true false null"); var hooks = {"#": metaHook}; var isOperatorChar = /[+\-*&%=<>!?|\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_]/); var cur = stream.current().toLowerCase(); if (keyword.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "keyword"; } else if (variable.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "variable"; } else if (variable_2.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "variable-2"; } else if (variable_3.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "variable-3"; } else if (builtin.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "builtin"; } else { //Data types are of from KEYWORD## var i = cur.length - 1; while(i >= 0 && (!isNaN(cur[i]) || cur[i] == '_')) --i; if (i > 0) { var cur2 = cur.substr(0, i + 1); if (variable_3.propertyIsEnumerable(cur2)) { if (blockKeywords.propertyIsEnumerable(cur2)) curPunc = "newstatement"; return "variable-3"; } } } if (atoms.propertyIsEnumerable(cur)) return "atom"; return null; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return 0; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : indentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "{}" }; }); CodeMirror.defineMIME("text/x-ecl", "ecl"); }); application/library/codemirror/mode/ecl/index.html000064400000002601146731177160016360 0ustar00 CodeMirror: ECL mode

ECL mode

Based on CodeMirror's clike mode. For more information see HPCC Systems web site.

MIME types defined: text/x-ecl.

application/library/codemirror/mode/factor/factor.js000064400000005547146731177160016726 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Factor syntax highlight - simple mode // // by Dimage Sapelkin (https://github.com/kerabromsmu) (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../addon/mode/simple"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineSimpleMode("factor", { // The start state contains the rules that are intially used start: [ // comments {regex: /#?!.*/, token: "comment"}, // strings """, multiline --> state {regex: /"""/, token: "string", next: "string3"}, {regex: /"/, token: "string", next: "string"}, // numbers: dec, hex, unicode, bin, fractional, complex {regex: /(?:[+-]?)(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\d+.?\d*)/, token: "number"}, //{regex: /[+-]?/} //fractional // definition: defining word, defined word, etc {regex: /(\:)(\s+)(\S+)(\s+)(\()/, token: ["keyword", null, "def", null, "keyword"], next: "stack"}, // vocabulary using --> state {regex: /USING\:/, token: "keyword", next: "vocabulary"}, // vocabulary definition/use {regex: /(USE\:|IN\:)(\s+)(\S+)/, token: ["keyword", null, "variable-2"]}, // {regex: /<\S+>/, token: "builtin"}, // "keywords", incl. ; t f . [ ] { } defining words {regex: /;|t|f|if|\.|\[|\]|\{|\}|MAIN:/, token: "keyword"}, // any id (?) {regex: /\S+/, token: "variable"}, { regex: /./, token: null } ], vocabulary: [ {regex: /;/, token: "keyword", next: "start"}, {regex: /\S+/, token: "variable-2"}, { regex: /./, token: null } ], string: [ {regex: /(?:[^\\]|\\.)*?"/, token: "string", next: "start"}, {regex: /.*/, token: "string"} ], string3: [ {regex: /(?:[^\\]|\\.)*?"""/, token: "string", next: "start"}, {regex: /.*/, token: "string"} ], stack: [ {regex: /\)/, token: "meta", next: "start"}, {regex: /--/, token: "meta"}, {regex: /\S+/, token: "variable-3"}, { regex: /./, token: null } ], // The meta property contains global information about the mode. It // can contain properties like lineComment, which are supported by // all modes, and also directives like dontIndentStates, which are // specific to simple modes. meta: { dontIndentStates: ["start", "vocabulary", "string", "string3", "stack"], lineComment: [ "!", "#!" ] } }); CodeMirror.defineMIME("text/x-factor", "factor"); }); application/library/codemirror/mode/factor/index.html000064400000003750146731177160017101 0ustar00 CodeMirror: Factor mode

Factor mode

Simple mode that handles Factor Syntax (Factor on WikiPedia).

MIME types defined: text/x-factor.

application/library/codemirror/mode/textile/test.js000064400000022335146731177160016621 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4}, 'textile'); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT('simpleParagraphs', 'Some text.', '', 'Some more text.'); /* * Phrase Modifiers */ MT('em', 'foo [em _bar_]'); MT('emBoogus', 'code_mirror'); MT('strong', 'foo [strong *bar*]'); MT('strongBogus', '3 * 3 = 9'); MT('italic', 'foo [em __bar__]'); MT('italicBogus', 'code__mirror'); MT('bold', 'foo [strong **bar**]'); MT('boldBogus', '3 ** 3 = 27'); MT('simpleLink', '[link "CodeMirror":http://codemirror.net]'); MT('referenceLink', '[link "CodeMirror":code_mirror]', 'Normal Text.', '[link [[code_mirror]]http://codemirror.net]'); MT('footCite', 'foo bar[qualifier [[1]]]'); MT('footCiteBogus', 'foo bar[[1a2]]'); MT('special-characters', 'Registered [tag (r)], ' + 'Trademark [tag (tm)], and ' + 'Copyright [tag (c)] 2008'); MT('cite', "A book is [keyword ??The Count of Monte Cristo??] by Dumas."); MT('additionAndDeletion', 'The news networks declared [negative -Al Gore-] ' + '[positive +George W. Bush+] the winner in Florida.'); MT('subAndSup', 'f(x, n) = log [builtin ~4~] x [builtin ^n^]'); MT('spanAndCode', 'A [quote %span element%] and [atom @code element@]'); MT('spanBogus', 'Percentage 25% is not a span.'); MT('citeBogus', 'Question? is not a citation.'); MT('codeBogus', 'user@example.com'); MT('subBogus', '~username'); MT('supBogus', 'foo ^ bar'); MT('deletionBogus', '3 - 3 = 0'); MT('additionBogus', '3 + 3 = 6'); MT('image', 'An image: [string !http://www.example.com/image.png!]'); MT('imageWithAltText', 'An image: [string !http://www.example.com/image.png (Alt Text)!]'); MT('imageWithUrl', 'An image: [string !http://www.example.com/image.png!:http://www.example.com/]'); /* * Headers */ MT('h1', '[header&header-1 h1. foo]'); MT('h2', '[header&header-2 h2. foo]'); MT('h3', '[header&header-3 h3. foo]'); MT('h4', '[header&header-4 h4. foo]'); MT('h5', '[header&header-5 h5. foo]'); MT('h6', '[header&header-6 h6. foo]'); MT('h7Bogus', 'h7. foo'); MT('multipleHeaders', '[header&header-1 h1. Heading 1]', '', 'Some text.', '', '[header&header-2 h2. Heading 2]', '', 'More text.'); MT('h1inline', '[header&header-1 h1. foo ][header&header-1&em _bar_][header&header-1 baz]'); /* * Lists */ MT('ul', 'foo', 'bar', '', '[variable-2 * foo]', '[variable-2 * bar]'); MT('ulNoBlank', 'foo', 'bar', '[variable-2 * foo]', '[variable-2 * bar]'); MT('ol', 'foo', 'bar', '', '[variable-2 # foo]', '[variable-2 # bar]'); MT('olNoBlank', 'foo', 'bar', '[variable-2 # foo]', '[variable-2 # bar]'); MT('ulFormatting', '[variable-2 * ][variable-2&em _foo_][variable-2 bar]', '[variable-2 * ][variable-2&strong *][variable-2&em&strong _foo_]' + '[variable-2&strong *][variable-2 bar]', '[variable-2 * ][variable-2&strong *foo*][variable-2 bar]'); MT('olFormatting', '[variable-2 # ][variable-2&em _foo_][variable-2 bar]', '[variable-2 # ][variable-2&strong *][variable-2&em&strong _foo_]' + '[variable-2&strong *][variable-2 bar]', '[variable-2 # ][variable-2&strong *foo*][variable-2 bar]'); MT('ulNested', '[variable-2 * foo]', '[variable-3 ** bar]', '[keyword *** bar]', '[variable-2 **** bar]', '[variable-3 ** bar]'); MT('olNested', '[variable-2 # foo]', '[variable-3 ## bar]', '[keyword ### bar]', '[variable-2 #### bar]', '[variable-3 ## bar]'); MT('ulNestedWithOl', '[variable-2 * foo]', '[variable-3 ## bar]', '[keyword *** bar]', '[variable-2 #### bar]', '[variable-3 ** bar]'); MT('olNestedWithUl', '[variable-2 # foo]', '[variable-3 ** bar]', '[keyword ### bar]', '[variable-2 **** bar]', '[variable-3 ## bar]'); MT('definitionList', '[number - coffee := Hot ][number&em _and_][number black]', '', 'Normal text.'); MT('definitionListSpan', '[number - coffee :=]', '', '[number Hot ][number&em _and_][number black =:]', '', 'Normal text.'); MT('boo', '[number - dog := woof woof]', '[number - cat := meow meow]', '[number - whale :=]', '[number Whale noises.]', '', '[number Also, ][number&em _splashing_][number . =:]'); /* * Attributes */ MT('divWithAttribute', '[punctuation div][punctuation&attribute (#my-id)][punctuation . foo bar]'); MT('divWithAttributeAnd2emRightPadding', '[punctuation div][punctuation&attribute (#my-id)((][punctuation . foo bar]'); MT('divWithClassAndId', '[punctuation div][punctuation&attribute (my-class#my-id)][punctuation . foo bar]'); MT('paragraphWithCss', 'p[attribute {color:red;}]. foo bar'); MT('paragraphNestedStyles', 'p. [strong *foo ][strong&em _bar_][strong *]'); MT('paragraphWithLanguage', 'p[attribute [[fr]]]. Parlez-vous français?'); MT('paragraphLeftAlign', 'p[attribute <]. Left'); MT('paragraphRightAlign', 'p[attribute >]. Right'); MT('paragraphRightAlign', 'p[attribute =]. Center'); MT('paragraphJustified', 'p[attribute <>]. Justified'); MT('paragraphWithLeftIndent1em', 'p[attribute (]. Left'); MT('paragraphWithRightIndent1em', 'p[attribute )]. Right'); MT('paragraphWithLeftIndent2em', 'p[attribute ((]. Left'); MT('paragraphWithRightIndent2em', 'p[attribute ))]. Right'); MT('paragraphWithLeftIndent3emRightIndent2em', 'p[attribute ((())]. Right'); MT('divFormatting', '[punctuation div. ][punctuation&strong *foo ]' + '[punctuation&strong&em _bar_][punctuation&strong *]'); MT('phraseModifierAttributes', 'p[attribute (my-class)]. This is a paragraph that has a class and' + ' this [em _][em&attribute (#special-phrase)][em emphasized phrase_]' + ' has an id.'); MT('linkWithClass', '[link "(my-class). This is a link with class":http://redcloth.org]'); /* * Layouts */ MT('paragraphLayouts', 'p. This is one paragraph.', '', 'p. This is another.'); MT('div', '[punctuation div. foo bar]'); MT('pre', '[operator pre. Text]'); MT('bq.', '[bracket bq. foo bar]', '', 'Normal text.'); MT('footnote', '[variable fn123. foo ][variable&strong *bar*]'); /* * Spanning Layouts */ MT('bq..ThenParagraph', '[bracket bq.. foo bar]', '', '[bracket More quote.]', 'p. Normal Text'); MT('bq..ThenH1', '[bracket bq.. foo bar]', '', '[bracket More quote.]', '[header&header-1 h1. Header Text]'); MT('bc..ThenParagraph', '[atom bc.. # Some ruby code]', '[atom obj = {foo: :bar}]', '[atom puts obj]', '', '[atom obj[[:love]] = "*love*"]', '[atom puts obj.love.upcase]', '', 'p. Normal text.'); MT('fn1..ThenParagraph', '[variable fn1.. foo bar]', '', '[variable More.]', 'p. Normal Text'); MT('pre..ThenParagraph', '[operator pre.. foo bar]', '', '[operator More.]', 'p. Normal Text'); /* * Tables */ MT('table', '[variable-3&operator |_. name |_. age|]', '[variable-3 |][variable-3&strong *Walter*][variable-3 | 5 |]', '[variable-3 |Florence| 6 |]', '', 'p. Normal text.'); MT('tableWithAttributes', '[variable-3&operator |_. name |_. age|]', '[variable-3 |][variable-3&attribute /2.][variable-3 Jim |]', '[variable-3 |][variable-3&attribute \\2{color: red}.][variable-3 Sam |]'); /* * HTML */ MT('html', '[comment
]', '[comment
]', '', '[header&header-1 h1. Welcome]', '', '[variable-2 * Item one]', '[variable-2 * Item two]', '', '[comment Example]', '', '[comment
]', '[comment
]'); MT('inlineHtml', 'I can use HTML directly in my [comment Textile].'); /* * No-Textile */ MT('notextile', '[string-2 notextile. *No* formatting]'); MT('notextileInline', 'Use [string-2 ==*asterisks*==] for [strong *strong*] text.'); MT('notextileWithPre', '[operator pre. *No* formatting]'); MT('notextileWithSpanningPre', '[operator pre.. *No* formatting]', '', '[operator *No* formatting]'); /* Only toggling phrases between non-word chars. */ MT('phrase-in-word', 'foo_bar_baz'); MT('phrase-non-word', '[negative -x-] aaa-bbb ccc-ddd [negative -eee-] fff [negative -ggg-]'); MT('phrase-lone-dash', 'foo - bar - baz'); })(); application/library/codemirror/mode/textile/index.html000064400000010373146731177160017300 0ustar00 CodeMirror: Textile mode

Textile mode

MIME types defined: text/x-textile.

Parsing/Highlighting Tests: normal, verbose.

application/library/codemirror/mode/textile/textile.js000064400000033022146731177160017313 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") { // CommonJS mod(require("../../lib/codemirror")); } else if (typeof define == "function" && define.amd) { // AMD define(["../../lib/codemirror"], mod); } else { // Plain browser env mod(CodeMirror); } })(function(CodeMirror) { "use strict"; var TOKEN_STYLES = { addition: "positive", attributes: "attribute", bold: "strong", cite: "keyword", code: "atom", definitionList: "number", deletion: "negative", div: "punctuation", em: "em", footnote: "variable", footCite: "qualifier", header: "header", html: "comment", image: "string", italic: "em", link: "link", linkDefinition: "link", list1: "variable-2", list2: "variable-3", list3: "keyword", notextile: "string-2", pre: "operator", p: "property", quote: "bracket", span: "quote", specialChar: "tag", strong: "strong", sub: "builtin", sup: "builtin", table: "variable-3", tableHeading: "operator" }; function startNewLine(stream, state) { state.mode = Modes.newLayout; state.tableHeading = false; if (state.layoutType === "definitionList" && state.spanningLayout && stream.match(RE("definitionListEnd"), false)) state.spanningLayout = false; } function handlePhraseModifier(stream, state, ch) { if (ch === "_") { if (stream.eat("_")) return togglePhraseModifier(stream, state, "italic", /__/, 2); else return togglePhraseModifier(stream, state, "em", /_/, 1); } if (ch === "*") { if (stream.eat("*")) { return togglePhraseModifier(stream, state, "bold", /\*\*/, 2); } return togglePhraseModifier(stream, state, "strong", /\*/, 1); } if (ch === "[") { if (stream.match(/\d+\]/)) state.footCite = true; return tokenStyles(state); } if (ch === "(") { var spec = stream.match(/^(r|tm|c)\)/); if (spec) return tokenStylesWith(state, TOKEN_STYLES.specialChar); } if (ch === "<" && stream.match(/(\w+)[^>]+>[^<]+<\/\1>/)) return tokenStylesWith(state, TOKEN_STYLES.html); if (ch === "?" && stream.eat("?")) return togglePhraseModifier(stream, state, "cite", /\?\?/, 2); if (ch === "=" && stream.eat("=")) return togglePhraseModifier(stream, state, "notextile", /==/, 2); if (ch === "-" && !stream.eat("-")) return togglePhraseModifier(stream, state, "deletion", /-/, 1); if (ch === "+") return togglePhraseModifier(stream, state, "addition", /\+/, 1); if (ch === "~") return togglePhraseModifier(stream, state, "sub", /~/, 1); if (ch === "^") return togglePhraseModifier(stream, state, "sup", /\^/, 1); if (ch === "%") return togglePhraseModifier(stream, state, "span", /%/, 1); if (ch === "@") return togglePhraseModifier(stream, state, "code", /@/, 1); if (ch === "!") { var type = togglePhraseModifier(stream, state, "image", /(?:\([^\)]+\))?!/, 1); stream.match(/^:\S+/); // optional Url portion return type; } return tokenStyles(state); } function togglePhraseModifier(stream, state, phraseModifier, closeRE, openSize) { var charBefore = stream.pos > openSize ? stream.string.charAt(stream.pos - openSize - 1) : null; var charAfter = stream.peek(); if (state[phraseModifier]) { if ((!charAfter || /\W/.test(charAfter)) && charBefore && /\S/.test(charBefore)) { var type = tokenStyles(state); state[phraseModifier] = false; return type; } } else if ((!charBefore || /\W/.test(charBefore)) && charAfter && /\S/.test(charAfter) && stream.match(new RegExp("^.*\\S" + closeRE.source + "(?:\\W|$)"), false)) { state[phraseModifier] = true; state.mode = Modes.attributes; } return tokenStyles(state); }; function tokenStyles(state) { var disabled = textileDisabled(state); if (disabled) return disabled; var styles = []; if (state.layoutType) styles.push(TOKEN_STYLES[state.layoutType]); styles = styles.concat(activeStyles( state, "addition", "bold", "cite", "code", "deletion", "em", "footCite", "image", "italic", "link", "span", "strong", "sub", "sup", "table", "tableHeading")); if (state.layoutType === "header") styles.push(TOKEN_STYLES.header + "-" + state.header); return styles.length ? styles.join(" ") : null; } function textileDisabled(state) { var type = state.layoutType; switch(type) { case "notextile": case "code": case "pre": return TOKEN_STYLES[type]; default: if (state.notextile) return TOKEN_STYLES.notextile + (type ? (" " + TOKEN_STYLES[type]) : ""); return null; } } function tokenStylesWith(state, extraStyles) { var disabled = textileDisabled(state); if (disabled) return disabled; var type = tokenStyles(state); if (extraStyles) return type ? (type + " " + extraStyles) : extraStyles; else return type; } function activeStyles(state) { var styles = []; for (var i = 1; i < arguments.length; ++i) { if (state[arguments[i]]) styles.push(TOKEN_STYLES[arguments[i]]); } return styles; } function blankLine(state) { var spanningLayout = state.spanningLayout, type = state.layoutType; for (var key in state) if (state.hasOwnProperty(key)) delete state[key]; state.mode = Modes.newLayout; if (spanningLayout) { state.layoutType = type; state.spanningLayout = true; } } var REs = { cache: {}, single: { bc: "bc", bq: "bq", definitionList: /- [^(?::=)]+:=+/, definitionListEnd: /.*=:\s*$/, div: "div", drawTable: /\|.*\|/, foot: /fn\d+/, header: /h[1-6]/, html: /\s*<(?:\/)?(\w+)(?:[^>]+)?>(?:[^<]+<\/\1>)?/, link: /[^"]+":\S/, linkDefinition: /\[[^\s\]]+\]\S+/, list: /(?:#+|\*+)/, notextile: "notextile", para: "p", pre: "pre", table: "table", tableCellAttributes: /[\/\\]\d+/, tableHeading: /\|_\./, tableText: /[^"_\*\[\(\?\+~\^%@|-]+/, text: /[^!"_=\*\[\(<\?\+~\^%@-]+/ }, attributes: { align: /(?:<>|<|>|=)/, selector: /\([^\(][^\)]+\)/, lang: /\[[^\[\]]+\]/, pad: /(?:\(+|\)+){1,2}/, css: /\{[^\}]+\}/ }, createRe: function(name) { switch (name) { case "drawTable": return REs.makeRe("^", REs.single.drawTable, "$"); case "html": return REs.makeRe("^", REs.single.html, "(?:", REs.single.html, ")*", "$"); case "linkDefinition": return REs.makeRe("^", REs.single.linkDefinition, "$"); case "listLayout": return REs.makeRe("^", REs.single.list, RE("allAttributes"), "*\\s+"); case "tableCellAttributes": return REs.makeRe("^", REs.choiceRe(REs.single.tableCellAttributes, RE("allAttributes")), "+\\."); case "type": return REs.makeRe("^", RE("allTypes")); case "typeLayout": return REs.makeRe("^", RE("allTypes"), RE("allAttributes"), "*\\.\\.?", "(\\s+|$)"); case "attributes": return REs.makeRe("^", RE("allAttributes"), "+"); case "allTypes": return REs.choiceRe(REs.single.div, REs.single.foot, REs.single.header, REs.single.bc, REs.single.bq, REs.single.notextile, REs.single.pre, REs.single.table, REs.single.para); case "allAttributes": return REs.choiceRe(REs.attributes.selector, REs.attributes.css, REs.attributes.lang, REs.attributes.align, REs.attributes.pad); default: return REs.makeRe("^", REs.single[name]); } }, makeRe: function() { var pattern = ""; for (var i = 0; i < arguments.length; ++i) { var arg = arguments[i]; pattern += (typeof arg === "string") ? arg : arg.source; } return new RegExp(pattern); }, choiceRe: function() { var parts = [arguments[0]]; for (var i = 1; i < arguments.length; ++i) { parts[i * 2 - 1] = "|"; parts[i * 2] = arguments[i]; } parts.unshift("(?:"); parts.push(")"); return REs.makeRe.apply(null, parts); } }; function RE(name) { return (REs.cache[name] || (REs.cache[name] = REs.createRe(name))); } var Modes = { newLayout: function(stream, state) { if (stream.match(RE("typeLayout"), false)) { state.spanningLayout = false; return (state.mode = Modes.blockType)(stream, state); } var newMode; if (!textileDisabled(state)) { if (stream.match(RE("listLayout"), false)) newMode = Modes.list; else if (stream.match(RE("drawTable"), false)) newMode = Modes.table; else if (stream.match(RE("linkDefinition"), false)) newMode = Modes.linkDefinition; else if (stream.match(RE("definitionList"))) newMode = Modes.definitionList; else if (stream.match(RE("html"), false)) newMode = Modes.html; } return (state.mode = (newMode || Modes.text))(stream, state); }, blockType: function(stream, state) { var match, type; state.layoutType = null; if (match = stream.match(RE("type"))) type = match[0]; else return (state.mode = Modes.text)(stream, state); if (match = type.match(RE("header"))) { state.layoutType = "header"; state.header = parseInt(match[0][1]); } else if (type.match(RE("bq"))) { state.layoutType = "quote"; } else if (type.match(RE("bc"))) { state.layoutType = "code"; } else if (type.match(RE("foot"))) { state.layoutType = "footnote"; } else if (type.match(RE("notextile"))) { state.layoutType = "notextile"; } else if (type.match(RE("pre"))) { state.layoutType = "pre"; } else if (type.match(RE("div"))) { state.layoutType = "div"; } else if (type.match(RE("table"))) { state.layoutType = "table"; } state.mode = Modes.attributes; return tokenStyles(state); }, text: function(stream, state) { if (stream.match(RE("text"))) return tokenStyles(state); var ch = stream.next(); if (ch === '"') return (state.mode = Modes.link)(stream, state); return handlePhraseModifier(stream, state, ch); }, attributes: function(stream, state) { state.mode = Modes.layoutLength; if (stream.match(RE("attributes"))) return tokenStylesWith(state, TOKEN_STYLES.attributes); else return tokenStyles(state); }, layoutLength: function(stream, state) { if (stream.eat(".") && stream.eat(".")) state.spanningLayout = true; state.mode = Modes.text; return tokenStyles(state); }, list: function(stream, state) { var match = stream.match(RE("list")); state.listDepth = match[0].length; var listMod = (state.listDepth - 1) % 3; if (!listMod) state.layoutType = "list1"; else if (listMod === 1) state.layoutType = "list2"; else state.layoutType = "list3"; state.mode = Modes.attributes; return tokenStyles(state); }, link: function(stream, state) { state.mode = Modes.text; if (stream.match(RE("link"))) { stream.match(/\S+/); return tokenStylesWith(state, TOKEN_STYLES.link); } return tokenStyles(state); }, linkDefinition: function(stream, state) { stream.skipToEnd(); return tokenStylesWith(state, TOKEN_STYLES.linkDefinition); }, definitionList: function(stream, state) { stream.match(RE("definitionList")); state.layoutType = "definitionList"; if (stream.match(/\s*$/)) state.spanningLayout = true; else state.mode = Modes.attributes; return tokenStyles(state); }, html: function(stream, state) { stream.skipToEnd(); return tokenStylesWith(state, TOKEN_STYLES.html); }, table: function(stream, state) { state.layoutType = "table"; return (state.mode = Modes.tableCell)(stream, state); }, tableCell: function(stream, state) { if (stream.match(RE("tableHeading"))) state.tableHeading = true; else stream.eat("|"); state.mode = Modes.tableCellAttributes; return tokenStyles(state); }, tableCellAttributes: function(stream, state) { state.mode = Modes.tableText; if (stream.match(RE("tableCellAttributes"))) return tokenStylesWith(state, TOKEN_STYLES.attributes); else return tokenStyles(state); }, tableText: function(stream, state) { if (stream.match(RE("tableText"))) return tokenStyles(state); if (stream.peek() === "|") { // end of cell state.mode = Modes.tableCell; return tokenStyles(state); } return handlePhraseModifier(stream, state, stream.next()); } }; CodeMirror.defineMode("textile", function() { return { startState: function() { return { mode: Modes.newLayout }; }, token: function(stream, state) { if (stream.sol()) startNewLine(stream, state); return state.mode(stream, state); }, blankLine: blankLine }; }); CodeMirror.defineMIME("text/x-textile", "textile"); }); application/library/codemirror/mode/erlang/erlang.js000064400000044645146731177160016714 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /*jshint unused:true, eqnull:true, curly:true, bitwise:true */ /*jshint undef:true, latedef:true, trailing:true */ /*global CodeMirror:true */ // erlang mode. // tokenizer -> token types -> CodeMirror styles // tokenizer maintains a parse stack // indenter uses the parse stack // TODO indenter: // bit syntax // old guard/bif/conversion clashes (e.g. "float/1") // type/spec/opaque (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMIME("text/x-erlang", "erlang"); CodeMirror.defineMode("erlang", function(cmCfg) { "use strict"; ///////////////////////////////////////////////////////////////////////////// // constants var typeWords = [ "-type", "-spec", "-export_type", "-opaque"]; var keywordWords = [ "after","begin","catch","case","cond","end","fun","if", "let","of","query","receive","try","when"]; var separatorRE = /[\->,;]/; var separatorWords = [ "->",";",","]; var operatorAtomWords = [ "and","andalso","band","bnot","bor","bsl","bsr","bxor", "div","not","or","orelse","rem","xor"]; var operatorSymbolRE = /[\+\-\*\/<>=\|:!]/; var operatorSymbolWords = [ "=","+","-","*","/",">",">=","<","=<","=:=","==","=/=","/=","||","<-","!"]; var openParenRE = /[<\(\[\{]/; var openParenWords = [ "<<","(","[","{"]; var closeParenRE = /[>\)\]\}]/; var closeParenWords = [ "}","]",")",">>"]; var guardWords = [ "is_atom","is_binary","is_bitstring","is_boolean","is_float", "is_function","is_integer","is_list","is_number","is_pid", "is_port","is_record","is_reference","is_tuple", "atom","binary","bitstring","boolean","function","integer","list", "number","pid","port","record","reference","tuple"]; var bifWords = [ "abs","adler32","adler32_combine","alive","apply","atom_to_binary", "atom_to_list","binary_to_atom","binary_to_existing_atom", "binary_to_list","binary_to_term","bit_size","bitstring_to_list", "byte_size","check_process_code","contact_binary","crc32", "crc32_combine","date","decode_packet","delete_module", "disconnect_node","element","erase","exit","float","float_to_list", "garbage_collect","get","get_keys","group_leader","halt","hd", "integer_to_list","internal_bif","iolist_size","iolist_to_binary", "is_alive","is_atom","is_binary","is_bitstring","is_boolean", "is_float","is_function","is_integer","is_list","is_number","is_pid", "is_port","is_process_alive","is_record","is_reference","is_tuple", "length","link","list_to_atom","list_to_binary","list_to_bitstring", "list_to_existing_atom","list_to_float","list_to_integer", "list_to_pid","list_to_tuple","load_module","make_ref","module_loaded", "monitor_node","node","node_link","node_unlink","nodes","notalive", "now","open_port","pid_to_list","port_close","port_command", "port_connect","port_control","pre_loaded","process_flag", "process_info","processes","purge_module","put","register", "registered","round","self","setelement","size","spawn","spawn_link", "spawn_monitor","spawn_opt","split_binary","statistics", "term_to_binary","time","throw","tl","trunc","tuple_size", "tuple_to_list","unlink","unregister","whereis"]; // upper case: [A-Z] [Ø-Þ] [À-Ö] // lower case: [a-z] [ß-ö] [ø-ÿ] var anumRE = /[\w@Ø-ÞÀ-Öß-öø-ÿ]/; var escapesRE = /[0-7]{1,3}|[bdefnrstv\\"']|\^[a-zA-Z]|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}/; ///////////////////////////////////////////////////////////////////////////// // tokenizer function tokenizer(stream,state) { // in multi-line string if (state.in_string) { state.in_string = (!doubleQuote(stream)); return rval(state,stream,"string"); } // in multi-line atom if (state.in_atom) { state.in_atom = (!singleQuote(stream)); return rval(state,stream,"atom"); } // whitespace if (stream.eatSpace()) { return rval(state,stream,"whitespace"); } // attributes and type specs if (!peekToken(state) && stream.match(/-\s*[a-zß-öø-ÿ][\wØ-ÞÀ-Öß-öø-ÿ]*/)) { if (is_member(stream.current(),typeWords)) { return rval(state,stream,"type"); }else{ return rval(state,stream,"attribute"); } } var ch = stream.next(); // comment if (ch == '%') { stream.skipToEnd(); return rval(state,stream,"comment"); } // colon if (ch == ":") { return rval(state,stream,"colon"); } // macro if (ch == '?') { stream.eatSpace(); stream.eatWhile(anumRE); return rval(state,stream,"macro"); } // record if (ch == "#") { stream.eatSpace(); stream.eatWhile(anumRE); return rval(state,stream,"record"); } // dollar escape if (ch == "$") { if (stream.next() == "\\" && !stream.match(escapesRE)) { return rval(state,stream,"error"); } return rval(state,stream,"number"); } // dot if (ch == ".") { return rval(state,stream,"dot"); } // quoted atom if (ch == '\'') { if (!(state.in_atom = (!singleQuote(stream)))) { if (stream.match(/\s*\/\s*[0-9]/,false)) { stream.match(/\s*\/\s*[0-9]/,true); return rval(state,stream,"fun"); // 'f'/0 style fun } if (stream.match(/\s*\(/,false) || stream.match(/\s*:/,false)) { return rval(state,stream,"function"); } } return rval(state,stream,"atom"); } // string if (ch == '"') { state.in_string = (!doubleQuote(stream)); return rval(state,stream,"string"); } // variable if (/[A-Z_Ø-ÞÀ-Ö]/.test(ch)) { stream.eatWhile(anumRE); return rval(state,stream,"variable"); } // atom/keyword/BIF/function if (/[a-z_ß-öø-ÿ]/.test(ch)) { stream.eatWhile(anumRE); if (stream.match(/\s*\/\s*[0-9]/,false)) { stream.match(/\s*\/\s*[0-9]/,true); return rval(state,stream,"fun"); // f/0 style fun } var w = stream.current(); if (is_member(w,keywordWords)) { return rval(state,stream,"keyword"); }else if (is_member(w,operatorAtomWords)) { return rval(state,stream,"operator"); }else if (stream.match(/\s*\(/,false)) { // 'put' and 'erlang:put' are bifs, 'foo:put' is not if (is_member(w,bifWords) && ((peekToken(state).token != ":") || (peekToken(state,2).token == "erlang"))) { return rval(state,stream,"builtin"); }else if (is_member(w,guardWords)) { return rval(state,stream,"guard"); }else{ return rval(state,stream,"function"); } }else if (lookahead(stream) == ":") { if (w == "erlang") { return rval(state,stream,"builtin"); } else { return rval(state,stream,"function"); } }else if (is_member(w,["true","false"])) { return rval(state,stream,"boolean"); }else{ return rval(state,stream,"atom"); } } // number var digitRE = /[0-9]/; var radixRE = /[0-9a-zA-Z]/; // 36#zZ style int if (digitRE.test(ch)) { stream.eatWhile(digitRE); if (stream.eat('#')) { // 36#aZ style integer if (!stream.eatWhile(radixRE)) { stream.backUp(1); //"36#" - syntax error } } else if (stream.eat('.')) { // float if (!stream.eatWhile(digitRE)) { stream.backUp(1); // "3." - probably end of function } else { if (stream.eat(/[eE]/)) { // float with exponent if (stream.eat(/[-+]/)) { if (!stream.eatWhile(digitRE)) { stream.backUp(2); // "2e-" - syntax error } } else { if (!stream.eatWhile(digitRE)) { stream.backUp(1); // "2e" - syntax error } } } } } return rval(state,stream,"number"); // normal integer } // open parens if (nongreedy(stream,openParenRE,openParenWords)) { return rval(state,stream,"open_paren"); } // close parens if (nongreedy(stream,closeParenRE,closeParenWords)) { return rval(state,stream,"close_paren"); } // separators if (greedy(stream,separatorRE,separatorWords)) { return rval(state,stream,"separator"); } // operators if (greedy(stream,operatorSymbolRE,operatorSymbolWords)) { return rval(state,stream,"operator"); } return rval(state,stream,null); } ///////////////////////////////////////////////////////////////////////////// // utilities function nongreedy(stream,re,words) { if (stream.current().length == 1 && re.test(stream.current())) { stream.backUp(1); while (re.test(stream.peek())) { stream.next(); if (is_member(stream.current(),words)) { return true; } } stream.backUp(stream.current().length-1); } return false; } function greedy(stream,re,words) { if (stream.current().length == 1 && re.test(stream.current())) { while (re.test(stream.peek())) { stream.next(); } while (0 < stream.current().length) { if (is_member(stream.current(),words)) { return true; }else{ stream.backUp(1); } } stream.next(); } return false; } function doubleQuote(stream) { return quote(stream, '"', '\\'); } function singleQuote(stream) { return quote(stream,'\'','\\'); } function quote(stream,quoteChar,escapeChar) { while (!stream.eol()) { var ch = stream.next(); if (ch == quoteChar) { return true; }else if (ch == escapeChar) { stream.next(); } } return false; } function lookahead(stream) { var m = stream.match(/([\n\s]+|%[^\n]*\n)*(.)/,false); return m ? m.pop() : ""; } function is_member(element,list) { return (-1 < list.indexOf(element)); } function rval(state,stream,type) { // parse stack pushToken(state,realToken(type,stream)); // map erlang token type to CodeMirror style class // erlang -> CodeMirror tag switch (type) { case "atom": return "atom"; case "attribute": return "attribute"; case "boolean": return "atom"; case "builtin": return "builtin"; case "close_paren": return null; case "colon": return null; case "comment": return "comment"; case "dot": return null; case "error": return "error"; case "fun": return "meta"; case "function": return "tag"; case "guard": return "property"; case "keyword": return "keyword"; case "macro": return "variable-2"; case "number": return "number"; case "open_paren": return null; case "operator": return "operator"; case "record": return "bracket"; case "separator": return null; case "string": return "string"; case "type": return "def"; case "variable": return "variable"; default: return null; } } function aToken(tok,col,ind,typ) { return {token: tok, column: col, indent: ind, type: typ}; } function realToken(type,stream) { return aToken(stream.current(), stream.column(), stream.indentation(), type); } function fakeToken(type) { return aToken(type,0,0,type); } function peekToken(state,depth) { var len = state.tokenStack.length; var dep = (depth ? depth : 1); if (len < dep) { return false; }else{ return state.tokenStack[len-dep]; } } function pushToken(state,token) { if (!(token.type == "comment" || token.type == "whitespace")) { state.tokenStack = maybe_drop_pre(state.tokenStack,token); state.tokenStack = maybe_drop_post(state.tokenStack); } } function maybe_drop_pre(s,token) { var last = s.length-1; if (0 < last && s[last].type === "record" && token.type === "dot") { s.pop(); }else if (0 < last && s[last].type === "group") { s.pop(); s.push(token); }else{ s.push(token); } return s; } function maybe_drop_post(s) { var last = s.length-1; if (s[last].type === "dot") { return []; } if (s[last].type === "fun" && s[last-1].token === "fun") { return s.slice(0,last-1); } switch (s[s.length-1].token) { case "}": return d(s,{g:["{"]}); case "]": return d(s,{i:["["]}); case ")": return d(s,{i:["("]}); case ">>": return d(s,{i:["<<"]}); case "end": return d(s,{i:["begin","case","fun","if","receive","try"]}); case ",": return d(s,{e:["begin","try","when","->", ",","(","[","{","<<"]}); case "->": return d(s,{r:["when"], m:["try","if","case","receive"]}); case ";": return d(s,{E:["case","fun","if","receive","try","when"]}); case "catch":return d(s,{e:["try"]}); case "of": return d(s,{e:["case"]}); case "after":return d(s,{e:["receive","try"]}); default: return s; } } function d(stack,tt) { // stack is a stack of Token objects. // tt is an object; {type:tokens} // type is a char, tokens is a list of token strings. // The function returns (possibly truncated) stack. // It will descend the stack, looking for a Token such that Token.token // is a member of tokens. If it does not find that, it will normally (but // see "E" below) return stack. If it does find a match, it will remove // all the Tokens between the top and the matched Token. // If type is "m", that is all it does. // If type is "i", it will also remove the matched Token and the top Token. // If type is "g", like "i", but add a fake "group" token at the top. // If type is "r", it will remove the matched Token, but not the top Token. // If type is "e", it will keep the matched Token but not the top Token. // If type is "E", it behaves as for type "e", except if there is no match, // in which case it will return an empty stack. for (var type in tt) { var len = stack.length-1; var tokens = tt[type]; for (var i = len-1; -1 < i ; i--) { if (is_member(stack[i].token,tokens)) { var ss = stack.slice(0,i); switch (type) { case "m": return ss.concat(stack[i]).concat(stack[len]); case "r": return ss.concat(stack[len]); case "i": return ss; case "g": return ss.concat(fakeToken("group")); case "E": return ss.concat(stack[i]); case "e": return ss.concat(stack[i]); } } } } return (type == "E" ? [] : stack); } ///////////////////////////////////////////////////////////////////////////// // indenter function indenter(state,textAfter) { var t; var unit = cmCfg.indentUnit; var wordAfter = wordafter(textAfter); var currT = peekToken(state,1); var prevT = peekToken(state,2); if (state.in_string || state.in_atom) { return CodeMirror.Pass; }else if (!prevT) { return 0; }else if (currT.token == "when") { return currT.column+unit; }else if (wordAfter === "when" && prevT.type === "function") { return prevT.indent+unit; }else if (wordAfter === "(" && currT.token === "fun") { return currT.column+3; }else if (wordAfter === "catch" && (t = getToken(state,["try"]))) { return t.column; }else if (is_member(wordAfter,["end","after","of"])) { t = getToken(state,["begin","case","fun","if","receive","try"]); return t ? t.column : CodeMirror.Pass; }else if (is_member(wordAfter,closeParenWords)) { t = getToken(state,openParenWords); return t ? t.column : CodeMirror.Pass; }else if (is_member(currT.token,[",","|","||"]) || is_member(wordAfter,[",","|","||"])) { t = postcommaToken(state); return t ? t.column+t.token.length : unit; }else if (currT.token == "->") { if (is_member(prevT.token, ["receive","case","if","try"])) { return prevT.column+unit+unit; }else{ return prevT.column+unit; } }else if (is_member(currT.token,openParenWords)) { return currT.column+currT.token.length; }else{ t = defaultToken(state); return truthy(t) ? t.column+unit : 0; } } function wordafter(str) { var m = str.match(/,|[a-z]+|\}|\]|\)|>>|\|+|\(/); return truthy(m) && (m.index === 0) ? m[0] : ""; } function postcommaToken(state) { var objs = state.tokenStack.slice(0,-1); var i = getTokenIndex(objs,"type",["open_paren"]); return truthy(objs[i]) ? objs[i] : false; } function defaultToken(state) { var objs = state.tokenStack; var stop = getTokenIndex(objs,"type",["open_paren","separator","keyword"]); var oper = getTokenIndex(objs,"type",["operator"]); if (truthy(stop) && truthy(oper) && stop < oper) { return objs[stop+1]; } else if (truthy(stop)) { return objs[stop]; } else { return false; } } function getToken(state,tokens) { var objs = state.tokenStack; var i = getTokenIndex(objs,"token",tokens); return truthy(objs[i]) ? objs[i] : false; } function getTokenIndex(objs,propname,propvals) { for (var i = objs.length-1; -1 < i ; i--) { if (is_member(objs[i][propname],propvals)) { return i; } } return false; } function truthy(x) { return (x !== false) && (x != null); } ///////////////////////////////////////////////////////////////////////////// // this object defines the mode return { startState: function() { return {tokenStack: [], in_string: false, in_atom: false}; }, token: function(stream, state) { return tokenizer(stream, state); }, indent: function(state, textAfter) { return indenter(state,textAfter); }, lineComment: "%" }; }); }); application/library/codemirror/mode/erlang/index.html000064400000004170146731177160017070 0ustar00 CodeMirror: Erlang mode

Erlang mode

MIME types defined: text/x-erlang.

application/library/codemirror/mode/oz/oz.js000064400000015002146731177160015235 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("oz", function (conf) { function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var singleOperators = /[\^@!\|<>#~\.\*\-\+\\/,=]/; var doubleOperators = /(<-)|(:=)|(=<)|(>=)|(<=)|(<:)|(>:)|(=:)|(\\=)|(\\=:)|(!!)|(==)|(::)/; var tripleOperators = /(:::)|(\.\.\.)|(=<:)|(>=:)/; var middle = ["in", "then", "else", "of", "elseof", "elsecase", "elseif", "catch", "finally", "with", "require", "prepare", "import", "export", "define", "do"]; var end = ["end"]; var atoms = wordRegexp(["true", "false", "nil", "unit"]); var commonKeywords = wordRegexp(["andthen", "at", "attr", "declare", "feat", "from", "lex", "mod", "mode", "orelse", "parser", "prod", "prop", "scanner", "self", "syn", "token"]); var openingKeywords = wordRegexp(["local", "proc", "fun", "case", "class", "if", "cond", "or", "dis", "choice", "not", "thread", "try", "raise", "lock", "for", "suchthat", "meth", "functor"]); var middleKeywords = wordRegexp(middle); var endKeywords = wordRegexp(end); // Tokenizers function tokenBase(stream, state) { if (stream.eatSpace()) { return null; } // Brackets if(stream.match(/[{}]/)) { return "bracket"; } // Special [] keyword if (stream.match(/(\[])/)) { return "keyword" } // Operators if (stream.match(tripleOperators) || stream.match(doubleOperators)) { return "operator"; } // Atoms if(stream.match(atoms)) { return 'atom'; } // Opening keywords var matched = stream.match(openingKeywords); if (matched) { if (!state.doInCurrentLine) state.currentIndent++; else state.doInCurrentLine = false; // Special matching for signatures if(matched[0] == "proc" || matched[0] == "fun") state.tokenize = tokenFunProc; else if(matched[0] == "class") state.tokenize = tokenClass; else if(matched[0] == "meth") state.tokenize = tokenMeth; return 'keyword'; } // Middle and other keywords if (stream.match(middleKeywords) || stream.match(commonKeywords)) { return "keyword" } // End keywords if (stream.match(endKeywords)) { state.currentIndent--; return 'keyword'; } // Eat the next char for next comparisons var ch = stream.next(); // Strings if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } // Numbers if (/[~\d]/.test(ch)) { if (ch == "~") { if(! /^[0-9]/.test(stream.peek())) return null; else if (( stream.next() == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)) return "number"; } if ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)) return "number"; return null; } // Comments if (ch == "%") { stream.skipToEnd(); return 'comment'; } else if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } } // Single operators if(singleOperators.test(ch)) { return "operator"; } // If nothing match, we skip the entire alphanumerical block stream.eatWhile(/\w/); return "variable"; } function tokenClass(stream, state) { if (stream.eatSpace()) { return null; } stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)/); state.tokenize = tokenBase; return "variable-3" } function tokenMeth(stream, state) { if (stream.eatSpace()) { return null; } stream.match(/([a-zA-Z][A-Za-z0-9_]*)|(`.+`)/); state.tokenize = tokenBase; return "def" } function tokenFunProc(stream, state) { if (stream.eatSpace()) { return null; } if(!state.hasPassedFirstStage && stream.eat("{")) { state.hasPassedFirstStage = true; return "bracket"; } else if(state.hasPassedFirstStage) { stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)|\$/); state.hasPassedFirstStage = false; state.tokenize = tokenBase; return "def" } else { state.tokenize = tokenBase; return null; } } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenString(quote) { return function (stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = tokenBase; return "string"; }; } function buildElectricInputRegEx() { // Reindentation should occur on [] or on a match of any of // the block closing keywords, at the end of a line. var allClosings = middle.concat(end); return new RegExp("[\\[\\]]|(" + allClosings.join("|") + ")$"); } return { startState: function () { return { tokenize: tokenBase, currentIndent: 0, doInCurrentLine: false, hasPassedFirstStage: false }; }, token: function (stream, state) { if (stream.sol()) state.doInCurrentLine = 0; return state.tokenize(stream, state); }, indent: function (state, textAfter) { var trueText = textAfter.replace(/^\s+|\s+$/g, ''); if (trueText.match(endKeywords) || trueText.match(middleKeywords) || trueText.match(/(\[])/)) return conf.indentUnit * (state.currentIndent - 1); if (state.currentIndent < 0) return 0; return state.currentIndent * conf.indentUnit; }, fold: "indent", electricInput: buildElectricInputRegEx(), lineComment: "%", blockCommentStart: "/*", blockCommentEnd: "*/" }; }); CodeMirror.defineMIME("text/x-oz", "oz"); }); application/library/codemirror/mode/oz/index.html000064400000002555146731177160016255 0ustar00 CodeMirror: Oz mode

Oz mode

MIME type defined: text/x-oz.

application/library/codemirror/mode/tiki/tiki.js000064400000020452146731177160016062 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('tiki', function(config) { function inBlock(style, terminator, returnTokenizer) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { state.tokenize = inText; break; } stream.next(); } if (returnTokenizer) state.tokenize = returnTokenizer; return style; }; } function inLine(style) { return function(stream, state) { while(!stream.eol()) { stream.next(); } state.tokenize = inText; return style; }; } function inText(stream, state) { function chain(parser) { state.tokenize = parser; return parser(stream, state); } var sol = stream.sol(); var ch = stream.next(); //non start of line switch (ch) { //switch is generally much faster than if, so it is used here case "{": //plugin stream.eat("/"); stream.eatSpace(); stream.eatWhile(/[^\s\u00a0=\"\'\/?(}]/); state.tokenize = inPlugin; return "tag"; case "_": //bold if (stream.eat("_")) return chain(inBlock("strong", "__", inText)); break; case "'": //italics if (stream.eat("'")) return chain(inBlock("em", "''", inText)); break; case "(":// Wiki Link if (stream.eat("(")) return chain(inBlock("variable-2", "))", inText)); break; case "[":// Weblink return chain(inBlock("variable-3", "]", inText)); break; case "|": //table if (stream.eat("|")) return chain(inBlock("comment", "||")); break; case "-": if (stream.eat("=")) {//titleBar return chain(inBlock("header string", "=-", inText)); } else if (stream.eat("-")) {//deleted return chain(inBlock("error tw-deleted", "--", inText)); } break; case "=": //underline if (stream.match("==")) return chain(inBlock("tw-underline", "===", inText)); break; case ":": if (stream.eat(":")) return chain(inBlock("comment", "::")); break; case "^": //box return chain(inBlock("tw-box", "^")); break; case "~": //np if (stream.match("np~")) return chain(inBlock("meta", "~/np~")); break; } //start of line types if (sol) { switch (ch) { case "!": //header at start of line if (stream.match('!!!!!')) { return chain(inLine("header string")); } else if (stream.match('!!!!')) { return chain(inLine("header string")); } else if (stream.match('!!!')) { return chain(inLine("header string")); } else if (stream.match('!!')) { return chain(inLine("header string")); } else { return chain(inLine("header string")); } break; case "*": //unordered list line item, or
  • at start of line case "#": //ordered list line item, or
  • at start of line case "+": //ordered list line item, or
  • at start of line return chain(inLine("tw-listitem bracket")); break; } } //stream.eatWhile(/[&{]/); was eating up plugins, turned off to act less like html and more like tiki return null; } var indentUnit = config.indentUnit; // Return variables for tokenizers var pluginName, type; function inPlugin(stream, state) { var ch = stream.next(); var peek = stream.peek(); if (ch == "}") { state.tokenize = inText; //type = ch == ")" ? "endPlugin" : "selfclosePlugin"; inPlugin return "tag"; } else if (ch == "(" || ch == ")") { return "bracket"; } else if (ch == "=") { type = "equals"; if (peek == ">") { ch = stream.next(); peek = stream.peek(); } //here we detect values directly after equal character with no quotes if (!/[\'\"]/.test(peek)) { state.tokenize = inAttributeNoQuote(); } //end detect values return "operator"; } else if (/[\'\"]/.test(ch)) { state.tokenize = inAttribute(ch); return state.tokenize(stream, state); } else { stream.eatWhile(/[^\s\u00a0=\"\'\/?]/); return "keyword"; } } function inAttribute(quote) { return function(stream, state) { while (!stream.eol()) { if (stream.next() == quote) { state.tokenize = inPlugin; break; } } return "string"; }; } function inAttributeNoQuote() { return function(stream, state) { while (!stream.eol()) { var ch = stream.next(); var peek = stream.peek(); if (ch == " " || ch == "," || /[ )}]/.test(peek)) { state.tokenize = inPlugin; break; } } return "string"; }; } var curState, setStyle; function pass() { for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function pushContext(pluginName, startOfLine) { var noIndent = curState.context && curState.context.noIndent; curState.context = { prev: curState.context, pluginName: pluginName, indent: curState.indented, startOfLine: startOfLine, noIndent: noIndent }; } function popContext() { if (curState.context) curState.context = curState.context.prev; } function element(type) { if (type == "openPlugin") {curState.pluginName = pluginName; return cont(attributes, endplugin(curState.startOfLine));} else if (type == "closePlugin") { var err = false; if (curState.context) { err = curState.context.pluginName != pluginName; popContext(); } else { err = true; } if (err) setStyle = "error"; return cont(endcloseplugin(err)); } else if (type == "string") { if (!curState.context || curState.context.name != "!cdata") pushContext("!cdata"); if (curState.tokenize == inText) popContext(); return cont(); } else return cont(); } function endplugin(startOfLine) { return function(type) { if ( type == "selfclosePlugin" || type == "endPlugin" ) return cont(); if (type == "endPlugin") {pushContext(curState.pluginName, startOfLine); return cont();} return cont(); }; } function endcloseplugin(err) { return function(type) { if (err) setStyle = "error"; if (type == "endPlugin") return cont(); return pass(); }; } function attributes(type) { if (type == "keyword") {setStyle = "attribute"; return cont(attributes);} if (type == "equals") return cont(attvalue, attributes); return pass(); } function attvalue(type) { if (type == "keyword") {setStyle = "string"; return cont();} if (type == "string") return cont(attvaluemaybe); return pass(); } function attvaluemaybe(type) { if (type == "string") return cont(attvaluemaybe); else return pass(); } return { startState: function() { return {tokenize: inText, cc: [], indented: 0, startOfLine: true, pluginName: null, context: null}; }, token: function(stream, state) { if (stream.sol()) { state.startOfLine = true; state.indented = stream.indentation(); } if (stream.eatSpace()) return null; setStyle = type = pluginName = null; var style = state.tokenize(stream, state); if ((style || type) && style != "comment") { curState = state; while (true) { var comb = state.cc.pop() || element; if (comb(type || style)) break; } } state.startOfLine = false; return setStyle || style; }, indent: function(state, textAfter) { var context = state.context; if (context && context.noIndent) return 0; if (context && /^{\//.test(textAfter)) context = context.prev; while (context && !context.startOfLine) context = context.prev; if (context) return context.indent + indentUnit; else return 0; }, electricChars: "/" }; }); CodeMirror.defineMIME("text/tiki", "tiki"); }); application/library/codemirror/mode/tiki/index.html000064400000003321146731177160016555 0ustar00 CodeMirror: Tiki wiki mode

    Tiki wiki mode

    application/library/codemirror/mode/tiki/tiki.css000064400000000667146731177160016244 0ustar00.cm-tw-syntaxerror { color: #FFF; background-color: #900; } .cm-tw-deleted { text-decoration: line-through; } .cm-tw-header5 { font-weight: bold; } .cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ padding-left: 10px; } .cm-tw-box { border-top-width: 0px !important; border-style: solid; border-width: 1px; border-color: inherit; } .cm-tw-underline { text-decoration: underline; }application/library/codemirror/mode/toml/toml.js000064400000005521146731177160016110 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("toml", function () { return { startState: function () { return { inString: false, stringType: "", lhs: true, inArray: 0 }; }, token: function (stream, state) { //check for state changes if (!state.inString && ((stream.peek() == '"') || (stream.peek() == "'"))) { state.stringType = stream.peek(); stream.next(); // Skip quote state.inString = true; // Update state } if (stream.sol() && state.inArray === 0) { state.lhs = true; } //return state if (state.inString) { while (state.inString && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.inString = false; // Clear flag } else if (stream.peek() === '\\') { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return state.lhs ? "property string" : "string"; // Token style } else if (state.inArray && stream.peek() === ']') { stream.next(); state.inArray--; return 'bracket'; } else if (state.lhs && stream.peek() === '[' && stream.skipTo(']')) { stream.next();//skip closing ] // array of objects has an extra open & close [] if (stream.peek() === ']') stream.next(); return "atom"; } else if (stream.peek() === "#") { stream.skipToEnd(); return "comment"; } else if (stream.eatSpace()) { return null; } else if (state.lhs && stream.eatWhile(function (c) { return c != '=' && c != ' '; })) { return "property"; } else if (state.lhs && stream.peek() === "=") { stream.next(); state.lhs = false; return null; } else if (!state.lhs && stream.match(/^\d\d\d\d[\d\-\:\.T]*Z/)) { return 'atom'; //date } else if (!state.lhs && (stream.match('true') || stream.match('false'))) { return 'atom'; } else if (!state.lhs && stream.peek() === '[') { state.inArray++; stream.next(); return 'bracket'; } else if (!state.lhs && stream.match(/^\-?\d+(?:\.\d+)?/)) { return 'number'; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }); CodeMirror.defineMIME('text/x-toml', 'toml'); }); application/library/codemirror/mode/toml/index.html000064400000003460146731177160016574 0ustar00 CodeMirror: TOML Mode

    TOML Mode

    The TOML Mode

    Created by Forbes Lindesay.

    MIME type defined: text/x-toml.

    application/library/codemirror/mode/go/index.html000064400000004176146731177160016233 0ustar00 CodeMirror: Go mode

    Go mode

    MIME type: text/x-go

    application/library/codemirror/mode/go/go.js000064400000013501146731177160015171 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("go", function(config) { var indentUnit = config.indentUnit; var keywords = { "break":true, "case":true, "chan":true, "const":true, "continue":true, "default":true, "defer":true, "else":true, "fallthrough":true, "for":true, "func":true, "go":true, "goto":true, "if":true, "import":true, "interface":true, "map":true, "package":true, "range":true, "return":true, "select":true, "struct":true, "switch":true, "type":true, "var":true, "bool":true, "byte":true, "complex64":true, "complex128":true, "float32":true, "float64":true, "int8":true, "int16":true, "int32":true, "int64":true, "string":true, "uint8":true, "uint16":true, "uint32":true, "uint64":true, "int":true, "uint":true, "uintptr":true, "error": true }; var atoms = { "true":true, "false":true, "iota":true, "nil":true, "append":true, "cap":true, "close":true, "complex":true, "copy":true, "imag":true, "len":true, "make":true, "new":true, "panic":true, "print":true, "println":true, "real":true, "recover":true }; var isOperatorChar = /[+\-*&^%:=<>!|\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'" || ch == "`") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\d\.]/.test(ch)) { if (ch == ".") { stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); } else if (ch == "0") { stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); } else { stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); } return "number"; } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) { if (cur == "case" || cur == "default") curPunc = "case"; return "keyword"; } if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && quote != "`" && next == "\\"; } if (end || !(escaped || quote == "`")) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { if (!state.context.prev) return; var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; if (ctx.type == "case") ctx.type = "}"; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "case") ctx.type = "case"; else if (curPunc == "}" && ctx.type == "}") ctx = popContext(state); else if (curPunc == ctx.type) popContext(state); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return 0; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "case" && /^(?:case|default)\b/.test(textAfter)) { state.context.type = "}"; return ctx.indented; } var closing = firstChar == ctx.type; if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "{}):", fold: "brace", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-go", "go"); }); application/library/codemirror/mode/turtle/turtle.js000064400000011361146731177160017017 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("turtle", function(config) { var indentUnit = config.indentUnit; var curPunc; function wordRegexp(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); } var ops = wordRegexp([]); var keywords = wordRegexp(["@prefix", "@base", "a"]); var operatorChars = /[*+\-<>=&|]/; function tokenBase(stream, state) { var ch = stream.next(); curPunc = null; if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { stream.match(/^[^\s\u00a0>]*>?/); return "atom"; } else if (ch == "\"" || ch == "'") { state.tokenize = tokenLiteral(ch); return state.tokenize(stream, state); } else if (/[{}\(\),\.;\[\]]/.test(ch)) { curPunc = ch; return null; } else if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (operatorChars.test(ch)) { stream.eatWhile(operatorChars); return null; } else if (ch == ":") { return "operator"; } else { stream.eatWhile(/[_\w\d]/); if(stream.peek() == ":") { return "variable-3"; } else { var word = stream.current(); if(keywords.test(word)) { return "meta"; } if(ch >= "A" && ch <= "Z") { return "comment"; } else { return "keyword"; } } var word = stream.current(); if (ops.test(word)) return null; else if (keywords.test(word)) return "meta"; else return "variable"; } } function tokenLiteral(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return "string"; }; } function pushContext(state, type, col) { state.context = {prev: state.context, indent: state.indent, col: col, type: type}; } function popContext(state) { state.indent = state.context.indent; state.context = state.context.prev; } return { startState: function() { return {tokenize: tokenBase, context: null, indent: 0, col: 0}; }, token: function(stream, state) { if (stream.sol()) { if (state.context && state.context.align == null) state.context.align = false; state.indent = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { state.context.align = true; } if (curPunc == "(") pushContext(state, ")", stream.column()); else if (curPunc == "[") pushContext(state, "]", stream.column()); else if (curPunc == "{") pushContext(state, "}", stream.column()); else if (/[\]\}\)]/.test(curPunc)) { while (state.context && state.context.type == "pattern") popContext(state); if (state.context && curPunc == state.context.type) popContext(state); } else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); else if (/atom|string|variable/.test(style) && state.context) { if (/[\}\]]/.test(state.context.type)) pushContext(state, "pattern", stream.column()); else if (state.context.type == "pattern" && !state.context.align) { state.context.align = true; state.context.col = stream.column(); } } return style; }, indent: function(state, textAfter) { var firstChar = textAfter && textAfter.charAt(0); var context = state.context; if (/[\]\}]/.test(firstChar)) while (context && context.type == "pattern") context = context.prev; var closing = context && firstChar == context.type; if (!context) return 0; else if (context.type == "pattern") return context.col; else if (context.align) return context.col + (closing ? 0 : 1); else return context.indent + (closing ? 0 : indentUnit); }, lineComment: "#" }; }); CodeMirror.defineMIME("text/turtle", "turtle"); }); application/library/codemirror/mode/turtle/index.html000064400000002676146731177160017150 0ustar00 CodeMirror: Turtle mode

    Turtle mode

    MIME types defined: text/turtle.

    application/library/codemirror/mode/webidl/webidl.js000064400000013230146731177160016672 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); }; var builtinArray = [ "Clamp", "Constructor", "EnforceRange", "Exposed", "ImplicitThis", "Global", "PrimaryGlobal", "LegacyArrayClass", "LegacyUnenumerableNamedProperties", "LenientThis", "NamedConstructor", "NewObject", "NoInterfaceObject", "OverrideBuiltins", "PutForwards", "Replaceable", "SameObject", "TreatNonObjectAsNull", "TreatNullAs", "EmptyString", "Unforgeable", "Unscopeable" ]; var builtins = wordRegexp(builtinArray); var typeArray = [ "unsigned", "short", "long", // UnsignedIntegerType "unrestricted", "float", "double", // UnrestrictedFloatType "boolean", "byte", "octet", // Rest of PrimitiveType "Promise", // PromiseType "ArrayBuffer", "DataView", "Int8Array", "Int16Array", "Int32Array", "Uint8Array", "Uint16Array", "Uint32Array", "Uint8ClampedArray", "Float32Array", "Float64Array", // BufferRelatedType "ByteString", "DOMString", "USVString", "sequence", "object", "RegExp", "Error", "DOMException", "FrozenArray", // Rest of NonAnyType "any", // Rest of SingleType "void" // Rest of ReturnType ]; var types = wordRegexp(typeArray); var keywordArray = [ "attribute", "callback", "const", "deleter", "dictionary", "enum", "getter", "implements", "inherit", "interface", "iterable", "legacycaller", "maplike", "partial", "required", "serializer", "setlike", "setter", "static", "stringifier", "typedef", // ArgumentNameKeyword except // "unrestricted" "optional", "readonly", "or" ]; var keywords = wordRegexp(keywordArray); var atomArray = [ "true", "false", // BooleanLiteral "Infinity", "NaN", // FloatLiteral "null" // Rest of ConstValue ]; var atoms = wordRegexp(atomArray); CodeMirror.registerHelper("hintWords", "webidl", builtinArray.concat(typeArray).concat(keywordArray).concat(atomArray)); var startDefArray = ["callback", "dictionary", "enum", "interface"]; var startDefs = wordRegexp(startDefArray); var endDefArray = ["typedef"]; var endDefs = wordRegexp(endDefArray); var singleOperators = /^[:<=>?]/; var integers = /^-?([1-9][0-9]*|0[Xx][0-9A-Fa-f]+|0[0-7]*)/; var floats = /^-?(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][+-]?[0-9]+)?|[0-9]+[Ee][+-]?[0-9]+)/; var identifiers = /^_?[A-Za-z][0-9A-Z_a-z-]*/; var identifiersEnd = /^_?[A-Za-z][0-9A-Z_a-z-]*(?=\s*;)/; var strings = /^"[^"]*"/; var multilineComments = /^\/\*.*?\*\//; var multilineCommentsStart = /^\/\*.*/; var multilineCommentsEnd = /^.*?\*\//; function readToken(stream, state) { // whitespace if (stream.eatSpace()) return null; // comment if (state.inComment) { if (stream.match(multilineCommentsEnd)) { state.inComment = false; return "comment"; } stream.skipToEnd(); return "comment"; } if (stream.match("//")) { stream.skipToEnd(); return "comment"; } if (stream.match(multilineComments)) return "comment"; if (stream.match(multilineCommentsStart)) { state.inComment = true; return "comment"; } // integer and float if (stream.match(/^-?[0-9\.]/, false)) { if (stream.match(integers) || stream.match(floats)) return "number"; } // string if (stream.match(strings)) return "string"; // identifier if (state.startDef && stream.match(identifiers)) return "def"; if (state.endDef && stream.match(identifiersEnd)) { state.endDef = false; return "def"; } if (stream.match(keywords)) return "keyword"; if (stream.match(types)) { var lastToken = state.lastToken; var nextToken = (stream.match(/^\s*(.+?)\b/, false) || [])[1]; if (lastToken === ":" || lastToken === "implements" || nextToken === "implements" || nextToken === "=") { // Used as identifier return "builtin"; } else { // Used as type return "variable-3"; } } if (stream.match(builtins)) return "builtin"; if (stream.match(atoms)) return "atom"; if (stream.match(identifiers)) return "variable"; // other if (stream.match(singleOperators)) return "operator"; // unrecognized stream.next(); return null; }; CodeMirror.defineMode("webidl", function() { return { startState: function() { return { // Is in multiline comment inComment: false, // Last non-whitespace, matched token lastToken: "", // Next token is a definition startDef: false, // Last token of the statement is a definition endDef: false }; }, token: function(stream, state) { var style = readToken(stream, state); if (style) { var cur = stream.current(); state.lastToken = cur; if (style === "keyword") { state.startDef = startDefs.test(cur); state.endDef = state.endDef || endDefs.test(cur); } else { state.startDef = false; } } return style; } }; }); CodeMirror.defineMIME("text/x-webidl", "webidl"); }); application/library/codemirror/mode/webidl/index.html000064400000004173146731177160017071 0ustar00 CodeMirror: Web IDL mode

    Web IDL mode

    MIME type defined: text/x-webidl.

    application/library/codemirror/mode/troff/troff.js000064400000004530146731177160016421 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('troff', function() { var words = {}; function tokenBase(stream) { if (stream.eatSpace()) return null; var sol = stream.sol(); var ch = stream.next(); if (ch === '\\') { if (stream.match('fB') || stream.match('fR') || stream.match('fI') || stream.match('u') || stream.match('d') || stream.match('%') || stream.match('&')) { return 'string'; } if (stream.match('m[')) { stream.skipTo(']'); stream.next(); return 'string'; } if (stream.match('s+') || stream.match('s-')) { stream.eatWhile(/[\d-]/); return 'string'; } if (stream.match('\(') || stream.match('*\(')) { stream.eatWhile(/[\w-]/); return 'string'; } return 'string'; } if (sol && (ch === '.' || ch === '\'')) { if (stream.eat('\\') && stream.eat('\"')) { stream.skipToEnd(); return 'comment'; } } if (sol && ch === '.') { if (stream.match('B ') || stream.match('I ') || stream.match('R ')) { return 'attribute'; } if (stream.match('TH ') || stream.match('SH ') || stream.match('SS ') || stream.match('HP ')) { stream.skipToEnd(); return 'quote'; } if ((stream.match(/[A-Z]/) && stream.match(/[A-Z]/)) || (stream.match(/[a-z]/) && stream.match(/[a-z]/))) { return 'attribute'; } } stream.eatWhile(/[\w-]/); var cur = stream.current(); return words.hasOwnProperty(cur) ? words[cur] : null; } function tokenize(stream, state) { return (state.tokens[0] || tokenBase) (stream, state); }; return { startState: function() {return {tokens:[]};}, token: function(stream, state) { return tokenize(stream, state); } }; }); CodeMirror.defineMIME('text/troff', 'troff'); CodeMirror.defineMIME('text/x-troff', 'troff'); CodeMirror.defineMIME('application/x-troff', 'troff'); }); application/library/codemirror/mode/troff/index.html000064400000010561146731177160016741 0ustar00 CodeMirror: troff mode

    troff

    MIME types defined: troff.

    application/library/codemirror/mode/perl/index.html000064400000003006146731177160016557 0ustar00 CodeMirror: Perl mode

    Perl mode

    MIME types defined: text/x-perl.

    application/library/codemirror/mode/perl/perl.js000064400000155507146731177160016100 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // CodeMirror2 mode/perl/perl.js (text/x-perl) beta 0.10 (2011-11-08) // This is a part of CodeMirror from https://github.com/sabaca/CodeMirror_mode_perl (mail@sabaca.com) (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("perl",function(){ // http://perldoc.perl.org var PERL={ // null - magic touch // 1 - keyword // 2 - def // 3 - atom // 4 - operator // 5 - variable-2 (predefined) // [x,y] - x=1,2,3; y=must be defined if x{...} // PERL operators '->' : 4, '++' : 4, '--' : 4, '**' : 4, // ! ~ \ and unary + and - '=~' : 4, '!~' : 4, '*' : 4, '/' : 4, '%' : 4, 'x' : 4, '+' : 4, '-' : 4, '.' : 4, '<<' : 4, '>>' : 4, // named unary operators '<' : 4, '>' : 4, '<=' : 4, '>=' : 4, 'lt' : 4, 'gt' : 4, 'le' : 4, 'ge' : 4, '==' : 4, '!=' : 4, '<=>' : 4, 'eq' : 4, 'ne' : 4, 'cmp' : 4, '~~' : 4, '&' : 4, '|' : 4, '^' : 4, '&&' : 4, '||' : 4, '//' : 4, '..' : 4, '...' : 4, '?' : 4, ':' : 4, '=' : 4, '+=' : 4, '-=' : 4, '*=' : 4, // etc. ??? ',' : 4, '=>' : 4, '::' : 4, // list operators (rightward) 'not' : 4, 'and' : 4, 'or' : 4, 'xor' : 4, // PERL predefined variables (I know, what this is a paranoid idea, but may be needed for people, who learn PERL, and for me as well, ...and may be for you?;) 'BEGIN' : [5,1], 'END' : [5,1], 'PRINT' : [5,1], 'PRINTF' : [5,1], 'GETC' : [5,1], 'READ' : [5,1], 'READLINE' : [5,1], 'DESTROY' : [5,1], 'TIE' : [5,1], 'TIEHANDLE' : [5,1], 'UNTIE' : [5,1], 'STDIN' : 5, 'STDIN_TOP' : 5, 'STDOUT' : 5, 'STDOUT_TOP' : 5, 'STDERR' : 5, 'STDERR_TOP' : 5, '$ARG' : 5, '$_' : 5, '@ARG' : 5, '@_' : 5, '$LIST_SEPARATOR' : 5, '$"' : 5, '$PROCESS_ID' : 5, '$PID' : 5, '$$' : 5, '$REAL_GROUP_ID' : 5, '$GID' : 5, '$(' : 5, '$EFFECTIVE_GROUP_ID' : 5, '$EGID' : 5, '$)' : 5, '$PROGRAM_NAME' : 5, '$0' : 5, '$SUBSCRIPT_SEPARATOR' : 5, '$SUBSEP' : 5, '$;' : 5, '$REAL_USER_ID' : 5, '$UID' : 5, '$<' : 5, '$EFFECTIVE_USER_ID' : 5, '$EUID' : 5, '$>' : 5, '$a' : 5, '$b' : 5, '$COMPILING' : 5, '$^C' : 5, '$DEBUGGING' : 5, '$^D' : 5, '${^ENCODING}' : 5, '$ENV' : 5, '%ENV' : 5, '$SYSTEM_FD_MAX' : 5, '$^F' : 5, '@F' : 5, '${^GLOBAL_PHASE}' : 5, '$^H' : 5, '%^H' : 5, '@INC' : 5, '%INC' : 5, '$INPLACE_EDIT' : 5, '$^I' : 5, '$^M' : 5, '$OSNAME' : 5, '$^O' : 5, '${^OPEN}' : 5, '$PERLDB' : 5, '$^P' : 5, '$SIG' : 5, '%SIG' : 5, '$BASETIME' : 5, '$^T' : 5, '${^TAINT}' : 5, '${^UNICODE}' : 5, '${^UTF8CACHE}' : 5, '${^UTF8LOCALE}' : 5, '$PERL_VERSION' : 5, '$^V' : 5, '${^WIN32_SLOPPY_STAT}' : 5, '$EXECUTABLE_NAME' : 5, '$^X' : 5, '$1' : 5, // - regexp $1, $2... '$MATCH' : 5, '$&' : 5, '${^MATCH}' : 5, '$PREMATCH' : 5, '$`' : 5, '${^PREMATCH}' : 5, '$POSTMATCH' : 5, "$'" : 5, '${^POSTMATCH}' : 5, '$LAST_PAREN_MATCH' : 5, '$+' : 5, '$LAST_SUBMATCH_RESULT' : 5, '$^N' : 5, '@LAST_MATCH_END' : 5, '@+' : 5, '%LAST_PAREN_MATCH' : 5, '%+' : 5, '@LAST_MATCH_START' : 5, '@-' : 5, '%LAST_MATCH_START' : 5, '%-' : 5, '$LAST_REGEXP_CODE_RESULT' : 5, '$^R' : 5, '${^RE_DEBUG_FLAGS}' : 5, '${^RE_TRIE_MAXBUF}' : 5, '$ARGV' : 5, '@ARGV' : 5, 'ARGV' : 5, 'ARGVOUT' : 5, '$OUTPUT_FIELD_SEPARATOR' : 5, '$OFS' : 5, '$,' : 5, '$INPUT_LINE_NUMBER' : 5, '$NR' : 5, '$.' : 5, '$INPUT_RECORD_SEPARATOR' : 5, '$RS' : 5, '$/' : 5, '$OUTPUT_RECORD_SEPARATOR' : 5, '$ORS' : 5, '$\\' : 5, '$OUTPUT_AUTOFLUSH' : 5, '$|' : 5, '$ACCUMULATOR' : 5, '$^A' : 5, '$FORMAT_FORMFEED' : 5, '$^L' : 5, '$FORMAT_PAGE_NUMBER' : 5, '$%' : 5, '$FORMAT_LINES_LEFT' : 5, '$-' : 5, '$FORMAT_LINE_BREAK_CHARACTERS' : 5, '$:' : 5, '$FORMAT_LINES_PER_PAGE' : 5, '$=' : 5, '$FORMAT_TOP_NAME' : 5, '$^' : 5, '$FORMAT_NAME' : 5, '$~' : 5, '${^CHILD_ERROR_NATIVE}' : 5, '$EXTENDED_OS_ERROR' : 5, '$^E' : 5, '$EXCEPTIONS_BEING_CAUGHT' : 5, '$^S' : 5, '$WARNING' : 5, '$^W' : 5, '${^WARNING_BITS}' : 5, '$OS_ERROR' : 5, '$ERRNO' : 5, '$!' : 5, '%OS_ERROR' : 5, '%ERRNO' : 5, '%!' : 5, '$CHILD_ERROR' : 5, '$?' : 5, '$EVAL_ERROR' : 5, '$@' : 5, '$OFMT' : 5, '$#' : 5, '$*' : 5, '$ARRAY_BASE' : 5, '$[' : 5, '$OLD_PERL_VERSION' : 5, '$]' : 5, // PERL blocks 'if' :[1,1], elsif :[1,1], 'else' :[1,1], 'while' :[1,1], unless :[1,1], 'for' :[1,1], foreach :[1,1], // PERL functions 'abs' :1, // - absolute value function accept :1, // - accept an incoming socket connect alarm :1, // - schedule a SIGALRM 'atan2' :1, // - arctangent of Y/X in the range -PI to PI bind :1, // - binds an address to a socket binmode :1, // - prepare binary files for I/O bless :1, // - create an object bootstrap :1, // 'break' :1, // - break out of a "given" block caller :1, // - get context of the current subroutine call chdir :1, // - change your current working directory chmod :1, // - changes the permissions on a list of files chomp :1, // - remove a trailing record separator from a string chop :1, // - remove the last character from a string chown :1, // - change the ownership on a list of files chr :1, // - get character this number represents chroot :1, // - make directory new root for path lookups close :1, // - close file (or pipe or socket) handle closedir :1, // - close directory handle connect :1, // - connect to a remote socket 'continue' :[1,1], // - optional trailing block in a while or foreach 'cos' :1, // - cosine function crypt :1, // - one-way passwd-style encryption dbmclose :1, // - breaks binding on a tied dbm file dbmopen :1, // - create binding on a tied dbm file 'default' :1, // defined :1, // - test whether a value, variable, or function is defined 'delete' :1, // - deletes a value from a hash die :1, // - raise an exception or bail out 'do' :1, // - turn a BLOCK into a TERM dump :1, // - create an immediate core dump each :1, // - retrieve the next key/value pair from a hash endgrent :1, // - be done using group file endhostent :1, // - be done using hosts file endnetent :1, // - be done using networks file endprotoent :1, // - be done using protocols file endpwent :1, // - be done using passwd file endservent :1, // - be done using services file eof :1, // - test a filehandle for its end 'eval' :1, // - catch exceptions or compile and run code 'exec' :1, // - abandon this program to run another exists :1, // - test whether a hash key is present exit :1, // - terminate this program 'exp' :1, // - raise I to a power fcntl :1, // - file control system call fileno :1, // - return file descriptor from filehandle flock :1, // - lock an entire file with an advisory lock fork :1, // - create a new process just like this one format :1, // - declare a picture format with use by the write() function formline :1, // - internal function used for formats getc :1, // - get the next character from the filehandle getgrent :1, // - get next group record getgrgid :1, // - get group record given group user ID getgrnam :1, // - get group record given group name gethostbyaddr :1, // - get host record given its address gethostbyname :1, // - get host record given name gethostent :1, // - get next hosts record getlogin :1, // - return who logged in at this tty getnetbyaddr :1, // - get network record given its address getnetbyname :1, // - get networks record given name getnetent :1, // - get next networks record getpeername :1, // - find the other end of a socket connection getpgrp :1, // - get process group getppid :1, // - get parent process ID getpriority :1, // - get current nice value getprotobyname :1, // - get protocol record given name getprotobynumber :1, // - get protocol record numeric protocol getprotoent :1, // - get next protocols record getpwent :1, // - get next passwd record getpwnam :1, // - get passwd record given user login name getpwuid :1, // - get passwd record given user ID getservbyname :1, // - get services record given its name getservbyport :1, // - get services record given numeric port getservent :1, // - get next services record getsockname :1, // - retrieve the sockaddr for a given socket getsockopt :1, // - get socket options on a given socket given :1, // glob :1, // - expand filenames using wildcards gmtime :1, // - convert UNIX time into record or string using Greenwich time 'goto' :1, // - create spaghetti code grep :1, // - locate elements in a list test true against a given criterion hex :1, // - convert a string to a hexadecimal number 'import' :1, // - patch a module's namespace into your own index :1, // - find a substring within a string 'int' :1, // - get the integer portion of a number ioctl :1, // - system-dependent device control system call 'join' :1, // - join a list into a string using a separator keys :1, // - retrieve list of indices from a hash kill :1, // - send a signal to a process or process group last :1, // - exit a block prematurely lc :1, // - return lower-case version of a string lcfirst :1, // - return a string with just the next letter in lower case length :1, // - return the number of bytes in a string 'link' :1, // - create a hard link in the filesytem listen :1, // - register your socket as a server local : 2, // - create a temporary value for a global variable (dynamic scoping) localtime :1, // - convert UNIX time into record or string using local time lock :1, // - get a thread lock on a variable, subroutine, or method 'log' :1, // - retrieve the natural logarithm for a number lstat :1, // - stat a symbolic link m :null, // - match a string with a regular expression pattern map :1, // - apply a change to a list to get back a new list with the changes mkdir :1, // - create a directory msgctl :1, // - SysV IPC message control operations msgget :1, // - get SysV IPC message queue msgrcv :1, // - receive a SysV IPC message from a message queue msgsnd :1, // - send a SysV IPC message to a message queue my : 2, // - declare and assign a local variable (lexical scoping) 'new' :1, // next :1, // - iterate a block prematurely no :1, // - unimport some module symbols or semantics at compile time oct :1, // - convert a string to an octal number open :1, // - open a file, pipe, or descriptor opendir :1, // - open a directory ord :1, // - find a character's numeric representation our : 2, // - declare and assign a package variable (lexical scoping) pack :1, // - convert a list into a binary representation 'package' :1, // - declare a separate global namespace pipe :1, // - open a pair of connected filehandles pop :1, // - remove the last element from an array and return it pos :1, // - find or set the offset for the last/next m//g search print :1, // - output a list to a filehandle printf :1, // - output a formatted list to a filehandle prototype :1, // - get the prototype (if any) of a subroutine push :1, // - append one or more elements to an array q :null, // - singly quote a string qq :null, // - doubly quote a string qr :null, // - Compile pattern quotemeta :null, // - quote regular expression magic characters qw :null, // - quote a list of words qx :null, // - backquote quote a string rand :1, // - retrieve the next pseudorandom number read :1, // - fixed-length buffered input from a filehandle readdir :1, // - get a directory from a directory handle readline :1, // - fetch a record from a file readlink :1, // - determine where a symbolic link is pointing readpipe :1, // - execute a system command and collect standard output recv :1, // - receive a message over a Socket redo :1, // - start this loop iteration over again ref :1, // - find out the type of thing being referenced rename :1, // - change a filename require :1, // - load in external functions from a library at runtime reset :1, // - clear all variables of a given name 'return' :1, // - get out of a function early reverse :1, // - flip a string or a list rewinddir :1, // - reset directory handle rindex :1, // - right-to-left substring search rmdir :1, // - remove a directory s :null, // - replace a pattern with a string say :1, // - print with newline scalar :1, // - force a scalar context seek :1, // - reposition file pointer for random-access I/O seekdir :1, // - reposition directory pointer select :1, // - reset default output or do I/O multiplexing semctl :1, // - SysV semaphore control operations semget :1, // - get set of SysV semaphores semop :1, // - SysV semaphore operations send :1, // - send a message over a socket setgrent :1, // - prepare group file for use sethostent :1, // - prepare hosts file for use setnetent :1, // - prepare networks file for use setpgrp :1, // - set the process group of a process setpriority :1, // - set a process's nice value setprotoent :1, // - prepare protocols file for use setpwent :1, // - prepare passwd file for use setservent :1, // - prepare services file for use setsockopt :1, // - set some socket options shift :1, // - remove the first element of an array, and return it shmctl :1, // - SysV shared memory operations shmget :1, // - get SysV shared memory segment identifier shmread :1, // - read SysV shared memory shmwrite :1, // - write SysV shared memory shutdown :1, // - close down just half of a socket connection 'sin' :1, // - return the sine of a number sleep :1, // - block for some number of seconds socket :1, // - create a socket socketpair :1, // - create a pair of sockets 'sort' :1, // - sort a list of values splice :1, // - add or remove elements anywhere in an array 'split' :1, // - split up a string using a regexp delimiter sprintf :1, // - formatted print into a string 'sqrt' :1, // - square root function srand :1, // - seed the random number generator stat :1, // - get a file's status information state :1, // - declare and assign a state variable (persistent lexical scoping) study :1, // - optimize input data for repeated searches 'sub' :1, // - declare a subroutine, possibly anonymously 'substr' :1, // - get or alter a portion of a stirng symlink :1, // - create a symbolic link to a file syscall :1, // - execute an arbitrary system call sysopen :1, // - open a file, pipe, or descriptor sysread :1, // - fixed-length unbuffered input from a filehandle sysseek :1, // - position I/O pointer on handle used with sysread and syswrite system :1, // - run a separate program syswrite :1, // - fixed-length unbuffered output to a filehandle tell :1, // - get current seekpointer on a filehandle telldir :1, // - get current seekpointer on a directory handle tie :1, // - bind a variable to an object class tied :1, // - get a reference to the object underlying a tied variable time :1, // - return number of seconds since 1970 times :1, // - return elapsed time for self and child processes tr :null, // - transliterate a string truncate :1, // - shorten a file uc :1, // - return upper-case version of a string ucfirst :1, // - return a string with just the next letter in upper case umask :1, // - set file creation mode mask undef :1, // - remove a variable or function definition unlink :1, // - remove one link to a file unpack :1, // - convert binary structure into normal perl variables unshift :1, // - prepend more elements to the beginning of a list untie :1, // - break a tie binding to a variable use :1, // - load in a module at compile time utime :1, // - set a file's last access and modify times values :1, // - return a list of the values in a hash vec :1, // - test or set particular bits in a string wait :1, // - wait for any child process to die waitpid :1, // - wait for a particular child process to die wantarray :1, // - get void vs scalar vs list context of current subroutine call warn :1, // - print debugging info when :1, // write :1, // - print a picture record y :null}; // - transliterate a string var RXstyle="string-2"; var RXmodifiers=/[goseximacplud]/; // NOTE: "m", "s", "y" and "tr" need to correct real modifiers for each regexp type function tokenChain(stream,state,chain,style,tail){ // NOTE: chain.length > 2 is not working now (it's for s[...][...]geos;) state.chain=null; // 12 3tail state.style=null; state.tail=null; state.tokenize=function(stream,state){ var e=false,c,i=0; while(c=stream.next()){ if(c===chain[i]&&!e){ if(chain[++i]!==undefined){ state.chain=chain[i]; state.style=style; state.tail=tail;} else if(tail) stream.eatWhile(tail); state.tokenize=tokenPerl; return style;} e=!e&&c=="\\";} return style;}; return state.tokenize(stream,state);} function tokenSOMETHING(stream,state,string){ state.tokenize=function(stream,state){ if(stream.string==string) state.tokenize=tokenPerl; stream.skipToEnd(); return "string";}; return state.tokenize(stream,state);} function tokenPerl(stream,state){ if(stream.eatSpace()) return null; if(state.chain) return tokenChain(stream,state,state.chain,state.style,state.tail); if(stream.match(/^\-?[\d\.]/,false)) if(stream.match(/^(\-?(\d*\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F]+|0b[01]+|\d+(e[+-]?\d+)?)/)) return 'number'; if(stream.match(/^<<(?=\w)/)){ // NOTE: <"],RXstyle,RXmodifiers);} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} else if(c=="q"){ c=look(stream, 1); if(c=="("){ eatSuffix(stream, 2); return tokenChain(stream,state,[")"],"string");} if(c=="["){ eatSuffix(stream, 2); return tokenChain(stream,state,["]"],"string");} if(c=="{"){ eatSuffix(stream, 2); return tokenChain(stream,state,["}"],"string");} if(c=="<"){ eatSuffix(stream, 2); return tokenChain(stream,state,[">"],"string");} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],"string");}} else if(c=="w"){ c=look(stream, 1); if(c=="("){ eatSuffix(stream, 2); return tokenChain(stream,state,[")"],"bracket");} if(c=="["){ eatSuffix(stream, 2); return tokenChain(stream,state,["]"],"bracket");} if(c=="{"){ eatSuffix(stream, 2); return tokenChain(stream,state,["}"],"bracket");} if(c=="<"){ eatSuffix(stream, 2); return tokenChain(stream,state,[">"],"bracket");} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],"bracket");}} else if(c=="r"){ c=look(stream, 1); if(c=="("){ eatSuffix(stream, 2); return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} if(c=="["){ eatSuffix(stream, 2); return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} if(c=="{"){ eatSuffix(stream, 2); return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} if(c=="<"){ eatSuffix(stream, 2); return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} else if(/[\^'"!~\/(\[{<]/.test(c)){ if(c=="("){ eatSuffix(stream, 1); return tokenChain(stream,state,[")"],"string");} if(c=="["){ eatSuffix(stream, 1); return tokenChain(stream,state,["]"],"string");} if(c=="{"){ eatSuffix(stream, 1); return tokenChain(stream,state,["}"],"string");} if(c=="<"){ eatSuffix(stream, 1); return tokenChain(stream,state,[">"],"string");} if(/[\^'"!~\/]/.test(c)){ return tokenChain(stream,state,[stream.eat(c)],"string");}}}} if(ch=="m"){ var c=look(stream, -2); if(!(c&&/\w/.test(c))){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(/[\^'"!~\/]/.test(c)){ return tokenChain(stream,state,[c],RXstyle,RXmodifiers);} if(c=="("){ return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} if(c=="["){ return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} if(c=="{"){ return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} if(c=="<"){ return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}}}} if(ch=="s"){ var c=/[\/>\]})\w]/.test(look(stream, -2)); if(!c){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(c=="[") return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); if(c=="{") return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); if(c=="<") return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); if(c=="(") return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} if(ch=="y"){ var c=/[\/>\]})\w]/.test(look(stream, -2)); if(!c){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(c=="[") return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); if(c=="{") return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); if(c=="<") return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); if(c=="(") return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} if(ch=="t"){ var c=/[\/>\]})\w]/.test(look(stream, -2)); if(!c){ c=stream.eat("r");if(c){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(c=="[") return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); if(c=="{") return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); if(c=="<") return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); if(c=="(") return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}} if(ch=="`"){ return tokenChain(stream,state,[ch],"variable-2");} if(ch=="/"){ if(!/~\s*$/.test(prefix(stream))) return "operator"; else return tokenChain(stream,state,[ch],RXstyle,RXmodifiers);} if(ch=="$"){ var p=stream.pos; if(stream.eatWhile(/\d/)||stream.eat("{")&&stream.eatWhile(/\d/)&&stream.eat("}")) return "variable-2"; else stream.pos=p;} if(/[$@%]/.test(ch)){ var p=stream.pos; if(stream.eat("^")&&stream.eat(/[A-Z]/)||!/[@$%&]/.test(look(stream, -2))&&stream.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){ var c=stream.current(); if(PERL[c]) return "variable-2";} stream.pos=p;} if(/[$@%&]/.test(ch)){ if(stream.eatWhile(/[\w$\[\]]/)||stream.eat("{")&&stream.eatWhile(/[\w$\[\]]/)&&stream.eat("}")){ var c=stream.current(); if(PERL[c]) return "variable-2"; else return "variable";}} if(ch=="#"){ if(look(stream, -2)!="$"){ stream.skipToEnd(); return "comment";}} if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(ch)){ var p=stream.pos; stream.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/); if(PERL[stream.current()]) return "operator"; else stream.pos=p;} if(ch=="_"){ if(stream.pos==1){ if(suffix(stream, 6)=="_END__"){ return tokenChain(stream,state,['\0'],"comment");} else if(suffix(stream, 7)=="_DATA__"){ return tokenChain(stream,state,['\0'],"variable-2");} else if(suffix(stream, 7)=="_C__"){ return tokenChain(stream,state,['\0'],"string");}}} if(/\w/.test(ch)){ var p=stream.pos; if(look(stream, -2)=="{"&&(look(stream, 0)=="}"||stream.eatWhile(/\w/)&&look(stream, 0)=="}")) return "string"; else stream.pos=p;} if(/[A-Z]/.test(ch)){ var l=look(stream, -2); var p=stream.pos; stream.eatWhile(/[A-Z_]/); if(/[\da-z]/.test(look(stream, 0))){ stream.pos=p;} else{ var c=PERL[stream.current()]; if(!c) return "meta"; if(c[1]) c=c[0]; if(l!=":"){ if(c==1) return "keyword"; else if(c==2) return "def"; else if(c==3) return "atom"; else if(c==4) return "operator"; else if(c==5) return "variable-2"; else return "meta";} else return "meta";}} if(/[a-zA-Z_]/.test(ch)){ var l=look(stream, -2); stream.eatWhile(/\w/); var c=PERL[stream.current()]; if(!c) return "meta"; if(c[1]) c=c[0]; if(l!=":"){ if(c==1) return "keyword"; else if(c==2) return "def"; else if(c==3) return "atom"; else if(c==4) return "operator"; else if(c==5) return "variable-2"; else return "meta";} else return "meta";} return null;} return { startState: function() { return { tokenize: tokenPerl, chain: null, style: null, tail: null }; }, token: function(stream, state) { return (state.tokenize || tokenPerl)(stream, state); }, lineComment: '#' }; }); CodeMirror.registerHelper("wordChars", "perl", /[\w$]/); CodeMirror.defineMIME("text/x-perl", "perl"); // it's like "peek", but need for look-ahead or look-behind if index < 0 function look(stream, c){ return stream.string.charAt(stream.pos+(c||0)); } // return a part of prefix of current stream from current position function prefix(stream, c){ if(c){ var x=stream.pos-c; return stream.string.substr((x>=0?x:0),c);} else{ return stream.string.substr(0,stream.pos-1); } } // return a part of suffix of current stream from current position function suffix(stream, c){ var y=stream.string.length; var x=y-stream.pos+1; return stream.string.substr(stream.pos,(c&&c=(y=stream.string.length-1)) stream.pos=y; else stream.pos=x; } }); application/library/codemirror/mode/haskell/haskell.js000064400000017645146731177160017242 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("haskell", function(_config, modeConfig) { function switchState(source, setState, f) { setState(f); return f(source, setState); } // These should all be Unicode extended, as per the Haskell 2010 report var smallRE = /[a-z_]/; var largeRE = /[A-Z]/; var digitRE = /\d/; var hexitRE = /[0-9A-Fa-f]/; var octitRE = /[0-7]/; var idRE = /[a-z_A-Z0-9'\xa1-\uffff]/; var symbolRE = /[-!#$%&*+.\/<=>?@\\^|~:]/; var specialRE = /[(),;[\]`{}]/; var whiteCharRE = /[ \t\v\f]/; // newlines are handled in tokenizer function normal(source, setState) { if (source.eatWhile(whiteCharRE)) { return null; } var ch = source.next(); if (specialRE.test(ch)) { if (ch == '{' && source.eat('-')) { var t = "comment"; if (source.eat('#')) { t = "meta"; } return switchState(source, setState, ncomment(t, 1)); } return null; } if (ch == '\'') { if (source.eat('\\')) { source.next(); // should handle other escapes here } else { source.next(); } if (source.eat('\'')) { return "string"; } return "error"; } if (ch == '"') { return switchState(source, setState, stringLiteral); } if (largeRE.test(ch)) { source.eatWhile(idRE); if (source.eat('.')) { return "qualifier"; } return "variable-2"; } if (smallRE.test(ch)) { source.eatWhile(idRE); return "variable"; } if (digitRE.test(ch)) { if (ch == '0') { if (source.eat(/[xX]/)) { source.eatWhile(hexitRE); // should require at least 1 return "integer"; } if (source.eat(/[oO]/)) { source.eatWhile(octitRE); // should require at least 1 return "number"; } } source.eatWhile(digitRE); var t = "number"; if (source.match(/^\.\d+/)) { t = "number"; } if (source.eat(/[eE]/)) { t = "number"; source.eat(/[-+]/); source.eatWhile(digitRE); // should require at least 1 } return t; } if (ch == "." && source.eat(".")) return "keyword"; if (symbolRE.test(ch)) { if (ch == '-' && source.eat(/-/)) { source.eatWhile(/-/); if (!source.eat(symbolRE)) { source.skipToEnd(); return "comment"; } } var t = "variable"; if (ch == ':') { t = "variable-2"; } source.eatWhile(symbolRE); return t; } return "error"; } function ncomment(type, nest) { if (nest == 0) { return normal; } return function(source, setState) { var currNest = nest; while (!source.eol()) { var ch = source.next(); if (ch == '{' && source.eat('-')) { ++currNest; } else if (ch == '-' && source.eat('}')) { --currNest; if (currNest == 0) { setState(normal); return type; } } } setState(ncomment(type, currNest)); return type; }; } function stringLiteral(source, setState) { while (!source.eol()) { var ch = source.next(); if (ch == '"') { setState(normal); return "string"; } if (ch == '\\') { if (source.eol() || source.eat(whiteCharRE)) { setState(stringGap); return "string"; } if (source.eat('&')) { } else { source.next(); // should handle other escapes here } } } setState(normal); return "error"; } function stringGap(source, setState) { if (source.eat('\\')) { return switchState(source, setState, stringLiteral); } source.next(); setState(normal); return "error"; } var wellKnownWords = (function() { var wkw = {}; function setType(t) { return function () { for (var i = 0; i < arguments.length; i++) wkw[arguments[i]] = t; }; } setType("keyword")( "case", "class", "data", "default", "deriving", "do", "else", "foreign", "if", "import", "in", "infix", "infixl", "infixr", "instance", "let", "module", "newtype", "of", "then", "type", "where", "_"); setType("keyword")( "\.\.", ":", "::", "=", "\\", "\"", "<-", "->", "@", "~", "=>"); setType("builtin")( "!!", "$!", "$", "&&", "+", "++", "-", ".", "/", "/=", "<", "<=", "=<<", "==", ">", ">=", ">>", ">>=", "^", "^^", "||", "*", "**"); setType("builtin")( "Bool", "Bounded", "Char", "Double", "EQ", "Either", "Enum", "Eq", "False", "FilePath", "Float", "Floating", "Fractional", "Functor", "GT", "IO", "IOError", "Int", "Integer", "Integral", "Just", "LT", "Left", "Maybe", "Monad", "Nothing", "Num", "Ord", "Ordering", "Rational", "Read", "ReadS", "Real", "RealFloat", "RealFrac", "Right", "Show", "ShowS", "String", "True"); setType("builtin")( "abs", "acos", "acosh", "all", "and", "any", "appendFile", "asTypeOf", "asin", "asinh", "atan", "atan2", "atanh", "break", "catch", "ceiling", "compare", "concat", "concatMap", "const", "cos", "cosh", "curry", "cycle", "decodeFloat", "div", "divMod", "drop", "dropWhile", "either", "elem", "encodeFloat", "enumFrom", "enumFromThen", "enumFromThenTo", "enumFromTo", "error", "even", "exp", "exponent", "fail", "filter", "flip", "floatDigits", "floatRadix", "floatRange", "floor", "fmap", "foldl", "foldl1", "foldr", "foldr1", "fromEnum", "fromInteger", "fromIntegral", "fromRational", "fst", "gcd", "getChar", "getContents", "getLine", "head", "id", "init", "interact", "ioError", "isDenormalized", "isIEEE", "isInfinite", "isNaN", "isNegativeZero", "iterate", "last", "lcm", "length", "lex", "lines", "log", "logBase", "lookup", "map", "mapM", "mapM_", "max", "maxBound", "maximum", "maybe", "min", "minBound", "minimum", "mod", "negate", "not", "notElem", "null", "odd", "or", "otherwise", "pi", "pred", "print", "product", "properFraction", "putChar", "putStr", "putStrLn", "quot", "quotRem", "read", "readFile", "readIO", "readList", "readLn", "readParen", "reads", "readsPrec", "realToFrac", "recip", "rem", "repeat", "replicate", "return", "reverse", "round", "scaleFloat", "scanl", "scanl1", "scanr", "scanr1", "seq", "sequence", "sequence_", "show", "showChar", "showList", "showParen", "showString", "shows", "showsPrec", "significand", "signum", "sin", "sinh", "snd", "span", "splitAt", "sqrt", "subtract", "succ", "sum", "tail", "take", "takeWhile", "tan", "tanh", "toEnum", "toInteger", "toRational", "truncate", "uncurry", "undefined", "unlines", "until", "unwords", "unzip", "unzip3", "userError", "words", "writeFile", "zip", "zip3", "zipWith", "zipWith3"); var override = modeConfig.overrideKeywords; if (override) for (var word in override) if (override.hasOwnProperty(word)) wkw[word] = override[word]; return wkw; })(); return { startState: function () { return { f: normal }; }, copyState: function (s) { return { f: s.f }; }, token: function(stream, state) { var t = state.f(stream, function(s) { state.f = s; }); var w = stream.current(); return wellKnownWords.hasOwnProperty(w) ? wellKnownWords[w] : t; }, blockCommentStart: "{-", blockCommentEnd: "-}", lineComment: "--" }; }); CodeMirror.defineMIME("text/x-haskell", "haskell"); }); application/library/codemirror/mode/haskell/index.html000064400000004222146731177160017241 0ustar00 CodeMirror: Haskell mode

    Haskell mode

    MIME types defined: text/x-haskell.

    application/library/codemirror/mode/tcl/index.html000064400000014231146731177160016401 0ustar00 CodeMirror: Tcl mode

    Tcl mode

    MIME types defined: text/x-tcl.

    application/library/codemirror/mode/tcl/tcl.js000064400000011470146731177160015526 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE //tcl mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("tcl", function() { function parseWords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = parseWords("Tcl safe after append array auto_execok auto_import auto_load " + "auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror " + "binary break catch cd close concat continue dde eof encoding error " + "eval exec exit expr fblocked fconfigure fcopy file fileevent filename " + "filename flush for foreach format gets glob global history http if " + "incr info interp join lappend lindex linsert list llength load lrange " + "lreplace lsearch lset lsort memory msgcat namespace open package parray " + "pid pkg::create pkg_mkIndex proc puts pwd re_syntax read regex regexp " + "registry regsub rename resource return scan seek set socket source split " + "string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord " + "tcl_wordBreakAfter tcl_startOfPreviousWord tcl_wordBreakBefore tcltest " + "tclvars tell time trace unknown unset update uplevel upvar variable " + "vwait"); var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var beforeParams = state.beforeParams; state.beforeParams = false; var ch = stream.next(); if ((ch == '"' || ch == "'") && state.inParams) { return chain(stream, state, tokenString(ch)); } else if (/[\[\]{}\(\),;\.]/.test(ch)) { if (ch == "(" && beforeParams) state.inParams = true; else if (ch == ")") state.inParams = false; return null; } else if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } else if (ch == "#") { if (stream.eat("*")) return chain(stream, state, tokenComment); if (ch == "#" && stream.match(/ *\[ *\[/)) return chain(stream, state, tokenUnparsed); stream.skipToEnd(); return "comment"; } else if (ch == '"') { stream.skipTo(/"/); return "comment"; } else if (ch == "$") { stream.eatWhile(/[$_a-z0-9A-Z\.{:]/); stream.eatWhile(/}/); state.beforeParams = true; return "builtin"; } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "comment"; } else { stream.eatWhile(/[\w\$_{}\xa1-\uffff]/); var word = stream.current().toLowerCase(); if (keywords && keywords.propertyIsEnumerable(word)) return "keyword"; if (functions && functions.propertyIsEnumerable(word)) { state.beforeParams = true; return "keyword"; } return null; } } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenUnparsed(stream, state) { var maybeEnd = 0, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd == 2) { state.tokenize = tokenBase; break; } if (ch == "]") maybeEnd++; else if (ch != " ") maybeEnd = 0; } return "meta"; } return { startState: function() { return { tokenize: tokenBase, beforeParams: false, inParams: false }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); } }; }); CodeMirror.defineMIME("text/x-tcl", "tcl"); }); application/library/codemirror/mode/coffeescript/coffeescript.js000064400000023234146731177160021313 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Link to the project's GitHub page: * https://github.com/pickhardt/coffeescript-codemirror-mode */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("coffeescript", function(conf, parserConf) { var ERRORCLASS = "error"; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var operators = /^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/; var delimiters = /^(?:[()\[\]{},:`=;]|\.\.?\.?)/; var identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/; var atProp = /^@[_A-Za-z$][_A-Za-z$0-9]*/; var wordOperators = wordRegexp(["and", "or", "not", "is", "isnt", "in", "instanceof", "typeof"]); var indentKeywords = ["for", "while", "loop", "if", "unless", "else", "switch", "try", "catch", "finally", "class"]; var commonKeywords = ["break", "by", "continue", "debugger", "delete", "do", "in", "of", "new", "return", "then", "this", "@", "throw", "when", "until", "extends"]; var keywords = wordRegexp(indentKeywords.concat(commonKeywords)); indentKeywords = wordRegexp(indentKeywords); var stringPrefixes = /^('{3}|\"{3}|['\"])/; var regexPrefixes = /^(\/{3}|\/)/; var commonConstants = ["Infinity", "NaN", "undefined", "null", "true", "false", "on", "off", "yes", "no"]; var constants = wordRegexp(commonConstants); // Tokenizers function tokenBase(stream, state) { // Handle scope changes if (stream.sol()) { if (state.scope.align === null) state.scope.align = false; var scopeOffset = state.scope.offset; if (stream.eatSpace()) { var lineOffset = stream.indentation(); if (lineOffset > scopeOffset && state.scope.type == "coffee") { return "indent"; } else if (lineOffset < scopeOffset) { return "dedent"; } return null; } else { if (scopeOffset > 0) { dedent(stream, state); } } } if (stream.eatSpace()) { return null; } var ch = stream.peek(); // Handle docco title comment (single line) if (stream.match("####")) { stream.skipToEnd(); return "comment"; } // Handle multi line comments if (stream.match("###")) { state.tokenize = longComment; return state.tokenize(stream, state); } // Single line comment if (ch === "#") { stream.skipToEnd(); return "comment"; } // Handle number literals if (stream.match(/^-?[0-9\.]/, false)) { var floatLiteral = false; // Floats if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } if (stream.match(/^-?\d+\.\d*/)) { floatLiteral = true; } if (stream.match(/^-?\.\d+/)) { floatLiteral = true; } if (floatLiteral) { // prevent from getting extra . on 1.. if (stream.peek() == "."){ stream.backUp(1); } return "number"; } // Integers var intLiteral = false; // Hex if (stream.match(/^-?0x[0-9a-f]+/i)) { intLiteral = true; } // Decimal if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)) { intLiteral = true; } // Zero by itself with no other piece of number. if (stream.match(/^-?0(?![\dx])/i)) { intLiteral = true; } if (intLiteral) { return "number"; } } // Handle strings if (stream.match(stringPrefixes)) { state.tokenize = tokenFactory(stream.current(), false, "string"); return state.tokenize(stream, state); } // Handle regex literals if (stream.match(regexPrefixes)) { if (stream.current() != "/" || stream.match(/^.*\//, false)) { // prevent highlight of division state.tokenize = tokenFactory(stream.current(), true, "string-2"); return state.tokenize(stream, state); } else { stream.backUp(1); } } // Handle operators and delimiters if (stream.match(operators) || stream.match(wordOperators)) { return "operator"; } if (stream.match(delimiters)) { return "punctuation"; } if (stream.match(constants)) { return "atom"; } if (stream.match(atProp) || state.prop && stream.match(identifiers)) { return "property"; } if (stream.match(keywords)) { return "keyword"; } if (stream.match(identifiers)) { return "variable"; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenFactory(delimiter, singleline, outclass) { return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"\/\\]/); if (stream.eat("\\")) { stream.next(); if (singleline && stream.eol()) { return outclass; } } else if (stream.match(delimiter)) { state.tokenize = tokenBase; return outclass; } else { stream.eat(/['"\/]/); } } if (singleline) { if (parserConf.singleLineStringErrors) { outclass = ERRORCLASS; } else { state.tokenize = tokenBase; } } return outclass; }; } function longComment(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^#]/); if (stream.match("###")) { state.tokenize = tokenBase; break; } stream.eatWhile("#"); } return "comment"; } function indent(stream, state, type) { type = type || "coffee"; var offset = 0, align = false, alignOffset = null; for (var scope = state.scope; scope; scope = scope.prev) { if (scope.type === "coffee" || scope.type == "}") { offset = scope.offset + conf.indentUnit; break; } } if (type !== "coffee") { align = null; alignOffset = stream.column() + stream.current().length; } else if (state.scope.align) { state.scope.align = false; } state.scope = { offset: offset, type: type, prev: state.scope, align: align, alignOffset: alignOffset }; } function dedent(stream, state) { if (!state.scope.prev) return; if (state.scope.type === "coffee") { var _indent = stream.indentation(); var matched = false; for (var scope = state.scope; scope; scope = scope.prev) { if (_indent === scope.offset) { matched = true; break; } } if (!matched) { return true; } while (state.scope.prev && state.scope.offset !== _indent) { state.scope = state.scope.prev; } return false; } else { state.scope = state.scope.prev; return false; } } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); // Handle scope changes. if (current === "return") { state.dedent = true; } if (((current === "->" || current === "=>") && stream.eol()) || style === "indent") { indent(stream, state); } var delimiter_index = "[({".indexOf(current); if (delimiter_index !== -1) { indent(stream, state, "])}".slice(delimiter_index, delimiter_index+1)); } if (indentKeywords.exec(current)){ indent(stream, state); } if (current == "then"){ dedent(stream, state); } if (style === "dedent") { if (dedent(stream, state)) { return ERRORCLASS; } } delimiter_index = "])}".indexOf(current); if (delimiter_index !== -1) { while (state.scope.type == "coffee" && state.scope.prev) state.scope = state.scope.prev; if (state.scope.type == current) state.scope = state.scope.prev; } if (state.dedent && stream.eol()) { if (state.scope.type == "coffee" && state.scope.prev) state.scope = state.scope.prev; state.dedent = false; } return style; } var external = { startState: function(basecolumn) { return { tokenize: tokenBase, scope: {offset:basecolumn || 0, type:"coffee", prev: null, align: false}, prop: false, dedent: 0 }; }, token: function(stream, state) { var fillAlign = state.scope.align === null && state.scope; if (fillAlign && stream.sol()) fillAlign.align = false; var style = tokenLexer(stream, state); if (style && style != "comment") { if (fillAlign) fillAlign.align = true; state.prop = style == "punctuation" && stream.current() == "." } return style; }, indent: function(state, text) { if (state.tokenize != tokenBase) return 0; var scope = state.scope; var closer = text && "])}".indexOf(text.charAt(0)) > -1; if (closer) while (scope.type == "coffee" && scope.prev) scope = scope.prev; var closes = closer && scope.type === text.charAt(0); if (scope.align) return scope.alignOffset - (closes ? 1 : 0); else return (closes ? scope.prev : scope).offset; }, lineComment: "#", fold: "indent" }; return external; }); CodeMirror.defineMIME("text/x-coffeescript", "coffeescript"); CodeMirror.defineMIME("text/coffeescript", "coffeescript"); }); application/library/codemirror/mode/coffeescript/index.html000064400000053602146731177160020300 0ustar00 CodeMirror: CoffeeScript mode

    CoffeeScript mode

    MIME types defined: text/x-coffeescript.

    The CoffeeScript mode was written by Jeff Pickhardt.

    application/library/codemirror/mode/http/http.js000064400000005353146731177160016123 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("http", function() { function failFirstLine(stream, state) { stream.skipToEnd(); state.cur = header; return "error"; } function start(stream, state) { if (stream.match(/^HTTP\/\d\.\d/)) { state.cur = responseStatusCode; return "keyword"; } else if (stream.match(/^[A-Z]+/) && /[ \t]/.test(stream.peek())) { state.cur = requestPath; return "keyword"; } else { return failFirstLine(stream, state); } } function responseStatusCode(stream, state) { var code = stream.match(/^\d+/); if (!code) return failFirstLine(stream, state); state.cur = responseStatusText; var status = Number(code[0]); if (status >= 100 && status < 200) { return "positive informational"; } else if (status >= 200 && status < 300) { return "positive success"; } else if (status >= 300 && status < 400) { return "positive redirect"; } else if (status >= 400 && status < 500) { return "negative client-error"; } else if (status >= 500 && status < 600) { return "negative server-error"; } else { return "error"; } } function responseStatusText(stream, state) { stream.skipToEnd(); state.cur = header; return null; } function requestPath(stream, state) { stream.eatWhile(/\S/); state.cur = requestProtocol; return "string-2"; } function requestProtocol(stream, state) { if (stream.match(/^HTTP\/\d\.\d$/)) { state.cur = header; return "keyword"; } else { return failFirstLine(stream, state); } } function header(stream) { if (stream.sol() && !stream.eat(/[ \t]/)) { if (stream.match(/^.*?:/)) { return "atom"; } else { stream.skipToEnd(); return "error"; } } else { stream.skipToEnd(); return "string"; } } function body(stream) { stream.skipToEnd(); return null; } return { token: function(stream, state) { var cur = state.cur; if (cur != header && cur != body && stream.eatSpace()) return null; return cur(stream, state); }, blankLine: function(state) { state.cur = body; }, startState: function() { return {cur: start}; } }; }); CodeMirror.defineMIME("message/http", "http"); }); application/library/codemirror/mode/http/index.html000064400000002561146731177160016601 0ustar00 CodeMirror: HTTP mode

    HTTP mode

    MIME types defined: message/http.

    application/library/codemirror/mode/soy/soy.js000064400000016715146731177160015615 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var indentingTags = ["template", "literal", "msg", "fallbackmsg", "let", "if", "elseif", "else", "switch", "case", "default", "foreach", "ifempty", "for", "call", "param", "deltemplate", "delcall", "log"]; CodeMirror.defineMode("soy", function(config) { var textMode = CodeMirror.getMode(config, "text/plain"); var modes = { html: CodeMirror.getMode(config, {name: "text/html", multilineTagIndentFactor: 2, multilineTagIndentPastTag: false}), attributes: textMode, text: textMode, uri: textMode, css: CodeMirror.getMode(config, "text/css"), js: CodeMirror.getMode(config, {name: "text/javascript", statementIndent: 2 * config.indentUnit}) }; function last(array) { return array[array.length - 1]; } function tokenUntil(stream, state, untilRegExp) { var oldString = stream.string; var match = untilRegExp.exec(oldString.substr(stream.pos)); if (match) { // We don't use backUp because it backs up just the position, not the state. // This uses an undocumented API. stream.string = oldString.substr(0, stream.pos + match.index); } var result = stream.hideFirstChars(state.indent, function() { return state.localMode.token(stream, state.localState); }); stream.string = oldString; return result; } return { startState: function() { return { kind: [], kindTag: [], soyState: [], indent: 0, localMode: modes.html, localState: CodeMirror.startState(modes.html) }; }, copyState: function(state) { return { tag: state.tag, // Last seen Soy tag. kind: state.kind.concat([]), // Values of kind="" attributes. kindTag: state.kindTag.concat([]), // Opened tags with kind="" attributes. soyState: state.soyState.concat([]), indent: state.indent, // Indentation of the following line. localMode: state.localMode, localState: CodeMirror.copyState(state.localMode, state.localState) }; }, token: function(stream, state) { var match; switch (last(state.soyState)) { case "comment": if (stream.match(/^.*?\*\//)) { state.soyState.pop(); } else { stream.skipToEnd(); } return "comment"; case "variable": if (stream.match(/^}/)) { state.indent -= 2 * config.indentUnit; state.soyState.pop(); return "variable-2"; } stream.next(); return null; case "tag": if (stream.match(/^\/?}/)) { if (state.tag == "/template" || state.tag == "/deltemplate") state.indent = 0; else state.indent -= (stream.current() == "/}" || indentingTags.indexOf(state.tag) == -1 ? 2 : 1) * config.indentUnit; state.soyState.pop(); return "keyword"; } else if (stream.match(/^([\w?]+)(?==)/)) { if (stream.current() == "kind" && (match = stream.match(/^="([^"]+)/, false))) { var kind = match[1]; state.kind.push(kind); state.kindTag.push(state.tag); state.localMode = modes[kind] || modes.html; state.localState = CodeMirror.startState(state.localMode); } return "attribute"; } else if (stream.match(/^"/)) { state.soyState.push("string"); return "string"; } stream.next(); return null; case "literal": if (stream.match(/^(?=\{\/literal})/)) { state.indent -= config.indentUnit; state.soyState.pop(); return this.token(stream, state); } return tokenUntil(stream, state, /\{\/literal}/); case "string": var match = stream.match(/^.*?("|\\[\s\S])/); if (!match) { stream.skipToEnd(); } else if (match[1] == "\"") { state.soyState.pop(); } return "string"; } if (stream.match(/^\/\*/)) { state.soyState.push("comment"); return "comment"; } else if (stream.match(stream.sol() ? /^\s*\/\/.*/ : /^\s+\/\/.*/)) { return "comment"; } else if (stream.match(/^\{\$[\w?]*/)) { state.indent += 2 * config.indentUnit; state.soyState.push("variable"); return "variable-2"; } else if (stream.match(/^\{literal}/)) { state.indent += config.indentUnit; state.soyState.push("literal"); return "keyword"; } else if (match = stream.match(/^\{([\/@\\]?[\w?]*)/)) { if (match[1] != "/switch") state.indent += (/^(\/|(else|elseif|case|default)$)/.test(match[1]) && state.tag != "switch" ? 1 : 2) * config.indentUnit; state.tag = match[1]; if (state.tag == "/" + last(state.kindTag)) { // We found the tag that opened the current kind="". state.kind.pop(); state.kindTag.pop(); state.localMode = modes[last(state.kind)] || modes.html; state.localState = CodeMirror.startState(state.localMode); } state.soyState.push("tag"); return "keyword"; } return tokenUntil(stream, state, /\{|\s+\/\/|\/\*/); }, indent: function(state, textAfter) { var indent = state.indent, top = last(state.soyState); if (top == "comment") return CodeMirror.Pass; if (top == "literal") { if (/^\{\/literal}/.test(textAfter)) indent -= config.indentUnit; } else { if (/^\s*\{\/(template|deltemplate)\b/.test(textAfter)) return 0; if (/^\{(\/|(fallbackmsg|elseif|else|ifempty)\b)/.test(textAfter)) indent -= config.indentUnit; if (state.tag != "switch" && /^\{(case|default)\b/.test(textAfter)) indent -= config.indentUnit; if (/^\{\/switch\b/.test(textAfter)) indent -= config.indentUnit; } if (indent && state.localMode.indent) indent += state.localMode.indent(state.localState, textAfter); return indent; }, innerMode: function(state) { if (state.soyState.length && last(state.soyState) != "literal") return null; else return {state: state.localState, mode: state.localMode}; }, electricInput: /^\s*\{(\/|\/template|\/deltemplate|\/switch|fallbackmsg|elseif|else|case|default|ifempty|\/literal\})$/, lineComment: "//", blockCommentStart: "/*", blockCommentEnd: "*/", blockCommentContinue: " * ", fold: "indent" }; }, "htmlmixed"); CodeMirror.registerHelper("hintWords", "soy", indentingTags.concat( ["delpackage", "namespace", "alias", "print", "css", "debugger"])); CodeMirror.defineMIME("text/x-soy", "soy"); }); application/library/codemirror/mode/soy/index.html000064400000003623146731177160016434 0ustar00 CodeMirror: Soy (Closure Template) mode

    Soy (Closure Template) mode

    A mode for Closure Templates (Soy).

    MIME type defined: text/x-soy.

    application/library/codemirror/mode/smarty/smarty.js000064400000015254146731177160017024 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Smarty 2 and 3 mode. */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("smarty", function(config, parserConf) { var rightDelimiter = parserConf.rightDelimiter || "}"; var leftDelimiter = parserConf.leftDelimiter || "{"; var version = parserConf.version || 2; var baseMode = CodeMirror.getMode(config, parserConf.baseMode || "null"); var keyFunctions = ["debug", "extends", "function", "include", "literal"]; var regs = { operatorChars: /[+\-*&%=<>!?]/, validIdentifier: /[a-zA-Z0-9_]/, stringChar: /['"]/ }; var last; function cont(style, lastType) { last = lastType; return style; } function chain(stream, state, parser) { state.tokenize = parser; return parser(stream, state); } // Smarty 3 allows { and } surrounded by whitespace to NOT slip into Smarty mode function doesNotCount(stream, pos) { if (pos == null) pos = stream.pos; return version === 3 && leftDelimiter == "{" && (pos == stream.string.length || /\s/.test(stream.string.charAt(pos))); } function tokenTop(stream, state) { var string = stream.string; for (var scan = stream.pos;;) { var nextMatch = string.indexOf(leftDelimiter, scan); scan = nextMatch + leftDelimiter.length; if (nextMatch == -1 || !doesNotCount(stream, nextMatch + leftDelimiter.length)) break; } if (nextMatch == stream.pos) { stream.match(leftDelimiter); if (stream.eat("*")) { return chain(stream, state, tokenBlock("comment", "*" + rightDelimiter)); } else { state.depth++; state.tokenize = tokenSmarty; last = "startTag"; return "tag"; } } if (nextMatch > -1) stream.string = string.slice(0, nextMatch); var token = baseMode.token(stream, state.base); if (nextMatch > -1) stream.string = string; return token; } // parsing Smarty content function tokenSmarty(stream, state) { if (stream.match(rightDelimiter, true)) { if (version === 3) { state.depth--; if (state.depth <= 0) { state.tokenize = tokenTop; } } else { state.tokenize = tokenTop; } return cont("tag", null); } if (stream.match(leftDelimiter, true)) { state.depth++; return cont("tag", "startTag"); } var ch = stream.next(); if (ch == "$") { stream.eatWhile(regs.validIdentifier); return cont("variable-2", "variable"); } else if (ch == "|") { return cont("operator", "pipe"); } else if (ch == ".") { return cont("operator", "property"); } else if (regs.stringChar.test(ch)) { state.tokenize = tokenAttribute(ch); return cont("string", "string"); } else if (regs.operatorChars.test(ch)) { stream.eatWhile(regs.operatorChars); return cont("operator", "operator"); } else if (ch == "[" || ch == "]") { return cont("bracket", "bracket"); } else if (ch == "(" || ch == ")") { return cont("bracket", "operator"); } else if (/\d/.test(ch)) { stream.eatWhile(/\d/); return cont("number", "number"); } else { if (state.last == "variable") { if (ch == "@") { stream.eatWhile(regs.validIdentifier); return cont("property", "property"); } else if (ch == "|") { stream.eatWhile(regs.validIdentifier); return cont("qualifier", "modifier"); } } else if (state.last == "pipe") { stream.eatWhile(regs.validIdentifier); return cont("qualifier", "modifier"); } else if (state.last == "whitespace") { stream.eatWhile(regs.validIdentifier); return cont("attribute", "modifier"); } if (state.last == "property") { stream.eatWhile(regs.validIdentifier); return cont("property", null); } else if (/\s/.test(ch)) { last = "whitespace"; return null; } var str = ""; if (ch != "/") { str += ch; } var c = null; while (c = stream.eat(regs.validIdentifier)) { str += c; } for (var i=0, j=keyFunctions.length; i CodeMirror: Smarty mode

    Smarty mode

    Mode for Smarty version 2 or 3, which allows for custom delimiter tags.

    Several configuration parameters are supported:

    • leftDelimiter and rightDelimiter, which should be strings that determine where the Smarty syntax starts and ends.
    • version, which should be 2 or 3.
    • baseMode, which can be a mode spec like "text/html" to set a different background mode.

    MIME types defined: text/x-smarty

    Smarty 2, custom delimiters

    Smarty 3

    application/library/codemirror/mode/gas/index.html000064400000003460146731177160016373 0ustar00 CodeMirror: Gas mode

    Gas mode

    Handles AT&T assembler syntax (more specifically this handles the GNU Assembler (gas) syntax.) It takes a single optional configuration parameter: architecture, which can be one of "ARM", "ARMv6" or "x86". Including the parameter adds syntax for the registers and special directives for the supplied architecture.

    MIME types defined: text/x-gas

    application/library/codemirror/mode/gas/gas.js000064400000021266146731177160015512 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("gas", function(_config, parserConfig) { 'use strict'; // If an architecture is specified, its initialization function may // populate this array with custom parsing functions which will be // tried in the event that the standard functions do not find a match. var custom = []; // The symbol used to start a line comment changes based on the target // architecture. // If no architecture is pased in "parserConfig" then only multiline // comments will have syntax support. var lineCommentStartSymbol = ""; // These directives are architecture independent. // Machine specific directives should go in their respective // architecture initialization function. // Reference: // http://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops var directives = { ".abort" : "builtin", ".align" : "builtin", ".altmacro" : "builtin", ".ascii" : "builtin", ".asciz" : "builtin", ".balign" : "builtin", ".balignw" : "builtin", ".balignl" : "builtin", ".bundle_align_mode" : "builtin", ".bundle_lock" : "builtin", ".bundle_unlock" : "builtin", ".byte" : "builtin", ".cfi_startproc" : "builtin", ".comm" : "builtin", ".data" : "builtin", ".def" : "builtin", ".desc" : "builtin", ".dim" : "builtin", ".double" : "builtin", ".eject" : "builtin", ".else" : "builtin", ".elseif" : "builtin", ".end" : "builtin", ".endef" : "builtin", ".endfunc" : "builtin", ".endif" : "builtin", ".equ" : "builtin", ".equiv" : "builtin", ".eqv" : "builtin", ".err" : "builtin", ".error" : "builtin", ".exitm" : "builtin", ".extern" : "builtin", ".fail" : "builtin", ".file" : "builtin", ".fill" : "builtin", ".float" : "builtin", ".func" : "builtin", ".global" : "builtin", ".gnu_attribute" : "builtin", ".hidden" : "builtin", ".hword" : "builtin", ".ident" : "builtin", ".if" : "builtin", ".incbin" : "builtin", ".include" : "builtin", ".int" : "builtin", ".internal" : "builtin", ".irp" : "builtin", ".irpc" : "builtin", ".lcomm" : "builtin", ".lflags" : "builtin", ".line" : "builtin", ".linkonce" : "builtin", ".list" : "builtin", ".ln" : "builtin", ".loc" : "builtin", ".loc_mark_labels" : "builtin", ".local" : "builtin", ".long" : "builtin", ".macro" : "builtin", ".mri" : "builtin", ".noaltmacro" : "builtin", ".nolist" : "builtin", ".octa" : "builtin", ".offset" : "builtin", ".org" : "builtin", ".p2align" : "builtin", ".popsection" : "builtin", ".previous" : "builtin", ".print" : "builtin", ".protected" : "builtin", ".psize" : "builtin", ".purgem" : "builtin", ".pushsection" : "builtin", ".quad" : "builtin", ".reloc" : "builtin", ".rept" : "builtin", ".sbttl" : "builtin", ".scl" : "builtin", ".section" : "builtin", ".set" : "builtin", ".short" : "builtin", ".single" : "builtin", ".size" : "builtin", ".skip" : "builtin", ".sleb128" : "builtin", ".space" : "builtin", ".stab" : "builtin", ".string" : "builtin", ".struct" : "builtin", ".subsection" : "builtin", ".symver" : "builtin", ".tag" : "builtin", ".text" : "builtin", ".title" : "builtin", ".type" : "builtin", ".uleb128" : "builtin", ".val" : "builtin", ".version" : "builtin", ".vtable_entry" : "builtin", ".vtable_inherit" : "builtin", ".warning" : "builtin", ".weak" : "builtin", ".weakref" : "builtin", ".word" : "builtin" }; var registers = {}; function x86(_parserConfig) { lineCommentStartSymbol = "#"; registers.ax = "variable"; registers.eax = "variable-2"; registers.rax = "variable-3"; registers.bx = "variable"; registers.ebx = "variable-2"; registers.rbx = "variable-3"; registers.cx = "variable"; registers.ecx = "variable-2"; registers.rcx = "variable-3"; registers.dx = "variable"; registers.edx = "variable-2"; registers.rdx = "variable-3"; registers.si = "variable"; registers.esi = "variable-2"; registers.rsi = "variable-3"; registers.di = "variable"; registers.edi = "variable-2"; registers.rdi = "variable-3"; registers.sp = "variable"; registers.esp = "variable-2"; registers.rsp = "variable-3"; registers.bp = "variable"; registers.ebp = "variable-2"; registers.rbp = "variable-3"; registers.ip = "variable"; registers.eip = "variable-2"; registers.rip = "variable-3"; registers.cs = "keyword"; registers.ds = "keyword"; registers.ss = "keyword"; registers.es = "keyword"; registers.fs = "keyword"; registers.gs = "keyword"; } function armv6(_parserConfig) { // Reference: // http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf // http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf lineCommentStartSymbol = "@"; directives.syntax = "builtin"; registers.r0 = "variable"; registers.r1 = "variable"; registers.r2 = "variable"; registers.r3 = "variable"; registers.r4 = "variable"; registers.r5 = "variable"; registers.r6 = "variable"; registers.r7 = "variable"; registers.r8 = "variable"; registers.r9 = "variable"; registers.r10 = "variable"; registers.r11 = "variable"; registers.r12 = "variable"; registers.sp = "variable-2"; registers.lr = "variable-2"; registers.pc = "variable-2"; registers.r13 = registers.sp; registers.r14 = registers.lr; registers.r15 = registers.pc; custom.push(function(ch, stream) { if (ch === '#') { stream.eatWhile(/\w/); return "number"; } }); } var arch = (parserConfig.architecture || "x86").toLowerCase(); if (arch === "x86") { x86(parserConfig); } else if (arch === "arm" || arch === "armv6") { armv6(parserConfig); } function nextUntilUnescaped(stream, end) { var escaped = false, next; while ((next = stream.next()) != null) { if (next === end && !escaped) { return false; } escaped = !escaped && next === "\\"; } return escaped; } function clikeComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (ch === "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch === "*"); } return "comment"; } return { startState: function() { return { tokenize: null }; }, token: function(stream, state) { if (state.tokenize) { return state.tokenize(stream, state); } if (stream.eatSpace()) { return null; } var style, cur, ch = stream.next(); if (ch === "/") { if (stream.eat("*")) { state.tokenize = clikeComment; return clikeComment(stream, state); } } if (ch === lineCommentStartSymbol) { stream.skipToEnd(); return "comment"; } if (ch === '"') { nextUntilUnescaped(stream, '"'); return "string"; } if (ch === '.') { stream.eatWhile(/\w/); cur = stream.current().toLowerCase(); style = directives[cur]; return style || null; } if (ch === '=') { stream.eatWhile(/\w/); return "tag"; } if (ch === '{') { return "braket"; } if (ch === '}') { return "braket"; } if (/\d/.test(ch)) { if (ch === "0" && stream.eat("x")) { stream.eatWhile(/[0-9a-fA-F]/); return "number"; } stream.eatWhile(/\d/); return "number"; } if (/\w/.test(ch)) { stream.eatWhile(/\w/); if (stream.eat(":")) { return 'tag'; } cur = stream.current().toLowerCase(); style = registers[cur]; return style || null; } for (var i = 0; i < custom.length; i++) { style = custom[i](ch, stream, state); if (style) { return style; } } }, lineComment: lineCommentStartSymbol, blockCommentStart: "/*", blockCommentEnd: "*/" }; }); }); application/library/codemirror/mode/pascal/pascal.js000064400000005757146731177160016703 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("pascal", function() { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words("and array begin case const div do downto else end file for forward integer " + "boolean char function goto if in label mod nil not of or packed procedure " + "program record repeat set string then to type until var while with"); var atoms = {"null": true}; var isOperatorChar = /[+\-*&%=<>!?|\/]/; function tokenBase(stream, state) { var ch = stream.next(); if (ch == "#" && state.startOfLine) { stream.skipToEnd(); return "meta"; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (ch == "(" && stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == ")" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } // Interface return { startState: function() { return {tokenize: null}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; return style; }, electricChars: "{}" }; }); CodeMirror.defineMIME("text/x-pascal", "pascal"); }); application/library/codemirror/mode/pascal/index.html000064400000002640146731177160017063 0ustar00 CodeMirror: Pascal mode

    Pascal mode

    MIME types defined: text/x-pascal.

    application/library/codemirror/mode/jsx/test.js000064400000005626146731177160015753 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "jsx") function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)) } MT("selfclose", "[keyword var] [def x] [operator =] [bracket&tag <] [tag foo] [bracket&tag />] [operator +] [number 1];") MT("openclose", "([bracket&tag <][tag foo][bracket&tag >]hello [atom &][bracket&tag ][operator ++])") MT("attr", "([bracket&tag <][tag foo] [attribute abc]=[string 'value'][bracket&tag >]hello [atom &][bracket&tag ][operator ++])") MT("braced_attr", "([bracket&tag <][tag foo] [attribute abc]={[number 10]}[bracket&tag >]hello [atom &][bracket&tag ][operator ++])") MT("braced_text", "([bracket&tag <][tag foo][bracket&tag >]hello {[number 10]} [atom &][bracket&tag ][operator ++])") MT("nested_tag", "([bracket&tag <][tag foo][bracket&tag ><][tag bar][bracket&tag >][operator ++])") MT("nested_jsx", "[keyword return] (", " [bracket&tag <][tag foo][bracket&tag >]", " say {[number 1] [operator +] [bracket&tag <][tag bar] [attribute attr]={[number 10]}[bracket&tag />]}!", " [bracket&tag ][operator ++]", ")") MT("preserve_js_context", "[variable x] [operator =] [string-2 `quasi${][bracket&tag <][tag foo][bracket&tag />][string-2 }quoted`]") MT("line_comment", "([bracket&tag <][tag foo] [comment // hello]", " [bracket&tag >][operator ++])") MT("line_comment_not_in_tag", "([bracket&tag <][tag foo][bracket&tag >] // hello", " [bracket&tag ][operator ++])") MT("block_comment", "([bracket&tag <][tag foo] [comment /* hello]", "[comment line 2]", "[comment line 3 */] [bracket&tag >][operator ++])") MT("block_comment_not_in_tag", "([bracket&tag <][tag foo][bracket&tag >]/* hello", " line 2", " line 3 */ [bracket&tag ][operator ++])") MT("missing_attr", "([bracket&tag <][tag foo] [attribute selected][bracket&tag />][operator ++])") MT("indent_js", "([bracket&tag <][tag foo][bracket&tag >]", " [bracket&tag <][tag bar] [attribute baz]={[keyword function]() {", " [keyword return] [number 10]", " }}[bracket&tag />]", " [bracket&tag ])") MT("spread", "([bracket&tag <][tag foo] [attribute bar]={[meta ...][variable baz] [operator /][number 2]}[bracket&tag />])") MT("tag_attribute", "([bracket&tag <][tag foo] [attribute bar]=[bracket&tag <][tag foo][bracket&tag />/>][operator ++])") })() application/library/codemirror/mode/jsx/index.html000064400000004552146731177160016430 0ustar00 CodeMirror: JSX mode

    JSX mode

    JSX Mode for React's JavaScript syntax extension.

    MIME types defined: text/jsx, text/typescript-jsx.

    application/library/codemirror/mode/jsx/jsx.js000064400000012113146731177160015565 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript")) else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript"], mod) else // Plain browser env mod(CodeMirror) })(function(CodeMirror) { "use strict" // Depth means the amount of open braces in JS context, in XML // context 0 means not in tag, 1 means in tag, and 2 means in tag // and js block comment. function Context(state, mode, depth, prev) { this.state = state; this.mode = mode; this.depth = depth; this.prev = prev } function copyContext(context) { return new Context(CodeMirror.copyState(context.mode, context.state), context.mode, context.depth, context.prev && copyContext(context.prev)) } CodeMirror.defineMode("jsx", function(config, modeConfig) { var xmlMode = CodeMirror.getMode(config, {name: "xml", allowMissing: true, multilineTagIndentPastTag: false}) var jsMode = CodeMirror.getMode(config, modeConfig && modeConfig.base || "javascript") function flatXMLIndent(state) { var tagName = state.tagName state.tagName = null var result = xmlMode.indent(state, "") state.tagName = tagName return result } function token(stream, state) { if (state.context.mode == xmlMode) return xmlToken(stream, state, state.context) else return jsToken(stream, state, state.context) } function xmlToken(stream, state, cx) { if (cx.depth == 2) { // Inside a JS /* */ comment if (stream.match(/^.*?\*\//)) cx.depth = 1 else stream.skipToEnd() return "comment" } if (stream.peek() == "{") { xmlMode.skipAttribute(cx.state) var indent = flatXMLIndent(cx.state), xmlContext = cx.state.context // If JS starts on same line as tag if (xmlContext && stream.match(/^[^>]*>\s*$/, false)) { while (xmlContext.prev && !xmlContext.startOfLine) xmlContext = xmlContext.prev // If tag starts the line, use XML indentation level if (xmlContext.startOfLine) indent -= config.indentUnit // Else use JS indentation level else if (cx.prev.state.lexical) indent = cx.prev.state.lexical.indented // Else if inside of tag } else if (cx.depth == 1) { indent += config.indentUnit } state.context = new Context(CodeMirror.startState(jsMode, indent), jsMode, 0, state.context) return null } if (cx.depth == 1) { // Inside of tag if (stream.peek() == "<") { // Tag inside of tag xmlMode.skipAttribute(cx.state) state.context = new Context(CodeMirror.startState(xmlMode, flatXMLIndent(cx.state)), xmlMode, 0, state.context) return null } else if (stream.match("//")) { stream.skipToEnd() return "comment" } else if (stream.match("/*")) { cx.depth = 2 return token(stream, state) } } var style = xmlMode.token(stream, cx.state), cur = stream.current(), stop if (/\btag\b/.test(style)) { if (/>$/.test(cur)) { if (cx.state.context) cx.depth = 0 else state.context = state.context.prev } else if (/^ -1) { stream.backUp(cur.length - stop) } return style } function jsToken(stream, state, cx) { if (stream.peek() == "<" && jsMode.expressionAllowed(stream, cx.state)) { jsMode.skipExpression(cx.state) state.context = new Context(CodeMirror.startState(xmlMode, jsMode.indent(cx.state, "")), xmlMode, 0, state.context) return null } var style = jsMode.token(stream, cx.state) if (!style && cx.depth != null) { var cur = stream.current() if (cur == "{") { cx.depth++ } else if (cur == "}") { if (--cx.depth == 0) state.context = state.context.prev } } return style } return { startState: function() { return {context: new Context(CodeMirror.startState(jsMode), jsMode)} }, copyState: function(state) { return {context: copyContext(state.context)} }, token: token, indent: function(state, textAfter, fullLine) { return state.context.mode.indent(state.context.state, textAfter, fullLine) }, innerMode: function(state) { return state.context } } }, "xml", "javascript") CodeMirror.defineMIME("text/jsx", "jsx") CodeMirror.defineMIME("text/typescript-jsx", {name: "jsx", base: {name: "javascript", typescript: true}}) }); application/library/codemirror/mode/diff/index.html000064400000010471146731177160016531 0ustar00 CodeMirror: Diff mode

    Diff mode

    MIME types defined: text/x-diff.

    application/library/codemirror/mode/diff/diff.js000064400000002162146731177160016000 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("diff", function() { var TOKEN_NAMES = { '+': 'positive', '-': 'negative', '@': 'meta' }; return { token: function(stream) { var tw_pos = stream.string.search(/[\t ]+?$/); if (!stream.sol() || tw_pos === 0) { stream.skipToEnd(); return ("error " + ( TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); } var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); if (tw_pos === -1) { stream.skipToEnd(); } else { stream.pos = tw_pos; } return token_name; } }; }); CodeMirror.defineMIME("text/x-diff", "diff"); }); application/library/codemirror/mode/r/r.js000064400000013055146731177160014665 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.registerHelper("wordChars", "r", /[\w.]/); CodeMirror.defineMode("r", function(config) { function wordObj(str) { var words = str.split(" "), res = {}; for (var i = 0; i < words.length; ++i) res[words[i]] = true; return res; } var atoms = wordObj("NULL NA Inf NaN NA_integer_ NA_real_ NA_complex_ NA_character_"); var builtins = wordObj("list quote bquote eval return call parse deparse"); var keywords = wordObj("if else repeat while function for in next break"); var blockkeywords = wordObj("if else repeat while function for"); var opChars = /[+\-*\/^<>=!&|~$:]/; var curPunc; function tokenBase(stream, state) { curPunc = null; var ch = stream.next(); if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (ch == "0" && stream.eat("x")) { stream.eatWhile(/[\da-f]/i); return "number"; } else if (ch == "." && stream.eat(/\d/)) { stream.match(/\d*(?:e[+\-]?\d+)?/); return "number"; } else if (/\d/.test(ch)) { stream.match(/\d*(?:\.\d+)?(?:e[+\-]\d+)?L?/); return "number"; } else if (ch == "'" || ch == '"') { state.tokenize = tokenString(ch); return "string"; } else if (ch == "." && stream.match(/.[.\d]+/)) { return "keyword"; } else if (/[\w\.]/.test(ch) && ch != "_") { stream.eatWhile(/[\w\.]/); var word = stream.current(); if (atoms.propertyIsEnumerable(word)) return "atom"; if (keywords.propertyIsEnumerable(word)) { // Block keywords start new blocks, except 'else if', which only starts // one new block for the 'if', no block for the 'else'. if (blockkeywords.propertyIsEnumerable(word) && !stream.match(/\s*if(\s+|$)/, false)) curPunc = "block"; return "keyword"; } if (builtins.propertyIsEnumerable(word)) return "builtin"; return "variable"; } else if (ch == "%") { if (stream.skipTo("%")) stream.next(); return "variable-2"; } else if (ch == "<" && stream.eat("-")) { return "arrow"; } else if (ch == "=" && state.ctx.argList) { return "arg-is"; } else if (opChars.test(ch)) { if (ch == "$") return "dollar"; stream.eatWhile(opChars); return "operator"; } else if (/[\(\){}\[\];]/.test(ch)) { curPunc = ch; if (ch == ";") return "semi"; return null; } else { return null; } } function tokenString(quote) { return function(stream, state) { if (stream.eat("\\")) { var ch = stream.next(); if (ch == "x") stream.match(/^[a-f0-9]{2}/i); else if ((ch == "u" || ch == "U") && stream.eat("{") && stream.skipTo("}")) stream.next(); else if (ch == "u") stream.match(/^[a-f0-9]{4}/i); else if (ch == "U") stream.match(/^[a-f0-9]{8}/i); else if (/[0-7]/.test(ch)) stream.match(/^[0-7]{1,2}/); return "string-2"; } else { var next; while ((next = stream.next()) != null) { if (next == quote) { state.tokenize = tokenBase; break; } if (next == "\\") { stream.backUp(1); break; } } return "string"; } }; } function push(state, type, stream) { state.ctx = {type: type, indent: state.indent, align: null, column: stream.column(), prev: state.ctx}; } function pop(state) { state.indent = state.ctx.indent; state.ctx = state.ctx.prev; } return { startState: function() { return {tokenize: tokenBase, ctx: {type: "top", indent: -config.indentUnit, align: false}, indent: 0, afterIdent: false}; }, token: function(stream, state) { if (stream.sol()) { if (state.ctx.align == null) state.ctx.align = false; state.indent = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style != "comment" && state.ctx.align == null) state.ctx.align = true; var ctype = state.ctx.type; if ((curPunc == ";" || curPunc == "{" || curPunc == "}") && ctype == "block") pop(state); if (curPunc == "{") push(state, "}", stream); else if (curPunc == "(") { push(state, ")", stream); if (state.afterIdent) state.ctx.argList = true; } else if (curPunc == "[") push(state, "]", stream); else if (curPunc == "block") push(state, "block", stream); else if (curPunc == ctype) pop(state); state.afterIdent = style == "variable" || style == "keyword"; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), ctx = state.ctx, closing = firstChar == ctx.type; if (ctx.type == "block") return ctx.indent + (firstChar == "{" ? 0 : config.indentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indent + (closing ? 0 : config.indentUnit); }, lineComment: "#" }; }); CodeMirror.defineMIME("text/x-rsrc", "r"); }); application/library/codemirror/mode/r/index.html000064400000005016146731177160016061 0ustar00 CodeMirror: R mode

    R mode

    MIME types defined: text/x-rsrc.

    Development of the CodeMirror R mode was kindly sponsored by Ubalo.

    application/library/codemirror/mode/haml/test.js000064400000005702146731177160016063 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4, indentUnit: 2}, "haml"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } // Requires at least one media query MT("elementName", "[tag %h1] Hey There"); MT("oneElementPerLine", "[tag %h1] Hey There %h2"); MT("idSelector", "[tag %h1][attribute #test] Hey There"); MT("classSelector", "[tag %h1][attribute .hello] Hey There"); MT("docType", "[tag !!! XML]"); MT("comment", "[comment / Hello WORLD]"); MT("notComment", "[tag %h1] This is not a / comment "); MT("attributes", "[tag %a]([variable title][operator =][string \"test\"]){[atom :title] [operator =>] [string \"test\"]}"); MT("htmlCode", "[tag&bracket <][tag h1][tag&bracket >]Title[tag&bracket ]"); MT("rubyBlock", "[operator =][variable-2 @item]"); MT("selectorRubyBlock", "[tag %a.selector=] [variable-2 @item]"); MT("nestedRubyBlock", "[tag %a]", " [operator =][variable puts] [string \"test\"]"); MT("multilinePlaintext", "[tag %p]", " Hello,", " World"); MT("multilineRuby", "[tag %p]", " [comment -# this is a comment]", " [comment and this is a comment too]", " Date/Time", " [operator -] [variable now] [operator =] [tag DateTime][operator .][property now]", " [tag %strong=] [variable now]", " [operator -] [keyword if] [variable now] [operator >] [tag DateTime][operator .][property parse]([string \"December 31, 2006\"])", " [operator =][string \"Happy\"]", " [operator =][string \"Belated\"]", " [operator =][string \"Birthday\"]"); MT("multilineComment", "[comment /]", " [comment Multiline]", " [comment Comment]"); MT("hamlComment", "[comment -# this is a comment]"); MT("multilineHamlComment", "[comment -# this is a comment]", " [comment and this is a comment too]"); MT("multilineHTMLComment", "[comment ]"); MT("hamlAfterRubyTag", "[attribute .block]", " [tag %strong=] [variable now]", " [attribute .test]", " [operator =][variable now]", " [attribute .right]"); MT("stretchedRuby", "[operator =] [variable puts] [string \"Hello\"],", " [string \"World\"]"); MT("interpolationInHashAttribute", //"[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test"); "[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test"); MT("interpolationInHTMLAttribute", "[tag %div]([variable title][operator =][string \"#{][variable test][string }_#{][variable ting]()[string }\"]) Test"); })(); application/library/codemirror/mode/haml/index.html000064400000004027146731177160016542 0ustar00 CodeMirror: HAML mode

    HAML mode

    MIME types defined: text/x-haml.

    Parsing/Highlighting Tests: normal, verbose.

    application/library/codemirror/mode/haml/haml.js000064400000012351146731177160016023 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../ruby/ruby")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../ruby/ruby"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; // full haml mode. This handled embedded ruby and html fragments too CodeMirror.defineMode("haml", function(config) { var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"}); var rubyMode = CodeMirror.getMode(config, "ruby"); function rubyInQuote(endQuote) { return function(stream, state) { var ch = stream.peek(); if (ch == endQuote && state.rubyState.tokenize.length == 1) { // step out of ruby context as it seems to complete processing all the braces stream.next(); state.tokenize = html; return "closeAttributeTag"; } else { return ruby(stream, state); } }; } function ruby(stream, state) { if (stream.match("-#")) { stream.skipToEnd(); return "comment"; } return rubyMode.token(stream, state.rubyState); } function html(stream, state) { var ch = stream.peek(); // handle haml declarations. All declarations that cant be handled here // will be passed to html mode if (state.previousToken.style == "comment" ) { if (state.indented > state.previousToken.indented) { stream.skipToEnd(); return "commentLine"; } } if (state.startOfLine) { if (ch == "!" && stream.match("!!")) { stream.skipToEnd(); return "tag"; } else if (stream.match(/^%[\w:#\.]+=/)) { state.tokenize = ruby; return "hamlTag"; } else if (stream.match(/^%[\w:]+/)) { return "hamlTag"; } else if (ch == "/" ) { stream.skipToEnd(); return "comment"; } } if (state.startOfLine || state.previousToken.style == "hamlTag") { if ( ch == "#" || ch == ".") { stream.match(/[\w-#\.]*/); return "hamlAttribute"; } } // donot handle --> as valid ruby, make it HTML close comment instead if (state.startOfLine && !stream.match("-->", false) && (ch == "=" || ch == "-" )) { state.tokenize = ruby; return state.tokenize(stream, state); } if (state.previousToken.style == "hamlTag" || state.previousToken.style == "closeAttributeTag" || state.previousToken.style == "hamlAttribute") { if (ch == "(") { state.tokenize = rubyInQuote(")"); return state.tokenize(stream, state); } else if (ch == "{") { if (!stream.match(/^\{%.*/)) { state.tokenize = rubyInQuote("}"); return state.tokenize(stream, state); } } } return htmlMode.token(stream, state.htmlState); } return { // default to html mode startState: function() { var htmlState = CodeMirror.startState(htmlMode); var rubyState = CodeMirror.startState(rubyMode); return { htmlState: htmlState, rubyState: rubyState, indented: 0, previousToken: { style: null, indented: 0}, tokenize: html }; }, copyState: function(state) { return { htmlState : CodeMirror.copyState(htmlMode, state.htmlState), rubyState: CodeMirror.copyState(rubyMode, state.rubyState), indented: state.indented, previousToken: state.previousToken, tokenize: state.tokenize }; }, token: function(stream, state) { if (stream.sol()) { state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); state.startOfLine = false; // dont record comment line as we only want to measure comment line with // the opening comment block if (style && style != "commentLine") { state.previousToken = { style: style, indented: state.indented }; } // if current state is ruby and the previous token is not `,` reset the // tokenize to html if (stream.eol() && state.tokenize == ruby) { stream.backUp(1); var ch = stream.peek(); stream.next(); if (ch && ch != ",") { state.tokenize = html; } } // reprocess some of the specific style tag when finish setting previousToken if (style == "hamlTag") { style = "tag"; } else if (style == "commentLine") { style = "comment"; } else if (style == "hamlAttribute") { style = "attribute"; } else if (style == "closeAttributeTag") { style = null; } return style; } }; }, "htmlmixed", "ruby"); CodeMirror.defineMIME("text/x-haml", "haml"); }); application/library/codemirror/mode/mumps/index.html000064400000005060146731177160016760 0ustar00 CodeMirror: MUMPS mode

    MUMPS mode

    application/library/codemirror/mode/mumps/mumps.js000064400000012352146731177160016464 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* This MUMPS Language script was constructed using vbscript.js as a template. */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("mumps", function() { function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); } var singleOperators = new RegExp("^[\\+\\-\\*/&#!_?\\\\<>=\\'\\[\\]]"); var doubleOperators = new RegExp("^(('=)|(<=)|(>=)|('>)|('<)|([[)|(]])|(^$))"); var singleDelimiters = new RegExp("^[\\.,:]"); var brackets = new RegExp("[()]"); var identifiers = new RegExp("^[%A-Za-z][A-Za-z0-9]*"); var commandKeywords = ["break","close","do","else","for","goto", "halt", "hang", "if", "job","kill","lock","merge","new","open", "quit", "read", "set", "tcommit", "trollback", "tstart", "use", "view", "write", "xecute", "b","c","d","e","f","g", "h", "i", "j","k","l","m","n","o", "q", "r", "s", "tc", "tro", "ts", "u", "v", "w", "x"]; // The following list includes instrinsic functions _and_ special variables var intrinsicFuncsWords = ["\\$ascii", "\\$char", "\\$data", "\\$ecode", "\\$estack", "\\$etrap", "\\$extract", "\\$find", "\\$fnumber", "\\$get", "\\$horolog", "\\$io", "\\$increment", "\\$job", "\\$justify", "\\$length", "\\$name", "\\$next", "\\$order", "\\$piece", "\\$qlength", "\\$qsubscript", "\\$query", "\\$quit", "\\$random", "\\$reverse", "\\$select", "\\$stack", "\\$test", "\\$text", "\\$translate", "\\$view", "\\$x", "\\$y", "\\$a", "\\$c", "\\$d", "\\$e", "\\$ec", "\\$es", "\\$et", "\\$f", "\\$fn", "\\$g", "\\$h", "\\$i", "\\$j", "\\$l", "\\$n", "\\$na", "\\$o", "\\$p", "\\$q", "\\$ql", "\\$qs", "\\$r", "\\$re", "\\$s", "\\$st", "\\$t", "\\$tr", "\\$v", "\\$z"]; var intrinsicFuncs = wordRegexp(intrinsicFuncsWords); var command = wordRegexp(commandKeywords); function tokenBase(stream, state) { if (stream.sol()) { state.label = true; state.commandMode = 0; } // The character has meaning in MUMPS. Ignoring consecutive // spaces would interfere with interpreting whether the next non-space // character belongs to the command or argument context. // Examine each character and update a mode variable whose interpretation is: // >0 => command 0 => argument <0 => command post-conditional var ch = stream.peek(); if (ch == " " || ch == "\t") { // Pre-process state.label = false; if (state.commandMode == 0) state.commandMode = 1; else if ((state.commandMode < 0) || (state.commandMode == 2)) state.commandMode = 0; } else if ((ch != ".") && (state.commandMode > 0)) { if (ch == ":") state.commandMode = -1; // SIS - Command post-conditional else state.commandMode = 2; } // Do not color parameter list as line tag if ((ch === "(") || (ch === "\u0009")) state.label = false; // MUMPS comment starts with ";" if (ch === ";") { stream.skipToEnd(); return "comment"; } // Number Literals // SIS/RLM - MUMPS permits canonic number followed by concatenate operator if (stream.match(/^[-+]?\d+(\.\d+)?([eE][-+]?\d+)?/)) return "number"; // Handle Strings if (ch == '"') { if (stream.skipTo('"')) { stream.next(); return "string"; } else { stream.skipToEnd(); return "error"; } } // Handle operators and Delimiters if (stream.match(doubleOperators) || stream.match(singleOperators)) return "operator"; // Prevents leading "." in DO block from falling through to error if (stream.match(singleDelimiters)) return null; if (brackets.test(ch)) { stream.next(); return "bracket"; } if (state.commandMode > 0 && stream.match(command)) return "variable-2"; if (stream.match(intrinsicFuncs)) return "builtin"; if (stream.match(identifiers)) return "variable"; // Detect dollar-sign when not a documented intrinsic function // "^" may introduce a GVN or SSVN - Color same as function if (ch === "$" || ch === "^") { stream.next(); return "builtin"; } // MUMPS Indirection if (ch === "@") { stream.next(); return "string-2"; } if (/[\w%]/.test(ch)) { stream.eatWhile(/[\w%]/); return "variable"; } // Handle non-detected items stream.next(); return "error"; } return { startState: function() { return { label: false, commandMode: 0 }; }, token: function(stream, state) { var style = tokenBase(stream, state); if (state.label) return "tag"; return style; } }; }); CodeMirror.defineMIME("text/x-mumps", "mumps"); }); application/library/codemirror/mode/elm/elm.js000064400000012660146731177160015516 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("elm", function() { function switchState(source, setState, f) { setState(f); return f(source, setState); } // These should all be Unicode extended, as per the Haskell 2010 report var smallRE = /[a-z_]/; var largeRE = /[A-Z]/; var digitRE = /[0-9]/; var hexitRE = /[0-9A-Fa-f]/; var octitRE = /[0-7]/; var idRE = /[a-z_A-Z0-9\']/; var symbolRE = /[-!#$%&*+.\/<=>?@\\^|~:\u03BB\u2192]/; var specialRE = /[(),;[\]`{}]/; var whiteCharRE = /[ \t\v\f]/; // newlines are handled in tokenizer function normal() { return function (source, setState) { if (source.eatWhile(whiteCharRE)) { return null; } var ch = source.next(); if (specialRE.test(ch)) { if (ch == '{' && source.eat('-')) { var t = "comment"; if (source.eat('#')) t = "meta"; return switchState(source, setState, ncomment(t, 1)); } return null; } if (ch == '\'') { if (source.eat('\\')) source.next(); // should handle other escapes here else source.next(); if (source.eat('\'')) return "string"; return "error"; } if (ch == '"') { return switchState(source, setState, stringLiteral); } if (largeRE.test(ch)) { source.eatWhile(idRE); if (source.eat('.')) return "qualifier"; return "variable-2"; } if (smallRE.test(ch)) { var isDef = source.pos === 1; source.eatWhile(idRE); return isDef ? "variable-3" : "variable"; } if (digitRE.test(ch)) { if (ch == '0') { if (source.eat(/[xX]/)) { source.eatWhile(hexitRE); // should require at least 1 return "integer"; } if (source.eat(/[oO]/)) { source.eatWhile(octitRE); // should require at least 1 return "number"; } } source.eatWhile(digitRE); var t = "number"; if (source.eat('.')) { t = "number"; source.eatWhile(digitRE); // should require at least 1 } if (source.eat(/[eE]/)) { t = "number"; source.eat(/[-+]/); source.eatWhile(digitRE); // should require at least 1 } return t; } if (symbolRE.test(ch)) { if (ch == '-' && source.eat(/-/)) { source.eatWhile(/-/); if (!source.eat(symbolRE)) { source.skipToEnd(); return "comment"; } } source.eatWhile(symbolRE); return "builtin"; } return "error"; } } function ncomment(type, nest) { if (nest == 0) { return normal(); } return function(source, setState) { var currNest = nest; while (!source.eol()) { var ch = source.next(); if (ch == '{' && source.eat('-')) { ++currNest; } else if (ch == '-' && source.eat('}')) { --currNest; if (currNest == 0) { setState(normal()); return type; } } } setState(ncomment(type, currNest)); return type; } } function stringLiteral(source, setState) { while (!source.eol()) { var ch = source.next(); if (ch == '"') { setState(normal()); return "string"; } if (ch == '\\') { if (source.eol() || source.eat(whiteCharRE)) { setState(stringGap); return "string"; } if (!source.eat('&')) source.next(); // should handle other escapes here } } setState(normal()); return "error"; } function stringGap(source, setState) { if (source.eat('\\')) { return switchState(source, setState, stringLiteral); } source.next(); setState(normal()); return "error"; } var wellKnownWords = (function() { var wkw = {}; var keywords = [ "case", "of", "as", "if", "then", "else", "let", "in", "infix", "infixl", "infixr", "type", "alias", "input", "output", "foreign", "loopback", "module", "where", "import", "exposing", "_", "..", "|", ":", "=", "\\", "\"", "->", "<-" ]; for (var i = keywords.length; i--;) wkw[keywords[i]] = "keyword"; return wkw; })(); return { startState: function () { return { f: normal() }; }, copyState: function (s) { return { f: s.f }; }, token: function(stream, state) { var t = state.f(stream, function(s) { state.f = s; }); var w = stream.current(); return (wellKnownWords.hasOwnProperty(w)) ? wellKnownWords[w] : t; } }; }); CodeMirror.defineMIME("text/x-elm", "elm"); }); application/library/codemirror/mode/elm/index.html000064400000003150146731177160016372 0ustar00 CodeMirror: Elm mode

    Elm mode

    MIME types defined: text/x-elm.

    application/library/codemirror/mode/velocity/velocity.js000064400000015672146731177160017666 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("velocity", function() { function parseWords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = parseWords("#end #else #break #stop #[[ #]] " + "#{end} #{else} #{break} #{stop}"); var functions = parseWords("#if #elseif #foreach #set #include #parse #macro #define #evaluate " + "#{if} #{elseif} #{foreach} #{set} #{include} #{parse} #{macro} #{define} #{evaluate}"); var specials = parseWords("$foreach.count $foreach.hasNext $foreach.first $foreach.last $foreach.topmost $foreach.parent.count $foreach.parent.hasNext $foreach.parent.first $foreach.parent.last $foreach.parent $velocityCount $!bodyContent $bodyContent"); var isOperatorChar = /[+\-*&%=<>!?:\/|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var beforeParams = state.beforeParams; state.beforeParams = false; var ch = stream.next(); // start of unparsed string? if ((ch == "'") && !state.inString && state.inParams) { state.lastTokenWasBuiltin = false; return chain(stream, state, tokenString(ch)); } // start of parsed string? else if ((ch == '"')) { state.lastTokenWasBuiltin = false; if (state.inString) { state.inString = false; return "string"; } else if (state.inParams) return chain(stream, state, tokenString(ch)); } // is it one of the special signs []{}().,;? Seperator? else if (/[\[\]{}\(\),;\.]/.test(ch)) { if (ch == "(" && beforeParams) state.inParams = true; else if (ch == ")") { state.inParams = false; state.lastTokenWasBuiltin = true; } return null; } // start of a number value? else if (/\d/.test(ch)) { state.lastTokenWasBuiltin = false; stream.eatWhile(/[\w\.]/); return "number"; } // multi line comment? else if (ch == "#" && stream.eat("*")) { state.lastTokenWasBuiltin = false; return chain(stream, state, tokenComment); } // unparsed content? else if (ch == "#" && stream.match(/ *\[ *\[/)) { state.lastTokenWasBuiltin = false; return chain(stream, state, tokenUnparsed); } // single line comment? else if (ch == "#" && stream.eat("#")) { state.lastTokenWasBuiltin = false; stream.skipToEnd(); return "comment"; } // variable? else if (ch == "$") { stream.eatWhile(/[\w\d\$_\.{}]/); // is it one of the specials? if (specials && specials.propertyIsEnumerable(stream.current())) { return "keyword"; } else { state.lastTokenWasBuiltin = true; state.beforeParams = true; return "builtin"; } } // is it a operator? else if (isOperatorChar.test(ch)) { state.lastTokenWasBuiltin = false; stream.eatWhile(isOperatorChar); return "operator"; } else { // get the whole word stream.eatWhile(/[\w\$_{}@]/); var word = stream.current(); // is it one of the listed keywords? if (keywords && keywords.propertyIsEnumerable(word)) return "keyword"; // is it one of the listed functions? if (functions && functions.propertyIsEnumerable(word) || (stream.current().match(/^#@?[a-z0-9_]+ *$/i) && stream.peek()=="(") && !(functions && functions.propertyIsEnumerable(word.toLowerCase()))) { state.beforeParams = true; state.lastTokenWasBuiltin = false; return "keyword"; } if (state.inString) { state.lastTokenWasBuiltin = false; return "string"; } if (stream.pos > word.length && stream.string.charAt(stream.pos-word.length-1)=="." && state.lastTokenWasBuiltin) return "builtin"; // default: just a "word" state.lastTokenWasBuiltin = false; return null; } } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if ((next == quote) && !escaped) { end = true; break; } if (quote=='"' && stream.peek() == '$' && !escaped) { state.inString = true; end = true; break; } escaped = !escaped && next == "\\"; } if (end) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenUnparsed(stream, state) { var maybeEnd = 0, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd == 2) { state.tokenize = tokenBase; break; } if (ch == "]") maybeEnd++; else if (ch != " ") maybeEnd = 0; } return "meta"; } // Interface return { startState: function() { return { tokenize: tokenBase, beforeParams: false, inParams: false, inString: false, lastTokenWasBuiltin: false }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, blockCommentStart: "#*", blockCommentEnd: "*#", lineComment: "##", fold: "velocity" }; }); CodeMirror.defineMIME("text/velocity", "velocity"); }); application/library/codemirror/mode/velocity/index.html000064400000006344146731177160017463 0ustar00 CodeMirror: Velocity mode

    Velocity mode

    MIME types defined: text/velocity.

    application/library/codemirror/mode/fcl/fcl.js000064400000011137146731177160015472 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("fcl", function(config) { var indentUnit = config.indentUnit; var keywords = { "term": true, "method": true, "accu": true, "rule": true, "then": true, "is": true, "and": true, "or": true, "if": true, "default": true }; var start_blocks = { "var_input": true, "var_output": true, "fuzzify": true, "defuzzify": true, "function_block": true, "ruleblock": true }; var end_blocks = { "end_ruleblock": true, "end_defuzzify": true, "end_function_block": true, "end_fuzzify": true, "end_var": true }; var atoms = { "true": true, "false": true, "nan": true, "real": true, "min": true, "max": true, "cog": true, "cogs": true }; var isOperatorChar = /[+\-*&^%:=<>!|\/]/; function tokenBase(stream, state) { var ch = stream.next(); if (/[\d\.]/.test(ch)) { if (ch == ".") { stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); } else if (ch == "0") { stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); } else { stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); } return "number"; } if (ch == "/" || ch == "(") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current().toLowerCase(); if (keywords.propertyIsEnumerable(cur) || start_blocks.propertyIsEnumerable(cur) || end_blocks.propertyIsEnumerable(cur)) { return "keyword"; } if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if ((ch == "/" || ch == ")") && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { if (!state.context.prev) return; var t = state.context.type; if (t == "end_block") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; var cur = stream.current().toLowerCase(); if (start_blocks.propertyIsEnumerable(cur)) pushContext(state, stream.column(), "end_block"); else if (end_blocks.propertyIsEnumerable(cur)) popContext(state); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return 0; var ctx = state.context; var closing = end_blocks.propertyIsEnumerable(textAfter); if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "ryk", fold: "brace", blockCommentStart: "(*", blockCommentEnd: "*)", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-fcl", "fcl"); }); application/library/codemirror/mode/fcl/index.html000064400000006023146731177160016363 0ustar00 CodeMirror: FCL mode

    FCL mode

    MIME type: text/x-fcl

    application/library/codemirror/mode/rst/rst.js000064400000042213146731177160015601 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../python/python"), require("../stex/stex"), require("../../addon/mode/overlay")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../python/python", "../stex/stex", "../../addon/mode/overlay"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('rst', function (config, options) { var rx_strong = /^\*\*[^\*\s](?:[^\*]*[^\*\s])?\*\*/; var rx_emphasis = /^\*[^\*\s](?:[^\*]*[^\*\s])?\*/; var rx_literal = /^``[^`\s](?:[^`]*[^`\s])``/; var rx_number = /^(?:[\d]+(?:[\.,]\d+)*)/; var rx_positive = /^(?:\s\+[\d]+(?:[\.,]\d+)*)/; var rx_negative = /^(?:\s\-[\d]+(?:[\.,]\d+)*)/; var rx_uri_protocol = "[Hh][Tt][Tt][Pp][Ss]?://"; var rx_uri_domain = "(?:[\\d\\w.-]+)\\.(?:\\w{2,6})"; var rx_uri_path = "(?:/[\\d\\w\\#\\%\\&\\-\\.\\,\\/\\:\\=\\?\\~]+)*"; var rx_uri = new RegExp("^" + rx_uri_protocol + rx_uri_domain + rx_uri_path); var overlay = { token: function (stream) { if (stream.match(rx_strong) && stream.match (/\W+|$/, false)) return 'strong'; if (stream.match(rx_emphasis) && stream.match (/\W+|$/, false)) return 'em'; if (stream.match(rx_literal) && stream.match (/\W+|$/, false)) return 'string-2'; if (stream.match(rx_number)) return 'number'; if (stream.match(rx_positive)) return 'positive'; if (stream.match(rx_negative)) return 'negative'; if (stream.match(rx_uri)) return 'link'; while (stream.next() != null) { if (stream.match(rx_strong, false)) break; if (stream.match(rx_emphasis, false)) break; if (stream.match(rx_literal, false)) break; if (stream.match(rx_number, false)) break; if (stream.match(rx_positive, false)) break; if (stream.match(rx_negative, false)) break; if (stream.match(rx_uri, false)) break; } return null; } }; var mode = CodeMirror.getMode( config, options.backdrop || 'rst-base' ); return CodeMirror.overlayMode(mode, overlay, true); // combine }, 'python', 'stex'); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// CodeMirror.defineMode('rst-base', function (config) { /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function format(string) { var args = Array.prototype.slice.call(arguments, 1); return string.replace(/{(\d+)}/g, function (match, n) { return typeof args[n] != 'undefined' ? args[n] : match; }); } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// var mode_python = CodeMirror.getMode(config, 'python'); var mode_stex = CodeMirror.getMode(config, 'stex'); /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// var SEPA = "\\s+"; var TAIL = "(?:\\s*|\\W|$)", rx_TAIL = new RegExp(format('^{0}', TAIL)); var NAME = "(?:[^\\W\\d_](?:[\\w!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)", rx_NAME = new RegExp(format('^{0}', NAME)); var NAME_WWS = "(?:[^\\W\\d_](?:[\\w\\s!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)"; var REF_NAME = format('(?:{0}|`{1}`)', NAME, NAME_WWS); var TEXT1 = "(?:[^\\s\\|](?:[^\\|]*[^\\s\\|])?)"; var TEXT2 = "(?:[^\\`]+)", rx_TEXT2 = new RegExp(format('^{0}', TEXT2)); var rx_section = new RegExp( "^([!'#$%&\"()*+,-./:;<=>?@\\[\\\\\\]^_`{|}~])\\1{3,}\\s*$"); var rx_explicit = new RegExp( format('^\\.\\.{0}', SEPA)); var rx_link = new RegExp( format('^_{0}:{1}|^__:{1}', REF_NAME, TAIL)); var rx_directive = new RegExp( format('^{0}::{1}', REF_NAME, TAIL)); var rx_substitution = new RegExp( format('^\\|{0}\\|{1}{2}::{3}', TEXT1, SEPA, REF_NAME, TAIL)); var rx_footnote = new RegExp( format('^\\[(?:\\d+|#{0}?|\\*)]{1}', REF_NAME, TAIL)); var rx_citation = new RegExp( format('^\\[{0}\\]{1}', REF_NAME, TAIL)); var rx_substitution_ref = new RegExp( format('^\\|{0}\\|', TEXT1)); var rx_footnote_ref = new RegExp( format('^\\[(?:\\d+|#{0}?|\\*)]_', REF_NAME)); var rx_citation_ref = new RegExp( format('^\\[{0}\\]_', REF_NAME)); var rx_link_ref1 = new RegExp( format('^{0}__?', REF_NAME)); var rx_link_ref2 = new RegExp( format('^`{0}`_', TEXT2)); var rx_role_pre = new RegExp( format('^:{0}:`{1}`{2}', NAME, TEXT2, TAIL)); var rx_role_suf = new RegExp( format('^`{1}`:{0}:{2}', NAME, TEXT2, TAIL)); var rx_role = new RegExp( format('^:{0}:{1}', NAME, TAIL)); var rx_directive_name = new RegExp(format('^{0}', REF_NAME)); var rx_directive_tail = new RegExp(format('^::{0}', TAIL)); var rx_substitution_text = new RegExp(format('^\\|{0}\\|', TEXT1)); var rx_substitution_sepa = new RegExp(format('^{0}', SEPA)); var rx_substitution_name = new RegExp(format('^{0}', REF_NAME)); var rx_substitution_tail = new RegExp(format('^::{0}', TAIL)); var rx_link_head = new RegExp("^_"); var rx_link_name = new RegExp(format('^{0}|_', REF_NAME)); var rx_link_tail = new RegExp(format('^:{0}', TAIL)); var rx_verbatim = new RegExp('^::\\s*$'); var rx_examples = new RegExp('^\\s+(?:>>>|In \\[\\d+\\]:)\\s'); /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_normal(stream, state) { var token = null; if (stream.sol() && stream.match(rx_examples, false)) { change(state, to_mode, { mode: mode_python, local: CodeMirror.startState(mode_python) }); } else if (stream.sol() && stream.match(rx_explicit)) { change(state, to_explicit); token = 'meta'; } else if (stream.sol() && stream.match(rx_section)) { change(state, to_normal); token = 'header'; } else if (phase(state) == rx_role_pre || stream.match(rx_role_pre, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_role_pre, 1)); stream.match(/^:/); token = 'meta'; break; case 1: change(state, to_normal, context(rx_role_pre, 2)); stream.match(rx_NAME); token = 'keyword'; if (stream.current().match(/^(?:math|latex)/)) { state.tmp_stex = true; } break; case 2: change(state, to_normal, context(rx_role_pre, 3)); stream.match(/^:`/); token = 'meta'; break; case 3: if (state.tmp_stex) { state.tmp_stex = undefined; state.tmp = { mode: mode_stex, local: CodeMirror.startState(mode_stex) }; } if (state.tmp) { if (stream.peek() == '`') { change(state, to_normal, context(rx_role_pre, 4)); state.tmp = undefined; break; } token = state.tmp.mode.token(stream, state.tmp.local); break; } change(state, to_normal, context(rx_role_pre, 4)); stream.match(rx_TEXT2); token = 'string'; break; case 4: change(state, to_normal, context(rx_role_pre, 5)); stream.match(/^`/); token = 'meta'; break; case 5: change(state, to_normal, context(rx_role_pre, 6)); stream.match(rx_TAIL); break; default: change(state, to_normal); } } else if (phase(state) == rx_role_suf || stream.match(rx_role_suf, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_role_suf, 1)); stream.match(/^`/); token = 'meta'; break; case 1: change(state, to_normal, context(rx_role_suf, 2)); stream.match(rx_TEXT2); token = 'string'; break; case 2: change(state, to_normal, context(rx_role_suf, 3)); stream.match(/^`:/); token = 'meta'; break; case 3: change(state, to_normal, context(rx_role_suf, 4)); stream.match(rx_NAME); token = 'keyword'; break; case 4: change(state, to_normal, context(rx_role_suf, 5)); stream.match(/^:/); token = 'meta'; break; case 5: change(state, to_normal, context(rx_role_suf, 6)); stream.match(rx_TAIL); break; default: change(state, to_normal); } } else if (phase(state) == rx_role || stream.match(rx_role, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_role, 1)); stream.match(/^:/); token = 'meta'; break; case 1: change(state, to_normal, context(rx_role, 2)); stream.match(rx_NAME); token = 'keyword'; break; case 2: change(state, to_normal, context(rx_role, 3)); stream.match(/^:/); token = 'meta'; break; case 3: change(state, to_normal, context(rx_role, 4)); stream.match(rx_TAIL); break; default: change(state, to_normal); } } else if (phase(state) == rx_substitution_ref || stream.match(rx_substitution_ref, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_substitution_ref, 1)); stream.match(rx_substitution_text); token = 'variable-2'; break; case 1: change(state, to_normal, context(rx_substitution_ref, 2)); if (stream.match(/^_?_?/)) token = 'link'; break; default: change(state, to_normal); } } else if (stream.match(rx_footnote_ref)) { change(state, to_normal); token = 'quote'; } else if (stream.match(rx_citation_ref)) { change(state, to_normal); token = 'quote'; } else if (stream.match(rx_link_ref1)) { change(state, to_normal); if (!stream.peek() || stream.peek().match(/^\W$/)) { token = 'link'; } } else if (phase(state) == rx_link_ref2 || stream.match(rx_link_ref2, false)) { switch (stage(state)) { case 0: if (!stream.peek() || stream.peek().match(/^\W$/)) { change(state, to_normal, context(rx_link_ref2, 1)); } else { stream.match(rx_link_ref2); } break; case 1: change(state, to_normal, context(rx_link_ref2, 2)); stream.match(/^`/); token = 'link'; break; case 2: change(state, to_normal, context(rx_link_ref2, 3)); stream.match(rx_TEXT2); break; case 3: change(state, to_normal, context(rx_link_ref2, 4)); stream.match(/^`_/); token = 'link'; break; default: change(state, to_normal); } } else if (stream.match(rx_verbatim)) { change(state, to_verbatim); } else { if (stream.next()) change(state, to_normal); } return token; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_explicit(stream, state) { var token = null; if (phase(state) == rx_substitution || stream.match(rx_substitution, false)) { switch (stage(state)) { case 0: change(state, to_explicit, context(rx_substitution, 1)); stream.match(rx_substitution_text); token = 'variable-2'; break; case 1: change(state, to_explicit, context(rx_substitution, 2)); stream.match(rx_substitution_sepa); break; case 2: change(state, to_explicit, context(rx_substitution, 3)); stream.match(rx_substitution_name); token = 'keyword'; break; case 3: change(state, to_explicit, context(rx_substitution, 4)); stream.match(rx_substitution_tail); token = 'meta'; break; default: change(state, to_normal); } } else if (phase(state) == rx_directive || stream.match(rx_directive, false)) { switch (stage(state)) { case 0: change(state, to_explicit, context(rx_directive, 1)); stream.match(rx_directive_name); token = 'keyword'; if (stream.current().match(/^(?:math|latex)/)) state.tmp_stex = true; else if (stream.current().match(/^python/)) state.tmp_py = true; break; case 1: change(state, to_explicit, context(rx_directive, 2)); stream.match(rx_directive_tail); token = 'meta'; if (stream.match(/^latex\s*$/) || state.tmp_stex) { state.tmp_stex = undefined; change(state, to_mode, { mode: mode_stex, local: CodeMirror.startState(mode_stex) }); } break; case 2: change(state, to_explicit, context(rx_directive, 3)); if (stream.match(/^python\s*$/) || state.tmp_py) { state.tmp_py = undefined; change(state, to_mode, { mode: mode_python, local: CodeMirror.startState(mode_python) }); } break; default: change(state, to_normal); } } else if (phase(state) == rx_link || stream.match(rx_link, false)) { switch (stage(state)) { case 0: change(state, to_explicit, context(rx_link, 1)); stream.match(rx_link_head); stream.match(rx_link_name); token = 'link'; break; case 1: change(state, to_explicit, context(rx_link, 2)); stream.match(rx_link_tail); token = 'meta'; break; default: change(state, to_normal); } } else if (stream.match(rx_footnote)) { change(state, to_normal); token = 'quote'; } else if (stream.match(rx_citation)) { change(state, to_normal); token = 'quote'; } else { stream.eatSpace(); if (stream.eol()) { change(state, to_normal); } else { stream.skipToEnd(); change(state, to_comment); token = 'comment'; } } return token; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_comment(stream, state) { return as_block(stream, state, 'comment'); } function to_verbatim(stream, state) { return as_block(stream, state, 'meta'); } function as_block(stream, state, token) { if (stream.eol() || stream.eatSpace()) { stream.skipToEnd(); return token; } else { change(state, to_normal); return null; } } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_mode(stream, state) { if (state.ctx.mode && state.ctx.local) { if (stream.sol()) { if (!stream.eatSpace()) change(state, to_normal); return null; } return state.ctx.mode.token(stream, state.ctx.local); } change(state, to_normal); return null; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function context(phase, stage, mode, local) { return {phase: phase, stage: stage, mode: mode, local: local}; } function change(state, tok, ctx) { state.tok = tok; state.ctx = ctx || {}; } function stage(state) { return state.ctx.stage || 0; } function phase(state) { return state.ctx.phase; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// return { startState: function () { return {tok: to_normal, ctx: context(undefined, 0)}; }, copyState: function (state) { var ctx = state.ctx, tmp = state.tmp; if (ctx.local) ctx = {mode: ctx.mode, local: CodeMirror.copyState(ctx.mode, ctx.local)}; if (tmp) tmp = {mode: tmp.mode, local: CodeMirror.copyState(tmp.mode, tmp.local)}; return {tok: state.tok, ctx: ctx, tmp: tmp}; }, innerMode: function (state) { return state.tmp ? {state: state.tmp.local, mode: state.tmp.mode} : state.ctx.mode ? {state: state.ctx.local, mode: state.ctx.mode} : null; }, token: function (stream, state) { return state.tok(stream, state); } }; }, 'python', 'stex'); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// CodeMirror.defineMIME('text/x-rst', 'rst'); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// }); application/library/codemirror/mode/rst/index.html000064400000042551146731177160016435 0ustar00 CodeMirror: reStructuredText mode

    reStructuredText mode

    The python mode will be used for highlighting blocks containing Python/IPython terminal sessions: blocks starting with >>> (for Python) or In [num]: (for IPython). Further, the stex mode will be used for highlighting blocks containing LaTex code.

    MIME types defined: text/x-rst.

    application/library/codemirror/mode/pug/index.html000064400000004671146731177160016421 0ustar00 CodeMirror: Pug Templating Mode

    Pug Templating Mode

    The Pug Templating Mode

    Created by Forbes Lindesay. Managed as part of a Brackets extension at https://github.com/ForbesLindesay/jade-brackets.

    MIME type defined: text/x-pug, text/x-jade.

    application/library/codemirror/mode/pug/pug.js000064400000037256146731177160015562 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../javascript/javascript"), require("../css/css"), require("../htmlmixed/htmlmixed")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../javascript/javascript", "../css/css", "../htmlmixed/htmlmixed"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("pug", function (config) { // token types var KEYWORD = 'keyword'; var DOCTYPE = 'meta'; var ID = 'builtin'; var CLASS = 'qualifier'; var ATTRS_NEST = { '{': '}', '(': ')', '[': ']' }; var jsMode = CodeMirror.getMode(config, 'javascript'); function State() { this.javaScriptLine = false; this.javaScriptLineExcludesColon = false; this.javaScriptArguments = false; this.javaScriptArgumentsDepth = 0; this.isInterpolating = false; this.interpolationNesting = 0; this.jsState = CodeMirror.startState(jsMode); this.restOfLine = ''; this.isIncludeFiltered = false; this.isEach = false; this.lastTag = ''; this.scriptType = ''; // Attributes Mode this.isAttrs = false; this.attrsNest = []; this.inAttributeName = true; this.attributeIsType = false; this.attrValue = ''; // Indented Mode this.indentOf = Infinity; this.indentToken = ''; this.innerMode = null; this.innerState = null; this.innerModeForLine = false; } /** * Safely copy a state * * @return {State} */ State.prototype.copy = function () { var res = new State(); res.javaScriptLine = this.javaScriptLine; res.javaScriptLineExcludesColon = this.javaScriptLineExcludesColon; res.javaScriptArguments = this.javaScriptArguments; res.javaScriptArgumentsDepth = this.javaScriptArgumentsDepth; res.isInterpolating = this.isInterpolating; res.interpolationNesting = this.interpolationNesting; res.jsState = CodeMirror.copyState(jsMode, this.jsState); res.innerMode = this.innerMode; if (this.innerMode && this.innerState) { res.innerState = CodeMirror.copyState(this.innerMode, this.innerState); } res.restOfLine = this.restOfLine; res.isIncludeFiltered = this.isIncludeFiltered; res.isEach = this.isEach; res.lastTag = this.lastTag; res.scriptType = this.scriptType; res.isAttrs = this.isAttrs; res.attrsNest = this.attrsNest.slice(); res.inAttributeName = this.inAttributeName; res.attributeIsType = this.attributeIsType; res.attrValue = this.attrValue; res.indentOf = this.indentOf; res.indentToken = this.indentToken; res.innerModeForLine = this.innerModeForLine; return res; }; function javaScript(stream, state) { if (stream.sol()) { // if javaScriptLine was set at end of line, ignore it state.javaScriptLine = false; state.javaScriptLineExcludesColon = false; } if (state.javaScriptLine) { if (state.javaScriptLineExcludesColon && stream.peek() === ':') { state.javaScriptLine = false; state.javaScriptLineExcludesColon = false; return; } var tok = jsMode.token(stream, state.jsState); if (stream.eol()) state.javaScriptLine = false; return tok || true; } } function javaScriptArguments(stream, state) { if (state.javaScriptArguments) { if (state.javaScriptArgumentsDepth === 0 && stream.peek() !== '(') { state.javaScriptArguments = false; return; } if (stream.peek() === '(') { state.javaScriptArgumentsDepth++; } else if (stream.peek() === ')') { state.javaScriptArgumentsDepth--; } if (state.javaScriptArgumentsDepth === 0) { state.javaScriptArguments = false; return; } var tok = jsMode.token(stream, state.jsState); return tok || true; } } function yieldStatement(stream) { if (stream.match(/^yield\b/)) { return 'keyword'; } } function doctype(stream) { if (stream.match(/^(?:doctype) *([^\n]+)?/)) { return DOCTYPE; } } function interpolation(stream, state) { if (stream.match('#{')) { state.isInterpolating = true; state.interpolationNesting = 0; return 'punctuation'; } } function interpolationContinued(stream, state) { if (state.isInterpolating) { if (stream.peek() === '}') { state.interpolationNesting--; if (state.interpolationNesting < 0) { stream.next(); state.isInterpolating = false; return 'punctuation'; } } else if (stream.peek() === '{') { state.interpolationNesting++; } return jsMode.token(stream, state.jsState) || true; } } function caseStatement(stream, state) { if (stream.match(/^case\b/)) { state.javaScriptLine = true; return KEYWORD; } } function when(stream, state) { if (stream.match(/^when\b/)) { state.javaScriptLine = true; state.javaScriptLineExcludesColon = true; return KEYWORD; } } function defaultStatement(stream) { if (stream.match(/^default\b/)) { return KEYWORD; } } function extendsStatement(stream, state) { if (stream.match(/^extends?\b/)) { state.restOfLine = 'string'; return KEYWORD; } } function append(stream, state) { if (stream.match(/^append\b/)) { state.restOfLine = 'variable'; return KEYWORD; } } function prepend(stream, state) { if (stream.match(/^prepend\b/)) { state.restOfLine = 'variable'; return KEYWORD; } } function block(stream, state) { if (stream.match(/^block\b *(?:(prepend|append)\b)?/)) { state.restOfLine = 'variable'; return KEYWORD; } } function include(stream, state) { if (stream.match(/^include\b/)) { state.restOfLine = 'string'; return KEYWORD; } } function includeFiltered(stream, state) { if (stream.match(/^include:([a-zA-Z0-9\-]+)/, false) && stream.match('include')) { state.isIncludeFiltered = true; return KEYWORD; } } function includeFilteredContinued(stream, state) { if (state.isIncludeFiltered) { var tok = filter(stream, state); state.isIncludeFiltered = false; state.restOfLine = 'string'; return tok; } } function mixin(stream, state) { if (stream.match(/^mixin\b/)) { state.javaScriptLine = true; return KEYWORD; } } function call(stream, state) { if (stream.match(/^\+([-\w]+)/)) { if (!stream.match(/^\( *[-\w]+ *=/, false)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; } return 'variable'; } if (stream.match(/^\+#{/, false)) { stream.next(); state.mixinCallAfter = true; return interpolation(stream, state); } } function callArguments(stream, state) { if (state.mixinCallAfter) { state.mixinCallAfter = false; if (!stream.match(/^\( *[-\w]+ *=/, false)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; } return true; } } function conditional(stream, state) { if (stream.match(/^(if|unless|else if|else)\b/)) { state.javaScriptLine = true; return KEYWORD; } } function each(stream, state) { if (stream.match(/^(- *)?(each|for)\b/)) { state.isEach = true; return KEYWORD; } } function eachContinued(stream, state) { if (state.isEach) { if (stream.match(/^ in\b/)) { state.javaScriptLine = true; state.isEach = false; return KEYWORD; } else if (stream.sol() || stream.eol()) { state.isEach = false; } else if (stream.next()) { while (!stream.match(/^ in\b/, false) && stream.next()); return 'variable'; } } } function whileStatement(stream, state) { if (stream.match(/^while\b/)) { state.javaScriptLine = true; return KEYWORD; } } function tag(stream, state) { var captures; if (captures = stream.match(/^(\w(?:[-:\w]*\w)?)\/?/)) { state.lastTag = captures[1].toLowerCase(); if (state.lastTag === 'script') { state.scriptType = 'application/javascript'; } return 'tag'; } } function filter(stream, state) { if (stream.match(/^:([\w\-]+)/)) { var innerMode; if (config && config.innerModes) { innerMode = config.innerModes(stream.current().substring(1)); } if (!innerMode) { innerMode = stream.current().substring(1); } if (typeof innerMode === 'string') { innerMode = CodeMirror.getMode(config, innerMode); } setInnerMode(stream, state, innerMode); return 'atom'; } } function code(stream, state) { if (stream.match(/^(!?=|-)/)) { state.javaScriptLine = true; return 'punctuation'; } } function id(stream) { if (stream.match(/^#([\w-]+)/)) { return ID; } } function className(stream) { if (stream.match(/^\.([\w-]+)/)) { return CLASS; } } function attrs(stream, state) { if (stream.peek() == '(') { stream.next(); state.isAttrs = true; state.attrsNest = []; state.inAttributeName = true; state.attrValue = ''; state.attributeIsType = false; return 'punctuation'; } } function attrsContinued(stream, state) { if (state.isAttrs) { if (ATTRS_NEST[stream.peek()]) { state.attrsNest.push(ATTRS_NEST[stream.peek()]); } if (state.attrsNest[state.attrsNest.length - 1] === stream.peek()) { state.attrsNest.pop(); } else if (stream.eat(')')) { state.isAttrs = false; return 'punctuation'; } if (state.inAttributeName && stream.match(/^[^=,\)!]+/)) { if (stream.peek() === '=' || stream.peek() === '!') { state.inAttributeName = false; state.jsState = CodeMirror.startState(jsMode); if (state.lastTag === 'script' && stream.current().trim().toLowerCase() === 'type') { state.attributeIsType = true; } else { state.attributeIsType = false; } } return 'attribute'; } var tok = jsMode.token(stream, state.jsState); if (state.attributeIsType && tok === 'string') { state.scriptType = stream.current().toString(); } if (state.attrsNest.length === 0 && (tok === 'string' || tok === 'variable' || tok === 'keyword')) { try { Function('', 'var x ' + state.attrValue.replace(/,\s*$/, '').replace(/^!/, '')); state.inAttributeName = true; state.attrValue = ''; stream.backUp(stream.current().length); return attrsContinued(stream, state); } catch (ex) { //not the end of an attribute } } state.attrValue += stream.current(); return tok || true; } } function attributesBlock(stream, state) { if (stream.match(/^&attributes\b/)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; return 'keyword'; } } function indent(stream) { if (stream.sol() && stream.eatSpace()) { return 'indent'; } } function comment(stream, state) { if (stream.match(/^ *\/\/(-)?([^\n]*)/)) { state.indentOf = stream.indentation(); state.indentToken = 'comment'; return 'comment'; } } function colon(stream) { if (stream.match(/^: */)) { return 'colon'; } } function text(stream, state) { if (stream.match(/^(?:\| ?| )([^\n]+)/)) { return 'string'; } if (stream.match(/^(<[^\n]*)/, false)) { // html string setInnerMode(stream, state, 'htmlmixed'); state.innerModeForLine = true; return innerMode(stream, state, true); } } function dot(stream, state) { if (stream.eat('.')) { var innerMode = null; if (state.lastTag === 'script' && state.scriptType.toLowerCase().indexOf('javascript') != -1) { innerMode = state.scriptType.toLowerCase().replace(/"|'/g, ''); } else if (state.lastTag === 'style') { innerMode = 'css'; } setInnerMode(stream, state, innerMode); return 'dot'; } } function fail(stream) { stream.next(); return null; } function setInnerMode(stream, state, mode) { mode = CodeMirror.mimeModes[mode] || mode; mode = config.innerModes ? config.innerModes(mode) || mode : mode; mode = CodeMirror.mimeModes[mode] || mode; mode = CodeMirror.getMode(config, mode); state.indentOf = stream.indentation(); if (mode && mode.name !== 'null') { state.innerMode = mode; } else { state.indentToken = 'string'; } } function innerMode(stream, state, force) { if (stream.indentation() > state.indentOf || (state.innerModeForLine && !stream.sol()) || force) { if (state.innerMode) { if (!state.innerState) { state.innerState = state.innerMode.startState ? CodeMirror.startState(state.innerMode, stream.indentation()) : {}; } return stream.hideFirstChars(state.indentOf + 2, function () { return state.innerMode.token(stream, state.innerState) || true; }); } else { stream.skipToEnd(); return state.indentToken; } } else if (stream.sol()) { state.indentOf = Infinity; state.indentToken = null; state.innerMode = null; state.innerState = null; } } function restOfLine(stream, state) { if (stream.sol()) { // if restOfLine was set at end of line, ignore it state.restOfLine = ''; } if (state.restOfLine) { stream.skipToEnd(); var tok = state.restOfLine; state.restOfLine = ''; return tok; } } function startState() { return new State(); } function copyState(state) { return state.copy(); } /** * Get the next token in the stream * * @param {Stream} stream * @param {State} state */ function nextToken(stream, state) { var tok = innerMode(stream, state) || restOfLine(stream, state) || interpolationContinued(stream, state) || includeFilteredContinued(stream, state) || eachContinued(stream, state) || attrsContinued(stream, state) || javaScript(stream, state) || javaScriptArguments(stream, state) || callArguments(stream, state) || yieldStatement(stream, state) || doctype(stream, state) || interpolation(stream, state) || caseStatement(stream, state) || when(stream, state) || defaultStatement(stream, state) || extendsStatement(stream, state) || append(stream, state) || prepend(stream, state) || block(stream, state) || include(stream, state) || includeFiltered(stream, state) || mixin(stream, state) || call(stream, state) || conditional(stream, state) || each(stream, state) || whileStatement(stream, state) || tag(stream, state) || filter(stream, state) || code(stream, state) || id(stream, state) || className(stream, state) || attrs(stream, state) || attributesBlock(stream, state) || indent(stream, state) || text(stream, state) || comment(stream, state) || colon(stream, state) || dot(stream, state) || fail(stream, state); return tok === true ? null : tok; } return { startState: startState, copyState: copyState, token: nextToken }; }, 'javascript', 'css', 'htmlmixed'); CodeMirror.defineMIME('text/x-pug', 'pug'); CodeMirror.defineMIME('text/x-jade', 'pug'); }); application/library/codemirror/mode/sas/sas.js000064400000037351146731177160015544 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // SAS mode copyright (c) 2016 Jared Dean, SAS Institute // Created by Jared Dean // TODO // indent and de-indent // identify macro variables //Definitions // comment -- text withing * ; or /* */ // keyword -- SAS language variable // variable -- macro variables starts with '&' or variable formats // variable-2 -- DATA Step, proc, or macro names // string -- text within ' ' or " " // operator -- numeric operator + / - * ** le eq ge ... and so on // builtin -- proc %macro data run mend // atom // def (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sas", function () { var words = {}; var isDoubleOperatorSym = { eq: 'operator', lt: 'operator', le: 'operator', gt: 'operator', ge: 'operator', "in": 'operator', ne: 'operator', or: 'operator' }; var isDoubleOperatorChar = /(<=|>=|!=|<>)/; var isSingleOperatorChar = /[=\(:\),{}.*<>+\-\/^\[\]]/; // Takes a string of words separated by spaces and adds them as // keys with the value of the first argument 'style' function define(style, string, context) { if (context) { var split = string.split(' '); for (var i = 0; i < split.length; i++) { words[split[i]] = {style: style, state: context}; } } } //datastep define('def', 'stack pgm view source debug nesting nolist', ['inDataStep']); define('def', 'if while until for do do; end end; then else cancel', ['inDataStep']); define('def', 'label format _n_ _error_', ['inDataStep']); define('def', 'ALTER BUFNO BUFSIZE CNTLLEV COMPRESS DLDMGACTION ENCRYPT ENCRYPTKEY EXTENDOBSCOUNTER GENMAX GENNUM INDEX LABEL OBSBUF OUTREP PW PWREQ READ REPEMPTY REPLACE REUSE ROLE SORTEDBY SPILL TOBSNO TYPE WRITE FILECLOSE FIRSTOBS IN OBS POINTOBS WHERE WHEREUP IDXNAME IDXWHERE DROP KEEP RENAME', ['inDataStep']); define('def', 'filevar finfo finv fipname fipnamel fipstate first firstobs floor', ['inDataStep']); define('def', 'varfmt varinfmt varlabel varlen varname varnum varray varrayx vartype verify vformat vformatd vformatdx vformatn vformatnx vformatw vformatwx vformatx vinarray vinarrayx vinformat vinformatd vinformatdx vinformatn vinformatnx vinformatw vinformatwx vinformatx vlabel vlabelx vlength vlengthx vname vnamex vnferr vtype vtypex weekday', ['inDataStep']); define('def', 'zipfips zipname zipnamel zipstate', ['inDataStep']); define('def', 'put putc putn', ['inDataStep']); define('builtin', 'data run', ['inDataStep']); //proc define('def', 'data', ['inProc']); // flow control for macros define('def', '%if %end %end; %else %else; %do %do; %then', ['inMacro']); //everywhere define('builtin', 'proc run; quit; libname filename %macro %mend option options', ['ALL']); define('def', 'footnote title libname ods', ['ALL']); define('def', '%let %put %global %sysfunc %eval ', ['ALL']); // automatic macro variables http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a003167023.htm define('variable', '&sysbuffr &syscc &syscharwidth &syscmd &sysdate &sysdate9 &sysday &sysdevic &sysdmg &sysdsn &sysencoding &sysenv &syserr &syserrortext &sysfilrc &syshostname &sysindex &sysinfo &sysjobid &syslast &syslckrc &syslibrc &syslogapplname &sysmacroname &sysmenv &sysmsg &sysncpu &sysodspath &sysparm &syspbuff &sysprocessid &sysprocessname &sysprocname &sysrc &sysscp &sysscpl &sysscpl &syssite &sysstartid &sysstartname &systcpiphostname &systime &sysuserid &sysver &sysvlong &sysvlong4 &syswarningtext', ['ALL']); //footnote[1-9]? title[1-9]? //options statement define('def', 'source2 nosource2 page pageno pagesize', ['ALL']); //proc and datastep define('def', '_all_ _character_ _cmd_ _freq_ _i_ _infile_ _last_ _msg_ _null_ _numeric_ _temporary_ _type_ abort abs addr adjrsq airy alpha alter altlog altprint and arcos array arsin as atan attrc attrib attrn authserver autoexec awscontrol awsdef awsmenu awsmenumerge awstitle backward band base betainv between blocksize blshift bnot bor brshift bufno bufsize bxor by byerr byline byte calculated call cards cards4 catcache cbufno cdf ceil center cexist change chisq cinv class cleanup close cnonct cntllev coalesce codegen col collate collin column comamid comaux1 comaux2 comdef compbl compound compress config continue convert cos cosh cpuid create cross crosstab css curobs cv daccdb daccdbsl daccsl daccsyd dacctab dairy datalines datalines4 datejul datepart datetime day dbcslang dbcstype dclose ddm delete delimiter depdb depdbsl depsl depsyd deptab dequote descending descript design= device dflang dhms dif digamma dim dinfo display distinct dkricond dkrocond dlm dnum do dopen doptname doptnum dread drop dropnote dsname dsnferr echo else emaildlg emailid emailpw emailserver emailsys encrypt end endsas engine eof eov erf erfc error errorcheck errors exist exp fappend fclose fcol fdelete feedback fetch fetchobs fexist fget file fileclose fileexist filefmt filename fileref fmterr fmtsearch fnonct fnote font fontalias fopen foptname foptnum force formatted formchar formdelim formdlim forward fpoint fpos fput fread frewind frlen from fsep fuzz fwrite gaminv gamma getoption getvarc getvarn go goto group gwindow hbar hbound helpenv helploc hms honorappearance hosthelp hostprint hour hpct html hvar ibessel ibr id if index indexc indexw initcmd initstmt inner input inputc inputn inr insert int intck intnx into intrr invaliddata irr is jbessel join juldate keep kentb kurtosis label lag last lbound leave left length levels lgamma lib library libref line linesize link list log log10 log2 logpdf logpmf logsdf lostcard lowcase lrecl ls macro macrogen maps mautosource max maxdec maxr mdy mean measures median memtype merge merror min minute missing missover mlogic mod mode model modify month mopen mort mprint mrecall msglevel msymtabmax mvarsize myy n nest netpv new news nmiss no nobatch nobs nocaps nocardimage nocenter nocharcode nocmdmac nocol nocum nodate nodbcs nodetails nodmr nodms nodmsbatch nodup nodupkey noduplicates noechoauto noequals noerrorabend noexitwindows nofullstimer noicon noimplmac noint nolist noloadlist nomiss nomlogic nomprint nomrecall nomsgcase nomstored nomultenvappl nonotes nonumber noobs noovp nopad nopercent noprint noprintinit normal norow norsasuser nosetinit nosplash nosymbolgen note notes notitle notitles notsorted noverbose noxsync noxwait npv null number numkeys nummousekeys nway obs on open order ordinal otherwise out outer outp= output over ovp p(1 5 10 25 50 75 90 95 99) pad pad2 paired parm parmcards path pathdll pathname pdf peek peekc pfkey pmf point poisson poke position printer probbeta probbnml probchi probf probgam probhypr probit probnegb probnorm probsig probt procleave prt ps pw pwreq qtr quote r ranbin rancau ranexp rangam range ranks rannor ranpoi rantbl rantri ranuni read recfm register regr remote remove rename repeat replace resolve retain return reuse reverse rewind right round rsquare rtf rtrace rtraceloc s s2 samploc sasautos sascontrol sasfrscr sasmsg sasmstore sasscript sasuser saving scan sdf second select selection separated seq serror set setcomm setot sign simple sin sinh siteinfo skewness skip sle sls sortedby sortpgm sortseq sortsize soundex spedis splashlocation split spool sqrt start std stderr stdin stfips stimer stname stnamel stop stopover subgroup subpopn substr sum sumwgt symbol symbolgen symget symput sysget sysin sysleave sysmsg sysparm sysprint sysprintfont sysprod sysrc system t table tables tan tanh tapeclose tbufsize terminal test then timepart tinv tnonct to today tol tooldef totper transformout translate trantab tranwrd trigamma trim trimn trunc truncover type unformatted uniform union until upcase update user usericon uss validate value var weight when where while wincharset window work workinit workterm write wsum xsync xwait yearcutoff yes yyq min max', ['inDataStep', 'inProc']); define('operator', 'and not ', ['inDataStep', 'inProc']); // Main function function tokenize(stream, state) { // Finally advance the stream var ch = stream.next(); // BLOCKCOMMENT if (ch === '/' && stream.eat('*')) { state.continueComment = true; return "comment"; } else if (state.continueComment === true) { // in comment block //comment ends at the beginning of the line if (ch === '*' && stream.peek() === '/') { stream.next(); state.continueComment = false; } else if (stream.skipTo('*')) { //comment is potentially later in line stream.skipTo('*'); stream.next(); if (stream.eat('/')) state.continueComment = false; } else { stream.skipToEnd(); } return "comment"; } // DoubleOperator match var doubleOperator = ch + stream.peek(); // Match all line comments. var myString = stream.string; var myRegexp = /(?:^\s*|[;]\s*)(\*.*?);/ig; var match = myRegexp.exec(myString); if (match !== null) { if (match.index === 0 && (stream.column() !== (match.index + match[0].length - 1))) { stream.backUp(stream.column()); stream.skipTo(';'); stream.next(); return 'comment'; } else if (match.index + 1 < stream.column() && stream.column() < match.index + match[0].length - 1) { // the ';' triggers the match so move one past it to start // the comment block that is why match.index+1 stream.backUp(stream.column() - match.index - 1); stream.skipTo(';'); stream.next(); return 'comment'; } } else if ((ch === '"' || ch === "'") && !state.continueString) { state.continueString = ch return "string" } else if (state.continueString) { if (state.continueString == ch) { state.continueString = null; } else if (stream.skipTo(state.continueString)) { // quote found on this line stream.next(); state.continueString = null; } else { stream.skipToEnd(); } return "string"; } else if (state.continueString !== null && stream.eol()) { stream.skipTo(state.continueString) || stream.skipToEnd(); return "string"; } else if (/[\d\.]/.test(ch)) { //find numbers if (ch === ".") stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); else if (ch === "0") stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); else stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); return "number"; } else if (isDoubleOperatorChar.test(ch + stream.peek())) { // TWO SYMBOL TOKENS stream.next(); return "operator"; } else if (isDoubleOperatorSym.hasOwnProperty(doubleOperator)) { stream.next(); if (stream.peek() === ' ') return isDoubleOperatorSym[doubleOperator.toLowerCase()]; } else if (isSingleOperatorChar.test(ch)) { // SINGLE SYMBOL TOKENS return "operator"; } // Matches one whole word -- even if the word is a character var word; if (stream.match(/[%&;\w]+/, false) != null) { word = ch + stream.match(/[%&;\w]+/, true); if (/&/.test(word)) return 'variable' } else { word = ch; } // the word after DATA PROC or MACRO if (state.nextword) { stream.match(/[\w]+/); // match memname.libname if (stream.peek() === '.') stream.skipTo(' '); state.nextword = false; return 'variable-2'; } word = word.toLowerCase() // Are we in a DATA Step? if (state.inDataStep) { if (word === 'run;' || stream.match(/run\s;/)) { state.inDataStep = false; return 'builtin'; } // variable formats if ((word) && stream.next() === '.') { //either a format or libname.memname if (/\w/.test(stream.peek())) return 'variable-2'; else return 'variable'; } // do we have a DATA Step keyword if (word && words.hasOwnProperty(word) && (words[word].state.indexOf("inDataStep") !== -1 || words[word].state.indexOf("ALL") !== -1)) { //backup to the start of the word if (stream.start < stream.pos) stream.backUp(stream.pos - stream.start); //advance the length of the word and return for (var i = 0; i < word.length; ++i) stream.next(); return words[word].style; } } // Are we in an Proc statement? if (state.inProc) { if (word === 'run;' || word === 'quit;') { state.inProc = false; return 'builtin'; } // do we have a proc keyword if (word && words.hasOwnProperty(word) && (words[word].state.indexOf("inProc") !== -1 || words[word].state.indexOf("ALL") !== -1)) { stream.match(/[\w]+/); return words[word].style; } } // Are we in a Macro statement? if (state.inMacro) { if (word === '%mend') { if (stream.peek() === ';') stream.next(); state.inMacro = false; return 'builtin'; } if (word && words.hasOwnProperty(word) && (words[word].state.indexOf("inMacro") !== -1 || words[word].state.indexOf("ALL") !== -1)) { stream.match(/[\w]+/); return words[word].style; } return 'atom'; } // Do we have Keywords specific words? if (word && words.hasOwnProperty(word)) { // Negates the initial next() stream.backUp(1); // Actually move the stream stream.match(/[\w]+/); if (word === 'data' && /=/.test(stream.peek()) === false) { state.inDataStep = true; state.nextword = true; return 'builtin'; } if (word === 'proc') { state.inProc = true; state.nextword = true; return 'builtin'; } if (word === '%macro') { state.inMacro = true; state.nextword = true; return 'builtin'; } if (/title[1-9]/.test(word)) return 'def'; if (word === 'footnote') { stream.eat(/[1-9]/); return 'def'; } // Returns their value as state in the prior define methods if (state.inDataStep === true && words[word].state.indexOf("inDataStep") !== -1) return words[word].style; if (state.inProc === true && words[word].state.indexOf("inProc") !== -1) return words[word].style; if (state.inMacro === true && words[word].state.indexOf("inMacro") !== -1) return words[word].style; if (words[word].state.indexOf("ALL") !== -1) return words[word].style; return null; } // Unrecognized syntax return null; } return { startState: function () { return { inDataStep: false, inProc: false, inMacro: false, nextword: false, continueString: null, continueComment: false }; }, token: function (stream, state) { // Strip the spaces, but regex will account for them either way if (stream.eatSpace()) return null; // Go through the main process return tokenize(stream, state); }, blockCommentStart: "/*", blockCommentEnd: "*/" }; }); CodeMirror.defineMIME("text/x-sas", "sas"); }); application/library/codemirror/mode/sas/index.html000064400000003476146731177160016416 0ustar00 CodeMirror: SAS mode

    SAS mode

    MIME types defined: text/x-sas.

    application/library/codemirror/mode/brainfuck/brainfuck.js000064400000004176146731177160020077 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Brainfuck mode created by Michael Kaminsky https://github.com/mkaminsky11 (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require("../../lib/codemirror")) else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod) else mod(CodeMirror) })(function(CodeMirror) { "use strict" var reserve = "><+-.,[]".split(""); /* comments can be either: placed behind lines +++ this is a comment where reserved characters cannot be used or in a loop [ this is ok to use [ ] and stuff ] or preceded by # */ CodeMirror.defineMode("brainfuck", function() { return { startState: function() { return { commentLine: false, left: 0, right: 0, commentLoop: false } }, token: function(stream, state) { if (stream.eatSpace()) return null if(stream.sol()){ state.commentLine = false; } var ch = stream.next().toString(); if(reserve.indexOf(ch) !== -1){ if(state.commentLine === true){ if(stream.eol()){ state.commentLine = false; } return "comment"; } if(ch === "]" || ch === "["){ if(ch === "["){ state.left++; } else{ state.right++; } return "bracket"; } else if(ch === "+" || ch === "-"){ return "keyword"; } else if(ch === "<" || ch === ">"){ return "atom"; } else if(ch === "." || ch === ","){ return "def"; } } else{ state.commentLine = true; if(stream.eol()){ state.commentLine = false; } return "comment"; } if(stream.eol()){ state.commentLine = false; } } }; }); CodeMirror.defineMIME("text/x-brainfuck","brainfuck") }); application/library/codemirror/mode/brainfuck/index.html000064400000006412146731177160017565 0ustar00 CodeMirror: Brainfuck mode

    Brainfuck mode

    A mode for Brainfuck

    MIME types defined: text/x-brainfuck

    application/library/codemirror/mode/htmlmixed/index.html000064400000005772146731177160017624 0ustar00 CodeMirror: HTML mixed mode

    HTML mixed mode

    The HTML mixed mode depends on the XML, JavaScript, and CSS modes.

    It takes an optional mode configuration option, scriptTypes, which can be used to add custom behavior for specific <script type="..."> tags. If given, it should hold an array of {matches, mode} objects, where matches is a string or regexp that matches the script type, and mode is either null, for script types that should stay in HTML mode, or a mode spec corresponding to the mode that should be used for the script.

    MIME types defined: text/html (redefined, only takes effect if you load this parser after the XML parser).

    application/library/codemirror/mode/htmlmixed/htmlmixed.js000064400000012726146731177160020155 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript"), require("../css/css")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript", "../css/css"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var defaultTags = { script: [ ["lang", /(javascript|babel)/i, "javascript"], ["type", /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i, "javascript"], ["type", /./, "text/plain"], [null, null, "javascript"] ], style: [ ["lang", /^css$/i, "css"], ["type", /^(text\/)?(x-)?(stylesheet|css)$/i, "css"], ["type", /./, "text/plain"], [null, null, "css"] ] }; function maybeBackup(stream, pat, style) { var cur = stream.current(), close = cur.search(pat); if (close > -1) { stream.backUp(cur.length - close); } else if (cur.match(/<\/?$/)) { stream.backUp(cur.length); if (!stream.match(pat, false)) stream.match(cur); } return style; } var attrRegexpCache = {}; function getAttrRegexp(attr) { var regexp = attrRegexpCache[attr]; if (regexp) return regexp; return attrRegexpCache[attr] = new RegExp("\\s+" + attr + "\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"); } function getAttrValue(text, attr) { var match = text.match(getAttrRegexp(attr)) return match ? /^\s*(.*?)\s*$/.exec(match[2])[1] : "" } function getTagRegexp(tagName, anchored) { return new RegExp((anchored ? "^" : "") + "<\/\s*" + tagName + "\s*>", "i"); } function addTags(from, to) { for (var tag in from) { var dest = to[tag] || (to[tag] = []); var source = from[tag]; for (var i = source.length - 1; i >= 0; i--) dest.unshift(source[i]) } } function findMatchingMode(tagInfo, tagText) { for (var i = 0; i < tagInfo.length; i++) { var spec = tagInfo[i]; if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2]; } } CodeMirror.defineMode("htmlmixed", function (config, parserConfig) { var htmlMode = CodeMirror.getMode(config, { name: "xml", htmlMode: true, multilineTagIndentFactor: parserConfig.multilineTagIndentFactor, multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag }); var tags = {}; var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes; addTags(defaultTags, tags); if (configTags) addTags(configTags, tags); if (configScript) for (var i = configScript.length - 1; i >= 0; i--) tags.script.unshift(["type", configScript[i].matches, configScript[i].mode]) function html(stream, state) { var style = htmlMode.token(stream, state.htmlState), tag = /\btag\b/.test(style), tagName if (tag && !/[<>\s\/]/.test(stream.current()) && (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) && tags.hasOwnProperty(tagName)) { state.inTag = tagName + " " } else if (state.inTag && tag && />$/.test(stream.current())) { var inTag = /^([\S]+) (.*)/.exec(state.inTag) state.inTag = null var modeSpec = stream.current() == ">" && findMatchingMode(tags[inTag[1]], inTag[2]) var mode = CodeMirror.getMode(config, modeSpec) var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false); state.token = function (stream, state) { if (stream.match(endTagA, false)) { state.token = html; state.localState = state.localMode = null; return null; } return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState)); }; state.localMode = mode; state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, "")); } else if (state.inTag) { state.inTag += stream.current() if (stream.eol()) state.inTag += " " } return style; }; return { startState: function () { var state = CodeMirror.startState(htmlMode); return {token: html, inTag: null, localMode: null, localState: null, htmlState: state}; }, copyState: function (state) { var local; if (state.localState) { local = CodeMirror.copyState(state.localMode, state.localState); } return {token: state.token, inTag: state.inTag, localMode: state.localMode, localState: local, htmlState: CodeMirror.copyState(htmlMode, state.htmlState)}; }, token: function (stream, state) { return state.token(stream, state); }, indent: function (state, textAfter) { if (!state.localMode || /^\s*<\//.test(textAfter)) return htmlMode.indent(state.htmlState, textAfter); else if (state.localMode.indent) return state.localMode.indent(state.localState, textAfter); else return CodeMirror.Pass; }, innerMode: function (state) { return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode}; } }; }, "xml", "javascript", "css"); CodeMirror.defineMIME("text/html", "htmlmixed"); }); application/library/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js000064400000004364146731177160023000 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function (mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../yaml/yaml")) else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../yaml/yaml"], mod) else // Plain browser env mod(CodeMirror) })(function (CodeMirror) { var START = 0, FRONTMATTER = 1, BODY = 2 // a mixed mode for Markdown text with an optional YAML front matter CodeMirror.defineMode("yaml-frontmatter", function (config, parserConfig) { var yamlMode = CodeMirror.getMode(config, "yaml") var innerMode = CodeMirror.getMode(config, parserConfig && parserConfig.base || "gfm") function curMode(state) { return state.state == BODY ? innerMode : yamlMode } return { startState: function () { return { state: START, inner: CodeMirror.startState(yamlMode) } }, copyState: function (state) { return { state: state.state, inner: CodeMirror.copyState(curMode(state), state.inner) } }, token: function (stream, state) { if (state.state == START) { if (stream.match(/---/, false)) { state.state = FRONTMATTER return yamlMode.token(stream, state.inner) } else { state.state = BODY state.inner = CodeMirror.startState(innerMode) return innerMode.token(stream, state.inner) } } else if (state.state == FRONTMATTER) { var end = stream.sol() && stream.match(/---/, false) var style = yamlMode.token(stream, state.inner) if (end) { state.state = BODY state.inner = CodeMirror.startState(innerMode) } return style } else { return innerMode.token(stream, state.inner) } }, innerMode: function (state) { return {mode: curMode(state), state: state.inner} }, blankLine: function (state) { var mode = curMode(state) if (mode.blankLine) return mode.blankLine(state.inner) } } }) }); application/library/codemirror/mode/yaml-frontmatter/index.html000064400000006000146731177160021117 0ustar00 CodeMirror: YAML front matter mode

    YAML front matter mode

    Defines a mode that parses a YAML frontmatter at the start of a file, switching to a base mode at the end of that. Takes a mode configuration option base to configure the base mode, which defaults to "gfm".

    application/library/codemirror/mode/solr/solr.js000064400000005166146731177160016125 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("solr", function() { "use strict"; var isStringChar = /[^\s\|\!\+\-\*\?\~\^\&\:\(\)\[\]\{\}\^\"\\]/; var isOperatorChar = /[\|\!\+\-\*\?\~\^\&]/; var isOperatorString = /^(OR|AND|NOT|TO)$/i; function isNumber(word) { return parseFloat(word, 10).toString() === word; } function tokenString(quote) { return function(stream, state) { var escaped = false, next; while ((next = stream.next()) != null) { if (next == quote && !escaped) break; escaped = !escaped && next == "\\"; } if (!escaped) state.tokenize = tokenBase; return "string"; }; } function tokenOperator(operator) { return function(stream, state) { var style = "operator"; if (operator == "+") style += " positive"; else if (operator == "-") style += " negative"; else if (operator == "|") stream.eat(/\|/); else if (operator == "&") stream.eat(/\&/); else if (operator == "^") style += " boost"; state.tokenize = tokenBase; return style; }; } function tokenWord(ch) { return function(stream, state) { var word = ch; while ((ch = stream.peek()) && ch.match(isStringChar) != null) { word += stream.next(); } state.tokenize = tokenBase; if (isOperatorString.test(word)) return "operator"; else if (isNumber(word)) return "number"; else if (stream.peek() == ":") return "field"; else return "string"; }; } function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"') state.tokenize = tokenString(ch); else if (isOperatorChar.test(ch)) state.tokenize = tokenOperator(ch); else if (isStringChar.test(ch)) state.tokenize = tokenWord(ch); return (state.tokenize != tokenBase) ? state.tokenize(stream, state) : null; } return { startState: function() { return { tokenize: tokenBase }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); } }; }); CodeMirror.defineMIME("text/x-solr", "solr"); }); application/library/codemirror/mode/solr/index.html000064400000002525146731177160016601 0ustar00 CodeMirror: Solr mode

    Solr mode

    MIME types defined: text/x-solr.

    application/library/codemirror/mode/twig/twig.js000064400000010732146731177160016106 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/multiplex")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../addon/mode/multiplex"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("twig:inner", function() { var keywords = ["and", "as", "autoescape", "endautoescape", "block", "do", "endblock", "else", "elseif", "extends", "for", "endfor", "embed", "endembed", "filter", "endfilter", "flush", "from", "if", "endif", "in", "is", "include", "import", "not", "or", "set", "spaceless", "endspaceless", "with", "endwith", "trans", "endtrans", "blocktrans", "endblocktrans", "macro", "endmacro", "use", "verbatim", "endverbatim"], operator = /^[+\-*&%=<>!?|~^]/, sign = /^[:\[\(\{]/, atom = ["true", "false", "null", "empty", "defined", "divisibleby", "divisible by", "even", "odd", "iterable", "sameas", "same as"], number = /^(\d[+\-\*\/])?\d+(\.\d+)?/; keywords = new RegExp("((" + keywords.join(")|(") + "))\\b"); atom = new RegExp("((" + atom.join(")|(") + "))\\b"); function tokenBase (stream, state) { var ch = stream.peek(); //Comment if (state.incomment) { if (!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Tag } else if (state.intag) { //After operator if (state.operator) { state.operator = false; if (stream.match(atom)) { return "atom"; } if (stream.match(number)) { return "number"; } } //After sign if (state.sign) { state.sign = false; if (stream.match(atom)) { return "atom"; } if (stream.match(number)) { return "number"; } } if (state.instring) { if (ch == state.instring) { state.instring = false; } stream.next(); return "string"; } else if (ch == "'" || ch == '"') { state.instring = ch; stream.next(); return "string"; } else if (stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) { state.intag = false; return "tag"; } else if (stream.match(operator)) { state.operator = true; return "operator"; } else if (stream.match(sign)) { state.sign = true; } else { if (stream.eat(" ") || stream.sol()) { if (stream.match(keywords)) { return "keyword"; } if (stream.match(atom)) { return "atom"; } if (stream.match(number)) { return "number"; } if (stream.sol()) { stream.next(); } } else { stream.next(); } } return "variable"; } else if (stream.eat("{")) { if (ch = stream.eat("#")) { state.incomment = true; if (!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Open tag } else if (ch = stream.eat(/\{|%/)) { //Cache close tag state.intag = ch; if (ch == "{") { state.intag = "}"; } stream.eat("-"); return "tag"; } } stream.next(); }; return { startState: function () { return {}; }, token: function (stream, state) { return tokenBase(stream, state); } }; }); CodeMirror.defineMode("twig", function(config, parserConfig) { var twigInner = CodeMirror.getMode(config, "twig:inner"); if (!parserConfig || !parserConfig.base) return twigInner; return CodeMirror.multiplexingMode( CodeMirror.getMode(config, parserConfig.base), { open: /\{[{#%]/, close: /[}#%]\}/, mode: twigInner, parseDelimiters: true } ); }); CodeMirror.defineMIME("text/x-twig", "twig"); }); application/library/codemirror/mode/twig/index.html000064400000002532146731177160016572 0ustar00 CodeMirror: Twig mode

    Twig mode

    application/library/codemirror/mode/shell/shell.js000064400000007320146731177160016377 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('shell', function() { var words = {}; function define(style, string) { var split = string.split(' '); for(var i = 0; i < split.length; i++) { words[split[i]] = style; } }; // Atoms define('atom', 'true false'); // Keywords define('keyword', 'if then do else elif while until for in esac fi fin ' + 'fil done exit set unset export function'); // Commands define('builtin', 'ab awk bash beep cat cc cd chown chmod chroot clear cp ' + 'curl cut diff echo find gawk gcc get git grep kill killall ln ls make ' + 'mkdir openssl mv nc node npm ping ps restart rm rmdir sed service sh ' + 'shopt shred source sort sleep ssh start stop su sudo tee telnet top ' + 'touch vi vim wall wc wget who write yes zsh'); function tokenBase(stream, state) { if (stream.eatSpace()) return null; var sol = stream.sol(); var ch = stream.next(); if (ch === '\\') { stream.next(); return null; } if (ch === '\'' || ch === '"' || ch === '`') { state.tokens.unshift(tokenString(ch)); return tokenize(stream, state); } if (ch === '#') { if (sol && stream.eat('!')) { stream.skipToEnd(); return 'meta'; // 'comment'? } stream.skipToEnd(); return 'comment'; } if (ch === '$') { state.tokens.unshift(tokenDollar); return tokenize(stream, state); } if (ch === '+' || ch === '=') { return 'operator'; } if (ch === '-') { stream.eat('-'); stream.eatWhile(/\w/); return 'attribute'; } if (/\d/.test(ch)) { stream.eatWhile(/\d/); if(stream.eol() || !/\w/.test(stream.peek())) { return 'number'; } } stream.eatWhile(/[\w-]/); var cur = stream.current(); if (stream.peek() === '=' && /\w+/.test(cur)) return 'def'; return words.hasOwnProperty(cur) ? words[cur] : null; } function tokenString(quote) { return function(stream, state) { var next, end = false, escaped = false; while ((next = stream.next()) != null) { if (next === quote && !escaped) { end = true; break; } if (next === '$' && !escaped && quote !== '\'') { escaped = true; stream.backUp(1); state.tokens.unshift(tokenDollar); break; } escaped = !escaped && next === '\\'; } if (end || !escaped) { state.tokens.shift(); } return (quote === '`' || quote === ')' ? 'quote' : 'string'); }; }; var tokenDollar = function(stream, state) { if (state.tokens.length > 1) stream.eat('$'); var ch = stream.next(), hungry = /\w/; if (ch === '{') hungry = /[^}]/; if (ch === '(') { state.tokens[0] = tokenString(')'); return tokenize(stream, state); } if (!/\d/.test(ch)) { stream.eatWhile(hungry); stream.eat('}'); } state.tokens.shift(); return 'def'; }; function tokenize(stream, state) { return (state.tokens[0] || tokenBase) (stream, state); }; return { startState: function() {return {tokens:[]};}, token: function(stream, state) { return tokenize(stream, state); }, lineComment: '#', fold: "brace" }; }); CodeMirror.defineMIME('text/x-sh', 'shell'); }); application/library/codemirror/mode/shell/test.js000064400000003354146731177160016252 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({}, "shell"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("var", "text [def $var] text"); MT("varBraces", "text[def ${var}]text"); MT("varVar", "text [def $a$b] text"); MT("varBracesVarBraces", "text[def ${a}${b}]text"); MT("singleQuotedVar", "[string 'text $var text']"); MT("singleQuotedVarBraces", "[string 'text ${var} text']"); MT("doubleQuotedVar", '[string "text ][def $var][string text"]'); MT("doubleQuotedVarBraces", '[string "text][def ${var}][string text"]'); MT("doubleQuotedVarPunct", '[string "text ][def $@][string text"]'); MT("doubleQuotedVarVar", '[string "][def $a$b][string "]'); MT("doubleQuotedVarBracesVarBraces", '[string "][def ${a}${b}][string "]'); MT("notAString", "text\\'text"); MT("escapes", "outside\\'\\\"\\`\\\\[string \"inside\\`\\'\\\"\\\\`\\$notAVar\"]outside\\$\\(notASubShell\\)"); MT("subshell", "[builtin echo] [quote $(whoami)] s log, stardate [quote `date`]."); MT("doubleQuotedSubshell", "[builtin echo] [string \"][quote $(whoami)][string 's log, stardate `date`.\"]"); MT("hashbang", "[meta #!/bin/bash]"); MT("comment", "text [comment # Blurb]"); MT("numbers", "[number 0] [number 1] [number 2]"); MT("keywords", "[keyword while] [atom true]; [keyword do]", " [builtin sleep] [number 3]", "[keyword done]"); MT("options", "[builtin ls] [attribute -l] [attribute --human-readable]"); MT("operator", "[def var][operator =]value"); })(); application/library/codemirror/mode/shell/index.html000064400000003321146731177160016724 0ustar00 CodeMirror: Shell mode

    Shell mode

    MIME types defined: text/x-sh.

    application/library/codemirror/mode/groovy/groovy.js000064400000017306146731177160017040 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("groovy", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words( "abstract as assert boolean break byte case catch char class const continue def default " + "do double else enum extends final finally float for goto if implements import in " + "instanceof int interface long native new package private protected public return " + "short static strictfp super switch synchronized threadsafe throw throws transient " + "try void volatile while"); var blockKeywords = words("catch class do else finally for if switch try while enum interface def"); var standaloneKeywords = words("return break continue"); var atoms = words("null true false this"); var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { return startString(ch, stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); if (stream.eat(/eE/)) { stream.eat(/\+\-/); stream.eatWhile(/\d/); } return "number"; } if (ch == "/") { if (stream.eat("*")) { state.tokenize.push(tokenComment); return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } if (expectExpression(state.lastToken, false)) { return startString(ch, stream, state); } } if (ch == "-" && stream.eat(">")) { curPunc = "->"; return null; } if (/[+\-*&%=<>!?|\/~]/.test(ch)) { stream.eatWhile(/[+\-*&%=<>|~]/); return "operator"; } stream.eatWhile(/[\w\$_]/); if (ch == "@") { stream.eatWhile(/[\w\$_\.]/); return "meta"; } if (state.lastToken == ".") return "property"; if (stream.eat(":")) { curPunc = "proplabel"; return "property"; } var cur = stream.current(); if (atoms.propertyIsEnumerable(cur)) { return "atom"; } if (keywords.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; else if (standaloneKeywords.propertyIsEnumerable(cur)) curPunc = "standalone"; return "keyword"; } return "variable"; } tokenBase.isBase = true; function startString(quote, stream, state) { var tripleQuoted = false; if (quote != "/" && stream.eat(quote)) { if (stream.eat(quote)) tripleQuoted = true; else return "string"; } function t(stream, state) { var escaped = false, next, end = !tripleQuoted; while ((next = stream.next()) != null) { if (next == quote && !escaped) { if (!tripleQuoted) { break; } if (stream.match(quote + quote)) { end = true; break; } } if (quote == '"' && next == "$" && !escaped && stream.eat("{")) { state.tokenize.push(tokenBaseUntilBrace()); return "string"; } escaped = !escaped && next == "\\"; } if (end) state.tokenize.pop(); return "string"; } state.tokenize.push(t); return t(stream, state); } function tokenBaseUntilBrace() { var depth = 1; function t(stream, state) { if (stream.peek() == "}") { depth--; if (depth == 0) { state.tokenize.pop(); return state.tokenize[state.tokenize.length-1](stream, state); } } else if (stream.peek() == "{") { depth++; } return tokenBase(stream, state); } t.isBase = true; return t; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize.pop(); break; } maybeEnd = (ch == "*"); } return "comment"; } function expectExpression(last, newline) { return !last || last == "operator" || last == "->" || /[\.\[\{\(,;:]/.test(last) || last == "newstatement" || last == "keyword" || last == "proplabel" || (last == "standalone" && !newline); } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: [tokenBase], context: new Context((basecolumn || 0) - config.indentUnit, 0, "top", false), indented: 0, startOfLine: true, lastToken: null }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; // Automatic semicolon insertion if (ctx.type == "statement" && !expectExpression(state.lastToken, true)) { popContext(state); ctx = state.context; } } if (stream.eatSpace()) return null; curPunc = null; var style = state.tokenize[state.tokenize.length-1](stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); // Handle indentation for {x -> \n ... } else if (curPunc == "->" && ctx.type == "statement" && ctx.prev.type == "}") { popContext(state); state.context.align = false; } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) pushContext(state, stream.column(), "statement"); state.startOfLine = false; state.lastToken = curPunc || style; return style; }, indent: function(state, textAfter) { if (!state.tokenize[state.tokenize.length-1].isBase) return 0; var firstChar = textAfter && textAfter.charAt(0), ctx = state.context; if (ctx.type == "statement" && !expectExpression(state.lastToken, true)) ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : config.indentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : config.indentUnit); }, electricChars: "{}", closeBrackets: {triples: "'\""}, fold: "brace" }; }); CodeMirror.defineMIME("text/x-groovy", "groovy"); }); application/library/codemirror/mode/groovy/index.html000064400000004201146731177160017140 0ustar00 CodeMirror: Groovy mode

    Groovy mode

    MIME types defined: text/x-groovy

    application/library/codemirror/mode/xquery/xquery.js000064400000034206146731177160017056 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("xquery", function() { // The keywords object is set to the result of this self executing // function. Each keyword is a property of the keywords object whose // value is {type: atype, style: astyle} var keywords = function(){ // convenience functions used to build keywords object function kw(type) {return {type: type, style: "keyword"};} var A = kw("keyword a") , B = kw("keyword b") , C = kw("keyword c") , operator = kw("operator") , atom = {type: "atom", style: "atom"} , punctuation = {type: "punctuation", style: null} , qualifier = {type: "axis_specifier", style: "qualifier"}; // kwObj is what is return from this function at the end var kwObj = { 'if': A, 'switch': A, 'while': A, 'for': A, 'else': B, 'then': B, 'try': B, 'finally': B, 'catch': B, 'element': C, 'attribute': C, 'let': C, 'implements': C, 'import': C, 'module': C, 'namespace': C, 'return': C, 'super': C, 'this': C, 'throws': C, 'where': C, 'private': C, ',': punctuation, 'null': atom, 'fn:false()': atom, 'fn:true()': atom }; // a list of 'basic' keywords. For each add a property to kwObj with the value of // {type: basic[i], style: "keyword"} e.g. 'after' --> {type: "after", style: "keyword"} var basic = ['after','ancestor','ancestor-or-self','and','as','ascending','assert','attribute','before', 'by','case','cast','child','comment','declare','default','define','descendant','descendant-or-self', 'descending','document','document-node','element','else','eq','every','except','external','following', 'following-sibling','follows','for','function','if','import','in','instance','intersect','item', 'let','module','namespace','node','node','of','only','or','order','parent','precedes','preceding', 'preceding-sibling','processing-instruction','ref','return','returns','satisfies','schema','schema-element', 'self','some','sortby','stable','text','then','to','treat','typeswitch','union','variable','version','where', 'xquery', 'empty-sequence']; for(var i=0, l=basic.length; i < l; i++) { kwObj[basic[i]] = kw(basic[i]);}; // a list of types. For each add a property to kwObj with the value of // {type: "atom", style: "atom"} var types = ['xs:string', 'xs:float', 'xs:decimal', 'xs:double', 'xs:integer', 'xs:boolean', 'xs:date', 'xs:dateTime', 'xs:time', 'xs:duration', 'xs:dayTimeDuration', 'xs:time', 'xs:yearMonthDuration', 'numeric', 'xs:hexBinary', 'xs:base64Binary', 'xs:anyURI', 'xs:QName', 'xs:byte','xs:boolean','xs:anyURI','xf:yearMonthDuration']; for(var i=0, l=types.length; i < l; i++) { kwObj[types[i]] = atom;}; // each operator will add a property to kwObj with value of {type: "operator", style: "keyword"} var operators = ['eq', 'ne', 'lt', 'le', 'gt', 'ge', ':=', '=', '>', '>=', '<', '<=', '.', '|', '?', 'and', 'or', 'div', 'idiv', 'mod', '*', '/', '+', '-']; for(var i=0, l=operators.length; i < l; i++) { kwObj[operators[i]] = operator;}; // each axis_specifiers will add a property to kwObj with value of {type: "axis_specifier", style: "qualifier"} var axis_specifiers = ["self::", "attribute::", "child::", "descendant::", "descendant-or-self::", "parent::", "ancestor::", "ancestor-or-self::", "following::", "preceding::", "following-sibling::", "preceding-sibling::"]; for(var i=0, l=axis_specifiers.length; i < l; i++) { kwObj[axis_specifiers[i]] = qualifier; }; return kwObj; }(); function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } // the primary mode tokenizer function tokenBase(stream, state) { var ch = stream.next(), mightBeFunction = false, isEQName = isEQNameAhead(stream); // an XML tag (if not in some sub, chained tokenizer) if (ch == "<") { if(stream.match("!--", true)) return chain(stream, state, tokenXMLComment); if(stream.match("![CDATA", false)) { state.tokenize = tokenCDATA; return "tag"; } if(stream.match("?", false)) { return chain(stream, state, tokenPreProcessing); } var isclose = stream.eat("/"); stream.eatSpace(); var tagName = "", c; while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c; return chain(stream, state, tokenTag(tagName, isclose)); } // start code block else if(ch == "{") { pushStateStack(state,{ type: "codeblock"}); return null; } // end code block else if(ch == "}") { popStateStack(state); return null; } // if we're in an XML block else if(isInXmlBlock(state)) { if(ch == ">") return "tag"; else if(ch == "/" && stream.eat(">")) { popStateStack(state); return "tag"; } else return "variable"; } // if a number else if (/\d/.test(ch)) { stream.match(/^\d*(?:\.\d*)?(?:E[+\-]?\d+)?/); return "atom"; } // comment start else if (ch === "(" && stream.eat(":")) { pushStateStack(state, { type: "comment"}); return chain(stream, state, tokenComment); } // quoted string else if ( !isEQName && (ch === '"' || ch === "'")) return chain(stream, state, tokenString(ch)); // variable else if(ch === "$") { return chain(stream, state, tokenVariable); } // assignment else if(ch ===":" && stream.eat("=")) { return "keyword"; } // open paren else if(ch === "(") { pushStateStack(state, { type: "paren"}); return null; } // close paren else if(ch === ")") { popStateStack(state); return null; } // open paren else if(ch === "[") { pushStateStack(state, { type: "bracket"}); return null; } // close paren else if(ch === "]") { popStateStack(state); return null; } else { var known = keywords.propertyIsEnumerable(ch) && keywords[ch]; // if there's a EQName ahead, consume the rest of the string portion, it's likely a function if(isEQName && ch === '\"') while(stream.next() !== '"'){} if(isEQName && ch === '\'') while(stream.next() !== '\''){} // gobble up a word if the character is not known if(!known) stream.eatWhile(/[\w\$_-]/); // gobble a colon in the case that is a lib func type call fn:doc var foundColon = stream.eat(":"); // if there's not a second colon, gobble another word. Otherwise, it's probably an axis specifier // which should get matched as a keyword if(!stream.eat(":") && foundColon) { stream.eatWhile(/[\w\$_-]/); } // if the next non whitespace character is an open paren, this is probably a function (if not a keyword of other sort) if(stream.match(/^[ \t]*\(/, false)) { mightBeFunction = true; } // is the word a keyword? var word = stream.current(); known = keywords.propertyIsEnumerable(word) && keywords[word]; // if we think it's a function call but not yet known, // set style to variable for now for lack of something better if(mightBeFunction && !known) known = {type: "function_call", style: "variable def"}; // if the previous word was element, attribute, axis specifier, this word should be the name of that if(isInXmlConstructor(state)) { popStateStack(state); return "variable"; } // as previously checked, if the word is element,attribute, axis specifier, call it an "xmlconstructor" and // push the stack so we know to look for it on the next word if(word == "element" || word == "attribute" || known.type == "axis_specifier") pushStateStack(state, {type: "xmlconstructor"}); // if the word is known, return the details of that else just call this a generic 'word' return known ? known.style : "variable"; } } // handle comments, including nested function tokenComment(stream, state) { var maybeEnd = false, maybeNested = false, nestedCount = 0, ch; while (ch = stream.next()) { if (ch == ")" && maybeEnd) { if(nestedCount > 0) nestedCount--; else { popStateStack(state); break; } } else if(ch == ":" && maybeNested) { nestedCount++; } maybeEnd = (ch == ":"); maybeNested = (ch == "("); } return "comment"; } // tokenizer for string literals // optionally pass a tokenizer function to set state.tokenize back to when finished function tokenString(quote, f) { return function(stream, state) { var ch; if(isInString(state) && stream.current() == quote) { popStateStack(state); if(f) state.tokenize = f; return "string"; } pushStateStack(state, { type: "string", name: quote, tokenize: tokenString(quote, f) }); // if we're in a string and in an XML block, allow an embedded code block if(stream.match("{", false) && isInXmlAttributeBlock(state)) { state.tokenize = tokenBase; return "string"; } while (ch = stream.next()) { if (ch == quote) { popStateStack(state); if(f) state.tokenize = f; break; } else { // if we're in a string and in an XML block, allow an embedded code block in an attribute if(stream.match("{", false) && isInXmlAttributeBlock(state)) { state.tokenize = tokenBase; return "string"; } } } return "string"; }; } // tokenizer for variables function tokenVariable(stream, state) { var isVariableChar = /[\w\$_-]/; // a variable may start with a quoted EQName so if the next character is quote, consume to the next quote if(stream.eat("\"")) { while(stream.next() !== '\"'){}; stream.eat(":"); } else { stream.eatWhile(isVariableChar); if(!stream.match(":=", false)) stream.eat(":"); } stream.eatWhile(isVariableChar); state.tokenize = tokenBase; return "variable"; } // tokenizer for XML tags function tokenTag(name, isclose) { return function(stream, state) { stream.eatSpace(); if(isclose && stream.eat(">")) { popStateStack(state); state.tokenize = tokenBase; return "tag"; } // self closing tag without attributes? if(!stream.eat("/")) pushStateStack(state, { type: "tag", name: name, tokenize: tokenBase}); if(!stream.eat(">")) { state.tokenize = tokenAttribute; return "tag"; } else { state.tokenize = tokenBase; } return "tag"; }; } // tokenizer for XML attributes function tokenAttribute(stream, state) { var ch = stream.next(); if(ch == "/" && stream.eat(">")) { if(isInXmlAttributeBlock(state)) popStateStack(state); if(isInXmlBlock(state)) popStateStack(state); return "tag"; } if(ch == ">") { if(isInXmlAttributeBlock(state)) popStateStack(state); return "tag"; } if(ch == "=") return null; // quoted string if (ch == '"' || ch == "'") return chain(stream, state, tokenString(ch, tokenAttribute)); if(!isInXmlAttributeBlock(state)) pushStateStack(state, { type: "attribute", tokenize: tokenAttribute}); stream.eat(/[a-zA-Z_:]/); stream.eatWhile(/[-a-zA-Z0-9_:.]/); stream.eatSpace(); // the case where the attribute has not value and the tag was closed if(stream.match(">", false) || stream.match("/", false)) { popStateStack(state); state.tokenize = tokenBase; } return "attribute"; } // handle comments, including nested function tokenXMLComment(stream, state) { var ch; while (ch = stream.next()) { if (ch == "-" && stream.match("->", true)) { state.tokenize = tokenBase; return "comment"; } } } // handle CDATA function tokenCDATA(stream, state) { var ch; while (ch = stream.next()) { if (ch == "]" && stream.match("]", true)) { state.tokenize = tokenBase; return "comment"; } } } // handle preprocessing instructions function tokenPreProcessing(stream, state) { var ch; while (ch = stream.next()) { if (ch == "?" && stream.match(">", true)) { state.tokenize = tokenBase; return "comment meta"; } } } // functions to test the current context of the state function isInXmlBlock(state) { return isIn(state, "tag"); } function isInXmlAttributeBlock(state) { return isIn(state, "attribute"); } function isInXmlConstructor(state) { return isIn(state, "xmlconstructor"); } function isInString(state) { return isIn(state, "string"); } function isEQNameAhead(stream) { // assume we've already eaten a quote (") if(stream.current() === '"') return stream.match(/^[^\"]+\"\:/, false); else if(stream.current() === '\'') return stream.match(/^[^\"]+\'\:/, false); else return false; } function isIn(state, type) { return (state.stack.length && state.stack[state.stack.length - 1].type == type); } function pushStateStack(state, newState) { state.stack.push(newState); } function popStateStack(state) { state.stack.pop(); var reinstateTokenize = state.stack.length && state.stack[state.stack.length-1].tokenize; state.tokenize = reinstateTokenize || tokenBase; } // the interface for the mode API return { startState: function() { return { tokenize: tokenBase, cc: [], stack: [] }; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; }, blockCommentStart: "(:", blockCommentEnd: ":)" }; }); CodeMirror.defineMIME("application/xquery", "xquery"); }); application/library/codemirror/mode/xquery/test.js000064400000011764146731177160016504 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Don't take these too seriously -- the expected results appear to be // based on the results of actual runs without any serious manual // verification. If a change you made causes them to fail, the test is // as likely to wrong as the code. (function() { var mode = CodeMirror.getMode({tabSize: 4}, "xquery"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("eviltest", "[keyword xquery] [keyword version] [variable "1][keyword .][atom 0][keyword -][variable ml"][def&variable ;] [comment (: this is : a \"comment\" :)]", " [keyword let] [variable $let] [keyword :=] [variable <x] [variable attr][keyword =][variable "value">"test"<func>][def&variable ;function]() [variable $var] {[keyword function]()} {[variable $var]}[variable <][keyword /][variable func><][keyword /][variable x>]", " [keyword let] [variable $joe][keyword :=][atom 1]", " [keyword return] [keyword element] [variable element] {", " [keyword attribute] [variable attribute] { [atom 1] },", " [keyword element] [variable test] { [variable 'a'] }, [keyword attribute] [variable foo] { [variable "bar"] },", " [def&variable fn:doc]()[[ [variable foo][keyword /][variable @bar] [keyword eq] [variable $let] ]],", " [keyword //][variable x] } [comment (: a more 'evil' test :)]", " [comment (: Modified Blakeley example (: with nested comment :) ... :)]", " [keyword declare] [keyword private] [keyword function] [def&variable local:declare]() {()}[variable ;]", " [keyword declare] [keyword private] [keyword function] [def&variable local:private]() {()}[variable ;]", " [keyword declare] [keyword private] [keyword function] [def&variable local:function]() {()}[variable ;]", " [keyword declare] [keyword private] [keyword function] [def&variable local:local]() {()}[variable ;]", " [keyword let] [variable $let] [keyword :=] [variable <let>let] [variable $let] [keyword :=] [variable "let"<][keyword /let][variable >]", " [keyword return] [keyword element] [variable element] {", " [keyword attribute] [variable attribute] { [keyword try] { [def&variable xdmp:version]() } [keyword catch]([variable $e]) { [def&variable xdmp:log]([variable $e]) } },", " [keyword attribute] [variable fn:doc] { [variable "bar"] [variable castable] [keyword as] [atom xs:string] },", " [keyword element] [variable text] { [keyword text] { [variable "text"] } },", " [def&variable fn:doc]()[[ [qualifier child::][variable eq][keyword /]([variable @bar] [keyword |] [qualifier attribute::][variable attribute]) [keyword eq] [variable $let] ]],", " [keyword //][variable fn:doc]", " }"); MT("testEmptySequenceKeyword", "[string \"foo\"] [keyword instance] [keyword of] [keyword empty-sequence]()"); MT("testMultiAttr", "[tag

    ][variable hello] [variable world][tag

    ]"); MT("test namespaced variable", "[keyword declare] [keyword namespace] [variable e] [keyword =] [string \"http://example.com/ANamespace\"][variable ;declare] [keyword variable] [variable $e:exampleComThisVarIsNotRecognized] [keyword as] [keyword element]([keyword *]) [variable external;]"); MT("test EQName variable", "[keyword declare] [keyword variable] [variable $\"http://www.example.com/ns/my\":var] [keyword :=] [atom 12][variable ;]", "[tag ]{[variable $\"http://www.example.com/ns/my\":var]}[tag ]"); MT("test EQName function", "[keyword declare] [keyword function] [def&variable \"http://www.example.com/ns/my\":fn] ([variable $a] [keyword as] [atom xs:integer]) [keyword as] [atom xs:integer] {", " [variable $a] [keyword +] [atom 2]", "}[variable ;]", "[tag ]{[def&variable \"http://www.example.com/ns/my\":fn]([atom 12])}[tag ]"); MT("test EQName function with single quotes", "[keyword declare] [keyword function] [def&variable 'http://www.example.com/ns/my':fn] ([variable $a] [keyword as] [atom xs:integer]) [keyword as] [atom xs:integer] {", " [variable $a] [keyword +] [atom 2]", "}[variable ;]", "[tag ]{[def&variable 'http://www.example.com/ns/my':fn]([atom 12])}[tag ]"); MT("testProcessingInstructions", "[def&variable data]([comment&meta ]) [keyword instance] [keyword of] [atom xs:string]"); MT("testQuoteEscapeDouble", "[keyword let] [variable $rootfolder] [keyword :=] [string \"c:\\builds\\winnt\\HEAD\\qa\\scripts\\\"]", "[keyword let] [variable $keysfolder] [keyword :=] [def&variable concat]([variable $rootfolder], [string \"keys\\\"])"); })(); application/library/codemirror/mode/xquery/index.html000064400000020641146731177160017156 0ustar00 CodeMirror: XQuery mode

    XQuery mode

    MIME types defined: application/xquery.

    Development of the CodeMirror XQuery mode was sponsored by MarkLogic and developed by Mike Brevoort.

    application/library/codemirror/mode/vue/index.html000064400000004020146731177160016411 0ustar00 CodeMirror: Vue.js mode

    Vue.js mode

    MIME types defined: text/x-vue

    application/library/codemirror/mode/vue/vue.js000064400000004702146731177160015560 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function (mod) { "use strict"; if (typeof exports === "object" && typeof module === "object") {// CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/overlay"), require("../xml/xml"), require("../javascript/javascript"), require("../coffeescript/coffeescript"), require("../css/css"), require("../sass/sass"), require("../stylus/stylus"), require("../pug/pug"), require("../handlebars/handlebars")); } else if (typeof define === "function" && define.amd) { // AMD define(["../../lib/codemirror", "../../addon/mode/overlay", "../xml/xml", "../javascript/javascript", "../coffeescript/coffeescript", "../css/css", "../sass/sass", "../stylus/stylus", "../pug/pug", "../handlebars/handlebars"], mod); } else { // Plain browser env mod(CodeMirror); } })(function (CodeMirror) { var tagLanguages = { script: [ ["lang", /coffee(script)?/, "coffeescript"], ["type", /^(?:text|application)\/(?:x-)?coffee(?:script)?$/, "coffeescript"] ], style: [ ["lang", /^stylus$/i, "stylus"], ["lang", /^sass$/i, "sass"], ["type", /^(text\/)?(x-)?styl(us)?$/i, "stylus"], ["type", /^text\/sass/i, "sass"] ], template: [ ["lang", /^vue-template$/i, "vue"], ["lang", /^pug$/i, "pug"], ["lang", /^handlebars$/i, "handlebars"], ["type", /^(text\/)?(x-)?pug$/i, "pug"], ["type", /^text\/x-handlebars-template$/i, "handlebars"], [null, null, "vue-template"] ] }; CodeMirror.defineMode("vue-template", function (config, parserConfig) { var mustacheOverlay = { token: function (stream) { if (stream.match(/^\{\{.*?\}\}/)) return "meta mustache"; while (stream.next() && !stream.match("{{", false)) {} return null; } }; return CodeMirror.overlayMode(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), mustacheOverlay); }); CodeMirror.defineMode("vue", function (config) { return CodeMirror.getMode(config, {name: "htmlmixed", tags: tagLanguages}); }, "htmlmixed", "xml", "javascript", "coffeescript", "css", "sass", "stylus", "pug", "handlebars"); CodeMirror.defineMIME("script/x-vue", "vue"); }); application/library/codemirror/mode/d/d.js000064400000016616146731177160014637 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("d", function(config, parserConfig) { var indentUnit = config.indentUnit, statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, keywords = parserConfig.keywords || {}, builtin = parserConfig.builtin || {}, blockKeywords = parserConfig.blockKeywords || {}, atoms = parserConfig.atoms || {}, hooks = parserConfig.hooks || {}, multiLineStrings = parserConfig.multiLineStrings; var isOperatorChar = /[+\-*&%=<>!?|\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (ch == '"' || ch == "'" || ch == "`") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("+")) { state.tokenize = tokenComment; return tokenNestedComment(stream, state); } if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "keyword"; } if (builtin.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "builtin"; } if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenNestedComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "+"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement") popContext(state); else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement")) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "{}" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var blockKeywords = "body catch class do else enum for foreach foreach_reverse if in interface mixin " + "out scope struct switch try union unittest version while with"; CodeMirror.defineMIME("text/x-d", { name: "d", keywords: words("abstract alias align asm assert auto break case cast cdouble cent cfloat const continue " + "debug default delegate delete deprecated export extern final finally function goto immutable " + "import inout invariant is lazy macro module new nothrow override package pragma private " + "protected public pure ref return shared short static super synchronized template this " + "throw typedef typeid typeof volatile __FILE__ __LINE__ __gshared __traits __vector __parameters " + blockKeywords), blockKeywords: words(blockKeywords), builtin: words("bool byte char creal dchar double float idouble ifloat int ireal long real short ubyte " + "ucent uint ulong ushort wchar wstring void size_t sizediff_t"), atoms: words("exit failure success true false null"), hooks: { "@": function(stream, _state) { stream.eatWhile(/[\w\$_]/); return "meta"; } } }); }); application/library/codemirror/mode/d/index.html000064400000014274146731177160016051 0ustar00 CodeMirror: D mode

    D mode

    Simple mode that handle D-Syntax (DLang Homepage).

    MIME types defined: text/x-d .

    application/library/codemirror/mode/stex/stex.js000064400000015424146731177160016133 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* * Author: Constantin Jucovschi (c.jucovschi@jacobs-university.de) * Licence: MIT */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("stex", function() { "use strict"; function pushCommand(state, command) { state.cmdState.push(command); } function peekCommand(state) { if (state.cmdState.length > 0) { return state.cmdState[state.cmdState.length - 1]; } else { return null; } } function popCommand(state) { var plug = state.cmdState.pop(); if (plug) { plug.closeBracket(); } } // returns the non-default plugin closest to the end of the list function getMostPowerful(state) { var context = state.cmdState; for (var i = context.length - 1; i >= 0; i--) { var plug = context[i]; if (plug.name == "DEFAULT") { continue; } return plug; } return { styleIdentifier: function() { return null; } }; } function addPluginPattern(pluginName, cmdStyle, styles) { return function () { this.name = pluginName; this.bracketNo = 0; this.style = cmdStyle; this.styles = styles; this.argument = null; // \begin and \end have arguments that follow. These are stored in the plugin this.styleIdentifier = function() { return this.styles[this.bracketNo - 1] || null; }; this.openBracket = function() { this.bracketNo++; return "bracket"; }; this.closeBracket = function() {}; }; } var plugins = {}; plugins["importmodule"] = addPluginPattern("importmodule", "tag", ["string", "builtin"]); plugins["documentclass"] = addPluginPattern("documentclass", "tag", ["", "atom"]); plugins["usepackage"] = addPluginPattern("usepackage", "tag", ["atom"]); plugins["begin"] = addPluginPattern("begin", "tag", ["atom"]); plugins["end"] = addPluginPattern("end", "tag", ["atom"]); plugins["DEFAULT"] = function () { this.name = "DEFAULT"; this.style = "tag"; this.styleIdentifier = this.openBracket = this.closeBracket = function() {}; }; function setState(state, f) { state.f = f; } // called when in a normal (no environment) context function normal(source, state) { var plug; // Do we look like '\command' ? If so, attempt to apply the plugin 'command' if (source.match(/^\\[a-zA-Z@]+/)) { var cmdName = source.current().slice(1); plug = plugins[cmdName] || plugins["DEFAULT"]; plug = new plug(); pushCommand(state, plug); setState(state, beginParams); return plug.style; } // escape characters if (source.match(/^\\[$&%#{}_]/)) { return "tag"; } // white space control characters if (source.match(/^\\[,;!\/\\]/)) { return "tag"; } // find if we're starting various math modes if (source.match("\\[")) { setState(state, function(source, state){ return inMathMode(source, state, "\\]"); }); return "keyword"; } if (source.match("$$")) { setState(state, function(source, state){ return inMathMode(source, state, "$$"); }); return "keyword"; } if (source.match("$")) { setState(state, function(source, state){ return inMathMode(source, state, "$"); }); return "keyword"; } var ch = source.next(); if (ch == "%") { source.skipToEnd(); return "comment"; } else if (ch == '}' || ch == ']') { plug = peekCommand(state); if (plug) { plug.closeBracket(ch); setState(state, beginParams); } else { return "error"; } return "bracket"; } else if (ch == '{' || ch == '[') { plug = plugins["DEFAULT"]; plug = new plug(); pushCommand(state, plug); return "bracket"; } else if (/\d/.test(ch)) { source.eatWhile(/[\w.%]/); return "atom"; } else { source.eatWhile(/[\w\-_]/); plug = getMostPowerful(state); if (plug.name == 'begin') { plug.argument = source.current(); } return plug.styleIdentifier(); } } function inMathMode(source, state, endModeSeq) { if (source.eatSpace()) { return null; } if (source.match(endModeSeq)) { setState(state, normal); return "keyword"; } if (source.match(/^\\[a-zA-Z@]+/)) { return "tag"; } if (source.match(/^[a-zA-Z]+/)) { return "variable-2"; } // escape characters if (source.match(/^\\[$&%#{}_]/)) { return "tag"; } // white space control characters if (source.match(/^\\[,;!\/]/)) { return "tag"; } // special math-mode characters if (source.match(/^[\^_&]/)) { return "tag"; } // non-special characters if (source.match(/^[+\-<>|=,\/@!*:;'"`~#?]/)) { return null; } if (source.match(/^(\d+\.\d*|\d*\.\d+|\d+)/)) { return "number"; } var ch = source.next(); if (ch == "{" || ch == "}" || ch == "[" || ch == "]" || ch == "(" || ch == ")") { return "bracket"; } if (ch == "%") { source.skipToEnd(); return "comment"; } return "error"; } function beginParams(source, state) { var ch = source.peek(), lastPlug; if (ch == '{' || ch == '[') { lastPlug = peekCommand(state); lastPlug.openBracket(ch); source.eat(ch); setState(state, normal); return "bracket"; } if (/[ \t\r]/.test(ch)) { source.eat(ch); return null; } setState(state, normal); popCommand(state); return normal(source, state); } return { startState: function() { return { cmdState: [], f: normal }; }, copyState: function(s) { return { cmdState: s.cmdState.slice(), f: s.f }; }, token: function(stream, state) { return state.f(stream, state); }, blankLine: function(state) { state.f = normal; state.cmdState.length = 0; }, lineComment: "%" }; }); CodeMirror.defineMIME("text/x-stex", "stex"); CodeMirror.defineMIME("text/x-latex", "stex"); }); application/library/codemirror/mode/stex/test.js000064400000006042146731177160016123 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4}, "stex"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("word", "foo"); MT("twoWords", "foo bar"); MT("beginEndDocument", "[tag \\begin][bracket {][atom document][bracket }]", "[tag \\end][bracket {][atom document][bracket }]"); MT("beginEndEquation", "[tag \\begin][bracket {][atom equation][bracket }]", " E=mc^2", "[tag \\end][bracket {][atom equation][bracket }]"); MT("beginModule", "[tag \\begin][bracket {][atom module][bracket }[[]]]"); MT("beginModuleId", "[tag \\begin][bracket {][atom module][bracket }[[]id=bbt-size[bracket ]]]"); MT("importModule", "[tag \\importmodule][bracket [[][string b-b-t][bracket ]]{][builtin b-b-t][bracket }]"); MT("importModulePath", "[tag \\importmodule][bracket [[][tag \\KWARCslides][bracket {][string dmath/en/cardinality][bracket }]]{][builtin card][bracket }]"); MT("psForPDF", "[tag \\PSforPDF][bracket [[][atom 1][bracket ]]{]#1[bracket }]"); MT("comment", "[comment % foo]"); MT("tagComment", "[tag \\item][comment % bar]"); MT("commentTag", " [comment % \\item]"); MT("commentLineBreak", "[comment %]", "foo"); MT("tagErrorCurly", "[tag \\begin][error }][bracket {]"); MT("tagErrorSquare", "[tag \\item][error ]]][bracket {]"); MT("commentCurly", "[comment % }]"); MT("tagHash", "the [tag \\#] key"); MT("tagNumber", "a [tag \\$][atom 5] stetson"); MT("tagPercent", "[atom 100][tag \\%] beef"); MT("tagAmpersand", "L [tag \\&] N"); MT("tagUnderscore", "foo[tag \\_]bar"); MT("tagBracketOpen", "[tag \\emph][bracket {][tag \\{][bracket }]"); MT("tagBracketClose", "[tag \\emph][bracket {][tag \\}][bracket }]"); MT("tagLetterNumber", "section [tag \\S][atom 1]"); MT("textTagNumber", "para [tag \\P][atom 2]"); MT("thinspace", "x[tag \\,]y"); MT("thickspace", "x[tag \\;]y"); MT("negativeThinspace", "x[tag \\!]y"); MT("periodNotSentence", "J.\\ L.\\ is"); MT("periodSentence", "X[tag \\@]. The"); MT("italicCorrection", "[bracket {][tag \\em] If[tag \\/][bracket }] I"); MT("tagBracket", "[tag \\newcommand][bracket {][tag \\pop][bracket }]"); MT("inlineMathTagFollowedByNumber", "[keyword $][tag \\pi][number 2][keyword $]"); MT("inlineMath", "[keyword $][number 3][variable-2 x][tag ^][number 2.45]-[tag \\sqrt][bracket {][tag \\$\\alpha][bracket }] = [number 2][keyword $] other text"); MT("displayMath", "More [keyword $$]\t[variable-2 S][tag ^][variable-2 n][tag \\sum] [variable-2 i][keyword $$] other text"); MT("mathWithComment", "[keyword $][variable-2 x] [comment % $]", "[variable-2 y][keyword $] other text"); MT("lineBreakArgument", "[tag \\\\][bracket [[][atom 1cm][bracket ]]]"); })(); application/library/codemirror/mode/stex/index.html000064400000010044146731177160016600 0ustar00 CodeMirror: sTeX mode

    sTeX mode

    MIME types defined: text/x-stex.

    Parsing/Highlighting Tests: normal, verbose.

    application/library/codemirror/mode/ebnf/ebnf.js000064400000013705146731177160016011 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ebnf", function (config) { var commentType = {slash: 0, parenthesis: 1}; var stateType = {comment: 0, _string: 1, characterClass: 2}; var bracesMode = null; if (config.bracesMode) bracesMode = CodeMirror.getMode(config, config.bracesMode); return { startState: function () { return { stringType: null, commentType: null, braced: 0, lhs: true, localState: null, stack: [], inDefinition: false }; }, token: function (stream, state) { if (!stream) return; //check for state changes if (state.stack.length === 0) { //strings if ((stream.peek() == '"') || (stream.peek() == "'")) { state.stringType = stream.peek(); stream.next(); // Skip quote state.stack.unshift(stateType._string); } else if (stream.match(/^\/\*/)) { //comments starting with /* state.stack.unshift(stateType.comment); state.commentType = commentType.slash; } else if (stream.match(/^\(\*/)) { //comments starting with (* state.stack.unshift(stateType.comment); state.commentType = commentType.parenthesis; } } //return state //stack has switch (state.stack[0]) { case stateType._string: while (state.stack[0] === stateType._string && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.stack.shift(); // Clear flag } else if (stream.peek() === "\\") { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return state.lhs ? "property string" : "string"; // Token style case stateType.comment: while (state.stack[0] === stateType.comment && !stream.eol()) { if (state.commentType === commentType.slash && stream.match(/\*\//)) { state.stack.shift(); // Clear flag state.commentType = null; } else if (state.commentType === commentType.parenthesis && stream.match(/\*\)/)) { state.stack.shift(); // Clear flag state.commentType = null; } else { stream.match(/^.[^\*]*/); } } return "comment"; case stateType.characterClass: while (state.stack[0] === stateType.characterClass && !stream.eol()) { if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) { state.stack.shift(); } } return "operator"; } var peek = stream.peek(); if (bracesMode !== null && (state.braced || peek === "{")) { if (state.localState === null) state.localState = CodeMirror.startState(bracesMode); var token = bracesMode.token(stream, state.localState), text = stream.current(); if (!token) { for (var i = 0; i < text.length; i++) { if (text[i] === "{") { if (state.braced === 0) { token = "matchingbracket"; } state.braced++; } else if (text[i] === "}") { state.braced--; if (state.braced === 0) { token = "matchingbracket"; } } } } return token; } //no stack switch (peek) { case "[": stream.next(); state.stack.unshift(stateType.characterClass); return "bracket"; case ":": case "|": case ";": stream.next(); return "operator"; case "%": if (stream.match("%%")) { return "header"; } else if (stream.match(/[%][A-Za-z]+/)) { return "keyword"; } else if (stream.match(/[%][}]/)) { return "matchingbracket"; } break; case "/": if (stream.match(/[\/][A-Za-z]+/)) { return "keyword"; } case "\\": if (stream.match(/[\][a-z]+/)) { return "string-2"; } case ".": if (stream.match(".")) { return "atom"; } case "*": case "-": case "+": case "^": if (stream.match(peek)) { return "atom"; } case "$": if (stream.match("$$")) { return "builtin"; } else if (stream.match(/[$][0-9]+/)) { return "variable-3"; } case "<": if (stream.match(/<<[a-zA-Z_]+>>/)) { return "builtin"; } } if (stream.match(/^\/\//)) { stream.skipToEnd(); return "comment"; } else if (stream.match(/return/)) { return "operator"; } else if (stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/)) { if (stream.match(/(?=[\(.])/)) { return "variable"; } else if (stream.match(/(?=[\s\n]*[:=])/)) { return "def"; } return "variable-2"; } else if (["[", "]", "(", ")"].indexOf(stream.peek()) != -1) { stream.next(); return "bracket"; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }); CodeMirror.defineMIME("text/x-ebnf", "ebnf"); }); application/library/codemirror/mode/ebnf/index.html000064400000004622146731177160016534 0ustar00 CodeMirror: EBNF Mode

    EBNF Mode (bracesMode setting = "javascript")

    The EBNF Mode

    Created by Robert Plummer

    application/library/codemirror/mode/dylan/test.js000064400000005262146731177160016252 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "dylan"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT('comments', '[comment // This is a line comment]', '[comment /* This is a block comment */]', '[comment /* This is a multi]', '[comment line comment]', '[comment */]', '[comment /* And this is a /*]', '[comment /* nested */ comment */]'); MT('unary_operators', '[operator -][variable a]', '[operator -] [variable a]', '[operator ~][variable a]', '[operator ~] [variable a]'); MT('binary_operators', '[variable a] [operator +] [variable b]', '[variable a] [operator -] [variable b]', '[variable a] [operator *] [variable b]', '[variable a] [operator /] [variable b]', '[variable a] [operator ^] [variable b]', '[variable a] [operator =] [variable b]', '[variable a] [operator ==] [variable b]', '[variable a] [operator ~=] [variable b]', '[variable a] [operator ~==] [variable b]', '[variable a] [operator <] [variable b]', '[variable a] [operator <=] [variable b]', '[variable a] [operator >] [variable b]', '[variable a] [operator >=] [variable b]', '[variable a] [operator &] [variable b]', '[variable a] [operator |] [variable b]', '[variable a] [operator :=] [variable b]'); MT('integers', '[number 1]', '[number 123]', '[number -123]', '[number +456]', '[number #b010]', '[number #o073]', '[number #xabcDEF123]'); MT('floats', '[number .3]', '[number -1.]', '[number -2.335]', '[number +3.78d1]', '[number 3.78s-1]', '[number -3.32e+5]'); MT('characters_and_strings', "[string 'a']", "[string '\\\\'']", '[string ""]', '[string "a"]', '[string "abc def"]', '[string "More escaped characters: \\\\\\\\ \\\\a \\\\b \\\\e \\\\f \\\\n \\\\r \\\\t \\\\0 ..."]'); MT('brackets', '[bracket #[[]]]', '[bracket #()]', '[bracket #(][number 1][bracket )]', '[bracket [[][number 1][punctuation ,] [number 3][bracket ]]]', '[bracket ()]', '[bracket {}]', '[keyword if] [bracket (][variable foo][bracket )]', '[bracket (][number 1][bracket )]', '[bracket [[][number 1][bracket ]]]'); MT('hash_words', '[punctuation ##]', '[atom #f]', '[atom #F]', '[atom #t]', '[atom #T]', '[atom #all-keys]', '[atom #include]', '[atom #key]', '[atom #next]', '[atom #rest]', '[string #"foo"]', '[error #invalid]'); })(); application/library/codemirror/mode/dylan/dylan.js000064400000023256146731177160016405 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("dylan", function(_config) { // Words var words = { // Words that introduce unnamed definitions like "define interface" unnamedDefinition: ["interface"], // Words that introduce simple named definitions like "define library" namedDefinition: ["module", "library", "macro", "C-struct", "C-union", "C-function", "C-callable-wrapper" ], // Words that introduce type definitions like "define class". // These are also parameterized like "define method" and are // appended to otherParameterizedDefinitionWords typeParameterizedDefinition: ["class", "C-subtype", "C-mapped-subtype"], // Words that introduce trickier definitions like "define method". // These require special definitions to be added to startExpressions otherParameterizedDefinition: ["method", "function", "C-variable", "C-address" ], // Words that introduce module constant definitions. // These must also be simple definitions and are // appended to otherSimpleDefinitionWords constantSimpleDefinition: ["constant"], // Words that introduce module variable definitions. // These must also be simple definitions and are // appended to otherSimpleDefinitionWords variableSimpleDefinition: ["variable"], // Other words that introduce simple definitions // (without implicit bodies). otherSimpleDefinition: ["generic", "domain", "C-pointer-type", "table" ], // Words that begin statements with implicit bodies. statement: ["if", "block", "begin", "method", "case", "for", "select", "when", "unless", "until", "while", "iterate", "profiling", "dynamic-bind" ], // Patterns that act as separators in compound statements. // This may include any general pattern that must be indented // specially. separator: ["finally", "exception", "cleanup", "else", "elseif", "afterwards" ], // Keywords that do not require special indentation handling, // but which should be highlighted other: ["above", "below", "by", "from", "handler", "in", "instance", "let", "local", "otherwise", "slot", "subclass", "then", "to", "keyed-by", "virtual" ], // Condition signaling function calls signalingCalls: ["signal", "error", "cerror", "break", "check-type", "abort" ] }; words["otherDefinition"] = words["unnamedDefinition"] .concat(words["namedDefinition"]) .concat(words["otherParameterizedDefinition"]); words["definition"] = words["typeParameterizedDefinition"] .concat(words["otherDefinition"]); words["parameterizedDefinition"] = words["typeParameterizedDefinition"] .concat(words["otherParameterizedDefinition"]); words["simpleDefinition"] = words["constantSimpleDefinition"] .concat(words["variableSimpleDefinition"]) .concat(words["otherSimpleDefinition"]); words["keyword"] = words["statement"] .concat(words["separator"]) .concat(words["other"]); // Patterns var symbolPattern = "[-_a-zA-Z?!*@<>$%]+"; var symbol = new RegExp("^" + symbolPattern); var patterns = { // Symbols with special syntax symbolKeyword: symbolPattern + ":", symbolClass: "<" + symbolPattern + ">", symbolGlobal: "\\*" + symbolPattern + "\\*", symbolConstant: "\\$" + symbolPattern }; var patternStyles = { symbolKeyword: "atom", symbolClass: "tag", symbolGlobal: "variable-2", symbolConstant: "variable-3" }; // Compile all patterns to regular expressions for (var patternName in patterns) if (patterns.hasOwnProperty(patternName)) patterns[patternName] = new RegExp("^" + patterns[patternName]); // Names beginning "with-" and "without-" are commonly // used as statement macro patterns["keyword"] = [/^with(?:out)?-[-_a-zA-Z?!*@<>$%]+/]; var styles = {}; styles["keyword"] = "keyword"; styles["definition"] = "def"; styles["simpleDefinition"] = "def"; styles["signalingCalls"] = "builtin"; // protected words lookup table var wordLookup = {}; var styleLookup = {}; [ "keyword", "definition", "simpleDefinition", "signalingCalls" ].forEach(function(type) { words[type].forEach(function(word) { wordLookup[word] = type; styleLookup[word] = styles[type]; }); }); function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { // String var ch = stream.peek(); if (ch == "'" || ch == '"') { stream.next(); return chain(stream, state, tokenString(ch, "string")); } // Comment else if (ch == "/") { stream.next(); if (stream.eat("*")) { return chain(stream, state, tokenComment); } else if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } stream.backUp(1); } // Decimal else if (/[+\-\d\.]/.test(ch)) { if (stream.match(/^[+-]?[0-9]*\.[0-9]*([esdx][+-]?[0-9]+)?/i) || stream.match(/^[+-]?[0-9]+([esdx][+-]?[0-9]+)/i) || stream.match(/^[+-]?\d+/)) { return "number"; } } // Hash else if (ch == "#") { stream.next(); // Symbol with string syntax ch = stream.peek(); if (ch == '"') { stream.next(); return chain(stream, state, tokenString('"', "string")); } // Binary number else if (ch == "b") { stream.next(); stream.eatWhile(/[01]/); return "number"; } // Hex number else if (ch == "x") { stream.next(); stream.eatWhile(/[\da-f]/i); return "number"; } // Octal number else if (ch == "o") { stream.next(); stream.eatWhile(/[0-7]/); return "number"; } // Token concatenation in macros else if (ch == '#') { stream.next(); return "punctuation"; } // Sequence literals else if ((ch == '[') || (ch == '(')) { stream.next(); return "bracket"; // Hash symbol } else if (stream.match(/f|t|all-keys|include|key|next|rest/i)) { return "atom"; } else { stream.eatWhile(/[-a-zA-Z]/); return "error"; } } else if (ch == "~") { stream.next(); ch = stream.peek(); if (ch == "=") { stream.next(); ch = stream.peek(); if (ch == "=") { stream.next(); return "operator"; } return "operator"; } return "operator"; } else if (ch == ":") { stream.next(); ch = stream.peek(); if (ch == "=") { stream.next(); return "operator"; } else if (ch == ":") { stream.next(); return "punctuation"; } } else if ("[](){}".indexOf(ch) != -1) { stream.next(); return "bracket"; } else if (".,".indexOf(ch) != -1) { stream.next(); return "punctuation"; } else if (stream.match("end")) { return "keyword"; } for (var name in patterns) { if (patterns.hasOwnProperty(name)) { var pattern = patterns[name]; if ((pattern instanceof Array && pattern.some(function(p) { return stream.match(p); })) || stream.match(pattern)) return patternStyles[name]; } } if (/[+\-*\/^=<>&|]/.test(ch)) { stream.next(); return "operator"; } if (stream.match("define")) { return "def"; } else { stream.eatWhile(/[\w\-]/); // Keyword if (wordLookup[stream.current()]) { return styleLookup[stream.current()]; } else if (stream.current().match(symbol)) { return "variable"; } else { stream.next(); return "variable-2"; } } } function tokenComment(stream, state) { var maybeEnd = false, maybeNested = false, nestedCount = 0, ch; while ((ch = stream.next())) { if (ch == "/" && maybeEnd) { if (nestedCount > 0) { nestedCount--; } else { state.tokenize = tokenBase; break; } } else if (ch == "*" && maybeNested) { nestedCount++; } maybeEnd = (ch == "*"); maybeNested = (ch == "/"); } return "comment"; } function tokenString(quote, style) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !escaped) { state.tokenize = tokenBase; } return style; }; } // Interface return { startState: function() { return { tokenize: tokenBase, currentIndent: 0 }; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; }, blockCommentStart: "/*", blockCommentEnd: "*/" }; }); CodeMirror.defineMIME("text/x-dylan", "dylan"); }); application/library/codemirror/mode/dylan/index.html000064400000031350146731177160016727 0ustar00 CodeMirror: Dylan mode

    Dylan mode

    MIME types defined: text/x-dylan.

    application/library/codemirror/mode/sieve/index.html000064400000004437146731177160016741 0ustar00 CodeMirror: Sieve (RFC5228) mode

    Sieve (RFC5228) mode

    MIME types defined: application/sieve.

    application/library/codemirror/mode/sieve/sieve.js000064400000010275146731177160016412 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sieve", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words("if elsif else stop require"); var atoms = words("true false not"); var indentUnit = config.indentUnit; function tokenBase(stream, state) { var ch = stream.next(); if (ch == "/" && stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } if (ch === '#') { stream.skipToEnd(); return "comment"; } if (ch == "\"") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (ch == "(") { state._indent.push("("); // add virtual angel wings so that editor behaves... // ...more sane incase of broken brackets state._indent.push("{"); return null; } if (ch === "{") { state._indent.push("{"); return null; } if (ch == ")") { state._indent.pop(); state._indent.pop(); } if (ch === "}") { state._indent.pop(); return null; } if (ch == ",") return null; if (ch == ";") return null; if (/[{}\(\),;]/.test(ch)) return null; // 1*DIGIT "K" / "M" / "G" if (/\d/.test(ch)) { stream.eatWhile(/[\d]/); stream.eat(/[KkMmGg]/); return "number"; } // ":" (ALPHA / "_") *(ALPHA / DIGIT / "_") if (ch == ":") { stream.eatWhile(/[a-zA-Z_]/); stream.eatWhile(/[a-zA-Z0-9_]/); return "operator"; } stream.eatWhile(/\w/); var cur = stream.current(); // "text:" *(SP / HTAB) (hash-comment / CRLF) // *(multiline-literal / multiline-dotstart) // "." CRLF if ((cur == "text") && stream.eat(":")) { state.tokenize = tokenMultiLineString; return "string"; } if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (atoms.propertyIsEnumerable(cur)) return "atom"; return null; } function tokenMultiLineString(stream, state) { state._multiLineString = true; // the first line is special it may contain a comment if (!stream.sol()) { stream.eatSpace(); if (stream.peek() == "#") { stream.skipToEnd(); return "comment"; } stream.skipToEnd(); return "string"; } if ((stream.next() == ".") && (stream.eol())) { state._multiLineString = false; state.tokenize = tokenBase; } return "string"; } function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) break; escaped = !escaped && ch == "\\"; } if (!escaped) state.tokenize = tokenBase; return "string"; }; } return { startState: function(base) { return {tokenize: tokenBase, baseIndent: base || 0, _indent: []}; }, token: function(stream, state) { if (stream.eatSpace()) return null; return (state.tokenize || tokenBase)(stream, state);; }, indent: function(state, _textAfter) { var length = state._indent.length; if (_textAfter && (_textAfter[0] == "}")) length--; if (length <0) length = 0; return length * indentUnit; }, electricChars: "}" }; }); CodeMirror.defineMIME("application/sieve", "sieve"); }); application/library/codemirror/mode/index.html000064400000020011146731177160015610 0ustar00 CodeMirror: Language Modes

    Language modes

    This is a list of every mode in the distribution. Each mode lives in a subdirectory of the mode/ directory, and typically defines a single JavaScript file that implements the mode. Loading such file will make the language available to CodeMirror, through the mode option.

    application/library/codemirror/mode/nsis/nsis.js000064400000016720146731177160016115 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Author: Jan T. Sott (http://github.com/idleberg) (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../addon/mode/simple"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineSimpleMode("nsis",{ start:[ // Numbers {regex: /(?:[+-]?)(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\d+.?\d*)/, token: "number"}, // Strings { regex: /"(?:[^\\"]|\\.)*"?/, token: "string" }, { regex: /'(?:[^\\']|\\.)*'?/, token: "string" }, { regex: /`(?:[^\\`]|\\.)*`?/, token: "string" }, // Compile Time Commands {regex: /(?:\!(include|addincludedir|addplugindir|appendfile|cd|delfile|echo|error|execute|packhdr|finalize|getdllversion|system|tempfile|warning|verbose|define|undef|insertmacro|makensis|searchparse|searchreplace))\b/, token: "keyword"}, // Conditional Compilation {regex: /(?:\!(if(?:n?def)?|ifmacron?def|macro))\b/, token: "keyword", indent: true}, {regex: /(?:\!(else|endif|macroend))\b/, token: "keyword", dedent: true}, // Runtime Commands {regex: /\b(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetLabelAddress|GetTempFileName|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|IntCmp|IntCmpU|IntFmt|IntOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetPluginUnload|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegStr|WriteUninstaller|XPStyle)\b/, token: "keyword"}, {regex: /\b(?:Function|PageEx|Section(?:Group)?)\b/, token: "keyword", indent: true}, {regex: /\b(?:(Function|PageEx|Section(?:Group)?)End)\b/, token: "keyword", dedent: true}, // Command Options {regex: /\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\b/, token: "atom"}, {regex: /\b(?:admin|all|auto|both|bottom|bzip2|components|current|custom|directory|force|hide|highest|ifdiff|ifnewer|instfiles|lastused|leave|left|license|listonly|lzma|nevershow|none|normal|notset|right|show|silent|silentlog|textonly|top|try|un\.components|un\.custom|un\.directory|un\.instfiles|un\.license|uninstConfirm|user|Win10|Win7|Win8|WinVista|zlib)\b/, token: "builtin"}, // LogicLib.nsh {regex: /\$\{(?:And(?:If(?:Not)?|Unless)|Break|Case(?:Else)?|Continue|Default|Do(?:Until|While)?|Else(?:If(?:Not)?|Unless)?|End(?:If|Select|Switch)|Exit(?:Do|For|While)|For(?:Each)?|If(?:Cmd|Not(?:Then)?|Then)?|Loop(?:Until|While)?|Or(?:If(?:Not)?|Unless)|Select|Switch|Unless|While)\}/, token: "variable-2", indent: true}, // FileFunc.nsh {regex: /\$\{(?:BannerTrimPath|DirState|DriveSpace|Get(BaseName|Drives|ExeName|ExePath|FileAttributes|FileExt|FileName|FileVersion|Options|OptionsS|Parameters|Parent|Root|Size|Time)|Locate|RefreshShellIcons)\}/, token: "variable-2", dedent: true}, // Memento.nsh {regex: /\$\{(?:Memento(?:Section(?:Done|End|Restore|Save)?|UnselectedSection))\}/, token: "variable-2", dedent: true}, // TextFunc.nsh {regex: /\$\{(?:Config(?:Read|ReadS|Write|WriteS)|File(?:Join|ReadFromEnd|Recode)|Line(?:Find|Read|Sum)|Text(?:Compare|CompareS)|TrimNewLines)\}/, token: "variable-2", dedent: true}, // WinVer.nsh {regex: /\$\{(?:(?:At(?:Least|Most)|Is)(?:ServicePack|Win(?:7|8|10|95|98|200(?:0|3|8(?:R2)?)|ME|NT4|Vista|XP))|Is(?:NT|Server))\}/, token: "variable", dedent: true}, // WordFunc.nsh {regex: /\$\{(?:StrFilterS?|Version(?:Compare|Convert)|Word(?:AddS?|Find(?:(?:2|3)X)?S?|InsertS?|ReplaceS?))\}/, token: "variable-2", dedent: true}, // x64.nsh {regex: /\$\{(?:RunningX64)\}/, token: "variable", dedent: true}, {regex: /\$\{(?:Disable|Enable)X64FSRedirection\}/, token: "variable-2", dedent: true}, // Line Comment {regex: /(#|;).*/, token: "comment"}, // Block Comment {regex: /\/\*/, token: "comment", next: "comment"}, // Operator {regex: /[-+\/*=<>!]+/, token: "operator"}, // Variable {regex: /\$[\w]+/, token: "variable"}, // Constant {regex: /\${[\w]+}/,token: "variable-2"}, // Language String {regex: /\$\([\w]+\)/,token: "variable-3"} ], comment: [ {regex: /.*?\*\//, token: "comment", next: "start"}, {regex: /.*/, token: "comment"} ], meta: { electricInput: /^\s*((Function|PageEx|Section|Section(Group)?)End|(\!(endif|macroend))|\$\{(End(If|Unless|While)|Loop(Until)|Next)\})$/, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: ["#", ";"] } }); CodeMirror.defineMIME("text/x-nsis", "nsis"); }); application/library/codemirror/mode/nsis/index.html000064400000003344146731177160016576 0ustar00 CodeMirror: NSIS mode

    NSIS mode

    MIME types defined: text/x-nsis.

    application/library/codemirror/mode/vb/index.html000064400000006304146731177160016230 0ustar00 CodeMirror: VB.NET mode

    VB.NET mode

    
      

    MIME type defined: text/x-vb.

    application/library/codemirror/mode/vb/vb.js000064400000021106146731177160015175 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("vb", function(conf, parserConf) { var ERRORCLASS = 'error'; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); } var singleOperators = new RegExp("^[\\+\\-\\*/%&\\\\|\\^~<>!]"); var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]'); var doubleOperators = new RegExp("^((==)|(<>)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"); var doubleDelimiters = new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"); var tripleDelimiters = new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"); var identifiers = new RegExp("^[_A-Za-z][_A-Za-z0-9]*"); var openingKeywords = ['class','module', 'sub','enum','select','while','if','function', 'get','set','property', 'try']; var middleKeywords = ['else','elseif','case', 'catch']; var endKeywords = ['next','loop']; var operatorKeywords = ['and', 'or', 'not', 'xor', 'in']; var wordOperators = wordRegexp(operatorKeywords); var commonKeywords = ['as', 'dim', 'break', 'continue','optional', 'then', 'until', 'goto', 'byval','byref','new','handles','property', 'return', 'const','private', 'protected', 'friend', 'public', 'shared', 'static', 'true','false']; var commontypes = ['integer','string','double','decimal','boolean','short','char', 'float','single']; var keywords = wordRegexp(commonKeywords); var types = wordRegexp(commontypes); var stringPrefixes = '"'; var opening = wordRegexp(openingKeywords); var middle = wordRegexp(middleKeywords); var closing = wordRegexp(endKeywords); var doubleClosing = wordRegexp(['end']); var doOpening = wordRegexp(['do']); var indentInfo = null; CodeMirror.registerHelper("hintWords", "vb", openingKeywords.concat(middleKeywords).concat(endKeywords) .concat(operatorKeywords).concat(commonKeywords).concat(commontypes)); function indent(_stream, state) { state.currentIndent++; } function dedent(_stream, state) { state.currentIndent--; } // tokenizers function tokenBase(stream, state) { if (stream.eatSpace()) { return null; } var ch = stream.peek(); // Handle Comments if (ch === "'") { stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^((&H)|(&O))?[0-9\.a-f]/i, false)) { var floatLiteral = false; // Floats if (stream.match(/^\d*\.\d+F?/i)) { floatLiteral = true; } else if (stream.match(/^\d+\.\d*F?/)) { floatLiteral = true; } else if (stream.match(/^\.\d+F?/)) { floatLiteral = true; } if (floatLiteral) { // Float literals may be "imaginary" stream.eat(/J/i); return 'number'; } // Integers var intLiteral = false; // Hex if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } // Octal else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } // Decimal else if (stream.match(/^[1-9]\d*F?/)) { // Decimal literals may be "imaginary" stream.eat(/J/i); // TODO - Can you have imaginary longs? intLiteral = true; } // Zero by itself with no other piece of number. else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } if (intLiteral) { // Integer literals may be "long" stream.eat(/L/i); return 'number'; } } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } // Handle operators and Delimiters if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) { return null; } if (stream.match(doubleOperators) || stream.match(singleOperators) || stream.match(wordOperators)) { return 'operator'; } if (stream.match(singleDelimiters)) { return null; } if (stream.match(doOpening)) { indent(stream,state); state.doInCurrentLine = true; return 'keyword'; } if (stream.match(opening)) { if (! state.doInCurrentLine) indent(stream,state); else state.doInCurrentLine = false; return 'keyword'; } if (stream.match(middle)) { return 'keyword'; } if (stream.match(doubleClosing)) { dedent(stream,state); dedent(stream,state); return 'keyword'; } if (stream.match(closing)) { dedent(stream,state); return 'keyword'; } if (stream.match(types)) { return 'keyword'; } if (stream.match(keywords)) { return 'keyword'; } if (stream.match(identifiers)) { return 'variable'; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenStringFactory(delimiter) { var singleline = delimiter.length == 1; var OUTCLASS = 'string'; return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"]/); if (stream.match(delimiter)) { state.tokenize = tokenBase; return OUTCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) { return ERRORCLASS; } else { state.tokenize = tokenBase; } } return OUTCLASS; }; } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); // Handle '.' connected identifiers if (current === '.') { style = state.tokenize(stream, state); current = stream.current(); if (style === 'variable') { return 'variable'; } else { return ERRORCLASS; } } var delimiter_index = '[({'.indexOf(current); if (delimiter_index !== -1) { indent(stream, state ); } if (indentInfo === 'dedent') { if (dedent(stream, state)) { return ERRORCLASS; } } delimiter_index = '])}'.indexOf(current); if (delimiter_index !== -1) { if (dedent(stream, state)) { return ERRORCLASS; } } return style; } var external = { electricChars:"dDpPtTfFeE ", startState: function() { return { tokenize: tokenBase, lastToken: null, currentIndent: 0, nextLineIndent: 0, doInCurrentLine: false }; }, token: function(stream, state) { if (stream.sol()) { state.currentIndent += state.nextLineIndent; state.nextLineIndent = 0; state.doInCurrentLine = 0; } var style = tokenLexer(stream, state); state.lastToken = {style:style, content: stream.current()}; return style; }, indent: function(state, textAfter) { var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); if(state.currentIndent < 0) return 0; return state.currentIndent * conf.indentUnit; }, lineComment: "'" }; return external; }); CodeMirror.defineMIME("text/x-vb", "vb"); }); application/library/codemirror/mode/yaml/yaml.js000064400000007101146731177160016062 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("yaml", function() { var cons = ['true', 'false', 'on', 'off', 'yes', 'no']; var keywordRegex = new RegExp("\\b(("+cons.join(")|(")+"))$", 'i'); return { token: function(stream, state) { var ch = stream.peek(); var esc = state.escaped; state.escaped = false; /* comments */ if (ch == "#" && (stream.pos == 0 || /\s/.test(stream.string.charAt(stream.pos - 1)))) { stream.skipToEnd(); return "comment"; } if (stream.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/)) return "string"; if (state.literal && stream.indentation() > state.keyCol) { stream.skipToEnd(); return "string"; } else if (state.literal) { state.literal = false; } if (stream.sol()) { state.keyCol = 0; state.pair = false; state.pairStart = false; /* document start */ if(stream.match(/---/)) { return "def"; } /* document end */ if (stream.match(/\.\.\./)) { return "def"; } /* array list item */ if (stream.match(/\s*-\s+/)) { return 'meta'; } } /* inline pairs/lists */ if (stream.match(/^(\{|\}|\[|\])/)) { if (ch == '{') state.inlinePairs++; else if (ch == '}') state.inlinePairs--; else if (ch == '[') state.inlineList++; else state.inlineList--; return 'meta'; } /* list seperator */ if (state.inlineList > 0 && !esc && ch == ',') { stream.next(); return 'meta'; } /* pairs seperator */ if (state.inlinePairs > 0 && !esc && ch == ',') { state.keyCol = 0; state.pair = false; state.pairStart = false; stream.next(); return 'meta'; } /* start of value of a pair */ if (state.pairStart) { /* block literals */ if (stream.match(/^\s*(\||\>)\s*/)) { state.literal = true; return 'meta'; }; /* references */ if (stream.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)) { return 'variable-2'; } /* numbers */ if (state.inlinePairs == 0 && stream.match(/^\s*-?[0-9\.\,]+\s?$/)) { return 'number'; } if (state.inlinePairs > 0 && stream.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)) { return 'number'; } /* keywords */ if (stream.match(keywordRegex)) { return 'keyword'; } } /* pairs (associative arrays) -> key */ if (!state.pair && stream.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)) { state.pair = true; state.keyCol = stream.indentation(); return "atom"; } if (state.pair && stream.match(/^:\s*/)) { state.pairStart = true; return 'meta'; } /* nothing found, continue */ state.pairStart = false; state.escaped = (ch == '\\'); stream.next(); return null; }, startState: function() { return { pair: false, pairStart: false, keyCol: 0, inlinePairs: 0, inlineList: 0, literal: false, escaped: false }; } }; }); CodeMirror.defineMIME("text/x-yaml", "yaml"); }); application/library/codemirror/mode/yaml/index.html000064400000004062146731177160016562 0ustar00 CodeMirror: YAML mode

    YAML mode

    MIME types defined: text/x-yaml.

    application/library/codemirror/mode/markdown/test.js000064400000071736146731177160016776 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4}, "markdown"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } var modeHighlightFormatting = CodeMirror.getMode({tabSize: 4}, {name: "markdown", highlightFormatting: true}); function FT(name) { test.mode(name, modeHighlightFormatting, Array.prototype.slice.call(arguments, 1)); } var modeAtxNoSpace = CodeMirror.getMode({tabSize: 4}, {name: "markdown", allowAtxHeaderWithoutSpace: true}); function AtxNoSpaceTest(name) { test.mode(name, modeAtxNoSpace, Array.prototype.slice.call(arguments, 1)); } var modeFenced = CodeMirror.getMode({tabSize: 4}, {name: "markdown", fencedCodeBlocks: true}); function FencedTest(name) { test.mode(name, modeFenced, Array.prototype.slice.call(arguments, 1)); } var modeOverrideClasses = CodeMirror.getMode({tabsize: 4}, { name: "markdown", strikethrough: true, tokenTypeOverrides: { "header" : "override-header", "code" : "override-code", "quote" : "override-quote", "list1" : "override-list1", "list2" : "override-list2", "list3" : "override-list3", "hr" : "override-hr", "image" : "override-image", "imageAltText": "override-image-alt-text", "imageMarker": "override-image-marker", "linkInline" : "override-link-inline", "linkEmail" : "override-link-email", "linkText" : "override-link-text", "linkHref" : "override-link-href", "em" : "override-em", "strong" : "override-strong", "strikethrough" : "override-strikethrough" }}); function TokenTypeOverrideTest(name) { test.mode(name, modeOverrideClasses, Array.prototype.slice.call(arguments, 1)); } var modeFormattingOverride = CodeMirror.getMode({tabsize: 4}, { name: "markdown", highlightFormatting: true, tokenTypeOverrides: { "formatting" : "override-formatting" }}); function FormatTokenTypeOverrideTest(name) { test.mode(name, modeFormattingOverride, Array.prototype.slice.call(arguments, 1)); } FT("formatting_emAsterisk", "[em&formatting&formatting-em *][em foo][em&formatting&formatting-em *]"); FT("formatting_emUnderscore", "[em&formatting&formatting-em _][em foo][em&formatting&formatting-em _]"); FT("formatting_strongAsterisk", "[strong&formatting&formatting-strong **][strong foo][strong&formatting&formatting-strong **]"); FT("formatting_strongUnderscore", "[strong&formatting&formatting-strong __][strong foo][strong&formatting&formatting-strong __]"); FT("formatting_codeBackticks", "[comment&formatting&formatting-code `][comment foo][comment&formatting&formatting-code `]"); FT("formatting_doubleBackticks", "[comment&formatting&formatting-code ``][comment foo ` bar][comment&formatting&formatting-code ``]"); FT("formatting_atxHeader", "[header&header-1&formatting&formatting-header&formatting-header-1 # ][header&header-1 foo # bar ][header&header-1&formatting&formatting-header&formatting-header-1 #]"); FT("formatting_setextHeader", "foo", "[header&header-1&formatting&formatting-header&formatting-header-1 =]"); FT("formatting_blockquote", "[quote"e-1&formatting&formatting-quote&formatting-quote-1 > ][quote"e-1 foo]"); FT("formatting_list", "[variable-2&formatting&formatting-list&formatting-list-ul - ][variable-2 foo]"); FT("formatting_list", "[variable-2&formatting&formatting-list&formatting-list-ol 1. ][variable-2 foo]"); FT("formatting_link", "[link&formatting&formatting-link [][link foo][link&formatting&formatting-link ]]][string&formatting&formatting-link-string&url (][string&url http://example.com/][string&formatting&formatting-link-string&url )]"); FT("formatting_linkReference", "[link&formatting&formatting-link [][link foo][link&formatting&formatting-link ]]][string&formatting&formatting-link-string&url [][string&url bar][string&formatting&formatting-link-string&url ]]]", "[link&formatting&formatting-link [][link bar][link&formatting&formatting-link ]]:] [string&url http://example.com/]"); FT("formatting_linkWeb", "[link&formatting&formatting-link <][link http://example.com/][link&formatting&formatting-link >]"); FT("formatting_linkEmail", "[link&formatting&formatting-link <][link user@example.com][link&formatting&formatting-link >]"); FT("formatting_escape", "[formatting-escape \\*]"); FT("formatting_image", "[formatting&formatting-image&image&image-marker !][formatting&formatting-image&image&image-alt-text&link [[][image&image-alt-text&link alt text][formatting&formatting-image&image&image-alt-text&link ]]][formatting&formatting-link-string&string&url (][url&string http://link.to/image.jpg][formatting&formatting-link-string&string&url )]"); MT("plainText", "foo"); // Don't style single trailing space MT("trailingSpace1", "foo "); // Two or more trailing spaces should be styled with line break character MT("trailingSpace2", "foo[trailing-space-a ][trailing-space-new-line ]"); MT("trailingSpace3", "foo[trailing-space-a ][trailing-space-b ][trailing-space-new-line ]"); MT("trailingSpace4", "foo[trailing-space-a ][trailing-space-b ][trailing-space-a ][trailing-space-new-line ]"); // Code blocks using 4 spaces (regardless of CodeMirror.tabSize value) MT("codeBlocksUsing4Spaces", " [comment foo]"); // Code blocks using 4 spaces with internal indentation MT("codeBlocksUsing4SpacesIndentation", " [comment bar]", " [comment hello]", " [comment world]", " [comment foo]", "bar"); // Code blocks should end even after extra indented lines MT("codeBlocksWithTrailingIndentedLine", " [comment foo]", " [comment bar]", " [comment baz]", " ", "hello"); // Code blocks using 1 tab (regardless of CodeMirror.indentWithTabs value) MT("codeBlocksUsing1Tab", "\t[comment foo]"); // No code blocks directly after paragraph // http://spec.commonmark.org/0.19/#example-65 MT("noCodeBlocksAfterParagraph", "Foo", " Bar"); // Inline code using backticks MT("inlineCodeUsingBackticks", "foo [comment `bar`]"); // Block code using single backtick (shouldn't work) MT("blockCodeSingleBacktick", "[comment `]", "[comment foo]", "[comment `]"); // Unclosed backticks // Instead of simply marking as CODE, it would be nice to have an // incomplete flag for CODE, that is styled slightly different. MT("unclosedBackticks", "foo [comment `bar]"); // Per documentation: "To include a literal backtick character within a // code span, you can use multiple backticks as the opening and closing // delimiters" MT("doubleBackticks", "[comment ``foo ` bar``]"); // Tests based on Dingus // http://daringfireball.net/projects/markdown/dingus // // Multiple backticks within an inline code block MT("consecutiveBackticks", "[comment `foo```bar`]"); // Multiple backticks within an inline code block with a second code block MT("consecutiveBackticks", "[comment `foo```bar`] hello [comment `world`]"); // Unclosed with several different groups of backticks MT("unclosedBackticks", "[comment ``foo ``` bar` hello]"); // Closed with several different groups of backticks MT("closedBackticks", "[comment ``foo ``` bar` hello``] world"); // atx headers // http://daringfireball.net/projects/markdown/syntax#header MT("atxH1", "[header&header-1 # foo]"); MT("atxH2", "[header&header-2 ## foo]"); MT("atxH3", "[header&header-3 ### foo]"); MT("atxH4", "[header&header-4 #### foo]"); MT("atxH5", "[header&header-5 ##### foo]"); MT("atxH6", "[header&header-6 ###### foo]"); // http://spec.commonmark.org/0.19/#example-24 MT("noAtxH7", "####### foo"); // http://spec.commonmark.org/0.19/#example-25 MT("noAtxH1WithoutSpace", "#5 bolt"); // CommonMark requires a space after # but most parsers don't AtxNoSpaceTest("atxNoSpaceAllowed_H1NoSpace", "[header&header-1 #foo]"); AtxNoSpaceTest("atxNoSpaceAllowed_H4NoSpace", "[header&header-4 ####foo]"); AtxNoSpaceTest("atxNoSpaceAllowed_H1Space", "[header&header-1 # foo]"); // Inline styles should be parsed inside headers MT("atxH1inline", "[header&header-1 # foo ][header&header-1&em *bar*]"); // Setext headers - H1, H2 // Per documentation, "Any number of underlining =’s or -’s will work." // http://daringfireball.net/projects/markdown/syntax#header // Ideally, the text would be marked as `header` as well, but this is // not really feasible at the moment. So, instead, we're testing against // what works today, to avoid any regressions. // // Check if single underlining = works MT("setextH1", "foo", "[header&header-1 =]"); // Check if 3+ ='s work MT("setextH1", "foo", "[header&header-1 ===]"); // Check if single underlining - works MT("setextH2", "foo", "[header&header-2 -]"); // Check if 3+ -'s work MT("setextH2", "foo", "[header&header-2 ---]"); // http://spec.commonmark.org/0.19/#example-45 MT("setextH2AllowSpaces", "foo", " [header&header-2 ---- ]"); // http://spec.commonmark.org/0.19/#example-44 MT("noSetextAfterIndentedCodeBlock", " [comment foo]", "[hr ---]"); // http://spec.commonmark.org/0.19/#example-51 MT("noSetextAfterQuote", "[quote"e-1 > foo]", "[hr ---]"); MT("noSetextAfterList", "[variable-2 - foo]", "[hr ---]"); // Single-line blockquote with trailing space MT("blockquoteSpace", "[quote"e-1 > foo]"); // Single-line blockquote MT("blockquoteNoSpace", "[quote"e-1 >foo]"); // No blank line before blockquote MT("blockquoteNoBlankLine", "foo", "[quote"e-1 > bar]"); // Nested blockquote MT("blockquoteSpace", "[quote"e-1 > foo]", "[quote"e-1 >][quote"e-2 > foo]", "[quote"e-1 >][quote"e-2 >][quote"e-3 > foo]"); // Single-line blockquote followed by normal paragraph MT("blockquoteThenParagraph", "[quote"e-1 >foo]", "", "bar"); // Multi-line blockquote (lazy mode) MT("multiBlockquoteLazy", "[quote"e-1 >foo]", "[quote"e-1 bar]"); // Multi-line blockquote followed by normal paragraph (lazy mode) MT("multiBlockquoteLazyThenParagraph", "[quote"e-1 >foo]", "[quote"e-1 bar]", "", "hello"); // Multi-line blockquote (non-lazy mode) MT("multiBlockquote", "[quote"e-1 >foo]", "[quote"e-1 >bar]"); // Multi-line blockquote followed by normal paragraph (non-lazy mode) MT("multiBlockquoteThenParagraph", "[quote"e-1 >foo]", "[quote"e-1 >bar]", "", "hello"); // Header with leading space after continued blockquote (#3287, negative indentation) MT("headerAfterContinuedBlockquote", "[quote"e-1 > foo]", "[quote"e-1 bar]", "", " [header&header-1 # hello]"); // Check list types MT("listAsterisk", "foo", "bar", "", "[variable-2 * foo]", "[variable-2 * bar]"); MT("listPlus", "foo", "bar", "", "[variable-2 + foo]", "[variable-2 + bar]"); MT("listDash", "foo", "bar", "", "[variable-2 - foo]", "[variable-2 - bar]"); MT("listNumber", "foo", "bar", "", "[variable-2 1. foo]", "[variable-2 2. bar]"); // Lists require a preceding blank line (per Dingus) MT("listBogus", "foo", "1. bar", "2. hello"); // List after hr MT("listAfterHr", "[hr ---]", "[variable-2 - bar]"); // List after header MT("listAfterHeader", "[header&header-1 # foo]", "[variable-2 - bar]"); // hr after list MT("hrAfterList", "[variable-2 - foo]", "[hr -----]"); // Formatting in lists (*) MT("listAsteriskFormatting", "[variable-2 * ][variable-2&em *foo*][variable-2 bar]", "[variable-2 * ][variable-2&strong **foo**][variable-2 bar]", "[variable-2 * ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", "[variable-2 * ][variable-2&comment `foo`][variable-2 bar]"); // Formatting in lists (+) MT("listPlusFormatting", "[variable-2 + ][variable-2&em *foo*][variable-2 bar]", "[variable-2 + ][variable-2&strong **foo**][variable-2 bar]", "[variable-2 + ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", "[variable-2 + ][variable-2&comment `foo`][variable-2 bar]"); // Formatting in lists (-) MT("listDashFormatting", "[variable-2 - ][variable-2&em *foo*][variable-2 bar]", "[variable-2 - ][variable-2&strong **foo**][variable-2 bar]", "[variable-2 - ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", "[variable-2 - ][variable-2&comment `foo`][variable-2 bar]"); // Formatting in lists (1.) MT("listNumberFormatting", "[variable-2 1. ][variable-2&em *foo*][variable-2 bar]", "[variable-2 2. ][variable-2&strong **foo**][variable-2 bar]", "[variable-2 3. ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", "[variable-2 4. ][variable-2&comment `foo`][variable-2 bar]"); // Paragraph lists MT("listParagraph", "[variable-2 * foo]", "", "[variable-2 * bar]"); // Multi-paragraph lists // // 4 spaces MT("listMultiParagraph", "[variable-2 * foo]", "", "[variable-2 * bar]", "", " [variable-2 hello]"); // 4 spaces, extra blank lines (should still be list, per Dingus) MT("listMultiParagraphExtra", "[variable-2 * foo]", "", "[variable-2 * bar]", "", "", " [variable-2 hello]"); // 4 spaces, plus 1 space (should still be list, per Dingus) MT("listMultiParagraphExtraSpace", "[variable-2 * foo]", "", "[variable-2 * bar]", "", " [variable-2 hello]", "", " [variable-2 world]"); // 1 tab MT("listTab", "[variable-2 * foo]", "", "[variable-2 * bar]", "", "\t[variable-2 hello]"); // No indent MT("listNoIndent", "[variable-2 * foo]", "", "[variable-2 * bar]", "", "hello"); MT("listCommonMarkIndentationCode", "[variable-2 * Code blocks also affect]", " [variable-3 * The next level starts where the contents start.]", " [variable-3 * Anything less than that will keep the item on the same level.]", " [variable-3 * Each list item can indent the first level further and further.]", " [variable-3 * For the most part, this makes sense while writing a list.]", " [keyword * This means two items with same indentation can be different levels.]", " [keyword * Each level has an indent requirement that can change between items.]", " [keyword * A list item that meets this will be part of the next level.]", " [variable-3 * Otherwise, it will be part of the level where it does meet this.]", " [variable-2 * World]"); // Blockquote MT("blockquote", "[variable-2 * foo]", "", "[variable-2 * bar]", "", " [variable-2"e"e-1 > hello]"); // Code block MT("blockquoteCode", "[variable-2 * foo]", "", "[variable-2 * bar]", "", " [comment > hello]", "", " [variable-2 world]"); // Code block followed by text MT("blockquoteCodeText", "[variable-2 * foo]", "", " [variable-2 bar]", "", " [comment hello]", "", " [variable-2 world]"); // Nested list MT("listAsteriskNested", "[variable-2 * foo]", "", " [variable-3 * bar]"); MT("listPlusNested", "[variable-2 + foo]", "", " [variable-3 + bar]"); MT("listDashNested", "[variable-2 - foo]", "", " [variable-3 - bar]"); MT("listNumberNested", "[variable-2 1. foo]", "", " [variable-3 2. bar]"); MT("listMixed", "[variable-2 * foo]", "", " [variable-3 + bar]", "", " [keyword - hello]", "", " [variable-2 1. world]"); MT("listBlockquote", "[variable-2 * foo]", "", " [variable-3 + bar]", "", " [quote"e-1&variable-3 > hello]"); MT("listCode", "[variable-2 * foo]", "", " [variable-3 + bar]", "", " [comment hello]"); // Code with internal indentation MT("listCodeIndentation", "[variable-2 * foo]", "", " [comment bar]", " [comment hello]", " [comment world]", " [comment foo]", " [variable-2 bar]"); // List nesting edge cases MT("listNested", "[variable-2 * foo]", "", " [variable-3 * bar]", "", " [variable-3 hello]" ); MT("listNested", "[variable-2 * foo]", "", " [variable-3 * bar]", "", " [keyword * foo]" ); // Code followed by text MT("listCodeText", "[variable-2 * foo]", "", " [comment bar]", "", "hello"); // Following tests directly from official Markdown documentation // http://daringfireball.net/projects/markdown/syntax#hr MT("hrSpace", "[hr * * *]"); MT("hr", "[hr ***]"); MT("hrLong", "[hr *****]"); MT("hrSpaceDash", "[hr - - -]"); MT("hrDashLong", "[hr ---------------------------------------]"); //Images MT("Images", "[image&image-marker !][image&image-alt-text&link [[alt text]]][string&url (http://link.to/image.jpg)]") //Images with highlight alt text MT("imageEm", "[image&image-marker !][image&image-alt-text&link [[][image-alt-text&em&image&link *alt text*][image&image-alt-text&link ]]][string&url (http://link.to/image.jpg)]"); MT("imageStrong", "[image&image-marker !][image&image-alt-text&link [[][image-alt-text&strong&image&link **alt text**][image&image-alt-text&link ]]][string&url (http://link.to/image.jpg)]"); MT("imageEmStrong", "[image&image-marker !][image&image-alt-text&link [[][image-alt-text&image&strong&link **][image&image-alt-text&em&strong&link *alt text**][image&image-alt-text&em&link *][image&image-alt-text&link ]]][string&url (http://link.to/image.jpg)]"); // Inline link with title MT("linkTitle", "[link [[foo]]][string&url (http://example.com/ \"bar\")] hello"); // Inline link without title MT("linkNoTitle", "[link [[foo]]][string&url (http://example.com/)] bar"); // Inline link with image MT("linkImage", "[link [[][link&image&image-marker !][link&image&image-alt-text&link [[alt text]]][string&url (http://link.to/image.jpg)][link ]]][string&url (http://example.com/)] bar"); // Inline link with Em MT("linkEm", "[link [[][link&em *foo*][link ]]][string&url (http://example.com/)] bar"); // Inline link with Strong MT("linkStrong", "[link [[][link&strong **foo**][link ]]][string&url (http://example.com/)] bar"); // Inline link with EmStrong MT("linkEmStrong", "[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string&url (http://example.com/)] bar"); // Image with title MT("imageTitle", "[image&image-marker !][image&image-alt-text&link [[alt text]]][string&url (http://example.com/ \"bar\")] hello"); // Image without title MT("imageNoTitle", "[image&image-marker !][image&image-alt-text&link [[alt text]]][string&url (http://example.com/)] bar"); // Image with asterisks MT("imageAsterisks", "[image&image-marker !][image&image-alt-text&link [[ ][image&image-alt-text&em&link *alt text*][image&image-alt-text&link ]]][string&url (http://link.to/image.jpg)] bar"); // Not a link. Should be normal text due to square brackets being used // regularly in text, especially in quoted material, and no space is allowed // between square brackets and parentheses (per Dingus). MT("notALink", "[[foo]] (bar)"); // Reference-style links MT("linkReference", "[link [[foo]]][string&url [[bar]]] hello"); // Reference-style links with Em MT("linkReferenceEm", "[link [[][link&em *foo*][link ]]][string&url [[bar]]] hello"); // Reference-style links with Strong MT("linkReferenceStrong", "[link [[][link&strong **foo**][link ]]][string&url [[bar]]] hello"); // Reference-style links with EmStrong MT("linkReferenceEmStrong", "[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string&url [[bar]]] hello"); // Reference-style links with optional space separator (per documentation) // "You can optionally use a space to separate the sets of brackets" MT("linkReferenceSpace", "[link [[foo]]] [string&url [[bar]]] hello"); // Should only allow a single space ("...use *a* space...") MT("linkReferenceDoubleSpace", "[[foo]] [[bar]] hello"); // Reference-style links with implicit link name MT("linkImplicit", "[link [[foo]]][string&url [[]]] hello"); // @todo It would be nice if, at some point, the document was actually // checked to see if the referenced link exists // Link label, for reference-style links (taken from documentation) MT("labelNoTitle", "[link [[foo]]:] [string&url http://example.com/]"); MT("labelIndented", " [link [[foo]]:] [string&url http://example.com/]"); MT("labelSpaceTitle", "[link [[foo bar]]:] [string&url http://example.com/ \"hello\"]"); MT("labelDoubleTitle", "[link [[foo bar]]:] [string&url http://example.com/ \"hello\"] \"world\""); MT("labelTitleDoubleQuotes", "[link [[foo]]:] [string&url http://example.com/ \"bar\"]"); MT("labelTitleSingleQuotes", "[link [[foo]]:] [string&url http://example.com/ 'bar']"); MT("labelTitleParentheses", "[link [[foo]]:] [string&url http://example.com/ (bar)]"); MT("labelTitleInvalid", "[link [[foo]]:] [string&url http://example.com/] bar"); MT("labelLinkAngleBrackets", "[link [[foo]]:] [string&url \"bar\"]"); MT("labelTitleNextDoubleQuotes", "[link [[foo]]:] [string&url http://example.com/]", "[string \"bar\"] hello"); MT("labelTitleNextSingleQuotes", "[link [[foo]]:] [string&url http://example.com/]", "[string 'bar'] hello"); MT("labelTitleNextParentheses", "[link [[foo]]:] [string&url http://example.com/]", "[string (bar)] hello"); MT("labelTitleNextMixed", "[link [[foo]]:] [string&url http://example.com/]", "(bar\" hello"); MT("labelEscape", "[link [[foo \\]] ]]:] [string&url http://example.com/]"); MT("labelEscapeColon", "[link [[foo \\]]: bar]]:] [string&url http://example.com/]"); MT("labelEscapeEnd", "[[foo\\]]: http://example.com/"); MT("linkWeb", "[link ] foo"); MT("linkWebDouble", "[link ] foo [link ]"); MT("linkEmail", "[link ] foo"); MT("linkEmailDouble", "[link ] foo [link ]"); MT("emAsterisk", "[em *foo*] bar"); MT("emUnderscore", "[em _foo_] bar"); MT("emInWordAsterisk", "foo[em *bar*]hello"); MT("emInWordUnderscore", "foo[em _bar_]hello"); // Per documentation: "...surround an * or _ with spaces, it’ll be // treated as a literal asterisk or underscore." MT("emEscapedBySpaceIn", "foo [em _bar _ hello_] world"); MT("emEscapedBySpaceOut", "foo _ bar[em _hello_]world"); MT("emEscapedByNewline", "foo", "_ bar[em _hello_]world"); // Unclosed emphasis characters // Instead of simply marking as EM / STRONG, it would be nice to have an // incomplete flag for EM and STRONG, that is styled slightly different. MT("emIncompleteAsterisk", "foo [em *bar]"); MT("emIncompleteUnderscore", "foo [em _bar]"); MT("strongAsterisk", "[strong **foo**] bar"); MT("strongUnderscore", "[strong __foo__] bar"); MT("emStrongAsterisk", "[em *foo][em&strong **bar*][strong hello**] world"); MT("emStrongUnderscore", "[em _foo][em&strong __bar_][strong hello__] world"); // "...same character must be used to open and close an emphasis span."" MT("emStrongMixed", "[em _foo][em&strong **bar*hello__ world]"); MT("emStrongMixed", "[em *foo][em&strong __bar_hello** world]"); MT("linkWithNestedParens", "[link [[foo]]][string&url (bar(baz))]") // These characters should be escaped: // \ backslash // ` backtick // * asterisk // _ underscore // {} curly braces // [] square brackets // () parentheses // # hash mark // + plus sign // - minus sign (hyphen) // . dot // ! exclamation mark MT("escapeBacktick", "foo \\`bar\\`"); MT("doubleEscapeBacktick", "foo \\\\[comment `bar\\\\`]"); MT("escapeAsterisk", "foo \\*bar\\*"); MT("doubleEscapeAsterisk", "foo \\\\[em *bar\\\\*]"); MT("escapeUnderscore", "foo \\_bar\\_"); MT("doubleEscapeUnderscore", "foo \\\\[em _bar\\\\_]"); MT("escapeHash", "\\# foo"); MT("doubleEscapeHash", "\\\\# foo"); MT("escapeNewline", "\\", "[em *foo*]"); // Class override tests TokenTypeOverrideTest("overrideHeader1", "[override-header&override-header-1 # Foo]"); TokenTypeOverrideTest("overrideHeader2", "[override-header&override-header-2 ## Foo]"); TokenTypeOverrideTest("overrideHeader3", "[override-header&override-header-3 ### Foo]"); TokenTypeOverrideTest("overrideHeader4", "[override-header&override-header-4 #### Foo]"); TokenTypeOverrideTest("overrideHeader5", "[override-header&override-header-5 ##### Foo]"); TokenTypeOverrideTest("overrideHeader6", "[override-header&override-header-6 ###### Foo]"); TokenTypeOverrideTest("overrideCode", "[override-code `foo`]"); TokenTypeOverrideTest("overrideCodeBlock", "[override-code ```]", "[override-code foo]", "[override-code ```]"); TokenTypeOverrideTest("overrideQuote", "[override-quote&override-quote-1 > foo]", "[override-quote&override-quote-1 > bar]"); TokenTypeOverrideTest("overrideQuoteNested", "[override-quote&override-quote-1 > foo]", "[override-quote&override-quote-1 >][override-quote&override-quote-2 > bar]", "[override-quote&override-quote-1 >][override-quote&override-quote-2 >][override-quote&override-quote-3 > baz]"); TokenTypeOverrideTest("overrideLists", "[override-list1 - foo]", "", " [override-list2 + bar]", "", " [override-list3 * baz]", "", " [override-list1 1. qux]", "", " [override-list2 - quux]"); TokenTypeOverrideTest("overrideHr", "[override-hr * * *]"); TokenTypeOverrideTest("overrideImage", "[override-image&override-image-marker !][override-image&override-image-alt-text&link [[alt text]]][override-link-href&url (http://link.to/image.jpg)]"); TokenTypeOverrideTest("overrideLinkText", "[override-link-text [[foo]]][override-link-href&url (http://example.com)]"); TokenTypeOverrideTest("overrideLinkEmailAndInline", "[override-link-email <][override-link-inline foo@example.com>]"); TokenTypeOverrideTest("overrideEm", "[override-em *foo*]"); TokenTypeOverrideTest("overrideStrong", "[override-strong **foo**]"); TokenTypeOverrideTest("overrideStrikethrough", "[override-strikethrough ~~foo~~]"); FormatTokenTypeOverrideTest("overrideFormatting", "[override-formatting-escape \\*]"); // Tests to make sure GFM-specific things aren't getting through MT("taskList", "[variable-2 * [ ]] bar]"); MT("noFencedCodeBlocks", "~~~", "foo", "~~~"); FencedTest("fencedCodeBlocks", "[comment ```]", "[comment foo]", "[comment ```]", "bar"); FencedTest("fencedCodeBlocksMultipleChars", "[comment `````]", "[comment foo]", "[comment ```]", "[comment foo]", "[comment `````]", "bar"); FencedTest("fencedCodeBlocksTildes", "[comment ~~~]", "[comment foo]", "[comment ~~~]", "bar"); FencedTest("fencedCodeBlocksTildesMultipleChars", "[comment ~~~~~]", "[comment ~~~]", "[comment foo]", "[comment ~~~~~]", "bar"); FencedTest("fencedCodeBlocksMultipleChars", "[comment `````]", "[comment foo]", "[comment ```]", "[comment foo]", "[comment `````]", "bar"); FencedTest("fencedCodeBlocksMixed", "[comment ~~~]", "[comment ```]", "[comment foo]", "[comment ~~~]", "bar"); // Tests that require XML mode MT("xmlMode", "[tag&bracket <][tag div][tag&bracket >]", "*foo*", "[tag&bracket <][tag http://github.com][tag&bracket />]", "[tag&bracket ]", "[link ]"); MT("xmlModeWithMarkdownInside", "[tag&bracket <][tag div] [attribute markdown]=[string 1][tag&bracket >]", "[em *foo*]", "[link ]", "[tag ]", "[link ]", "[tag&bracket <][tag div][tag&bracket >]", "[tag&bracket ]"); })(); application/library/codemirror/mode/markdown/index.html000064400000025315146731177160017446 0ustar00 CodeMirror: Markdown mode

    Markdown mode

    You might want to use the Github-Flavored Markdown mode instead, which adds support for fenced code blocks and a few other things.

    Optionally depends on the XML mode for properly highlighted inline XML blocks.

    MIME types defined: text/x-markdown.

    Parsing/Highlighting Tests: normal, verbose.

    application/library/codemirror/mode/markdown/markdown.js000064400000062252146731177160017632 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../xml/xml"), require("../meta")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../xml/xml", "../meta"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) { var htmlMode = CodeMirror.getMode(cmCfg, "text/html"); var htmlModeMissing = htmlMode.name == "null" function getMode(name) { if (CodeMirror.findModeByName) { var found = CodeMirror.findModeByName(name); if (found) name = found.mime || found.mimes[0]; } var mode = CodeMirror.getMode(cmCfg, name); return mode.name == "null" ? null : mode; } // Should characters that affect highlighting be highlighted separate? // Does not include characters that will be output (such as `1.` and `-` for lists) if (modeCfg.highlightFormatting === undefined) modeCfg.highlightFormatting = false; // Maximum number of nested blockquotes. Set to 0 for infinite nesting. // Excess `>` will emit `error` token. if (modeCfg.maxBlockquoteDepth === undefined) modeCfg.maxBlockquoteDepth = 0; // Should underscores in words open/close em/strong? if (modeCfg.underscoresBreakWords === undefined) modeCfg.underscoresBreakWords = true; // Use `fencedCodeBlocks` to configure fenced code blocks. false to // disable, string to specify a precise regexp that the fence should // match, and true to allow three or more backticks or tildes (as // per CommonMark). // Turn on task lists? ("- [ ] " and "- [x] ") if (modeCfg.taskLists === undefined) modeCfg.taskLists = false; // Turn on strikethrough syntax if (modeCfg.strikethrough === undefined) modeCfg.strikethrough = false; // Allow token types to be overridden by user-provided token types. if (modeCfg.tokenTypeOverrides === undefined) modeCfg.tokenTypeOverrides = {}; var tokenTypes = { header: "header", code: "comment", quote: "quote", list1: "variable-2", list2: "variable-3", list3: "keyword", hr: "hr", image: "image", imageAltText: "image-alt-text", imageMarker: "image-marker", formatting: "formatting", linkInline: "link", linkEmail: "link", linkText: "link", linkHref: "string", em: "em", strong: "strong", strikethrough: "strikethrough" }; for (var tokenType in tokenTypes) { if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) { tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType]; } } var hrRE = /^([*\-_])(?:\s*\1){2,}\s*$/ , ulRE = /^[*\-+]\s+/ , olRE = /^[0-9]+([.)])\s+/ , taskListRE = /^\[(x| )\](?=\s)/ // Must follow ulRE or olRE , atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/ , setextHeaderRE = /^ *(?:\={1,}|-{1,})\s*$/ , textRE = /^[^#!\[\]*_\\<>` "'(~]+/ , fencedCodeRE = new RegExp("^(" + (modeCfg.fencedCodeBlocks === true ? "~~~+|```+" : modeCfg.fencedCodeBlocks) + ")[ \\t]*([\\w+#\-]*)"); function switchInline(stream, state, f) { state.f = state.inline = f; return f(stream, state); } function switchBlock(stream, state, f) { state.f = state.block = f; return f(stream, state); } function lineIsEmpty(line) { return !line || !/\S/.test(line.string) } // Blocks function blankLine(state) { // Reset linkTitle state state.linkTitle = false; // Reset EM state state.em = false; // Reset STRONG state state.strong = false; // Reset strikethrough state state.strikethrough = false; // Reset state.quote state.quote = 0; // Reset state.indentedCode state.indentedCode = false; if (htmlModeMissing && state.f == htmlBlock) { state.f = inlineNormal; state.block = blockNormal; } // Reset state.trailingSpace state.trailingSpace = 0; state.trailingSpaceNewLine = false; // Mark this line as blank state.prevLine = state.thisLine state.thisLine = null return null; } function blockNormal(stream, state) { var sol = stream.sol(); var prevLineIsList = state.list !== false, prevLineIsIndentedCode = state.indentedCode; state.indentedCode = false; if (prevLineIsList) { if (state.indentationDiff >= 0) { // Continued list if (state.indentationDiff < 4) { // Only adjust indentation if *not* a code block state.indentation -= state.indentationDiff; } state.list = null; } else if (state.indentation > 0) { state.list = null; } else { // No longer a list state.list = false; } } var match = null; if (state.indentationDiff >= 4) { stream.skipToEnd(); if (prevLineIsIndentedCode || lineIsEmpty(state.prevLine)) { state.indentation -= 4; state.indentedCode = true; return tokenTypes.code; } else { return null; } } else if (stream.eatSpace()) { return null; } else if ((match = stream.match(atxHeaderRE)) && match[1].length <= 6) { state.header = match[1].length; if (modeCfg.highlightFormatting) state.formatting = "header"; state.f = state.inline; return getType(state); } else if (!lineIsEmpty(state.prevLine) && !state.quote && !prevLineIsList && !prevLineIsIndentedCode && (match = stream.match(setextHeaderRE))) { state.header = match[0].charAt(0) == '=' ? 1 : 2; if (modeCfg.highlightFormatting) state.formatting = "header"; state.f = state.inline; return getType(state); } else if (stream.eat('>')) { state.quote = sol ? 1 : state.quote + 1; if (modeCfg.highlightFormatting) state.formatting = "quote"; stream.eatSpace(); return getType(state); } else if (stream.peek() === '[') { return switchInline(stream, state, footnoteLink); } else if (stream.match(hrRE, true)) { state.hr = true; return tokenTypes.hr; } else if ((lineIsEmpty(state.prevLine) || prevLineIsList) && (stream.match(ulRE, false) || stream.match(olRE, false))) { var listType = null; if (stream.match(ulRE, true)) { listType = 'ul'; } else { stream.match(olRE, true); listType = 'ol'; } state.indentation = stream.column() + stream.current().length; state.list = true; // While this list item's marker's indentation // is less than the deepest list item's content's indentation, // pop the deepest list item indentation off the stack. while (state.listStack && stream.column() < state.listStack[state.listStack.length - 1]) { state.listStack.pop(); } // Add this list item's content's indentation to the stack state.listStack.push(state.indentation); if (modeCfg.taskLists && stream.match(taskListRE, false)) { state.taskList = true; } state.f = state.inline; if (modeCfg.highlightFormatting) state.formatting = ["list", "list-" + listType]; return getType(state); } else if (modeCfg.fencedCodeBlocks && (match = stream.match(fencedCodeRE, true))) { state.fencedChars = match[1] // try switching mode state.localMode = getMode(match[2]); if (state.localMode) state.localState = CodeMirror.startState(state.localMode); state.f = state.block = local; if (modeCfg.highlightFormatting) state.formatting = "code-block"; state.code = -1 return getType(state); } return switchInline(stream, state, state.inline); } function htmlBlock(stream, state) { var style = htmlMode.token(stream, state.htmlState); if (!htmlModeMissing) { var inner = CodeMirror.innerMode(htmlMode, state.htmlState) if ((inner.mode.name == "xml" && inner.state.tagStart === null && (!inner.state.context && inner.state.tokenize.isInText)) || (state.md_inside && stream.current().indexOf(">") > -1)) { state.f = inlineNormal; state.block = blockNormal; state.htmlState = null; } } return style; } function local(stream, state) { if (state.fencedChars && stream.match(state.fencedChars, false)) { state.localMode = state.localState = null; state.f = state.block = leavingLocal; return null; } else if (state.localMode) { return state.localMode.token(stream, state.localState); } else { stream.skipToEnd(); return tokenTypes.code; } } function leavingLocal(stream, state) { stream.match(state.fencedChars); state.block = blockNormal; state.f = inlineNormal; state.fencedChars = null; if (modeCfg.highlightFormatting) state.formatting = "code-block"; state.code = 1 var returnType = getType(state); state.code = 0 return returnType; } // Inline function getType(state) { var styles = []; if (state.formatting) { styles.push(tokenTypes.formatting); if (typeof state.formatting === "string") state.formatting = [state.formatting]; for (var i = 0; i < state.formatting.length; i++) { styles.push(tokenTypes.formatting + "-" + state.formatting[i]); if (state.formatting[i] === "header") { styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.header); } // Add `formatting-quote` and `formatting-quote-#` for blockquotes // Add `error` instead if the maximum blockquote nesting depth is passed if (state.formatting[i] === "quote") { if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.quote); } else { styles.push("error"); } } } } if (state.taskOpen) { styles.push("meta"); return styles.length ? styles.join(' ') : null; } if (state.taskClosed) { styles.push("property"); return styles.length ? styles.join(' ') : null; } if (state.linkHref) { styles.push(tokenTypes.linkHref, "url"); } else { // Only apply inline styles to non-url text if (state.strong) { styles.push(tokenTypes.strong); } if (state.em) { styles.push(tokenTypes.em); } if (state.strikethrough) { styles.push(tokenTypes.strikethrough); } if (state.linkText) { styles.push(tokenTypes.linkText); } if (state.code) { styles.push(tokenTypes.code); } if (state.image) { styles.push(tokenTypes.image); } if (state.imageAltText) { styles.push(tokenTypes.imageAltText, "link"); } if (state.imageMarker) { styles.push(tokenTypes.imageMarker); } } if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + "-" + state.header); } if (state.quote) { styles.push(tokenTypes.quote); // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { styles.push(tokenTypes.quote + "-" + state.quote); } else { styles.push(tokenTypes.quote + "-" + modeCfg.maxBlockquoteDepth); } } if (state.list !== false) { var listMod = (state.listStack.length - 1) % 3; if (!listMod) { styles.push(tokenTypes.list1); } else if (listMod === 1) { styles.push(tokenTypes.list2); } else { styles.push(tokenTypes.list3); } } if (state.trailingSpaceNewLine) { styles.push("trailing-space-new-line"); } else if (state.trailingSpace) { styles.push("trailing-space-" + (state.trailingSpace % 2 ? "a" : "b")); } return styles.length ? styles.join(' ') : null; } function handleText(stream, state) { if (stream.match(textRE, true)) { return getType(state); } return undefined; } function inlineNormal(stream, state) { var style = state.text(stream, state); if (typeof style !== 'undefined') return style; if (state.list) { // List marker (*, +, -, 1., etc) state.list = null; return getType(state); } if (state.taskList) { var taskOpen = stream.match(taskListRE, true)[1] !== "x"; if (taskOpen) state.taskOpen = true; else state.taskClosed = true; if (modeCfg.highlightFormatting) state.formatting = "task"; state.taskList = false; return getType(state); } state.taskOpen = false; state.taskClosed = false; if (state.header && stream.match(/^#+$/, true)) { if (modeCfg.highlightFormatting) state.formatting = "header"; return getType(state); } // Get sol() value now, before character is consumed var sol = stream.sol(); var ch = stream.next(); // Matches link titles present on next line if (state.linkTitle) { state.linkTitle = false; var matchCh = ch; if (ch === '(') { matchCh = ')'; } matchCh = (matchCh+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); var regex = '^\\s*(?:[^' + matchCh + '\\\\]+|\\\\\\\\|\\\\.)' + matchCh; if (stream.match(new RegExp(regex), true)) { return tokenTypes.linkHref; } } // If this block is changed, it may need to be updated in GFM mode if (ch === '`') { var previousFormatting = state.formatting; if (modeCfg.highlightFormatting) state.formatting = "code"; stream.eatWhile('`'); var count = stream.current().length if (state.code == 0) { state.code = count return getType(state) } else if (count == state.code) { // Must be exact var t = getType(state) state.code = 0 return t } else { state.formatting = previousFormatting return getType(state) } } else if (state.code) { return getType(state); } if (ch === '\\') { stream.next(); if (modeCfg.highlightFormatting) { var type = getType(state); var formattingEscape = tokenTypes.formatting + "-escape"; return type ? type + " " + formattingEscape : formattingEscape; } } if (ch === '!' && stream.match(/\[[^\]]*\] ?(?:\(|\[)/, false)) { state.imageMarker = true; state.image = true; if (modeCfg.highlightFormatting) state.formatting = "image"; return getType(state); } if (ch === '[' && state.imageMarker) { state.imageMarker = false; state.imageAltText = true if (modeCfg.highlightFormatting) state.formatting = "image"; return getType(state); } if (ch === ']' && state.imageAltText) { if (modeCfg.highlightFormatting) state.formatting = "image"; var type = getType(state); state.imageAltText = false; state.image = false; state.inline = state.f = linkHref; return type; } if (ch === '[' && stream.match(/[^\]]*\](\(.*\)| ?\[.*?\])/, false) && !state.image) { state.linkText = true; if (modeCfg.highlightFormatting) state.formatting = "link"; return getType(state); } if (ch === ']' && state.linkText && stream.match(/\(.*?\)| ?\[.*?\]/, false)) { if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); state.linkText = false; state.inline = state.f = linkHref; return type; } if (ch === '<' && stream.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/, false)) { state.f = state.inline = linkInline; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type){ type += " "; } else { type = ""; } return type + tokenTypes.linkInline; } if (ch === '<' && stream.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/, false)) { state.f = state.inline = linkInline; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type){ type += " "; } else { type = ""; } return type + tokenTypes.linkEmail; } if (ch === '<' && stream.match(/^(!--|\w)/, false)) { var end = stream.string.indexOf(">", stream.pos); if (end != -1) { var atts = stream.string.substring(stream.start, end); if (/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(atts)) state.md_inside = true; } stream.backUp(1); state.htmlState = CodeMirror.startState(htmlMode); return switchBlock(stream, state, htmlBlock); } if (ch === '<' && stream.match(/^\/\w*?>/)) { state.md_inside = false; return "tag"; } var ignoreUnderscore = false; if (!modeCfg.underscoresBreakWords) { if (ch === '_' && stream.peek() !== '_' && stream.match(/(\w)/, false)) { var prevPos = stream.pos - 2; if (prevPos >= 0) { var prevCh = stream.string.charAt(prevPos); if (prevCh !== '_' && prevCh.match(/(\w)/, false)) { ignoreUnderscore = true; } } } } if (ch === '*' || (ch === '_' && !ignoreUnderscore)) { if (sol && stream.peek() === ' ') { // Do nothing, surrounded by newline and space } else if (state.strong === ch && stream.eat(ch)) { // Remove STRONG if (modeCfg.highlightFormatting) state.formatting = "strong"; var t = getType(state); state.strong = false; return t; } else if (!state.strong && stream.eat(ch)) { // Add STRONG state.strong = ch; if (modeCfg.highlightFormatting) state.formatting = "strong"; return getType(state); } else if (state.em === ch) { // Remove EM if (modeCfg.highlightFormatting) state.formatting = "em"; var t = getType(state); state.em = false; return t; } else if (!state.em) { // Add EM state.em = ch; if (modeCfg.highlightFormatting) state.formatting = "em"; return getType(state); } } else if (ch === ' ') { if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces if (stream.peek() === ' ') { // Surrounded by spaces, ignore return getType(state); } else { // Not surrounded by spaces, back up pointer stream.backUp(1); } } } if (modeCfg.strikethrough) { if (ch === '~' && stream.eatWhile(ch)) { if (state.strikethrough) {// Remove strikethrough if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; var t = getType(state); state.strikethrough = false; return t; } else if (stream.match(/^[^\s]/, false)) {// Add strikethrough state.strikethrough = true; if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; return getType(state); } } else if (ch === ' ') { if (stream.match(/^~~/, true)) { // Probably surrounded by space if (stream.peek() === ' ') { // Surrounded by spaces, ignore return getType(state); } else { // Not surrounded by spaces, back up pointer stream.backUp(2); } } } } if (ch === ' ') { if (stream.match(/ +$/, false)) { state.trailingSpace++; } else if (state.trailingSpace) { state.trailingSpaceNewLine = true; } } return getType(state); } function linkInline(stream, state) { var ch = stream.next(); if (ch === ">") { state.f = state.inline = inlineNormal; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type){ type += " "; } else { type = ""; } return type + tokenTypes.linkInline; } stream.match(/^[^>]+/, true); return tokenTypes.linkInline; } function linkHref(stream, state) { // Check if space, and return NULL if so (to avoid marking the space) if(stream.eatSpace()){ return null; } var ch = stream.next(); if (ch === '(' || ch === '[') { state.f = state.inline = getLinkHrefInside(ch === "(" ? ")" : "]", 0); if (modeCfg.highlightFormatting) state.formatting = "link-string"; state.linkHref = true; return getType(state); } return 'error'; } var linkRE = { ")": /^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/, "]": /^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\\]]|\\.)*\])*?(?=\])/ } function getLinkHrefInside(endChar) { return function(stream, state) { var ch = stream.next(); if (ch === endChar) { state.f = state.inline = inlineNormal; if (modeCfg.highlightFormatting) state.formatting = "link-string"; var returnState = getType(state); state.linkHref = false; return returnState; } stream.match(linkRE[endChar]) state.linkHref = true; return getType(state); }; } function footnoteLink(stream, state) { if (stream.match(/^([^\]\\]|\\.)*\]:/, false)) { state.f = footnoteLinkInside; stream.next(); // Consume [ if (modeCfg.highlightFormatting) state.formatting = "link"; state.linkText = true; return getType(state); } return switchInline(stream, state, inlineNormal); } function footnoteLinkInside(stream, state) { if (stream.match(/^\]:/, true)) { state.f = state.inline = footnoteUrl; if (modeCfg.highlightFormatting) state.formatting = "link"; var returnType = getType(state); state.linkText = false; return returnType; } stream.match(/^([^\]\\]|\\.)+/, true); return tokenTypes.linkText; } function footnoteUrl(stream, state) { // Check if space, and return NULL if so (to avoid marking the space) if(stream.eatSpace()){ return null; } // Match URL stream.match(/^[^\s]+/, true); // Check for link title if (stream.peek() === undefined) { // End of line, set flag to check next line state.linkTitle = true; } else { // More content on line, check if link title stream.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/, true); } state.f = state.inline = inlineNormal; return tokenTypes.linkHref + " url"; } var mode = { startState: function() { return { f: blockNormal, prevLine: null, thisLine: null, block: blockNormal, htmlState: null, indentation: 0, inline: inlineNormal, text: handleText, formatting: false, linkText: false, linkHref: false, linkTitle: false, code: 0, em: false, strong: false, header: 0, hr: false, taskList: false, list: false, listStack: [], quote: 0, trailingSpace: 0, trailingSpaceNewLine: false, strikethrough: false, fencedChars: null }; }, copyState: function(s) { return { f: s.f, prevLine: s.prevLine, thisLine: s.thisLine, block: s.block, htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState), indentation: s.indentation, localMode: s.localMode, localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null, inline: s.inline, text: s.text, formatting: false, linkTitle: s.linkTitle, code: s.code, em: s.em, strong: s.strong, strikethrough: s.strikethrough, header: s.header, hr: s.hr, taskList: s.taskList, list: s.list, listStack: s.listStack.slice(0), quote: s.quote, indentedCode: s.indentedCode, trailingSpace: s.trailingSpace, trailingSpaceNewLine: s.trailingSpaceNewLine, md_inside: s.md_inside, fencedChars: s.fencedChars }; }, token: function(stream, state) { // Reset state.formatting state.formatting = false; if (stream != state.thisLine) { var forceBlankLine = state.header || state.hr; // Reset state.header and state.hr state.header = 0; state.hr = false; if (stream.match(/^\s*$/, true) || forceBlankLine) { blankLine(state); if (!forceBlankLine) return null state.prevLine = null } state.prevLine = state.thisLine state.thisLine = stream // Reset state.taskList state.taskList = false; // Reset state.trailingSpace state.trailingSpace = 0; state.trailingSpaceNewLine = false; state.f = state.block; var indentation = stream.match(/^\s*/, true)[0].replace(/\t/g, ' ').length; state.indentationDiff = Math.min(indentation - state.indentation, 4); state.indentation = state.indentation + state.indentationDiff; if (indentation > 0) return null; } return state.f(stream, state); }, innerMode: function(state) { if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode}; if (state.localState) return {state: state.localState, mode: state.localMode}; return {state: state, mode: mode}; }, blankLine: blankLine, getType: getType, fold: "markdown" }; return mode; }, "xml"); CodeMirror.defineMIME("text/x-markdown", "markdown"); }); application/library/codemirror/mode/ruby/test.js000064400000000726146731177160016124 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "ruby"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("divide_equal_operator", "[variable bar] [operator /=] [variable foo]"); MT("divide_equal_operator_no_spacing", "[variable foo][operator /=][number 42]"); })(); application/library/codemirror/mode/ruby/ruby.js000064400000024331146731177160016124 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ruby", function(config) { function wordObj(words) { var o = {}; for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; return o; } var keywords = wordObj([ "alias", "and", "BEGIN", "begin", "break", "case", "class", "def", "defined?", "do", "else", "elsif", "END", "end", "ensure", "false", "for", "if", "in", "module", "next", "not", "or", "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless", "until", "when", "while", "yield", "nil", "raise", "throw", "catch", "fail", "loop", "callcc", "caller", "lambda", "proc", "public", "protected", "private", "require", "load", "require_relative", "extend", "autoload", "__END__", "__FILE__", "__LINE__", "__dir__" ]); var indentWords = wordObj(["def", "class", "case", "for", "while", "until", "module", "then", "catch", "loop", "proc", "begin"]); var dedentWords = wordObj(["end", "until"]); var matching = {"[": "]", "{": "}", "(": ")"}; var curPunc; function chain(newtok, stream, state) { state.tokenize.push(newtok); return newtok(stream, state); } function tokenBase(stream, state) { if (stream.sol() && stream.match("=begin") && stream.eol()) { state.tokenize.push(readBlockComment); return "comment"; } if (stream.eatSpace()) return null; var ch = stream.next(), m; if (ch == "`" || ch == "'" || ch == '"') { return chain(readQuoted(ch, "string", ch == '"' || ch == "`"), stream, state); } else if (ch == "/") { var currentIndex = stream.current().length; if (stream.skipTo("/")) { var search_till = stream.current().length; stream.backUp(stream.current().length - currentIndex); var balance = 0; // balance brackets while (stream.current().length < search_till) { var chchr = stream.next(); if (chchr == "(") balance += 1; else if (chchr == ")") balance -= 1; if (balance < 0) break; } stream.backUp(stream.current().length - currentIndex); if (balance == 0) return chain(readQuoted(ch, "string-2", true), stream, state); } return "operator"; } else if (ch == "%") { var style = "string", embed = true; if (stream.eat("s")) style = "atom"; else if (stream.eat(/[WQ]/)) style = "string"; else if (stream.eat(/[r]/)) style = "string-2"; else if (stream.eat(/[wxq]/)) { style = "string"; embed = false; } var delim = stream.eat(/[^\w\s=]/); if (!delim) return "operator"; if (matching.propertyIsEnumerable(delim)) delim = matching[delim]; return chain(readQuoted(delim, style, embed, true), stream, state); } else if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (ch == "<" && (m = stream.match(/^<-?[\`\"\']?([a-zA-Z_?]\w*)[\`\"\']?(?:;|$)/))) { return chain(readHereDoc(m[1]), stream, state); } else if (ch == "0") { if (stream.eat("x")) stream.eatWhile(/[\da-fA-F]/); else if (stream.eat("b")) stream.eatWhile(/[01]/); else stream.eatWhile(/[0-7]/); return "number"; } else if (/\d/.test(ch)) { stream.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/); return "number"; } else if (ch == "?") { while (stream.match(/^\\[CM]-/)) {} if (stream.eat("\\")) stream.eatWhile(/\w/); else stream.next(); return "string"; } else if (ch == ":") { if (stream.eat("'")) return chain(readQuoted("'", "atom", false), stream, state); if (stream.eat('"')) return chain(readQuoted('"', "atom", true), stream, state); // :> :>> :< :<< are valid symbols if (stream.eat(/[\<\>]/)) { stream.eat(/[\<\>]/); return "atom"; } // :+ :- :/ :* :| :& :! are valid symbols if (stream.eat(/[\+\-\*\/\&\|\:\!]/)) { return "atom"; } // Symbols can't start by a digit if (stream.eat(/[a-zA-Z$@_\xa1-\uffff]/)) { stream.eatWhile(/[\w$\xa1-\uffff]/); // Only one ? ! = is allowed and only as the last character stream.eat(/[\?\!\=]/); return "atom"; } return "operator"; } else if (ch == "@" && stream.match(/^@?[a-zA-Z_\xa1-\uffff]/)) { stream.eat("@"); stream.eatWhile(/[\w\xa1-\uffff]/); return "variable-2"; } else if (ch == "$") { if (stream.eat(/[a-zA-Z_]/)) { stream.eatWhile(/[\w]/); } else if (stream.eat(/\d/)) { stream.eat(/\d/); } else { stream.next(); // Must be a special global like $: or $! } return "variable-3"; } else if (/[a-zA-Z_\xa1-\uffff]/.test(ch)) { stream.eatWhile(/[\w\xa1-\uffff]/); stream.eat(/[\?\!]/); if (stream.eat(":")) return "atom"; return "ident"; } else if (ch == "|" && (state.varList || state.lastTok == "{" || state.lastTok == "do")) { curPunc = "|"; return null; } else if (/[\(\)\[\]{}\\;]/.test(ch)) { curPunc = ch; return null; } else if (ch == "-" && stream.eat(">")) { return "arrow"; } else if (/[=+\-\/*:\.^%<>~|]/.test(ch)) { var more = stream.eatWhile(/[=+\-\/*:\.^%<>~|]/); if (ch == "." && !more) curPunc = "."; return "operator"; } else { return null; } } function tokenBaseUntilBrace(depth) { if (!depth) depth = 1; return function(stream, state) { if (stream.peek() == "}") { if (depth == 1) { state.tokenize.pop(); return state.tokenize[state.tokenize.length-1](stream, state); } else { state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth - 1); } } else if (stream.peek() == "{") { state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth + 1); } return tokenBase(stream, state); }; } function tokenBaseOnce() { var alreadyCalled = false; return function(stream, state) { if (alreadyCalled) { state.tokenize.pop(); return state.tokenize[state.tokenize.length-1](stream, state); } alreadyCalled = true; return tokenBase(stream, state); }; } function readQuoted(quote, style, embed, unescaped) { return function(stream, state) { var escaped = false, ch; if (state.context.type === 'read-quoted-paused') { state.context = state.context.prev; stream.eat("}"); } while ((ch = stream.next()) != null) { if (ch == quote && (unescaped || !escaped)) { state.tokenize.pop(); break; } if (embed && ch == "#" && !escaped) { if (stream.eat("{")) { if (quote == "}") { state.context = {prev: state.context, type: 'read-quoted-paused'}; } state.tokenize.push(tokenBaseUntilBrace()); break; } else if (/[@\$]/.test(stream.peek())) { state.tokenize.push(tokenBaseOnce()); break; } } escaped = !escaped && ch == "\\"; } return style; }; } function readHereDoc(phrase) { return function(stream, state) { if (stream.match(phrase)) state.tokenize.pop(); else stream.skipToEnd(); return "string"; }; } function readBlockComment(stream, state) { if (stream.sol() && stream.match("=end") && stream.eol()) state.tokenize.pop(); stream.skipToEnd(); return "comment"; } return { startState: function() { return {tokenize: [tokenBase], indented: 0, context: {type: "top", indented: -config.indentUnit}, continuedLine: false, lastTok: null, varList: false}; }, token: function(stream, state) { curPunc = null; if (stream.sol()) state.indented = stream.indentation(); var style = state.tokenize[state.tokenize.length-1](stream, state), kwtype; var thisTok = curPunc; if (style == "ident") { var word = stream.current(); style = state.lastTok == "." ? "property" : keywords.propertyIsEnumerable(stream.current()) ? "keyword" : /^[A-Z]/.test(word) ? "tag" : (state.lastTok == "def" || state.lastTok == "class" || state.varList) ? "def" : "variable"; if (style == "keyword") { thisTok = word; if (indentWords.propertyIsEnumerable(word)) kwtype = "indent"; else if (dedentWords.propertyIsEnumerable(word)) kwtype = "dedent"; else if ((word == "if" || word == "unless") && stream.column() == stream.indentation()) kwtype = "indent"; else if (word == "do" && state.context.indented < state.indented) kwtype = "indent"; } } if (curPunc || (style && style != "comment")) state.lastTok = thisTok; if (curPunc == "|") state.varList = !state.varList; if (kwtype == "indent" || /[\(\[\{]/.test(curPunc)) state.context = {prev: state.context, type: curPunc || style, indented: state.indented}; else if ((kwtype == "dedent" || /[\)\]\}]/.test(curPunc)) && state.context.prev) state.context = state.context.prev; if (stream.eol()) state.continuedLine = (curPunc == "\\" || style == "operator"); return style; }, indent: function(state, textAfter) { if (state.tokenize[state.tokenize.length-1] != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0); var ct = state.context; var closing = ct.type == matching[firstChar] || ct.type == "keyword" && /^(?:end|until|else|elsif|when|rescue)\b/.test(textAfter); return ct.indented + (closing ? 0 : config.indentUnit) + (state.continuedLine ? config.indentUnit : 0); }, electricInput: /^\s*(?:end|rescue|\})$/, lineComment: "#" }; }); CodeMirror.defineMIME("text/x-ruby", "ruby"); }); application/library/codemirror/mode/ruby/index.html000064400000013165146731177160016605 0ustar00 CodeMirror: Ruby mode

    Ruby mode

    MIME types defined: text/x-ruby.

    Development of the CodeMirror Ruby mode was kindly sponsored by Ubalo.

    application/library/codemirror/mode/protobuf/index.html000064400000003220146731177160017453 0ustar00 CodeMirror: ProtoBuf mode

    ProtoBuf mode

    MIME types defined: text/x-protobuf.

    application/library/codemirror/mode/protobuf/protobuf.js000064400000004101146731177160017653 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); }; var keywordArray = [ "package", "message", "import", "syntax", "required", "optional", "repeated", "reserved", "default", "extensions", "packed", "bool", "bytes", "double", "enum", "float", "string", "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64" ]; var keywords = wordRegexp(keywordArray); CodeMirror.registerHelper("hintWords", "protobuf", keywordArray); var identifiers = new RegExp("^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*"); function tokenBase(stream) { // whitespaces if (stream.eatSpace()) return null; // Handle one line Comments if (stream.match("//")) { stream.skipToEnd(); return "comment"; } // Handle Number Literals if (stream.match(/^[0-9\.+-]/, false)) { if (stream.match(/^[+-]?0x[0-9a-fA-F]+/)) return "number"; if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)) return "number"; if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/)) return "number"; } // Handle Strings if (stream.match(/^"([^"]|(""))*"/)) { return "string"; } if (stream.match(/^'([^']|(''))*'/)) { return "string"; } // Handle words if (stream.match(keywords)) { return "keyword"; } if (stream.match(identifiers)) { return "variable"; } ; // Handle non-detected items stream.next(); return null; }; CodeMirror.defineMode("protobuf", function() { return {token: tokenBase}; }); CodeMirror.defineMIME("text/x-protobuf", "protobuf"); }); application/library/codemirror/mode/rpm/changes/index.html000064400000004204146731177160020024 0ustar00 CodeMirror: RPM changes mode

    RPM changes mode

    MIME types defined: text/x-rpm-changes.

    application/library/codemirror/mode/rpm/rpm.js000064400000007277146731177160015570 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("rpm-changes", function() { var headerSeperator = /^-+$/; var headerLine = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ?\d{1,2} \d{2}:\d{2}(:\d{2})? [A-Z]{3,4} \d{4} - /; var simpleEmail = /^[\w+.-]+@[\w.-]+/; return { token: function(stream) { if (stream.sol()) { if (stream.match(headerSeperator)) { return 'tag'; } if (stream.match(headerLine)) { return 'tag'; } } if (stream.match(simpleEmail)) { return 'string'; } stream.next(); return null; } }; }); CodeMirror.defineMIME("text/x-rpm-changes", "rpm-changes"); // Quick and dirty spec file highlighting CodeMirror.defineMode("rpm-spec", function() { var arch = /^(i386|i586|i686|x86_64|ppc64le|ppc64|ppc|ia64|s390x|s390|sparc64|sparcv9|sparc|noarch|alphaev6|alpha|hppa|mipsel)/; var preamble = /^[a-zA-Z0-9()]+:/; var section = /^%(debug_package|package|description|prep|build|install|files|clean|changelog|preinstall|preun|postinstall|postun|pretrans|posttrans|pre|post|triggerin|triggerun|verifyscript|check|triggerpostun|triggerprein|trigger)/; var control_flow_complex = /^%(ifnarch|ifarch|if)/; // rpm control flow macros var control_flow_simple = /^%(else|endif)/; // rpm control flow macros var operators = /^(\!|\?|\<\=|\<|\>\=|\>|\=\=|\&\&|\|\|)/; // operators in control flow macros return { startState: function () { return { controlFlow: false, macroParameters: false, section: false }; }, token: function (stream, state) { var ch = stream.peek(); if (ch == "#") { stream.skipToEnd(); return "comment"; } if (stream.sol()) { if (stream.match(preamble)) { return "header"; } if (stream.match(section)) { return "atom"; } } if (stream.match(/^\$\w+/)) { return "def"; } // Variables like '$RPM_BUILD_ROOT' if (stream.match(/^\$\{\w+\}/)) { return "def"; } // Variables like '${RPM_BUILD_ROOT}' if (stream.match(control_flow_simple)) { return "keyword"; } if (stream.match(control_flow_complex)) { state.controlFlow = true; return "keyword"; } if (state.controlFlow) { if (stream.match(operators)) { return "operator"; } if (stream.match(/^(\d+)/)) { return "number"; } if (stream.eol()) { state.controlFlow = false; } } if (stream.match(arch)) { if (stream.eol()) { state.controlFlow = false; } return "number"; } // Macros like '%make_install' or '%attr(0775,root,root)' if (stream.match(/^%[\w]+/)) { if (stream.match(/^\(/)) { state.macroParameters = true; } return "keyword"; } if (state.macroParameters) { if (stream.match(/^\d+/)) { return "number";} if (stream.match(/^\)/)) { state.macroParameters = false; return "keyword"; } } // Macros like '%{defined fedora}' if (stream.match(/^%\{\??[\w \-\:\!]+\}/)) { if (stream.eol()) { state.controlFlow = false; } return "def"; } //TODO: Include bash script sub-parser (CodeMirror supports that) stream.next(); return null; } }; }); CodeMirror.defineMIME("text/x-rpm-spec", "rpm-spec"); }); application/library/codemirror/mode/rpm/index.html000064400000011017146731177160016414 0ustar00 CodeMirror: RPM changes mode

    RPM changes mode

    RPM spec mode

    MIME types defined: text/x-rpm-spec, text/x-rpm-changes.

    application/library/codemirror/mode/asn.1/asn.1.js000064400000017067146731177160016032 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("asn.1", function(config, parserConfig) { var indentUnit = config.indentUnit, keywords = parserConfig.keywords || {}, cmipVerbs = parserConfig.cmipVerbs || {}, compareTypes = parserConfig.compareTypes || {}, status = parserConfig.status || {}, tags = parserConfig.tags || {}, storage = parserConfig.storage || {}, modifier = parserConfig.modifier || {}, accessTypes = parserConfig.accessTypes|| {}, multiLineStrings = parserConfig.multiLineStrings, indentStatements = parserConfig.indentStatements !== false; var isOperatorChar = /[\|\^]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]\(\){}:=,;]/.test(ch)) { curPunc = ch; return "punctuation"; } if (ch == "-"){ if (stream.eat("-")) { stream.skipToEnd(); return "comment"; } } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\-]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (cmipVerbs.propertyIsEnumerable(cur)) return "variable cmipVerbs"; if (compareTypes.propertyIsEnumerable(cur)) return "atom compareTypes"; if (status.propertyIsEnumerable(cur)) return "comment status"; if (tags.propertyIsEnumerable(cur)) return "variable-3 tags"; if (storage.propertyIsEnumerable(cur)) return "builtin storage"; if (modifier.propertyIsEnumerable(cur)) return "string-2 modifier"; if (accessTypes.propertyIsEnumerable(cur)) return "atom accessTypes"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped){ var afterNext = stream.peek(); //look if the character if the quote is like the B in '10100010'B if (afterNext){ afterNext = afterNext.toLowerCase(); if(afterNext == "b" || afterNext == "h" || afterNext == "o") stream.next(); } end = true; break; } escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } //Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement"){ popContext(state); } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement"))) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, electricChars: "{}", lineComment: "--", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } CodeMirror.defineMIME("text/x-ttcn-asn", { name: "asn.1", keywords: words("DEFINITIONS OBJECTS IF DERIVED INFORMATION ACTION" + " REPLY ANY NAMED CHARACTERIZED BEHAVIOUR REGISTERED" + " WITH AS IDENTIFIED CONSTRAINED BY PRESENT BEGIN" + " IMPORTS FROM UNITS SYNTAX MIN-ACCESS MAX-ACCESS" + " MINACCESS MAXACCESS REVISION STATUS DESCRIPTION" + " SEQUENCE SET COMPONENTS OF CHOICE DistinguishedName" + " ENUMERATED SIZE MODULE END INDEX AUGMENTS EXTENSIBILITY" + " IMPLIED EXPORTS"), cmipVerbs: words("ACTIONS ADD GET NOTIFICATIONS REPLACE REMOVE"), compareTypes: words("OPTIONAL DEFAULT MANAGED MODULE-TYPE MODULE_IDENTITY" + " MODULE-COMPLIANCE OBJECT-TYPE OBJECT-IDENTITY" + " OBJECT-COMPLIANCE MODE CONFIRMED CONDITIONAL" + " SUBORDINATE SUPERIOR CLASS TRUE FALSE NULL" + " TEXTUAL-CONVENTION"), status: words("current deprecated mandatory obsolete"), tags: words("APPLICATION AUTOMATIC EXPLICIT IMPLICIT PRIVATE TAGS" + " UNIVERSAL"), storage: words("BOOLEAN INTEGER OBJECT IDENTIFIER BIT OCTET STRING" + " UTCTime InterfaceIndex IANAifType CMIP-Attribute" + " REAL PACKAGE PACKAGES IpAddress PhysAddress" + " NetworkAddress BITS BMPString TimeStamp TimeTicks" + " TruthValue RowStatus DisplayString GeneralString" + " GraphicString IA5String NumericString" + " PrintableString SnmpAdminAtring TeletexString" + " UTF8String VideotexString VisibleString StringStore" + " ISO646String T61String UniversalString Unsigned32" + " Integer32 Gauge Gauge32 Counter Counter32 Counter64"), modifier: words("ATTRIBUTE ATTRIBUTES MANDATORY-GROUP MANDATORY-GROUPS" + " GROUP GROUPS ELEMENTS EQUALITY ORDERING SUBSTRINGS" + " DEFINED"), accessTypes: words("not-accessible accessible-for-notify read-only" + " read-create read-write"), multiLineStrings: true }); }); application/library/codemirror/mode/asn.1/index.html000064400000004256146731177160016545 0ustar00 CodeMirror: ASN.1 mode

    ASN.1 example


    Language: Abstract Syntax Notation One (ASN.1)

    MIME types defined: text/x-ttcn-asn


    The development of this mode has been sponsored by Ericsson .

    Coded by Asmelash Tsegay Gebretsadkan

    application/library/codemirror/mode/cypher/cypher.js000064400000014205146731177160016745 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // By the Neo4j Team and contributors. // https://github.com/neo4j-contrib/CodeMirror (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var wordRegexp = function(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); }; CodeMirror.defineMode("cypher", function(config) { var tokenBase = function(stream/*, state*/) { var ch = stream.next(); if (ch === "\"" || ch === "'") { stream.match(/.+?["']/); return "string"; } if (/[{}\(\),\.;\[\]]/.test(ch)) { curPunc = ch; return "node"; } else if (ch === "/" && stream.eat("/")) { stream.skipToEnd(); return "comment"; } else if (operatorChars.test(ch)) { stream.eatWhile(operatorChars); return null; } else { stream.eatWhile(/[_\w\d]/); if (stream.eat(":")) { stream.eatWhile(/[\w\d_\-]/); return "atom"; } var word = stream.current(); if (funcs.test(word)) return "builtin"; if (preds.test(word)) return "def"; if (keywords.test(word)) return "keyword"; return "variable"; } }; var pushContext = function(state, type, col) { return state.context = { prev: state.context, indent: state.indent, col: col, type: type }; }; var popContext = function(state) { state.indent = state.context.indent; return state.context = state.context.prev; }; var indentUnit = config.indentUnit; var curPunc; var funcs = wordRegexp(["abs", "acos", "allShortestPaths", "asin", "atan", "atan2", "avg", "ceil", "coalesce", "collect", "cos", "cot", "count", "degrees", "e", "endnode", "exp", "extract", "filter", "floor", "haversin", "head", "id", "keys", "labels", "last", "left", "length", "log", "log10", "lower", "ltrim", "max", "min", "node", "nodes", "percentileCont", "percentileDisc", "pi", "radians", "rand", "range", "reduce", "rel", "relationship", "relationships", "replace", "reverse", "right", "round", "rtrim", "shortestPath", "sign", "sin", "size", "split", "sqrt", "startnode", "stdev", "stdevp", "str", "substring", "sum", "tail", "tan", "timestamp", "toFloat", "toInt", "toString", "trim", "type", "upper"]); var preds = wordRegexp(["all", "and", "any", "contains", "exists", "has", "in", "none", "not", "or", "single", "xor"]); var keywords = wordRegexp(["as", "asc", "ascending", "assert", "by", "case", "commit", "constraint", "create", "csv", "cypher", "delete", "desc", "descending", "detach", "distinct", "drop", "else", "end", "ends", "explain", "false", "fieldterminator", "foreach", "from", "headers", "in", "index", "is", "join", "limit", "load", "match", "merge", "null", "on", "optional", "order", "periodic", "profile", "remove", "return", "scan", "set", "skip", "start", "starts", "then", "true", "union", "unique", "unwind", "using", "when", "where", "with"]); var operatorChars = /[*+\-<>=&|~%^]/; return { startState: function(/*base*/) { return { tokenize: tokenBase, context: null, indent: 0, col: 0 }; }, token: function(stream, state) { if (stream.sol()) { if (state.context && (state.context.align == null)) { state.context.align = false; } state.indent = stream.indentation(); } if (stream.eatSpace()) { return null; } var style = state.tokenize(stream, state); if (style !== "comment" && state.context && (state.context.align == null) && state.context.type !== "pattern") { state.context.align = true; } if (curPunc === "(") { pushContext(state, ")", stream.column()); } else if (curPunc === "[") { pushContext(state, "]", stream.column()); } else if (curPunc === "{") { pushContext(state, "}", stream.column()); } else if (/[\]\}\)]/.test(curPunc)) { while (state.context && state.context.type === "pattern") { popContext(state); } if (state.context && curPunc === state.context.type) { popContext(state); } } else if (curPunc === "." && state.context && state.context.type === "pattern") { popContext(state); } else if (/atom|string|variable/.test(style) && state.context) { if (/[\}\]]/.test(state.context.type)) { pushContext(state, "pattern", stream.column()); } else if (state.context.type === "pattern" && !state.context.align) { state.context.align = true; state.context.col = stream.column(); } } return style; }, indent: function(state, textAfter) { var firstChar = textAfter && textAfter.charAt(0); var context = state.context; if (/[\]\}]/.test(firstChar)) { while (context && context.type === "pattern") { context = context.prev; } } var closing = context && firstChar === context.type; if (!context) return 0; if (context.type === "keywords") return CodeMirror.commands.newlineAndIndent; if (context.align) return context.col + (closing ? 0 : 1); return context.indent + (closing ? 0 : indentUnit); } }; }); CodeMirror.modeExtensions["cypher"] = { autoFormatLineBreaks: function(text) { var i, lines, reProcessedPortion; var lines = text.split("\n"); var reProcessedPortion = /\s+\b(return|where|order by|match|with|skip|limit|create|delete|set)\b\s/g; for (var i = 0; i < lines.length; i++) lines[i] = lines[i].replace(reProcessedPortion, " \n$1 ").trim(); return lines.join("\n"); } }; CodeMirror.defineMIME("application/x-cypher-query", "cypher"); }); application/library/codemirror/mode/cypher/index.html000064400000003564146731177160017120 0ustar00 CodeMirror: Cypher Mode for CodeMirror

    Cypher Mode for CodeMirror

    MIME types defined: application/x-cypher-query

    application/library/codemirror/mode/apl/apl.js000064400000011200146731177160015501 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("apl", function() { var builtInOps = { ".": "innerProduct", "\\": "scan", "/": "reduce", "⌿": "reduce1Axis", "⍀": "scan1Axis", "¨": "each", "⍣": "power" }; var builtInFuncs = { "+": ["conjugate", "add"], "−": ["negate", "subtract"], "×": ["signOf", "multiply"], "÷": ["reciprocal", "divide"], "⌈": ["ceiling", "greaterOf"], "⌊": ["floor", "lesserOf"], "∣": ["absolute", "residue"], "⍳": ["indexGenerate", "indexOf"], "?": ["roll", "deal"], "⋆": ["exponentiate", "toThePowerOf"], "⍟": ["naturalLog", "logToTheBase"], "○": ["piTimes", "circularFuncs"], "!": ["factorial", "binomial"], "⌹": ["matrixInverse", "matrixDivide"], "<": [null, "lessThan"], "≤": [null, "lessThanOrEqual"], "=": [null, "equals"], ">": [null, "greaterThan"], "≥": [null, "greaterThanOrEqual"], "≠": [null, "notEqual"], "≡": ["depth", "match"], "≢": [null, "notMatch"], "∈": ["enlist", "membership"], "⍷": [null, "find"], "∪": ["unique", "union"], "∩": [null, "intersection"], "∼": ["not", "without"], "∨": [null, "or"], "∧": [null, "and"], "⍱": [null, "nor"], "⍲": [null, "nand"], "⍴": ["shapeOf", "reshape"], ",": ["ravel", "catenate"], "⍪": [null, "firstAxisCatenate"], "⌽": ["reverse", "rotate"], "⊖": ["axis1Reverse", "axis1Rotate"], "⍉": ["transpose", null], "↑": ["first", "take"], "↓": [null, "drop"], "⊂": ["enclose", "partitionWithAxis"], "⊃": ["diclose", "pick"], "⌷": [null, "index"], "⍋": ["gradeUp", null], "⍒": ["gradeDown", null], "⊤": ["encode", null], "⊥": ["decode", null], "⍕": ["format", "formatByExample"], "⍎": ["execute", null], "⊣": ["stop", "left"], "⊢": ["pass", "right"] }; var isOperator = /[\.\/⌿⍀¨⍣]/; var isNiladic = /⍬/; var isFunction = /[\+−×÷⌈⌊∣⍳\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/; var isArrow = /←/; var isComment = /[⍝#].*$/; var stringEater = function(type) { var prev; prev = false; return function(c) { prev = c; if (c === type) { return prev === "\\"; } return true; }; }; return { startState: function() { return { prev: false, func: false, op: false, string: false, escape: false }; }, token: function(stream, state) { var ch, funcName; if (stream.eatSpace()) { return null; } ch = stream.next(); if (ch === '"' || ch === "'") { stream.eatWhile(stringEater(ch)); stream.next(); state.prev = true; return "string"; } if (/[\[{\(]/.test(ch)) { state.prev = false; return null; } if (/[\]}\)]/.test(ch)) { state.prev = true; return null; } if (isNiladic.test(ch)) { state.prev = false; return "niladic"; } if (/[¯\d]/.test(ch)) { if (state.func) { state.func = false; state.prev = false; } else { state.prev = true; } stream.eatWhile(/[\w\.]/); return "number"; } if (isOperator.test(ch)) { return "operator apl-" + builtInOps[ch]; } if (isArrow.test(ch)) { return "apl-arrow"; } if (isFunction.test(ch)) { funcName = "apl-"; if (builtInFuncs[ch] != null) { if (state.prev) { funcName += builtInFuncs[ch][1]; } else { funcName += builtInFuncs[ch][0]; } } state.func = true; state.prev = false; return "function " + funcName; } if (isComment.test(ch)) { stream.skipToEnd(); return "comment"; } if (ch === "∘" && stream.peek() === ".") { stream.next(); return "function jot-dot"; } stream.eatWhile(/[\w\$_]/); state.prev = true; return "keyword"; } }; }); CodeMirror.defineMIME("text/apl", "apl"); }); application/library/codemirror/mode/apl/index.html000064400000004203146731177160016371 0ustar00 CodeMirror: APL mode

    APL mode

    Simple mode that tries to handle APL as well as it can.

    It attempts to label functions/operators based upon monadic/dyadic usage (but this is far from fully fleshed out). This means there are meaningful classnames so hover states can have popups etc.

    MIME types defined: text/apl (APL code)

    application/library/codemirror/mode/dockerfile/index.html000064400000004333146731177160017730 0ustar00 CodeMirror: Dockerfile mode

    Dockerfile mode

    Dockerfile syntax highlighting for CodeMirror. Depends on the simplemode addon.

    MIME types defined: text/x-dockerfile

    application/library/codemirror/mode/dockerfile/dockerfile.js000064400000004255146731177160020403 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../addon/mode/simple"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; // Collect all Dockerfile directives var instructions = ["from", "maintainer", "run", "cmd", "expose", "env", "add", "copy", "entrypoint", "volume", "user", "workdir", "onbuild"], instructionRegex = "(" + instructions.join('|') + ")", instructionOnlyLine = new RegExp(instructionRegex + "\\s*$", "i"), instructionWithArguments = new RegExp(instructionRegex + "(\\s+)", "i"); CodeMirror.defineSimpleMode("dockerfile", { start: [ // Block comment: This is a line starting with a comment { regex: /#.*$/, token: "comment" }, // Highlight an instruction without any arguments (for convenience) { regex: instructionOnlyLine, token: "variable-2" }, // Highlight an instruction followed by arguments { regex: instructionWithArguments, token: ["variable-2", null], next: "arguments" }, { regex: /./, token: null } ], arguments: [ { // Line comment without instruction arguments is an error regex: /#.*$/, token: "error", next: "start" }, { regex: /[^#]+\\$/, token: null }, { // Match everything except for the inline comment regex: /[^#]+/, token: null, next: "start" }, { regex: /$/, token: null, next: "start" }, // Fail safe return to start { token: null, next: "start" } ], meta: { lineComment: "#" } }); CodeMirror.defineMIME("text/x-dockerfile", "dockerfile"); }); application/library/codemirror/mode/properties/properties.js000064400000004173146731177160020554 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("properties", function() { return { token: function(stream, state) { var sol = stream.sol() || state.afterSection; var eol = stream.eol(); state.afterSection = false; if (sol) { if (state.nextMultiline) { state.inMultiline = true; state.nextMultiline = false; } else { state.position = "def"; } } if (eol && ! state.nextMultiline) { state.inMultiline = false; state.position = "def"; } if (sol) { while(stream.eatSpace()) {} } var ch = stream.next(); if (sol && (ch === "#" || ch === "!" || ch === ";")) { state.position = "comment"; stream.skipToEnd(); return "comment"; } else if (sol && ch === "[") { state.afterSection = true; stream.skipTo("]"); stream.eat("]"); return "header"; } else if (ch === "=" || ch === ":") { state.position = "quote"; return null; } else if (ch === "\\" && state.position === "quote") { if (stream.eol()) { // end of line? // Multiline value state.nextMultiline = true; } } return state.position; }, startState: function() { return { position : "def", // Current position, "def", "quote" or "comment" nextMultiline : false, // Is the next line multiline value inMultiline : false, // Is the current line a multiline value afterSection : false // Did we just open a section }; } }; }); CodeMirror.defineMIME("text/x-properties", "properties"); CodeMirror.defineMIME("text/x-ini", "properties"); }); application/library/codemirror/mode/properties/index.html000064400000003023146731177160020010 0ustar00 CodeMirror: Properties files mode

    Properties files mode

    MIME types defined: text/x-properties, text/x-ini.

    application/library/codemirror/mode/crystal/crystal.js000064400000026112146731177160017323 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("crystal", function(config) { function wordRegExp(words, end) { return new RegExp((end ? "" : "^") + "(?:" + words.join("|") + ")" + (end ? "$" : "\\b")); } function chain(tokenize, stream, state) { state.tokenize.push(tokenize); return tokenize(stream, state); } var operators = /^(?:[-+/%|&^]|\*\*?|[<>]{2})/; var conditionalOperators = /^(?:[=!]~|===|<=>|[<>=!]=?|[|&]{2}|~)/; var indexingOperators = /^(?:\[\][?=]?)/; var anotherOperators = /^(?:\.(?:\.{2})?|->|[?:])/; var idents = /^[a-z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/; var types = /^[A-Z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/; var keywords = wordRegExp([ "abstract", "alias", "as", "asm", "begin", "break", "case", "class", "def", "do", "else", "elsif", "end", "ensure", "enum", "extend", "for", "fun", "if", "ifdef", "include", "instance_sizeof", "lib", "macro", "module", "next", "of", "out", "pointerof", "private", "protected", "rescue", "return", "require", "sizeof", "struct", "super", "then", "type", "typeof", "union", "unless", "until", "when", "while", "with", "yield", "__DIR__", "__FILE__", "__LINE__" ]); var atomWords = wordRegExp(["true", "false", "nil", "self"]); var indentKeywordsArray = [ "def", "fun", "macro", "class", "module", "struct", "lib", "enum", "union", "if", "unless", "case", "while", "until", "begin", "then", "do", "for", "ifdef" ]; var indentKeywords = wordRegExp(indentKeywordsArray); var dedentKeywordsArray = [ "end", "else", "elsif", "rescue", "ensure" ]; var dedentKeywords = wordRegExp(dedentKeywordsArray); var dedentPunctualsArray = ["\\)", "\\}", "\\]"]; var dedentPunctuals = new RegExp("^(?:" + dedentPunctualsArray.join("|") + ")$"); var nextTokenizer = { "def": tokenFollowIdent, "fun": tokenFollowIdent, "macro": tokenMacroDef, "class": tokenFollowType, "module": tokenFollowType, "struct": tokenFollowType, "lib": tokenFollowType, "enum": tokenFollowType, "union": tokenFollowType }; var matching = {"[": "]", "{": "}", "(": ")", "<": ">"}; function tokenBase(stream, state) { if (stream.eatSpace()) { return null; } // Macros if (state.lastToken != "\\" && stream.match("{%", false)) { return chain(tokenMacro("%", "%"), stream, state); } if (state.lastToken != "\\" && stream.match("{{", false)) { return chain(tokenMacro("{", "}"), stream, state); } // Comments if (stream.peek() == "#") { stream.skipToEnd(); return "comment"; } // Variables and keywords var matched; if (stream.match(idents)) { stream.eat(/[?!]/); matched = stream.current(); if (stream.eat(":")) { return "atom"; } else if (state.lastToken == ".") { return "property"; } else if (keywords.test(matched)) { if (state.lastToken != "abstract" && indentKeywords.test(matched)) { if (!(matched == "fun" && state.blocks.indexOf("lib") >= 0)) { state.blocks.push(matched); state.currentIndent += 1; } } else if (dedentKeywords.test(matched)) { state.blocks.pop(); state.currentIndent -= 1; } if (nextTokenizer.hasOwnProperty(matched)) { state.tokenize.push(nextTokenizer[matched]); } return "keyword"; } else if (atomWords.test(matched)) { return "atom"; } return "variable"; } // Class variables and instance variables // or attributes if (stream.eat("@")) { if (stream.peek() == "[") { return chain(tokenNest("[", "]", "meta"), stream, state); } stream.eat("@"); stream.match(idents) || stream.match(types); return "variable-2"; } // Global variables if (stream.eat("$")) { stream.eat(/[0-9]+|\?/) || stream.match(idents) || stream.match(types); return "variable-3"; } // Constants and types if (stream.match(types)) { return "tag"; } // Symbols or ':' operator if (stream.eat(":")) { if (stream.eat("\"")) { return chain(tokenQuote("\"", "atom", false), stream, state); } else if (stream.match(idents) || stream.match(types) || stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators)) { return "atom"; } stream.eat(":"); return "operator"; } // Strings if (stream.eat("\"")) { return chain(tokenQuote("\"", "string", true), stream, state); } // Strings or regexps or macro variables or '%' operator if (stream.peek() == "%") { var style = "string"; var embed = true; var delim; if (stream.match("%r")) { // Regexps style = "string-2"; delim = stream.next(); } else if (stream.match("%w")) { embed = false; delim = stream.next(); } else { if(delim = stream.match(/^%([^\w\s=])/)) { delim = delim[1]; } else if (stream.match(/^%[a-zA-Z0-9_\u009F-\uFFFF]*/)) { // Macro variables return "meta"; } else { // '%' operator return "operator"; } } if (matching.hasOwnProperty(delim)) { delim = matching[delim]; } return chain(tokenQuote(delim, style, embed), stream, state); } // Characters if (stream.eat("'")) { stream.match(/^(?:[^']|\\(?:[befnrtv0'"]|[0-7]{3}|u(?:[0-9a-fA-F]{4}|\{[0-9a-fA-F]{1,6}\})))/); stream.eat("'"); return "atom"; } // Numbers if (stream.eat("0")) { if (stream.eat("x")) { stream.match(/^[0-9a-fA-F]+/); } else if (stream.eat("o")) { stream.match(/^[0-7]+/); } else if (stream.eat("b")) { stream.match(/^[01]+/); } return "number"; } if (stream.eat(/\d/)) { stream.match(/^\d*(?:\.\d+)?(?:[eE][+-]?\d+)?/); return "number"; } // Operators if (stream.match(operators)) { stream.eat("="); // Operators can follow assign symbol. return "operator"; } if (stream.match(conditionalOperators) || stream.match(anotherOperators)) { return "operator"; } // Parens and braces if (matched = stream.match(/[({[]/, false)) { matched = matched[0]; return chain(tokenNest(matched, matching[matched], null), stream, state); } // Escapes if (stream.eat("\\")) { stream.next(); return "meta"; } stream.next(); return null; } function tokenNest(begin, end, style, started) { return function (stream, state) { if (!started && stream.match(begin)) { state.tokenize[state.tokenize.length - 1] = tokenNest(begin, end, style, true); state.currentIndent += 1; return style; } var nextStyle = tokenBase(stream, state); if (stream.current() === end) { state.tokenize.pop(); state.currentIndent -= 1; nextStyle = style; } return nextStyle; }; } function tokenMacro(begin, end, started) { return function (stream, state) { if (!started && stream.match("{" + begin)) { state.currentIndent += 1; state.tokenize[state.tokenize.length - 1] = tokenMacro(begin, end, true); return "meta"; } if (stream.match(end + "}")) { state.currentIndent -= 1; state.tokenize.pop(); return "meta"; } return tokenBase(stream, state); }; } function tokenMacroDef(stream, state) { if (stream.eatSpace()) { return null; } var matched; if (matched = stream.match(idents)) { if (matched == "def") { return "keyword"; } stream.eat(/[?!]/); } state.tokenize.pop(); return "def"; } function tokenFollowIdent(stream, state) { if (stream.eatSpace()) { return null; } if (stream.match(idents)) { stream.eat(/[!?]/); } else { stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators); } state.tokenize.pop(); return "def"; } function tokenFollowType(stream, state) { if (stream.eatSpace()) { return null; } stream.match(types); state.tokenize.pop(); return "def"; } function tokenQuote(end, style, embed) { return function (stream, state) { var escaped = false; while (stream.peek()) { if (!escaped) { if (stream.match("{%", false)) { state.tokenize.push(tokenMacro("%", "%")); return style; } if (stream.match("{{", false)) { state.tokenize.push(tokenMacro("{", "}")); return style; } if (embed && stream.match("#{", false)) { state.tokenize.push(tokenNest("#{", "}", "meta")); return style; } var ch = stream.next(); if (ch == end) { state.tokenize.pop(); return style; } escaped = ch == "\\"; } else { stream.next(); escaped = false; } } return style; }; } return { startState: function () { return { tokenize: [tokenBase], currentIndent: 0, lastToken: null, blocks: [] }; }, token: function (stream, state) { var style = state.tokenize[state.tokenize.length - 1](stream, state); var token = stream.current(); if (style && style != "comment") { state.lastToken = token; } return style; }, indent: function (state, textAfter) { textAfter = textAfter.replace(/^\s*(?:\{%)?\s*|\s*(?:%\})?\s*$/g, ""); if (dedentKeywords.test(textAfter) || dedentPunctuals.test(textAfter)) { return config.indentUnit * (state.currentIndent - 1); } return config.indentUnit * state.currentIndent; }, fold: "indent", electricInput: wordRegExp(dedentPunctualsArray.concat(dedentKeywordsArray), true), lineComment: '#' }; }); CodeMirror.defineMIME("text/x-crystal", "crystal"); }); application/library/codemirror/mode/crystal/index.html000064400000005147146731177160017306 0ustar00 CodeMirror: Crystal mode

    Crystal mode

    MIME types defined: text/x-crystal.

    application/library/codemirror/mode/php/php.js000064400000043460146731177160015544 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../clike/clike")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../clike/clike"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function keywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } // Helper for phpString function matchSequence(list, end, escapes) { if (list.length == 0) return phpString(end); return function (stream, state) { var patterns = list[0]; for (var i = 0; i < patterns.length; i++) if (stream.match(patterns[i][0])) { state.tokenize = matchSequence(list.slice(1), end); return patterns[i][1]; } state.tokenize = phpString(end, escapes); return "string"; }; } function phpString(closing, escapes) { return function(stream, state) { return phpString_(stream, state, closing, escapes); }; } function phpString_(stream, state, closing, escapes) { // "Complex" syntax if (escapes !== false && stream.match("${", false) || stream.match("{$", false)) { state.tokenize = null; return "string"; } // Simple syntax if (escapes !== false && stream.match(/^\$[a-zA-Z_][a-zA-Z0-9_]*/)) { // After the variable name there may appear array or object operator. if (stream.match("[", false)) { // Match array operator state.tokenize = matchSequence([ [["[", null]], [[/\d[\w\.]*/, "number"], [/\$[a-zA-Z_][a-zA-Z0-9_]*/, "variable-2"], [/[\w\$]+/, "variable"]], [["]", null]] ], closing, escapes); } if (stream.match(/\-\>\w/, false)) { // Match object operator state.tokenize = matchSequence([ [["->", null]], [[/[\w]+/, "variable"]] ], closing, escapes); } return "variable-2"; } var escaped = false; // Normal string while (!stream.eol() && (escaped || escapes === false || (!stream.match("{$", false) && !stream.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/, false)))) { if (!escaped && stream.match(closing)) { state.tokenize = null; state.tokStack.pop(); state.tokStack.pop(); break; } escaped = stream.next() == "\\" && !escaped; } return "string"; } var phpKeywords = "abstract and array as break case catch class clone const continue declare default " + "do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final " + "for foreach function global goto if implements interface instanceof namespace " + "new or private protected public static switch throw trait try use var while xor " + "die echo empty exit eval include include_once isset list require require_once return " + "print unset __halt_compiler self static parent yield insteadof finally"; var phpAtoms = "true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__"; var phpBuiltin = "func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count"; CodeMirror.registerHelper("hintWords", "php", [phpKeywords, phpAtoms, phpBuiltin].join(" ").split(" ")); CodeMirror.registerHelper("wordChars", "php", /[\w$]/); var phpConfig = { name: "clike", helperType: "php", keywords: keywords(phpKeywords), blockKeywords: keywords("catch do else elseif for foreach if switch try while finally"), defKeywords: keywords("class function interface namespace trait"), atoms: keywords(phpAtoms), builtin: keywords(phpBuiltin), multiLineStrings: true, hooks: { "$": function(stream) { stream.eatWhile(/[\w\$_]/); return "variable-2"; }, "<": function(stream, state) { var before; if (before = stream.match(/<<\s*/)) { var quoted = stream.eat(/['"]/); stream.eatWhile(/[\w\.]/); var delim = stream.current().slice(before[0].length + (quoted ? 2 : 1)); if (quoted) stream.eat(quoted); if (delim) { (state.tokStack || (state.tokStack = [])).push(delim, 0); state.tokenize = phpString(delim, quoted != "'"); return "string"; } } return false; }, "#": function(stream) { while (!stream.eol() && !stream.match("?>", false)) stream.next(); return "comment"; }, "/": function(stream) { if (stream.eat("/")) { while (!stream.eol() && !stream.match("?>", false)) stream.next(); return "comment"; } return false; }, '"': function(_stream, state) { (state.tokStack || (state.tokStack = [])).push('"', 0); state.tokenize = phpString('"'); return "string"; }, "{": function(_stream, state) { if (state.tokStack && state.tokStack.length) state.tokStack[state.tokStack.length - 1]++; return false; }, "}": function(_stream, state) { if (state.tokStack && state.tokStack.length > 0 && !--state.tokStack[state.tokStack.length - 1]) { state.tokenize = phpString(state.tokStack[state.tokStack.length - 2]); } return false; } } }; CodeMirror.defineMode("php", function(config, parserConfig) { var htmlMode = CodeMirror.getMode(config, "text/html"); var phpMode = CodeMirror.getMode(config, phpConfig); function dispatch(stream, state) { var isPHP = state.curMode == phpMode; if (stream.sol() && state.pending && state.pending != '"' && state.pending != "'") state.pending = null; if (!isPHP) { if (stream.match(/^<\?\w*/)) { state.curMode = phpMode; if (!state.php) state.php = CodeMirror.startState(phpMode, htmlMode.indent(state.html, "")) state.curState = state.php; return "meta"; } if (state.pending == '"' || state.pending == "'") { while (!stream.eol() && stream.next() != state.pending) {} var style = "string"; } else if (state.pending && stream.pos < state.pending.end) { stream.pos = state.pending.end; var style = state.pending.style; } else { var style = htmlMode.token(stream, state.curState); } if (state.pending) state.pending = null; var cur = stream.current(), openPHP = cur.search(/<\?/), m; if (openPHP != -1) { if (style == "string" && (m = cur.match(/[\'\"]$/)) && !/\?>/.test(cur)) state.pending = m[0]; else state.pending = {end: stream.pos, style: style}; stream.backUp(cur.length - openPHP); } return style; } else if (isPHP && state.php.tokenize == null && stream.match("?>")) { state.curMode = htmlMode; state.curState = state.html; if (!state.php.context.prev) state.php = null; return "meta"; } else { return phpMode.token(stream, state.curState); } } return { startState: function() { var html = CodeMirror.startState(htmlMode) var php = parserConfig.startOpen ? CodeMirror.startState(phpMode) : null return {html: html, php: php, curMode: parserConfig.startOpen ? phpMode : htmlMode, curState: parserConfig.startOpen ? php : html, pending: null}; }, copyState: function(state) { var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html), php = state.php, phpNew = php && CodeMirror.copyState(phpMode, php), cur; if (state.curMode == htmlMode) cur = htmlNew; else cur = phpNew; return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur, pending: state.pending}; }, token: dispatch, indent: function(state, textAfter) { if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) || (state.curMode == phpMode && /^\?>/.test(textAfter))) return htmlMode.indent(state.html, textAfter); return state.curMode.indent(state.curState, textAfter); }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", innerMode: function(state) { return {state: state.curState, mode: state.curMode}; } }; }, "htmlmixed", "clike"); CodeMirror.defineMIME("application/x-httpd-php", "php"); CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true}); CodeMirror.defineMIME("text/x-php", phpConfig); }); application/library/codemirror/mode/php/test.js000064400000014755146731177160015741 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "php"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT('simple_test', '[meta ]'); MT('variable_interpolation_non_alphanumeric', '[meta $/$\\$}$\\\"$:$;$?$|$[[$]]$+$=aaa"]', '[meta ?>]'); MT('variable_interpolation_digits', '[meta ]'); MT('variable_interpolation_simple_syntax_1', '[meta ]'); MT('variable_interpolation_simple_syntax_2', '[meta ]'); MT('variable_interpolation_simple_syntax_3', '[meta [variable aaaaa][string .aaaaaa"];', '[keyword echo] [string "aaa][variable-2 $aaaa][string ->][variable-2 $aaaaa][string .aaaaaa"];', '[keyword echo] [string "aaa][variable-2 $aaaa]->[variable aaaaa][string [[2]].aaaaaa"];', '[keyword echo] [string "aaa][variable-2 $aaaa]->[variable aaaaa][string ->aaaa2.aaaaaa"];', '[meta ?>]'); MT('variable_interpolation_escaping', '[meta aaa.aaa"];', '[keyword echo] [string "aaa\\$aaaa[[2]]aaa.aaa"];', '[keyword echo] [string "aaa\\$aaaa[[asd]]aaa.aaa"];', '[keyword echo] [string "aaa{\\$aaaa->aaa.aaa"];', '[keyword echo] [string "aaa{\\$aaaa[[2]]aaa.aaa"];', '[keyword echo] [string "aaa{\\aaaaa[[asd]]aaa.aaa"];', '[keyword echo] [string "aaa\\${aaaa->aaa.aaa"];', '[keyword echo] [string "aaa\\${aaaa[[2]]aaa.aaa"];', '[keyword echo] [string "aaa\\${aaaa[[asd]]aaa.aaa"];', '[meta ?>]'); MT('variable_interpolation_complex_syntax_1', '[meta aaa.aaa"];', '[keyword echo] [string "aaa][variable-2 $]{[variable-2 $aaaa]}[string ->aaa.aaa"];', '[keyword echo] [string "aaa][variable-2 $]{[variable-2 $aaaa][[',' [number 42]',']]}[string ->aaa.aaa"];', '[keyword echo] [string "aaa][variable-2 $]{[variable aaaa][meta ?>]aaaaaa'); MT('variable_interpolation_complex_syntax_2', '[meta } $aaaaaa.aaa"];', '[keyword echo] [string "][variable-2 $]{[variable aaa][comment /*}?>*/][[',' [string "aaa][variable-2 $aaa][string {}][variable-2 $]{[variable aaa]}[string "]',']]}[string ->aaa.aaa"];', '[keyword echo] [string "][variable-2 $]{[variable aaa][comment /*} } $aaa } */]}[string ->aaa.aaa"];'); function build_recursive_monsters(nt, t, n){ var monsters = [t]; for (var i = 1; i <= n; ++i) monsters[i] = nt.join(monsters[i - 1]); return monsters; } var m1 = build_recursive_monsters( ['[string "][variable-2 $]{[variable aaa] [operator +] ', '}[string "]'], '[comment /* }?>} */] [string "aaa][variable-2 $aaa][string .aaa"]', 10 ); MT('variable_interpolation_complex_syntax_3_1', '[meta ]'); var m2 = build_recursive_monsters( ['[string "a][variable-2 $]{[variable aaa] [operator +] ', ' [operator +] ', '}[string .a"]'], '[comment /* }?>{{ */] [string "a?>}{{aa][variable-2 $aaa][string .a}a?>a"]', 5 ); MT('variable_interpolation_complex_syntax_3_2', '[meta ]'); function build_recursive_monsters_2(mf1, mf2, nt, t, n){ var monsters = [t]; for (var i = 1; i <= n; ++i) monsters[i] = nt[0] + mf1[i - 1] + nt[1] + mf2[i - 1] + nt[2] + monsters[i - 1] + nt[3]; return monsters; } var m3 = build_recursive_monsters_2( m1, m2, ['[string "a][variable-2 $]{[variable aaa] [operator +] ', ' [operator +] ', ' [operator +] ', '}[string .a"]'], '[comment /* }?>{{ */] [string "a?>}{{aa][variable-2 $aaa][string .a}a?>a"]', 4 ); MT('variable_interpolation_complex_syntax_3_3', '[meta ]'); MT("variable_interpolation_heredoc", "[meta CodeMirror: PHP mode

    PHP mode

    Simple HTML/PHP mode based on the C-like mode. Depends on XML, JavaScript, CSS, HTMLMixed, and C-like modes.

    MIME types defined: application/x-httpd-php (HTML with PHP code), text/x-php (plain, non-wrapped PHP code).

    application/library/codemirror/mode/ttcn/ttcn.js000064400000023653146731177160016110 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ttcn", function(config, parserConfig) { var indentUnit = config.indentUnit, keywords = parserConfig.keywords || {}, builtin = parserConfig.builtin || {}, timerOps = parserConfig.timerOps || {}, portOps = parserConfig.portOps || {}, configOps = parserConfig.configOps || {}, verdictOps = parserConfig.verdictOps || {}, sutOps = parserConfig.sutOps || {}, functionOps = parserConfig.functionOps || {}, verdictConsts = parserConfig.verdictConsts || {}, booleanConsts = parserConfig.booleanConsts || {}, otherConsts = parserConfig.otherConsts || {}, types = parserConfig.types || {}, visibilityModifiers = parserConfig.visibilityModifiers || {}, templateMatch = parserConfig.templateMatch || {}, multiLineStrings = parserConfig.multiLineStrings, indentStatements = parserConfig.indentStatements !== false; var isOperatorChar = /[+\-*&@=<>!\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]{}\(\),;\\:\?\.]/.test(ch)) { curPunc = ch; return "punctuation"; } if (ch == "#"){ stream.skipToEnd(); return "atom preprocessor"; } if (ch == "%"){ stream.eatWhile(/\b/); return "atom ttcn3Macros"; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { if(ch == "@"){ if(stream.match("try") || stream.match("catch") || stream.match("lazy")){ return "keyword"; } } stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (builtin.propertyIsEnumerable(cur)) return "builtin"; if (timerOps.propertyIsEnumerable(cur)) return "def timerOps"; if (configOps.propertyIsEnumerable(cur)) return "def configOps"; if (verdictOps.propertyIsEnumerable(cur)) return "def verdictOps"; if (portOps.propertyIsEnumerable(cur)) return "def portOps"; if (sutOps.propertyIsEnumerable(cur)) return "def sutOps"; if (functionOps.propertyIsEnumerable(cur)) return "def functionOps"; if (verdictConsts.propertyIsEnumerable(cur)) return "string verdictConsts"; if (booleanConsts.propertyIsEnumerable(cur)) return "string booleanConsts"; if (otherConsts.propertyIsEnumerable(cur)) return "string otherConsts"; if (types.propertyIsEnumerable(cur)) return "builtin types"; if (visibilityModifiers.propertyIsEnumerable(cur)) return "builtin visibilityModifiers"; if (templateMatch.propertyIsEnumerable(cur)) return "atom templateMatch"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped){ var afterQuote = stream.peek(); //look if the character after the quote is like the B in '10100010'B if (afterQuote){ afterQuote = afterQuote.toLowerCase(); if(afterQuote == "b" || afterQuote == "h" || afterQuote == "o") stream.next(); } end = true; break; } escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } //Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement"){ popContext(state); } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement"))) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, electricChars: "{}", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function def(mimes, mode) { if (typeof mimes == "string") mimes = [mimes]; var words = []; function add(obj) { if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop)) words.push(prop); } add(mode.keywords); add(mode.builtin); add(mode.timerOps); add(mode.portOps); if (words.length) { mode.helperType = mimes[0]; CodeMirror.registerHelper("hintWords", mimes[0], words); } for (var i = 0; i < mimes.length; ++i) CodeMirror.defineMIME(mimes[i], mode); } def(["text/x-ttcn", "text/x-ttcn3", "text/x-ttcnpp"], { name: "ttcn", keywords: words("activate address alive all alt altstep and and4b any" + " break case component const continue control deactivate" + " display do else encode enumerated except exception" + " execute extends extension external for from function" + " goto group if import in infinity inout interleave" + " label language length log match message mixed mod" + " modifies module modulepar mtc noblock not not4b nowait" + " of on optional or or4b out override param pattern port" + " procedure record recursive rem repeat return runs select" + " self sender set signature system template testcase to" + " type union value valueof var variant while with xor xor4b"), builtin: words("bit2hex bit2int bit2oct bit2str char2int char2oct encvalue" + " decomp decvalue float2int float2str hex2bit hex2int" + " hex2oct hex2str int2bit int2char int2float int2hex" + " int2oct int2str int2unichar isbound ischosen ispresent" + " isvalue lengthof log2str oct2bit oct2char oct2hex oct2int" + " oct2str regexp replace rnd sizeof str2bit str2float" + " str2hex str2int str2oct substr unichar2int unichar2char" + " enum2int"), types: words("anytype bitstring boolean char charstring default float" + " hexstring integer objid octetstring universal verdicttype timer"), timerOps: words("read running start stop timeout"), portOps: words("call catch check clear getcall getreply halt raise receive" + " reply send trigger"), configOps: words("create connect disconnect done kill killed map unmap"), verdictOps: words("getverdict setverdict"), sutOps: words("action"), functionOps: words("apply derefers refers"), verdictConsts: words("error fail inconc none pass"), booleanConsts: words("true false"), otherConsts: words("null NULL omit"), visibilityModifiers: words("private public friend"), templateMatch: words("complement ifpresent subset superset permutation"), multiLineStrings: true }); }); application/library/codemirror/mode/ttcn/index.html000064400000006642146731177160016576 0ustar00 CodeMirror: TTCN mode

    TTCN example


    Language: Testing and Test Control Notation (TTCN)

    MIME types defined: text/x-ttcn, text/x-ttcn3, text/x-ttcnpp.


    The development of this mode has been sponsored by Ericsson .

    Coded by Asmelash Tsegay Gebretsadkan

    application/library/codemirror/mode/fortran/index.html000064400000004674146731177160017304 0ustar00 CodeMirror: Fortran mode

    Fortran mode

    MIME types defined: text/x-fortran.

    application/library/codemirror/mode/fortran/fortran.js000064400000020756146731177160017317 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("fortran", function() { function words(array) { var keys = {}; for (var i = 0; i < array.length; ++i) { keys[array[i]] = true; } return keys; } var keywords = words([ "abstract", "accept", "allocatable", "allocate", "array", "assign", "asynchronous", "backspace", "bind", "block", "byte", "call", "case", "class", "close", "common", "contains", "continue", "cycle", "data", "deallocate", "decode", "deferred", "dimension", "do", "elemental", "else", "encode", "end", "endif", "entry", "enumerator", "equivalence", "exit", "external", "extrinsic", "final", "forall", "format", "function", "generic", "go", "goto", "if", "implicit", "import", "include", "inquire", "intent", "interface", "intrinsic", "module", "namelist", "non_intrinsic", "non_overridable", "none", "nopass", "nullify", "open", "optional", "options", "parameter", "pass", "pause", "pointer", "print", "private", "program", "protected", "public", "pure", "read", "recursive", "result", "return", "rewind", "save", "select", "sequence", "stop", "subroutine", "target", "then", "to", "type", "use", "value", "volatile", "where", "while", "write"]); var builtins = words(["abort", "abs", "access", "achar", "acos", "adjustl", "adjustr", "aimag", "aint", "alarm", "all", "allocated", "alog", "amax", "amin", "amod", "and", "anint", "any", "asin", "associated", "atan", "besj", "besjn", "besy", "besyn", "bit_size", "btest", "cabs", "ccos", "ceiling", "cexp", "char", "chdir", "chmod", "clog", "cmplx", "command_argument_count", "complex", "conjg", "cos", "cosh", "count", "cpu_time", "cshift", "csin", "csqrt", "ctime", "c_funloc", "c_loc", "c_associated", "c_null_ptr", "c_null_funptr", "c_f_pointer", "c_null_char", "c_alert", "c_backspace", "c_form_feed", "c_new_line", "c_carriage_return", "c_horizontal_tab", "c_vertical_tab", "dabs", "dacos", "dasin", "datan", "date_and_time", "dbesj", "dbesj", "dbesjn", "dbesy", "dbesy", "dbesyn", "dble", "dcos", "dcosh", "ddim", "derf", "derfc", "dexp", "digits", "dim", "dint", "dlog", "dlog", "dmax", "dmin", "dmod", "dnint", "dot_product", "dprod", "dsign", "dsinh", "dsin", "dsqrt", "dtanh", "dtan", "dtime", "eoshift", "epsilon", "erf", "erfc", "etime", "exit", "exp", "exponent", "extends_type_of", "fdate", "fget", "fgetc", "float", "floor", "flush", "fnum", "fputc", "fput", "fraction", "fseek", "fstat", "ftell", "gerror", "getarg", "get_command", "get_command_argument", "get_environment_variable", "getcwd", "getenv", "getgid", "getlog", "getpid", "getuid", "gmtime", "hostnm", "huge", "iabs", "iachar", "iand", "iargc", "ibclr", "ibits", "ibset", "ichar", "idate", "idim", "idint", "idnint", "ieor", "ierrno", "ifix", "imag", "imagpart", "index", "int", "ior", "irand", "isatty", "ishft", "ishftc", "isign", "iso_c_binding", "is_iostat_end", "is_iostat_eor", "itime", "kill", "kind", "lbound", "len", "len_trim", "lge", "lgt", "link", "lle", "llt", "lnblnk", "loc", "log", "logical", "long", "lshift", "lstat", "ltime", "matmul", "max", "maxexponent", "maxloc", "maxval", "mclock", "merge", "move_alloc", "min", "minexponent", "minloc", "minval", "mod", "modulo", "mvbits", "nearest", "new_line", "nint", "not", "or", "pack", "perror", "precision", "present", "product", "radix", "rand", "random_number", "random_seed", "range", "real", "realpart", "rename", "repeat", "reshape", "rrspacing", "rshift", "same_type_as", "scale", "scan", "second", "selected_int_kind", "selected_real_kind", "set_exponent", "shape", "short", "sign", "signal", "sinh", "sin", "sleep", "sngl", "spacing", "spread", "sqrt", "srand", "stat", "sum", "symlnk", "system", "system_clock", "tan", "tanh", "time", "tiny", "transfer", "transpose", "trim", "ttynam", "ubound", "umask", "unlink", "unpack", "verify", "xor", "zabs", "zcos", "zexp", "zlog", "zsin", "zsqrt"]); var dataTypes = words(["c_bool", "c_char", "c_double", "c_double_complex", "c_float", "c_float_complex", "c_funptr", "c_int", "c_int16_t", "c_int32_t", "c_int64_t", "c_int8_t", "c_int_fast16_t", "c_int_fast32_t", "c_int_fast64_t", "c_int_fast8_t", "c_int_least16_t", "c_int_least32_t", "c_int_least64_t", "c_int_least8_t", "c_intmax_t", "c_intptr_t", "c_long", "c_long_double", "c_long_double_complex", "c_long_long", "c_ptr", "c_short", "c_signed_char", "c_size_t", "character", "complex", "double", "integer", "logical", "real"]); var isOperatorChar = /[+\-*&=<>\/\:]/; var litOperator = new RegExp("(\.and\.|\.or\.|\.eq\.|\.lt\.|\.le\.|\.gt\.|\.ge\.|\.ne\.|\.not\.|\.eqv\.|\.neqv\.)", "i"); function tokenBase(stream, state) { if (stream.match(litOperator)){ return 'operator'; } var ch = stream.next(); if (ch == "!") { stream.skipToEnd(); return "comment"; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]\(\),]/.test(ch)) { return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_]/); var word = stream.current().toLowerCase(); if (keywords.hasOwnProperty(word)){ return 'keyword'; } if (builtins.hasOwnProperty(word) || dataTypes.hasOwnProperty(word)) { return 'builtin'; } return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = null; return "string"; }; } // Interface return { startState: function() { return {tokenize: null}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; return style; } }; }); CodeMirror.defineMIME("text/x-fortran", "fortran"); }); application/library/codemirror/mode/tornado/tornado.js000064400000004700146731177160017274 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../../addon/mode/overlay")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../../addon/mode/overlay"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("tornado:inner", function() { var keywords = ["and","as","assert","autoescape","block","break","class","comment","context", "continue","datetime","def","del","elif","else","end","escape","except", "exec","extends","false","finally","for","from","global","if","import","in", "include","is","json_encode","lambda","length","linkify","load","module", "none","not","or","pass","print","put","raise","raw","return","self","set", "squeeze","super","true","try","url_escape","while","with","without","xhtml_escape","yield"]; keywords = new RegExp("^((" + keywords.join(")|(") + "))\\b"); function tokenBase (stream, state) { stream.eatWhile(/[^\{]/); var ch = stream.next(); if (ch == "{") { if (ch = stream.eat(/\{|%|#/)) { state.tokenize = inTag(ch); return "tag"; } } } function inTag (close) { if (close == "{") { close = "}"; } return function (stream, state) { var ch = stream.next(); if ((ch == close) && stream.eat("}")) { state.tokenize = tokenBase; return "tag"; } if (stream.match(keywords)) { return "keyword"; } return close == "#" ? "comment" : "string"; }; } return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { return state.tokenize(stream, state); } }; }); CodeMirror.defineMode("tornado", function(config) { var htmlBase = CodeMirror.getMode(config, "text/html"); var tornadoInner = CodeMirror.getMode(config, "tornado:inner"); return CodeMirror.overlayMode(htmlBase, tornadoInner); }); CodeMirror.defineMIME("text/x-tornado", "tornado"); }); application/library/codemirror/mode/tornado/index.html000064400000003413146731177160017265 0ustar00 CodeMirror: Tornado template mode

    Tornado template mode

    Mode for HTML with embedded Tornado template markup.

    MIME types defined: text/x-tornado

    application/library/codemirror/mode/powershell/powershell.js000064400000031047146731177160020534 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { 'use strict'; if (typeof exports == 'object' && typeof module == 'object') // CommonJS mod(require('codemirror')); else if (typeof define == 'function' && define.amd) // AMD define(['codemirror'], mod); else // Plain browser env mod(window.CodeMirror); })(function(CodeMirror) { 'use strict'; CodeMirror.defineMode('powershell', function() { function buildRegexp(patterns, options) { options = options || {}; var prefix = options.prefix !== undefined ? options.prefix : '^'; var suffix = options.suffix !== undefined ? options.suffix : '\\b'; for (var i = 0; i < patterns.length; i++) { if (patterns[i] instanceof RegExp) { patterns[i] = patterns[i].source; } else { patterns[i] = patterns[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } } return new RegExp(prefix + '(' + patterns.join('|') + ')' + suffix, 'i'); } var notCharacterOrDash = '(?=[^A-Za-z\\d\\-_]|$)'; var varNames = /[\w\-:]/ var keywords = buildRegexp([ /begin|break|catch|continue|data|default|do|dynamicparam/, /else|elseif|end|exit|filter|finally|for|foreach|from|function|if|in/, /param|process|return|switch|throw|trap|try|until|where|while/ ], { suffix: notCharacterOrDash }); var punctuation = /[\[\]{},;`\.]|@[({]/; var wordOperators = buildRegexp([ 'f', /b?not/, /[ic]?split/, 'join', /is(not)?/, 'as', /[ic]?(eq|ne|[gl][te])/, /[ic]?(not)?(like|match|contains)/, /[ic]?replace/, /b?(and|or|xor)/ ], { prefix: '-' }); var symbolOperators = /[+\-*\/%]=|\+\+|--|\.\.|[+\-*&^%:=!|\/]|<(?!#)|(?!#)>/; var operators = buildRegexp([wordOperators, symbolOperators], { suffix: '' }); var numbers = /^((0x[\da-f]+)|((\d+\.\d+|\d\.|\.\d+|\d+)(e[\+\-]?\d+)?))[ld]?([kmgtp]b)?/i; var identifiers = /^[A-Za-z\_][A-Za-z\-\_\d]*\b/; var symbolBuiltins = /[A-Z]:|%|\?/i; var namedBuiltins = buildRegexp([ /Add-(Computer|Content|History|Member|PSSnapin|Type)/, /Checkpoint-Computer/, /Clear-(Content|EventLog|History|Host|Item(Property)?|Variable)/, /Compare-Object/, /Complete-Transaction/, /Connect-PSSession/, /ConvertFrom-(Csv|Json|SecureString|StringData)/, /Convert-Path/, /ConvertTo-(Csv|Html|Json|SecureString|Xml)/, /Copy-Item(Property)?/, /Debug-Process/, /Disable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/, /Disconnect-PSSession/, /Enable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/, /(Enter|Exit)-PSSession/, /Export-(Alias|Clixml|Console|Counter|Csv|FormatData|ModuleMember|PSSession)/, /ForEach-Object/, /Format-(Custom|List|Table|Wide)/, new RegExp('Get-(Acl|Alias|AuthenticodeSignature|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Counter|Credential' + '|Culture|Date|Event|EventLog|EventSubscriber|ExecutionPolicy|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job' + '|Location|Member|Module|PfxCertificate|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration' + '|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|Verb|WinEvent|WmiObject)'), /Group-Object/, /Import-(Alias|Clixml|Counter|Csv|LocalizedData|Module|PSSession)/, /ImportSystemModules/, /Invoke-(Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)/, /Join-Path/, /Limit-EventLog/, /Measure-(Command|Object)/, /Move-Item(Property)?/, new RegExp('New-(Alias|Event|EventLog|Item(Property)?|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile' + '|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy|WinEvent)'), /Out-(Default|File|GridView|Host|Null|Printer|String)/, /Pause/, /(Pop|Push)-Location/, /Read-Host/, /Receive-(Job|PSSession)/, /Register-(EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)/, /Remove-(Computer|Event|EventLog|Item(Property)?|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)/, /Rename-(Computer|Item(Property)?)/, /Reset-ComputerMachinePassword/, /Resolve-Path/, /Restart-(Computer|Service)/, /Restore-Computer/, /Resume-(Job|Service)/, /Save-Help/, /Select-(Object|String|Xml)/, /Send-MailMessage/, new RegExp('Set-(Acl|Alias|AuthenticodeSignature|Content|Date|ExecutionPolicy|Item(Property)?|Location|PSBreakpoint|PSDebug' + '|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)'), /Show-(Command|ControlPanelItem|EventLog)/, /Sort-Object/, /Split-Path/, /Start-(Job|Process|Service|Sleep|Transaction|Transcript)/, /Stop-(Computer|Job|Process|Service|Transcript)/, /Suspend-(Job|Service)/, /TabExpansion2/, /Tee-Object/, /Test-(ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)/, /Trace-Command/, /Unblock-File/, /Undo-Transaction/, /Unregister-(Event|PSSessionConfiguration)/, /Update-(FormatData|Help|List|TypeData)/, /Use-Transaction/, /Wait-(Event|Job|Process)/, /Where-Object/, /Write-(Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning)/, /cd|help|mkdir|more|oss|prompt/, /ac|asnp|cat|cd|chdir|clc|clear|clhy|cli|clp|cls|clv|cnsn|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|dnsn|ebp/, /echo|epal|epcsv|epsn|erase|etsn|exsn|fc|fl|foreach|ft|fw|gal|gbp|gc|gci|gcm|gcs|gdr|ghy|gi|gjb|gl|gm|gmo|gp|gps/, /group|gsn|gsnp|gsv|gu|gv|gwmi|h|history|icm|iex|ihy|ii|ipal|ipcsv|ipmo|ipsn|irm|ise|iwmi|iwr|kill|lp|ls|man|md/, /measure|mi|mount|move|mp|mv|nal|ndr|ni|nmo|npssc|nsn|nv|ogv|oh|popd|ps|pushd|pwd|r|rbp|rcjb|rcsn|rd|rdr|ren|ri/, /rjb|rm|rmdir|rmo|rni|rnp|rp|rsn|rsnp|rujb|rv|rvpa|rwmi|sajb|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls/, /sort|sp|spjb|spps|spsv|start|sujb|sv|swmi|tee|trcm|type|where|wjb|write/ ], { prefix: '', suffix: '' }); var variableBuiltins = buildRegexp([ /[$?^_]|Args|ConfirmPreference|ConsoleFileName|DebugPreference|Error|ErrorActionPreference|ErrorView|ExecutionContext/, /FormatEnumerationLimit|Home|Host|Input|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount/, /MaximumHistoryCount|MaximumVariableCount|MyInvocation|NestedPromptLevel|OutputEncoding|Pid|Profile|ProgressPreference/, /PSBoundParameters|PSCommandPath|PSCulture|PSDefaultParameterValues|PSEmailServer|PSHome|PSScriptRoot|PSSessionApplicationName/, /PSSessionConfigurationName|PSSessionOption|PSUICulture|PSVersionTable|Pwd|ShellId|StackTrace|VerbosePreference/, /WarningPreference|WhatIfPreference/, /Event|EventArgs|EventSubscriber|Sender/, /Matches|Ofs|ForEach|LastExitCode|PSCmdlet|PSItem|PSSenderInfo|This/, /true|false|null/ ], { prefix: '\\$', suffix: '' }); var builtins = buildRegexp([symbolBuiltins, namedBuiltins, variableBuiltins], { suffix: notCharacterOrDash }); var grammar = { keyword: keywords, number: numbers, operator: operators, builtin: builtins, punctuation: punctuation, identifier: identifiers }; // tokenizers function tokenBase(stream, state) { // Handle Comments //var ch = stream.peek(); var parent = state.returnStack[state.returnStack.length - 1]; if (parent && parent.shouldReturnFrom(state)) { state.tokenize = parent.tokenize; state.returnStack.pop(); return state.tokenize(stream, state); } if (stream.eatSpace()) { return null; } if (stream.eat('(')) { state.bracketNesting += 1; return 'punctuation'; } if (stream.eat(')')) { state.bracketNesting -= 1; return 'punctuation'; } for (var key in grammar) { if (stream.match(grammar[key])) { return key; } } var ch = stream.next(); // single-quote string if (ch === "'") { return tokenSingleQuoteString(stream, state); } if (ch === '$') { return tokenVariable(stream, state); } // double-quote string if (ch === '"') { return tokenDoubleQuoteString(stream, state); } if (ch === '<' && stream.eat('#')) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (ch === '#') { stream.skipToEnd(); return 'comment'; } if (ch === '@') { var quoteMatch = stream.eat(/["']/); if (quoteMatch && stream.eol()) { state.tokenize = tokenMultiString; state.startQuote = quoteMatch[0]; return tokenMultiString(stream, state); } else if (stream.peek().match(/[({]/)) { return 'punctuation'; } else if (stream.peek().match(varNames)) { // splatted variable return tokenVariable(stream, state); } } return 'error'; } function tokenSingleQuoteString(stream, state) { var ch; while ((ch = stream.peek()) != null) { stream.next(); if (ch === "'" && !stream.eat("'")) { state.tokenize = tokenBase; return 'string'; } } return 'error'; } function tokenDoubleQuoteString(stream, state) { var ch; while ((ch = stream.peek()) != null) { if (ch === '$') { state.tokenize = tokenStringInterpolation; return 'string'; } stream.next(); if (ch === '`') { stream.next(); continue; } if (ch === '"' && !stream.eat('"')) { state.tokenize = tokenBase; return 'string'; } } return 'error'; } function tokenStringInterpolation(stream, state) { return tokenInterpolation(stream, state, tokenDoubleQuoteString); } function tokenMultiStringReturn(stream, state) { state.tokenize = tokenMultiString; state.startQuote = '"' return tokenMultiString(stream, state); } function tokenHereStringInterpolation(stream, state) { return tokenInterpolation(stream, state, tokenMultiStringReturn); } function tokenInterpolation(stream, state, parentTokenize) { if (stream.match('$(')) { var savedBracketNesting = state.bracketNesting; state.returnStack.push({ /*jshint loopfunc:true */ shouldReturnFrom: function(state) { return state.bracketNesting === savedBracketNesting; }, tokenize: parentTokenize }); state.tokenize = tokenBase; state.bracketNesting += 1; return 'punctuation'; } else { stream.next(); state.returnStack.push({ shouldReturnFrom: function() { return true; }, tokenize: parentTokenize }); state.tokenize = tokenVariable; return state.tokenize(stream, state); } } function tokenComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == '>') { state.tokenize = tokenBase; break; } maybeEnd = (ch === '#'); } return 'comment'; } function tokenVariable(stream, state) { var ch = stream.peek(); if (stream.eat('{')) { state.tokenize = tokenVariableWithBraces; return tokenVariableWithBraces(stream, state); } else if (ch != undefined && ch.match(varNames)) { stream.eatWhile(varNames); state.tokenize = tokenBase; return 'variable-2'; } else { state.tokenize = tokenBase; return 'error'; } } function tokenVariableWithBraces(stream, state) { var ch; while ((ch = stream.next()) != null) { if (ch === '}') { state.tokenize = tokenBase; break; } } return 'variable-2'; } function tokenMultiString(stream, state) { var quote = state.startQuote; if (stream.sol() && stream.match(new RegExp(quote + '@'))) { state.tokenize = tokenBase; } else if (quote === '"') { while (!stream.eol()) { var ch = stream.peek(); if (ch === '$') { state.tokenize = tokenHereStringInterpolation; return 'string'; } stream.next(); if (ch === '`') { stream.next(); } } } else { stream.skipToEnd(); } return 'string'; } var external = { startState: function() { return { returnStack: [], bracketNesting: 0, tokenize: tokenBase }; }, token: function(stream, state) { return state.tokenize(stream, state); }, blockCommentStart: '<#', blockCommentEnd: '#>', lineComment: '#', fold: 'brace' }; return external; }); CodeMirror.defineMIME('application/x-powershell', 'powershell'); }); application/library/codemirror/mode/powershell/test.js000064400000005473146731177160017333 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "powershell"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT('comment', '[number 1][comment # A]'); MT('comment_multiline', '[number 1][comment <#]', '[comment ABC]', '[comment #>][number 2]'); [ '0', '1234', '12kb', '12mb', '12Gb', '12Tb', '12PB', '12L', '12D', '12lkb', '12dtb', '1.234', '1.234e56', '1.', '1.e2', '.2', '.2e34', '1.2MB', '1.kb', '.1dTB', '1.e1gb', '.2', '.2e34', '0x1', '0xabcdef', '0x3tb', '0xelmb' ].forEach(function(number) { MT("number_" + number, "[number " + number + "]"); }); MT('string_literal_escaping', "[string 'a''']"); MT('string_literal_variable', "[string 'a $x']"); MT('string_escaping_1', '[string "a `""]'); MT('string_escaping_2', '[string "a """]'); MT('string_variable_escaping', '[string "a `$x"]'); MT('string_variable', '[string "a ][variable-2 $x][string b"]'); MT('string_variable_spaces', '[string "a ][variable-2 ${x y}][string b"]'); MT('string_expression', '[string "a ][punctuation $(][variable-2 $x][operator +][number 3][punctuation )][string b"]'); MT('string_expression_nested', '[string "A][punctuation $(][string "a][punctuation $(][string "w"][punctuation )][string b"][punctuation )][string B"]'); MT('string_heredoc', '[string @"]', '[string abc]', '[string "@]'); MT('string_heredoc_quotes', '[string @"]', '[string abc "\']', '[string "@]'); MT('string_heredoc_variable', '[string @"]', '[string a ][variable-2 $x][string b]', '[string "@]'); MT('string_heredoc_nested_string', '[string @"]', '[string a][punctuation $(][string "w"][punctuation )][string b]', '[string "@]'); MT('string_heredoc_literal_quotes', "[string @']", '[string abc "\']', "[string '@]"); MT('array', "[punctuation @(][string 'a'][punctuation ,][string 'b'][punctuation )]"); MT('hash', "[punctuation @{][string 'key'][operator :][string 'value'][punctuation }]"); MT('variable', "[variable-2 $test]"); MT('variable_global', "[variable-2 $global:test]"); MT('variable_spaces', "[variable-2 ${test test}]"); MT('operator_splat', "[variable-2 @x]"); MT('variable_builtin', "[builtin $ErrorActionPreference]"); MT('variable_builtin_symbols', "[builtin $$]"); MT('operator', "[operator +]"); MT('operator_unary', "[operator +][number 3]"); MT('operator_long', "[operator -match]"); [ '(', ')', '[[', ']]', '{', '}', ',', '`', ';', '.' ].forEach(function(punctuation) { MT("punctuation_" + punctuation.replace(/^[\[\]]/,''), "[punctuation " + punctuation + "]"); }); MT('keyword', "[keyword if]"); MT('call_builtin', "[builtin Get-ChildItem]"); })(); application/library/codemirror/mode/powershell/index.html000064400000016314146731177160020007 0ustar00 CodeMirror: Powershell mode

    PowerShell mode

    MIME types defined: application/x-powershell.

    application/library/codemirror/mode/forth/forth.js000064400000012156146731177160016430 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Author: Aliaksei Chapyzhenka (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function toWordList(words) { var ret = []; words.split(' ').forEach(function(e){ ret.push({name: e}); }); return ret; } var coreWordList = toWordList( 'INVERT AND OR XOR\ 2* 2/ LSHIFT RSHIFT\ 0= = 0< < > U< MIN MAX\ 2DROP 2DUP 2OVER 2SWAP ?DUP DEPTH DROP DUP OVER ROT SWAP\ >R R> R@\ + - 1+ 1- ABS NEGATE\ S>D * M* UM*\ FM/MOD SM/REM UM/MOD */ */MOD / /MOD MOD\ HERE , @ ! CELL+ CELLS C, C@ C! CHARS 2@ 2!\ ALIGN ALIGNED +! ALLOT\ CHAR [CHAR] [ ] BL\ FIND EXECUTE IMMEDIATE COUNT LITERAL STATE\ ; DOES> >BODY\ EVALUATE\ SOURCE >IN\ <# # #S #> HOLD SIGN BASE >NUMBER HEX DECIMAL\ FILL MOVE\ . CR EMIT SPACE SPACES TYPE U. .R U.R\ ACCEPT\ TRUE FALSE\ <> U> 0<> 0>\ NIP TUCK ROLL PICK\ 2>R 2R@ 2R>\ WITHIN UNUSED MARKER\ I J\ TO\ COMPILE, [COMPILE]\ SAVE-INPUT RESTORE-INPUT\ PAD ERASE\ 2LITERAL DNEGATE\ D- D+ D0< D0= D2* D2/ D< D= DMAX DMIN D>S DABS\ M+ M*/ D. D.R 2ROT DU<\ CATCH THROW\ FREE RESIZE ALLOCATE\ CS-PICK CS-ROLL\ GET-CURRENT SET-CURRENT FORTH-WORDLIST GET-ORDER SET-ORDER\ PREVIOUS SEARCH-WORDLIST WORDLIST FIND ALSO ONLY FORTH DEFINITIONS ORDER\ -TRAILING /STRING SEARCH COMPARE CMOVE CMOVE> BLANK SLITERAL'); var immediateWordList = toWordList('IF ELSE THEN BEGIN WHILE REPEAT UNTIL RECURSE [IF] [ELSE] [THEN] ?DO DO LOOP +LOOP UNLOOP LEAVE EXIT AGAIN CASE OF ENDOF ENDCASE'); CodeMirror.defineMode('forth', function() { function searchWordList (wordList, word) { var i; for (i = wordList.length - 1; i >= 0; i--) { if (wordList[i].name === word.toUpperCase()) { return wordList[i]; } } return undefined; } return { startState: function() { return { state: '', base: 10, coreWordList: coreWordList, immediateWordList: immediateWordList, wordList: [] }; }, token: function (stream, stt) { var mat; if (stream.eatSpace()) { return null; } if (stt.state === '') { // interpretation if (stream.match(/^(\]|:NONAME)(\s|$)/i)) { stt.state = ' compilation'; return 'builtin compilation'; } mat = stream.match(/^(\:)\s+(\S+)(\s|$)+/); if (mat) { stt.wordList.push({name: mat[2].toUpperCase()}); stt.state = ' compilation'; return 'def' + stt.state; } mat = stream.match(/^(VARIABLE|2VARIABLE|CONSTANT|2CONSTANT|CREATE|POSTPONE|VALUE|WORD)\s+(\S+)(\s|$)+/i); if (mat) { stt.wordList.push({name: mat[2].toUpperCase()}); return 'def' + stt.state; } mat = stream.match(/^(\'|\[\'\])\s+(\S+)(\s|$)+/); if (mat) { return 'builtin' + stt.state; } } else { // compilation // ; [ if (stream.match(/^(\;|\[)(\s)/)) { stt.state = ''; stream.backUp(1); return 'builtin compilation'; } if (stream.match(/^(\;|\[)($)/)) { stt.state = ''; return 'builtin compilation'; } if (stream.match(/^(POSTPONE)\s+\S+(\s|$)+/)) { return 'builtin'; } } // dynamic wordlist mat = stream.match(/^(\S+)(\s+|$)/); if (mat) { if (searchWordList(stt.wordList, mat[1]) !== undefined) { return 'variable' + stt.state; } // comments if (mat[1] === '\\') { stream.skipToEnd(); return 'comment' + stt.state; } // core words if (searchWordList(stt.coreWordList, mat[1]) !== undefined) { return 'builtin' + stt.state; } if (searchWordList(stt.immediateWordList, mat[1]) !== undefined) { return 'keyword' + stt.state; } if (mat[1] === '(') { stream.eatWhile(function (s) { return s !== ')'; }); stream.eat(')'); return 'comment' + stt.state; } // // strings if (mat[1] === '.(') { stream.eatWhile(function (s) { return s !== ')'; }); stream.eat(')'); return 'string' + stt.state; } if (mat[1] === 'S"' || mat[1] === '."' || mat[1] === 'C"') { stream.eatWhile(function (s) { return s !== '"'; }); stream.eat('"'); return 'string' + stt.state; } // numbers if (mat[1] - 0xfffffffff) { return 'number' + stt.state; } // if (mat[1].match(/^[-+]?[0-9]+\.[0-9]*/)) { // return 'number' + stt.state; // } return 'atom' + stt.state; } } }; }); CodeMirror.defineMIME("text/x-forth", "forth"); }); application/library/codemirror/mode/forth/index.html000064400000003367146731177160016751 0ustar00 CodeMirror: Forth mode

    Forth mode

    Simple mode that handle Forth-Syntax (Forth on WikiPedia).

    MIME types defined: text/x-forth.

    application/library/codemirror/mode/clike/scala.html000064400000067546146731177160016703 0ustar00 CodeMirror: Scala mode

    Scala mode

    application/library/codemirror/mode/clike/test.js000064400000003617146731177160016234 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-c"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("indent", "[variable-3 void] [def foo]([variable-3 void*] [variable a], [variable-3 int] [variable b]) {", " [variable-3 int] [variable c] [operator =] [variable b] [operator +]", " [number 1];", " [keyword return] [operator *][variable a];", "}"); MT("indent_switch", "[keyword switch] ([variable x]) {", " [keyword case] [number 10]:", " [keyword return] [number 20];", " [keyword default]:", " [variable printf]([string \"foo %c\"], [variable x]);", "}"); MT("def", "[variable-3 void] [def foo]() {}", "[keyword struct] [def bar]{}", "[variable-3 int] [variable-3 *][def baz]() {}"); MT("def_new_line", "::[variable std]::[variable SomeTerribleType][operator <][variable T][operator >]", "[def SomeLongMethodNameThatDoesntFitIntoOneLine]([keyword const] [variable MyType][operator &] [variable param]) {}") MT("double_block", "[keyword for] (;;)", " [keyword for] (;;)", " [variable x][operator ++];", "[keyword return];"); MT("preprocessor", "[meta #define FOO 3]", "[variable-3 int] [variable foo];", "[meta #define BAR\\]", "[meta 4]", "[variable-3 unsigned] [variable-3 int] [variable bar] [operator =] [number 8];", "[meta #include ][comment // comment]") var mode_cpp = CodeMirror.getMode({indentUnit: 2}, "text/x-c++src"); function MTCPP(name) { test.mode(name, mode_cpp, Array.prototype.slice.call(arguments, 1)); } MTCPP("cpp14_literal", "[number 10'000];", "[number 0b10'000];", "[number 0x10'000];", "[string '100000'];"); })(); application/library/codemirror/mode/clike/index.html000064400000023571146731177160016715 0ustar00 CodeMirror: C-like mode

    C-like mode

    C++ example

    Objective-C example

    Java example

    Scala example

    Kotlin mode

    Ceylon mode

    Simple mode that tries to handle C-like languages as well as it can. Takes two configuration parameters: keywords, an object whose property names are the keywords in the language, and useCPP, which determines whether C preprocessor directives are recognized.

    MIME types defined: text/x-csrc (C), text/x-c++src (C++), text/x-java (Java), text/x-csharp (C#), text/x-objectivec (Objective-C), text/x-scala (Scala), text/x-vertex x-shader/x-fragment (shader programs), text/x-squirrel (Squirrel) and text/x-ceylon (Ceylon)

    application/library/codemirror/mode/clike/clike.js000064400000074016146731177160016345 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function Context(indented, column, type, info, align, prev) { this.indented = indented; this.column = column; this.type = type; this.info = info; this.align = align; this.prev = prev; } function pushContext(state, col, type, info) { var indent = state.indented; if (state.context && state.context.type != "statement" && type != "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, info, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } function typeBefore(stream, state, pos) { if (state.prevToken == "variable" || state.prevToken == "variable-3") return true; if (/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(stream.string.slice(0, pos))) return true; if (state.typeAtEndOfLine && stream.column() == stream.indentation()) return true; } function isTopScope(context) { for (;;) { if (!context || context.type == "top") return true; if (context.type == "}" && context.prev.info != "namespace") return false; context = context.prev; } } CodeMirror.defineMode("clike", function(config, parserConfig) { var indentUnit = config.indentUnit, statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, dontAlignCalls = parserConfig.dontAlignCalls, keywords = parserConfig.keywords || {}, types = parserConfig.types || {}, builtin = parserConfig.builtin || {}, blockKeywords = parserConfig.blockKeywords || {}, defKeywords = parserConfig.defKeywords || {}, atoms = parserConfig.atoms || {}, hooks = parserConfig.hooks || {}, multiLineStrings = parserConfig.multiLineStrings, indentStatements = parserConfig.indentStatements !== false, indentSwitch = parserConfig.indentSwitch !== false, namespaceSeparator = parserConfig.namespaceSeparator, isPunctuationChar = parserConfig.isPunctuationChar || /[\[\]{}\(\),;\:\.]/, numberStart = parserConfig.numberStart || /[\d\.]/, number = parserConfig.number || /^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i, isOperatorChar = parserConfig.isOperatorChar || /[+\-*&%=<>!?|\/]/, endStatement = parserConfig.endStatement || /^[;:,]$/; var curPunc, isDefKeyword; function tokenBase(stream, state) { var ch = stream.next(); if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (isPunctuationChar.test(ch)) { curPunc = ch; return null; } if (numberStart.test(ch)) { stream.backUp(1) if (stream.match(number)) return "number" stream.next() } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { while (!stream.match(/^\/[\/*]/, false) && stream.eat(isOperatorChar)) {} return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); if (namespaceSeparator) while (stream.match(namespaceSeparator)) stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (contains(keywords, cur)) { if (contains(blockKeywords, cur)) curPunc = "newstatement"; if (contains(defKeywords, cur)) isDefKeyword = true; return "keyword"; } if (contains(types, cur)) return "variable-3"; if (contains(builtin, cur)) { if (contains(blockKeywords, cur)) curPunc = "newstatement"; return "builtin"; } if (contains(atoms, cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function maybeEOL(stream, state) { if (parserConfig.typeFirstDefinitions && stream.eol() && isTopScope(state.context)) state.typeAtEndOfLine = typeBefore(stream, state, stream.pos) } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", null, false), indented: 0, startOfLine: true, prevToken: null }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) { maybeEOL(stream, state); return null; } curPunc = isDefKeyword = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; if (ctx.align == null) ctx.align = true; if (endStatement.test(curPunc)) while (state.context.type == "statement") popContext(state); else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") && curPunc != ";") || (ctx.type == "statement" && curPunc == "newstatement"))) { pushContext(state, stream.column(), "statement", stream.current()); } if (style == "variable" && ((state.prevToken == "def" || (parserConfig.typeFirstDefinitions && typeBefore(stream, state, stream.start) && isTopScope(state.context) && stream.match(/^\s*\(/, false))))) style = "def"; if (hooks.token) { var result = hooks.token(stream, state, style); if (result !== undefined) style = result; } if (style == "def" && parserConfig.styleDefs === false) style = "variable"; state.startOfLine = false; state.prevToken = isDefKeyword ? "def" : style || curPunc; maybeEOL(stream, state); return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null || state.typeAtEndOfLine) return CodeMirror.Pass; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; if (parserConfig.dontIndentStatements) while (ctx.type == "statement" && parserConfig.dontIndentStatements.test(ctx.info)) ctx = ctx.prev if (hooks.indent) { var hook = hooks.indent(state, ctx, textAfter); if (typeof hook == "number") return hook } var closing = firstChar == ctx.type; var switchBlock = ctx.prev && ctx.prev.info == "switch"; if (parserConfig.allmanIndentation && /[{(]/.test(firstChar)) { while (ctx.type != "top" && ctx.type != "}") ctx = ctx.prev return ctx.indented } if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); if (ctx.align && (!dontAlignCalls || ctx.type != ")")) return ctx.column + (closing ? 0 : 1); if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit; return ctx.indented + (closing ? 0 : indentUnit) + (!closing && switchBlock && !/^(?:case|default)\b/.test(textAfter) ? indentUnit : 0); }, electricInput: indentSwitch ? /^\s*(?:case .*?:|default:|\{\}?|\})$/ : /^\s*[{}]$/, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function contains(words, word) { if (typeof words === "function") { return words(word); } else { return words.propertyIsEnumerable(word); } } var cKeywords = "auto if break case register continue return default do sizeof " + "static else struct switch extern typedef union for goto while enum const volatile"; var cTypes = "int long char short double float unsigned signed void size_t ptrdiff_t"; function cppHook(stream, state) { if (!state.startOfLine) return false for (var ch, next = null; ch = stream.peek();) { if (ch == "\\" && stream.match(/^.$/)) { next = cppHook break } else if (ch == "/" && stream.match(/^\/[\/\*]/, false)) { break } stream.next() } state.tokenize = next return "meta" } function pointerHook(_stream, state) { if (state.prevToken == "variable-3") return "variable-3"; return false; } function cpp14Literal(stream) { stream.eatWhile(/[\w\.']/); return "number"; } function cpp11StringHook(stream, state) { stream.backUp(1); // Raw strings. if (stream.match(/(R|u8R|uR|UR|LR)/)) { var match = stream.match(/"([^\s\\()]{0,16})\(/); if (!match) { return false; } state.cpp11RawStringDelim = match[1]; state.tokenize = tokenRawString; return tokenRawString(stream, state); } // Unicode strings/chars. if (stream.match(/(u8|u|U|L)/)) { if (stream.match(/["']/, /* eat */ false)) { return "string"; } return false; } // Ignore this hook. stream.next(); return false; } function cppLooksLikeConstructor(word) { var lastTwo = /(\w+)::(\w+)$/.exec(word); return lastTwo && lastTwo[1] == lastTwo[2]; } // C#-style strings where "" escapes a quote. function tokenAtString(stream, state) { var next; while ((next = stream.next()) != null) { if (next == '"' && !stream.eat('"')) { state.tokenize = null; break; } } return "string"; } // C++11 raw string literal is "( anything )", where // can be a string up to 16 characters long. function tokenRawString(stream, state) { // Escape characters that have special regex meanings. var delim = state.cpp11RawStringDelim.replace(/[^\w\s]/g, '\\$&'); var match = stream.match(new RegExp(".*?\\)" + delim + '"')); if (match) state.tokenize = null; else stream.skipToEnd(); return "string"; } function def(mimes, mode) { if (typeof mimes == "string") mimes = [mimes]; var words = []; function add(obj) { if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop)) words.push(prop); } add(mode.keywords); add(mode.types); add(mode.builtin); add(mode.atoms); if (words.length) { mode.helperType = mimes[0]; CodeMirror.registerHelper("hintWords", mimes[0], words); } for (var i = 0; i < mimes.length; ++i) CodeMirror.defineMIME(mimes[i], mode); } def(["text/x-csrc", "text/x-c", "text/x-chdr"], { name: "clike", keywords: words(cKeywords), types: words(cTypes + " bool _Complex _Bool float_t double_t intptr_t intmax_t " + "int8_t int16_t int32_t int64_t uintptr_t uintmax_t uint8_t uint16_t " + "uint32_t uint64_t"), blockKeywords: words("case do else for if switch while struct"), defKeywords: words("struct"), typeFirstDefinitions: true, atoms: words("null true false"), hooks: {"#": cppHook, "*": pointerHook}, modeProps: {fold: ["brace", "include"]} }); def(["text/x-c++src", "text/x-c++hdr"], { name: "clike", keywords: words(cKeywords + " asm dynamic_cast namespace reinterpret_cast try explicit new " + "static_cast typeid catch operator template typename class friend private " + "this using const_cast inline public throw virtual delete mutable protected " + "alignas alignof constexpr decltype nullptr noexcept thread_local final " + "static_assert override"), types: words(cTypes + " bool wchar_t"), blockKeywords: words("catch class do else finally for if struct switch try while"), defKeywords: words("class namespace struct enum union"), typeFirstDefinitions: true, atoms: words("true false null"), dontIndentStatements: /^template$/, hooks: { "#": cppHook, "*": pointerHook, "u": cpp11StringHook, "U": cpp11StringHook, "L": cpp11StringHook, "R": cpp11StringHook, "0": cpp14Literal, "1": cpp14Literal, "2": cpp14Literal, "3": cpp14Literal, "4": cpp14Literal, "5": cpp14Literal, "6": cpp14Literal, "7": cpp14Literal, "8": cpp14Literal, "9": cpp14Literal, token: function(stream, state, style) { if (style == "variable" && stream.peek() == "(" && (state.prevToken == ";" || state.prevToken == null || state.prevToken == "}") && cppLooksLikeConstructor(stream.current())) return "def"; } }, namespaceSeparator: "::", modeProps: {fold: ["brace", "include"]} }); def("text/x-java", { name: "clike", keywords: words("abstract assert break case catch class const continue default " + "do else enum extends final finally float for goto if implements import " + "instanceof interface native new package private protected public " + "return static strictfp super switch synchronized this throw throws transient " + "try volatile while"), types: words("byte short int long float double boolean char void Boolean Byte Character Double Float " + "Integer Long Number Object Short String StringBuffer StringBuilder Void"), blockKeywords: words("catch class do else finally for if switch try while"), defKeywords: words("class interface package enum"), typeFirstDefinitions: true, atoms: words("true false null"), endStatement: /^[;:]$/, number: /^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+\.?\d*|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i, hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; } }, modeProps: {fold: ["brace", "import"]} }); def("text/x-csharp", { name: "clike", keywords: words("abstract as async await base break case catch checked class const continue" + " default delegate do else enum event explicit extern finally fixed for" + " foreach goto if implicit in interface internal is lock namespace new" + " operator out override params private protected public readonly ref return sealed" + " sizeof stackalloc static struct switch this throw try typeof unchecked" + " unsafe using virtual void volatile while add alias ascending descending dynamic from get" + " global group into join let orderby partial remove select set value var yield"), types: words("Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func" + " Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32" + " UInt64 bool byte char decimal double short int long object" + " sbyte float string ushort uint ulong"), blockKeywords: words("catch class do else finally for foreach if struct switch try while"), defKeywords: words("class interface namespace struct var"), typeFirstDefinitions: true, atoms: words("true false null"), hooks: { "@": function(stream, state) { if (stream.eat('"')) { state.tokenize = tokenAtString; return tokenAtString(stream, state); } stream.eatWhile(/[\w\$_]/); return "meta"; } } }); function tokenTripleString(stream, state) { var escaped = false; while (!stream.eol()) { if (!escaped && stream.match('"""')) { state.tokenize = null; break; } escaped = stream.next() == "\\" && !escaped; } return "string"; } def("text/x-scala", { name: "clike", keywords: words( /* scala */ "abstract case catch class def do else extends final finally for forSome if " + "implicit import lazy match new null object override package private protected return " + "sealed super this throw trait try type val var while with yield _ : = => <- <: " + "<% >: # @ " + /* package scala */ "assert assume require print println printf readLine readBoolean readByte readShort " + "readChar readInt readLong readFloat readDouble " + ":: #:: " ), types: words( "AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either " + "Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable " + "Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering " + "Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder " + "StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector " + /* package java.lang */ "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void" ), multiLineStrings: true, blockKeywords: words("catch class do else finally for forSome if match switch try while"), defKeywords: words("class def object package trait type val var"), atoms: words("true false null"), indentStatements: false, indentSwitch: false, hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; }, '"': function(stream, state) { if (!stream.match('""')) return false; state.tokenize = tokenTripleString; return state.tokenize(stream, state); }, "'": function(stream) { stream.eatWhile(/[\w\$_\xa1-\uffff]/); return "atom"; }, "=": function(stream, state) { var cx = state.context if (cx.type == "}" && cx.align && stream.eat(">")) { state.context = new Context(cx.indented, cx.column, cx.type, cx.info, null, cx.prev) return "operator" } else { return false } } }, modeProps: {closeBrackets: {triples: '"'}} }); function tokenKotlinString(tripleString){ return function (stream, state) { var escaped = false, next, end = false; while (!stream.eol()) { if (!tripleString && !escaped && stream.match('"') ) {end = true; break;} if (tripleString && stream.match('"""')) {end = true; break;} next = stream.next(); if(!escaped && next == "$" && stream.match('{')) stream.skipTo("}"); escaped = !escaped && next == "\\" && !tripleString; } if (end || !tripleString) state.tokenize = null; return "string"; } } def("text/x-kotlin", { name: "clike", keywords: words( /*keywords*/ "package as typealias class interface this super val " + "var fun for is in This throw return " + "break continue object if else while do try when !in !is as? " + /*soft keywords*/ "file import where by get set abstract enum open inner override private public internal " + "protected catch finally out final vararg reified dynamic companion constructor init " + "sealed field property receiver param sparam lateinit data inline noinline tailrec " + "external annotation crossinline const operator infix" ), types: words( /* package java.lang */ "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void" ), intendSwitch: false, indentStatements: false, multiLineStrings: true, blockKeywords: words("catch class do else finally for if where try while enum"), defKeywords: words("class val var object package interface fun"), atoms: words("true false null this"), hooks: { '"': function(stream, state) { state.tokenize = tokenKotlinString(stream.match('""')); return state.tokenize(stream, state); } }, modeProps: {closeBrackets: {triples: '"'}} }); def(["x-shader/x-vertex", "x-shader/x-fragment"], { name: "clike", keywords: words("sampler1D sampler2D sampler3D samplerCube " + "sampler1DShadow sampler2DShadow " + "const attribute uniform varying " + "break continue discard return " + "for while do if else struct " + "in out inout"), types: words("float int bool void " + "vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 " + "mat2 mat3 mat4"), blockKeywords: words("for while do if else struct"), builtin: words("radians degrees sin cos tan asin acos atan " + "pow exp log exp2 sqrt inversesqrt " + "abs sign floor ceil fract mod min max clamp mix step smoothstep " + "length distance dot cross normalize ftransform faceforward " + "reflect refract matrixCompMult " + "lessThan lessThanEqual greaterThan greaterThanEqual " + "equal notEqual any all not " + "texture1D texture1DProj texture1DLod texture1DProjLod " + "texture2D texture2DProj texture2DLod texture2DProjLod " + "texture3D texture3DProj texture3DLod texture3DProjLod " + "textureCube textureCubeLod " + "shadow1D shadow2D shadow1DProj shadow2DProj " + "shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod " + "dFdx dFdy fwidth " + "noise1 noise2 noise3 noise4"), atoms: words("true false " + "gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex " + "gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 " + "gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 " + "gl_FogCoord gl_PointCoord " + "gl_Position gl_PointSize gl_ClipVertex " + "gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor " + "gl_TexCoord gl_FogFragCoord " + "gl_FragCoord gl_FrontFacing " + "gl_FragData gl_FragDepth " + "gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix " + "gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse " + "gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse " + "gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose " + "gl_ProjectionMatrixInverseTranspose " + "gl_ModelViewProjectionMatrixInverseTranspose " + "gl_TextureMatrixInverseTranspose " + "gl_NormalScale gl_DepthRange gl_ClipPlane " + "gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel " + "gl_FrontLightModelProduct gl_BackLightModelProduct " + "gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ " + "gl_FogParameters " + "gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords " + "gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats " + "gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits " + "gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits " + "gl_MaxDrawBuffers"), indentSwitch: false, hooks: {"#": cppHook}, modeProps: {fold: ["brace", "include"]} }); def("text/x-nesc", { name: "clike", keywords: words(cKeywords + "as atomic async call command component components configuration event generic " + "implementation includes interface module new norace nx_struct nx_union post provides " + "signal task uses abstract extends"), types: words(cTypes), blockKeywords: words("case do else for if switch while struct"), atoms: words("null true false"), hooks: {"#": cppHook}, modeProps: {fold: ["brace", "include"]} }); def("text/x-objectivec", { name: "clike", keywords: words(cKeywords + "inline restrict _Bool _Complex _Imaginary BOOL Class bycopy byref id IMP in " + "inout nil oneway out Protocol SEL self super atomic nonatomic retain copy readwrite readonly"), types: words(cTypes), atoms: words("YES NO NULL NILL ON OFF true false"), hooks: { "@": function(stream) { stream.eatWhile(/[\w\$]/); return "keyword"; }, "#": cppHook, indent: function(_state, ctx, textAfter) { if (ctx.type == "statement" && /^@\w/.test(textAfter)) return ctx.indented } }, modeProps: {fold: "brace"} }); def("text/x-squirrel", { name: "clike", keywords: words("base break clone continue const default delete enum extends function in class" + " foreach local resume return this throw typeof yield constructor instanceof static"), types: words(cTypes), blockKeywords: words("case catch class else for foreach if switch try while"), defKeywords: words("function local class"), typeFirstDefinitions: true, atoms: words("true false null"), hooks: {"#": cppHook}, modeProps: {fold: ["brace", "include"]} }); // Ceylon Strings need to deal with interpolation var stringTokenizer = null; function tokenCeylonString(type) { return function(stream, state) { var escaped = false, next, end = false; while (!stream.eol()) { if (!escaped && stream.match('"') && (type == "single" || stream.match('""'))) { end = true; break; } if (!escaped && stream.match('``')) { stringTokenizer = tokenCeylonString(type); end = true; break; } next = stream.next(); escaped = type == "single" && !escaped && next == "\\"; } if (end) state.tokenize = null; return "string"; } } def("text/x-ceylon", { name: "clike", keywords: words("abstracts alias assembly assert assign break case catch class continue dynamic else" + " exists extends finally for function given if import in interface is let module new" + " nonempty object of out outer package return satisfies super switch then this throw" + " try value void while"), types: function(word) { // In Ceylon all identifiers that start with an uppercase are types var first = word.charAt(0); return (first === first.toUpperCase() && first !== first.toLowerCase()); }, blockKeywords: words("case catch class dynamic else finally for function if interface module new object switch try while"), defKeywords: words("class dynamic function interface module object package value"), builtin: words("abstract actual aliased annotation by default deprecated doc final formal late license" + " native optional sealed see serializable shared suppressWarnings tagged throws variable"), isPunctuationChar: /[\[\]{}\(\),;\:\.`]/, isOperatorChar: /[+\-*&%=<>!?|^~:\/]/, numberStart: /[\d#$]/, number: /^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i, multiLineStrings: true, typeFirstDefinitions: true, atoms: words("true false null larger smaller equal empty finished"), indentSwitch: false, styleDefs: false, hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; }, '"': function(stream, state) { state.tokenize = tokenCeylonString(stream.match('""') ? "triple" : "single"); return state.tokenize(stream, state); }, '`': function(stream, state) { if (!stringTokenizer || !stream.match('`')) return false; state.tokenize = stringTokenizer; stringTokenizer = null; return state.tokenize(stream, state); }, "'": function(stream) { stream.eatWhile(/[\w\$_\xa1-\uffff]/); return "atom"; }, token: function(_stream, state, style) { if ((style == "variable" || style == "variable-3") && state.prevToken == ".") { return "variable-2"; } } }, modeProps: { fold: ["brace", "import"], closeBrackets: {triples: '"'} } }); }); application/library/codemirror/mode/cmake/cmake.js000064400000005050146731177160016317 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("cmake", function () { var variable_regex = /({)?[a-zA-Z0-9_]+(})?/; function tokenString(stream, state) { var current, prev, found_var = false; while (!stream.eol() && (current = stream.next()) != state.pending) { if (current === '$' && prev != '\\' && state.pending == '"') { found_var = true; break; } prev = current; } if (found_var) { stream.backUp(1); } if (current == state.pending) { state.continueString = false; } else { state.continueString = true; } return "string"; } function tokenize(stream, state) { var ch = stream.next(); // Have we found a variable? if (ch === '$') { if (stream.match(variable_regex)) { return 'variable-2'; } return 'variable'; } // Should we still be looking for the end of a string? if (state.continueString) { // If so, go through the loop again stream.backUp(1); return tokenString(stream, state); } // Do we just have a function on our hands? // In 'cmake_minimum_required (VERSION 2.8.8)', 'cmake_minimum_required' is matched if (stream.match(/(\s+)?\w+\(/) || stream.match(/(\s+)?\w+\ \(/)) { stream.backUp(1); return 'def'; } if (ch == "#") { stream.skipToEnd(); return "comment"; } // Have we found a string? if (ch == "'" || ch == '"') { // Store the type (single or double) state.pending = ch; // Perform the looping function to find the end return tokenString(stream, state); } if (ch == '(' || ch == ')') { return 'bracket'; } if (ch.match(/[0-9]/)) { return 'number'; } stream.eatWhile(/[\w-]/); return null; } return { startState: function () { var state = {}; state.inDefinition = false; state.inInclude = false; state.continueString = false; state.pending = false; return state; }, token: function (stream, state) { if (stream.eatSpace()) return null; return tokenize(stream, state); } }; }); CodeMirror.defineMIME("text/x-cmake", "cmake"); }); application/library/codemirror/mode/cmake/index.html000064400000010070146731177160016674 0ustar00 CodeMirror: CMake mode

    CMake mode

    MIME types defined: text/x-cmake.

    application/library/codemirror/mode/pig/pig.js000064400000013262146731177160015521 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* * Pig Latin Mode for CodeMirror 2 * @author Prasanth Jayachandran * @link https://github.com/prasanthj/pig-codemirror-2 * This implementation is adapted from PL/SQL mode in CodeMirror 2. */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("pig", function(_config, parserConfig) { var keywords = parserConfig.keywords, builtins = parserConfig.builtins, types = parserConfig.types, multiLineStrings = parserConfig.multiLineStrings; var isOperatorChar = /[*+\-%<>=&?:\/!|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenComment(stream, state) { var isEnd = false; var ch; while(ch = stream.next()) { if(ch == "/" && isEnd) { state.tokenize = tokenBase; break; } isEnd = (ch == "*"); } return "comment"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = tokenBase; return "error"; }; } function tokenBase(stream, state) { var ch = stream.next(); // is a start of string? if (ch == '"' || ch == "'") return chain(stream, state, tokenString(ch)); // is it one of the special chars else if(/[\[\]{}\(\),;\.]/.test(ch)) return null; // is it a number? else if(/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } // multi line comment or operator else if (ch == "/") { if (stream.eat("*")) { return chain(stream, state, tokenComment); } else { stream.eatWhile(isOperatorChar); return "operator"; } } // single line comment or operator else if (ch=="-") { if(stream.eat("-")){ stream.skipToEnd(); return "comment"; } else { stream.eatWhile(isOperatorChar); return "operator"; } } // is it an operator else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } else { // get the while word stream.eatWhile(/[\w\$_]/); // is it one of the listed keywords? if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { //keywords can be used as variables like flatten(group), group.$0 etc.. if (!stream.eat(")") && !stream.eat(".")) return "keyword"; } // is it one of the builtin functions? if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) return "variable-2"; // is it one of the listed types? if (types && types.propertyIsEnumerable(stream.current().toUpperCase())) return "variable-3"; // default is a 'variable' return "variable"; } } // Interface return { startState: function() { return { tokenize: tokenBase, startOfLine: true }; }, token: function(stream, state) { if(stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; } }; }); (function() { function keywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } // builtin funcs taken from trunk revision 1303237 var pBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL " + "CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS " + "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG " + "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN " + "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER " + "ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS " + "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA " + "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE " + "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG " + "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER "; // taken from QueryLexer.g var pKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP " + "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL " + "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE " + "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE " + "NEQ MATCHES TRUE FALSE DUMP"; // data types var pTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP "; CodeMirror.defineMIME("text/x-pig", { name: "pig", builtins: keywords(pBuiltins), keywords: keywords(pKeywords), types: keywords(pTypes) }); CodeMirror.registerHelper("hintWords", "pig", (pBuiltins + pTypes + pKeywords).split(" ")); }()); }); application/library/codemirror/mode/pig/index.html000064400000002703146731177160016377 0ustar00 CodeMirror: Pig Latin mode

    Pig Latin mode

    Simple mode that handles Pig Latin language.

    MIME type defined: text/x-pig (PIG code)

    application/library/codemirror/mode/handlebars/handlebars.js000064400000004174146731177160020373 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/simple"), require("../../addon/mode/multiplex")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../addon/mode/simple", "../../addon/mode/multiplex"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineSimpleMode("handlebars-tags", { start: [ { regex: /\{\{!--/, push: "dash_comment", token: "comment" }, { regex: /\{\{!/, push: "comment", token: "comment" }, { regex: /\{\{/, push: "handlebars", token: "tag" } ], handlebars: [ { regex: /\}\}/, pop: true, token: "tag" }, // Double and single quotes { regex: /"(?:[^\\"]|\\.)*"?/, token: "string" }, { regex: /'(?:[^\\']|\\.)*'?/, token: "string" }, // Handlebars keywords { regex: />|[#\/]([A-Za-z_]\w*)/, token: "keyword" }, { regex: /(?:else|this)\b/, token: "keyword" }, // Numeral { regex: /\d+/i, token: "number" }, // Atoms like = and . { regex: /=|~|@|true|false/, token: "atom" }, // Paths { regex: /(?:\.\.\/)*(?:[A-Za-z_][\w\.]*)+/, token: "variable-2" } ], dash_comment: [ { regex: /--\}\}/, pop: true, token: "comment" }, // Commented code { regex: /./, token: "comment"} ], comment: [ { regex: /\}\}/, pop: true, token: "comment" }, { regex: /./, token: "comment" } ] }); CodeMirror.defineMode("handlebars", function(config, parserConfig) { var handlebars = CodeMirror.getMode(config, "handlebars-tags"); if (!parserConfig || !parserConfig.base) return handlebars; return CodeMirror.multiplexingMode( CodeMirror.getMode(config, parserConfig.base), {open: "{{", close: "}}", mode: handlebars, parseDelimiters: true} ); }); CodeMirror.defineMIME("text/x-handlebars-template", "handlebars"); }); application/library/codemirror/mode/handlebars/index.html000064400000004224146731177160017723 0ustar00 CodeMirror: Handlebars mode

    Handlebars

    Handlebars syntax highlighting for CodeMirror.

    MIME types defined: text/x-handlebars-template

    Supported options: base to set the mode to wrap. For example, use

    mode: {name: "handlebars", base: "text/html"}

    to highlight an HTML template.

    application/library/codemirror/mode/gfm/gfm.js000064400000012021146731177160015475 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../markdown/markdown"), require("../../addon/mode/overlay")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../markdown/markdown", "../../addon/mode/overlay"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var urlRE = /^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\.beep|\.lwz|\.xpc|\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\.beeps?|xmpp|xri|ymsgr|z39\.50[rs]?):(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i CodeMirror.defineMode("gfm", function(config, modeConfig) { var codeDepth = 0; function blankLine(state) { state.code = false; return null; } var gfmOverlay = { startState: function() { return { code: false, codeBlock: false, ateSpace: false }; }, copyState: function(s) { return { code: s.code, codeBlock: s.codeBlock, ateSpace: s.ateSpace }; }, token: function(stream, state) { state.combineTokens = null; // Hack to prevent formatting override inside code blocks (block and inline) if (state.codeBlock) { if (stream.match(/^```+/)) { state.codeBlock = false; return null; } stream.skipToEnd(); return null; } if (stream.sol()) { state.code = false; } if (stream.sol() && stream.match(/^```+/)) { stream.skipToEnd(); state.codeBlock = true; return null; } // If this block is changed, it may need to be updated in Markdown mode if (stream.peek() === '`') { stream.next(); var before = stream.pos; stream.eatWhile('`'); var difference = 1 + stream.pos - before; if (!state.code) { codeDepth = difference; state.code = true; } else { if (difference === codeDepth) { // Must be exact state.code = false; } } return null; } else if (state.code) { stream.next(); return null; } // Check if space. If so, links can be formatted later on if (stream.eatSpace()) { state.ateSpace = true; return null; } if (stream.sol() || state.ateSpace) { state.ateSpace = false; if (modeConfig.gitHubSpice !== false) { if(stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/)) { // User/Project@SHA // User@SHA // SHA state.combineTokens = true; return "link"; } else if (stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/)) { // User/Project#Num // User#Num // #Num state.combineTokens = true; return "link"; } } } if (stream.match(urlRE) && stream.string.slice(stream.start - 2, stream.start) != "](" && (stream.start == 0 || /\W/.test(stream.string.charAt(stream.start - 1)))) { // URLs // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine // And then limited url schemes to the CommonMark list, so foo:bar isn't matched as a URL state.combineTokens = true; return "link"; } stream.next(); return null; }, blankLine: blankLine }; var markdownConfig = { underscoresBreakWords: false, taskLists: true, fencedCodeBlocks: '```', strikethrough: true }; for (var attr in modeConfig) { markdownConfig[attr] = modeConfig[attr]; } markdownConfig.name = "markdown"; return CodeMirror.overlayMode(CodeMirror.getMode(config, markdownConfig), gfmOverlay); }, "markdown"); CodeMirror.defineMIME("text/x-gfm", "gfm"); }); application/library/codemirror/mode/gfm/test.js000064400000016624146731177160015720 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4}, "gfm"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } var modeHighlightFormatting = CodeMirror.getMode({tabSize: 4}, {name: "gfm", highlightFormatting: true}); function FT(name) { test.mode(name, modeHighlightFormatting, Array.prototype.slice.call(arguments, 1)); } FT("codeBackticks", "[comment&formatting&formatting-code `][comment foo][comment&formatting&formatting-code `]"); FT("doubleBackticks", "[comment&formatting&formatting-code ``][comment foo ` bar][comment&formatting&formatting-code ``]"); FT("codeBlock", "[comment&formatting&formatting-code-block ```css]", "[tag foo]", "[comment&formatting&formatting-code-block ```]"); FT("taskList", "[variable-2&formatting&formatting-list&formatting-list-ul - ][meta&formatting&formatting-task [ ]]][variable-2 foo]", "[variable-2&formatting&formatting-list&formatting-list-ul - ][property&formatting&formatting-task [x]]][variable-2 foo]"); FT("formatting_strikethrough", "[strikethrough&formatting&formatting-strikethrough ~~][strikethrough foo][strikethrough&formatting&formatting-strikethrough ~~]"); FT("formatting_strikethrough", "foo [strikethrough&formatting&formatting-strikethrough ~~][strikethrough bar][strikethrough&formatting&formatting-strikethrough ~~]"); MT("emInWordAsterisk", "foo[em *bar*]hello"); MT("emInWordUnderscore", "foo_bar_hello"); MT("emStrongUnderscore", "[strong __][em&strong _foo__][em _] bar"); MT("fencedCodeBlocks", "[comment ```]", "[comment foo]", "", "[comment ```]", "bar"); MT("fencedCodeBlockModeSwitching", "[comment ```javascript]", "[variable foo]", "", "[comment ```]", "bar"); MT("fencedCodeBlockModeSwitchingObjc", "[comment ```objective-c]", "[keyword @property] [variable NSString] [operator *] [variable foo];", "[comment ```]", "bar"); MT("fencedCodeBlocksNoTildes", "~~~", "foo", "~~~"); MT("taskListAsterisk", "[variable-2 * []] foo]", // Invalid; must have space or x between [] "[variable-2 * [ ]]bar]", // Invalid; must have space after ] "[variable-2 * [x]]hello]", // Invalid; must have space after ] "[variable-2 * ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links " [variable-3 * ][property [x]]][variable-3 foo]"); // Valid; can be nested MT("taskListPlus", "[variable-2 + []] foo]", // Invalid; must have space or x between [] "[variable-2 + [ ]]bar]", // Invalid; must have space after ] "[variable-2 + [x]]hello]", // Invalid; must have space after ] "[variable-2 + ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links " [variable-3 + ][property [x]]][variable-3 foo]"); // Valid; can be nested MT("taskListDash", "[variable-2 - []] foo]", // Invalid; must have space or x between [] "[variable-2 - [ ]]bar]", // Invalid; must have space after ] "[variable-2 - [x]]hello]", // Invalid; must have space after ] "[variable-2 - ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links " [variable-3 - ][property [x]]][variable-3 foo]"); // Valid; can be nested MT("taskListNumber", "[variable-2 1. []] foo]", // Invalid; must have space or x between [] "[variable-2 2. [ ]]bar]", // Invalid; must have space after ] "[variable-2 3. [x]]hello]", // Invalid; must have space after ] "[variable-2 4. ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links " [variable-3 1. ][property [x]]][variable-3 foo]"); // Valid; can be nested MT("SHA", "foo [link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] bar"); MT("SHAEmphasis", "[em *foo ][em&link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]"); MT("shortSHA", "foo [link be6a8cc] bar"); MT("tooShortSHA", "foo be6a8c bar"); MT("longSHA", "foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd22 bar"); MT("badSHA", "foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cg2 bar"); MT("userSHA", "foo [link bar@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] hello"); MT("userSHAEmphasis", "[em *foo ][em&link bar@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]"); MT("userProjectSHA", "foo [link bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] world"); MT("userProjectSHAEmphasis", "[em *foo ][em&link bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]"); MT("num", "foo [link #1] bar"); MT("numEmphasis", "[em *foo ][em&link #1][em *]"); MT("badNum", "foo #1bar hello"); MT("userNum", "foo [link bar#1] hello"); MT("userNumEmphasis", "[em *foo ][em&link bar#1][em *]"); MT("userProjectNum", "foo [link bar/hello#1] world"); MT("userProjectNumEmphasis", "[em *foo ][em&link bar/hello#1][em *]"); MT("vanillaLink", "foo [link http://www.example.com/] bar"); MT("vanillaLinkNoScheme", "foo [link www.example.com] bar"); MT("vanillaLinkHttps", "foo [link https://www.example.com/] bar"); MT("vanillaLinkDataSchema", "foo [link data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==] bar"); MT("vanillaLinkPunctuation", "foo [link http://www.example.com/]. bar"); MT("vanillaLinkExtension", "foo [link http://www.example.com/index.html] bar"); MT("vanillaLinkEmphasis", "foo [em *][em&link http://www.example.com/index.html][em *] bar"); MT("notALink", "foo asfd:asdf bar"); MT("notALink", "[comment ```css]", "[tag foo] {[property color]:[keyword black];}", "[comment ```][link http://www.example.com/]"); MT("notALink", "[comment ``foo `bar` http://www.example.com/``] hello"); MT("notALink", "[comment `foo]", "[comment&link http://www.example.com/]", "[comment `] foo", "", "[link http://www.example.com/]"); MT("headerCodeBlockGithub", "[header&header-1 # heading]", "", "[comment ```]", "[comment code]", "[comment ```]", "", "Commit: [link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2]", "Issue: [link #1]", "Link: [link http://www.example.com/]"); MT("strikethrough", "[strikethrough ~~foo~~]"); MT("strikethroughWithStartingSpace", "~~ foo~~"); MT("strikethroughUnclosedStrayTildes", "[strikethrough ~~foo~~~]"); MT("strikethroughUnclosedStrayTildes", "[strikethrough ~~foo ~~]"); MT("strikethroughUnclosedStrayTildes", "[strikethrough ~~foo ~~ bar]"); MT("strikethroughUnclosedStrayTildes", "[strikethrough ~~foo ~~ bar~~]hello"); MT("strikethroughOneLetter", "[strikethrough ~~a~~]"); MT("strikethroughWrapped", "[strikethrough ~~foo]", "[strikethrough foo~~]"); MT("strikethroughParagraph", "[strikethrough ~~foo]", "", "foo[strikethrough ~~bar]"); MT("strikethroughEm", "[strikethrough ~~foo][em&strikethrough *bar*][strikethrough ~~]"); MT("strikethroughEm", "[em *][em&strikethrough ~~foo~~][em *]"); MT("strikethroughStrong", "[strikethrough ~~][strong&strikethrough **foo**][strikethrough ~~]"); MT("strikethroughStrong", "[strong **][strong&strikethrough ~~foo~~][strong **]"); })(); application/library/codemirror/mode/gfm/index.html000064400000005027146731177160016373 0ustar00 CodeMirror: GFM mode

    GFM mode

    Optionally depends on other modes for properly highlighted code blocks.

    Parsing/Highlighting Tests: normal, verbose.

    application/library/codemirror/mode/cobol/index.html000064400000017624146731177160016726 0ustar00 CodeMirror: COBOL mode

    COBOL mode

    Select Theme Select Font Size

    application/library/codemirror/mode/cobol/cobol.js000064400000024060146731177160016355 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Author: Gautam Mehta * Branched from CodeMirror's Scheme mode */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("cobol", function () { var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", ATOM = "atom", NUMBER = "number", KEYWORD = "keyword", MODTAG = "header", COBOLLINENUM = "def", PERIOD = "link"; function makeKeywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var atoms = makeKeywords("TRUE FALSE ZEROES ZEROS ZERO SPACES SPACE LOW-VALUE LOW-VALUES "); var keywords = makeKeywords( "ACCEPT ACCESS ACQUIRE ADD ADDRESS " + "ADVANCING AFTER ALIAS ALL ALPHABET " + "ALPHABETIC ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED " + "ALSO ALTER ALTERNATE AND ANY " + "ARE AREA AREAS ARITHMETIC ASCENDING " + "ASSIGN AT ATTRIBUTE AUTHOR AUTO " + "AUTO-SKIP AUTOMATIC B-AND B-EXOR B-LESS " + "B-NOT B-OR BACKGROUND-COLOR BACKGROUND-COLOUR BEEP " + "BEFORE BELL BINARY BIT BITS " + "BLANK BLINK BLOCK BOOLEAN BOTTOM " + "BY CALL CANCEL CD CF " + "CH CHARACTER CHARACTERS CLASS CLOCK-UNITS " + "CLOSE COBOL CODE CODE-SET COL " + "COLLATING COLUMN COMMA COMMIT COMMITMENT " + "COMMON COMMUNICATION COMP COMP-0 COMP-1 " + "COMP-2 COMP-3 COMP-4 COMP-5 COMP-6 " + "COMP-7 COMP-8 COMP-9 COMPUTATIONAL COMPUTATIONAL-0 " + "COMPUTATIONAL-1 COMPUTATIONAL-2 COMPUTATIONAL-3 COMPUTATIONAL-4 COMPUTATIONAL-5 " + "COMPUTATIONAL-6 COMPUTATIONAL-7 COMPUTATIONAL-8 COMPUTATIONAL-9 COMPUTE " + "CONFIGURATION CONNECT CONSOLE CONTAINED CONTAINS " + "CONTENT CONTINUE CONTROL CONTROL-AREA CONTROLS " + "CONVERTING COPY CORR CORRESPONDING COUNT " + "CRT CRT-UNDER CURRENCY CURRENT CURSOR " + "DATA DATE DATE-COMPILED DATE-WRITTEN DAY " + "DAY-OF-WEEK DB DB-ACCESS-CONTROL-KEY DB-DATA-NAME DB-EXCEPTION " + "DB-FORMAT-NAME DB-RECORD-NAME DB-SET-NAME DB-STATUS DBCS " + "DBCS-EDITED DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE " + "DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING " + "DECIMAL-POINT DECLARATIVES DEFAULT DELETE DELIMITED " + "DELIMITER DEPENDING DESCENDING DESCRIBED DESTINATION " + "DETAIL DISABLE DISCONNECT DISPLAY DISPLAY-1 " + "DISPLAY-2 DISPLAY-3 DISPLAY-4 DISPLAY-5 DISPLAY-6 " + "DISPLAY-7 DISPLAY-8 DISPLAY-9 DIVIDE DIVISION " + "DOWN DROP DUPLICATE DUPLICATES DYNAMIC " + "EBCDIC EGI EJECT ELSE EMI " + "EMPTY EMPTY-CHECK ENABLE END END. END-ACCEPT END-ACCEPT. " + "END-ADD END-CALL END-COMPUTE END-DELETE END-DISPLAY " + "END-DIVIDE END-EVALUATE END-IF END-INVOKE END-MULTIPLY " + "END-OF-PAGE END-PERFORM END-READ END-RECEIVE END-RETURN " + "END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT " + "END-UNSTRING END-WRITE END-XML ENTER ENTRY " + "ENVIRONMENT EOP EQUAL EQUALS ERASE " + "ERROR ESI EVALUATE EVERY EXCEEDS " + "EXCEPTION EXCLUSIVE EXIT EXTEND EXTERNAL " + "EXTERNALLY-DESCRIBED-KEY FD FETCH FILE FILE-CONTROL " + "FILE-STREAM FILES FILLER FINAL FIND " + "FINISH FIRST FOOTING FOR FOREGROUND-COLOR " + "FOREGROUND-COLOUR FORMAT FREE FROM FULL " + "FUNCTION GENERATE GET GIVING GLOBAL " + "GO GOBACK GREATER GROUP HEADING " + "HIGH-VALUE HIGH-VALUES HIGHLIGHT I-O I-O-CONTROL " + "ID IDENTIFICATION IF IN INDEX " + "INDEX-1 INDEX-2 INDEX-3 INDEX-4 INDEX-5 " + "INDEX-6 INDEX-7 INDEX-8 INDEX-9 INDEXED " + "INDIC INDICATE INDICATOR INDICATORS INITIAL " + "INITIALIZE INITIATE INPUT INPUT-OUTPUT INSPECT " + "INSTALLATION INTO INVALID INVOKE IS " + "JUST JUSTIFIED KANJI KEEP KEY " + "LABEL LAST LD LEADING LEFT " + "LEFT-JUSTIFY LENGTH LENGTH-CHECK LESS LIBRARY " + "LIKE LIMIT LIMITS LINAGE LINAGE-COUNTER " + "LINE LINE-COUNTER LINES LINKAGE LOCAL-STORAGE " + "LOCALE LOCALLY LOCK " + "MEMBER MEMORY MERGE MESSAGE METACLASS " + "MODE MODIFIED MODIFY MODULES MOVE " + "MULTIPLE MULTIPLY NATIONAL NATIVE NEGATIVE " + "NEXT NO NO-ECHO NONE NOT " + "NULL NULL-KEY-MAP NULL-MAP NULLS NUMBER " + "NUMERIC NUMERIC-EDITED OBJECT OBJECT-COMPUTER OCCURS " + "OF OFF OMITTED ON ONLY " + "OPEN OPTIONAL OR ORDER ORGANIZATION " + "OTHER OUTPUT OVERFLOW OWNER PACKED-DECIMAL " + "PADDING PAGE PAGE-COUNTER PARSE PERFORM " + "PF PH PIC PICTURE PLUS " + "POINTER POSITION POSITIVE PREFIX PRESENT " + "PRINTING PRIOR PROCEDURE PROCEDURE-POINTER PROCEDURES " + "PROCEED PROCESS PROCESSING PROGRAM PROGRAM-ID " + "PROMPT PROTECTED PURGE QUEUE QUOTE " + "QUOTES RANDOM RD READ READY " + "REALM RECEIVE RECONNECT RECORD RECORD-NAME " + "RECORDS RECURSIVE REDEFINES REEL REFERENCE " + "REFERENCE-MONITOR REFERENCES RELATION RELATIVE RELEASE " + "REMAINDER REMOVAL RENAMES REPEATED REPLACE " + "REPLACING REPORT REPORTING REPORTS REPOSITORY " + "REQUIRED RERUN RESERVE RESET RETAINING " + "RETRIEVAL RETURN RETURN-CODE RETURNING REVERSE-VIDEO " + "REVERSED REWIND REWRITE RF RH " + "RIGHT RIGHT-JUSTIFY ROLLBACK ROLLING ROUNDED " + "RUN SAME SCREEN SD SEARCH " + "SECTION SECURE SECURITY SEGMENT SEGMENT-LIMIT " + "SELECT SEND SENTENCE SEPARATE SEQUENCE " + "SEQUENTIAL SET SHARED SIGN SIZE " + "SKIP1 SKIP2 SKIP3 SORT SORT-MERGE " + "SORT-RETURN SOURCE SOURCE-COMPUTER SPACE-FILL " + "SPECIAL-NAMES STANDARD STANDARD-1 STANDARD-2 " + "START STARTING STATUS STOP STORE " + "STRING SUB-QUEUE-1 SUB-QUEUE-2 SUB-QUEUE-3 SUB-SCHEMA " + "SUBFILE SUBSTITUTE SUBTRACT SUM SUPPRESS " + "SYMBOLIC SYNC SYNCHRONIZED SYSIN SYSOUT " + "TABLE TALLYING TAPE TENANT TERMINAL " + "TERMINATE TEST TEXT THAN THEN " + "THROUGH THRU TIME TIMES TITLE " + "TO TOP TRAILING TRAILING-SIGN TRANSACTION " + "TYPE TYPEDEF UNDERLINE UNEQUAL UNIT " + "UNSTRING UNTIL UP UPDATE UPON " + "USAGE USAGE-MODE USE USING VALID " + "VALIDATE VALUE VALUES VARYING VLR " + "WAIT WHEN WHEN-COMPILED WITH WITHIN " + "WORDS WORKING-STORAGE WRITE XML XML-CODE " + "XML-EVENT XML-NTEXT XML-TEXT ZERO ZERO-FILL " ); var builtins = makeKeywords("- * ** / + < <= = > >= "); var tests = { digit: /\d/, digit_or_colon: /[\d:]/, hex: /[0-9a-f]/i, sign: /[+-]/, exponent: /e/i, keyword_char: /[^\s\(\[\;\)\]]/, symbol: /[\w*+\-]/ }; function isNumber(ch, stream){ // hex if ( ch === '0' && stream.eat(/x/i) ) { stream.eatWhile(tests.hex); return true; } // leading sign if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) { stream.eat(tests.sign); ch = stream.next(); } if ( tests.digit.test(ch) ) { stream.eat(ch); stream.eatWhile(tests.digit); if ( '.' == stream.peek()) { stream.eat('.'); stream.eatWhile(tests.digit); } if ( stream.eat(tests.exponent) ) { stream.eat(tests.sign); stream.eatWhile(tests.digit); } return true; } return false; } return { startState: function () { return { indentStack: null, indentation: 0, mode: false }; }, token: function (stream, state) { if (state.indentStack == null && stream.sol()) { // update indentation, but only if indentStack is empty state.indentation = 6 ; //stream.indentation(); } // skip spaces if (stream.eatSpace()) { return null; } var returnType = null; switch(state.mode){ case "string": // multi-line string parsing mode var next = false; while ((next = stream.next()) != null) { if (next == "\"" || next == "\'") { state.mode = false; break; } } returnType = STRING; // continue on in string mode break; default: // default parsing mode var ch = stream.next(); var col = stream.column(); if (col >= 0 && col <= 5) { returnType = COBOLLINENUM; } else if (col >= 72 && col <= 79) { stream.skipToEnd(); returnType = MODTAG; } else if (ch == "*" && col == 6) { // comment stream.skipToEnd(); // rest of the line is a comment returnType = COMMENT; } else if (ch == "\"" || ch == "\'") { state.mode = "string"; returnType = STRING; } else if (ch == "'" && !( tests.digit_or_colon.test(stream.peek()) )) { returnType = ATOM; } else if (ch == ".") { returnType = PERIOD; } else if (isNumber(ch,stream)){ returnType = NUMBER; } else { if (stream.current().match(tests.symbol)) { while (col < 71) { if (stream.eat(tests.symbol) === undefined) { break; } else { col++; } } } if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { returnType = KEYWORD; } else if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) { returnType = BUILTIN; } else if (atoms && atoms.propertyIsEnumerable(stream.current().toUpperCase())) { returnType = ATOM; } else returnType = null; } } return returnType; }, indent: function (state) { if (state.indentStack == null) return state.indentation; return state.indentStack.indent; } }; }); CodeMirror.defineMIME("text/x-cobol", "cobol"); }); application/library/codemirror/mode/mscgen/msgenny_test.js000064400000006031146731177160020152 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-msgenny"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "msgenny"); } MT("comments", "[comment // a single line comment]", "[comment # another single line comment /* and */ ignored here]", "[comment /* A multi-line comment even though it contains]", "[comment msc keywords and \"quoted text\"*/]"); MT("strings", "[string \"// a string\"]", "[string \"a string running over]", "[string two lines\"]", "[string \"with \\\"escaped quote\"]" ); MT("xù/ msgenny keywords classify as 'keyword'", "[keyword watermark]", "[keyword alt]","[keyword loop]","[keyword opt]","[keyword ref]","[keyword else]","[keyword break]","[keyword par]","[keyword seq]","[keyword assert]" ); MT("mscgen options classify as keyword", "[keyword hscale]", "[keyword width]", "[keyword arcgradient]", "[keyword wordwraparcs]" ); MT("mscgen arcs classify as keyword", "[keyword note]","[keyword abox]","[keyword rbox]","[keyword box]", "[keyword |||...---]", "[keyword ..--==::]", "[keyword ->]", "[keyword <-]", "[keyword <->]", "[keyword =>]", "[keyword <=]", "[keyword <=>]", "[keyword =>>]", "[keyword <<=]", "[keyword <<=>>]", "[keyword >>]", "[keyword <<]", "[keyword <<>>]", "[keyword -x]", "[keyword x-]", "[keyword -X]", "[keyword X-]", "[keyword :>]", "[keyword <:]", "[keyword <:>]" ); MT("within an attribute list, mscgen/ xù attributes classify as base", "[base [[label]", "[base idurl id url]", "[base linecolor linecolour textcolor textcolour textbgcolor textbgcolour]", "[base arclinecolor arclinecolour arctextcolor arctextcolour arctextbgcolor arctextbgcolour]", "[base arcskip]]]" ); MT("outside an attribute list, mscgen/ xù attributes classify as base", "[base label]", "[base idurl id url]", "[base linecolor linecolour textcolor textcolour textbgcolor textbgcolour]", "[base arclinecolor arclinecolour arctextcolor arctextcolour arctextbgcolor arctextbgcolour]", "[base arcskip]" ); MT("a typical program", "[comment # typical msgenny program]", "[keyword wordwraparcs][operator =][string \"true\"][base , ][keyword hscale][operator =][string \"0.8\"][base , ][keyword arcgradient][operator =][base 30;]", "[base a : ][string \"Entity A\"][base ,]", "[base b : Entity B,]", "[base c : Entity C;]", "[base a ][keyword =>>][base b: ][string \"Hello entity B\"][base ;]", "[base a ][keyword alt][base c][bracket {]", "[base a ][keyword <<][base b: ][string \"Here's an answer dude!\"][base ;]", "[keyword ---][base : ][string \"sorry, won't march - comm glitch\"]", "[base a ][keyword x-][base b: ][string \"Here's an answer dude! (won't arrive...)\"][base ;]", "[bracket }]", "[base c ][keyword :>][base *: What about me?;]" ); })(); application/library/codemirror/mode/mscgen/xu_test.js000064400000007150146731177160017131 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-xu"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "xu"); } MT("empty chart", "[keyword msc][bracket {]", "[base ]", "[bracket }]" ); MT("comments", "[comment // a single line comment]", "[comment # another single line comment /* and */ ignored here]", "[comment /* A multi-line comment even though it contains]", "[comment msc keywords and \"quoted text\"*/]"); MT("strings", "[string \"// a string\"]", "[string \"a string running over]", "[string two lines\"]", "[string \"with \\\"escaped quote\"]" ); MT("xù/ msgenny keywords classify as 'keyword'", "[keyword watermark]", "[keyword alt]","[keyword loop]","[keyword opt]","[keyword ref]","[keyword else]","[keyword break]","[keyword par]","[keyword seq]","[keyword assert]" ); MT("mscgen options classify as keyword", "[keyword hscale]", "[keyword width]", "[keyword arcgradient]", "[keyword wordwraparcs]" ); MT("mscgen arcs classify as keyword", "[keyword note]","[keyword abox]","[keyword rbox]","[keyword box]", "[keyword |||...---]", "[keyword ..--==::]", "[keyword ->]", "[keyword <-]", "[keyword <->]", "[keyword =>]", "[keyword <=]", "[keyword <=>]", "[keyword =>>]", "[keyword <<=]", "[keyword <<=>>]", "[keyword >>]", "[keyword <<]", "[keyword <<>>]", "[keyword -x]", "[keyword x-]", "[keyword -X]", "[keyword X-]", "[keyword :>]", "[keyword <:]", "[keyword <:>]" ); MT("within an attribute list, attributes classify as attribute", "[bracket [[][attribute label]", "[attribute id]","[attribute url]","[attribute idurl]", "[attribute linecolor]","[attribute linecolour]","[attribute textcolor]","[attribute textcolour]","[attribute textbgcolor]","[attribute textbgcolour]", "[attribute arclinecolor]","[attribute arclinecolour]","[attribute arctextcolor]","[attribute arctextcolour]","[attribute arctextbgcolor]","[attribute arctextbgcolour]", "[attribute arcskip][bracket ]]]" ); MT("outside an attribute list, attributes classify as base", "[base label]", "[base id]","[base url]","[base idurl]", "[base linecolor]","[base linecolour]","[base textcolor]","[base textcolour]","[base textbgcolor]","[base textbgcolour]", "[base arclinecolor]","[base arclinecolour]","[base arctextcolor]","[base arctextcolour]","[base arctextbgcolor]","[base arctextbgcolour]", "[base arcskip]" ); MT("a typical program", "[comment # typical mscgen program]", "[keyword msc][base ][bracket {]", "[keyword wordwraparcs][operator =][string \"true\"][keyword hscale][operator =][string \"0.8\"][keyword arcgradient][operator =][base 30;]", "[base a][bracket [[][attribute label][operator =][string \"Entity A\"][bracket ]]][base ,]", "[base b][bracket [[][attribute label][operator =][string \"Entity B\"][bracket ]]][base ,]", "[base c][bracket [[][attribute label][operator =][string \"Entity C\"][bracket ]]][base ;]", "[base a ][keyword =>>][base b][bracket [[][attribute label][operator =][string \"Hello entity B\"][bracket ]]][base ;]", "[base a ][keyword <<][base b][bracket [[][attribute label][operator =][string \"Here's an answer dude!\"][bracket ]]][base ;]", "[base c ][keyword :>][base *][bracket [[][attribute label][operator =][string \"What about me?\"][base , ][attribute textcolor][operator =][base red][bracket ]]][base ;]", "[bracket }]" ); })(); application/library/codemirror/mode/mscgen/index.html000064400000010327146731177160017075 0ustar00 CodeMirror: MscGen mode

    MscGen mode

    Xù mode

    MsGenny mode

    Simple mode for highlighting MscGen and two derived sequence chart languages.

    MIME types defined: text/x-mscgen text/x-xu text/x-msgenny

    application/library/codemirror/mode/mscgen/mscgen_test.js000064400000006777146731177160017767 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "mscgen"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("empty chart", "[keyword msc][bracket {]", "[base ]", "[bracket }]" ); MT("comments", "[comment // a single line comment]", "[comment # another single line comment /* and */ ignored here]", "[comment /* A multi-line comment even though it contains]", "[comment msc keywords and \"quoted text\"*/]"); MT("strings", "[string \"// a string\"]", "[string \"a string running over]", "[string two lines\"]", "[string \"with \\\"escaped quote\"]" ); MT("xù/ msgenny keywords classify as 'base'", "[base watermark]", "[base alt loop opt ref else break par seq assert]" ); MT("mscgen options classify as keyword", "[keyword hscale]", "[keyword width]", "[keyword arcgradient]", "[keyword wordwraparcs]" ); MT("mscgen arcs classify as keyword", "[keyword note]","[keyword abox]","[keyword rbox]","[keyword box]", "[keyword |||...---]", "[keyword ..--==::]", "[keyword ->]", "[keyword <-]", "[keyword <->]", "[keyword =>]", "[keyword <=]", "[keyword <=>]", "[keyword =>>]", "[keyword <<=]", "[keyword <<=>>]", "[keyword >>]", "[keyword <<]", "[keyword <<>>]", "[keyword -x]", "[keyword x-]", "[keyword -X]", "[keyword X-]", "[keyword :>]", "[keyword <:]", "[keyword <:>]" ); MT("within an attribute list, attributes classify as attribute", "[bracket [[][attribute label]", "[attribute id]","[attribute url]","[attribute idurl]", "[attribute linecolor]","[attribute linecolour]","[attribute textcolor]","[attribute textcolour]","[attribute textbgcolor]","[attribute textbgcolour]", "[attribute arclinecolor]","[attribute arclinecolour]","[attribute arctextcolor]","[attribute arctextcolour]","[attribute arctextbgcolor]","[attribute arctextbgcolour]", "[attribute arcskip][bracket ]]]" ); MT("outside an attribute list, attributes classify as base", "[base label]", "[base id]","[base url]","[base idurl]", "[base linecolor]","[base linecolour]","[base textcolor]","[base textcolour]","[base textbgcolor]","[base textbgcolour]", "[base arclinecolor]","[base arclinecolour]","[base arctextcolor]","[base arctextcolour]","[base arctextbgcolor]","[base arctextbgcolour]", "[base arcskip]" ); MT("a typical program", "[comment # typical mscgen program]", "[keyword msc][base ][bracket {]", "[keyword wordwraparcs][operator =][string \"true\"][base , ][keyword hscale][operator =][string \"0.8\"][keyword arcgradient][operator =][base 30;]", "[base a][bracket [[][attribute label][operator =][string \"Entity A\"][bracket ]]][base ,]", "[base b][bracket [[][attribute label][operator =][string \"Entity B\"][bracket ]]][base ,]", "[base c][bracket [[][attribute label][operator =][string \"Entity C\"][bracket ]]][base ;]", "[base a ][keyword =>>][base b][bracket [[][attribute label][operator =][string \"Hello entity B\"][bracket ]]][base ;]", "[base a ][keyword <<][base b][bracket [[][attribute label][operator =][string \"Here's an answer dude!\"][bracket ]]][base ;]", "[base c ][keyword :>][base *][bracket [[][attribute label][operator =][string \"What about me?\"][base , ][attribute textcolor][operator =][base red][bracket ]]][base ;]", "[bracket }]" ); })(); application/library/codemirror/mode/mscgen/mscgen.js000064400000014573146731177160016721 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // mode(s) for the sequence chart dsl's mscgen, xù and msgenny // For more information on mscgen, see the site of the original author: // http://www.mcternan.me.uk/mscgen // // This mode for mscgen and the two derivative languages were // originally made for use in the mscgen_js interpreter // (https://sverweij.github.io/mscgen_js) (function(mod) { if ( typeof exports == "object" && typeof module == "object")// CommonJS mod(require("../../lib/codemirror")); else if ( typeof define == "function" && define.amd)// AMD define(["../../lib/codemirror"], mod); else// Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var languages = { mscgen: { "keywords" : ["msc"], "options" : ["hscale", "width", "arcgradient", "wordwraparcs"], "attributes" : ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip"], "brackets" : ["\\{", "\\}"], // [ and ] are brackets too, but these get handled in with lists "arcsWords" : ["note", "abox", "rbox", "box"], "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], "singlecomment" : ["//", "#"], "operators" : ["="] }, xu: { "keywords" : ["msc"], "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "watermark"], "attributes" : ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip"], "brackets" : ["\\{", "\\}"], // [ and ] are brackets too, but these get handled in with lists "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"], "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], "singlecomment" : ["//", "#"], "operators" : ["="] }, msgenny: { "keywords" : null, "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "watermark"], "attributes" : null, "brackets" : ["\\{", "\\}"], "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"], "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], "singlecomment" : ["//", "#"], "operators" : ["="] } } CodeMirror.defineMode("mscgen", function(_, modeConfig) { var language = languages[modeConfig && modeConfig.language || "mscgen"] return { startState: startStateFn, copyState: copyStateFn, token: produceTokenFunction(language), lineComment : "#", blockCommentStart : "/*", blockCommentEnd : "*/" }; }); CodeMirror.defineMIME("text/x-mscgen", "mscgen"); CodeMirror.defineMIME("text/x-xu", {name: "mscgen", language: "xu"}); CodeMirror.defineMIME("text/x-msgenny", {name: "mscgen", language: "msgenny"}); function wordRegexpBoundary(pWords) { return new RegExp("\\b(" + pWords.join("|") + ")\\b", "i"); } function wordRegexp(pWords) { return new RegExp("(" + pWords.join("|") + ")", "i"); } function startStateFn() { return { inComment : false, inString : false, inAttributeList : false, inScript : false }; } function copyStateFn(pState) { return { inComment : pState.inComment, inString : pState.inString, inAttributeList : pState.inAttributeList, inScript : pState.inScript }; } function produceTokenFunction(pConfig) { return function(pStream, pState) { if (pStream.match(wordRegexp(pConfig.brackets), true, true)) { return "bracket"; } /* comments */ if (!pState.inComment) { if (pStream.match(/\/\*[^\*\/]*/, true, true)) { pState.inComment = true; return "comment"; } if (pStream.match(wordRegexp(pConfig.singlecomment), true, true)) { pStream.skipToEnd(); return "comment"; } } if (pState.inComment) { if (pStream.match(/[^\*\/]*\*\//, true, true)) pState.inComment = false; else pStream.skipToEnd(); return "comment"; } /* strings */ if (!pState.inString && pStream.match(/\"(\\\"|[^\"])*/, true, true)) { pState.inString = true; return "string"; } if (pState.inString) { if (pStream.match(/[^\"]*\"/, true, true)) pState.inString = false; else pStream.skipToEnd(); return "string"; } /* keywords & operators */ if (!!pConfig.keywords && pStream.match(wordRegexpBoundary(pConfig.keywords), true, true)) return "keyword"; if (pStream.match(wordRegexpBoundary(pConfig.options), true, true)) return "keyword"; if (pStream.match(wordRegexpBoundary(pConfig.arcsWords), true, true)) return "keyword"; if (pStream.match(wordRegexp(pConfig.arcsOthers), true, true)) return "keyword"; if (!!pConfig.operators && pStream.match(wordRegexp(pConfig.operators), true, true)) return "operator"; /* attribute lists */ if (!pConfig.inAttributeList && !!pConfig.attributes && pStream.match(/\[/, true, true)) { pConfig.inAttributeList = true; return "bracket"; } if (pConfig.inAttributeList) { if (pConfig.attributes !== null && pStream.match(wordRegexpBoundary(pConfig.attributes), true, true)) { return "attribute"; } if (pStream.match(/]/, true, true)) { pConfig.inAttributeList = false; return "bracket"; } } pStream.next(); return "base"; }; } }); application/library/codemirror/mode/django/django.js000064400000027017146731177160016672 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../../addon/mode/overlay")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../../addon/mode/overlay"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("django:inner", function() { var keywords = ["block", "endblock", "for", "endfor", "true", "false", "filter", "endfilter", "loop", "none", "self", "super", "if", "elif", "endif", "as", "else", "import", "with", "endwith", "without", "context", "ifequal", "endifequal", "ifnotequal", "endifnotequal", "extends", "include", "load", "comment", "endcomment", "empty", "url", "static", "trans", "blocktrans", "endblocktrans", "now", "regroup", "lorem", "ifchanged", "endifchanged", "firstof", "debug", "cycle", "csrf_token", "autoescape", "endautoescape", "spaceless", "endspaceless", "ssi", "templatetag", "verbatim", "endverbatim", "widthratio"], filters = ["add", "addslashes", "capfirst", "center", "cut", "date", "default", "default_if_none", "dictsort", "dictsortreversed", "divisibleby", "escape", "escapejs", "filesizeformat", "first", "floatformat", "force_escape", "get_digit", "iriencode", "join", "last", "length", "length_is", "linebreaks", "linebreaksbr", "linenumbers", "ljust", "lower", "make_list", "phone2numeric", "pluralize", "pprint", "random", "removetags", "rjust", "safe", "safeseq", "slice", "slugify", "stringformat", "striptags", "time", "timesince", "timeuntil", "title", "truncatechars", "truncatechars_html", "truncatewords", "truncatewords_html", "unordered_list", "upper", "urlencode", "urlize", "urlizetrunc", "wordcount", "wordwrap", "yesno"], operators = ["==", "!=", "<", ">", "<=", ">="], wordOperators = ["in", "not", "or", "and"]; keywords = new RegExp("^\\b(" + keywords.join("|") + ")\\b"); filters = new RegExp("^\\b(" + filters.join("|") + ")\\b"); operators = new RegExp("^\\b(" + operators.join("|") + ")\\b"); wordOperators = new RegExp("^\\b(" + wordOperators.join("|") + ")\\b"); // We have to return "null" instead of null, in order to avoid string // styling as the default, when using Django templates inside HTML // element attributes function tokenBase (stream, state) { // Attempt to identify a variable, template or comment tag respectively if (stream.match("{{")) { state.tokenize = inVariable; return "tag"; } else if (stream.match("{%")) { state.tokenize = inTag; return "tag"; } else if (stream.match("{#")) { state.tokenize = inComment; return "comment"; } // Ignore completely any stream series that do not match the // Django template opening tags. while (stream.next() != null && !stream.match(/\{[{%#]/, false)) {} return null; } // A string can be included in either single or double quotes (this is // the delimiter). Mark everything as a string until the start delimiter // occurs again. function inString (delimiter, previousTokenizer) { return function (stream, state) { if (!state.escapeNext && stream.eat(delimiter)) { state.tokenize = previousTokenizer; } else { if (state.escapeNext) { state.escapeNext = false; } var ch = stream.next(); // Take into account the backslash for escaping characters, such as // the string delimiter. if (ch == "\\") { state.escapeNext = true; } } return "string"; }; } // Apply Django template variable syntax highlighting function inVariable (stream, state) { // Attempt to match a dot that precedes a property if (state.waitDot) { state.waitDot = false; if (stream.peek() != ".") { return "null"; } // Dot followed by a non-word character should be considered an error. if (stream.match(/\.\W+/)) { return "error"; } else if (stream.eat(".")) { state.waitProperty = true; return "null"; } else { throw Error ("Unexpected error while waiting for property."); } } // Attempt to match a pipe that precedes a filter if (state.waitPipe) { state.waitPipe = false; if (stream.peek() != "|") { return "null"; } // Pipe followed by a non-word character should be considered an error. if (stream.match(/\.\W+/)) { return "error"; } else if (stream.eat("|")) { state.waitFilter = true; return "null"; } else { throw Error ("Unexpected error while waiting for filter."); } } // Highlight properties if (state.waitProperty) { state.waitProperty = false; if (stream.match(/\b(\w+)\b/)) { state.waitDot = true; // A property can be followed by another property state.waitPipe = true; // A property can be followed by a filter return "property"; } } // Highlight filters if (state.waitFilter) { state.waitFilter = false; if (stream.match(filters)) { return "variable-2"; } } // Ignore all white spaces if (stream.eatSpace()) { state.waitProperty = false; return "null"; } // Identify numbers if (stream.match(/\b\d+(\.\d+)?\b/)) { return "number"; } // Identify strings if (stream.match("'")) { state.tokenize = inString("'", state.tokenize); return "string"; } else if (stream.match('"')) { state.tokenize = inString('"', state.tokenize); return "string"; } // Attempt to find the variable if (stream.match(/\b(\w+)\b/) && !state.foundVariable) { state.waitDot = true; state.waitPipe = true; // A property can be followed by a filter return "variable"; } // If found closing tag reset if (stream.match("}}")) { state.waitProperty = null; state.waitFilter = null; state.waitDot = null; state.waitPipe = null; state.tokenize = tokenBase; return "tag"; } // If nothing was found, advance to the next character stream.next(); return "null"; } function inTag (stream, state) { // Attempt to match a dot that precedes a property if (state.waitDot) { state.waitDot = false; if (stream.peek() != ".") { return "null"; } // Dot followed by a non-word character should be considered an error. if (stream.match(/\.\W+/)) { return "error"; } else if (stream.eat(".")) { state.waitProperty = true; return "null"; } else { throw Error ("Unexpected error while waiting for property."); } } // Attempt to match a pipe that precedes a filter if (state.waitPipe) { state.waitPipe = false; if (stream.peek() != "|") { return "null"; } // Pipe followed by a non-word character should be considered an error. if (stream.match(/\.\W+/)) { return "error"; } else if (stream.eat("|")) { state.waitFilter = true; return "null"; } else { throw Error ("Unexpected error while waiting for filter."); } } // Highlight properties if (state.waitProperty) { state.waitProperty = false; if (stream.match(/\b(\w+)\b/)) { state.waitDot = true; // A property can be followed by another property state.waitPipe = true; // A property can be followed by a filter return "property"; } } // Highlight filters if (state.waitFilter) { state.waitFilter = false; if (stream.match(filters)) { return "variable-2"; } } // Ignore all white spaces if (stream.eatSpace()) { state.waitProperty = false; return "null"; } // Identify numbers if (stream.match(/\b\d+(\.\d+)?\b/)) { return "number"; } // Identify strings if (stream.match("'")) { state.tokenize = inString("'", state.tokenize); return "string"; } else if (stream.match('"')) { state.tokenize = inString('"', state.tokenize); return "string"; } // Attempt to match an operator if (stream.match(operators)) { return "operator"; } // Attempt to match a word operator if (stream.match(wordOperators)) { return "keyword"; } // Attempt to match a keyword var keywordMatch = stream.match(keywords); if (keywordMatch) { if (keywordMatch[0] == "comment") { state.blockCommentTag = true; } return "keyword"; } // Attempt to match a variable if (stream.match(/\b(\w+)\b/)) { state.waitDot = true; state.waitPipe = true; // A property can be followed by a filter return "variable"; } // If found closing tag reset if (stream.match("%}")) { state.waitProperty = null; state.waitFilter = null; state.waitDot = null; state.waitPipe = null; // If the tag that closes is a block comment tag, we want to mark the // following code as comment, until the tag closes. if (state.blockCommentTag) { state.blockCommentTag = false; // Release the "lock" state.tokenize = inBlockComment; } else { state.tokenize = tokenBase; } return "tag"; } // If nothing was found, advance to the next character stream.next(); return "null"; } // Mark everything as comment inside the tag and the tag itself. function inComment (stream, state) { if (stream.match(/^.*?#\}/)) state.tokenize = tokenBase else stream.skipToEnd() return "comment"; } // Mark everything as a comment until the `blockcomment` tag closes. function inBlockComment (stream, state) { if (stream.match(/\{%\s*endcomment\s*%\}/, false)) { state.tokenize = inTag; stream.match("{%"); return "tag"; } else { stream.next(); return "comment"; } } return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { return state.tokenize(stream, state); }, blockCommentStart: "{% comment %}", blockCommentEnd: "{% endcomment %}" }; }); CodeMirror.defineMode("django", function(config) { var htmlBase = CodeMirror.getMode(config, "text/html"); var djangoInner = CodeMirror.getMode(config, "django:inner"); return CodeMirror.overlayMode(htmlBase, djangoInner); }); CodeMirror.defineMIME("text/x-django", "django"); }); application/library/codemirror/mode/django/index.html000064400000004035146731177160017062 0ustar00 CodeMirror: Django template mode

    Django template mode

    Mode for HTML with embedded Django template markup.

    MIME types defined: text/x-django

    application/library/codemirror/mode/ntriples/ntriples.js000064400000014763146731177160017672 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /********************************************************** * This script provides syntax highlighting support for * the Ntriples format. * Ntriples format specification: * http://www.w3.org/TR/rdf-testcases/#ntriples ***********************************************************/ /* The following expression defines the defined ASF grammar transitions. pre_subject -> { ( writing_subject_uri | writing_bnode_uri ) -> pre_predicate -> writing_predicate_uri -> pre_object -> writing_object_uri | writing_object_bnode | ( writing_object_literal -> writing_literal_lang | writing_literal_type ) -> post_object -> BEGIN } otherwise { -> ERROR } */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ntriples", function() { var Location = { PRE_SUBJECT : 0, WRITING_SUB_URI : 1, WRITING_BNODE_URI : 2, PRE_PRED : 3, WRITING_PRED_URI : 4, PRE_OBJ : 5, WRITING_OBJ_URI : 6, WRITING_OBJ_BNODE : 7, WRITING_OBJ_LITERAL : 8, WRITING_LIT_LANG : 9, WRITING_LIT_TYPE : 10, POST_OBJ : 11, ERROR : 12 }; function transitState(currState, c) { var currLocation = currState.location; var ret; // Opening. if (currLocation == Location.PRE_SUBJECT && c == '<') ret = Location.WRITING_SUB_URI; else if(currLocation == Location.PRE_SUBJECT && c == '_') ret = Location.WRITING_BNODE_URI; else if(currLocation == Location.PRE_PRED && c == '<') ret = Location.WRITING_PRED_URI; else if(currLocation == Location.PRE_OBJ && c == '<') ret = Location.WRITING_OBJ_URI; else if(currLocation == Location.PRE_OBJ && c == '_') ret = Location.WRITING_OBJ_BNODE; else if(currLocation == Location.PRE_OBJ && c == '"') ret = Location.WRITING_OBJ_LITERAL; // Closing. else if(currLocation == Location.WRITING_SUB_URI && c == '>') ret = Location.PRE_PRED; else if(currLocation == Location.WRITING_BNODE_URI && c == ' ') ret = Location.PRE_PRED; else if(currLocation == Location.WRITING_PRED_URI && c == '>') ret = Location.PRE_OBJ; else if(currLocation == Location.WRITING_OBJ_URI && c == '>') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_OBJ_BNODE && c == ' ') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '"') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_LIT_LANG && c == ' ') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_LIT_TYPE && c == '>') ret = Location.POST_OBJ; // Closing typed and language literal. else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '@') ret = Location.WRITING_LIT_LANG; else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '^') ret = Location.WRITING_LIT_TYPE; // Spaces. else if( c == ' ' && ( currLocation == Location.PRE_SUBJECT || currLocation == Location.PRE_PRED || currLocation == Location.PRE_OBJ || currLocation == Location.POST_OBJ ) ) ret = currLocation; // Reset. else if(currLocation == Location.POST_OBJ && c == '.') ret = Location.PRE_SUBJECT; // Error else ret = Location.ERROR; currState.location=ret; } return { startState: function() { return { location : Location.PRE_SUBJECT, uris : [], anchors : [], bnodes : [], langs : [], types : [] }; }, token: function(stream, state) { var ch = stream.next(); if(ch == '<') { transitState(state, ch); var parsedURI = ''; stream.eatWhile( function(c) { if( c != '#' && c != '>' ) { parsedURI += c; return true; } return false;} ); state.uris.push(parsedURI); if( stream.match('#', false) ) return 'variable'; stream.next(); transitState(state, '>'); return 'variable'; } if(ch == '#') { var parsedAnchor = ''; stream.eatWhile(function(c) { if(c != '>' && c != ' ') { parsedAnchor+= c; return true; } return false;}); state.anchors.push(parsedAnchor); return 'variable-2'; } if(ch == '>') { transitState(state, '>'); return 'variable'; } if(ch == '_') { transitState(state, ch); var parsedBNode = ''; stream.eatWhile(function(c) { if( c != ' ' ) { parsedBNode += c; return true; } return false;}); state.bnodes.push(parsedBNode); stream.next(); transitState(state, ' '); return 'builtin'; } if(ch == '"') { transitState(state, ch); stream.eatWhile( function(c) { return c != '"'; } ); stream.next(); if( stream.peek() != '@' && stream.peek() != '^' ) { transitState(state, '"'); } return 'string'; } if( ch == '@' ) { transitState(state, '@'); var parsedLang = ''; stream.eatWhile(function(c) { if( c != ' ' ) { parsedLang += c; return true; } return false;}); state.langs.push(parsedLang); stream.next(); transitState(state, ' '); return 'string-2'; } if( ch == '^' ) { stream.next(); transitState(state, '^'); var parsedType = ''; stream.eatWhile(function(c) { if( c != '>' ) { parsedType += c; return true; } return false;} ); state.types.push(parsedType); stream.next(); transitState(state, '>'); return 'variable'; } if( ch == ' ' ) { transitState(state, ch); } if( ch == '.' ) { transitState(state, ch); } } }; }); CodeMirror.defineMIME("text/n-triples", "ntriples"); }); application/library/codemirror/mode/ntriples/index.html000064400000002515146731177160017461 0ustar00 CodeMirror: NTriples mode

    NTriples mode

    MIME types defined: text/n-triples.

    application/library/codemirror/mode/yacas/yacas.js000064400000012460146731177160016362 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Yacas mode copyright (c) 2015 by Grzegorz Mazur // Loosely based on mathematica mode by Calin Barbat (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('yacas', function(_config, _parserConfig) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var bodiedOps = words("Assert BackQuote D Defun Deriv For ForEach FromFile " + "FromString Function Integrate InverseTaylor Limit " + "LocalSymbols Macro MacroRule MacroRulePattern " + "NIntegrate Rule RulePattern Subst TD TExplicitSum " + "TSum Taylor Taylor1 Taylor2 Taylor3 ToFile " + "ToStdout ToString TraceRule Until While"); // patterns var pFloatForm = "(?:(?:\\.\\d+|\\d+\\.\\d*|\\d+)(?:[eE][+-]?\\d+)?)"; var pIdentifier = "(?:[a-zA-Z\\$'][a-zA-Z0-9\\$']*)"; // regular expressions var reFloatForm = new RegExp(pFloatForm); var reIdentifier = new RegExp(pIdentifier); var rePattern = new RegExp(pIdentifier + "?_" + pIdentifier); var reFunctionLike = new RegExp(pIdentifier + "\\s*\\("); function tokenBase(stream, state) { var ch; // get next character ch = stream.next(); // string if (ch === '"') { state.tokenize = tokenString; return state.tokenize(stream, state); } // comment if (ch === '/') { if (stream.eat('*')) { state.tokenize = tokenComment; return state.tokenize(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } // go back one character stream.backUp(1); // update scope info var m = stream.match(/^(\w+)\s*\(/, false); if (m !== null && bodiedOps.hasOwnProperty(m[1])) state.scopes.push('bodied'); var scope = currentScope(state); if (scope === 'bodied' && ch === '[') state.scopes.pop(); if (ch === '[' || ch === '{' || ch === '(') state.scopes.push(ch); scope = currentScope(state); if (scope === '[' && ch === ']' || scope === '{' && ch === '}' || scope === '(' && ch === ')') state.scopes.pop(); if (ch === ';') { while (scope === 'bodied') { state.scopes.pop(); scope = currentScope(state); } } // look for ordered rules if (stream.match(/\d+ *#/, true, false)) { return 'qualifier'; } // look for numbers if (stream.match(reFloatForm, true, false)) { return 'number'; } // look for placeholders if (stream.match(rePattern, true, false)) { return 'variable-3'; } // match all braces separately if (stream.match(/(?:\[|\]|{|}|\(|\))/, true, false)) { return 'bracket'; } // literals looking like function calls if (stream.match(reFunctionLike, true, false)) { stream.backUp(1); return 'variable'; } // all other identifiers if (stream.match(reIdentifier, true, false)) { return 'variable-2'; } // operators; note that operators like @@ or /; are matched separately for each symbol. if (stream.match(/(?:\\|\+|\-|\*|\/|,|;|\.|:|@|~|=|>|<|&|\||_|`|'|\^|\?|!|%)/, true, false)) { return 'operator'; } // everything else is an error return 'error'; } function tokenString(stream, state) { var next, end = false, escaped = false; while ((next = stream.next()) != null) { if (next === '"' && !escaped) { end = true; break; } escaped = !escaped && next === '\\'; } if (end && !escaped) { state.tokenize = tokenBase; } return 'string'; }; function tokenComment(stream, state) { var prev, next; while((next = stream.next()) != null) { if (prev === '*' && next === '/') { state.tokenize = tokenBase; break; } prev = next; } return 'comment'; } function currentScope(state) { var scope = null; if (state.scopes.length > 0) scope = state.scopes[state.scopes.length - 1]; return scope; } return { startState: function() { return { tokenize: tokenBase, scopes: [] }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, indent: function(state, textAfter) { if (state.tokenize !== tokenBase && state.tokenize !== null) return CodeMirror.Pass; var delta = 0; if (textAfter === ']' || textAfter === '];' || textAfter === '}' || textAfter === '};' || textAfter === ');') delta = -1; return (state.scopes.length + delta) * _config.indentUnit; }, electricChars: "{}[]();", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME('text/x-yacas', { name: 'yacas' }); }); application/library/codemirror/mode/yacas/index.html000064400000004200146731177160016712 0ustar00 CodeMirror: yacas mode

    yacas mode

    MIME types defined: text/x-yacas (yacas).

    application/library/codemirror/mode/sparql/sparql.js000064400000014277146731177160016776 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sparql", function(config) { var indentUnit = config.indentUnit; var curPunc; function wordRegexp(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); } var ops = wordRegexp(["str", "lang", "langmatches", "datatype", "bound", "sameterm", "isiri", "isuri", "iri", "uri", "bnode", "count", "sum", "min", "max", "avg", "sample", "group_concat", "rand", "abs", "ceil", "floor", "round", "concat", "substr", "strlen", "replace", "ucase", "lcase", "encode_for_uri", "contains", "strstarts", "strends", "strbefore", "strafter", "year", "month", "day", "hours", "minutes", "seconds", "timezone", "tz", "now", "uuid", "struuid", "md5", "sha1", "sha256", "sha384", "sha512", "coalesce", "if", "strlang", "strdt", "isnumeric", "regex", "exists", "isblank", "isliteral", "a", "bind"]); var keywords = wordRegexp(["base", "prefix", "select", "distinct", "reduced", "construct", "describe", "ask", "from", "named", "where", "order", "limit", "offset", "filter", "optional", "graph", "by", "asc", "desc", "as", "having", "undef", "values", "group", "minus", "in", "not", "service", "silent", "using", "insert", "delete", "union", "true", "false", "with", "data", "copy", "to", "move", "add", "create", "drop", "clear", "load"]); var operatorChars = /[*+\-<>=&|\^\/!\?]/; function tokenBase(stream, state) { var ch = stream.next(); curPunc = null; if (ch == "$" || ch == "?") { if(ch == "?" && stream.match(/\s/, false)){ return "operator"; } stream.match(/^[\w\d]*/); return "variable-2"; } else if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { stream.match(/^[^\s\u00a0>]*>?/); return "atom"; } else if (ch == "\"" || ch == "'") { state.tokenize = tokenLiteral(ch); return state.tokenize(stream, state); } else if (/[{}\(\),\.;\[\]]/.test(ch)) { curPunc = ch; return "bracket"; } else if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (operatorChars.test(ch)) { stream.eatWhile(operatorChars); return "operator"; } else if (ch == ":") { stream.eatWhile(/[\w\d\._\-]/); return "atom"; } else if (ch == "@") { stream.eatWhile(/[a-z\d\-]/i); return "meta"; } else { stream.eatWhile(/[_\w\d]/); if (stream.eat(":")) { stream.eatWhile(/[\w\d_\-]/); return "atom"; } var word = stream.current(); if (ops.test(word)) return "builtin"; else if (keywords.test(word)) return "keyword"; else return "variable"; } } function tokenLiteral(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return "string"; }; } function pushContext(state, type, col) { state.context = {prev: state.context, indent: state.indent, col: col, type: type}; } function popContext(state) { state.indent = state.context.indent; state.context = state.context.prev; } return { startState: function() { return {tokenize: tokenBase, context: null, indent: 0, col: 0}; }, token: function(stream, state) { if (stream.sol()) { if (state.context && state.context.align == null) state.context.align = false; state.indent = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { state.context.align = true; } if (curPunc == "(") pushContext(state, ")", stream.column()); else if (curPunc == "[") pushContext(state, "]", stream.column()); else if (curPunc == "{") pushContext(state, "}", stream.column()); else if (/[\]\}\)]/.test(curPunc)) { while (state.context && state.context.type == "pattern") popContext(state); if (state.context && curPunc == state.context.type) { popContext(state); if (curPunc == "}" && state.context && state.context.type == "pattern") popContext(state); } } else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); else if (/atom|string|variable/.test(style) && state.context) { if (/[\}\]]/.test(state.context.type)) pushContext(state, "pattern", stream.column()); else if (state.context.type == "pattern" && !state.context.align) { state.context.align = true; state.context.col = stream.column(); } } return style; }, indent: function(state, textAfter) { var firstChar = textAfter && textAfter.charAt(0); var context = state.context; if (/[\]\}]/.test(firstChar)) while (context && context.type == "pattern") context = context.prev; var closing = context && firstChar == context.type; if (!context) return 0; else if (context.type == "pattern") return context.col; else if (context.align) return context.col + (closing ? 0 : 1); else return context.indent + (closing ? 0 : indentUnit); }, lineComment: "#" }; }); CodeMirror.defineMIME("application/sparql-query", "sparql"); }); application/library/codemirror/mode/sparql/index.html000064400000003355146731177160017126 0ustar00 CodeMirror: SPARQL mode

    SPARQL mode

    MIME types defined: application/sparql-query.

    application/library/codemirror/mode/lua/lua.js000064400000013476146731177160015534 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // LUA mode. Ported to CodeMirror 2 from Franciszek Wawrzak's // CodeMirror 1 mode. // highlights keywords, strings, comments (no leveling supported! ("[==[")), tokens, basic indenting (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("lua", function(config, parserConfig) { var indentUnit = config.indentUnit; function prefixRE(words) { return new RegExp("^(?:" + words.join("|") + ")", "i"); } function wordRE(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); } var specials = wordRE(parserConfig.specials || []); // long list of standard functions from lua manual var builtins = wordRE([ "_G","_VERSION","assert","collectgarbage","dofile","error","getfenv","getmetatable","ipairs","load", "loadfile","loadstring","module","next","pairs","pcall","print","rawequal","rawget","rawset","require", "select","setfenv","setmetatable","tonumber","tostring","type","unpack","xpcall", "coroutine.create","coroutine.resume","coroutine.running","coroutine.status","coroutine.wrap","coroutine.yield", "debug.debug","debug.getfenv","debug.gethook","debug.getinfo","debug.getlocal","debug.getmetatable", "debug.getregistry","debug.getupvalue","debug.setfenv","debug.sethook","debug.setlocal","debug.setmetatable", "debug.setupvalue","debug.traceback", "close","flush","lines","read","seek","setvbuf","write", "io.close","io.flush","io.input","io.lines","io.open","io.output","io.popen","io.read","io.stderr","io.stdin", "io.stdout","io.tmpfile","io.type","io.write", "math.abs","math.acos","math.asin","math.atan","math.atan2","math.ceil","math.cos","math.cosh","math.deg", "math.exp","math.floor","math.fmod","math.frexp","math.huge","math.ldexp","math.log","math.log10","math.max", "math.min","math.modf","math.pi","math.pow","math.rad","math.random","math.randomseed","math.sin","math.sinh", "math.sqrt","math.tan","math.tanh", "os.clock","os.date","os.difftime","os.execute","os.exit","os.getenv","os.remove","os.rename","os.setlocale", "os.time","os.tmpname", "package.cpath","package.loaded","package.loaders","package.loadlib","package.path","package.preload", "package.seeall", "string.byte","string.char","string.dump","string.find","string.format","string.gmatch","string.gsub", "string.len","string.lower","string.match","string.rep","string.reverse","string.sub","string.upper", "table.concat","table.insert","table.maxn","table.remove","table.sort" ]); var keywords = wordRE(["and","break","elseif","false","nil","not","or","return", "true","function", "end", "if", "then", "else", "do", "while", "repeat", "until", "for", "in", "local" ]); var indentTokens = wordRE(["function", "if","repeat","do", "\\(", "{"]); var dedentTokens = wordRE(["end", "until", "\\)", "}"]); var dedentPartial = prefixRE(["end", "until", "\\)", "}", "else", "elseif"]); function readBracket(stream) { var level = 0; while (stream.eat("=")) ++level; stream.eat("["); return level; } function normal(stream, state) { var ch = stream.next(); if (ch == "-" && stream.eat("-")) { if (stream.eat("[") && stream.eat("[")) return (state.cur = bracketed(readBracket(stream), "comment"))(stream, state); stream.skipToEnd(); return "comment"; } if (ch == "\"" || ch == "'") return (state.cur = string(ch))(stream, state); if (ch == "[" && /[\[=]/.test(stream.peek())) return (state.cur = bracketed(readBracket(stream), "string"))(stream, state); if (/\d/.test(ch)) { stream.eatWhile(/[\w.%]/); return "number"; } if (/[\w_]/.test(ch)) { stream.eatWhile(/[\w\\\-_.]/); return "variable"; } return null; } function bracketed(level, style) { return function(stream, state) { var curlev = null, ch; while ((ch = stream.next()) != null) { if (curlev == null) {if (ch == "]") curlev = 0;} else if (ch == "=") ++curlev; else if (ch == "]" && curlev == level) { state.cur = normal; break; } else curlev = null; } return style; }; } function string(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) break; escaped = !escaped && ch == "\\"; } if (!escaped) state.cur = normal; return "string"; }; } return { startState: function(basecol) { return {basecol: basecol || 0, indentDepth: 0, cur: normal}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.cur(stream, state); var word = stream.current(); if (style == "variable") { if (keywords.test(word)) style = "keyword"; else if (builtins.test(word)) style = "builtin"; else if (specials.test(word)) style = "variable-2"; } if ((style != "comment") && (style != "string")){ if (indentTokens.test(word)) ++state.indentDepth; else if (dedentTokens.test(word)) --state.indentDepth; } return style; }, indent: function(state, textAfter) { var closing = dedentPartial.test(textAfter); return state.basecol + indentUnit * (state.indentDepth - (closing ? 1 : 0)); }, lineComment: "--", blockCommentStart: "--[[", blockCommentEnd: "]]" }; }); CodeMirror.defineMIME("text/x-lua", "lua"); }); application/library/codemirror/mode/lua/index.html000064400000004031146731177160016375 0ustar00 CodeMirror: Lua mode

    Lua mode

    Loosely based on Franciszek Wawrzak's CodeMirror 1 mode. One configuration parameter is supported, specials, to which you can provide an array of strings to have those identifiers highlighted with the lua-special style.

    MIME types defined: text/x-lua.

    application/library/codemirror/mode/haskell-literate/haskell-literate.js000064400000002556146731177160022653 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function (mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../haskell/haskell")) else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../haskell/haskell"], mod) else // Plain browser env mod(CodeMirror) })(function (CodeMirror) { "use strict" CodeMirror.defineMode("haskell-literate", function (config, parserConfig) { var baseMode = CodeMirror.getMode(config, (parserConfig && parserConfig.base) || "haskell") return { startState: function () { return { inCode: false, baseState: CodeMirror.startState(baseMode) } }, token: function (stream, state) { if (stream.sol()) { if (state.inCode = stream.eat(">")) return "meta" } if (state.inCode) { return baseMode.token(stream, state.baseState) } else { stream.skipToEnd() return "comment" } }, innerMode: function (state) { return state.inCode ? {state: state.baseState, mode: baseMode} : null } } }, "haskell") CodeMirror.defineMIME("text/x-literate-haskell", "haskell-literate") }); application/library/codemirror/mode/haskell-literate/index.html000064400000022245146731177160021055 0ustar00 CodeMirror: Haskell-literate mode

    Haskell literate mode

    MIME types defined: text/x-literate-haskell.

    Parser configuration parameters recognized: base to set the base mode (defaults to "haskell").

    application/library/js/elFinder.history.js000064400000004562146731177160014741 0ustar00/** * @class elFinder.history * Store visited folders * and provide "back" and "forward" methods * * @author Dmitry (dio) Levashov */ elFinder.prototype.history = function(fm) { "use strict"; var self = this, /** * Update history on "open" event? * * @type Boolean */ update = true, /** * Directories hashes storage * * @type Array */ history = [], /** * Current directory index in history * * @type Number */ current, /** * Clear history * * @return void */ reset = function() { history = [fm.cwd().hash]; current = 0; update = true; }, /** * Browser native history object */ nativeHistory = (fm.options.useBrowserHistory && window.history && window.history.pushState)? window.history : null, /** * Open prev/next folder * * @Boolen open next folder? * @return jQuery.Deferred */ go = function(fwd) { if ((fwd && self.canForward()) || (!fwd && self.canBack())) { update = false; return fm.exec('open', history[fwd ? ++current : --current]).fail(reset); } return $.Deferred().reject(); }, /** * Sets the native history. * * @param String thash target hash */ setNativeHistory = function(thash) { if (nativeHistory && (! nativeHistory.state || nativeHistory.state.thash !== thash)) { nativeHistory.pushState({thash: thash}, null, location.pathname + location.search + (thash? '#elf_' + thash : '')); } }; /** * Return true if there is previous visited directories * * @return Boolen */ this.canBack = function() { return current > 0; }; /** * Return true if can go forward * * @return Boolen */ this.canForward = function() { return current < history.length - 1; }; /** * Go back * * @return void */ this.back = go; /** * Go forward * * @return void */ this.forward = function() { return go(true); }; // bind to elfinder events fm.bind('init', function() { if (nativeHistory && !nativeHistory.state) { setNativeHistory(fm.startDir()); } }) .open(function() { var l = history.length, cwd = fm.cwd().hash; if (update) { current >= 0 && l > current + 1 && history.splice(current+1); history[history.length-1] != cwd && history.push(cwd); current = history.length - 1; } update = true; setNativeHistory(cwd); }) .reload(fm.options.reloadClearHistory && reset); }; application/library/js/elFinder.command.js000064400000020036146731177160014650 0ustar00/** * elFinder command prototype * * @type elFinder.command * @author Dmitry (dio) Levashov */ elFinder.prototype.command = function(fm) { "use strict"; /** * elFinder instance * * @type elFinder */ this.fm = fm; /** * Command name, same as class name * * @type String */ this.name = ''; /** * Dialog class name * * @type String */ this.dialogClass = ''; /** * Command icon class name with out 'elfinder-button-icon-' * Use this.name if it is empty * * @type String */ this.className = ''; /** * Short command description * * @type String */ this.title = ''; /** * Linked(Child) commands name * They are loaded together when tthis command is loaded. * * @type Array */ this.linkedCmds = []; /** * Current command state * * @example * this.state = -1; // command disabled * this.state = 0; // command enabled * this.state = 1; // command active (for example "fullscreen" command while elfinder in fullscreen mode) * @default -1 * @type Number */ this.state = -1; /** * If true, command can not be disabled by connector. * @see this.update() * * @type Boolen */ this.alwaysEnabled = false; /** * Do not change dirctory on removed current work directory * * @type Boolen */ this.noChangeDirOnRemovedCwd = false; /** * If true, this means command was disabled by connector. * @see this.update() * * @type Boolen */ this._disabled = false; /** * If true, this command is disabled on serach results * * @type Boolean */ this.disableOnSearch = false; /** * Call update() when event select fired * * @type Boolean */ this.updateOnSelect = true; /** * Sync toolbar button title on change * * @type Boolean */ this.syncTitleOnChange = false; /** * Keep display of the context menu when command execution * * @type Boolean */ this.keepContextmenu = false; /** * elFinder events defaults handlers. * Inside handlers "this" is current command object * * @type Object */ this._handlers = { enable : function() { this.update(void(0), this.value); }, disable : function() { this.update(-1, this.value); }, 'open reload load sync' : function() { this._disabled = !(this.alwaysEnabled || this.fm.isCommandEnabled(this.name)); this.update(void(0), this.value); this.change(); } }; /** * elFinder events handlers. * Inside handlers "this" is current command object * * @type Object */ this.handlers = {}; /** * Shortcuts * * @type Array */ this.shortcuts = []; /** * Command options * * @type Object */ this.options = {ui : 'button'}; /** * Callback functions on `change` event * * @type Array */ this.listeners = []; /** * Prepare object - * bind events and shortcuts * * @return void */ this.setup = function(name, opts) { var self = this, fm = this.fm, setCallback = function(s) { var cb = s.callback || function(e) { fm.exec(self.name, void(0), { _userAction: true, _currentType: 'shortcut' }); }; s.callback = function(e) { var enabled, checks = {}; if (self.enabled()) { if (fm.searchStatus.state < 2) { enabled = fm.isCommandEnabled(self.name); } else { $.each(fm.selected(), function(i, h) { if (fm.optionsByHashes[h]) { checks[h] = true; } else { $.each(fm.volOptions, function(id) { if (!checks[id] && h.indexOf(id) === 0) { checks[id] = true; return false; } }); } }); $.each(checks, function(h) { enabled = fm.isCommandEnabled(self.name, h); if (! enabled) { return false; } }); } if (enabled) { self.event = e; cb.call(self); delete self.event; } } }; }, i, s, sc; this.name = name; this.title = fm.messages['cmd'+name] ? fm.i18n('cmd'+name) : ((this.extendsCmd && fm.messages['cmd'+this.extendsCmd]) ? fm.i18n('cmd'+this.extendsCmd) : name); this.options = Object.assign({}, this.options, opts); this.listeners = []; this.dialogClass = 'elfinder-dialog-' + name; if (opts.shortcuts) { if (typeof opts.shortcuts === 'function') { sc = opts.shortcuts(this.fm, this.shortcuts); } else if (Array.isArray(opts.shortcuts)) { sc = opts.shortcuts; } this.shortcuts = sc || []; } if (this.updateOnSelect) { this._handlers.select = function() { this.update(void(0), this.value); }; } $.each(Object.assign({}, self._handlers, self.handlers), function(cmd, handler) { fm.bind(cmd, $.proxy(handler, self)); }); for (i = 0; i < this.shortcuts.length; i++) { s = this.shortcuts[i]; setCallback(s); !s.description && (s.description = this.title); fm.shortcut(s); } if (this.disableOnSearch) { fm.bind('search searchend', function() { self._disabled = this.type === 'search'? true : ! (this.alwaysEnabled || fm.isCommandEnabled(name)); self.update(void(0), self.value); }); } this.init(); }; /** * Command specific init stuffs * * @return void */ this.init = function() {}; /** * Exec command * * @param Array target files hashes * @param Array|Object command value * @return $.Deferred */ this.exec = function(files, opts) { return $.Deferred().reject(); }; this.getUndo = function(opts, resData) { return false; }; /** * Return true if command disabled. * * @return Boolen */ this.disabled = function() { return this.state < 0; }; /** * Return true if command enabled. * * @return Boolen */ this.enabled = function() { return this.state > -1; }; /** * Return true if command active. * * @return Boolen */ this.active = function() { return this.state > 0; }; /** * Return current command state. * Must be overloaded in most commands * * @return Number */ this.getstate = function() { return -1; }; /** * Update command state/value * and rize 'change' event if smth changed * * @param Number new state or undefined to auto update state * @param mixed new value * @return void */ this.update = function(s, v) { var state = this.state, value = this.value; if (this._disabled && this.fm.searchStatus === 0) { this.state = -1; } else { this.state = s !== void(0) ? s : this.getstate(); } this.value = v; if (state != this.state || value != this.value) { this.change(); } }; /** * Bind handler / fire 'change' event. * * @param Function|undefined event callback * @return void */ this.change = function(c) { var cmd, i; if (typeof(c) === 'function') { this.listeners.push(c); } else { for (i = 0; i < this.listeners.length; i++) { cmd = this.listeners[i]; try { cmd(this.state, this.value); } catch (e) { this.fm.debug('error', e); } } } return this; }; /** * With argument check given files hashes and return list of existed files hashes. * Without argument return selected files hashes. * * @param Array|String|void hashes * @return Array */ this.hashes = function(hashes) { return hashes ? $.grep(Array.isArray(hashes) ? hashes : [hashes], function(hash) { return fm.file(hash) ? true : false; }) : fm.selected(); }; /** * Return only existed files from given fils hashes | selected files * * @param Array|String|void hashes * @return Array */ this.files = function(hashes) { var fm = this.fm; return hashes ? $.map(Array.isArray(hashes) ? hashes : [hashes], function(hash) { return fm.file(hash) || null; }) : fm.selectedFiles(); }; /** * Wrapper to fm.dialog() * * @param String|DOMElement content * @param Object options * @return Object jQuery element object */ this.fmDialog = function(content, options) { if (options.cssClass) { options.cssClass += ' ' + this.dialogClass; } else { options.cssClass = this.dialogClass; } return this.fm.dialog(content, options); }; }; application/library/js/elfinder_script_shortcode.js000064400000002723146731177160016734 0ustar00jQuery(document).ready(function() { var fmakey = jQuery('#fmakey').val(); jQuery('#file_manager_advanced').elfinder( // 1st Arg - options { cssAutoLoad : false, // Disable CSS auto loading url : ajaxurl, // connector URL (REQUIRED) customData : {action: 'fma_load_fma_ui',_fmakey: fmakey}, // language (OPTIONAL) }, // 2nd Arg - before boot up function function(fm, extraObj) { // `init` event callback function fm.bind('init', function() { // Optional for Japanese decoder "extras/encoding-japanese.min" delete fm.options.rawStringDecoder; if (fm.lang === 'jp') { fm.loadScript( [ fm.baseUrl + '/lib/js/extras/encoding-japanese.min.js' ], function() { if (window.Encoding && Encoding.convert) { fm.options.rawStringDecoder = function(s) { return Encoding.convert(s,{to:'UNICODE',type:'string'}); }; } }, { loadType: 'tag' } ); } }); // Optional for set document.title dynamically. var title = document.title; fm.bind('open', function() { var path = '', cwd = fm.cwd(); if (cwd) { path = fm.path(cwd.hash) || null; } document.title = path? path + ':' + title : title; }).bind('destroy', function() { document.title = title; }); } ); });application/library/js/jquery.elfinder.js000064400000026254146731177160014621 0ustar00/*** jQuery UI droppable performance tune for elFinder ***/ (function(){ if ($.ui) { if ($.ui.ddmanager) { var origin = $.ui.ddmanager.prepareOffsets; $.ui.ddmanager.prepareOffsets = function( t, event ) { var isOutView = function(elem) { if (elem.is(':hidden')) { return true; } var rect = elem[0].getBoundingClientRect(); return document.elementFromPoint(rect.left, rect.top) || document.elementFromPoint(rect.left + rect.width, rect.top + rect.height)? false : true; }; if (event.type === 'mousedown' || t.options.elfRefresh) { var i, d, m = $.ui.ddmanager.droppables[ t.options.scope ] || [], l = m.length; for ( i = 0; i < l; i++ ) { d = m[ i ]; if (d.options.autoDisable && (!d.options.disabled || d.options.autoDisable > 1)) { d.options.disabled = isOutView(d.element); d.options.autoDisable = d.options.disabled? 2 : 1; } } } // call origin function return origin( t, event ); }; } } })(); /** * * jquery.binarytransport * * @description. jQuery ajax transport for making binary data type requests. * */ (function($, undefined) { "use strict"; // use this transport for "binary" data type $.ajaxTransport("+binary", function(options, originalOptions, jqXHR) { // check for conditions and support for blob / arraybuffer response type if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || (window.Blob && options.data instanceof Blob))))) { var callback; // Cross domain only allowed if supported through XMLHttpRequest return { send: function( headers, complete ) { var i, dataType = options.responseType || "blob", xhr = options.xhr(); xhr.open( options.type, options.url, options.async, options.username, options.password ); // Apply custom fields if provided if ( options.xhrFields ) { for ( i in options.xhrFields ) { xhr[ i ] = options.xhrFields[ i ]; } } // Override mime type if needed if ( options.mimeType && xhr.overrideMimeType ) { xhr.overrideMimeType( options.mimeType ); } // X-Requested-With header // For cross-domain requests, seeing as conditions for a preflight are // akin to a jigsaw puzzle, we simply never set it to be sure. // (it can always be set on a per-request basis or even using ajaxSetup) // For same-domain requests, won't change header if already provided. if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { headers[ "X-Requested-With" ] = "XMLHttpRequest"; } // Set headers for ( i in headers ) { xhr.setRequestHeader( i, headers[ i ] ); } // Callback callback = function( type ) { return function() { if ( callback ) { callback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null; if ( type === "abort" ) { xhr.abort(); } else if ( type === "error" ) { complete( xhr.status, xhr.statusText ); } else { var data = {}; data[options.dataType] = xhr.response; complete( xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders() ); } } }; }; // Listen to events xhr.onload = callback(); xhr.onabort = xhr.onerror = xhr.ontimeout = callback( "error" ); // Create the abort callback callback = callback( "abort" ); try { xhr.responseType = dataType; // Do send the request (this may raise an exception) xhr.send( options.data || null ); } catch ( e ) { if ( callback ) { throw e; } } }, abort: function() { if ( callback ) { callback(); } } }; } }); })(window.jQuery); /*! * jQuery UI Touch Punch 0.2.3 * * Copyright 2011–2014, Dave Furfero * Dual licensed under the MIT or GPL Version 2 licenses. * * Depends: * jquery.ui.widget.js * jquery.ui.mouse.js */ (function ($) { // Detect touch support $.support.touch = 'ontouchend' in document; // Ignore browsers without touch support if (!$.support.touch) { return; } var mouseProto = $.ui.mouse.prototype, _mouseInit = mouseProto._mouseInit, _mouseDestroy = mouseProto._mouseDestroy, touchHandled, posX, posY; /** * Simulate a mouse event based on a corresponding touch event * @param {Object} event A touch event * @param {String} simulatedType The corresponding mouse event */ function simulateMouseEvent (event, simulatedType) { // Ignore multi-touch events if (event.originalEvent.touches.length > 1) { return; } if (! $(event.currentTarget).hasClass('touch-punch-keep-default')) { event.preventDefault(); } var touch = event.originalEvent.changedTouches[0], simulatedEvent = document.createEvent('MouseEvents'); // Initialize the simulated mouse event using the touch event's coordinates simulatedEvent.initMouseEvent( simulatedType, // type true, // bubbles true, // cancelable window, // view 1, // detail touch.screenX, // screenX touch.screenY, // screenY touch.clientX, // clientX touch.clientY, // clientY false, // ctrlKey false, // altKey false, // shiftKey false, // metaKey 0, // button null // relatedTarget ); // Dispatch the simulated event to the target element event.target.dispatchEvent(simulatedEvent); } /** * Handle the jQuery UI widget's touchstart events * @param {Object} event The widget element's touchstart event */ mouseProto._touchStart = function (event) { var self = this; // Ignore the event if another widget is already being handled if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) { return; } // Track element position to avoid "false" move posX = event.originalEvent.changedTouches[0].screenX.toFixed(0); posY = event.originalEvent.changedTouches[0].screenY.toFixed(0); // Set the flag to prevent other widgets from inheriting the touch event touchHandled = true; // Track movement to determine if interaction was a click self._touchMoved = false; // Simulate the mouseover event simulateMouseEvent(event, 'mouseover'); // Simulate the mousemove event simulateMouseEvent(event, 'mousemove'); // Simulate the mousedown event simulateMouseEvent(event, 'mousedown'); }; /** * Handle the jQuery UI widget's touchmove events * @param {Object} event The document's touchmove event */ mouseProto._touchMove = function (event) { // Ignore event if not handled if (!touchHandled) { return; } // Ignore if it's a "false" move (position not changed) var x = event.originalEvent.changedTouches[0].screenX.toFixed(0); var y = event.originalEvent.changedTouches[0].screenY.toFixed(0); // Ignore if it's a "false" move (position not changed) if (Math.abs(posX - x) <= 4 && Math.abs(posY - y) <= 4) { return; } // Interaction was not a click this._touchMoved = true; // Simulate the mousemove event simulateMouseEvent(event, 'mousemove'); }; /** * Handle the jQuery UI widget's touchend events * @param {Object} event The document's touchend event */ mouseProto._touchEnd = function (event) { // Ignore event if not handled if (!touchHandled) { return; } // Simulate the mouseup event simulateMouseEvent(event, 'mouseup'); // Simulate the mouseout event simulateMouseEvent(event, 'mouseout'); // If the touch interaction did not move, it should trigger a click if (!this._touchMoved) { // Simulate the click event simulateMouseEvent(event, 'click'); } // Unset the flag to allow other widgets to inherit the touch event touchHandled = false; this._touchMoved = false; }; /** * A duck punch of the $.ui.mouse _mouseInit method to support touch events. * This method extends the widget with bound touch event handlers that * translate touch events to mouse events and pass them to the widget's * original mouse event handling methods. */ mouseProto._mouseInit = function () { var self = this; if (self.element.hasClass('touch-punch')) { // Delegate the touch handlers to the widget's element self.element.on({ touchstart: $.proxy(self, '_touchStart'), touchmove: $.proxy(self, '_touchMove'), touchend: $.proxy(self, '_touchEnd') }); } // Call the original $.ui.mouse init method _mouseInit.call(self); }; /** * Remove the touch event handlers */ mouseProto._mouseDestroy = function () { var self = this; if (self.element.hasClass('touch-punch')) { // Delegate the touch handlers to the widget's element self.element.off({ touchstart: $.proxy(self, '_touchStart'), touchmove: $.proxy(self, '_touchMove'), touchend: $.proxy(self, '_touchEnd') }); } // Call the original $.ui.mouse destroy method _mouseDestroy.call(self); }; })(jQuery); $.fn.elfinder = function(o, o2) { if (o === 'instance') { return this.getElFinder(); } else if (o === 'ondemand') { } return this.each(function() { var cmd = typeof o === 'string' ? o : '', bootCallback = typeof o2 === 'function'? o2 : void(0), elfinder = this.elfinder, opts, reloadCallback; if (!elfinder) { if ($.isPlainObject(o)) { new elFinder(this, o, bootCallback); } } else { switch(cmd) { case 'close': case 'hide': elfinder.hide(); break; case 'open': case 'show': elfinder.show(); break; case 'destroy': elfinder.destroy(); break; case 'reload': case 'restart': if (elfinder) { opts = $.extend(true, elfinder.options, $.isPlainObject(o2)? o2 : {}); bootCallback = elfinder.bootCallback; if (elfinder.reloadCallback && $.isFunction(elfinder.reloadCallback)) { elfinder.reloadCallback(opts, bootCallback); } else { elfinder.destroy(); new elFinder(this, opts, bootCallback); } } break; } } }); }; $.fn.getElFinder = function() { var instance; this.each(function() { if (this.elfinder) { instance = this.elfinder; return false; } }); return instance; }; $.fn.elfUiWidgetInstance = function(name) { try { return this[name]('instance'); } catch(e) { // fallback for jQuery UI < 1.11 var data = this.data('ui-' + name); if (data && typeof data === 'object' && data.widgetFullName === 'ui-' + name) { return data; } return null; } }; // function scrollRight if (! $.fn.scrollRight) { $.fn.extend({ scrollRight: function (val) { var node = this.get(0); if (val === undefined) { return Math.max(0, node.scrollWidth - (node.scrollLeft + node.clientWidth)); } return this.scrollLeft(node.scrollWidth - node.clientWidth - val); } }); } // function scrollBottom if (! $.fn.scrollBottom) { $.fn.extend({ scrollBottom: function(val) { var node = this.get(0); if (val === undefined) { return Math.max(0, node.scrollHeight - (node.scrollTop + node.clientHeight)); } return this.scrollTop(node.scrollHeight - node.clientHeight - val); } }); } application/library/js/elFinder.mimetypes.js000064400000065756146731177160015270 0ustar00elFinder.prototype.mimeTypes = {"application\/x-executable":"exe","application\/x-jar":"jar","application\/x-gzip":"gz","application\/x-bzip2":"tbz","application\/x-rar":"rar","text\/x-php":"php","text\/javascript":"js","application\/rtfd":"rtfd","text\/x-python":"py","text\/x-ruby":"rb","text\/x-shellscript":"sh","text\/x-perl":"pl","text\/xml":"xml","text\/x-csrc":"c","text\/x-chdr":"h","text\/x-c++src":"cpp","text\/x-c++hdr":"hh","text\/x-markdown":"md","text\/x-yaml":"yml","image\/x-ms-bmp":"bmp","image\/x-targa":"tga","image\/xbm":"xbm","image\/pxm":"pxm","audio\/wav":"wav","video\/x-dv":"dv","video\/x-ms-wmv":"wm","video\/ogg":"ogm","video\/MP2T":"m2ts","application\/x-mpegURL":"m3u8","application\/dash+xml":"mpd","application\/andrew-inset":"ez","application\/applixware":"aw","application\/atom+xml":"atom","application\/atomcat+xml":"atomcat","application\/atomsvc+xml":"atomsvc","application\/ccxml+xml":"ccxml","application\/cdmi-capability":"cdmia","application\/cdmi-container":"cdmic","application\/cdmi-domain":"cdmid","application\/cdmi-object":"cdmio","application\/cdmi-queue":"cdmiq","application\/cu-seeme":"cu","application\/davmount+xml":"davmount","application\/docbook+xml":"dbk","application\/dssc+der":"dssc","application\/dssc+xml":"xdssc","application\/ecmascript":"ecma","application\/emma+xml":"emma","application\/epub+zip":"epub","application\/exi":"exi","application\/font-tdpfr":"pfr","application\/gml+xml":"gml","application\/gpx+xml":"gpx","application\/gxf":"gxf","application\/hyperstudio":"stk","application\/inkml+xml":"ink","application\/ipfix":"ipfix","application\/java-serialized-object":"ser","application\/java-vm":"class","application\/json":"json","application\/jsonml+json":"jsonml","application\/lost+xml":"lostxml","application\/mac-binhex40":"hqx","application\/mac-compactpro":"cpt","application\/mads+xml":"mads","application\/marc":"mrc","application\/marcxml+xml":"mrcx","application\/mathematica":"ma","application\/mathml+xml":"mathml","application\/mbox":"mbox","application\/mediaservercontrol+xml":"mscml","application\/metalink+xml":"metalink","application\/metalink4+xml":"meta4","application\/mets+xml":"mets","application\/mods+xml":"mods","application\/mp21":"m21","application\/mp4":"mp4s","application\/msword":"doc","application\/mxf":"mxf","application\/octet-stream":"bin","application\/oda":"oda","application\/oebps-package+xml":"opf","application\/ogg":"ogx","application\/omdoc+xml":"omdoc","application\/onenote":"onetoc","application\/oxps":"oxps","application\/patch-ops-error+xml":"xer","application\/pdf":"pdf","application\/pgp-encrypted":"pgp","application\/pgp-signature":"asc","application\/pics-rules":"prf","application\/pkcs10":"p10","application\/pkcs7-mime":"p7m","application\/pkcs7-signature":"p7s","application\/pkcs8":"p8","application\/pkix-attr-cert":"ac","application\/pkix-cert":"cer","application\/pkix-crl":"crl","application\/pkix-pkipath":"pkipath","application\/pkixcmp":"pki","application\/pls+xml":"pls","application\/postscript":"ai","application\/prs.cww":"cww","application\/pskc+xml":"pskcxml","application\/rdf+xml":"rdf","application\/reginfo+xml":"rif","application\/relax-ng-compact-syntax":"rnc","application\/resource-lists+xml":"rl","application\/resource-lists-diff+xml":"rld","application\/rls-services+xml":"rs","application\/rpki-ghostbusters":"gbr","application\/rpki-manifest":"mft","application\/rpki-roa":"roa","application\/rsd+xml":"rsd","application\/rss+xml":"rss","application\/rtf":"rtf","application\/sbml+xml":"sbml","application\/scvp-cv-request":"scq","application\/scvp-cv-response":"scs","application\/scvp-vp-request":"spq","application\/scvp-vp-response":"spp","application\/sdp":"sdp","application\/set-payment-initiation":"setpay","application\/set-registration-initiation":"setreg","application\/shf+xml":"shf","application\/smil+xml":"smi","application\/sparql-query":"rq","application\/sparql-results+xml":"srx","application\/srgs":"gram","application\/srgs+xml":"grxml","application\/sru+xml":"sru","application\/ssdl+xml":"ssdl","application\/ssml+xml":"ssml","application\/tei+xml":"tei","application\/thraud+xml":"tfi","application\/timestamped-data":"tsd","application\/vnd.3gpp.pic-bw-large":"plb","application\/vnd.3gpp.pic-bw-small":"psb","application\/vnd.3gpp.pic-bw-var":"pvb","application\/vnd.3gpp2.tcap":"tcap","application\/vnd.3m.post-it-notes":"pwn","application\/vnd.accpac.simply.aso":"aso","application\/vnd.accpac.simply.imp":"imp","application\/vnd.acucobol":"acu","application\/vnd.acucorp":"atc","application\/vnd.adobe.air-application-installer-package+zip":"air","application\/vnd.adobe.formscentral.fcdt":"fcdt","application\/vnd.adobe.fxp":"fxp","application\/vnd.adobe.xdp+xml":"xdp","application\/vnd.adobe.xfdf":"xfdf","application\/vnd.ahead.space":"ahead","application\/vnd.airzip.filesecure.azf":"azf","application\/vnd.airzip.filesecure.azs":"azs","application\/vnd.amazon.ebook":"azw","application\/vnd.americandynamics.acc":"acc","application\/vnd.amiga.ami":"ami","application\/vnd.android.package-archive":"apk","application\/vnd.anser-web-certificate-issue-initiation":"cii","application\/vnd.anser-web-funds-transfer-initiation":"fti","application\/vnd.antix.game-component":"atx","application\/vnd.apple.installer+xml":"mpkg","application\/vnd.aristanetworks.swi":"swi","application\/vnd.astraea-software.iota":"iota","application\/vnd.audiograph":"aep","application\/vnd.blueice.multipass":"mpm","application\/vnd.bmi":"bmi","application\/vnd.businessobjects":"rep","application\/vnd.chemdraw+xml":"cdxml","application\/vnd.chipnuts.karaoke-mmd":"mmd","application\/vnd.cinderella":"cdy","application\/vnd.claymore":"cla","application\/vnd.cloanto.rp9":"rp9","application\/vnd.clonk.c4group":"c4g","application\/vnd.cluetrust.cartomobile-config":"c11amc","application\/vnd.cluetrust.cartomobile-config-pkg":"c11amz","application\/vnd.commonspace":"csp","application\/vnd.contact.cmsg":"cdbcmsg","application\/vnd.cosmocaller":"cmc","application\/vnd.crick.clicker":"clkx","application\/vnd.crick.clicker.keyboard":"clkk","application\/vnd.crick.clicker.palette":"clkp","application\/vnd.crick.clicker.template":"clkt","application\/vnd.crick.clicker.wordbank":"clkw","application\/vnd.criticaltools.wbs+xml":"wbs","application\/vnd.ctc-posml":"pml","application\/vnd.cups-ppd":"ppd","application\/vnd.curl.car":"car","application\/vnd.curl.pcurl":"pcurl","application\/vnd.dart":"dart","application\/vnd.data-vision.rdz":"rdz","application\/vnd.dece.data":"uvf","application\/vnd.dece.ttml+xml":"uvt","application\/vnd.dece.unspecified":"uvx","application\/vnd.dece.zip":"uvz","application\/vnd.denovo.fcselayout-link":"fe_launch","application\/vnd.dna":"dna","application\/vnd.dolby.mlp":"mlp","application\/vnd.dpgraph":"dpg","application\/vnd.dreamfactory":"dfac","application\/vnd.ds-keypoint":"kpxx","application\/vnd.dvb.ait":"ait","application\/vnd.dvb.service":"svc","application\/vnd.dynageo":"geo","application\/vnd.ecowin.chart":"mag","application\/vnd.enliven":"nml","application\/vnd.epson.esf":"esf","application\/vnd.epson.msf":"msf","application\/vnd.epson.quickanime":"qam","application\/vnd.epson.salt":"slt","application\/vnd.epson.ssf":"ssf","application\/vnd.eszigno3+xml":"es3","application\/vnd.ezpix-album":"ez2","application\/vnd.ezpix-package":"ez3","application\/vnd.fdf":"fdf","application\/vnd.fdsn.mseed":"mseed","application\/vnd.fdsn.seed":"seed","application\/vnd.flographit":"gph","application\/vnd.fluxtime.clip":"ftc","application\/vnd.framemaker":"fm","application\/vnd.frogans.fnc":"fnc","application\/vnd.frogans.ltf":"ltf","application\/vnd.fsc.weblaunch":"fsc","application\/vnd.fujitsu.oasys":"oas","application\/vnd.fujitsu.oasys2":"oa2","application\/vnd.fujitsu.oasys3":"oa3","application\/vnd.fujitsu.oasysgp":"fg5","application\/vnd.fujitsu.oasysprs":"bh2","application\/vnd.fujixerox.ddd":"ddd","application\/vnd.fujixerox.docuworks":"xdw","application\/vnd.fujixerox.docuworks.binder":"xbd","application\/vnd.fuzzysheet":"fzs","application\/vnd.genomatix.tuxedo":"txd","application\/vnd.geogebra.file":"ggb","application\/vnd.geogebra.tool":"ggt","application\/vnd.geometry-explorer":"gex","application\/vnd.geonext":"gxt","application\/vnd.geoplan":"g2w","application\/vnd.geospace":"g3w","application\/vnd.gmx":"gmx","application\/vnd.google-earth.kml+xml":"kml","application\/vnd.google-earth.kmz":"kmz","application\/vnd.grafeq":"gqf","application\/vnd.groove-account":"gac","application\/vnd.groove-help":"ghf","application\/vnd.groove-identity-message":"gim","application\/vnd.groove-injector":"grv","application\/vnd.groove-tool-message":"gtm","application\/vnd.groove-tool-template":"tpl","application\/vnd.groove-vcard":"vcg","application\/vnd.hal+xml":"hal","application\/vnd.handheld-entertainment+xml":"zmm","application\/vnd.hbci":"hbci","application\/vnd.hhe.lesson-player":"les","application\/vnd.hp-hpgl":"hpgl","application\/vnd.hp-hpid":"hpid","application\/vnd.hp-hps":"hps","application\/vnd.hp-jlyt":"jlt","application\/vnd.hp-pcl":"pcl","application\/vnd.hp-pclxl":"pclxl","application\/vnd.hydrostatix.sof-data":"sfd-hdstx","application\/vnd.ibm.minipay":"mpy","application\/vnd.ibm.modcap":"afp","application\/vnd.ibm.rights-management":"irm","application\/vnd.ibm.secure-container":"sc","application\/vnd.iccprofile":"icc","application\/vnd.igloader":"igl","application\/vnd.immervision-ivp":"ivp","application\/vnd.immervision-ivu":"ivu","application\/vnd.insors.igm":"igm","application\/vnd.intercon.formnet":"xpw","application\/vnd.intergeo":"i2g","application\/vnd.intu.qbo":"qbo","application\/vnd.intu.qfx":"qfx","application\/vnd.ipunplugged.rcprofile":"rcprofile","application\/vnd.irepository.package+xml":"irp","application\/vnd.is-xpr":"xpr","application\/vnd.isac.fcs":"fcs","application\/vnd.jam":"jam","application\/vnd.jcp.javame.midlet-rms":"rms","application\/vnd.jisp":"jisp","application\/vnd.joost.joda-archive":"joda","application\/vnd.kahootz":"ktz","application\/vnd.kde.karbon":"karbon","application\/vnd.kde.kchart":"chrt","application\/vnd.kde.kformula":"kfo","application\/vnd.kde.kivio":"flw","application\/vnd.kde.kontour":"kon","application\/vnd.kde.kpresenter":"kpr","application\/vnd.kde.kspread":"ksp","application\/vnd.kde.kword":"kwd","application\/vnd.kenameaapp":"htke","application\/vnd.kidspiration":"kia","application\/vnd.kinar":"kne","application\/vnd.koan":"skp","application\/vnd.kodak-descriptor":"sse","application\/vnd.las.las+xml":"lasxml","application\/vnd.llamagraphics.life-balance.desktop":"lbd","application\/vnd.llamagraphics.life-balance.exchange+xml":"lbe","application\/vnd.lotus-1-2-3":123,"application\/vnd.lotus-approach":"apr","application\/vnd.lotus-freelance":"pre","application\/vnd.lotus-notes":"nsf","application\/vnd.lotus-organizer":"org","application\/vnd.lotus-screencam":"scm","application\/vnd.lotus-wordpro":"lwp","application\/vnd.macports.portpkg":"portpkg","application\/vnd.mcd":"mcd","application\/vnd.medcalcdata":"mc1","application\/vnd.mediastation.cdkey":"cdkey","application\/vnd.mfer":"mwf","application\/vnd.mfmp":"mfm","application\/vnd.micrografx.flo":"flo","application\/vnd.micrografx.igx":"igx","application\/vnd.mif":"mif","application\/vnd.mobius.daf":"daf","application\/vnd.mobius.dis":"dis","application\/vnd.mobius.mbk":"mbk","application\/vnd.mobius.mqy":"mqy","application\/vnd.mobius.msl":"msl","application\/vnd.mobius.plc":"plc","application\/vnd.mobius.txf":"txf","application\/vnd.mophun.application":"mpn","application\/vnd.mophun.certificate":"mpc","application\/vnd.mozilla.xul+xml":"xul","application\/vnd.ms-artgalry":"cil","application\/vnd.ms-cab-compressed":"cab","application\/vnd.ms-excel":"xls","application\/vnd.ms-excel.addin.macroenabled.12":"xlam","application\/vnd.ms-excel.sheet.binary.macroenabled.12":"xlsb","application\/vnd.ms-excel.sheet.macroenabled.12":"xlsm","application\/vnd.ms-excel.template.macroenabled.12":"xltm","application\/vnd.ms-fontobject":"eot","application\/vnd.ms-htmlhelp":"chm","application\/vnd.ms-ims":"ims","application\/vnd.ms-lrm":"lrm","application\/vnd.ms-officetheme":"thmx","application\/vnd.ms-outlook":"msg","application\/vnd.ms-pki.seccat":"cat","application\/vnd.ms-pki.stl":"stl","application\/vnd.ms-powerpoint":"ppt","application\/vnd.ms-powerpoint.addin.macroenabled.12":"ppam","application\/vnd.ms-powerpoint.presentation.macroenabled.12":"pptm","application\/vnd.ms-powerpoint.slide.macroenabled.12":"sldm","application\/vnd.ms-powerpoint.slideshow.macroenabled.12":"ppsm","application\/vnd.ms-powerpoint.template.macroenabled.12":"potm","application\/vnd.ms-project":"mpp","application\/vnd.ms-word.document.macroenabled.12":"docm","application\/vnd.ms-word.template.macroenabled.12":"dotm","application\/vnd.ms-works":"wps","application\/vnd.ms-wpl":"wpl","application\/vnd.ms-xpsdocument":"xps","application\/vnd.mseq":"mseq","application\/vnd.musician":"mus","application\/vnd.muvee.style":"msty","application\/vnd.mynfc":"taglet","application\/vnd.neurolanguage.nlu":"nlu","application\/vnd.nitf":"ntf","application\/vnd.noblenet-directory":"nnd","application\/vnd.noblenet-sealer":"nns","application\/vnd.noblenet-web":"nnw","application\/vnd.nokia.n-gage.data":"ngdat","application\/vnd.nokia.n-gage.symbian.install":"n-gage","application\/vnd.nokia.radio-preset":"rpst","application\/vnd.nokia.radio-presets":"rpss","application\/vnd.novadigm.edm":"edm","application\/vnd.novadigm.edx":"edx","application\/vnd.novadigm.ext":"ext","application\/vnd.oasis.opendocument.chart":"odc","application\/vnd.oasis.opendocument.chart-template":"otc","application\/vnd.oasis.opendocument.database":"odb","application\/vnd.oasis.opendocument.formula":"odf","application\/vnd.oasis.opendocument.formula-template":"odft","application\/vnd.oasis.opendocument.graphics":"odg","application\/vnd.oasis.opendocument.graphics-template":"otg","application\/vnd.oasis.opendocument.image":"odi","application\/vnd.oasis.opendocument.image-template":"oti","application\/vnd.oasis.opendocument.presentation":"odp","application\/vnd.oasis.opendocument.presentation-template":"otp","application\/vnd.oasis.opendocument.spreadsheet":"ods","application\/vnd.oasis.opendocument.spreadsheet-template":"ots","application\/vnd.oasis.opendocument.text":"odt","application\/vnd.oasis.opendocument.text-master":"odm","application\/vnd.oasis.opendocument.text-template":"ott","application\/vnd.oasis.opendocument.text-web":"oth","application\/vnd.olpc-sugar":"xo","application\/vnd.oma.dd2+xml":"dd2","application\/vnd.openofficeorg.extension":"oxt","application\/vnd.openxmlformats-officedocument.presentationml.presentation":"pptx","application\/vnd.openxmlformats-officedocument.presentationml.slide":"sldx","application\/vnd.openxmlformats-officedocument.presentationml.slideshow":"ppsx","application\/vnd.openxmlformats-officedocument.presentationml.template":"potx","application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx","application\/vnd.openxmlformats-officedocument.spreadsheetml.template":"xltx","application\/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx","application\/vnd.openxmlformats-officedocument.wordprocessingml.template":"dotx","application\/vnd.osgeo.mapguide.package":"mgp","application\/vnd.osgi.dp":"dp","application\/vnd.osgi.subsystem":"esa","application\/vnd.palm":"pdb","application\/vnd.pawaafile":"paw","application\/vnd.pg.format":"str","application\/vnd.pg.osasli":"ei6","application\/vnd.picsel":"efif","application\/vnd.pmi.widget":"wg","application\/vnd.pocketlearn":"plf","application\/vnd.powerbuilder6":"pbd","application\/vnd.previewsystems.box":"box","application\/vnd.proteus.magazine":"mgz","application\/vnd.publishare-delta-tree":"qps","application\/vnd.pvi.ptid1":"ptid","application\/vnd.quark.quarkxpress":"qxd","application\/vnd.realvnc.bed":"bed","application\/vnd.recordare.musicxml":"mxl","application\/vnd.recordare.musicxml+xml":"musicxml","application\/vnd.rig.cryptonote":"cryptonote","application\/vnd.rim.cod":"cod","application\/vnd.rn-realmedia":"rm","application\/vnd.rn-realmedia-vbr":"rmvb","application\/vnd.route66.link66+xml":"link66","application\/vnd.sailingtracker.track":"st","application\/vnd.seemail":"see","application\/vnd.sema":"sema","application\/vnd.semd":"semd","application\/vnd.semf":"semf","application\/vnd.shana.informed.formdata":"ifm","application\/vnd.shana.informed.formtemplate":"itp","application\/vnd.shana.informed.interchange":"iif","application\/vnd.shana.informed.package":"ipk","application\/vnd.simtech-mindmapper":"twd","application\/vnd.smaf":"mmf","application\/vnd.smart.teacher":"teacher","application\/vnd.solent.sdkm+xml":"sdkm","application\/vnd.spotfire.dxp":"dxp","application\/vnd.spotfire.sfs":"sfs","application\/vnd.stardivision.calc":"sdc","application\/vnd.stardivision.draw":"sda","application\/vnd.stardivision.impress":"sdd","application\/vnd.stardivision.math":"smf","application\/vnd.stardivision.writer":"sdw","application\/vnd.stardivision.writer-global":"sgl","application\/vnd.stepmania.package":"smzip","application\/vnd.stepmania.stepchart":"sm","application\/vnd.sun.xml.calc":"sxc","application\/vnd.sun.xml.calc.template":"stc","application\/vnd.sun.xml.draw":"sxd","application\/vnd.sun.xml.draw.template":"std","application\/vnd.sun.xml.impress":"sxi","application\/vnd.sun.xml.impress.template":"sti","application\/vnd.sun.xml.math":"sxm","application\/vnd.sun.xml.writer":"sxw","application\/vnd.sun.xml.writer.global":"sxg","application\/vnd.sun.xml.writer.template":"stw","application\/vnd.sus-calendar":"sus","application\/vnd.svd":"svd","application\/vnd.symbian.install":"sis","application\/vnd.syncml+xml":"xsm","application\/vnd.syncml.dm+wbxml":"bdm","application\/vnd.syncml.dm+xml":"xdm","application\/vnd.tao.intent-module-archive":"tao","application\/vnd.tcpdump.pcap":"pcap","application\/vnd.tmobile-livetv":"tmo","application\/vnd.trid.tpt":"tpt","application\/vnd.triscape.mxs":"mxs","application\/vnd.trueapp":"tra","application\/vnd.ufdl":"ufd","application\/vnd.uiq.theme":"utz","application\/vnd.umajin":"umj","application\/vnd.unity":"unityweb","application\/vnd.uoml+xml":"uoml","application\/vnd.vcx":"vcx","application\/vnd.visio":"vsd","application\/vnd.visionary":"vis","application\/vnd.vsf":"vsf","application\/vnd.wap.wbxml":"wbxml","application\/vnd.wap.wmlc":"wmlc","application\/vnd.wap.wmlscriptc":"wmlsc","application\/vnd.webturbo":"wtb","application\/vnd.wolfram.player":"nbp","application\/vnd.wordperfect":"wpd","application\/vnd.wqd":"wqd","application\/vnd.wt.stf":"stf","application\/vnd.xara":"xar","application\/vnd.xfdl":"xfdl","application\/vnd.yamaha.hv-dic":"hvd","application\/vnd.yamaha.hv-script":"hvs","application\/vnd.yamaha.hv-voice":"hvp","application\/vnd.yamaha.openscoreformat":"osf","application\/vnd.yamaha.openscoreformat.osfpvg+xml":"osfpvg","application\/vnd.yamaha.smaf-audio":"saf","application\/vnd.yamaha.smaf-phrase":"spf","application\/vnd.yellowriver-custom-menu":"cmp","application\/vnd.zul":"zir","application\/vnd.zzazz.deck+xml":"zaz","application\/voicexml+xml":"vxml","application\/widget":"wgt","application\/winhlp":"hlp","application\/wsdl+xml":"wsdl","application\/wspolicy+xml":"wspolicy","application\/x-7z-compressed":"7z","application\/x-abiword":"abw","application\/x-ace-compressed":"ace","application\/x-apple-diskimage":"dmg","application\/x-authorware-bin":"aab","application\/x-authorware-map":"aam","application\/x-authorware-seg":"aas","application\/x-bcpio":"bcpio","application\/x-bittorrent":"torrent","application\/x-blorb":"blb","application\/x-bzip":"bz","application\/x-cbr":"cbr","application\/x-cdlink":"vcd","application\/x-cfs-compressed":"cfs","application\/x-chat":"chat","application\/x-chess-pgn":"pgn","application\/x-conference":"nsc","application\/x-cpio":"cpio","application\/x-csh":"csh","application\/x-debian-package":"deb","application\/x-dgc-compressed":"dgc","application\/x-director":"dir","application\/x-doom":"wad","application\/x-dtbncx+xml":"ncx","application\/x-dtbook+xml":"dtb","application\/x-dtbresource+xml":"res","application\/x-dvi":"dvi","application\/x-envoy":"evy","application\/x-eva":"eva","application\/x-font-bdf":"bdf","application\/x-font-ghostscript":"gsf","application\/x-font-linux-psf":"psf","application\/x-font-pcf":"pcf","application\/x-font-snf":"snf","application\/x-font-type1":"pfa","application\/x-freearc":"arc","application\/x-futuresplash":"spl","application\/x-gca-compressed":"gca","application\/x-glulx":"ulx","application\/x-gnumeric":"gnumeric","application\/x-gramps-xml":"gramps","application\/x-gtar":"gtar","application\/x-hdf":"hdf","application\/x-install-instructions":"install","application\/x-iso9660-image":"iso","application\/x-java-jnlp-file":"jnlp","application\/x-latex":"latex","application\/x-lzh-compressed":"lzh","application\/x-mie":"mie","application\/x-mobipocket-ebook":"prc","application\/x-ms-application":"application","application\/x-ms-shortcut":"lnk","application\/x-ms-wmd":"wmd","application\/x-ms-wmz":"wmz","application\/x-ms-xbap":"xbap","application\/x-msaccess":"mdb","application\/x-msbinder":"obd","application\/x-mscardfile":"crd","application\/x-msclip":"clp","application\/x-msdownload":"dll","application\/x-msmediaview":"mvb","application\/x-msmetafile":"wmf","application\/x-msmoney":"mny","application\/x-mspublisher":"pub","application\/x-msschedule":"scd","application\/x-msterminal":"trm","application\/x-mswrite":"wri","application\/x-netcdf":"nc","application\/x-nzb":"nzb","application\/x-pkcs12":"p12","application\/x-pkcs7-certificates":"p7b","application\/x-pkcs7-certreqresp":"p7r","application\/x-research-info-systems":"ris","application\/x-shar":"shar","application\/x-shockwave-flash":"swf","application\/x-silverlight-app":"xap","application\/x-sql":"sql","application\/x-stuffit":"sit","application\/x-stuffitx":"sitx","application\/x-subrip":"srt","application\/x-sv4cpio":"sv4cpio","application\/x-sv4crc":"sv4crc","application\/x-t3vm-image":"t3","application\/x-tads":"gam","application\/x-tar":"tar","application\/x-tcl":"tcl","application\/x-tex":"tex","application\/x-tex-tfm":"tfm","application\/x-texinfo":"texinfo","application\/x-tgif":"obj","application\/x-ustar":"ustar","application\/x-wais-source":"src","application\/x-x509-ca-cert":"der","application\/x-xfig":"fig","application\/x-xliff+xml":"xlf","application\/x-xpinstall":"xpi","application\/x-xz":"xz","application\/x-zmachine":"z1","application\/xaml+xml":"xaml","application\/xcap-diff+xml":"xdf","application\/xenc+xml":"xenc","application\/xhtml+xml":"xhtml","application\/xml":"xsl","application\/xml-dtd":"dtd","application\/xop+xml":"xop","application\/xproc+xml":"xpl","application\/xslt+xml":"xslt","application\/xspf+xml":"xspf","application\/xv+xml":"mxml","application\/yang":"yang","application\/yin+xml":"yin","application\/zip":"zip","audio\/adpcm":"adp","audio\/basic":"au","audio\/midi":"mid","audio\/mp4":"m4a","audio\/mpeg":"mpga","audio\/ogg":"oga","audio\/s3m":"s3m","audio\/silk":"sil","audio\/vnd.dece.audio":"uva","audio\/vnd.digital-winds":"eol","audio\/vnd.dra":"dra","audio\/vnd.dts":"dts","audio\/vnd.dts.hd":"dtshd","audio\/vnd.lucent.voice":"lvp","audio\/vnd.ms-playready.media.pya":"pya","audio\/vnd.nuera.ecelp4800":"ecelp4800","audio\/vnd.nuera.ecelp7470":"ecelp7470","audio\/vnd.nuera.ecelp9600":"ecelp9600","audio\/vnd.rip":"rip","audio\/webm":"weba","audio\/x-aac":"aac","audio\/x-aiff":"aif","audio\/x-caf":"caf","audio\/x-flac":"flac","audio\/x-matroska":"mka","audio\/x-mpegurl":"m3u","audio\/x-ms-wax":"wax","audio\/x-ms-wma":"wma","audio\/x-pn-realaudio":"ram","audio\/x-pn-realaudio-plugin":"rmp","audio\/xm":"xm","chemical\/x-cdx":"cdx","chemical\/x-cif":"cif","chemical\/x-cmdf":"cmdf","chemical\/x-cml":"cml","chemical\/x-csml":"csml","chemical\/x-xyz":"xyz","font\/collection":"ttc","font\/otf":"otf","font\/ttf":"ttf","font\/woff":"woff","font\/woff2":"woff2","image\/cgm":"cgm","image\/g3fax":"g3","image\/gif":"gif","image\/ief":"ief","image\/jpeg":"jpeg","image\/ktx":"ktx","image\/png":"png","image\/prs.btif":"btif","image\/sgi":"sgi","image\/svg+xml":"svg","image\/tiff":"tiff","image\/vnd.adobe.photoshop":"psd","image\/vnd.dece.graphic":"uvi","image\/vnd.djvu":"djvu","image\/vnd.dvb.subtitle":"sub","image\/vnd.dwg":"dwg","image\/vnd.dxf":"dxf","image\/vnd.fastbidsheet":"fbs","image\/vnd.fpx":"fpx","image\/vnd.fst":"fst","image\/vnd.fujixerox.edmics-mmr":"mmr","image\/vnd.fujixerox.edmics-rlc":"rlc","image\/vnd.ms-modi":"mdi","image\/vnd.ms-photo":"wdp","image\/vnd.net-fpx":"npx","image\/vnd.wap.wbmp":"wbmp","image\/vnd.xiff":"xif","image\/webp":"webp","image\/x-3ds":"3ds","image\/x-cmu-raster":"ras","image\/x-cmx":"cmx","image\/x-freehand":"fh","image\/x-icon":"ico","image\/x-mrsid-image":"sid","image\/x-pcx":"pcx","image\/x-pict":"pic","image\/x-portable-anymap":"pnm","image\/x-portable-bitmap":"pbm","image\/x-portable-graymap":"pgm","image\/x-portable-pixmap":"ppm","image\/x-rgb":"rgb","image\/x-xpixmap":"xpm","image\/x-xwindowdump":"xwd","message\/rfc822":"eml","model\/iges":"igs","model\/mesh":"msh","model\/vnd.collada+xml":"dae","model\/vnd.dwf":"dwf","model\/vnd.gdl":"gdl","model\/vnd.gtw":"gtw","model\/vnd.vtu":"vtu","model\/vrml":"wrl","model\/x3d+binary":"x3db","model\/x3d+vrml":"x3dv","model\/x3d+xml":"x3d","text\/cache-manifest":"appcache","text\/calendar":"ics","text\/css":"css","text\/csv":"csv","text\/html":"html","text\/n3":"n3","text\/plain":"txt","text\/prs.lines.tag":"dsc","text\/richtext":"rtx","text\/sgml":"sgml","text\/tab-separated-values":"tsv","text\/troff":"t","text\/turtle":"ttl","text\/uri-list":"uri","text\/vcard":"vcard","text\/vnd.curl":"curl","text\/vnd.curl.dcurl":"dcurl","text\/vnd.curl.mcurl":"mcurl","text\/vnd.curl.scurl":"scurl","text\/vnd.fly":"fly","text\/vnd.fmi.flexstor":"flx","text\/vnd.graphviz":"gv","text\/vnd.in3d.3dml":"3dml","text\/vnd.in3d.spot":"spot","text\/vnd.sun.j2me.app-descriptor":"jad","text\/vnd.wap.wml":"wml","text\/vnd.wap.wmlscript":"wmls","text\/x-asm":"s","text\/x-c":"cc","text\/x-fortran":"f","text\/x-java-source":"java","text\/x-nfo":"nfo","text\/x-opml":"opml","text\/x-pascal":"p","text\/x-setext":"etx","text\/x-sfv":"sfv","text\/x-uuencode":"uu","text\/x-vcalendar":"vcs","text\/x-vcard":"vcf","video\/3gpp":"3gp","video\/3gpp2":"3g2","video\/h261":"h261","video\/h263":"h263","video\/h264":"h264","video\/jpeg":"jpgv","video\/jpm":"jpm","video\/mj2":"mj2","video\/mp4":"mp4","video\/mpeg":"mpeg","video\/quicktime":"qt","video\/vnd.dece.hd":"uvh","video\/vnd.dece.mobile":"uvm","video\/vnd.dece.pd":"uvp","video\/vnd.dece.sd":"uvs","video\/vnd.dece.video":"uvv","video\/vnd.dvb.file":"dvb","video\/vnd.fvt":"fvt","video\/vnd.mpegurl":"mxu","video\/vnd.ms-playready.media.pyv":"pyv","video\/vnd.uvvu.mp4":"uvu","video\/vnd.vivo":"viv","video\/webm":"webm","video\/x-f4v":"f4v","video\/x-fli":"fli","video\/x-flv":"flv","video\/x-m4v":"m4v","video\/x-matroska":"mkv","video\/x-mng":"mng","video\/x-ms-asf":"asf","video\/x-ms-vob":"vob","video\/x-ms-wmx":"wmx","video\/x-ms-wvx":"wvx","video\/x-msvideo":"avi","video\/x-sgi-movie":"movie","video\/x-smv":"smv","x-conference\/x-cooltalk":"ice","text\/x-sql":"sql","image\/x-pixlr-data":"pxd","image\/x-adobe-dng":"dng","image\/x-sketch":"sketch","image\/x-xcf":"xcf","audio\/amr":"amr","image\/vnd-ms.dds":"dds","application\/plt":"plt","application\/sat":"sat","application\/step":"step","text\/x-httpd-cgi":"cgi","text\/x-asap":"asp","text\/x-jsp":"jsp"};application/library/js/elFinder.version.js000064400000000133146731177160014713 0ustar00/** * Application version * * @type String **/ elFinder.prototype.version = '2.1.62'; application/library/js/i18n/elfinder.pt_BR.js000064400000103364146731177160015065 0ustar00/** * Português translation * @author Leandro Carvalho * @author Wesley Osorio * @author Fernando H. Bandeira * @author Gustavo Brito * @version 2019-10-22 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.pt_BR = { translator : 'Leandro Carvalho <contato@leandrowebdev.net>, Wesley Osorio<wesleyfosorio@hotmail.com>, Fernando H. Bandeira <fernando.bandeira94@gmail.com>, Gustavo Brito <britopereiragustavo@gmail.com>', language : 'Português', direction : 'ltr', dateFormat : 'd M Y H:i', // will show like: 22 Out 2019 11:34 fancyDateFormat : '$1 H:i', // will show like: Hoje 11:34 nonameDateFormat : 'ymd-His', // noname upload will show like: 191022-113433 messages : { /********************************** errors **********************************/ 'error' : 'Erro', 'errUnknown' : 'Erro desconhecido.', 'errUnknownCmd' : 'Comando desconhecido.', 'errJqui' : 'Configuração inválida do JQuery UI. Verifique se os componentes selectable, draggable e droppable estão incluídos.', 'errNode' : 'elFinder requer um elemento DOM para ser criado.', 'errURL' : 'Configuração inválida do elFinder! Você deve setar a opção da URL.', 'errAccess' : 'Acesso negado.', 'errConnect' : 'Incapaz de conectar ao backend.', 'errAbort' : 'Conexão abortada.', 'errTimeout' : 'Tempo de conexão excedido', 'errNotFound' : 'Backend não encontrado.', 'errResponse' : 'Resposta inválida do backend.', 'errConf' : 'Configuração inválida do backend.', 'errJSON' : 'Módulo PHP JSON não está instalado.', 'errNoVolumes' : 'Não existe nenhum volume legível disponivel.', 'errCmdParams' : 'Parâmetro inválido para o comando "$1".', 'errDataNotJSON' : 'Dados não estão no formato JSON.', 'errDataEmpty' : 'Dados vazios.', 'errCmdReq' : 'Requisição do Backend requer nome de comando.', 'errOpen' : 'Incapaz de abrir "$1".', 'errNotFolder' : 'Objeto não é uma pasta.', 'errNotFile' : 'Objeto não é um arquivo.', 'errRead' : 'Incapaz de ler "$1".', 'errWrite' : 'Incapaz de escrever em "$1".', 'errPerm' : 'Permissão negada.', 'errLocked' : '"$1" está bloqueado e não pode ser renomeado, movido ou removido.', 'errExists' : 'O nome do arquivo "$1" já existe neste local.', 'errInvName' : 'Nome do arquivo inválido.', 'errInvDirname' : 'Nome da pasta inválida.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Pasta não encontrada.', 'errFileNotFound' : 'Arquivo não encontrado.', 'errTrgFolderNotFound' : 'Pasta de destino "$1" não encontrada.', 'errPopup' : 'O seu navegador está bloqueando popup\'s. Para abrir o arquivo, altere esta opção no seu Navegador.', 'errMkdir' : 'Incapaz de criar a pasta "$1".', 'errMkfile' : 'Incapaz de criar o arquivo "$1".', 'errRename' : 'Incapaz de renomear "$1".', 'errCopyFrom' : 'Copia dos arquivos do volume "$1" não permitida.', 'errCopyTo' : 'Copia dos arquivos para o volume "$1" não permitida.', 'errMkOutLink' : 'Incapaz de criar um link fora da unidade raiz.', // from v2.1 added 03.10.2015 'errUpload' : 'Erro no upload.', // old name - errUploadCommon 'errUploadFile' : 'Não foi possível fazer o upload "$1".', // old name - errUpload 'errUploadNoFiles' : 'Não foi encontrado nenhum arquivo para upload.', 'errUploadTotalSize' : 'Os dados excedem o tamanho máximo permitido.', // old name - errMaxSize 'errUploadFileSize' : 'Arquivo excede o tamanho máximo permitido.', // old name - errFileMaxSize 'errUploadMime' : 'Tipo de arquivo não permitido.', 'errUploadTransfer' : '"$1" erro na transferência.', 'errUploadTemp' : 'Incapaz de criar um arquivo temporário para upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objeto "$1" já existe neste local e não pode ser substituído por um objeto com outro tipo.', // new 'errReplace' : 'Incapaz de substituir "$1".', 'errSave' : 'Incapaz de salvar "$1".', 'errCopy' : 'Incapaz de copiar "$1".', 'errMove' : 'Incapaz de mover "$1".', 'errCopyInItself' : 'Incapaz de copiar "$1" nele mesmo.', 'errRm' : 'Incapaz de remover "$1".', 'errTrash' : 'Incapaz de deletar.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Incapaz de remover o(s) arquivo(s) fonte.', 'errExtract' : 'Incapaz de extrair os arquivos de "$1".', 'errArchive' : 'Incapaz de criar o arquivo.', 'errArcType' : 'Tipo de arquivo não suportado.', 'errNoArchive' : 'Arquivo inválido ou é de um tipo não suportado.', 'errCmdNoSupport' : 'Backend não suporta este comando.', 'errReplByChild' : 'A pasta “$1” não pode ser substituída por um item que contém.', 'errArcSymlinks' : 'Por razões de segurança, negada a permissão para descompactar arquivos que contenham links ou arquivos com nomes não permitidos.', // edited 24.06.2012 'errArcMaxSize' : 'Arquivo excede o tamanho máximo permitido.', 'errResize' : 'Incapaz de redimensionar "$1".', 'errResizeDegree' : 'Grau de rotação inválido.', // added 7.3.2013 'errResizeRotate' : 'Incapaz de rotacionar a imagem.', // added 7.3.2013 'errResizeSize' : 'Tamanho inválido de imagem.', // added 7.3.2013 'errResizeNoChange' : 'Tamanho da imagem não alterado.', // added 7.3.2013 'errUsupportType' : 'Tipo de arquivo não suportado.', 'errNotUTF8Content' : 'Arquivo "$1" não está em UTF-8 e não pode ser editado.', // added 9.11.2011 'errNetMount' : 'Incapaz de montar montagem "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocolo não suportado.', // added 17.04.2012 'errNetMountFailed' : 'Montagem falhou.', // added 17.04.2012 'errNetMountHostReq' : 'Servidor requerido.', // added 18.04.2012 'errSessionExpires' : 'Sua sessão expirou por inatividade.', 'errCreatingTempDir' : 'Não foi possível criar um diretório temporário: "$1"', 'errFtpDownloadFile' : 'Não foi possível fazer o download do arquivo do FTP: "$1"', 'errFtpUploadFile' : 'Não foi possível fazer o upload do arquivo para o FTP: "$1"', 'errFtpMkdir' : 'Não foi possível criar um diretório remoto no FTP: "$1"', 'errArchiveExec' : 'Erro ao arquivar os arquivos: "$1"', 'errExtractExec' : 'Erro na extração dos arquivos: "$1"', 'errNetUnMount' : 'Incapaz de desmontar', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Não conversivel para UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Tente utilizar o Google Chrome, se você deseja enviar uma pasta.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Tempo limite atingido para a busca "$1". O resultado da pesquisa é parcial.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-autorização é necessária.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'O número máximo de itens selecionáveis ​​é $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Não foi possível restaurar a partir do lixo. Não é possível identificar o destino da restauração.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor não encontrado para este tipo de arquivo.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Ocorreu um erro no lado do servidor.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Não foi possível esvaziar a pasta "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Existem mais $1 erros.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Criar arquivo', 'cmdback' : 'Voltar', 'cmdcopy' : 'Copiar', 'cmdcut' : 'Cortar', 'cmddownload' : 'Baixar', 'cmdduplicate' : 'Duplicar', 'cmdedit' : 'Editar arquivo', 'cmdextract' : 'Extrair arquivo de ficheiros', 'cmdforward' : 'Avançar', 'cmdgetfile' : 'Selecionar arquivos', 'cmdhelp' : 'Sobre este software', 'cmdhome' : 'Home', 'cmdinfo' : 'Propriedades', 'cmdmkdir' : 'Nova pasta', 'cmdmkdirin' : 'Em uma nova pasta', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Novo arquivo', 'cmdopen' : 'Abrir', 'cmdpaste' : 'Colar', 'cmdquicklook' : 'Pré-vizualização', 'cmdreload' : 'Recarregar', 'cmdrename' : 'Renomear', 'cmdrm' : 'Deletar', 'cmdtrash' : 'Mover para a lixeira', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurar', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Achar arquivos', 'cmdup' : 'Ir para o diretório pai', 'cmdupload' : 'Fazer upload de arquivo', 'cmdview' : 'Vizualizar', 'cmdresize' : 'Redimencionar & Rotacionar', 'cmdsort' : 'Ordenar', 'cmdnetmount' : 'Montar unidade de rede', // added 18.04.2012 'cmdnetunmount': 'Desmontar', // from v2.1 added 30.04.2012 'cmdplaces' : 'Para locais', // added 28.12.2014 'cmdchmod' : 'Alterar permissão', // from v2.1 added 20.6.2015 'cmdopendir' : 'Abrir pasta', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Redefinir largura da coluna', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Tela cheia', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Mover', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Esvaziar a pasta', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Desfazer', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Refazer', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferências', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Selecionar tudo', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Selecionar nenhum', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverter seleção', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Abrir em nova janela', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ocultar (preferência)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Fechar', 'btnSave' : 'Salvar', 'btnRm' : 'Remover', 'btnApply' : 'Aplicar', 'btnCancel' : 'Cancelar', 'btnNo' : 'Não', 'btnYes' : 'Sim', 'btnMount' : 'Montar', // added 18.04.2012 'btnApprove': 'Vá para $1 & aprove', // from v2.1 added 26.04.2012 'btnUnmount': 'Desmontar', // from v2.1 added 30.04.2012 'btnConv' : 'Converter', // from v2.1 added 08.04.2014 'btnCwd' : 'Aqui', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Todos', // from v2.1 added 22.5.2015 'btnMime' : 'Tipo MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nome do arquivo', // from v2.1 added 22.5.2015 'btnSaveClose': 'Salvar & Fechar', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Renomear', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Renomear (tudo)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Anterior ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Próximo ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Salvar como', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Abrir pasta', 'ntffile' : 'Abrir arquivo', 'ntfreload' : 'Recarregar conteudo da pasta', 'ntfmkdir' : 'Criar diretório', 'ntfmkfile' : 'Criar arquivos', 'ntfrm' : 'Deletar arquivos', 'ntfcopy' : 'Copiar arquivos', 'ntfmove' : 'Mover arquivos', 'ntfprepare' : 'Preparando para copiar arquivos', 'ntfrename' : 'Renomear arquivos', 'ntfupload' : 'Subindo os arquivos', 'ntfdownload' : 'Baixando os arquivos', 'ntfsave' : 'Salvando os arquivos', 'ntfarchive' : 'Criando os arquivos', 'ntfextract' : 'Extraindo arquivos compactados', 'ntfsearch' : 'Procurando arquivos', 'ntfresize' : 'Redimensionando imagens', 'ntfsmth' : 'Fazendo alguma coisa', 'ntfloadimg' : 'Carregando Imagem', 'ntfnetmount' : 'Montando unidade de rede', // added 18.04.2012 'ntfnetunmount': 'Desmontando unidade de rede', // from v2.1 added 30.04.2012 'ntfdim' : 'Adquirindo dimensão da imagem', // added 20.05.2013 'ntfreaddir' : 'Lendo informações da pasta', // from v2.1 added 01.07.2013 'ntfurl' : 'Recebendo URL do link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Alterando permissões do arquivo', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verificando o nome do arquivo de upload', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Criando um arquivo para download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Obtendo informações do caminho', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processando o arquivo carregado', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Movendo para a lixeira', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Restaurando da lixeira', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Verificando a pasta de destino', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Desfazendo a operação anterior', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Refazendo o desfazer anterior', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Verificando conteúdos', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Lixo', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Desconhecido', 'Today' : 'Hoje', 'Yesterday' : 'Ontem', 'msJan' : 'Jan', 'msFeb' : 'Fev', 'msMar' : 'Mar', 'msApr' : 'Abr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Ago', 'msSep' : 'Set', 'msOct' : 'Out', 'msNov' : 'Nov', 'msDec' : 'Dez', 'January' : 'Janeiro', 'February' : 'Fevereiro', 'March' : 'Março', 'April' : 'Abril', 'May' : 'Maio', 'June' : 'Junho', 'July' : 'Julho', 'August' : 'Agosto', 'September' : 'Setembro', 'October' : 'Outubro', 'November' : 'Novembro', 'December' : 'Dezembro', 'Sunday' : 'Domingo', 'Monday' : 'Segunda-feira', 'Tuesday' : 'Terça-feira', 'Wednesday' : 'Quarta-feira', 'Thursday' : 'Quinta-feira', 'Friday' : 'Sexta-feira', 'Saturday' : 'Sábado', 'Sun' : 'Dom', 'Mon' : 'Seg', 'Tue' : 'Ter', 'Wed' : 'Qua', 'Thu' : 'Qui', 'Fri' : 'Sex', 'Sat' : 'Sáb', /******************************** sort variants ********************************/ 'sortname' : 'por nome', 'sortkind' : 'por tipo', 'sortsize' : 'por tam.', 'sortdate' : 'por data', 'sortFoldersFirst' : 'Pastas primeiro', 'sortperm' : 'Com permissão', // from v2.1.13 added 13.06.2016 'sortmode' : 'Por modo', // from v2.1.13 added 13.06.2016 'sortowner' : 'Por proprietário', // from v2.1.13 added 13.06.2016 'sortgroup' : 'Por grupo', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Vizualizar em árvore', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NovoArquivo.txt', // added 10.11.2015 'untitled folder' : 'NovaPasta', // added 10.11.2015 'Archive' : 'NovoArquivo', // from v2.1 added 10.11.2015 'untitled file' : 'NovoArquivo.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Arquivo', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmação requerida', 'confirmRm' : 'Você tem certeza que deseja remover os arquivos?
    Isto não pode ser desfeito!', 'confirmRepl' : 'Substituir arquivo velho com este novo?', 'confirmRest' : 'Substituir o item existente pelo item na lixeira?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Não está em UTF-8
    Converter para UTF-8?
    Conteúdo se torna UTF-8 após salvar as conversões.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Não foi possível detectar a codificação de caracteres deste arquivo. Ele precisa ser convertido temporariamente em UTF-8 para edição. Por favor, selecione a codificação de caracteres deste arquivo.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Isto foi modificado.
    Você vai perder seu trabalho caso não salve as mudanças.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Tem certeza de que deseja mover itens para a lixeira?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Tem certeza de que deseja mover itens para "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Aplicar a todos', 'name' : 'Nome', 'size' : 'Tamanho', 'perms' : 'Permissões', 'modify' : 'Modificado', 'kind' : 'Tipo', 'read' : 'Ler', 'write' : 'Escrever', 'noaccess' : 'Inacessível', 'and' : 'e', 'unknown' : 'Desconhecido', 'selectall' : 'Selecionar todos arquivos', 'selectfiles' : 'Selecionar arquivo(s)', 'selectffile' : 'Selecionar primeiro arquivo', 'selectlfile' : 'Slecionar último arquivo', 'viewlist' : 'Exibir como lista', 'viewicons' : 'Exibir como ícones', 'viewSmall' : 'Ícones pequenos', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Ícones médios', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Ícones grandes', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Ícones gigantes', // from v2.1.39 added 22.5.2018 'places' : 'Lugares', 'calc' : 'Calcular', 'path' : 'Caminho', 'aliasfor' : 'Alias para', 'locked' : 'Bloqueado', 'dim' : 'Dimesões', 'files' : 'Arquivos', 'folders' : 'Pastas', 'items' : 'Itens', 'yes' : 'sim', 'no' : 'não', 'link' : 'Link', 'searcresult' : 'Resultados da pesquisa', 'selected' : 'itens selecionados', 'about' : 'Sobre', 'shortcuts' : 'Atalhos', 'help' : 'Ajuda', 'webfm' : 'Gerenciador de arquivos web', 'ver' : 'Versão', 'protocolver' : 'Versão do protocolo', 'homepage' : 'Home do projeto', 'docs' : 'Documentação', 'github' : 'Fork us on Github', 'twitter' : 'Siga-nos no twitter', 'facebook' : 'Junte-se a nós no Facebook', 'team' : 'Time', 'chiefdev' : 'Desenvolvedor chefe', 'developer' : 'Desenvolvedor', 'contributor' : 'Contribuinte', 'maintainer' : 'Mantenedor', 'translator' : 'Tradutor', 'icons' : 'Ícones', 'dontforget' : 'e não se esqueça de levar a sua toalha', 'shortcutsof' : 'Atalhos desabilitados', 'dropFiles' : 'Solte os arquivos aqui', 'or' : 'ou', 'selectForUpload' : 'Selecione arquivos para upload', 'moveFiles' : 'Mover arquivos', 'copyFiles' : 'Copiar arquivos', 'restoreFiles' : 'Restaurar itens', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Remover de Lugares', 'aspectRatio' : 'Manter aspecto', 'scale' : 'Tamanho', 'width' : 'Largura', 'height' : 'Altura', 'resize' : 'Redimencionar', 'crop' : 'Cortar', 'rotate' : 'Rotacionar', 'rotate-cw' : 'Girar 90 graus CW', 'rotate-ccw' : 'Girar 90 graus CCW', 'degree' : '°', 'netMountDialogTitle' : 'Montar Unidade de rede', // added 18.04.2012 'protocol' : 'Protocolo', // added 18.04.2012 'host' : 'Servidor', // added 18.04.2012 'port' : 'Porta', // added 18.04.2012 'user' : 'Usuário', // added 18.04.2012 'pass' : 'Senha', // added 18.04.2012 'confirmUnmount' : 'Deseja desmontar $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Soltar ou colar arquivos do navegador', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Solte ou cole arquivos aqui', // from v2.1 added 07.04.2014 'encoding' : 'Codificação', // from v2.1 added 19.12.2014 'locale' : 'Local', // from v2.1 added 19.12.2014 'searchTarget' : 'Alvo: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Perquisar por input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Dono', // from v2.1 added 20.6.2015 'group' : 'Grupo', // from v2.1 added 20.6.2015 'other' : 'Outro', // from v2.1 added 20.6.2015 'execute' : 'Executar', // from v2.1 added 20.6.2015 'perm' : 'Permissão', // from v2.1 added 20.6.2015 'mode' : 'Modo', // from v2.1 added 20.6.2015 'emptyFolder' : 'Pasta vazia', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Pasta vazia\\A Arraste itens para os adicionar', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Pasta vazia\\A De um toque longo para adicionar itens', // from v2.1.6 added 30.12.2015 'quality' : 'Qualidade', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sincronização', // from v2.1.6 added 10.1.2016 'moveUp' : 'Mover para cima', // from v2.1.6 added 18.1.2016 'getLink' : 'Obter link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Itens selecionados ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID da pasta', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permitir acesso offline', // from v2.1.10 added 3.25.2016 'reAuth' : 'Se autenticar novamente', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Carregando...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Abrir múltiplos arquivos', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Você está tentando abrir os arquivos $1. Tem certeza de que deseja abrir no navegador?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Os resultados da pesquisa estão vazios no destino da pesquisa.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Arquivo sendo editado.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Voce selecionou $1 itens.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Você tem $1 itens na área de transferência.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'A pesquisa incremental é apenas da visualização atual.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Restabelecer', // from v2.1.15 added 3.8.2016 'complete' : '$1 completo', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu contextual', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Virar página', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Raízes de volume', // from v2.1.16 added 16.9.2016 'reset' : 'Resetar', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Cor de fundo', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Seletor de cores', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Grade 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Ativado', // from v2.1.16 added 4.10.2016 'disabled' : 'Desativado', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Os resultados da pesquisa estão vazios na exibição atual.\\APressione [Enter] para expandir o alvo da pesquisa.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Os resultados da pesquisa da primeira letra estão vazios na exibição atual.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Texto do rótulo', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minutos restantes', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reabrir com a codificação selecionada', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Salvar com a codificação selecionada', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Selecione a pasta', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Buscar primeira letra', // from v2.1.23 added 24.3.2017 'presets' : 'Predefinições', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'São muitos itens, portanto não podem ser jogados no lixo.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Esvaziar a pasta "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Não há itens em uma pasta "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferência', // from v2.1.26 added 28.6.2017 'language' : 'Língua', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicialize as configurações salvas neste navegador', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Barra de ferramentas', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caracteres restantes.', // from v2.1.29 added 30.8.2017 'sum' : 'Somar', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Tamanho aproximado do arquivo', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focar no elemento do diálogo com o mouse por cima', // from v2.1.30 added 2.11.2017 'select' : 'Selecione', // from v2.1.30 added 23.11.2017 'selectAction' : 'Ação ao selecionar arquivo', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Abrir com o editor usado pela última vez', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverter seleção', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Tem certeza de que deseja renomear $1 itens selecionados como $2?
    Isto não poderá ser desfeito!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Renomear Batch', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Número', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Adicionar prefixo', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Adicionar sufixo', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Alterar extensão', // from v2.1.31 added 8.12.2017 'columnPref' : 'Configurações de colunas (exibição em lista)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Todas as alterações serão refletidas imediatamente no arquivo.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Quaisquer alterações não serão refletidas até desmontar este volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'O(s) seguinte(s) volume(s) montado neste volume também desmontado. Você tem certeza que quer desmontá-lo(s)?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informações da seleção', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmos para mostrar o hash do arquivo', // from v2.1.33 added 10.3.2018 'infoItems' : 'Itens de informação (painel Informações de seleção)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Pressione novamente para sair.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barra de ferramentas', // from v2.1.38 added 4.4.2018 'workspace' : 'Área de trabalho', // from v2.1.38 added 4.4.2018 'dialog' : 'Diálogo', // from v2.1.38 added 4.4.2018 'all' : 'Tudo', // from v2.1.38 added 4.4.2018 'iconSize' : 'Tamanho do ícone (Visualização de ícones)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Abra a janela maximizada do editor', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Como a conversão por API não está disponível no momento, faça a conversão no site.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Após a conversão, você deve fazer o upload com o URL do item ou um arquivo baixado para salvar o arquivo convertido.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Converter no site $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrações', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Este elFinder possui os seguintes serviços externos integrados. Por favor, verifique os termos de uso, política de privacidade, etc. antes de usá-lo.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Mostrar itens ocultos', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Ocultar itens ocultos', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Mostrar/Ocultar itens ocultos', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Tipos de arquivo para ativar com "Novo arquivo"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Tipo do arquivo de texto', // from v2.1.41 added 7.8.2018 'add' : 'Adicionar', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Padrão', // from v2.1.43 added 19.10.2018 'description' : 'Descrição', // from v2.1.43 added 19.10.2018 'website' : 'Site da internet', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'Licença', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Este item não pode ser salvo. Para evitar perder as edições, você precisa exportar para o seu PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Clique duas vezes no arquivo para selecioná-lo.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Usar o modo de tela cheia', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Desconhecio', 'kindRoot' : 'Raiz do volume', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Pasta', 'kindSelects' : 'Seleções', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Alias inválido', // applications 'kindApp' : 'Aplicação', 'kindPostscript' : 'Documento Postscript', 'kindMsOffice' : 'Documento Microsoft Office', 'kindMsWord' : 'Documento Microsoft Word', 'kindMsExcel' : 'Documento Microsoft Excel', 'kindMsPP' : 'Apresentação Microsoft Powerpoint', 'kindOO' : 'Documento Open Office', 'kindAppFlash' : 'Aplicação Flash', 'kindPDF' : 'Formato de Documento Portátil (PDF)', 'kindTorrent' : 'Arquivo Bittorrent', 'kind7z' : 'Arquivo 7z', 'kindTAR' : 'Arquivo TAR', 'kindGZIP' : 'Arquivo GZIP', 'kindBZIP' : 'Arquivo BZIP', 'kindXZ' : 'Arquivo XZ', 'kindZIP' : 'Arquivo ZIP', 'kindRAR' : 'Arquivo RAR', 'kindJAR' : 'Arquivo JAR', 'kindTTF' : 'Tipo verdadeiro da fonte', 'kindOTF' : 'Abrir tipo de fonte', 'kindRPM' : 'Pacote RPM', // texts 'kindText' : 'Arquivo de texto', 'kindTextPlain' : 'Texto simples', 'kindPHP' : 'PHP', 'kindCSS' : 'CSS', 'kindHTML' : 'Documento HTML', 'kindJS' : 'Javascript', 'kindRTF' : 'Formato Rich Text', 'kindC' : 'C', 'kindCHeader' : 'C cabeçalho', 'kindCPP' : 'C++', 'kindCPPHeader' : 'C++ cabeçalho', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python', 'kindJava' : 'Java', 'kindRuby' : 'Ruby', 'kindPerl' : 'Perl', 'kindSQL' : 'SQL', 'kindXML' : 'Documento XML', 'kindAWK' : 'AWK', 'kindCSV' : 'Valores separados por vírgula', 'kindDOCBOOK' : 'Documento Docbook XML', 'kindMarkdown' : 'Texto Markdown', // added 20.7.2015 // images 'kindImage' : 'Imagem', 'kindBMP' : 'Imagem BMP', 'kindJPEG' : 'Imagem JPEG', 'kindGIF' : 'Imagem GIF', 'kindPNG' : 'Imagem PNG', 'kindTIFF' : 'Imagem TIFF', 'kindTGA' : 'Imagem TGA', 'kindPSD' : 'Imagem Adobe Photoshop', 'kindXBITMAP' : 'Imagem X bitmap', 'kindPXM' : 'Imagem Pixelmator', // media 'kindAudio' : 'Arquivo de audio', 'kindAudioMPEG' : 'Audio MPEG', 'kindAudioMPEG4' : 'Audio MPEG-4', 'kindAudioMIDI' : 'Audio MIDI', 'kindAudioOGG' : 'Audio Ogg Vorbis', 'kindAudioWAV' : 'Audio WAV', 'AudioPlaylist' : 'Lista de reprodução MP3 ', 'kindVideo' : 'Arquivo de video', 'kindVideoDV' : 'DV filme', 'kindVideoMPEG' : 'Video MPEG', 'kindVideoMPEG4' : 'Video MPEG-4', 'kindVideoAVI' : 'Video AVI', 'kindVideoMOV' : 'Filme rápido', 'kindVideoWM' : 'Video Windows Media', 'kindVideoFlash' : 'Video Flash', 'kindVideoMKV' : 'MKV', 'kindVideoOGG' : 'Video Ogg' } }; })); application/library/js/i18n/elfinder.fo.js000064400000046357146731177160014473 0ustar00/** * Faroese translation * @author Marius Hammer * @version 2015-12-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.fo = { translator : 'Marius Hammer <marius@vrg.fo>', language : 'Faroese', direction : 'ltr', dateFormat : 'd.m.Y H:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM messages : { /********************************** errors **********************************/ 'error' : 'Villa íkomin', 'errUnknown' : 'Ókend villa.', 'errUnknownCmd' : 'Ókend boð.', 'errJqui' : 'Ógildig jQuery UI konfiguratión. Vælbærar, sum kunnu hálast runt og kunnu sleppast skulu takast við.', 'errNode' : 'elFinder krevur DOM Element stovna.', 'errURL' : 'Ugyldig elFinder konfiguration! URL stilling er ikki ásett.', 'errAccess' : 'Atgongd nokta.', 'errConnect' : 'Far ikki samband við backend.', 'errAbort' : 'Sambandi avbrotið.', 'errTimeout' : 'Sambandi broti av.', 'errNotFound' : 'Backend ikki funnið.', 'errResponse' : 'Ógildugt backend svar.', 'errConf' : 'Ógildugt backend konfiguratión.', 'errJSON' : 'PHP JSON modulið er ikki innstallera.', 'errNoVolumes' : 'Lesiligar mappur er ikki atkomulig.', 'errCmdParams' : 'Ógildigar stillingar fyri kommando "$1".', 'errDataNotJSON' : 'Dáta er ikki JSON.', 'errDataEmpty' : 'Dáta er tømt.', 'errCmdReq' : 'Backend krevur eitt kommando navn.', 'errOpen' : 'Kundi ikki opna "$1".', 'errNotFolder' : 'Luturin er ikki ein mappa.', 'errNotFile' : 'Luturin er ikki ein fíla.', 'errRead' : 'Kundi ikki lesa til "$1".', 'errWrite' : 'Kundi ikki skriva til "$1".', 'errPerm' : 'Atgongd nokta.', 'errLocked' : '"$1" er løst og kann ikki umdoybast, flytast ella strikast.', 'errExists' : 'Tað finst longu ein fíla við navn "$1".', 'errInvName' : 'Ógildugt fíla navn.', 'errFolderNotFound' : 'Mappa ikki funnin.', 'errFileNotFound' : 'Fíla ikki funnin.', 'errTrgFolderNotFound' : 'Mappan "$1" bleiv ikke funnin.', 'errPopup' : 'Kagin forðaði í at opna eitt popup-vindeyga. Fyri at opna fíluna, aktivera popup-vindeygu í tínum kaga stillingum.', 'errMkdir' : '\'Kundi ikki stovna mappu "$1".', 'errMkfile' : 'Kundi ikki stovna mappu "$1".', 'errRename' : 'Kundi ikki umdoyba "$1".', 'errCopyFrom' : 'Kopiering av fílum frá mappuni "$1" er ikke loyvt.', 'errCopyTo' : 'Kopiering av fílum til mappuna "$1" er ikke loyvt.', 'errMkOutLink' : 'Ikki ført fyri at stovna leinkju til uttanfyri \'volume\' rót.', // from v2.1 added 03.10.2015 'errUpload' : 'Innlegginar feilur.', // old name - errUploadCommon 'errUploadFile' : 'Kundi ikki leggja "$1" inn.', // old name - errUpload 'errUploadNoFiles' : 'Ongar fílar funnir at leggja inn.', 'errUploadTotalSize' : 'Dátain er størri enn mest loyvda støddin.', // old name - errMaxSize 'errUploadFileSize' : 'Fíla er størri enn mest loyvda støddin.', // old name - errFileMaxSize 'errUploadMime' : 'Fílu slag ikki góðkent.', 'errUploadTransfer' : '"$1" innleggingar feilur.', 'errUploadTemp' : 'Ikki ført fyri at gera fyribils fílu fyri innlegging.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Lutur "$1" finst longu á hesum stað og can ikki skiftast út av lutið av øðrum slag.', // new 'errReplace' : 'Ikki ført fyri at erstattae "$1".', 'errSave' : 'Kundi ikki goyma "$1".', 'errCopy' : 'Kundi ikki kopiera "$1".', 'errMove' : 'Kundi ikki flyta "$1".', 'errCopyInItself' : 'Kundi ikki kopiera "$1" inn í seg sjálva.', 'errRm' : 'Kundi ikki strika "$1".', 'errRmSrc' : 'Ikki ført fyri at strika keldu fíla(r).', 'errExtract' : 'Kundi ikki útpakka fílar frá "$1".', 'errArchive' : 'Kundi ikki stovna arkiv.', 'errArcType' : 'Arkiv slagið er ikki stuðla.', 'errNoArchive' : 'Fílan er ikki eitt arkiv ella er ikki eitt stuðla arkiva slag.', 'errCmdNoSupport' : 'Backend stuðlar ikki hesi boð.', 'errReplByChild' : 'appan "$1" kann ikki erstattast av einari vøru, hon inniheldur.', 'errArcSymlinks' : 'Av trygdarávum grundum, noktaði skipanin at pakka út arkivir ið innihalda symlinks ella fílur við nøvn ið ikki eru loyvd.', // edited 24.06.2012 'errArcMaxSize' : 'Arkiv fílar fylla meir enn mest loyvda støddin.', 'errResize' : 'Kundi ikki broyta støddina á "$1".', 'errResizeDegree' : 'Ógildugt roterings stig.', // added 7.3.2013 'errResizeRotate' : 'Ikki ført fyri at rotera mynd.', // added 7.3.2013 'errResizeSize' : 'Ógildug myndastødd.', // added 7.3.2013 'errResizeNoChange' : 'Mynda stødd ikki broytt.', // added 7.3.2013 'errUsupportType' : 'Ikki stuðla fíla slag.', 'errNotUTF8Content' : 'Fílan "$1" er ikki í UTF-8 og kann ikki vera rættað.', // added 9.11.2011 'errNetMount' : 'Kundi ikki "mounta" "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Ikki stuðla protokol.', // added 17.04.2012 'errNetMountFailed' : 'Mount miseydnaðist.', // added 17.04.2012 'errNetMountHostReq' : 'Host kravt.', // added 18.04.2012 'errSessionExpires' : 'Tín seta er útgingin vegna óvirkniy.', 'errCreatingTempDir' : 'Ikki ført fyri at stovna fyribils fíluskrá: "$1"', 'errFtpDownloadFile' : 'Ikki ført fyri at taka fílu niður frá FTP: "$1"', 'errFtpUploadFile' : 'Ikki ført fyri at leggja fílu til FTP: "$1"', 'errFtpMkdir' : 'Ikki ført fyri at stovna fjar-fílaskrá á FTP: "$1"', 'errArchiveExec' : 'Villa íkomin undir arkiveran af fílar: "$1"', 'errExtractExec' : 'Villa íkomin undir útpakking af fílum: "$1"', 'errNetUnMount' : 'Unable to unmount', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Kann ikki broytast til UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Royn Google Chrome, um tú ynskir at leggja mappu innn.', // from v2.1 added 26.6.2015 /******************************* commands names ********************************/ 'cmdarchive' : 'Stovna arkiv', 'cmdback' : 'Aftur\'', 'cmdcopy' : 'Kopier', 'cmdcut' : 'Klipp', 'cmddownload' : 'Tak niður', 'cmdduplicate' : 'Tvífalda', 'cmdedit' : 'Rætta fílu', 'cmdextract' : 'Pakka út fílar úr arkiv', 'cmdforward' : 'Fram', 'cmdgetfile' : 'Vel fílar', 'cmdhelp' : 'Um hesa software', 'cmdhome' : 'Heim', 'cmdinfo' : 'Fá upplýsingar', 'cmdmkdir' : 'Nýggja mappu', 'cmdmkfile' : 'Nýggja fílu', 'cmdopen' : 'Opna', 'cmdpaste' : 'Set inn', 'cmdquicklook' : 'Forsýning', 'cmdreload' : 'Les inn umaftur', 'cmdrename' : 'Umdoyp', 'cmdrm' : 'Strika', 'cmdsearch' : 'Finn fílar', 'cmdup' : 'Eitt stig upp', 'cmdupload' : 'Legg fílar inn', 'cmdview' : 'Síggj', 'cmdresize' : 'Tillaga stødd & Roter', 'cmdsort' : 'Raða', 'cmdnetmount' : 'Mount network volume', // added 18.04.2012 'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'Til støð', // added 28.12.2014 'cmdchmod' : 'Broytir stíl', // from v2.1 added 20.6.2015 /*********************************** buttons ***********************************/ 'btnClose' : 'Lat aftur', 'btnSave' : 'Goym', 'btnRm' : 'Strika', 'btnApply' : 'Brúka', 'btnCancel' : 'Angra', 'btnNo' : 'Nei', 'btnYes' : 'Ja', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Goto $1 & approve', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Konverter', // from v2.1 added 08.04.2014 'btnCwd' : 'Her', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Øll', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Slag', // from v2.1 added 22.5.2015 'btnFileName':'Fílunavn', // from v2.1 added 22.5.2015 'btnSaveClose': 'Goym & Lat aftur', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 /******************************** notifications ********************************/ 'ntfopen' : 'Opna mappu', 'ntffile' : '\'Opna fílu', 'ntfreload' : 'Les innaftur mappu innihald', 'ntfmkdir' : 'Stovnar mappu', 'ntfmkfile' : 'Stovnar fílur', 'ntfrm' : 'Strikar fílur', 'ntfcopy' : 'Kopierar fílur', 'ntfmove' : 'Flytur fílar', 'ntfprepare' : 'Ger klárt at kopiera fílar', 'ntfrename' : 'Umdoyp fílar', 'ntfupload' : 'Leggur inn fílar', 'ntfdownload' : 'Tekur fílar niður', 'ntfsave' : 'Goymir fílar', 'ntfarchive' : 'Stovnar arkiv', 'ntfextract' : 'Útpakkar fílar frá arkiv', 'ntfsearch' : 'Leitar eftir fílum', 'ntfresize' : 'Broytir stødd á fílur', 'ntfsmth' : '\'Ger okkurt >_<', 'ntfloadimg' : 'Lesur mynd inn', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Tekur mynda vídd', // added 20.05.2013 'ntfreaddir' : 'Lesur mappu upplýsingar', // from v2.1 added 01.07.2013 'ntfurl' : 'Far URL af leinkju', // from v2.1 added 11.03.2014 'ntfchmod' : 'Broyti fílu stíl', // from v2.1 added 20.6.2015 'ntfpreupload': 'Kannar fílunavnið á fílu', // from v2.1 added 31.11.2015 /************************************ dates **********************************/ 'dateUnknown' : 'ókent', 'Today' : 'Í dag', 'Yesterday' : 'Í gjár', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Des', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'Mars', 'April' : 'Apríl', 'May' : 'Mai', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'August', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'Desember', 'Sunday' : 'Sunnudag', 'Monday' : 'Mánadag', 'Tuesday' : 'Týsdag', 'Wednesday' : 'Mikudag', 'Thursday' : 'Hósdag', 'Friday' : 'Fríggjadag', 'Saturday' : 'Leygardag', 'Sun' : 'Sun', 'Mon' : 'Mán', 'Tue' : 'Týs', 'Wed' : 'Mik', 'Thu' : 'Hós', 'Fri' : 'Frí', 'Sat' : 'Ley', /******************************** sort variants ********************************/ 'sortname' : 'eftir navn', 'sortkind' : 'eftir slag', 'sortsize' : 'eftir stødd', 'sortdate' : 'eftir dato', 'sortFoldersFirst' : 'mappur fyrst', /********************************** new items **********************************/ 'untitled file.txt' : 'NýggjaFílu.txt', // added 10.11.2015 'untitled folder' : 'NýggjaMappu', // added 10.11.2015 'Archive' : 'NýtArkiv', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'Váttan kravd', 'confirmRm' : 'Ert tú vísur í at tú ynskir at strika fílarnar?
    Hetta kann ikki angrast!', 'confirmRepl' : 'Erstatta gomlu fílu við nýggja?', 'confirmConvUTF8' : 'Brúka á øll', // from v2.1 added 08.04.2014 'confirmNotSave' : 'Er blivi rættað.
    Missir sínar broytingar um tú ikki goymir.', // from v2.1 added 15.7.2015 'apllyAll' : 'Brúka til øll', 'name' : 'Navn', 'size' : 'Stødd', 'perms' : 'Rættindi', 'modify' : 'Rættað', 'kind' : 'Slag', 'read' : 'síggja', 'write' : 'broyta', 'noaccess' : 'onga atgongd', 'and' : 'og', 'unknown' : 'ókent', 'selectall' : 'Vel allar fílur', 'selectfiles' : 'Vel fílu(r)', 'selectffile' : 'Vel fyrstu fílu', 'selectlfile' : 'Vel síðstu fílu', 'viewlist' : 'Lista vísing', 'viewicons' : 'Ikon vísing', 'places' : 'Støð', 'calc' : 'Rokna', 'path' : 'Stiga', 'aliasfor' : 'Hjánavn fyri', 'locked' : 'Læst', 'dim' : 'Vídd', 'files' : 'Fílur', 'folders' : 'Mappur', 'items' : 'Myndir', 'yes' : 'ja', 'no' : 'nei', 'link' : 'Leinkja', 'searcresult' : 'Leiti úrslit', 'selected' : 'valdar myndir', 'about' : 'Um', 'shortcuts' : 'Snarvegir', 'help' : 'Hjálp', 'webfm' : 'Web fílu umsitan', 'ver' : 'Útgáva', 'protocolver' : 'protokol versión', 'homepage' : 'Verkætlan heim', 'docs' : 'Skjalfesting', 'github' : 'Mynda okkum á Github', 'twitter' : 'Fylg okkum á twitter', 'facebook' : 'Fylg okkum á facebook', 'team' : 'Lið', 'chiefdev' : 'forritaleiðari', 'developer' : 'forritari', 'contributor' : 'stuðulsveitari', 'maintainer' : 'viðlíkahaldari', 'translator' : 'umsetari', 'icons' : 'Ikonir', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'Snarvegir sligi frá', 'dropFiles' : 'Slepp fílur her', 'or' : 'ella', 'selectForUpload' : 'Vel fílur at leggja inn', 'moveFiles' : 'Flyt fílur', 'copyFiles' : 'Kopier fílur', 'rmFromPlaces' : 'Flyt frá støð', 'aspectRatio' : 'Skermformat', 'scale' : 'Skalera', 'width' : 'Longd', 'height' : 'Hædd', 'resize' : 'Tilliga stødd', 'crop' : 'Sker til', 'rotate' : 'Rotera', 'rotate-cw' : 'Rotera 90 gradir við urið', 'rotate-ccw' : 'otera 90 gradir móti urið', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Brúkari', // added 18.04.2012 'pass' : 'Loyniorð', // added 18.04.2012 'confirmUnmount' : 'Are you unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Hála ella set innn fílar frá kaga', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Hála ella set inn fílar frá URls her', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Leita við input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Eigari', // from v2.1 added 20.6.2015 'group' : 'Bólkur', // from v2.1 added 20.6.2015 'other' : 'Annað', // from v2.1 added 20.6.2015 'execute' : 'Útfør', // from v2.1 added 20.6.2015 'perm' : 'Rættindi', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ókent', 'kindFolder' : 'Mappa', 'kindAlias' : 'Hjánavn', 'kindAliasBroken' : 'Óvirki hjánavn', // applications 'kindApp' : 'Applikatión', 'kindPostscript' : 'Postscript skjal', 'kindMsOffice' : 'Microsoft Office skjal', 'kindMsWord' : 'Microsoft Word skjal', 'kindMsExcel' : 'Microsoft Excel skjal', 'kindMsPP' : 'Microsoft Powerpoint framløga', 'kindOO' : 'Open Office skjal', 'kindAppFlash' : 'Flash applikatión', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent fíla', 'kind7z' : '7z arkiv', 'kindTAR' : 'TAR arkiv', 'kindGZIP' : 'GZIP arkiv', 'kindBZIP' : 'BZIP arkiv', 'kindXZ' : 'XZ arkiv', 'kindZIP' : 'ZIP arkiv', 'kindRAR' : 'RAR arkiv', 'kindJAR' : 'Java JAR ffílaile', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM pakki', // texts 'kindText' : 'Text skjal', 'kindTextPlain' : 'Reinur tekstur', 'kindPHP' : 'PHP kelda', 'kindCSS' : 'Cascading style sheet (CSS)', 'kindHTML' : 'HTML skjal', 'kindJS' : 'Javascript kelda', 'kindRTF' : 'Rich Text Format (RTF)', 'kindC' : 'C kelda', 'kindCHeader' : 'C header kelda', 'kindCPP' : 'C++ kelda', 'kindCPPHeader' : 'C++ header kelda', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python kelda', 'kindJava' : 'Java kelda', 'kindRuby' : 'Ruby kelda', 'kindPerl' : 'Perl script', 'kindSQL' : 'SQL kelda', 'kindXML' : 'XML skjal', 'kindAWK' : 'AWK kelda', 'kindCSV' : 'Comma separated values (CSV)', 'kindDOCBOOK' : 'Docbook XML skjal', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Mynd', 'kindBMP' : 'BMP mynd', 'kindJPEG' : 'JPEG mynd', 'kindGIF' : 'GIF mynd', 'kindPNG' : 'PNG mynd', 'kindTIFF' : 'TIFF mynd', 'kindTGA' : 'TGA mynd', 'kindPSD' : 'Adobe Photoshop mynd', 'kindXBITMAP' : 'X bitmap mynd', 'kindPXM' : 'Pixelmator mynd', // media 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG ljóðfíla', 'kindAudioMPEG4' : 'MPEG-4 ljóðfíla', 'kindAudioMIDI' : 'MIDI ljóðfíla', 'kindAudioOGG' : 'Ogg Vorbis ljóðfíla', 'kindAudioWAV' : 'WAV ljóðfíla', 'AudioPlaylist' : 'MP3 playlisti', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV filmur', 'kindVideoMPEG' : 'MPEG filmur', 'kindVideoMPEG4' : 'MPEG-4 filmur', 'kindVideoAVI' : 'AVI filmur', 'kindVideoMOV' : 'Quick Time filmur', 'kindVideoWM' : 'Windows Media filmur', 'kindVideoFlash' : 'Flash filmur', 'kindVideoMKV' : 'Matroska filmur', 'kindVideoOGG' : 'Ogg filmur' } }; })); application/library/js/i18n/elfinder.hr.js000064400000050306146731177160014465 0ustar00/** * hr translation * @version 2016-04-18 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.hr = { translator : '', language : 'Croatian', direction : 'ltr', dateFormat : 'd.m.Y. H:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM messages : { /********************************** errors **********************************/ 'error' : 'Greška', 'errUnknown' : 'Nepoznata greška.', 'errUnknownCmd' : 'Nepoznata naredba.', 'errJqui' : 'Kriva jQuery UI konfiguracija. Selectable, draggable, i droppable komponente moraju biti uključene.', 'errNode' : 'elFinder zahtjeva DOM element da bi bio stvoren.', 'errURL' : 'Krivo konfiguriran elFinder. Opcija URL nije postavljena.', 'errAccess' : 'Zabranjen pristup.', 'errConnect' : 'Nije moguće spajanje na server.', 'errAbort' : 'Prekinuta veza.', 'errTimeout' : 'Veza je istekla.', 'errNotFound' : 'Server nije pronađen.', 'errResponse' : 'Krivi odgovor servera.', 'errConf' : 'Krivo konfiguriran server', 'errJSON' : 'Nije instaliran PHP JSON modul.', 'errNoVolumes' : 'Disk nije dostupan.', 'errCmdParams' : 'Krivi parametri za naredbu "$1".', 'errDataNotJSON' : 'Podaci nisu tipa JSON.', 'errDataEmpty' : 'Nema podataka.', 'errCmdReq' : 'Backend request requires command name.', 'errOpen' : 'Ne mogu otvoriti "$1".', 'errNotFolder' : 'Objekt nije mapa.', 'errNotFile' : 'Objekt nije dokument.', 'errRead' : 'Ne mogu pročitati "$1".', 'errWrite' : 'Ne mogu pisati u "$1".', 'errPerm' : 'Pristup zabranjen', 'errLocked' : '"$1" je zaključan i ne može biti preimenovan, premješten ili obrisan.', 'errExists' : 'Dokument s imenom "$1" već postoji.', 'errInvName' : 'Krivo ime dokumenta', 'errFolderNotFound' : 'Mapa nije pronađena', 'errFileNotFound' : 'Dokument nije pronađen', 'errTrgFolderNotFound' : 'Mapa "$1" nije pronađena', 'errPopup' : 'Browser prevented opening popup window. To open file enable it in browser options.', 'errMkdir' : 'Ne mogu napraviti mapu "$1".', 'errMkfile' : 'Ne mogu napraviti dokument "$1".', 'errRename' : 'Ne mogu preimenovati "$1".', 'errCopyFrom' : 'Kopiranje s diska "$1" nije dozvoljeno.', 'errCopyTo' : 'Kopiranje na disk "$1" nije dozvoljeno.', 'errMkOutLink' : 'Unable to create a link to outside the volume root.', // from v2.1 added 03.10.2015 'errUpload' : 'Greška pri prebacivanju dokumenta na server.', // old name - errUploadCommon 'errUploadFile' : 'Ne mogu prebaciti "$1" na server', // old name - errUpload 'errUploadNoFiles' : 'Nema dokumenata za prebacivanje na server', 'errUploadTotalSize' : 'Dokumenti prelaze maksimalnu dopuštenu veličinu.', // old name - errMaxSize 'errUploadFileSize' : 'Dokument je prevelik.', // old name - errFileMaxSize 'errUploadMime' : 'Ovaj tip dokumenta nije dopušten.', 'errUploadTransfer' : '"$1" greška pri prebacivanju', 'errUploadTemp' : 'Ne mogu napraviti privremeni dokument za prijenos na server', // from v2.1 added 26.09.2015 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', // new 'errReplace' : 'Ne mogu zamijeniti "$1".', 'errSave' : 'Ne mogu spremiti "$1".', 'errCopy' : 'Ne mogu kopirati "$1".', 'errMove' : 'Ne mogu premjestiti "$1".', 'errCopyInItself' : 'Ne mogu kopirati "$1" na isto mjesto.', 'errRm' : 'Ne mogu ukloniti "$1".', 'errRmSrc' : 'Ne mogu ukloniti izvorni kod.', 'errExtract' : 'Unable to extract files from "$1".', 'errArchive' : 'Unable to create archive.', 'errArcType' : 'Unsupported archive type.', 'errNoArchive' : 'File is not archive or has unsupported archive type.', 'errCmdNoSupport' : 'Backend does not support this command.', 'errReplByChild' : 'The folder "$1" can\'t be replaced by an item it contains.', 'errArcSymlinks' : 'For security reason denied to unpack archives contains symlinks or files with not allowed names.', // edited 24.06.2012 'errArcMaxSize' : 'Archive files exceeds maximum allowed size.', 'errResize' : 'Unable to resize "$1".', 'errResizeDegree' : 'Invalid rotate degree.', // added 7.3.2013 'errResizeRotate' : 'Unable to rotate image.', // added 7.3.2013 'errResizeSize' : 'Invalid image size.', // added 7.3.2013 'errResizeNoChange' : 'Image size not changed.', // added 7.3.2013 'errUsupportType' : 'Unsupported file type.', 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', // added 9.11.2011 'errNetMount' : 'Unable to mount "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Unsupported protocol.', // added 17.04.2012 'errNetMountFailed' : 'Mount failed.', // added 17.04.2012 'errNetMountHostReq' : 'Host required.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', 'errNetUnMount' : 'Unable to unmount', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Not convertible to UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Try Google Chrome, If you\'d like to upload the folder.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Timed out while searching "$1". Search result is partial.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-authorization is required.', // from v2.1.10 added 3.24.2016 /******************************* commands names ********************************/ 'cmdarchive' : 'Arhiviraj', 'cmdback' : 'Nazad', 'cmdcopy' : 'Kopiraj', 'cmdcut' : 'Izreži', 'cmddownload' : 'Preuzmi', 'cmdduplicate' : 'Dupliciraj', 'cmdedit' : 'Uredi dokument', 'cmdextract' : 'Raspakiraj arhivu', 'cmdforward' : 'Naprijed', 'cmdgetfile' : 'Odaberi dokumente', 'cmdhelp' : 'O programu', 'cmdhome' : 'Početak', 'cmdinfo' : 'Info', 'cmdmkdir' : 'Nova mapa', 'cmdmkdirin' : 'U novu mapu', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nova файл', 'cmdopen' : 'Otvori', 'cmdpaste' : 'Zalijepi', 'cmdquicklook' : 'Pregled', 'cmdreload' : 'Ponovo učitaj', 'cmdrename' : 'Preimenuj', 'cmdrm' : 'Obriši', 'cmdsearch' : 'Pronađi', 'cmdup' : 'Roditeljska mapa', 'cmdupload' : 'Prebaci dokumente na server', 'cmdview' : 'Pregledaj', 'cmdresize' : 'Promjeni veličinu i rotiraj', 'cmdsort' : 'Sortiraj', 'cmdnetmount' : 'Spoji se na mrežni disk', // added 18.04.2012 'cmdnetunmount': 'Odspoji disk', // from v2.1 added 30.04.2012 'cmdplaces' : 'To Places', // added 28.12.2014 'cmdchmod' : 'Change mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Otvori mapu', // from v2.1 added 13.1.2016 /*********************************** buttons ***********************************/ 'btnClose' : 'Zatvori', 'btnSave' : 'Spremi', 'btnRm' : 'Ukloni', 'btnApply' : 'Primjeni', 'btnCancel' : 'Odustani', 'btnNo' : 'Ne', 'btnYes' : 'Da', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Goto $1 & approve', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Convert', // from v2.1 added 08.04.2014 'btnCwd' : 'Here', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'All', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015 'btnFileName':'Filename', // from v2.1 added 22.5.2015 'btnSaveClose': 'Spremi i zatvori', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 /******************************** notifications ********************************/ 'ntfopen' : 'Otvori mapu', 'ntffile' : 'Otvori dokument', 'ntfreload' : 'Ponovo učitaj sadržaj mape', 'ntfmkdir' : 'Radim mapu', 'ntfmkfile' : 'Radim dokumente', 'ntfrm' : 'Brišem dokumente', 'ntfcopy' : 'Kopiram dokumente', 'ntfmove' : 'Mičem dokumente', 'ntfprepare' : 'Priprema za kopiranje dokumenata', 'ntfrename' : 'Preimenuj dokumente', 'ntfupload' : 'Pohranjujem dokumente na server', 'ntfdownload' : 'Preuzimam dokumente', 'ntfsave' : 'Spremi dokumente', 'ntfarchive' : 'Radim arhivu', 'ntfextract' : 'Extracting files from archive', 'ntfsearch' : 'Tražim dokumente', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Doing something', 'ntfloadimg' : 'Učitavam sliku', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013 'ntfreaddir' : 'Reading folder infomation', // from v2.1 added 01.07.2013 'ntfurl' : 'Getting URL of link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changing file mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verifying upload file name', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creating a file for download', // from v2.1.7 added 23.1.2016 /************************************ dates **********************************/ 'dateUnknown' : 'nepoznato', 'Today' : 'Danas', 'Yesterday' : 'Jučer', 'msJan' : 'Sij', 'msFeb' : 'Vel', 'msMar' : 'Ožu', 'msApr' : 'Tra', 'msMay' : 'Svi', 'msJun' : 'Lip', 'msJul' : 'Srp', 'msAug' : 'Kol', 'msSep' : 'Ruj', 'msOct' : 'Lis', 'msNov' : 'Stu', 'msDec' : 'Pro', 'January' : 'Siječanj', 'February' : 'Veljača', 'March' : 'Ožujak', 'April' : 'Travanj', 'May' : 'Svibanj', 'June' : 'Lipanj', 'July' : 'Srpanj', 'August' : 'Kolovoz', 'September' : 'Rujan', 'October' : 'Listopad', 'November' : 'Studeni', 'December' : 'Prosinac', 'Sunday' : 'Nedjelja', 'Monday' : 'Ponedjeljak', 'Tuesday' : 'Utorak', 'Wednesday' : 'Srijeda', 'Thursday' : 'Četvrtak', 'Friday' : 'Petak', 'Saturday' : 'Subota', 'Sun' : 'Ned', 'Mon' : 'Pon', 'Tue' : 'Uto', 'Wed' : 'Sri', 'Thu' : 'Čet', 'Fri' : 'Pet', 'Sat' : 'Sub', /******************************** sort variants ********************************/ 'sortname' : 'po imenu', 'sortkind' : 'po tipu', 'sortsize' : 'po veličini', 'sortdate' : 'po datumu', 'sortFoldersFirst' : 'Prvo mape', /********************************** new items **********************************/ 'untitled file.txt' : 'NoviDokument.txt', // added 10.11.2015 'untitled folder' : 'NovaMapa', // added 10.11.2015 'Archive' : 'NovaArhiva', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'Potvrda', 'confirmRm' : 'Jeste li sigurni?', 'confirmRepl' : 'Zamijeni stare dokumente novima?', 'confirmConvUTF8' : 'Not in UTF-8
    Convert to UTF-8?
    Contents become UTF-8 by saving after conversion.', // from v2.1 added 08.04.2014 'confirmNotSave' : 'It has been modified.
    Losing work if you do not save changes.', // from v2.1 added 15.7.2015 'apllyAll' : 'Primjeni na sve ', 'name' : 'Ime', 'size' : 'Veličina', 'perms' : 'Dozvole', 'modify' : 'Modificiran', 'kind' : 'Tip', 'read' : 'čitanje', 'write' : 'pisanje', 'noaccess' : 'bez pristupa', 'and' : 'i', 'unknown' : 'nepoznato', 'selectall' : 'Odaberi sve', 'selectfiles' : 'Odaberi dokument(e)', 'selectffile' : 'Odaberi prvi dokument', 'selectlfile' : 'Odaberi zadnji dokument', 'viewlist' : 'Lista', 'viewicons' : 'Ikone', 'places' : 'Mjesta', 'calc' : 'Računaj', 'path' : 'Put', 'aliasfor' : 'Drugo ime za', 'locked' : 'Zaključano', 'dim' : 'Dimenzije', 'files' : 'Dokumenti', 'folders' : 'Mape', 'items' : 'Items', 'yes' : 'da', 'no' : 'ne', 'link' : 'poveznica', 'searcresult' : 'Rezultati pretrage', 'selected' : 'selected items', 'about' : 'Info', 'shortcuts' : 'Prečaci', 'help' : 'Pomoć', 'webfm' : 'Web file manager', 'ver' : 'Verzija', 'protocolver' : 'protocol version', 'homepage' : 'Project home', 'docs' : 'Dokumentacija', 'github' : 'Fork us on Github', 'twitter' : 'Follow us on twitter', 'facebook' : 'Join us on facebook', 'team' : 'Tim', 'chiefdev' : 'glavni developer', 'developer' : 'developer', 'contributor' : 'contributor', 'maintainer' : 'maintainer', 'translator' : 'translator', 'icons' : 'Ikone', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'Prečaci isključeni', 'dropFiles' : 'Ovdje ispusti dokumente', 'or' : 'ili', 'selectForUpload' : 'Odaberi dokumente koje prebacuješ na server', 'moveFiles' : 'Premjesti dokumente', 'copyFiles' : 'Kopiraj dokumente', 'rmFromPlaces' : 'Remove from places', 'aspectRatio' : 'Aspect ratio', 'scale' : 'Skaliraj', 'width' : 'Širina', 'height' : 'Visina', 'resize' : 'Resize', 'crop' : 'Crop', 'rotate' : 'Rotate', 'rotate-cw' : 'Rotate 90 degrees CW', 'rotate-ccw' : 'Rotate 90 degrees CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'User', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 'confirmUnmount' : 'Are you unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drop or Paste files from browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drop or Paste files and URLs here', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Search by input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Vlasnik', // from v2.1 added 20.6.2015 'group' : 'Grupa', // from v2.1 added 20.6.2015 'other' : 'Other', // from v2.1 added 20.6.2015 'execute' : 'Izvrši', // from v2.1 added 20.6.2015 'perm' : 'Dozvole', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Mapa je prazna', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Mapa je prazna\\A Dovuci dokumente koje želiš dodati', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Mapa je prazna\\A Pritisni dugo za dodavanje dokumenata', // from v2.1.6 added 30.12.2015 'quality' : 'Kvaliteta', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Gore', // from v2.1.6 added 18.1.2016 'getLink' : 'Get URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Selected items ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Folder ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Allow offline access', // from v2.1.10 added 3.25.2016 'reAuth' : 'To re-authenticate', // from v2.1.10 added 3.25.2016 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Unknown', 'kindFolder' : 'Mapa', 'kindAlias' : 'Drugo ime', 'kindAliasBroken' : 'Broken alias', // applications 'kindApp' : 'Aplikacija', 'kindPostscript' : 'Postscript document', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint prezentacija', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash aplikacija', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent dokument', 'kind7z' : '7z arhiva', 'kindTAR' : 'TAR arhiva', 'kindGZIP' : 'GZIP arhiva', 'kindBZIP' : 'BZIP arhiva', 'kindXZ' : 'XZ arhiva', 'kindZIP' : 'ZIP arhiva', 'kindRAR' : 'RAR arhiva', 'kindJAR' : 'Java JAR dokument', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM paket', // texts 'kindText' : 'Tekst arhiva', 'kindTextPlain' : 'Obični tekst', 'kindPHP' : 'PHP source', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML document', 'kindJS' : 'Javascript source', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C source', 'kindCHeader' : 'C header source', 'kindCPP' : 'C++ source', 'kindCPPHeader' : 'C++ header source', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python source', 'kindJava' : 'Java source', 'kindRuby' : 'Ruby source', 'kindPerl' : 'Perl skripta', 'kindSQL' : 'SQL source', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK source', 'kindCSV' : 'vrijednosti razdvojene zarezom', 'kindDOCBOOK' : 'Docbook XML dokument', 'kindMarkdown' : 'Markdown tekst', // added 20.7.2015 // images 'kindImage' : 'slika', 'kindBMP' : 'BMP slika', 'kindJPEG' : 'JPEG slika', 'kindGIF' : 'GIF slika', 'kindPNG' : 'PNG slika', 'kindTIFF' : 'TIFF slika', 'kindTGA' : 'TGA slika', 'kindPSD' : 'Adobe Photoshop slika', 'kindXBITMAP' : 'X bitmap slika', 'kindPXM' : 'Pixelmator slika', // media 'kindAudio' : 'Audio', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 lista', 'kindVideo' : 'Video ', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); application/library/js/i18n/elfinder.ro.js000064400000047423146731177160014502 0ustar00/** * Română translation * @author Cristian Tabacitu * @version 2015-11-13 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ro = { translator : 'Cristian Tabacitu <hello@tabacitu.ro>', language : 'Română', direction : 'ltr', dateFormat : 'd M Y h:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM messages : { /********************************** errors **********************************/ 'error' : 'Eroare', 'errUnknown' : 'Eroare necunoscută.', 'errUnknownCmd' : 'Comandă necunoscuta.', 'errJqui' : 'Configurație jQuery UI necunoscută. Componentele selectable, draggable și droppable trebuie să fie incluse.', 'errNode' : 'elFinder necesită ca DOM Element să fie creat.', 'errURL' : 'Configurație elFinder nevalidă! URL option nu este setat.', 'errAccess' : 'Acces interzis.', 'errConnect' : 'Nu ne-am putut conecta la backend.', 'errAbort' : 'Conexiunea a fost oprită.', 'errTimeout' : 'Conexiunea a fost întreruptă.', 'errNotFound' : 'Nu am gasit backend-ul.', 'errResponse' : 'Răspuns backend greșit.', 'errConf' : 'Configurație backend greșită.', 'errJSON' : 'Modulul PHP JSON nu este instalat.', 'errNoVolumes' : 'Volumele citibile nu sunt disponibile.', 'errCmdParams' : 'Parametri greșiți pentru comanda "$1".', 'errDataNotJSON' : 'Datele nu sunt în format JSON.', 'errDataEmpty' : 'Datele sunt goale.', 'errCmdReq' : 'Cererea către backend necesită un nume de comandă.', 'errOpen' : 'Nu am putut deschide "$1".', 'errNotFolder' : 'Obiectul nu este un dosar.', 'errNotFile' : 'Obiectul nu este un fișier.', 'errRead' : 'Nu am putut citi "$1".', 'errWrite' : 'Nu am putu scrie în "$1".', 'errPerm' : 'Nu ai permisiunea necesară.', 'errLocked' : '"$1" este blocat și nu poate fi redenumit, mutat sau șters.', 'errExists' : 'Un fișier cu numele "$1" există deja.', 'errInvName' : 'Numele pentru fișier este greșit.', 'errFolderNotFound' : 'Nu am găsit dosarul.', 'errFileNotFound' : 'Nu am găsit fișierul.', 'errTrgFolderNotFound' : 'Nu am găsit dosarul pentru destinație "$1".', 'errPopup' : 'Browserul tău a prevenit deschiderea ferestrei popup. Pentru a deschide fișierul permite deschidere ferestrei.', 'errMkdir' : 'Nu am putut crea dosarul "$1".', 'errMkfile' : 'Nu am putut crea fișierul "$1".', 'errRename' : 'Nu am putut redenumi "$1".', 'errCopyFrom' : 'Copierea fișierelor de pe volumul "$1" este interzisă.', 'errCopyTo' : 'Copierea fișierelor către volumul "$1" este interzisă.', 'errMkOutLink' : 'Nu am putut crea linkul în afara volumului rădăcină.', // from v2.1 added 03.10.2015 'errUpload' : 'Eroare de upload.', // old name - errUploadCommon 'errUploadFile' : 'Nu am putut urca "$1".', // old name - errUpload 'errUploadNoFiles' : 'Nu am găsit fișiere pentru a le urca.', 'errUploadTotalSize' : 'Datele depâșest limita maximă de mărime.', // old name - errMaxSize 'errUploadFileSize' : 'Fișierul este prea mare.', // old name - errFileMaxSize 'errUploadMime' : 'Acest tip de fișier nu este permis.', 'errUploadTransfer' : 'Eroare la transferarea "$1".', 'errUploadTemp' : 'Nu am putut crea fișierul temporar pentru upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Obiectul "$1" există deja în acest loc și nu poate fi înlocuit de un obiect de alt tip.', // new 'errReplace' : 'Nu am putut înlocui "$1".', 'errSave' : 'Nu am putut salva "$1".', 'errCopy' : 'Nu am putut copia "$1".', 'errMove' : 'Nu am putut muta "$1".', 'errCopyInItself' : 'Nu am putut copia "$1" în el însuși.', 'errRm' : 'Nu am putut șterge "$1".', 'errRmSrc' : 'Nu am putut șterge fișierul sursă.', 'errExtract' : 'Nu am putut extrage fișierele din "$1".', 'errArchive' : 'Nu am putut crea arhiva.', 'errArcType' : 'Arhiva este de un tip nesuportat.', 'errNoArchive' : 'Fișierul nu este o arhiva sau este o arhivă de un tip necunoscut.', 'errCmdNoSupport' : 'Backend-ul nu suportă această comandă.', 'errReplByChild' : 'Dosarul “$1” nu poate fi înlocuit de un element pe care el îl conține.', 'errArcSymlinks' : 'Din motive de securitate, arhiva nu are voie să conțină symlinks sau fișiere cu nume interzise.', // edited 24.06.2012 'errArcMaxSize' : 'Fișierul arhivei depășește mărimea maximă permisă.', 'errResize' : 'Nu am putut redimensiona "$1".', 'errResizeDegree' : 'Grad de rotație nevalid.', // added 7.3.2013 'errResizeRotate' : 'Imaginea nu a fost rotită.', // added 7.3.2013 'errResizeSize' : 'Mărimea imaginii este nevalidă.', // added 7.3.2013 'errResizeNoChange' : 'Mărimea imaginii nu a fost schimbată.', // added 7.3.2013 'errUsupportType' : 'Tipul acesta de fișier nu este suportat.', 'errNotUTF8Content' : 'Fișierul "$1" nu folosește UTF-8 și nu poate fi editat.', // added 9.11.2011 'errNetMount' : 'Nu am putut încărca "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocol nesuportat.', // added 17.04.2012 'errNetMountFailed' : 'Încărcare eșuată.', // added 17.04.2012 'errNetMountHostReq' : 'Gazda este necesară.', // added 18.04.2012 'errSessionExpires' : 'Sesiunea a expirat datorită lipsei de activitate.', 'errCreatingTempDir' : 'Nu am putut crea fișierul temporar: "$1"', 'errFtpDownloadFile' : 'Nu am putut descarca fișierul de pe FTP: "$1"', 'errFtpUploadFile' : 'Nu am putut încărca fișierul pe FTP: "$1"', 'errFtpMkdir' : 'Nu am putut crea acest dosar pe FTP: "$1"', 'errArchiveExec' : 'Eroare la arhivarea fișierelor: "$1"', 'errExtractExec' : 'Eroare la dezarhivarea fișierelor: "$1"', 'errNetUnMount' : 'Nu am putut elimina volumul', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nu poate fi convertit la UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Pentru a urca dosare încearcă Google Chrome.', // from v2.1 added 26.6.2015 /******************************* commands names ********************************/ 'cmdarchive' : 'Creeaza arhivă', 'cmdback' : 'Înapoi', 'cmdcopy' : 'Copiază', 'cmdcut' : 'Taie', 'cmddownload' : 'Descarcă', 'cmdduplicate' : 'Creează duplicat', 'cmdedit' : 'Modifică fișier', 'cmdextract' : 'Extrage fișierele din arhivă', 'cmdforward' : 'Înainte', 'cmdgetfile' : 'Alege fișiere', 'cmdhelp' : 'Despre acest software', 'cmdhome' : 'Acasă', 'cmdinfo' : 'Informații', 'cmdmkdir' : 'Dosar nou', 'cmdmkfile' : 'Fișier nou', 'cmdopen' : 'Deschide', 'cmdpaste' : 'Lipește', 'cmdquicklook' : 'Previzualizează', 'cmdreload' : 'Reîncarcă', 'cmdrename' : 'Redenumește', 'cmdrm' : 'Șterge', 'cmdsearch' : 'Găsește fișiere', 'cmdup' : 'Mergi la dosarul părinte', 'cmdupload' : 'Urcă fișiere', 'cmdview' : 'Vezi', 'cmdresize' : 'Redimensionează & rotește', 'cmdsort' : 'Sortează', 'cmdnetmount' : 'Încarcă volum din rețea', // added 18.04.2012 'cmdnetunmount': 'Elimină volum', // from v2.1 added 30.04.2012 'cmdplaces' : 'La Locuri', // added 28.12.2014 'cmdchmod' : 'Schimbă mod', // from v2.1 added 20.6.2015 /*********************************** buttons ***********************************/ 'btnClose' : 'Închide', 'btnSave' : 'Salvează', 'btnRm' : 'Șterge', 'btnApply' : 'Aplică', 'btnCancel' : 'Anulează', 'btnNo' : 'Nu', 'btnYes' : 'Da', 'btnMount' : 'Încarcă', // added 18.04.2012 'btnApprove': 'Mergi la $1 și aprobă', // from v2.1 added 26.04.2012 'btnUnmount': 'Elimină volum', // from v2.1 added 30.04.2012 'btnConv' : 'Convertește', // from v2.1 added 08.04.2014 'btnCwd' : 'Aici', // from v2.1 added 22.5.2015 'btnVolume' : 'Volum', // from v2.1 added 22.5.2015 'btnAll' : 'Toate', // from v2.1 added 22.5.2015 'btnMime' : 'Tipuri MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nume fișier', // from v2.1 added 22.5.2015 'btnSaveClose': 'Salvează și închide', // from v2.1 added 12.6.2015 /******************************** notifications ********************************/ 'ntfopen' : 'Deschide dosar', 'ntffile' : 'Deschide fișier', 'ntfreload' : 'Actualizează conținutul dosarului', 'ntfmkdir' : 'Se creează dosarul', 'ntfmkfile' : 'Se creează fișierele', 'ntfrm' : 'Șterge fișiere', 'ntfcopy' : 'Copiază fișiere', 'ntfmove' : 'Mută fișiere', 'ntfprepare' : 'Pregătește copierea fișierelor', 'ntfrename' : 'Redenumește fișiere', 'ntfupload' : 'Se urcă fișierele', 'ntfdownload' : 'Se descarcă fișierele', 'ntfsave' : 'Salvează fișiere', 'ntfarchive' : 'Se creează arhiva', 'ntfextract' : 'Se extrag fișierele din arhivă', 'ntfsearch' : 'Se caută fișierele', 'ntfresize' : 'Se redimnesionează imaginile', 'ntfsmth' : 'Se întamplă ceva', 'ntfloadimg' : 'Se încarcă imaginea', 'ntfnetmount' : 'Se încarcă volumul din rețea', // added 18.04.2012 'ntfnetunmount': 'Se elimină volumul din rețea', // from v2.1 added 30.04.2012 'ntfdim' : 'Se preiau dimensiunile imaginii', // added 20.05.2013 'ntfreaddir' : 'Se citesc informațiile dosarului', // from v2.1 added 01.07.2013 'ntfurl' : 'Se preia URL-ul din link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Se schimba modul de fișier', // from v2.1 added 20.6.2015 /************************************ dates **********************************/ 'dateUnknown' : 'necunoscută', 'Today' : 'Astăzi', 'Yesterday' : 'Ieri', 'msJan' : 'Ian', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Mai', 'msJun' : 'Iun', 'msJul' : 'Iul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Ianuarie', 'February' : 'Februarie', 'March' : 'Martie', 'April' : 'Aprilie', 'May' : 'Mai', 'June' : 'Iunie', 'July' : 'Iulie', 'August' : 'August', 'September' : 'Septembrie', 'October' : 'Octombrie', 'November' : 'Noiembrie', 'December' : 'Decembrie', 'Sunday' : 'Duminică', 'Monday' : 'Luni', 'Tuesday' : 'Marți', 'Wednesday' : 'Miercuri', 'Thursday' : 'Joi', 'Friday' : 'Vineri', 'Saturday' : 'Sâmbătă', 'Sun' : 'Du', 'Mon' : 'Lu', 'Tue' : 'Ma', 'Wed' : 'Mi', 'Thu' : 'Jo', 'Fri' : 'Vi', 'Sat' : 'Sâ', /******************************** sort variants ********************************/ 'sortname' : 'după nume', 'sortkind' : 'după tip', 'sortsize' : 'după mărime', 'sortdate' : 'după dată', 'sortFoldersFirst' : 'Dosarele primele', /********************************** new items **********************************/ 'untitled file.txt' : 'FisierNou.txt', // added 10.11.2015 'untitled folder' : 'DosarNou', // added 10.11.2015 'Archive' : 'ArhivaNoua', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'Este necesară confirmare', 'confirmRm' : 'Ești sigur că vrei să ștergi fișierele?
    Acțiunea este ireversibilă!', 'confirmRepl' : 'Înlocuiește fișierul vechi cu cel nou?', 'confirmConvUTF8' : 'Nu este în UTF-8
    Convertim la UTF-8?
    Conținutul devine UTF-8 după salvarea conversiei.', // from v2.1 added 08.04.2014 'confirmNotSave' : 'Au avut loc modificări.
    Dacă nu salvezi se vor pierde modificările.', // from v2.1 added 15.7.2015 'apllyAll' : 'Aplică pentru toate', 'name' : 'Nume', 'size' : 'Mărime', 'perms' : 'Permisiuni', 'modify' : 'Modificat la', 'kind' : 'Tip', 'read' : 'citire', 'write' : 'scriere', 'noaccess' : 'acces interzis', 'and' : 'și', 'unknown' : 'necunoscut', 'selectall' : 'Alege toate fișierele', 'selectfiles' : 'Alege fișier(e)', 'selectffile' : 'Alege primul fișier', 'selectlfile' : 'Alege ultimul fișier', 'viewlist' : 'Vezi ca listă', 'viewicons' : 'Vezi ca icoane', 'places' : 'Locuri', 'calc' : 'Calculează', 'path' : 'Cale', 'aliasfor' : 'Alias pentru', 'locked' : 'Securizat', 'dim' : 'Dimensiuni', 'files' : 'Fișiere', 'folders' : 'Dosare', 'items' : 'Elemente', 'yes' : 'da', 'no' : 'nu', 'link' : 'Link', 'searcresult' : 'Rezultatele căutării', 'selected' : 'elemente alese', 'about' : 'Despre', 'shortcuts' : 'Scurtături', 'help' : 'Ajutor', 'webfm' : 'Manager web pentru fișiere', 'ver' : 'Versiune', 'protocolver' : 'versiune protocol', 'homepage' : 'Pagina proiectului', 'docs' : 'Documentație', 'github' : 'Fork nou pe Github', 'twitter' : 'Urmărește-ne pe twitter', 'facebook' : 'Alătura-te pe facebook', 'team' : 'Echipa', 'chiefdev' : 'chief developer', 'developer' : 'developer', 'contributor' : 'contributor', 'maintainer' : 'maintainer', 'translator' : 'translator', 'icons' : 'Icoane', 'dontforget' : 'și nu uita să-ți iei prosopul', 'shortcutsof' : 'Scurtăturile sunt dezactivate', 'dropFiles' : 'Dă drumul fișierelor aici', 'or' : 'sau', 'selectForUpload' : 'Alege fișiere pentru a le urca', 'moveFiles' : 'Mută fișiere', 'copyFiles' : 'Copiază fișiere', 'rmFromPlaces' : 'Șterge din locuri', 'aspectRatio' : 'Aspect ratio', 'scale' : 'Scală', 'width' : 'Lățime', 'height' : 'Înălțime', 'resize' : 'Redimensionează', 'crop' : 'Decupează', 'rotate' : 'Rotește', 'rotate-cw' : 'Rotește cu 90° în sensul ceasului', 'rotate-ccw' : 'Rotește cu 90° în sensul invers ceasului', 'degree' : '°', 'netMountDialogTitle' : 'Încarcă volum din rețea', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Gazdă', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Utilizator', // added 18.04.2012 'pass' : 'Parolă', // added 18.04.2012 'confirmUnmount' : 'Vrei să elimini volumul $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drag&drop sau lipește din browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drag&drop sau lipește fișiere aici', // from v2.1 added 07.04.2014 'encoding' : 'Encodare', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Țintă: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Caută după tipul MIME', // from v2.1 added 22.5.2015 'owner' : 'Owner', // from v2.1 added 20.6.2015 'group' : 'Group', // from v2.1 added 20.6.2015 'other' : 'Other', // from v2.1 added 20.6.2015 'execute' : 'Execute', // from v2.1 added 20.6.2015 'perm' : 'Permission', // from v2.1 added 20.6.2015 'mode' : 'Mod', // from v2.1 added 20.6.2015 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Necunoscut', 'kindFolder' : 'Dosar', 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Alias stricat', // applications 'kindApp' : 'Aplicație', 'kindPostscript' : 'Document Postscript', 'kindMsOffice' : 'Document Microsoft Office', 'kindMsWord' : 'Document Microsoft Word', 'kindMsExcel' : 'Document Microsoft Excel', 'kindMsPP' : 'Prezentare Microsoft Powerpoint', 'kindOO' : 'Document Open Office', 'kindAppFlash' : 'Aplicație Flash', 'kindPDF' : 'Document Portabil (PDF)', 'kindTorrent' : 'Fișier Bittorrent', 'kind7z' : 'Arhivă 7z', 'kindTAR' : 'Arhivă TAR', 'kindGZIP' : 'Arhivă GZIP', 'kindBZIP' : 'Arhivă BZIP', 'kindXZ' : 'Arhivă XZ', 'kindZIP' : 'Arhivă ZIP', 'kindRAR' : 'Arhivă RAR', 'kindJAR' : 'Fișier Java JAR', 'kindTTF' : 'Font True Type', 'kindOTF' : 'Font Open Type', 'kindRPM' : 'Pachet RPM', // texts 'kindText' : 'Document text', 'kindTextPlain' : 'Text simplu', 'kindPHP' : 'Sursă PHP', 'kindCSS' : 'Fișier de stil (CSS)', 'kindHTML' : 'Document HTML', 'kindJS' : 'Sursă Javascript', 'kindRTF' : 'Text formatat (rich text)', 'kindC' : 'Sursă C', 'kindCHeader' : 'Sursă C header', 'kindCPP' : 'Sursă C++', 'kindCPPHeader' : 'Sursă C++ header', 'kindShell' : 'Script terminal Unix', 'kindPython' : 'Sursă Python', 'kindJava' : 'Sursă Java', 'kindRuby' : 'Sursă Ruby', 'kindPerl' : 'Script Perl', 'kindSQL' : 'Sursă SQL', 'kindXML' : 'Document XML', 'kindAWK' : 'Sursă AWK', 'kindCSV' : 'Valori separate de virgulă (CSV)', 'kindDOCBOOK' : 'Document Docbook XML', 'kindMarkdown' : 'Text Markdown', // added 20.7.2015 // images 'kindImage' : 'Imagine', 'kindBMP' : 'Imagine BMP', 'kindJPEG' : 'Imagine JPEG', 'kindGIF' : 'Imagine GIF', 'kindPNG' : 'Imagine PNG', 'kindTIFF' : 'Imagine TIFF', 'kindTGA' : 'Imagine TGA', 'kindPSD' : 'Imagine Adobe Photoshop', 'kindXBITMAP' : 'Imagine X bitmap', 'kindPXM' : 'Imagine Pixelmator', // media 'kindAudio' : 'Audio', 'kindAudioMPEG' : 'Audio MPEG', 'kindAudioMPEG4' : 'Audio MPEG-4', 'kindAudioMIDI' : 'Audio MIDI', 'kindAudioOGG' : 'Audio Ogg Vorbis', 'kindAudioWAV' : 'Audio WAV', 'AudioPlaylist' : 'Playlist MP3', 'kindVideo' : 'Video', 'kindVideoDV' : 'Video DV', 'kindVideoMPEG' : 'Video MPEG', 'kindVideoMPEG4' : 'Video MPEG-4', 'kindVideoAVI' : 'Video AVI', 'kindVideoMOV' : 'Video Quick Time', 'kindVideoWM' : 'Video Windows Media', 'kindVideoFlash' : 'Video Flash', 'kindVideoMKV' : 'Video Matroska', 'kindVideoOGG' : 'Video Ogg' } }; })); application/library/js/i18n/elfinder.zh_TW.js000064400000077337146731177160015124 0ustar00/** * 正體中文 translation * @author Yuwei Chuang * @author Danny Lin * @author TCC * @author Rick Jiang * @version 2023-06-02 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.zh_TW = { translator : 'Yuwei Chuang <ywchuang.tw@gmail.com>, Danny Lin <danny0838@gmail.com>, TCC <john987john987@gmail.com>, Rick Jiang <rick.jiang@aol.com>, Banny Tai <cssf998811@gmail.com>', language : '正體中文', direction : 'ltr', dateFormat : 'Y/m/d H:i', // will show like: 2023/06/02 09:48 fancyDateFormat : '$1 H:i', // will show like: 今天 09:48 nonameDateFormat : 'ymd-His', // noname upload will show like: 230602-094822 messages : { /********************************** errors **********************************/ 'error' : '錯誤', 'errUnknown' : '未知的錯誤.', 'errUnknownCmd' : '未知的指令.', 'errJqui' : '無效的 jQuery UI 設定. 必須包含 Selectable, draggable 以及 droppable 元件.', 'errNode' : 'elFinder 需要能建立 DOM 元素.', 'errURL' : '無效的 elFinder 設定! 尚未設定 URL 選項.', 'errAccess' : '拒絕存取.', 'errConnect' : '無法連線至後端.', 'errAbort' : '連線中斷.', 'errTimeout' : '連線逾時.', 'errNotFound' : '後端不存在.', 'errResponse' : '無效的後端回復.', 'errConf' : '無效的後端設定.', 'errJSON' : '未安裝 PHP JSON 模組.', 'errNoVolumes' : '無可讀取的 volumes.', 'errCmdParams' : '無效的參數, 指令: "$1".', 'errDataNotJSON' : '資料不是 JSON 格式.', 'errDataEmpty' : '沒有資料.', 'errCmdReq' : '後端請求需要命令名稱.', 'errOpen' : '無法開啟 "$1".', 'errNotFolder' : '非資料夾.', 'errNotFile' : '非檔案.', 'errRead' : '無法讀取 "$1".', 'errWrite' : '無法寫入 "$1".', 'errPerm' : '無權限.', 'errLocked' : '"$1" 被鎖定,不能重新命名, 移動或删除.', 'errExists' : '檔案 "$1" 已經存在了.', 'errInvName' : '無效的檔案名稱.', 'errInvDirname' : '無效的資料夾名稱', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : '未找到資料夾.', 'errFileNotFound' : '未找到檔案.', 'errTrgFolderNotFound' : '未找到目標資料夾 "$1".', 'errPopup' : '連覽器攔截了彈跳視窗. 請在瀏覽器選項允許彈跳視窗.', 'errMkdir' : '不能建立資料夾 "$1".', 'errMkfile' : '不能建立檔案 "$1".', 'errRename' : '不能重新命名 "$1".', 'errCopyFrom' : '不允許從磁碟 "$1" 複製.', 'errCopyTo' : '不允複製到磁碟 "$1".', 'errMkOutLink' : '無法建立連結到磁碟根目錄外面.', // from v2.1 added 03.10.2015 'errUpload' : '上傳錯誤.', // old name - errUploadCommon 'errUploadFile' : '無法上傳 "$1".', // old name - errUpload 'errUploadNoFiles' : '未找到要上傳的檔案.', 'errUploadTotalSize' : '資料超過了最大允許大小.', // old name - errMaxSize 'errUploadFileSize' : '檔案超過了最大允許大小.', // old name - errFileMaxSize 'errUploadMime' : '不允許的檔案類型.', 'errUploadTransfer' : '"$1" 傳輸錯誤.', 'errUploadTemp' : '無法建立暫存檔以供上傳.', // from v2.1 added 26.09.2015 'errNotReplace' : '"$1" 已經存在此位置, 不能被其他的替换.', // new 'errReplace' : '無法替换 "$1".', 'errSave' : '無法保存 "$1".', 'errCopy' : '無法複製 "$1".', 'errMove' : '無法移動 "$1".', 'errCopyInItself' : '無法移動 "$1" 到原有位置.', 'errRm' : '無法删除 "$1".', 'errTrash' : '無法丟入垃圾桶', // from v2.1.24 added 30.4.2017 'errRmSrc' : '無法删除來源檔案.', 'errExtract' : '無法從 "$1" 解壓縮檔案.', 'errArchive' : '無法建立壓縮膽.', 'errArcType' : '不支援的壓縮格式.', 'errNoArchive' : '檔案不是壓縮檔, 或者不支援該壓缩格式.', 'errCmdNoSupport' : '後端不支援該指令.', 'errReplByChild' : '資料夾 “$1” 不能被它所包含的檔案(資料夾)替换.', 'errArcSymlinks' : '由於安全考量,拒絕解壓縮符號連結或含有不允許檔名的檔案.', // edited 24.06.2012 'errArcMaxSize' : '待壓縮檔案的大小超出上限.', 'errResize' : '無法重新調整大小 "$1".', 'errResizeDegree' : '無效的旋轉角度.', // added 7.3.2013 'errResizeRotate' : '無法旋轉圖片.', // added 7.3.2013 'errResizeSize' : '無效的圖片大小.', // added 7.3.2013 'errResizeNoChange' : '圖片大小未更改.', // added 7.3.2013 'errUsupportType' : '不支援的檔案格式.', 'errNotUTF8Content' : '檔案 "$1" 不是 UTF-8 格式, 不能編輯.', // added 9.11.2011 'errNetMount' : '無法掛載 "$1".', // added 17.04.2012 'errNetMountNoDriver' : '不支援該通訊協議.', // added 17.04.2012 'errNetMountFailed' : '掛載失敗.', // added 17.04.2012 'errNetMountHostReq' : '需要指定主機位置.', // added 18.04.2012 'errSessionExpires' : '由於過久無活動, session 已過期.', 'errCreatingTempDir' : '無法建立暫時目錄: "$1"', 'errFtpDownloadFile' : '無法從 FTP 下載檔案: "$1"', 'errFtpUploadFile' : '無法上傳檔案到 FTP: "$1"', 'errFtpMkdir' : '無法在 FTP 建立遠端目錄: "$1"', 'errArchiveExec' : '壓縮檔案時發生錯誤: "$1"', 'errExtractExec' : '解壓縮檔案時發生錯誤: "$1"', 'errNetUnMount' : '無法卸載', // from v2.1 added 30.04.2012 'errConvUTF8' : '無法轉換為 UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : '如要上傳這個資料夾, 請嘗試 Google Chrome.', // from v2.1 added 26.6.2015 'errSearchTimeout' : '搜尋 "$1" 逾時. 只列出部分搜尋結果.', // from v2.1 added 12.1.2016 'errReauthRequire' : '需要重新驗證權限.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : '最多可選擇 $1 個物件.', // from v2.1.17 added 17.10.2016 'errRestore' : '無法從垃圾桶恢復。 無法識別恢復目的地。', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : '編輯器找不到此文件類型。', // from v2.1.25 added 23.5.2017 'errServerError' : '服務器發生錯誤。', // from v2.1.25 added 16.6.2017 'errEmpty' : '無法清空"$1"文件夾', // from v2.1.25 added 22.6.2017 'moreErrors' : '發生 $1 個錯誤.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : '一次最多可以創建 $1 個文件夾。', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : '建立壓縮檔', 'cmdback' : '後退', 'cmdcopy' : '複製', 'cmdcut' : '剪下', 'cmddownload' : '下載', 'cmdduplicate' : '建立副本', 'cmdedit' : '編輯檔案', 'cmdextract' : '從壓縮檔解壓縮', 'cmdforward' : '前進', 'cmdgetfile' : '選擇檔案', 'cmdhelp' : '關於本軟體', 'cmdhome' : '首頁', 'cmdinfo' : '查看關於', 'cmdmkdir' : '建立資料夾', 'cmdmkdirin' : '移入新資料夾', // from v2.1.7 added 19.2.2016 'cmdmkfile' : '建立文檔', 'cmdopen' : '開啟', 'cmdpaste' : '貼上', 'cmdquicklook' : '預覽', 'cmdreload' : '更新', 'cmdrename' : '重新命名', 'cmdrm' : '删除', 'cmdtrash' : '丟到垃圾桶', //from v2.1.24 added 29.4.2017 'cmdrestore' : '恢復', //from v2.1.24 added 3.5.2017 'cmdsearch' : '搜尋檔案', 'cmdup' : '移到上一層資料夾', 'cmdupload' : '上傳檔案', 'cmdview' : '檢視', 'cmdresize' : '調整大小及旋轉', 'cmdsort' : '排序', 'cmdnetmount' : '掛載網路磁碟', // added 18.04.2012 'cmdnetunmount': '卸載', // from v2.1 added 30.04.2012 'cmdplaces' : '加到"位置"', // added 28.12.2014 'cmdchmod' : '更改權限', // from v2.1 added 20.6.2015 'cmdopendir' : '開啟資料夾', // from v2.1 added 13.1.2016 'cmdcolwidth' : '重設欄寬', // from v2.1.13 added 12.06.2016 'cmdfullscreen': '全螢幕', // from v2.1.15 added 03.08.2016 'cmdmove' : '移動', // from v2.1.15 added 21.08.2016 'cmdempty' : '清空資料夾', // from v2.1.25 added 22.06.2017 'cmdundo' : '上一步', // from v2.1.27 added 31.07.2017 'cmdredo' : '下一步', // from v2.1.27 added 31.07.2017 'cmdpreference': '優先權', // from v2.1.27 added 03.08.2017 'cmdselectall' : '全選', // from v2.1.28 added 15.08.2017 'cmdselectnone': '取消選取', // from v2.1.28 added 15.08.2017 'cmdselectinvert': '反向選取', // from v2.1.28 added 15.08.2017 'cmdopennew' : '在新視窗開啟', // from v2.1.38 added 3.4.2018 'cmdhide' : '隱藏(偏好)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : '關閉', 'btnSave' : '儲存', 'btnRm' : '删除', 'btnApply' : '使用', 'btnCancel' : '取消', 'btnNo' : '否', 'btnYes' : '是', 'btnMount' : '掛載', // added 18.04.2012 'btnApprove': '移到 $1 並批准', // from v2.1 added 26.04.2012 'btnUnmount': '卸載', // from v2.1 added 30.04.2012 'btnConv' : '轉換', // from v2.1 added 08.04.2014 'btnCwd' : '這裡', // from v2.1 added 22.5.2015 'btnVolume' : '磁碟', // from v2.1 added 22.5.2015 'btnAll' : '全部', // from v2.1 added 22.5.2015 'btnMime' : 'MIME 類型', // from v2.1 added 22.5.2015 'btnFileName':'檔名', // from v2.1 added 22.5.2015 'btnSaveClose': '儲存並關閉', // from v2.1 added 12.6.2015 'btnBackup' : '備份', // fromv2.1 added 28.11.2015 'btnRename' : '重新命名', // from v2.1.24 added 6.4.2017 'btnRenameAll' : '重新命名全部', // from v2.1.24 added 6.4.2017 'btnPrevious' : '上一頁 ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : '下一頁 ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : '另存新檔', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : '開啟資料夾', 'ntffile' : '開啟檔案', 'ntfreload' : '更新資料夾内容', 'ntfmkdir' : '建立資料夾', 'ntfmkfile' : '建立檔案', 'ntfrm' : '删除檔案', 'ntfcopy' : '複製檔案', 'ntfmove' : '移動檔案', 'ntfprepare' : '準備複製檔案', 'ntfrename' : '重新命名檔案', 'ntfupload' : '上傳檔案', 'ntfdownload' : '下載檔案', 'ntfsave' : '儲存檔案', 'ntfarchive' : '建立壓縮檔', 'ntfextract' : '從壓縮檔解壓縮', 'ntfsearch' : '搜尋檔案', 'ntfresize' : '正在更改圖片大小', 'ntfsmth' : '正在忙 >_<', 'ntfloadimg' : '正在讀取圖片', 'ntfnetmount' : '正在掛載網路磁碟', // added 18.04.2012 'ntfnetunmount': '正在卸載網路磁碟', // from v2.1 added 30.04.2012 'ntfdim' : '取得圖片大小', // added 20.05.2013 'ntfreaddir' : '正在讀取資料夾資訊', // from v2.1 added 01.07.2013 'ntfurl' : '正在取得連結 URL', // from v2.1 added 11.03.2014 'ntfchmod' : '更改檔案模式', // from v2.1 added 20.6.2015 'ntfpreupload': '正在驗證上傳檔案名稱', // from v2.1 added 31.11.2015 'ntfzipdl' : '正在建立縮檔以供下載', // from v2.1.7 added 23.1.2016 'ntfparents' : '正在取得路徑資訊', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': '正在處理上傳的檔案', // from v2.1.17 added 2.11.2016 'ntftrash' : '正在丟到垃圾桶', // from v2.1.24 added 2.5.2017 'ntfrestore' : '正從垃圾桶恢復', // from v2.1.24 added 3.5.2017 'ntfchkdir' : '正在檢查目標資料夾', // from v2.1.24 added 3.5.2017 'ntfundo' : '正在撤銷上一步動作', // from v2.1.27 added 31.07.2017 'ntfredo' : '正在重做上一步動作', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : '正在確認內容', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : '垃圾桶', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : '未知', 'Today' : '今天', 'Yesterday' : '昨天', 'msJan' : '一月', 'msFeb' : '二月', 'msMar' : '三月', 'msApr' : '四月', 'msMay' : '五月', 'msJun' : '六月', 'msJul' : '七月', 'msAug' : '八月', 'msSep' : '九月', 'msOct' : '十月', 'msNov' : '十一月', 'msDec' : '十二月', 'January' : '一月', 'February' : '二月', 'March' : '三月', 'April' : '四月', 'May' : '五月', 'June' : '六月', 'July' : '七月', 'August' : '八月', 'September' : '九月', 'October' : '十月', 'November' : '十一月', 'December' : '十二月', 'Sunday' : '星期日', 'Monday' : '星期一', 'Tuesday' : '星期二', 'Wednesday' : '星期三', 'Thursday' : '星期四', 'Friday' : '星期五', 'Saturday' : '星期六', 'Sun' : '周日', 'Mon' : '周一', 'Tue' : '周二', 'Wed' : '周三', 'Thu' : '周四', 'Fri' : '周五', 'Sat' : '周六', /******************************** sort variants ********************************/ 'sortname' : '按名稱', 'sortkind' : '按類型', 'sortsize' : '按大小', 'sortdate' : '按日期', 'sortFoldersFirst' : '資料夾置前', 'sortperm' : '按權限', // from v2.1.13 added 13.06.2016 'sortmode' : '按模式', // from v2.1.13 added 13.06.2016 'sortowner' : '按擁有者', // from v2.1.13 added 13.06.2016 'sortgroup' : '按群組', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : '也套用於樹狀圖', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : '新檔案.txt', // added 10.11.2015 'untitled folder' : '新資料夾', // added 10.11.2015 'Archive' : '新壓縮檔', // from v2.1 added 10.11.2015 'untitled file' : '新檔案.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: 檔案', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : '請確認', 'confirmRm' : '確定要删除檔案嗎?
    此操作無法回復!', 'confirmRepl' : '用新檔案取代原檔案?', 'confirmRest' : '用垃圾桶中的項目替換現有項目?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : '不是 UTF-8 檔案
    轉換為 UTF-8 嗎?
    轉換後儲存會把內容變成 UTF-8.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : '無法偵測此檔案的字元編碼, 須暫時轉換為 UTF-8 以供編輯.
    請選擇此檔案的字元編碼.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : '此檔案已修改.
    若未儲存將遺失目前的工作.', // from v2.1 added 15.7.2015 'confirmTrash' : '確定要將項目丟到垃圾桶嗎?', //from v2.1.24 added 29.4.2017 'confirmMove' : '確定要將項目移至“$1”嗎?', //from v2.1.50 added 27.7.2019 'apllyAll' : '全部套用', 'name' : '名稱', 'size' : '大小', 'perms' : '權限', 'modify' : '修改於', 'kind' : '類別', 'read' : '讀取', 'write' : '寫入', 'noaccess' : '無權限', 'and' : '和', 'unknown' : '未知', 'selectall' : '選擇所有檔案', 'selectfiles' : '選擇檔案', 'selectffile' : '選擇第一個檔案', 'selectlfile' : '選擇最後一個檔案', 'viewlist' : '列表檢視', 'viewicons' : '圖示檢視', 'viewSmall' : '小圖示', // from v2.1.39 added 22.5.2018 'viewMedium' : '中圖示', // from v2.1.39 added 22.5.2018 'viewLarge' : '大圖示', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : '超大圖示', // from v2.1.39 added 22.5.2018 'places' : '位置', 'calc' : '計算', 'path' : '路徑', 'aliasfor' : '别名', 'locked' : '鎖定', 'dim' : '圖片大小', 'files' : '檔案', 'folders' : '資料夾', 'items' : '項目', 'yes' : '是', 'no' : '否', 'link' : '連結', 'searcresult' : '搜尋结果', 'selected' : '選取的項目', 'about' : '關於', 'shortcuts' : '快捷鍵', 'help' : '協助', 'webfm' : '網路檔案總管', 'ver' : '版本', 'protocolver' : '協定版本', 'homepage' : '首頁', 'docs' : '文件', 'github' : '在 Github 建立我們的分支', 'twitter' : '在 Twitter 追蹤我們', 'facebook' : '在 Facebook 加入我們', 'team' : '團隊', 'chiefdev' : '主要開發者', 'developer' : '開發者', 'contributor' : '貢獻者', 'maintainer' : '維護者', 'translator' : '翻譯者', 'icons' : '圖示', 'dontforget' : '别忘了帶上你擦汗的毛巾', 'shortcutsof' : '快捷鍵已停用', 'dropFiles' : '把檔案拖到此處', 'or' : '或', 'selectForUpload' : '選擇要上傳的檔案', 'moveFiles' : '移動檔案', 'copyFiles' : '複製檔案', 'restoreFiles' : '恢復項目', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : '從"位置"中删除', 'aspectRatio' : '保持比例', 'scale' : '寬高比', 'width' : '寬', 'height' : '高', 'resize' : '重新調整大小', 'crop' : '裁切', 'rotate' : '旋轉', 'rotate-cw' : '順時針旋轉90度', 'rotate-ccw' : '逆時針旋轉90度', 'degree' : '度', 'netMountDialogTitle' : '掛載網路磁碟', // added 18.04.2012 'protocol' : '通訊協定', // added 18.04.2012 'host' : '主機', // added 18.04.2012 'port' : '連接埠', // added 18.04.2012 'user' : '使用者', // added 18.04.2012 'pass' : '密碼', // added 18.04.2012 'confirmUnmount' : '確定要卸載 $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': '從瀏覽器拖放或貼上檔案', // from v2.1 added 30.05.2012 'dropPasteFiles' : '拖放檔案或從剪貼簿貼上 URL 或圖片至此', // from v2.1 added 07.04.2014 'encoding' : '編碼', // from v2.1 added 19.12.2014 'locale' : '語系', // from v2.1 added 19.12.2014 'searchTarget' : '目標: $1', // from v2.1 added 22.5.2015 'searchMime' : '根據輸入的 MIME 類型搜尋', // from v2.1 added 22.5.2015 'owner' : '擁有者', // from v2.1 added 20.6.2015 'group' : '群組', // from v2.1 added 20.6.2015 'other' : '其他', // from v2.1 added 20.6.2015 'execute' : '執行', // from v2.1 added 20.6.2015 'perm' : '權限', // from v2.1 added 20.6.2015 'mode' : '模式', // from v2.1 added 20.6.2015 'emptyFolder' : '資料夾是空的', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : '資料夾是空的\\A 拖曳以增加項目', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : '資料夾是空的\\A 長按以增加項目', // from v2.1.6 added 30.12.2015 'quality' : '品質', // from v2.1.6 added 5.1.2016 'autoSync' : '自動同步', // from v2.1.6 added 10.1.2016 'moveUp' : '上移', // from v2.1.6 added 18.1.2016 'getLink' : '取得 URL 連結', // from v2.1.7 added 9.2.2016 'selectedItems' : '選取的項目 ($1)', // from v2.1.7 added 2.19.2016 'folderId' : '資料夾 ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : '允許離線存取', // from v2.1.10 added 3.25.2016 'reAuth' : '重新驗證權限', // from v2.1.10 added 3.25.2016 'nowLoading' : '正在載入...', // from v2.1.12 added 4.26.2016 'openMulti' : '開啟多個檔案', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '確定要在瀏覽器開啟 $1 個檔案嗎?', // from v2.1.12 added 5.14.2016 'emptySearch' : '在搜尋目標中的搜尋結果是空的.', // from v2.1.12 added 5.16.2016 'editingFile' : '正在編輯檔案.', // from v2.1.13 added 6.3.2016 'hasSelected' : '己選取 $1 個項目.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '剪貼簿裡有 $1 個項目.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : '增量搜尋只來自目前視圖.', // from v2.1.13 added 6.30.2016 'reinstate' : '恢復原狀', // from v2.1.15 added 3.8.2016 'complete' : '$1完成', // from v2.1.15 added 21.8.2016 'contextmenu' : '情境選單', // from v2.1.15 added 9.9.2016 'pageTurning' : '正在換頁', // from v2.1.15 added 10.9.2016 'volumeRoots' : '磁碟根目錄', // from v2.1.16 added 16.9.2016 'reset' : '重設', // from v2.1.16 added 1.10.2016 'bgcolor' : '背景頻色', // from v2.1.16 added 1.10.2016 'colorPicker' : '顏色選擇器', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px 網格', // from v2.1.16 added 4.10.2016 'enabled' : '啟用', // from v2.1.16 added 4.10.2016 'disabled' : '停用', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : '目前視圖的搜尋結果是空的.\\A按 [Enter] 擴大搜尋目標.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : '目前視圖中的第一個字母的搜索結果是空的。', // from v2.1.23 added 24.3.2017 'textLabel' : '文字標示', // from v2.1.17 added 13.10.2016 'minsLeft' : '剩下 $1 分鐘', // from v2.1.17 added 13.11.2016 'openAsEncoding' : '以選擇的編碼重新開啟', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : '以選擇的編碼儲存', // from v2.1.19 added 2.12.2016 'selectFolder' : '選擇資料夾', // from v2.1.20 added 13.12.2016 'firstLetterSearch': '首字母搜索', // from v2.1.23 added 24.3.2017 'presets' : '預置', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : '有太多項目,所以不能丟入垃圾桶。', // from v2.1.25 added 9.6.2017 'TextArea' : '文字區域', // from v2.1.25 added 14.6.2017 'folderToEmpty' : '$1" 資料夾是空的', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '"$1" 資料夾中沒有任何項目', // from v2.1.25 added 22.6.2017 'preference' : '偏好', // from v2.1.26 added 28.6.2017 'language' : '語言設置', // from v2.1.26 added 28.6.2017 'clearBrowserData': '初始化保存在此瀏覽器中的設置', // from v2.1.26 added 28.6.2017 'toolbarPref' : '工具欄設置', // from v2.1.27 added 2.8.2017 'charsLeft' : '... 剩下 $1 個字元', // from v2.1.29 added 30.8.2017 'linesLeft' : '... 剩下 $1 行', // from v2.1.52 added 16.1.2020 'sum' : '總計', // from v2.1.29 added 28.9.2017 'roughFileSize' : '粗略的檔案大小', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : '滑鼠懸停在對話框內', // from v2.1.30 added 2.11.2017 'select' : '選擇', // from v2.1.30 added 23.11.2017 'selectAction' : '選擇檔案時的動作', // from v2.1.30 added 23.11.2017 'useStoredEditor' : '使用上次的編輯器開啟', // from v2.1.30 added 23.11.2017 'selectinvert' : '反向選擇', // from v2.1.30 added 25.11.2017 'renameMultiple' : '確定要重新命名 $1 為 $2 嗎?
    此動作無法恢復!', // from v2.1.31 added 4.12.2017 'batchRename' : '批次重新命名', // from v2.1.31 added 8.12.2017 'plusNumber' : '增加數量', // from v2.1.31 added 8.12.2017 'asPrefix' : '新增前輟', // from v2.1.31 added 8.12.2017 'asSuffix' : '新增後輟', // from v2.1.31 added 8.12.2017 'changeExtention' : '變更範圍', // from v2.1.31 added 8.12.2017 'columnPref' : ' 列設置(列表檢視)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : '所有修改將立即套用到檔案.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : '所有修改在卸載之前不會有變化.', // from v2.1.33 added 2.3.2018 'unmountChildren' : '安裝在該磁碟以下的磁碟也會卸載,你確定要卸載嗎?', // from v2.1.33 added 5.3.2018 'selectionInfo' : '選擇資訊', // from v2.1.33 added 7.3.2018 'hashChecker' : '顯示檔案雜湊算法', // from v2.1.33 added 10.3.2018 'infoItems' : '檔案資訊(選擇資訊面板)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': '再次點擊後退出', // from v2.1.38 added 1.4.2018 'toolbar' : '工具列', // from v2.1.38 added 4.4.2018 'workspace' : '工作區', // from v2.1.38 added 4.4.2018 'dialog' : '對話框', // from v2.1.38 added 4.4.2018 'all' : '全部', // from v2.1.38 added 4.4.2018 'iconSize' : '圖示尺寸 (圖示顯示)', // from v2.1.39 added 7.5.2018 'editorMaximized' : '開啟最大化編輯視窗', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : '由於使用 API 轉換功能目前無法使用,請到網站上轉換.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : '轉換後,必須上傳檔案網址或一個下載的檔案,以保存轉換後的檔案.', //from v2.1.40 added 8.7.2018 'convertOn' : '在 $1 網站上轉換', // from v2.1.40 added 10.7.2018 'integrations' : '整合', // from v2.1.40 added 11.7.2018 'integrationWith' : 'elFinder 整合以下外部服務,使用前請先檢查使用條款、隱私權政策等.', // from v2.1.40 added 11.7.2018 'showHidden' : '顯示已隱藏的項目', // from v2.1.41 added 24.7.2018 'hideHidden' : '隱藏已隱藏的項目', // from v2.1.41 added 24.7.2018 'toggleHidden' : '顯示/隱藏已隱藏的項目', // from v2.1.41 added 24.7.2018 'makefileTypes' : '允許"新檔案"使用的檔案類型', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : '文字檔案類型', // from v2.1.41 added 7.8.2018 'add' : '新增', // from v2.1.41 added 7.8.2018 'theme' : '主題', // from v2.1.43 added 19.10.2018 'default' : '預設', // from v2.1.43 added 19.10.2018 'description' : '描述', // from v2.1.43 added 19.10.2018 'website' : '網站', // from v2.1.43 added 19.10.2018 'author' : '作者', // from v2.1.43 added 19.10.2018 'email' : '信箱', // from v2.1.43 added 19.10.2018 'license' : '許可證', // from v2.1.43 added 19.10.2018 'exportToSave' : '檔案無法存檔,為避免遺失編輯資料,需要導出到你的電腦.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': '連續點擊以選擇', // from v2.1.47 added 22.1.2019 'useFullscreen' : '使用全螢幕模式', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : '未知', 'kindRoot' : '磁碟根目錄', // from v2.1.16 added 16.10.2016 'kindFolder' : '資料夾', 'kindSelects' : '選擇', // from v2.1.29 added 29.8.2017 'kindAlias' : '别名', 'kindAliasBroken' : '毀損的别名', // applications 'kindApp' : '應用程式', 'kindPostscript' : 'Postscript 文件', 'kindMsOffice' : 'Microsoft Office 文件', 'kindMsWord' : 'Microsoft Word 文件', 'kindMsExcel' : 'Microsoft Excel 文件', 'kindMsPP' : 'Microsoft Powerpoint 簡報', 'kindOO' : 'Open Office 文件', 'kindAppFlash' : 'Flash 應用程式', 'kindPDF' : '可攜式文件格式(PDF)', 'kindTorrent' : 'Bittorrent 檔案', 'kind7z' : '7z 壓縮檔', 'kindTAR' : 'TAR 壓縮檔', 'kindGZIP' : 'GZIP 壓縮檔', 'kindBZIP' : 'BZIP 壓縮檔', 'kindXZ' : 'XZ 壓縮檔', 'kindZIP' : 'ZIP 壓縮檔', 'kindRAR' : 'RAR 壓縮檔', 'kindJAR' : 'Java JAR 檔案', 'kindTTF' : 'True Type 字體', 'kindOTF' : 'Open Type 字體', 'kindRPM' : 'RPM 封裝檔', // texts 'kindText' : '文字檔案', 'kindTextPlain' : '純文字', 'kindPHP' : 'PHP 原始碼', 'kindCSS' : '階層樣式表(CSS)', 'kindHTML' : 'HTML 文件', 'kindJS' : 'Javascript 原始碼', 'kindRTF' : '富文本(RTF)', 'kindC' : 'C 原始碼', 'kindCHeader' : 'C 標頭原始碼', 'kindCPP' : 'C++ 原始碼', 'kindCPPHeader' : 'C++ 標頭原始碼', 'kindShell' : 'Unix Shell 脚本', 'kindPython' : 'Python 原始碼', 'kindJava' : 'Java 原始碼', 'kindRuby' : 'Ruby 原始碼', 'kindPerl' : 'Perl 原始碼', 'kindSQL' : 'SQL 原始碼', 'kindXML' : 'XML 文件', 'kindAWK' : 'AWK 原始碼', 'kindCSV' : '逗號分隔值(CSV)', 'kindDOCBOOK' : 'Docbook XML 文件', 'kindMarkdown' : 'Markdown 文本', // added 20.7.2015 // images 'kindImage' : '圖片', 'kindBMP' : 'BMP 圖片', 'kindJPEG' : 'JPEG 圖片', 'kindGIF' : 'GIF 圖片', 'kindPNG' : 'PNG 圖片', 'kindTIFF' : 'TIFF 圖片', 'kindTGA' : 'TGA 圖片', 'kindPSD' : 'Adobe Photoshop 圖片', 'kindXBITMAP' : 'X bitmap 圖片', 'kindPXM' : 'Pixelmator 圖片', // media 'kindAudio' : '音訊', 'kindAudioMPEG' : 'MPEG 音訊', 'kindAudioMPEG4' : 'MPEG-4 音訊', 'kindAudioMIDI' : 'MIDI 音訊', 'kindAudioOGG' : 'Ogg Vorbis 音訊', 'kindAudioWAV' : 'WAV 音訊', 'AudioPlaylist' : 'MP3 播放清單', 'kindVideo' : '影片', 'kindVideoDV' : 'DV 影片', 'kindVideoMPEG' : 'MPEG 影片', 'kindVideoMPEG4' : 'MPEG-4 影片', 'kindVideoAVI' : 'AVI 影片', 'kindVideoMOV' : 'Quick Time 影片', 'kindVideoWM' : 'Windows Media 影片', 'kindVideoFlash' : 'Flash 影片', 'kindVideoMKV' : 'Matroska 影片', 'kindVideoOGG' : 'Ogg 影片' } }; })); application/library/js/i18n/elfinder.cs.js000064400000103007146731177160014456 0ustar00/** * Czech translation * @author RobiNN * @author Jay Gridley * @version 2021-06-10 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.cs = { translator : 'RobiNN <robo@kelcak.com>, Jay Gridley <gridley.jay@hotmail.com>', language : 'Čeština', direction : 'ltr', dateFormat : 'd. m. Y H:i', // will show like: 10. 06. 2021 23:37 fancyDateFormat : '$1 H:i', // will show like: Dnes 23:37 nonameDateFormat : 'ymd-His', // noname upload will show like: 210610-233701 messages : { /********************************** errors **********************************/ 'error' : 'Chyba', 'errUnknown' : 'Neznámá chyba.', 'errUnknownCmd' : 'Neznámý příkaz.', 'errJqui' : 'Nedostačující konfigurace jQuery UI. Musí být zahrnuty komponenty Selectable, Draggable a Droppable.', 'errNode' : 'elFinder vyžaduje vytvořený DOM Elementu.', 'errURL' : 'Chybná konfigurace elFinderu! Není nastavena hodnota URL.', 'errAccess' : 'Přístup zamítnut.', 'errConnect' : 'Nepodařilo se připojit k backendu.', 'errAbort' : 'Připojení zrušeno.', 'errTimeout' : 'Vypšel limit pro připojení.', 'errNotFound' : 'Backend nenalezen.', 'errResponse' : 'Nesprávná odpověď backendu.', 'errConf' : 'Nepsrávná konfigurace backendu.', 'errJSON' : 'PHP modul JSON není nainstalován.', 'errNoVolumes' : 'Není dostupný čitelný oddíl.', 'errCmdParams' : 'Nesprávné parametry příkazu "$1".', 'errDataNotJSON' : 'Data nejsou ve formátu JSON.', 'errDataEmpty' : 'Data jsou prázdná.', 'errCmdReq' : 'Dotaz backendu vyžaduje název příkazu.', 'errOpen' : 'Chyba při otevírání "$1".', 'errNotFolder' : 'Objekt není složka.', 'errNotFile' : 'Objekt není soubor.', 'errRead' : 'Chyba při čtení "$1".', 'errWrite' : 'Chyba při zápisu do "$1".', 'errPerm' : 'Přístup odepřen.', 'errLocked' : '"$1" je uzamčený a nemůže být přejmenován, přesunut nebo smazán.', 'errExists' : 'Soubor s názvem "$1" již existuje.', 'errInvName' : 'Nesprávný název souboru.', 'errInvDirname' : 'Neplatný název adresáře.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Složka nenalezena.', 'errFileNotFound' : 'Soubor nenalezen.', 'errTrgFolderNotFound' : 'Cílová složka "$1" nenalezena.', 'errPopup' : 'Prohlížeč zabránil otevření vyskakovacího okna. K otevření souboru, povolte vyskakovací okno v prohlížeči.', 'errMkdir' : 'Nepodařilo se vytvořit složku "$1".', 'errMkfile' : 'Nepodařilo se vytvořit soubor "$1".', 'errRename' : 'Nepodařilo se přejmenovat "$1".', 'errCopyFrom' : 'Kopírování souborů z oddílu "$1" není povoleno.', 'errCopyTo' : 'Kopírování souborů do oddílu "$1" není povoleno.', 'errMkOutLink' : 'Nelze vytvořit odkaz mimo kořenového svazku.', // from v2.1 added 03.10.2015 'errUpload' : 'Chyba nahrávání.', // old name - errUploadCommon 'errUploadFile' : 'Nepodařilo se nahrát "$1".', // old name - errUpload 'errUploadNoFiles' : 'Nejsou vybrány žádné soubory k nahrání.', 'errUploadTotalSize' : 'Překročena maximální povolená velikost dat.', // old name - errMaxSize 'errUploadFileSize' : 'Překročena maximální povolená velikost souboru.', // old name - errFileMaxSize 'errUploadMime' : 'Nepovolený typ souboru.', 'errUploadTransfer' : '"$1" chyba přenosu.', 'errUploadTemp' : 'Nelze vytvořit dočasný soubor pro upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objekt "$1" v tomto umístění již existuje a nelze jej nahradit s jiným typem objektu.', // new 'errReplace' : 'Nelze nahradit "$1".', 'errSave' : '"$1" nelze uložit.', 'errCopy' : '"$1" nelze zkopírovat.', 'errMove' : '"$1" nelze přemístit.', 'errCopyInItself' : '"$1" nelze zkopírovat do sebe sama.', 'errRm' : '"$1" nelze odstranit.', 'errTrash' : 'Nelze se dostat do koše.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Nelze odstranit zdrojový soubor(y).', 'errExtract' : 'Nelze extrahovat soubory z "$1".', 'errArchive' : 'Nelze vytvořit archív.', 'errArcType' : 'Nepodporovaný typ archívu.', 'errNoArchive' : 'Soubor není archív nebo má nepodporovaný formát.', 'errCmdNoSupport' : 'Backend tento příkaz nepodporuje.', 'errReplByChild' : 'Složka "$1" nemůže být nahrazena souborem, který sama obsahuje.', 'errArcSymlinks' : 'Z bezpečnostních důvodů je zakázáno rozbalit archívy obsahující symlinky.', // edited 24.06.2012 'errArcMaxSize' : 'Soubory archívu překračují maximální povolenou velikost.', 'errResize' : 'Nepodařilo se změnit velikost obrázku "$1".', 'errResizeDegree' : 'Neplatný stupeň rotace.', // added 7.3.2013 'errResizeRotate' : 'Nelze otočit obrázek.', // added 7.3.2013 'errResizeSize' : 'Neplatná velikost obrázku.', // added 7.3.2013 'errResizeNoChange' : 'Velikost obrazu se nezmění.', // added 7.3.2013 'errUsupportType' : 'Nepodporovaný typ souboru.', 'errNotUTF8Content' : 'Soubor "$1" nemá ani obsah kódovaný v UTF-8 a nelze změnit.', // added 9.11.2011 'errNetMount' : 'Není možné se připojit "$ 1".', // added 17.04.2012 'errNetMountNoDriver' : 'Nepodporovaný protokol.', // added 17.04.2012 'errNetMountFailed' : 'Připojení se nezdařilo.', // added 17.04.2012 'errNetMountHostReq' : 'Hostitel se vyžaduje.', // added 18.04.2012 'errSessionExpires' : 'Relace byla ukončena z důvodu nečinnosti.', 'errCreatingTempDir' : 'Nelze vytvořit dočasný adresář: "$1"', 'errFtpDownloadFile' : 'Nelze stáhnout soubor z FTP: "$1"', 'errFtpUploadFile' : 'Nelze nahrát soubor na FTP: "$1"', 'errFtpMkdir' : 'Nepodařilo se vytvořit vzdálený adresář na FTP: "$1"', 'errArchiveExec' : 'Při archivaci do souboru došlo k chybě: "$1"', 'errExtractExec' : 'Chyba při extrahování souboru: "$1"', 'errNetUnMount' : 'Nepodařilo se odpojit', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nelze převést na UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Chcete-li nahrát složku, zkuste moderní prohlížeč.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Vypršení časového limitu při hledání "$1". Je částečně výsledkem hledání.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Opětovné povolení je nutné.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maximální počet volitelných předmětů je $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Nelze obnovit z koše. Nelze identifikovat cíl obnovení.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor tohoto typu souboru nebyl nalezen.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Došlo k chybě na straně serveru.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Nelze vyprázdnit složku "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Existují ještě další $1 chyby.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Můžete vytvořit až $1 složek najednou.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Vytvořit archív', 'cmdback' : 'Zpět', 'cmdcopy' : 'Kopírovat', 'cmdcut' : 'Vyjmout', 'cmddownload' : 'Stáhnout', 'cmdduplicate' : 'Duplikovat', 'cmdedit' : 'Upravit soubor', 'cmdextract' : 'Rozbalit archív', 'cmdforward' : 'Vpřed', 'cmdgetfile' : 'Vybrat soubory', 'cmdhelp' : 'O softwaru', 'cmdhome' : 'Domů', 'cmdinfo' : 'Zobrazit informace', 'cmdmkdir' : 'Nová složka', 'cmdmkdirin' : 'Do nové složky', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nový soubor', 'cmdopen' : 'Otevřít', 'cmdpaste' : 'Vložit', 'cmdquicklook' : 'Náhled', 'cmdreload' : 'Obnovit', 'cmdrename' : 'Přejmenovat', 'cmdrm' : 'Smazat', 'cmdtrash' : 'Do koše', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Obnovit', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Najít soubory', 'cmdup' : 'Přejít do nadřazené složky', 'cmdupload' : 'Nahrát soubor(y)', 'cmdview' : 'Zobrazit', 'cmdresize' : 'Změnit velikost', 'cmdsort' : 'Seřadit', 'cmdnetmount' : 'Připojit síťovou jednotku', // added 18.04.2012 'cmdnetunmount': 'Odpojit', // from v2.1 added 30.04.2012 'cmdplaces' : 'Umístění', // added 28.12.2014 'cmdchmod' : 'Změnit režim', // from v2.1 added 20.6.2015 'cmdopendir' : 'Otevření složky', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Obnovení šířku sloupce', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Celá obrazovka', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Posouvat', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vyprázdnit složku', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Krok zpět', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Udělat to znovu', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preference', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Vyberat vše', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Nic nevyberať', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invertovat výběr', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Otevři v novém okně', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Skrýt (Předvolba)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Zavřít', 'btnSave' : 'Uložit', 'btnRm' : 'Odstranit', 'btnApply' : 'Použít', 'btnCancel' : 'Zrušit', 'btnNo' : 'Ne', 'btnYes' : 'Ano', 'btnMount' : 'Připojit', // added 18.04.2012 'btnApprove': 'Přejít do části 1 $ & schválit', // from v2.1 added 26.04.2012 'btnUnmount': 'Odpojit', // from v2.1 added 30.04.2012 'btnConv' : 'Převést', // from v2.1 added 08.04.2014 'btnCwd' : 'Tu', // from v2.1 added 22.5.2015 'btnVolume' : 'Médium', // from v2.1 added 22.5.2015 'btnAll' : 'Všechno', // from v2.1 added 22.5.2015 'btnMime' : 'MIME typ', // from v2.1 added 22.5.2015 'btnFileName':'Název souboru', // from v2.1 added 22.5.2015 'btnSaveClose': 'Uložit & zavřít', // from v2.1 added 12.6.2015 'btnBackup' : 'Zálohovat', // fromv2.1 added 28.11.2015 'btnRename' : 'Přejmenovat', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Přejmenovat vše', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Předch ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Další ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Uložit jako', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Otevírání složky', 'ntffile' : 'Otevírání souboru', 'ntfreload' : 'Obnovování obsahu složky', 'ntfmkdir' : 'Vytváření složky', 'ntfmkfile' : 'Vytváření souborů', 'ntfrm' : 'Vymazání položek', 'ntfcopy' : 'Kopírování položek', 'ntfmove' : 'Přemístění položek', 'ntfprepare' : 'Kontrola existujících položek', 'ntfrename' : 'Přejmenovávání souborů', 'ntfupload' : 'Nahrávání souborů', 'ntfdownload' : 'Stahování souborů', 'ntfsave' : 'Ukládání souborů', 'ntfarchive' : 'Vytváření archívu', 'ntfextract' : 'Rozbalování souborů z archívu', 'ntfsearch' : 'Vyhledávání souborů', 'ntfresize' : 'Změna velikosti obrázků', 'ntfsmth' : 'Čekejte prosím...', 'ntfloadimg' : 'Načítání obrázků', 'ntfnetmount' : 'Připojení síťového média', // added 18.04.2012 'ntfnetunmount': 'Odpojení síťového média', // from v2.1 added 30.04.2012 'ntfdim' : 'Získejte rozměr obrazu', // added 20.05.2013 'ntfreaddir' : 'Přečtěte si informace o složce', // from v2.1 added 01.07.2013 'ntfurl' : 'Získejte adresu URL odkazu', // from v2.1 added 11.03.2014 'ntfchmod' : 'Změna souboru', // from v2.1 added 20.6.2015 'ntfpreupload': 'Zkontrolujte název nahravaného souboru', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Vytvořit soubor ke stažení', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Získání informací o cestě', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Zpracování nahraného souboru', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Hodit do koše', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Obnova z koše', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Kontrola cílové složky', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Zrušit předchozí operaci', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Obnovit předchozí zrušení', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Kontrola obsahu', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Koš', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'neznámý', 'Today' : 'Dnes', 'Yesterday' : 'Včera', 'msJan' : 'Led', 'msFeb' : 'Úno', 'msMar' : 'Bře', 'msApr' : 'Dub', 'msMay' : 'Kvě', 'msJun' : 'Čer', 'msJul' : 'Čec', 'msAug' : 'Srp', 'msSep' : 'Zář', 'msOct' : 'Říj', 'msNov' : 'Lis', 'msDec' : 'Pro', 'January' : 'Leden', 'February' : 'Únor', 'March' : 'Březen', 'April' : 'Duben', 'May' : 'Květen', 'June' : 'Červen', 'July' : 'Červenec', 'August' : 'Srpen', 'September' : 'Září', 'October' : 'Říjen', 'November' : 'Listopad', 'December' : 'Prosinec', 'Sunday' : 'Neděle', 'Monday' : 'Pondělí', 'Tuesday' : 'Úterý', 'Wednesday' : 'Středa', 'Thursday' : 'Čtvrtek', 'Friday' : 'Pátek', 'Saturday' : 'Sobota', 'Sun' : 'Ne', 'Mon' : 'Po', 'Tue' : 'Út', 'Wed' : 'St', 'Thu' : 'Čt', 'Fri' : 'Pá', 'Sat' : 'So', /******************************** sort variants ********************************/ 'sortname' : 'dle jména', 'sortkind' : 'dle typu', 'sortsize' : 'dle velikosti', 'sortdate' : 'dle data', 'sortFoldersFirst' : 'Napřed složky', 'sortperm' : 'dle povolení', // from v2.1.13 added 13.06.2016 'sortmode' : 'dle módu', // from v2.1.13 added 13.06.2016 'sortowner' : 'dle majitele', // from v2.1.13 added 13.06.2016 'sortgroup' : 'dle skupiny', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Také stromové zobrazení', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Nový soubor.txt', // added 10.11.2015 'untitled folder' : 'Nová složka', // added 10.11.2015 'Archive' : 'Nový archiv', // from v2.1 added 10.11.2015 'untitled file' : 'Nový soubor.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1 soubor', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Požadováno potvrzení', 'confirmRm' : 'Opravdu chcete odstranit tyto soubory?
    Operace nelze vrátit!', 'confirmRepl' : 'Nahradit staré soubory novými?', 'confirmRest' : 'Nahradit stávající položku položkou z koše?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Není v UTF-8, převést do UTF-8?
    Obsah po převodu se stává UTF-8.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Kódování tohoto souboru nemoholo rozpoznán. Pro úpravy je třeba dočasně převést do kódování UTF-8.
    Prosím, vyberte kódování znaků souboru.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Byl změněn.
    Pokud obsahuje neuložené změny, dojde ke ztrátě práce.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Opravdu chcete položky přesunout do koše?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Opravdu chcete položky přesunout do "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Pro všechny', 'name' : 'Název', 'size' : 'Velikost', 'perms' : 'Práva', 'modify' : 'Upravený', 'kind' : 'Typ', 'read' : 'čtení', 'write' : 'zápis', 'noaccess' : 'přístup odepřen', 'and' : 'a', 'unknown' : 'neznámý', 'selectall' : 'Vybrat všechny položky', 'selectfiles' : 'Vybrat položku(y)', 'selectffile' : 'Vybrat první položku', 'selectlfile' : 'Vybrat poslední položku', 'viewlist' : 'Seznam', 'viewicons' : 'Ikony', 'viewSmall' : 'Malé ikony', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Střední ikony', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Velké ikony', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra velké ikony', // from v2.1.39 added 22.5.2018 'places' : 'Místa', 'calc' : 'Vypočítat', 'path' : 'Cesta', 'aliasfor' : 'Zástupce pro', 'locked' : 'Uzamčený', 'dim' : 'Rozměry', 'files' : 'Soubory', 'folders' : 'Složky', 'items' : 'Položky', 'yes' : 'ano', 'no' : 'ne', 'link' : 'Odkaz', 'searcresult' : 'Výsledky hledání', 'selected' : 'vybrané položky', 'about' : 'O softwaru', 'shortcuts' : 'Zkratky', 'help' : 'Nápověda', 'webfm' : 'Webový správce souborů', 'ver' : 'Verze', 'protocolver' : 'verze protokolu', 'homepage' : 'Domovská stránka projektu', 'docs' : 'Dokumentace', 'github' : 'Najdete nás na Gitgube', 'twitter' : 'Následujte nás na Twitteri', 'facebook' : 'Připojte se k nám na Facebooku', 'team' : 'Tým', 'chiefdev' : 'séf vývojářů', 'developer' : 'vývojár', 'contributor' : 'spolupracovník', 'maintainer' : 'údržba', 'translator' : 'překlad', 'icons' : 'Ikony', 'dontforget' : 'a nezapomeňte si vzít plavky', 'shortcutsof' : 'Zkratky nejsou povoleny', 'dropFiles' : 'Sem přetáhněte soubory', 'or' : 'nebo', 'selectForUpload' : 'Vyberte soubory', 'moveFiles' : 'Přesunout sobory', 'copyFiles' : 'Zkopírovat soubory', 'restoreFiles' : 'Obnovit položky', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Odstranit z míst', 'aspectRatio' : 'Poměr stran', 'scale' : 'Měřítko', 'width' : 'Šířka', 'height' : 'Výška', 'resize' : 'Změnit vel.', 'crop' : 'Ořezat', 'rotate' : 'Otočit', 'rotate-cw' : 'Otočit o +90 stupňů', 'rotate-ccw' : 'Otočit o -90 stupňů', 'degree' : ' stupňů', 'netMountDialogTitle' : 'Připojení síťového média', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Uživatel', // added 18.04.2012 'pass' : 'Heslo', // added 18.04.2012 'confirmUnmount' : 'Chcete odpojit $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Přemístěte nebo přesuňte soubory z prohlížeče', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Zde přemístěte nebo přesuňte soubory a adresy URL', // from v2.1 added 07.04.2014 'encoding' : 'Kódování', // from v2.1 added 19.12.2014 'locale' : 'Lokalizce', // from v2.1 added 19.12.2014 'searchTarget' : 'Cíl: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Vyhledávání podle vstupního MIME typu', // from v2.1 added 22.5.2015 'owner' : 'Majitel', // from v2.1 added 20.6.2015 'group' : 'Skupina', // from v2.1 added 20.6.2015 'other' : 'Ostatní', // from v2.1 added 20.6.2015 'execute' : 'Spustit', // from v2.1 added 20.6.2015 'perm' : 'Povolení', // from v2.1 added 20.6.2015 'mode' : 'Režim', // from v2.1 added 20.6.2015 'emptyFolder' : 'Složka je prázdná', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Složka je prázdná, přesunout nebo zkontrolovat položky', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Složka je prázdná, dlouhim kliknutím přidáte položky', // from v2.1.6 added 30.12.2015 'quality' : 'Kvalita', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatická synchronizace', // from v2.1.6 added 10.1.2016 'moveUp' : 'Přesunout nahoru', // from v2.1.6 added 18.1.2016 'getLink' : 'Získat URL odkaz', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Vybrané položky ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID složky', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Povolit přístup offline', // from v2.1.10 added 3.25.2016 'reAuth' : 'Znovu ověřit', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Načítání...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Otevření více souborů', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Pokoušíte se otevřít soubor $1. Chcete jej otevřít v prohlížeči?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Výsledky hledání jsou prázdné', // from v2.1.12 added 5.16.2016 'editingFile' : 'Upravujete soubor.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Vybrali jste $1 položky.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Máte $1 položky v schránce.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementální hledání je pouze z aktuálního zobrazení.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Obnovit', // from v2.1.15 added 3.8.2016 'complete' : '$1 kompletní', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontextové menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Otáčení stránky', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Kořeny média', // from v2.1.16 added 16.9.2016 'reset' : 'Obnovit', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Barva pozadí', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Výběr barvy', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px mřížka', // from v2.1.16 added 4.10.2016 'enabled' : 'Povoleno', // from v2.1.16 added 4.10.2016 'disabled' : 'Zakázáno', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Výsledky hledání jsou prázdné v aktuálním zobrazení.\\Stisknutím tlačítka [Enter] rozšíříte vyhledávání cíle.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Výsledky vyhledávání prvního listu jsou v aktuálním zobrazení prázdné.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Nápis textu', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minut zůstává', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Otevřít pomocí zvoleného kódování', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Uložit s vybraným kódováním', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Vyberte složku', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Hledání prvního listu', // from v2.1.23 added 24.3.2017 'presets' : 'Předvolby', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Je to příliš mnoho položek, takže se nemohou dostat do koše.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Textarea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vyprázdnit složku "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Ve složce "$1" nejsou žádné položky.', // from v2.1.25 added 22.6.2017 'preference' : 'Předvolby', // from v2.1.26 added 28.6.2017 'language' : 'Nastavte jazyk', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicializujte nastavení uložená v tomto prohlížeči', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Nastavení panelu nástrojů', // from v2.1.27 added 2.8.2017 'charsLeft' : '...$1 znaků zbývá.', // from v2.1.29 added 30.8.2017 'linesLeft' : '...$1 řádků zůstává.', // from v2.1.52 added 16.1.2020 'sum' : 'Součet', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Hrubá velikost souboru', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Zaměření na prvek dialogu s mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Vybrat', // from v2.1.30 added 23.11.2017 'selectAction' : 'Akce při vybraném souboru', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Otevřít pomocí naposledy použitého editoru', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Obrátit výběr položek', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Opravdu chcete přejmenovat $1 vybraných položek, jako například $2
    Není to možné vrátit zpět!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch přejmenování', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Číslo', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Přidat předponu', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Přidat příponu', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Změnit příponu', // from v2.1.31 added 8.12.2017 'columnPref' : 'Nastavení sloupců (Zobrazení seznamu)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Všechny změny se okamžitě projeví v archivu.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Jakékoliv změny se nebudou odrážet, dokud nebude tento svazek odpojen.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Následující svazky namontované na tomto svazku jsou také odpojeny. Opravdu ji odpojíte?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informace o výběru', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmy pro zobrazení hashování souborů', // from v2.1.33 added 10.3.2018 'infoItems' : 'Informační položky (panel s informacemi o výběru)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Dalším stisknutím opustíte.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Panel nástrojů', // from v2.1.38 added 4.4.2018 'workspace' : 'Pracovní prostor', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Všechno', // from v2.1.38 added 4.4.2018 'iconSize' : 'Velikost ikony (zobrazení ikon)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Otevřete maximalizované okno editora', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Protože konverze podle API momentálně není k dispozici, převeďte na webové stránce.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Po konverzi musíte nahrát převeden soubor pomocí URL položky nebo stažený soubor k uložení převedeného souboru.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Převést na stránce $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrace', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Tento elFinder má integrované následující externí služby. Před použitím zkontrolujte podmínky používání, zásady ochrany osobních údajů atd.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Zobrazit skryté položky', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Skrýt skryté položky', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Zobrazit/skrýt skryté položky', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Typy souborů, jež mají být povoleny pomocí "Nový soubor"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Typ textového souboru', // from v2.1.41 added 7.8.2018 'add' : 'Přidat', // from v2.1.41 added 7.8.2018 'theme' : 'Téma', // from v2.1.43 added 19.10.2018 'default' : 'Výchozí', // from v2.1.43 added 19.10.2018 'description' : 'Popis', // from v2.1.43 added 19.10.2018 'website' : 'Stránka', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licence', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Tuto položku nelze uložit. Abyste se vyhnuli ztrátě úprav, musíte je exportovat do počítače.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Poklepáním na soubor jej vyberte.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Použít režim celé obrazovky', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Neznámý', 'kindRoot' : 'Kořen média', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Složka', 'kindSelects' : 'Výběry', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Zlomený alias', // applications 'kindApp' : 'Aplikace', 'kindPostscript' : 'Dokument Postscriptu', 'kindMsOffice' : 'Dokument Microsoft Office', 'kindMsWord' : 'Dokument Microsoft Word', 'kindMsExcel' : 'Dokument Microsoft Excel', 'kindMsPP' : 'Prezentace Microsoft Powerpoint', 'kindOO' : 'Otevřít dokument Office', 'kindAppFlash' : 'Flash aplikace', 'kindPDF' : 'PDF', 'kindTorrent' : 'Soubor BitTorrent', 'kind7z' : 'Archív 7z', 'kindTAR' : 'Archív TAR', 'kindGZIP' : 'Archív GZIP', 'kindBZIP' : 'Archív BZIP', 'kindXZ' : 'Archív XZ', 'kindZIP' : 'Archív ZIP', 'kindRAR' : 'Archív RAR', 'kindJAR' : 'Soubor Java JAR', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM balíček', // texts 'kindText' : 'Textový dokument', 'kindTextPlain' : 'Čistý text', 'kindPHP' : 'PHP zdrojový kód', 'kindCSS' : 'Kaskádové styly', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript zdrojový kód', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C zdrojový kód', 'kindCHeader' : 'C hlavička', 'kindCPP' : 'C++ zdrojový kód', 'kindCPPHeader' : 'C++ hlavička', 'kindShell' : 'Unix shell skript', 'kindPython' : 'Python zdrojový kód', 'kindJava' : 'Java zdrojový kód', 'kindRuby' : 'Ruby zdrojový kód', 'kindPerl' : 'Perl skript', 'kindSQL' : 'SQL zdrojový kód', 'kindXML' : 'Dokument XML', 'kindAWK' : 'AWK zdrojový kód', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Docbook XML dokument', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Obrázek', 'kindBMP' : 'Obrázek BMP', 'kindJPEG' : 'Obrázek JPEG', 'kindGIF' : 'Obrázek GIF', 'kindPNG' : 'Obrázek PNG', 'kindTIFF' : 'Obrázek TIFF', 'kindTGA' : 'Obrázek TGA', 'kindPSD' : 'Obrázek Adobe Photoshop', 'kindXBITMAP' : 'Obrázek X bitmapa', 'kindPXM' : 'Obrázek Pixelmator', // media 'kindAudio' : 'Audio sobory', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video sobory', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); application/library/js/i18n/elfinder.hu.js000064400000102371146731177160014470 0ustar00/** * Hungarian translation * @author Gáspár Lajos * @author karrak1 * @version 2020-11-27 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.hu = { translator : 'Gáspár Lajos <info@glsys.eu>, karrak1', language : 'Hungarian', direction : 'ltr', dateFormat : 'Y.F.d H:i:s', // will show like: 2020.November.27 20:52:18 fancyDateFormat : '$1 H:i', // will show like: Ma 20:52 nonameDateFormat : 'ymd-His', // noname upload will show like: 201127-205218 messages : { /********************************** errors **********************************/ 'error' : 'Hiba', 'errUnknown' : 'Ismeretlen hiba.', 'errUnknownCmd' : 'Ismeretlen parancs.', 'errJqui' : 'Hibás jQuery UI konfiguráció. A "selectable", "draggable" és a "droppable" komponensek szükségesek.', 'errNode' : 'Az elFinder "DOM" elem létrehozását igényli.', 'errURL' : 'Hibás elFinder konfiguráció! "URL" paraméter nincs megadva.', 'errAccess' : 'Hozzáférés megtagadva.', 'errConnect' : 'Nem sikerült csatlakozni a kiszolgálóhoz.', 'errAbort' : 'Kapcsolat megszakítva.', 'errTimeout' : 'Kapcsolat időtúllépés.', 'errNotFound' : 'A backend nem elérhető.', 'errResponse' : 'Hibás backend válasz.', 'errConf' : 'Hibás backend konfiguráció.', 'errJSON' : 'PHP JSON modul nincs telepítve.', 'errNoVolumes' : 'Nem állnak rendelkezésre olvasható kötetek.', 'errCmdParams' : 'érvénytelen paraméterek a parancsban. ("$1")', 'errDataNotJSON' : 'A válasz nem JSON típusú adat.', 'errDataEmpty' : 'Nem érkezett adat.', 'errCmdReq' : 'A backend kérelem parancsnevet igényel.', 'errOpen' : '"$1" megnyitása nem sikerült.', 'errNotFolder' : 'Az objektum nem egy mappa.', 'errNotFile' : 'Az objektum nem egy fájl.', 'errRead' : '"$1" olvasása nem sikerült.', 'errWrite' : '"$1" írása nem sikerült.', 'errPerm' : 'Engedély megtagadva.', 'errLocked' : '"$1" zárolás alatt van, és nem lehet átnevezni, mozgatni vagy eltávolítani.', 'errExists' : '"$1" nevű fájl már létezik.', 'errInvName' : 'Érvénytelen fáljnév.', 'errInvDirname' : 'Invalid folder name.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Mappa nem található.', 'errFileNotFound' : 'Fájl nem található.', 'errTrgFolderNotFound' : 'Cél mappa nem található. ("$1")', 'errPopup' : 'A böngésző megakadályozta egy felugró ablak megnyitását. A fájl megnyitását tegye lehetővé a böngésző beállitásaiban.', 'errMkdir' : '"$1" mappa létrehozása sikertelen.', 'errMkfile' : '"$1" fájl létrehozása sikertelen.', 'errRename' : '"$1" átnevezése sikertelen.', 'errCopyFrom' : 'Fájlok másolása a kötetről nem megengedett. ("$1")', 'errCopyTo' : 'Fájlok másolása a kötetre nem megengedett. ("$1")', 'errMkOutLink' : 'Hivatkozás létrehozása a root köteten kívül nem megengedett.', // from v2.1 added 03.10.2015 'errUpload' : 'Feltöltési hiba.', // old name - errUploadCommon 'errUploadFile' : 'Nem sikerült a fájlt feltölteni. ($1)', // old name - errUpload 'errUploadNoFiles' : 'Nem található fájl feltöltéshez.', 'errUploadTotalSize' : 'Az adat meghaladja a maximálisan megengedett méretet.', // old name - errMaxSize 'errUploadFileSize' : 'A fájl meghaladja a maximálisan megengedett méretet.', // old name - errFileMaxSize 'errUploadMime' : 'A fájltípus nem engedélyezett.', 'errUploadTransfer' : '"$1" transzfer hiba.', 'errUploadTemp' : 'Sikertelen az ideiglenes fájl léterhezozása feltöltéshez.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Az objektum "$1" már létezik ezen a helyen, és nem lehet cserélni másik típusra', // new 'errReplace' : '"$1" nem cserélhető.', 'errSave' : '"$1" mentése nem sikerült.', 'errCopy' : '"$1" másolása nem sikerült.', 'errMove' : '"$1" áthelyezése nem sikerült.', 'errCopyInItself' : '"$1" nem másolható saját magára.', 'errRm' : '"$1" törlése nem sikerült.', 'errTrash' : 'Unable into trash.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Forrásfájl(ok) eltávolítása sikertelen.', 'errExtract' : 'Nem sikerült kikibontani a "$1" fájlokat.', 'errArchive' : 'Nem sikerült létrehozni az archívumot.', 'errArcType' : 'Nem támogatott archívum típus.', 'errNoArchive' : 'A fájl nem archív, vagy nem támogatott archívumtípust tartalmaz.', 'errCmdNoSupport' : 'A backend nem támogatja ezt a parancsot.', 'errReplByChild' : 'Az „$1” mappát nem lehet helyettesíteni egy abban található elemmel.', 'errArcSymlinks' : 'Biztonsági okokból az archívumok kicsomagolásának megtagadása szimbolikus linkeket vagy fájlokat tartalmaz, amelyek nem engedélyezettek.', // edited 24.06.2012 'errArcMaxSize' : 'Az archív fájlok meghaladják a megengedett legnagyobb méretet.', 'errResize' : 'Nem lehet átméretezni a (z) "$1".', 'errResizeDegree' : 'Érvénytelen forgatási fok.', // added 7.3.2013 'errResizeRotate' : 'Nem lehet elforgatni a képet.', // added 7.3.2013 'errResizeSize' : 'Érvénytelen képméret.', // added 7.3.2013 'errResizeNoChange' : 'A kép mérete nem változott.', // added 7.3.2013 'errUsupportType' : 'Nem támogatott fájl típus', 'errNotUTF8Content' : 'Az "$1" fájl nincs az UTF-8-ban, és nem szerkeszthető.', // added 9.11.2011 'errNetMount' : 'Nem lehet beilleszteni a(z) "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Nem támogatott protokoll.', // added 17.04.2012 'errNetMountFailed' : 'A csatlakozás nem sikerült.', // added 17.04.2012 'errNetMountHostReq' : 'Host szükséges.', // added 18.04.2012 'errSessionExpires' : 'A session inaktivitás miatt lejárt.', 'errCreatingTempDir' : 'Nem lehet ideiglenes könyvtárat létrehozni: "$1"', 'errFtpDownloadFile' : 'Nem lehet letölteni a fájlt az FTP-ről: "$1"', 'errFtpUploadFile' : 'Nem lehet feltölteni a fájlt az FTP-re: "$1"', 'errFtpMkdir' : 'Nem sikerült távoli könyvtárat létrehozni az FTP-n: "$1"', 'errArchiveExec' : 'Hiba a fájlok archiválásakor: "$1"', 'errExtractExec' : 'Hiba a fájlok kibontásakor: "$1"', 'errNetUnMount' : 'Nem lehet leválasztani', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nem konvertálható UTF-8-ra', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Próbálja ki a Google Chrome-ot, ha szeretné feltölteni a mappát.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Dőtúllépés a(z) "$1" keresése közben. A keresési eredmény részleges.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Új engedélyre van szükség.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Max number of selectable items is $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Unable to restore from the trash. Can\'t identify the restore destination.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor not found to this file type.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Error occurred on the server side.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Unable to empty folder "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'There are $1 more errors.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Archívum létrehozása', 'cmdback' : 'Vissza', 'cmdcopy' : 'Másolás', 'cmdcut' : 'Kivágás', 'cmddownload' : 'Letöltés', 'cmdduplicate' : 'Másolat készítés', 'cmdedit' : 'Szerkesztés', 'cmdextract' : 'Kibontás', 'cmdforward' : 'Előre', 'cmdgetfile' : 'Fájlok kijelölése', 'cmdhelp' : 'Erről a programról...', 'cmdhome' : 'Főkönyvtár', 'cmdinfo' : 'Tulajdonságok', 'cmdmkdir' : 'Új mappa', 'cmdmkdirin' : 'Új mappába', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Új fájl', 'cmdopen' : 'Megnyitás', 'cmdpaste' : 'Beillesztés', 'cmdquicklook' : 'Előnézet', 'cmdreload' : 'Frissítés', 'cmdrename' : 'Átnevezés', 'cmdrm' : 'Törlés', 'cmdtrash' : 'Into trash', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restore', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Keresés', 'cmdup' : 'Ugrás a szülőmappába', 'cmdupload' : 'Feltöltés', 'cmdview' : 'Nézet', 'cmdresize' : 'Átméretezés és forgatás', 'cmdsort' : 'Rendezés', 'cmdnetmount' : 'Csatlakoztassa a hálózat hangerejét', // added 18.04.2012 'cmdnetunmount': 'Leválaszt', // from v2.1 added 30.04.2012 'cmdplaces' : 'Helyekhez', // added 28.12.2014 'cmdchmod' : 'Módváltás', // from v2.1 added 20.6.2015 'cmdopendir' : 'Mappa megnyitása', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Állítsa vissza az oszlop szélességét', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Full Screen', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Move', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Empty the folder', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Undo', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Redo', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Select all', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Select none', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invert selection', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Open in new window', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Hide (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Bezár', 'btnSave' : 'Ment', 'btnRm' : 'Töröl', 'btnApply' : 'Alkalmaz', 'btnCancel' : 'Mégsem', 'btnNo' : 'Nem', 'btnYes' : 'Igen', 'btnMount' : 'Csatlakoztat', // added 18.04.2012 'btnApprove': 'Tovább $1 és jóváhagyás', // from v2.1 added 26.04.2012 'btnUnmount': 'Leválaszt', // from v2.1 added 30.04.2012 'btnConv' : 'Átalakít', // from v2.1 added 08.04.2014 'btnCwd' : 'Itt', // from v2.1 added 22.5.2015 'btnVolume' : 'Hangerő', // from v2.1 added 22.5.2015 'btnAll' : 'Összes', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Tipus', // from v2.1 added 22.5.2015 'btnFileName':'Fájl név', // from v2.1 added 22.5.2015 'btnSaveClose': 'Mentés és Kilépés', // from v2.1 added 12.6.2015 'btnBackup' : 'Biztonsági mentés', // fromv2.1 added 28.11.2015 'btnRename' : 'Rename', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Rename(All)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Prev ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Next ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Save As', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Mappa megnyitás', 'ntffile' : 'Fájl megnyitás', 'ntfreload' : 'A mappa tartalmának újratöltése', 'ntfmkdir' : 'Mappa létrehozása', 'ntfmkfile' : 'Fájlok létrehozása', 'ntfrm' : 'Fájlok törélse', 'ntfcopy' : 'Fájlok másolása', 'ntfmove' : 'Fájlok áthelyezése', 'ntfprepare' : 'Checking existing items', 'ntfrename' : 'Fájlok átnevezése', 'ntfupload' : 'Fájlok feltöltése', 'ntfdownload' : 'Fájlok letöltése', 'ntfsave' : 'Fájlok mentése', 'ntfarchive' : 'Archívum létrehozása', 'ntfextract' : 'Kibontás archívumból', 'ntfsearch' : 'Fájlok keresése', 'ntfresize' : 'Képek átméretezése', 'ntfsmth' : 'Csinál valamit >_<', 'ntfloadimg' : 'Kép betöltése', 'ntfnetmount' : 'Hálózati meghajtó hozzáadása', // added 18.04.2012 'ntfnetunmount': 'Hálózati meghajtó leválasztása', // from v2.1 added 30.04.2012 'ntfdim' : 'Képméret megállapítása', // added 20.05.2013 'ntfreaddir' : 'A mappa adatainak olvasása', // from v2.1 added 01.07.2013 'ntfurl' : 'A link URL-jének lekérdezése', // from v2.1 added 11.03.2014 'ntfchmod' : 'A fájlmód megváltoztatása', // from v2.1 added 20.6.2015 'ntfpreupload': 'A feltöltött fájlnév ellenőrzése', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Fájl létrehozása letöltésre', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Getting path infomation', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processing the uploaded file', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Doing throw in the trash', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Doing restore from the trash', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Checking destination folder', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Undoing previous operation', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Redoing previous undone', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Checking contents', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Trash', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Ismeretlen', 'Today' : 'Ma', 'Yesterday' : 'Tegnap', 'msJan' : 'jan', 'msFeb' : 'febr', 'msMar' : 'márc', 'msApr' : 'ápr', 'msMay' : 'máj', 'msJun' : 'jún', 'msJul' : 'júl', 'msAug' : 'aug', 'msSep' : 'szept', 'msOct' : 'okt', 'msNov' : 'nov', 'msDec' : 'dec', 'January' : 'Január', 'February' : 'Február', 'March' : 'Március', 'April' : 'Április', 'May' : 'Május', 'June' : 'Június', 'July' : 'Július', 'August' : 'Augusztus', 'September' : 'Szeptember', 'October' : 'Október', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Vasárnap', 'Monday' : 'Hétfő', 'Tuesday' : 'Kedd', 'Wednesday' : 'Szerda', 'Thursday' : 'Csütörtök', 'Friday' : 'Péntek', 'Saturday' : 'Szombat', 'Sun' : 'V', 'Mon' : 'H', 'Tue' : 'K', 'Wed' : 'Sz', 'Thu' : 'Cs', 'Fri' : 'P', 'Sat' : 'Szo', /******************************** sort variants ********************************/ 'sortname' : 'név szerint', 'sortkind' : 'by kind', 'sortsize' : 'méret szerint', 'sortdate' : 'dátum szerint', 'sortFoldersFirst' : 'Először a mappák', 'sortperm' : 'engedély alapján', // from v2.1.13 added 13.06.2016 'sortmode' : 'mód szerint', // from v2.1.13 added 13.06.2016 'sortowner' : 'tulajdonos alapján', // from v2.1.13 added 13.06.2016 'sortgroup' : 'csoportok szerint', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Also Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'NewFolder', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Megerősítés szükséges', 'confirmRm' : 'Valóban törölni akarja a kijelölt adatokat?
    Ez később nem fordítható vissza!', 'confirmRepl' : 'Replace old file with new one? (If it contains folders, it will be merged. To backup and replace, select Backup.)', 'confirmRest' : 'Replace existing item with the item in trash?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nem UTF-8.
    Átalakítsam UTF-8-ra?
    A tartalom mentés után UTF-8 lesz..', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.
    Please select character encoding of this file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Megváltozott.
    Módosítások elvesznek, ha nem menti el azokat.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Are you sure you want to move items to trash bin?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Are you sure you want to move items to "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Mindenre vonatkozik', 'name' : 'Név', 'size' : 'Méret', 'perms' : 'Jogok', 'modify' : 'Módosítva', 'kind' : 'Típus', 'read' : 'olvasás', 'write' : 'írás', 'noaccess' : '-', 'and' : 'és', 'unknown' : 'ismeretlen', 'selectall' : 'Összes kijelölése', 'selectfiles' : 'Fájlok kijelölése', 'selectffile' : 'Első fájl kijelölése', 'selectlfile' : 'Utolsó fájl kijelölése', 'viewlist' : 'Lista nézet', 'viewicons' : 'Ikon nézet', 'viewSmall' : 'Small icons', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medium icons', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Large icons', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra large icons', // from v2.1.39 added 22.5.2018 'places' : 'Helyek', 'calc' : 'Kiszámítja', 'path' : 'Útvonal', 'aliasfor' : 'Cél', 'locked' : 'Zárolt', 'dim' : 'Méretek', 'files' : 'Fájlok', 'folders' : 'Mappák', 'items' : 'Elemek', 'yes' : 'igen', 'no' : 'nem', 'link' : 'Parancsikon', 'searcresult' : 'Keresés eredménye', 'selected' : 'kijelölt elemek', 'about' : 'Névjegy', 'shortcuts' : 'Gyorsbillenytyűk', 'help' : 'Súgó', 'webfm' : 'Web file manager', 'ver' : 'Verzió', 'protocolver' : 'protokol verzió', 'homepage' : 'Projekt honlap', 'docs' : 'Dokumentáció', 'github' : 'Hozz létre egy új verziót a Github-on', 'twitter' : 'Kövess minket a twitter-en', 'facebook' : 'Csatlakozz hozzánk a facebook-on', 'team' : 'Csapat', 'chiefdev' : 'vezető fejlesztő', 'developer' : 'fejlesztő', 'contributor' : 'külsős hozzájáruló', 'maintainer' : 'karbantartó', 'translator' : 'fordító', 'icons' : 'Ikonok', 'dontforget' : 'törölközőt ne felejts el hozni!', 'shortcutsof' : 'Shortcuts disabled', 'dropFiles' : 'Fájlok dobása ide', 'or' : 'vagy', 'selectForUpload' : 'fájlok böngészése', 'moveFiles' : 'Fájlok áthelyezése', 'copyFiles' : 'Fájlok másolása', 'restoreFiles' : 'Restore items', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Távolítsa el a helyekről', 'aspectRatio' : 'Oldalarány', 'scale' : 'Skála', 'width' : 'Szélesség', 'height' : 'Magasság', 'resize' : 'Átméretezés', 'crop' : 'Vág', 'rotate' : 'Forgat', 'rotate-cw' : 'Forgassa el 90 fokkal', 'rotate-ccw' : 'Forgassa el 90 fokkal CCW irányban', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protokoll', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Felhasználó', // added 18.04.2012 'pass' : 'Jelszó', // added 18.04.2012 'confirmUnmount' : 'Leválasztod $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Fájlok dobása vagy beillesztése a böngészőből', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drop files, Paste URLs or images(clipboard) here', // from v2.1 added 07.04.2014 'encoding' : 'Kódolás', // from v2.1 added 19.12.2014 'locale' : 'Nyelv', // from v2.1 added 19.12.2014 'searchTarget' : 'Cél: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Keresés a MIME típus bevitele alapján', // from v2.1 added 22.5.2015 'owner' : 'Tulajdonos', // from v2.1 added 20.6.2015 'group' : 'Csoport', // from v2.1 added 20.6.2015 'other' : 'Egyéb', // from v2.1 added 20.6.2015 'execute' : 'Végrehajt', // from v2.1 added 20.6.2015 'perm' : 'Engedély', // from v2.1 added 20.6.2015 'mode' : 'Mód', // from v2.1 added 20.6.2015 'emptyFolder' : 'A mappa üres', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'A mappa üres\\Elem eldobása', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'A mappa üres\\Hosszú koppintás elemek hozzáadásához', // from v2.1.6 added 30.12.2015 'quality' : 'Minőség', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Mozgatás fel', // from v2.1.6 added 18.1.2016 'getLink' : 'URL-link letöltése', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Kiválasztott elemek ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Mappa ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Offline hozzáférés engedélyezése', // from v2.1.10 added 3.25.2016 'reAuth' : 'Újrahitelesítéshez', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Most betölt...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Több fájl megnyitása', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Megpróbálja megnyitni a $1 fájlokat. Biztosan meg akarja nyitni a böngészőben?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Search results is empty in search target.', // from v2.1.12 added 5.16.2016 'editingFile' : 'It is editing a file.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 elemet választott ki.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '$1 elem van a vágólapon.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Incremental search is only from the current view.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reinstate', // from v2.1.15 added 3.8.2016 'complete' : '$1 complete', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Page turning', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'Reset', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Background color', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Color picker', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Enabled', // from v2.1.16 added 4.10.2016 'disabled' : 'Disabled', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Search results is empty in current view.\\APress [Enter] to expand search target.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'First letter search results is empty in current view.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Text label', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins left', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Select folder', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'First letter search', // from v2.1.23 added 24.3.2017 'presets' : 'Presets', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'It\'s too many items so it can\'t into trash.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Empty the folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'There are no items in a folder "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preference', // from v2.1.26 added 28.6.2017 'language' : 'Language', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialize the settings saved in this browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbar settings', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 chars left.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 lines left.', // from v2.1.52 added 16.1.2020 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Rough file size', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Select', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action when select file', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open with the editor used last time', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invert selection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Are you sure you want to rename $1 selected items like $2?
    This cannot be undone!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch rename', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Number', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Add prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Add suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Change extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Columns settings (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'All changes will reflect immediately to the archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Any changes will not reflect until un-mount this volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Selection Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithms to show the file hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Press again to exit.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Toolbar', // from v2.1.38 added 4.4.2018 'workspace' : 'Work Space', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'All', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icon Size (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open the maximized editor window', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Because conversion by API is not currently available, please convert on the website.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convert on the site of $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Show hidden items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Hide hidden items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Show/Hide hidden items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type of the Text file', // from v2.1.41 added 7.8.2018 'add' : 'Add', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Description', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Author', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'License', // from v2.1.43 added 19.10.2018 'exportToSave' : 'This item can\'t be saved. To avoid losing the edits you need to export to your PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double click on the file to select it.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Use fullscreen mode', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ismeretlen', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Mappa', 'kindSelects' : 'Selections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Parancsikon', 'kindAliasBroken' : 'Hibás parancsikon', // applications 'kindApp' : 'Alkalmazás', 'kindPostscript' : 'Postscript dokumentum', 'kindMsOffice' : 'Microsoft Office dokumentum', 'kindMsWord' : 'Microsoft Word dokumentum', 'kindMsExcel' : 'Microsoft Excel dokumentum', 'kindMsPP' : 'Microsoft Powerpoint bemutató', 'kindOO' : 'Open Office dokumentum', 'kindAppFlash' : 'Flash alkalmazás', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent fájl', 'kind7z' : '7z archívum', 'kindTAR' : 'TAR archívum', 'kindGZIP' : 'GZIP archívum', 'kindBZIP' : 'BZIP archívum', 'kindXZ' : 'XZ archívum', 'kindZIP' : 'ZIP archívum', 'kindRAR' : 'RAR archívum', 'kindJAR' : 'Java JAR fájl', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM csomag', // texts 'kindText' : 'Szöveges dokumentum', 'kindTextPlain' : 'Plain text', 'kindPHP' : 'PHP forráskód', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML dokumentum', 'kindJS' : 'Javascript forráskód', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C forráskód', 'kindCHeader' : 'C header forráskód', 'kindCPP' : 'C++ forráskód', 'kindCPPHeader' : 'C++ header forráskód', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python forráskód', 'kindJava' : 'Java forráskód', 'kindRuby' : 'Ruby forráskód', 'kindPerl' : 'Perl script', 'kindSQL' : 'SQL forráskód', 'kindXML' : 'XML dokumentum', 'kindAWK' : 'AWK forráskód', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML dokumentum', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Kép', 'kindBMP' : 'BMP kép', 'kindJPEG' : 'JPEG kép', 'kindGIF' : 'GIF kép', 'kindPNG' : 'PNG kép', 'kindTIFF' : 'TIFF kép', 'kindTGA' : 'TGA kép', 'kindPSD' : 'Adobe Photoshop kép', 'kindXBITMAP' : 'X bitmap image', 'kindPXM' : 'Pixelmator image', // media 'kindAudio' : 'Hangfájl', 'kindAudioMPEG' : 'MPEG hangfájl', 'kindAudioMPEG4' : 'MPEG-4 hangfájl', 'kindAudioMIDI' : 'MIDI hangfájl', 'kindAudioOGG' : 'Ogg Vorbis hangfájl', 'kindAudioWAV' : 'WAV hangfájl', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Film', 'kindVideoDV' : 'DV film', 'kindVideoMPEG' : 'MPEG film', 'kindVideoMPEG4' : 'MPEG-4 film', 'kindVideoAVI' : 'AVI film', 'kindVideoMOV' : 'Quick Time film', 'kindVideoWM' : 'Windows Media film', 'kindVideoFlash' : 'Flash film', 'kindVideoMKV' : 'Matroska film', 'kindVideoOGG' : 'Ogg film' } }; })); application/library/js/i18n/elfinder.ru.js000064400000123177146731177160014511 0ustar00/** * Русский язык translation * @author Dmitry "dio" Levashov * @author Andrew Berezovsky * @author Alex Yashkin * @version 2022-01-02 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ru = { translator : 'Dmitry "dio" Levashov <dio@std42.ru>, Andrew Berezovsky <andrew.berezovsky@gmail.com>, Alex Yashkin <alex@yashkin.by>', language : 'Русский язык', direction : 'ltr', dateFormat : 'd M Y H:i', // will show like: 02 Янв 2022 19:53 fancyDateFormat : '$1 H:i', // will show like: Сегодня 19:53 nonameDateFormat : 'ymd-His', // noname upload will show like: 220102-195313 messages : { /********************************** errors **********************************/ 'error' : 'Ошибка', 'errUnknown' : 'Неизвестная ошибка.', 'errUnknownCmd' : 'Неизвестная команда.', 'errJqui' : 'Отсутствуют необходимые компоненты jQuery UI - selectable, draggable и droppable.', 'errNode' : 'Отсутствует DOM элемент для инициализации elFinder.', 'errURL' : 'Неверная конфигурация elFinder! Не указан URL.', 'errAccess' : 'Доступ запрещен.', 'errConnect' : 'Не удалось соединиться с сервером.', 'errAbort' : 'Соединение прервано.', 'errTimeout' : 'Таймаут соединения.', 'errNotFound' : 'Сервер не найден.', 'errResponse' : 'Некорректный ответ сервера.', 'errConf' : 'Некорректная настройка сервера.', 'errJSON' : 'Модуль PHP JSON не установлен.', 'errNoVolumes' : 'Отсутствуют корневые директории достуные для чтения.', 'errCmdParams' : 'Некорректные параметры команды "$1".', 'errDataNotJSON' : 'Данные не в формате JSON.', 'errDataEmpty' : 'Данные отсутствуют.', 'errCmdReq' : 'Для запроса к серверу необходимо указать имя команды.', 'errOpen' : 'Не удалось открыть "$1".', 'errNotFolder' : 'Объект не является папкой.', 'errNotFile' : 'Объект не является файлом.', 'errRead' : 'Ошибка чтения "$1".', 'errWrite' : 'Ошибка записи в "$1".', 'errPerm' : 'Доступ запрещен.', 'errLocked' : '"$1" защищен и не может быть переименован, перемещен или удален.', 'errExists' : 'В папке уже существует файл с именем "$1".', 'errInvName' : 'Недопустимое имя файла.', 'errInvDirname' : 'Недопустимое имя папки.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Папка не найдена.', 'errFileNotFound' : 'Файл не найден.', 'errTrgFolderNotFound' : 'Целевая папка "$1" не найдена.', 'errPopup' : 'Браузер заблокировал открытие нового окна. Чтобы открыть файл, измените настройки браузера.', 'errMkdir' : 'Ошибка создания папки "$1".', 'errMkfile' : 'Ошибка создания файла "$1".', 'errRename' : 'Ошибка переименования "$1".', 'errCopyFrom' : 'Копирование файлов из директории "$1" запрещено.', 'errCopyTo' : 'Копирование файлов в директорию "$1" запрещено.', 'errMkOutLink' : 'Невозможно создать ссылку вне корня раздела.', // from v2.1 added 03.10.2015 'errUpload' : 'Ошибка загрузки.', // old name - errUploadCommon 'errUploadFile' : 'Невозможно загрузить "$1".', // old name - errUpload 'errUploadNoFiles' : 'Нет файлов для загрузки.', 'errUploadTotalSize' : 'Превышен допустимый размер загружаемых данных.', // old name - errMaxSize 'errUploadFileSize' : 'Размер файла превышает допустимый.', // old name - errFileMaxSize 'errUploadMime' : 'Недопустимый тип файла.', 'errUploadTransfer' : 'Ошибка передачи файла "$1".', 'errUploadTemp' : 'Невозможно создать временный файл для загрузки.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Объект "$1" по этому адресу уже существует и не может быть заменен объектом другого типа.', // new 'errReplace' : 'Невозможно заменить "$1".', 'errSave' : 'Невозможно сохранить "$1".', 'errCopy' : 'Невозможно скопировать "$1".', 'errMove' : 'Невозможно переместить "$1".', 'errCopyInItself' : 'Невозможно скопировать "$1" в самого себя.', 'errRm' : 'Невозможно удалить "$1".', 'errTrash' : 'Невозможно переместить в корзину.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Невозможно удалить файлы источника.', 'errExtract' : 'Невозможно извлечь фалы из "$1".', 'errArchive' : 'Невозможно создать архив.', 'errArcType' : 'Неподдерживаемый тип архива.', 'errNoArchive' : 'Файл не является архивом или неподдерживаемый тип архива.', 'errCmdNoSupport' : 'Сервер не поддерживает эту команду.', 'errReplByChild' : 'Невозможно заменить папку "$1" содержащимся в ней объектом.', 'errArcSymlinks' : 'По соображениям безопасности запрещена распаковка архивов, содержащих ссылки (symlinks) или файлы с недопустимыми именами.', // edited 24.06.2012 'errArcMaxSize' : 'Размер файлов в архиве превышает максимально разрешенный.', 'errResize' : 'Не удалось изменить размер "$1".', 'errResizeDegree' : 'Некорректный градус поворота.', // added 7.3.2013 'errResizeRotate' : 'Невозможно повернуть изображение.', // added 7.3.2013 'errResizeSize' : 'Некорректный размер изображения.', // added 7.3.2013 'errResizeNoChange' : 'Размер изображения не изменился.', // added 7.3.2013 'errUsupportType' : 'Неподдерживаемый тип файла.', 'errNotUTF8Content' : 'Файл "$1" содержит текст в кодировке отличной от UTF-8 и не может быть отредактирован.', // added 9.11.2011 'errNetMount' : 'Невозможно подключить "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Неподдерживаемый протокол.', // added 17.04.2012 'errNetMountFailed' : 'Ошибка монтирования.', // added 17.04.2012 'errNetMountHostReq' : 'Требуется указать хост.', // added 18.04.2012 'errSessionExpires' : 'Сессия была завершена так как превышено время отсутствия активности.', 'errCreatingTempDir' : 'Невозможно создать временную директорию: "$1"', 'errFtpDownloadFile' : 'Невозможно скачать файл с FTP: "$1"', 'errFtpUploadFile' : 'Невозможно загрузить файл на FTP: "$1"', 'errFtpMkdir' : 'Невозможно создать директорию на FTP: "$1"', 'errArchiveExec' : 'Ошибка при выполнении архивации: "$1"', 'errExtractExec' : 'Ошибка при выполнении распаковки: "$1"', 'errNetUnMount' : 'Невозможно отключить', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Не конвертируется в UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Если вы хотите загружать папки, попробуйте Google Chrome.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Превышено время ожидания при поиске "$1". Результаты поиска частичные.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Требуется повторная авторизация.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Максимальное число выбираемых файлов: $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Невозможно восстановить из корзины. Не удалось определить путь для восстановления.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Не найден редактор для этого типа файлов.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Возникла ошибка на стороне сервера.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Невозможно очистить папку "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Еще ошибок: $1', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Вы можете создать за один раз папок: $1.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Создать архив', 'cmdback' : 'Назад', 'cmdcopy' : 'Копировать', 'cmdcut' : 'Вырезать', 'cmddownload' : 'Скачать', 'cmdduplicate' : 'Сделать копию', 'cmdedit' : 'Редактировать файл', 'cmdextract' : 'Распаковать архив', 'cmdforward' : 'Вперед', 'cmdgetfile' : 'Выбрать файлы', 'cmdhelp' : 'О программе', 'cmdhome' : 'Домой', 'cmdinfo' : 'Свойства', 'cmdmkdir' : 'Новая папка', 'cmdmkdirin' : 'В новую папку', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Новый файл', 'cmdopen' : 'Открыть', 'cmdpaste' : 'Вставить', 'cmdquicklook' : 'Быстрый просмотр', 'cmdreload' : 'Обновить', 'cmdrename' : 'Переименовать', 'cmdrm' : 'Удалить', 'cmdtrash' : 'Переместить в корзину', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Восстановить', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Поиск файлов', 'cmdup' : 'Наверх', 'cmdupload' : 'Загрузить файлы', 'cmdview' : 'Вид', 'cmdresize' : 'Изменить размер и повернуть', 'cmdsort' : 'Сортировать', 'cmdnetmount' : 'Подключить сетевой раздел', // added 18.04.2012 'cmdnetunmount': 'Отключить', // from v2.1 added 30.04.2012 'cmdplaces' : 'В избранное', // added 28.12.2014 'cmdchmod' : 'Изменить права доступа', // from v2.1 added 20.6.2015 'cmdopendir' : 'Открыть папку', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Сбросить ширину колонок', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Полный экран', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Переместить', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Очистить папку', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Отменить', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Вернуть', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Предпочтения', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Выбрать все', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Отменить выбор', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Инвертировать выбор', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Открыть в новом окне', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Скрыть (персонально)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Закрыть', 'btnSave' : 'Сохранить', 'btnRm' : 'Удалить', 'btnApply' : 'Применить', 'btnCancel' : 'Отмена', 'btnNo' : 'Нет', 'btnYes' : 'Да', 'btnMount' : 'Подключить', // added 18.04.2012 'btnApprove': 'Перейти в $1 и применить', // from v2.1 added 26.04.2012 'btnUnmount': 'Отключить', // from v2.1 added 30.04.2012 'btnConv' : 'Конвертировать', // from v2.1 added 08.04.2014 'btnCwd' : 'Здесь', // from v2.1 added 22.5.2015 'btnVolume' : 'Раздел', // from v2.1 added 22.5.2015 'btnAll' : 'Все', // from v2.1 added 22.5.2015 'btnMime' : 'MIME тип', // from v2.1 added 22.5.2015 'btnFileName':'Имя файла', // from v2.1 added 22.5.2015 'btnSaveClose': 'Сохранить и закрыть', // from v2.1 added 12.6.2015 'btnBackup' : 'Резервная копия', // fromv2.1 added 28.11.2015 'btnRename' : 'Переименовать', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Переименовать (все)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Пред. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'След. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Сохранить как', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Открыть папку', 'ntffile' : 'Открыть файл', 'ntfreload' : 'Обновить текущую папку', 'ntfmkdir' : 'Создание папки', 'ntfmkfile' : 'Создание файлов', 'ntfrm' : 'Удалить файлы', 'ntfcopy' : 'Скопировать файлы', 'ntfmove' : 'Переместить файлы', 'ntfprepare' : 'Подготовка к копированию файлов', 'ntfrename' : 'Переименовать файлы', 'ntfupload' : 'Загрузка файлов', 'ntfdownload' : 'Скачивание файлов', 'ntfsave' : 'Сохранить файлы', 'ntfarchive' : 'Создание архива', 'ntfextract' : 'Распаковка архива', 'ntfsearch' : 'Поиск файлов', 'ntfresize' : 'Изменение размеров изображений', 'ntfsmth' : 'Занят важным делом', 'ntfloadimg' : 'Загрузка изображения', 'ntfnetmount' : 'Подключение сетевого диска', // added 18.04.2012 'ntfnetunmount': 'Отключение сетевого диска', // from v2.1 added 30.04.2012 'ntfdim' : 'Получение размеров изображения', // added 20.05.2013 'ntfreaddir' : 'Чтение информации о папке', // from v2.1 added 01.07.2013 'ntfurl' : 'Получение URL ссылки', // from v2.1 added 11.03.2014 'ntfchmod' : 'Изменение прав доступа к файлу', // from v2.1 added 20.6.2015 'ntfpreupload': 'Проверка измени загруженного файла', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Создание файла для скачки', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Получение информации о пути', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Обработка загруженного файла', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Перемещение в корзину', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Восстановление из корзины', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Проверка папки назначения', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Отмена предыдущей операции', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Восстановление предыдущей операции', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Проверка содержимого', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Корзина', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'неизвестно', 'Today' : 'Сегодня', 'Yesterday' : 'Вчера', 'msJan' : 'Янв', 'msFeb' : 'Фев', 'msMar' : 'Мар', 'msApr' : 'Апр', 'msMay' : 'Май', 'msJun' : 'Июн', 'msJul' : 'Июл', 'msAug' : 'Авг', 'msSep' : 'Сен', 'msOct' : 'Окт', 'msNov' : 'Ноя', 'msDec' : 'Дек', 'January' : 'Январь', 'February' : 'Февраль', 'March' : 'Март', 'April' : 'Апрель', 'May' : 'Май', 'June' : 'Июнь', 'July' : 'Июль', 'August' : 'Август', 'September' : 'Сентябрь', 'October' : 'Октябрь', 'November' : 'Ноябрь', 'December' : 'Декабрь', 'Sunday' : 'Воскресенье', 'Monday' : 'Понедельник', 'Tuesday' : 'Вторник', 'Wednesday' : 'Среда', 'Thursday' : 'Четверг', 'Friday' : 'Пятница', 'Saturday' : 'Суббота', 'Sun' : 'Вск', 'Mon' : 'Пнд', 'Tue' : 'Втр', 'Wed' : 'Срд', 'Thu' : 'Чтв', 'Fri' : 'Птн', 'Sat' : 'Сбт', /******************************** sort variants ********************************/ 'sortname' : 'по имени', 'sortkind' : 'по типу', 'sortsize' : 'по размеру', 'sortdate' : 'по дате', 'sortFoldersFirst' : 'Папки в начале', 'sortperm' : 'по разрешениям', // from v2.1.13 added 13.06.2016 'sortmode' : 'по режиму', // from v2.1.13 added 13.06.2016 'sortowner' : 'по владельцу', // from v2.1.13 added 13.06.2016 'sortgroup' : 'по группе', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Также и дерево каталогов', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'НовыйФайл.txt', // added 10.11.2015 'untitled folder' : 'НоваяПапка', // added 10.11.2015 'Archive' : 'НовыйАрхив', // from v2.1 added 10.11.2015 'untitled file' : 'НовыйФайл.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1 Файл', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Необходимо подтверждение', 'confirmRm' : 'Вы уверены, что хотите удалить файлы?
    Действие необратимо!', 'confirmRepl' : 'Заменить старый файл новым?', 'confirmRest' : 'Заменить существующий файл файлом из корзины?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Не UTF-8
    Сконвертировать в UTF-8?
    Данные станут UTF-8 при сохранении после конвертации.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Невозможно определить кодировку файла. Необходима предварительная конвертация файла в UTF-8 для дальнейшего редактирования.
    Выберите кодировку файла.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Произошли изменения.
    Если не сохраните изменения, то потеряете их.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Вы уверены, что хотите переместить файлы в корзину?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Вы уверены, что хотите переместить файлы в "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Применить для всех', 'name' : 'Имя', 'size' : 'Размер', 'perms' : 'Доступ', 'modify' : 'Изменен', 'kind' : 'Тип', 'read' : 'чтение', 'write' : 'запись', 'noaccess' : 'нет доступа', 'and' : 'и', 'unknown' : 'неизвестно', 'selectall' : 'Выбрать все файлы', 'selectfiles' : 'Выбрать файл(ы)', 'selectffile' : 'Выбрать первый файл', 'selectlfile' : 'Выбрать последний файл', 'viewlist' : 'В виде списка', 'viewicons' : 'В виде иконок', 'viewSmall' : 'Маленькие иконки', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Средние иконки', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Большие иконки', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Очень большие иконки', // from v2.1.39 added 22.5.2018 'places' : 'Избранное', 'calc' : 'Вычислить', 'path' : 'Путь', 'aliasfor' : 'Указывает на', 'locked' : 'Защита', 'dim' : 'Размеры', 'files' : 'Файлы', 'folders' : 'Папки', 'items' : 'Объекты', 'yes' : 'да', 'no' : 'нет', 'link' : 'Ссылка', 'searcresult' : 'Результаты поиска', 'selected' : 'выбрано', 'about' : 'О программе', 'shortcuts' : 'Горячие клавиши', 'help' : 'Помощь', 'webfm' : 'Файловый менеджер для Web', 'ver' : 'Версия', 'protocolver' : 'версия протокола', 'homepage' : 'Сайт проекта', 'docs' : 'Документация', 'github' : 'Форкните на GitHub', 'twitter' : 'Следите в Twitter', 'facebook' : 'Присоединяйтесь на Facebook', 'team' : 'Команда', 'chiefdev' : 'ведущий разработчик', 'developer' : 'разработчик', 'contributor' : 'участник', 'maintainer' : 'сопровождение проекта', 'translator' : 'переводчик', 'icons' : 'Иконки', 'dontforget' : 'и не забудьте взять своё полотенце', 'shortcutsof' : 'Горячие клавиши отключены', 'dropFiles' : 'Перетащите файлы сюда', 'or' : 'или', 'selectForUpload' : 'Выбрать файлы для загрузки', 'moveFiles' : 'Переместить файлы', 'copyFiles' : 'Скопировать файлы', 'restoreFiles' : 'Восстановить файлы', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Удалить из избранного', 'aspectRatio' : 'Соотношение сторон', 'scale' : 'Масштаб', 'width' : 'Ширина', 'height' : 'Высота', 'resize' : 'Изменить размер', 'crop' : 'Обрезать', 'rotate' : 'Повернуть', 'rotate-cw' : 'Повернуть на 90 градусов по часовой стрелке', 'rotate-ccw' : 'Повернуть на 90 градусов против часовой стрелке', 'degree' : '°', 'netMountDialogTitle' : 'Подключить сетевой диск', // added 18.04.2012 'protocol' : 'Протокол', // added 18.04.2012 'host' : 'Хост', // added 18.04.2012 'port' : 'Порт', // added 18.04.2012 'user' : 'Пользователь', // added 18.04.2012 'pass' : 'Пароль', // added 18.04.2012 'confirmUnmount' : 'Вы хотите отключить $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Перетащите или вставьте файлы из браузера', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Перетащите или вставьте файлы и ссылки сюда', // from v2.1 added 07.04.2014 'encoding' : 'Кодировка', // from v2.1 added 19.12.2014 'locale' : 'Локаль', // from v2.1 added 19.12.2014 'searchTarget' : 'Цель: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Поиск по введенному MIME типу', // from v2.1 added 22.5.2015 'owner' : 'Владелец', // from v2.1 added 20.6.2015 'group' : 'Группа', // from v2.1 added 20.6.2015 'other' : 'Остальные', // from v2.1 added 20.6.2015 'execute' : 'Исполнить', // from v2.1 added 20.6.2015 'perm' : 'Разрешение', // from v2.1 added 20.6.2015 'mode' : 'Режим', // from v2.1 added 20.6.2015 'emptyFolder' : 'Папка пуста', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Папка пуста\\A Перетащите чтобы добавить', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Папка пуста\\A Долгое нажатие чтобы добавить', // from v2.1.6 added 30.12.2015 'quality' : 'Качество', // from v2.1.6 added 5.1.2016 'autoSync' : 'Авто синхронизация', // from v2.1.6 added 10.1.2016 'moveUp' : 'Передвинуть вверх', // from v2.1.6 added 18.1.2016 'getLink' : 'Получить URL ссылку', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Выбранные объекты ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID папки', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Позволить автономный доступ', // from v2.1.10 added 3.25.2016 'reAuth' : 'Авторизоваться повторно', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Загружается...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Открыть несколько файлов', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Вы пытаетесь открыть $1 файл(а/ов). Вы уверены, что хотите открыть их в браузере?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Ничего не найдено', // from v2.1.12 added 5.16.2016 'editingFile' : 'Это редактируемый файл.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Вы выбрали $1 файл(-ов).', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'У вас $1 файл(-ов) в буфере обмена.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Инкрементный поиск возможен только из текущего вида.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Восстановить', // from v2.1.15 added 3.8.2016 'complete' : '$1 завершен', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Контекстное меню', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Переключение страницы', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Корни томов', // from v2.1.16 added 16.9.2016 'reset' : 'Сбросить', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Фоновый цвет', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Выбор цвета', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px сетка', // from v2.1.16 added 4.10.2016 'enabled' : 'Включено', // from v2.1.16 added 4.10.2016 'disabled' : 'Отключено', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Ничего не найдено в текущем виде.\\AНажмите [Enter] для развертывания цели поиска.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Поиск по первому символу не дал результатов в текущем виде.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Текстовая метка', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 минут осталось', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Переоткрыть с выбранной кодировкой', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Сохранить с выбранной кодировкой', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Выбрать папку', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Поиск по первому символу', // from v2.1.23 added 24.3.2017 'presets' : 'Пресеты', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Слишком много файлов для перемещения в корзину.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Текстовая область', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Очистить папку "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Нет файлов в паке "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Настройки', // from v2.1.26 added 28.6.2017 'language' : 'Язык', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Сбросить настройки для этого браузера', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Настройки панели', // from v2.1.27 added 2.8.2017 'charsLeft' : '... еще символов: $1.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... еще строк: $1.', // from v2.1.52 added 16.1.2020 'sum' : 'Общий размер', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Приблизительный размер файла', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Фокус на элементе диалога при наведении мыши', // from v2.1.30 added 2.11.2017 'select' : 'Выбрать', // from v2.1.30 added 23.11.2017 'selectAction' : 'Действие при выборе файла', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Открывать в редакторе, выбранном в прошлый раз', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Выбрать элементы с инвертированием', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Переименовать выбранные элементы ($1 шт.) в $2?
    Действие нельзя отменить!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Групповое переименование', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Число', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Добавить префикс', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Добавить суффикс', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Изменить расширение', // from v2.1.31 added 8.12.2017 'columnPref' : 'Настройки колонок (для просмотра в виде списка)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Все изменения будут немедленно отражены в архиве.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Изменения не вступят в силу до тех пор, пока вы не размонтируете этот том.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Тома, смонтированные на этом томе, также будут размонтированы. Вы хотите отключить его?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Свойства', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Алгоритмы для отображения хеш-сумм файлов', // from v2.1.33 added 10.3.2018 'infoItems' : 'Элементы в панели свойств', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Нажмите снова для выхода.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Панель', // from v2.1.38 added 4.4.2018 'workspace' : 'Рабочая область', // from v2.1.38 added 4.4.2018 'dialog' : 'Диалог', // from v2.1.38 added 4.4.2018 'all' : 'Все', // from v2.1.38 added 4.4.2018 'iconSize' : 'Размер иконок (В виде иконок)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Открывать редактор в развернутом виде', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Так как конвертация с помощью API недоступно, произведите конвертацию на веб-сайте.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'После конвертации вы должны загрузить скачанный файл, чтобы сохранить его.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Конвертировать на сайте $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Интеграции', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Менеджер elFinder интегрирован со следующими внешними сервисами. Ознакомьтесь с правилами пользования, политиками безопасности и др. перед их использованием.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Показать скрытые элементы', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Скрыть скрытые элементы', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Показать/скрыть скрытые элементы', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Типы файлов в меню "Новый файл"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Тип текстового файла', // from v2.1.41 added 7.8.2018 'add' : 'Добавить', // from v2.1.41 added 7.8.2018 'theme' : 'Тема', // from v2.1.43 added 19.10.2018 'default' : 'По умолчанию', // from v2.1.43 added 19.10.2018 'description' : 'Описание', // from v2.1.43 added 19.10.2018 'website' : 'Веб-сайт', // from v2.1.43 added 19.10.2018 'author' : 'Автор', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'Лицензия', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Невозможно сохранить файл. Чтобы не потерять изменения, экспортируйте их на свой ПК.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Двойной клик по файлу для его выбора.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Использовать полноэкранный режим', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Неизвестный', 'kindRoot' : 'Корень тома', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Папка', 'kindSelects' : 'Выбор', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Ссылка', 'kindAliasBroken' : 'Битая ссылка', // applications 'kindApp' : 'Приложение', 'kindPostscript' : 'Документ Postscript', 'kindMsOffice' : 'Документ Microsoft Office', 'kindMsWord' : 'Документ Microsoft Word', 'kindMsExcel' : 'Документ Microsoft Excel', 'kindMsPP' : 'Презентация Microsoft Powerpoint', 'kindOO' : 'Документ Open Office', 'kindAppFlash' : 'Приложение Flash', 'kindPDF' : 'Документ PDF', 'kindTorrent' : 'Файл Bittorrent', 'kind7z' : 'Архив 7z', 'kindTAR' : 'Архив TAR', 'kindGZIP' : 'Архив GZIP', 'kindBZIP' : 'Архив BZIP', 'kindXZ' : 'Архив XZ', 'kindZIP' : 'Архив ZIP', 'kindRAR' : 'Архив RAR', 'kindJAR' : 'Файл Java JAR', 'kindTTF' : 'Шрифт True Type', 'kindOTF' : 'Шрифт Open Type', 'kindRPM' : 'Пакет RPM', // texts 'kindText' : 'Текстовый документ', 'kindTextPlain' : 'Простой текст', 'kindPHP' : 'Исходник PHP', 'kindCSS' : 'Таблицы стилей CSS', 'kindHTML' : 'Документ HTML', 'kindJS' : 'Исходник Javascript', 'kindRTF' : 'Rich Text Format', 'kindC' : 'Исходник C', 'kindCHeader' : 'Заголовочный файл C', 'kindCPP' : 'Исходник C++', 'kindCPPHeader' : 'Заголовочный файл C++', 'kindShell' : 'Скрипт Unix shell', 'kindPython' : 'Исходник Python', 'kindJava' : 'Исходник Java', 'kindRuby' : 'Исходник Ruby', 'kindPerl' : 'Исходник Perl', 'kindSQL' : 'Исходник SQL', 'kindXML' : 'Документ XML', 'kindAWK' : 'Исходник AWK', 'kindCSV' : 'Текст с разделителями', 'kindDOCBOOK' : 'Документ Docbook XML', 'kindMarkdown' : 'Текст Markdown', // added 20.7.2015 // images 'kindImage' : 'Изображение', 'kindBMP' : 'Изображение BMP', 'kindJPEG' : 'Изображение JPEG', 'kindGIF' : 'Изображение GIF', 'kindPNG' : 'Изображение PNG', 'kindTIFF' : 'Изображение TIFF', 'kindTGA' : 'Изображение TGA', 'kindPSD' : 'Изображение Adobe Photoshop', 'kindXBITMAP' : 'Изображение X bitmap', 'kindPXM' : 'Изображение Pixelmator', // media 'kindAudio' : 'Аудио файл', 'kindAudioMPEG' : 'Аудио MPEG', 'kindAudioMPEG4' : 'Аудио MPEG-4', 'kindAudioMIDI' : 'Аудио MIDI', 'kindAudioOGG' : 'Аудио Ogg Vorbis', 'kindAudioWAV' : 'Аудио WAV', 'AudioPlaylist' : 'Плейлист MP3', 'kindVideo' : 'Видео файл', 'kindVideoDV' : 'Видео DV', 'kindVideoMPEG' : 'Видео MPEG', 'kindVideoMPEG4' : 'Видео MPEG-4', 'kindVideoAVI' : 'Видео AVI', 'kindVideoMOV' : 'Видео Quick Time', 'kindVideoWM' : 'Видео Windows Media', 'kindVideoFlash' : 'Видео Flash', 'kindVideoMKV' : 'Видео Matroska', 'kindVideoOGG' : 'Видео Ogg' } }; })); application/library/js/i18n/elfinder.ja.js000064400000114315146731177160014447 0ustar00/** * Japanese translation * @author Tomoaki Yoshida * @author Naoki Sawada * @version 2021-06-02 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ja = { translator : 'Tomoaki Yoshida <info@yoshida-studio.jp>, Naoki Sawada <hypweb+elfinder@gmail.com>', language : 'Japanese', direction : 'ltr', dateFormat : 'Y/m/d h:i A', // will show like: 2018/08/24 04:37 PM fancyDateFormat : '$1 h:i A', // will show like: 今日 04:37 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 180824-163717 messages : { /********************************** errors **********************************/ 'error' : 'エラー', 'errUnknown' : '不明なエラーです。', 'errUnknownCmd' : '不明なコマンドです。', 'errJqui' : '無効な jQuery UI 設定です。Selectable, Draggable, Droppable コンポーネントを含める必要があります。', 'errNode' : 'elFinder は DOM Element が必要です。', 'errURL' : '無効な elFinder 設定です! URLを設定されていません。', 'errAccess' : 'アクセスが拒否されました。', 'errConnect' : 'バックエンドとの接続ができません。', 'errAbort' : '接続が中断されました。', 'errTimeout' : '接続がタイムアウトしました。', 'errNotFound' : 'バックエンドが見つかりません。', 'errResponse' : '無効なバックエンドレスポンスです。', 'errConf' : 'バックエンドの設定が有効ではありません。', 'errJSON' : 'PHP JSON モジュールがインストールされていません。', 'errNoVolumes' : '読み込み可能なボリュームがありません。', 'errCmdParams' : 'コマンド "$1"のパラメーターが無効です。', 'errDataNotJSON' : 'JSONデータではありません。', 'errDataEmpty' : '空のデータです。', 'errCmdReq' : 'バックエンドリクエストはコマンド名が必要です。', 'errOpen' : '"$1" を開くことができません。', 'errNotFolder' : 'オブジェクトがフォルダではありません。', 'errNotFile' : 'オブジェクトがファイルではありません。', 'errRead' : '"$1" を読み込むことができません。', 'errWrite' : '"$1" に書き込むことができません。', 'errPerm' : '権限がありません。', 'errLocked' : '"$1" はロックされているので名前の変更、移動、削除ができません。', 'errExists' : '"$1" というアイテム名はすでに存在しています。', 'errInvName' : '無効なファイル名です。', 'errInvDirname' : '無効なフォルダ名です。', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'フォルダが見つかりません。', 'errFileNotFound' : 'ファイルが見つかりません。', 'errTrgFolderNotFound' : 'ターゲットとするフォルダ "$1" が見つかりません。', 'errPopup' : 'ポップアップウィンドウが開けません。ファイルを開くにはブラウザの設定を変更してください。', 'errMkdir' : 'フォルダ "$1" を作成することができません。', 'errMkfile' : 'ファイル "$1" を作成することができません。', 'errRename' : '"$1" の名前を変更することができません。', 'errCopyFrom' : '"$1" からのファイルコピーは許可されていません。', 'errCopyTo' : '"$1" へのファイルコピーは許可されていません。', 'errMkOutLink' : 'ボリュームルート外へのリンクを作成することはできません。', // from v2.1 added 03.10.2015 'errUpload' : 'アップロードエラー', // old name - errUploadCommon 'errUploadFile' : '"$1" をアップロードすることができません。', // old name - errUpload 'errUploadNoFiles' : 'アップロードされたファイルはありません。', 'errUploadTotalSize' : 'データが許容サイズを超えています。', // old name - errMaxSize 'errUploadFileSize' : 'ファイルが許容サイズを超えています。', // old name - errFileMaxSize 'errUploadMime' : '許可されていないファイル形式です。', 'errUploadTransfer' : '"$1" 転送エラーです。', 'errUploadTemp' : 'アップロード用一時ファイルを作成できません。', // from v2.1 added 26.09.2015 'errNotReplace' : 'アイテム "$1" はすでにこの場所にあり、アイテムのタイプが違うので置き換えることはできません。', // new 'errReplace' : '"$1" を置き換えることができません。', 'errSave' : '"$1" を保存することができません。', 'errCopy' : '"$1" をコピーすることができません。', 'errMove' : '"$1" を移動することができません。', 'errCopyInItself' : '"$1" をそれ自身の中にコピーすることはできません。', 'errRm' : '"$1" を削除することができません。', 'errTrash' : 'ごみ箱に入れることができません。', // from v2.1.24 added 30.4.2017 'errRmSrc' : '元ファイルを削除することができません。', 'errExtract' : '"$1" を解凍することができません。', 'errArchive' : 'アーカイブを作成することができません。', 'errArcType' : 'サポート外のアーカイブ形式です。', 'errNoArchive' : 'アーカイブでないかサポートされていないアーカイブ形式です。', 'errCmdNoSupport' : 'サポートされていないコマンドです。', 'errReplByChild' : 'フォルダ "$1" に含まれてるアイテムを置き換えることはできません。', 'errArcSymlinks' : 'シンボリックリンクまたは許容されないファイル名を含むアーカイブはセキュリティ上、解凍できません。', // edited 24.06.2012 'errArcMaxSize' : 'アーカイブが許容されたサイズを超えています。', 'errResize' : '"$1" のリサイズまたは回転ができません。', 'errResizeDegree' : 'イメージの回転角度が不正です。', // added 7.3.2013 'errResizeRotate' : 'イメージを回転できません。', // added 7.3.2013 'errResizeSize' : '指定されたイメージサイズが不正です。', // added 7.3.2013 'errResizeNoChange' : 'イメージサイズなどの変更点がありません。', // added 7.3.2013 'errUsupportType' : 'このファイルタイプはサポートされていません。', 'errNotUTF8Content' : 'ファイル "$1" には UTF-8 以外の文字が含まれているので編集できません。', // added 9.11.2011 'errNetMount' : '"$1" をマウントできません。', // added 17.04.2012 'errNetMountNoDriver' : 'サポートされていないプロトコルです。', // added 17.04.2012 'errNetMountFailed' : 'マウントに失敗しました。', // added 17.04.2012 'errNetMountHostReq' : 'ホスト名は必須です。', // added 18.04.2012 'errSessionExpires' : 'アクションがなかったため、セッションが期限切れになりました。', 'errCreatingTempDir' : '一時ディレクトリを作成できません:"$1"', 'errFtpDownloadFile' : 'FTP からファイルをダウンロードできません:"$1"', 'errFtpUploadFile' : 'FTP へファイルをアップロードできません:"$1"', 'errFtpMkdir' : 'FTP にリモートディレクトリを作成できません:"$1"', 'errArchiveExec' : 'ファイルのアーカイブ中にエラーが発生しました:"$1"', 'errExtractExec' : 'ファイルの抽出中にエラーが発生しました:"$1"', 'errNetUnMount' : 'アンマウントできません。', // from v2.1 added 30.04.2012 'errConvUTF8' : 'UTF-8 に変換できませんでした。', // from v2.1 added 08.04.2014 'errFolderUpload' : 'フォルダをアップロードしたいのであれば、モダンブラウザを試してください。', // from v2.1 added 26.6.2015 'errSearchTimeout' : '"$1" を検索中にタイムアウトしました。検索結果は部分的です。', // from v2.1 added 12.1.2016 'errReauthRequire' : '再認可が必要です。', // from v2.1.10 added 24.3.2016 'errMaxTargets' : '選択可能な最大アイテム数は $1 個です。', // from v2.1.17 added 17.10.2016 'errRestore' : '宛先の特定ができないため、ごみ箱から戻せません。', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'このファイルタイプのエディターがありません。', // from v2.1.25 added 23.5.2017 'errServerError' : 'サーバー側でエラーが発生しました。', // from v2.1.25 added 16.6.2017 'errEmpty' : 'フォルダ"$1"を空にすることができません。', // from v2.1.25 added 22.6.2017 'moreErrors' : 'さらに $1 件のエラーがあります。', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : '一度に作成できるフォルダーは $1 個までです。', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'アーカイブ作成', 'cmdback' : '戻る', 'cmdcopy' : 'コピー', 'cmdcut' : 'カット', 'cmddownload' : 'ダウンロード', 'cmdduplicate' : '複製', 'cmdedit' : 'ファイル編集', 'cmdextract' : 'アーカイブを解凍', 'cmdforward' : '進む', 'cmdgetfile' : 'ファイル選択', 'cmdhelp' : 'このソフトウェアについて', 'cmdhome' : 'ルート', 'cmdinfo' : '情報', 'cmdmkdir' : '新規フォルダ', 'cmdmkdirin' : '新規フォルダへ', // from v2.1.7 added 19.2.2016 'cmdmkfile' : '新規ファイル', 'cmdopen' : '開く', 'cmdpaste' : 'ペースト', 'cmdquicklook' : 'プレビュー', 'cmdreload' : 'リロード', 'cmdrename' : 'リネーム', 'cmdrm' : '削除', 'cmdtrash' : 'ごみ箱へ', //from v2.1.24 added 29.4.2017 'cmdrestore' : '復元', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'ファイルを探す', 'cmdup' : '親フォルダへ移動', 'cmdupload' : 'ファイルアップロード', 'cmdview' : 'ビュー', 'cmdresize' : 'リサイズと回転', 'cmdsort' : 'ソート', 'cmdnetmount' : 'ネットワークボリュームをマウント', // added 18.04.2012 'cmdnetunmount': 'アンマウント', // from v2.1 added 30.04.2012 'cmdplaces' : 'よく使う項目へ', // added 28.12.2014 'cmdchmod' : '属性変更', // from v2.1 added 20.6.2015 'cmdopendir' : 'フォルダを開く', // from v2.1 added 13.1.2016 'cmdcolwidth' : '列幅リセット', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'フルスクリーン', // from v2.1.15 added 03.08.2016 'cmdmove' : '移動', // from v2.1.15 added 21.08.2016 'cmdempty' : 'フォルダを空に', // from v2.1.25 added 22.06.2017 'cmdundo' : '元に戻す', // from v2.1.27 added 31.07.2017 'cmdredo' : 'やり直し', // from v2.1.27 added 31.07.2017 'cmdpreference': '個人設定', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'すべて選択', // from v2.1.28 added 15.08.2017 'cmdselectnone': '選択解除', // from v2.1.28 added 15.08.2017 'cmdselectinvert': '選択を反転', // from v2.1.28 added 15.08.2017 'cmdopennew' : '新しいウィンドウで開く', // from v2.1.38 added 3.4.2018 'cmdhide' : '非表示 (個人設定)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : '閉じる', 'btnSave' : '保存', 'btnRm' : '削除', 'btnApply' : '適用', 'btnCancel' : 'キャンセル', 'btnNo' : 'いいえ', 'btnYes' : 'はい', 'btnMount' : 'マウント', // added 18.04.2012 'btnApprove': '$1へ行き認可する', // from v2.1 added 26.04.2012 'btnUnmount': 'アンマウント', // from v2.1 added 30.04.2012 'btnConv' : '変換', // from v2.1 added 08.04.2014 'btnCwd' : 'この場所', // from v2.1 added 22.5.2015 'btnVolume' : 'ボリューム', // from v2.1 added 22.5.2015 'btnAll' : '全て', // from v2.1 added 22.5.2015 'btnMime' : 'MIMEタイプ', // from v2.1 added 22.5.2015 'btnFileName':'ファイル名', // from v2.1 added 22.5.2015 'btnSaveClose': '保存して閉じる', // from v2.1 added 12.6.2015 'btnBackup' : 'バックアップ', // fromv2.1 added 28.11.2015 'btnRename' : 'リネーム', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'リネーム(全て)', // from v2.1.24 added 6.4.2017 'btnPrevious' : '前へ ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : '次へ ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : '別名保存', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'フォルダを開いています', 'ntffile' : 'ファイルを開いています', 'ntfreload' : 'フォルダを再読込しています', 'ntfmkdir' : 'フォルダを作成しています', 'ntfmkfile' : 'ファイルを作成しています', 'ntfrm' : 'アイテムを削除しています', 'ntfcopy' : 'アイテムをコピーしています', 'ntfmove' : 'アイテムを移動しています', 'ntfprepare' : '既存アイテムを確認しています', 'ntfrename' : 'ファイル名を変更しています', 'ntfupload' : 'ファイルをアップロードしています', 'ntfdownload' : 'ファイルをダウンロードしています', 'ntfsave' : 'ファイルを保存しています', 'ntfarchive' : 'アーカイブ作成しています', 'ntfextract' : 'アーカイブを解凍しています', 'ntfsearch' : 'ファイル検索中', 'ntfresize' : 'リサイズしています', 'ntfsmth' : '処理をしています', 'ntfloadimg' : 'イメージを読み込んでいます', 'ntfnetmount' : 'ネットボリュームをマウント中', // added 18.04.2012 'ntfnetunmount': 'ネットボリュームをアンマウント中', // from v2.1 added 30.04.2012 'ntfdim' : '画像サイズを取得しています', // added 20.05.2013 'ntfreaddir' : 'フォルダ情報を読み取っています', // from v2.1 added 01.07.2013 'ntfurl' : 'リンクURLを取得しています', // from v2.1 added 11.03.2014 'ntfchmod' : 'ファイル属性を変更しています', // from v2.1 added 20.6.2015 'ntfpreupload': 'アップロードファイル名を検証中', // from v2.1 added 31.11.2015 'ntfzipdl' : 'ダウンロード用ファイルを作成中', // from v2.1.7 added 23.1.2016 'ntfparents' : 'パス情報を取得しています', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'アップロード済みファイルを処理中', // from v2.1.17 added 2.11.2016 'ntftrash' : 'ごみ箱に入れています', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'ごみ箱から元に戻しています', // from v2.1.24 added 3.5.2017 'ntfchkdir' : '宛先フォルダを確認しています', // from v2.1.24 added 3.5.2017 'ntfundo' : '前の操作を取り消して元に戻しています', // from v2.1.27 added 31.07.2017 'ntfredo' : '元に戻した操作をやり直しています', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'コンテンツをチェックしています', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'ごみ箱', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : '不明', 'Today' : '今日', 'Yesterday' : '昨日', 'msJan' : '1月', 'msFeb' : '2月', 'msMar' : '3月', 'msApr' : '4月', 'msMay' : '5月', 'msJun' : '6月', 'msJul' : '7月', 'msAug' : '8月', 'msSep' : '9月', 'msOct' : '10月', 'msNov' : '11月', 'msDec' : '12月', 'January' : '1月', 'February' : '2月', 'March' : '3月', 'April' : '4月', 'May' : '5月', 'June' : '6月', 'July' : '7月', 'August' : '8月', 'September' : '9月', 'October' : '10月', 'November' : '11月', 'December' : '12月', 'Sunday' : '日曜日', 'Monday' : '月曜日', 'Tuesday' : '火曜日', 'Wednesday' : '水曜日', 'Thursday' : '木曜日', 'Friday' : '金曜日', 'Saturday' : '土曜日', 'Sun' : '(日)', 'Mon' : '(月)', 'Tue' : '(火)', 'Wed' : '(水)', 'Thu' : '(木)', 'Fri' : '(金)', 'Sat' : '(土)', /******************************** sort variants ********************************/ 'sortname' : '名前順', 'sortkind' : '種類順', 'sortsize' : 'サイズ順', 'sortdate' : '日付順', 'sortFoldersFirst' : 'フォルダ優先', 'sortperm' : '権限順', // from v2.1.13 added 13.06.2016 'sortmode' : '属性順', // from v2.1.13 added 13.06.2016 'sortowner' : 'オーナー順', // from v2.1.13 added 13.06.2016 'sortgroup' : 'グループ順', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'ツリービューも', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : '新規ファイル.txt', // added 10.11.2015 'untitled folder' : '新規フォルダ', // added 10.11.2015 'Archive' : '新規アーカイブ', // from v2.1 added 10.11.2015 'untitled file' : '新規ファイル.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: ファイル', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : '処理を実行しますか?', 'confirmRm' : 'アイテムを完全に削除してもよろしいですか?
    この操作は取り消しできません!', 'confirmRepl' : '古いファイルを新しいファイルで上書きしますか? (フォルダが含まれている場合は統合されます。置き換える場合は「バックアップ」選択してください。)', 'confirmRest' : '既存のアイテムをごみ箱のアイテムで上書きしますか?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8 以外の文字が含まれています。
    UTF-8 に変換しますか?
    変換後の保存でコンテンツは UTF-8 になります。', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'このファイルの文字エンコーディングを判別できませんでした。編集するには一時的に UTF-8 に変換する必要があります。
    文字エンコーディングを指定してください。', // from v2.1.19 added 28.11.2016 'confirmNotSave' : '変更されています。
    保存せずに閉じると編集内容が失われます。', // from v2.1 added 15.7.2015 'confirmTrash' : 'アイテムをごみ箱に移動してもよろしいですか?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'アイテムを"$1"に移動してもよろしいですか?', //from v2.1.50 added 27.7.2019 'apllyAll' : '全てに適用します', 'name' : '名前', 'size' : 'サイズ', 'perms' : '権限', 'modify' : '更新', 'kind' : '種類', 'read' : '読み取り', 'write' : '書き込み', 'noaccess' : 'アクセス禁止', 'and' : ',', 'unknown' : '不明', 'selectall' : 'すべてのアイテムを選択', 'selectfiles' : 'アイテム選択', 'selectffile' : '最初のアイテムを選択', 'selectlfile' : '最後のアイテムを選択', 'viewlist' : 'リスト形式で表示', 'viewicons' : 'アイコン形式で表示', 'viewSmall' : '小アイコン', // from v2.1.39 added 22.5.2018 'viewMedium' : '中アイコン', // from v2.1.39 added 22.5.2018 'viewLarge' : '大アイコン', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : '特大アイコン', // from v2.1.39 added 22.5.2018 'places' : 'よく使う項目', 'calc' : '計算中', 'path' : 'パス', 'aliasfor' : 'エイリアス', 'locked' : 'ロック', 'dim' : '画素数', 'files' : 'ファイル', 'folders' : 'フォルダ', 'items' : 'アイテム', 'yes' : 'はい', 'no' : 'いいえ', 'link' : 'リンク', 'searcresult' : '検索結果', 'selected' : '選択されたアイテム', 'about' : '概要', 'shortcuts' : 'ショートカット', 'help' : 'ヘルプ', 'webfm' : 'ウェブファイルマネージャー', 'ver' : 'バージョン', 'protocolver' : 'プロトコルバージョン', 'homepage' : 'プロジェクトホーム', 'docs' : 'ドキュメンテーション', 'github' : 'Github でフォーク', 'twitter' : 'Twitter でフォロー', 'facebook' : 'Facebookグループ に参加', 'team' : 'チーム', 'chiefdev' : 'チーフデベロッパー', 'developer' : 'デベロッパー', 'contributor' : 'コントリビュータ', 'maintainer' : 'メインテナー', 'translator' : '翻訳者', 'icons' : 'アイコン', 'dontforget' : 'タオル忘れちゃだめよ~', 'shortcutsof' : 'ショートカットは利用できません', 'dropFiles' : 'ここにファイルをドロップ', 'or' : 'または', 'selectForUpload' : 'ファイルを選択', 'moveFiles' : 'アイテムを移動', 'copyFiles' : 'アイテムをコピー', 'restoreFiles' : 'アイテムを元に戻す', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'ここから削除', 'aspectRatio' : '縦横比維持', 'scale' : '表示縮尺', 'width' : '幅', 'height' : '高さ', 'resize' : 'リサイズ', 'crop' : '切り抜き', 'rotate' : '回転', 'rotate-cw' : '90度左回転', 'rotate-ccw' : '90度右回転', 'degree' : '度', 'netMountDialogTitle' : 'ネットワークボリュームのマウント', // added 18.04.2012 'protocol' : 'プロトコル', // added 18.04.2012 'host' : 'ホスト名', // added 18.04.2012 'port' : 'ポート', // added 18.04.2012 'user' : 'ユーザー名', // added 18.04.2012 'pass' : 'パスワード', // added 18.04.2012 'confirmUnmount' : '$1をアンマウントしますか?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'ブラウザからファイルをドロップまたは貼り付け', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'ここにファイルをドロップ または URLリスト, 画像(クリップボード) を貼り付け', // from v2.1 added 07.04.2014 'encoding' : 'エンコーディング', // from v2.1 added 19.12.2014 'locale' : 'ロケール', // from v2.1 added 19.12.2014 'searchTarget' : '検索範囲: $1', // from v2.1 added 22.5.2015 'searchMime' : '指定した MIME タイプで検索', // from v2.1 added 22.5.2015 'owner' : 'オーナー', // from v2.1 added 20.6.2015 'group' : 'グループ', // from v2.1 added 20.6.2015 'other' : 'その他', // from v2.1 added 20.6.2015 'execute' : '実行', // from v2.1 added 20.6.2015 'perm' : 'パーミッション', // from v2.1 added 20.6.2015 'mode' : '属性', // from v2.1 added 20.6.2015 'emptyFolder' : '空のフォルダ', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : '空のフォルダ\\Aアイテムを追加するにはここへドロップ', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : '空のフォルダ\\Aアイテムを追加するにはここをロングタップ', // from v2.1.6 added 30.12.2015 'quality' : '品質', // from v2.1.6 added 5.1.2016 'autoSync' : '自動更新', // from v2.1.6 added 10.1.2016 'moveUp' : '上へ移動', // from v2.1.6 added 18.1.2016 'getLink' : 'リンクURLを取得', // from v2.1.7 added 9.2.2016 'selectedItems' : '選択アイテム ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'フォルダID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'オフライン アクセスを可能にする', // from v2.1.10 added 3.25.2016 'reAuth' : '再認証する', // from v2.1.10 added 3.25.2016 'nowLoading' : '読み込んでいます...', // from v2.1.12 added 4.26.2016 'openMulti' : '複数ファイルオープン', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '$1 個のファイルを開こうとしています。このままブラウザで開きますか?', // from v2.1.12 added 5.14.2016 'emptySearch' : '検索対象に該当するアイテムはありません。', // from v2.1.12 added 5.16.2016 'editingFile' : 'ファイルを編集中です。', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 個のアイテムを選択中です。', // from v2.1.13 added 6.3.2016 'hasClipboard' : '$1 個のアイテムがクリップボードに入っています。', // from v2.1.13 added 6.3.2016 'incSearchOnly' : '逐次検索対象は現在のビューのみです。', // from v2.1.13 added 6.30.2016 'reinstate' : '元に戻す', // from v2.1.15 added 3.8.2016 'complete' : '$1 完了', // from v2.1.15 added 21.8.2016 'contextmenu' : 'コンテキストメニュー', // from v2.1.15 added 9.9.2016 'pageTurning' : 'ページめくり', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'ボリュームルート', // from v2.1.16 added 16.9.2016 'reset' : 'リセット', // from v2.1.16 added 1.10.2016 'bgcolor' : '背景色', // from v2.1.16 added 1.10.2016 'colorPicker' : 'カラーピッカー', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8pxグリッド', // from v2.1.16 added 4.10.2016 'enabled' : '有効', // from v2.1.16 added 4.10.2016 'disabled' : '無効', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : '現在のビュー内に該当するアイテムはありません。\\A[Enter]キーで検索対象を拡げます。', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : '現在のビュー内に指定された文字で始まるアイテムはありません。', // from v2.1.23 added 24.3.2017 'textLabel' : 'テキストラベル', // from v2.1.17 added 13.10.2016 'minsLeft' : '残り$1分', // from v2.1.17 added 13.11.2016 'openAsEncoding' : '選択したエンコーディングで開き直す', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : '選択したエンコーディングで保存', // from v2.1.19 added 2.12.2016 'selectFolder' : 'フォルダを選択', // from v2.1.20 added 13.12.2016 'firstLetterSearch': '一文字目で検索', // from v2.1.23 added 24.3.2017 'presets' : 'プリセット', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'アイテム数が多すぎるのでごみ箱に入れられません。', // from v2.1.25 added 9.6.2017 'TextArea' : 'テキストエリア', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'フォルダ"$1"を空にします。', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'フォルダ"$1"にアイテムはありません。', // from v2.1.25 added 22.6.2017 'preference' : '個人設定', // from v2.1.26 added 28.6.2017 'language' : '言語', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'ブラウザに保存された設定を初期化する', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'ツールバー設定', // from v2.1.27 added 2.8.2017 'charsLeft' : '... 残り $1 文字', // from v2.1.29 added 30.8.2017 'linesLeft' : '... 残り $1 行', // from v2.1.52 added 16.1.2020 'sum' : '合計', // from v2.1.29 added 28.9.2017 'roughFileSize' : '大まかなファイルサイズ', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'マウスオーバーでダイアログの要素にフォーカスする', // from v2.1.30 added 2.11.2017 'select' : '選択', // from v2.1.30 added 23.11.2017 'selectAction' : 'ファイル選択時の動作', // from v2.1.30 added 23.11.2017 'useStoredEditor' : '前回使用したエディターで開く', // from v2.1.30 added 23.11.2017 'selectinvert' : '選択アイテムを反転', // from v2.1.30 added 25.11.2017 'renameMultiple' : '選択した $1 個のアイテムを $2 のようにリネームしますか?
    この操作は取り消しできません!', // from v2.1.31 added 4.12.2017 'batchRename' : '一括リネーム', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ 連番', // from v2.1.31 added 8.12.2017 'asPrefix' : '先頭に追加', // from v2.1.31 added 8.12.2017 'asSuffix' : '末尾に追加', // from v2.1.31 added 8.12.2017 'changeExtention' : '拡張子変更', // from v2.1.31 added 8.12.2017 'columnPref' : '列項目設定(リストビュー)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : '全ての変更は、直ちにアーカイブに反映されます。', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'このボリュームをアンマウントするまで、変更は反映されません。', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'このボリュームにマウントされている以下のボリュームもアンマウントされます。アンマウントしますか?', // from v2.1.33 added 5.3.2018 'selectionInfo' : '選択情報', // from v2.1.33 added 7.3.2018 'hashChecker' : 'ファイルハッシュを表示するアルゴリズム', // from v2.1.33 added 10.3.2018 'infoItems' : '情報項目 (選択情報パネル)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'もう一度押すと終了します。', // from v2.1.38 added 1.4.2018 'toolbar' : 'ツールバー', // from v2.1.38 added 4.4.2018 'workspace' : 'ワークスペース', // from v2.1.38 added 4.4.2018 'dialog' : 'ダイアログ', // from v2.1.38 added 4.4.2018 'all' : 'すべて', // from v2.1.38 added 4.4.2018 'iconSize' : 'アイコンサイズ (アイコンビュー)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'エディターウィンドウを最大化して開く', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : '現在 API による変換は利用できないので、Web サイトで変換を行ってください。', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : '変換後に変換されたファイルを保存するには、アイテムの URL またはダウンロードしたファイルをアップロードする必要があります。', //from v2.1.40 added 8.7.2018 'convertOn' : '$1 のサイト上で変換する', // from v2.1.40 added 10.7.2018 'integrations' : '統合', // from v2.1.40 added 11.7.2018 'integrationWith' : 'この elFinder は次の外部サービスが統合されています。それらの利用規約、プライバシーポリシーなどをご確認の上、ご利用ください。', // from v2.1.40 added 11.7.2018 'showHidden' : '非表示アイテムを表示', // from v2.1.41 added 24.7.2018 'hideHidden' : '非表示アイテムを隠す', // from v2.1.41 added 24.7.2018 'toggleHidden' : '非表示アイテムの表示/非表示', // from v2.1.41 added 24.7.2018 'makefileTypes' : '「新しいファイル」で有効にするファイルタイプ', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'テキストファイルのタイプ', // from v2.1.41 added 7.8.2018 'add' : '追加', // from v2.1.41 added 7.8.2018 'theme' : 'テーマ', // from v2.1.43 added 19.10.2018 'default' : 'デフォルト', // from v2.1.43 added 19.10.2018 'description' : '説明', // from v2.1.43 added 19.10.2018 'website' : 'ウェブサイト', // from v2.1.43 added 19.10.2018 'author' : '作者', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'ライセンス', // from v2.1.43 added 19.10.2018 'exportToSave' : 'このアイテムは保存できません。 編集内容を失わないようにするには、PCにエクスポートする必要があります。', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'ファイルをダブルクリックして選択します。', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'フルスクリーンモードの利用', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : '不明', 'kindRoot' : 'ボリュームルート', // from v2.1.16 added 16.10.2016 'kindFolder' : 'フォルダ', 'kindSelects' : '複数選択', // from v2.1.29 added 29.8.2017 'kindAlias' : '別名', 'kindAliasBroken' : '宛先不明の別名', // applications 'kindApp' : 'アプリケーション', 'kindPostscript' : 'Postscript ドキュメント', 'kindMsOffice' : 'Microsoft Office ドキュメント', 'kindMsWord' : 'Microsoft Word ドキュメント', 'kindMsExcel' : 'Microsoft Excel ドキュメント', 'kindMsPP' : 'Microsoft Powerpoint プレゼンテーション', 'kindOO' : 'Open Office ドキュメント', 'kindAppFlash' : 'Flash アプリケーション', 'kindPDF' : 'PDF', 'kindTorrent' : 'Bittorrent ファイル', 'kind7z' : '7z アーカイブ', 'kindTAR' : 'TAR アーカイブ', 'kindGZIP' : 'GZIP アーカイブ', 'kindBZIP' : 'BZIP アーカイブ', 'kindXZ' : 'XZ アーカイブ', 'kindZIP' : 'ZIP アーカイブ', 'kindRAR' : 'RAR アーカイブ', 'kindJAR' : 'Java JAR ファイル', 'kindTTF' : 'True Type フォント', 'kindOTF' : 'Open Type フォント', 'kindRPM' : 'RPM パッケージ', // texts 'kindText' : 'Text ドキュメント', 'kindTextPlain' : 'プレインテキスト', 'kindPHP' : 'PHP ソース', 'kindCSS' : 'スタイルシート', 'kindHTML' : 'HTML ドキュメント', 'kindJS' : 'Javascript ソース', 'kindRTF' : 'Rich Text フォーマット', 'kindC' : 'C ソース', 'kindCHeader' : 'C ヘッダーソース', 'kindCPP' : 'C++ ソース', 'kindCPPHeader' : 'C++ ヘッダーソース', 'kindShell' : 'Unix shell スクリプト', 'kindPython' : 'Python ソース', 'kindJava' : 'Java ソース', 'kindRuby' : 'Ruby ソース', 'kindPerl' : 'Perl スクリプト', 'kindSQL' : 'SQL ソース', 'kindXML' : 'XML ドキュメント', 'kindAWK' : 'AWK ソース', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Docbook XML ドキュメント', 'kindMarkdown' : 'Markdown テキスト', // added 20.7.2015 // images 'kindImage' : 'イメージ', 'kindBMP' : 'BMP イメージ', 'kindJPEG' : 'JPEG イメージ', 'kindGIF' : 'GIF イメージ', 'kindPNG' : 'PNG イメージ', 'kindTIFF' : 'TIFF イメージ', 'kindTGA' : 'TGA イメージ', 'kindPSD' : 'Adobe Photoshop イメージ', 'kindXBITMAP' : 'X bitmap イメージ', 'kindPXM' : 'Pixelmator イメージ', // media 'kindAudio' : 'オーディオメディア', 'kindAudioMPEG' : 'MPEG オーディオ', 'kindAudioMPEG4' : 'MPEG-4 オーディオ', 'kindAudioMIDI' : 'MIDI オーディオ', 'kindAudioOGG' : 'Ogg Vorbis オーディオ', 'kindAudioWAV' : 'WAV オーディオ', 'AudioPlaylist' : 'MP3 プレイリスト', 'kindVideo' : 'ビデオメディア', 'kindVideoDV' : 'DV ムービー', 'kindVideoMPEG' : 'MPEG ムービー', 'kindVideoMPEG4' : 'MPEG-4 ムービー', 'kindVideoAVI' : 'AVI ムービー', 'kindVideoMOV' : 'Quick Time ムービー', 'kindVideoWM' : 'Windows Media ムービー', 'kindVideoFlash' : 'Flash ムービー', 'kindVideoMKV' : 'Matroska ムービー', 'kindVideoOGG' : 'Ogg ムービー' } }; })); application/library/js/i18n/elfinder.zh_CN.js000064400000077114146731177160015063 0ustar00/** * 简体中文 translation * @author 翻译者 deerchao * @author Andy Hu * @author Max Wen * @author Kejun Chang * @author LDMING * @author Andy Lee * @author Cololi * @version 2020-04-07 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.zh_CN = { translator : '翻译者 deerchao <deerchao@gmail.com>, Andy Hu <andyhu7@yahoo.com.hk>, Max Wen<max.wen@qq.com>, Kejun Chang <changkejun@hotmail.com>, LDMING <china-live@live.cn>, Andy Lee <oraclei@126.com>, Cololi <i@cololi.moe>', language : '简体中文', direction : 'ltr', dateFormat : 'Y-m-d H:i', // will show like: 2020-04-07 14:53 fancyDateFormat : '$1 H:i', // will show like: 今天 14:53 nonameDateFormat : 'ymd-His', // noname upload will show like: 200407-145300 messages : { /********************************** errors **********************************/ 'error' : '错误', 'errUnknown' : '未知的错误.', 'errUnknownCmd' : '未知的命令.', 'errJqui' : '无效的 jQuery UI 配置,必须包含 Selectable、draggable 以及 droppable 组件.', 'errNode' : 'elFinder 需要能创建 DOM 元素.', 'errURL' : '无效的 elFinder 配置! URL 选项未配置.', 'errAccess' : '访问被拒绝.', 'errConnect' : '不能连接到服务器端.', 'errAbort' : '连接中止.', 'errTimeout' : '连接超时.', 'errNotFound' : '未找到服务器端.', 'errResponse' : '无效的服务器端响应.', 'errConf' : '无效的服务器端配置.', 'errJSON' : 'PHP JSON 模块未安装.', 'errNoVolumes' : '无可读的卷.', 'errCmdParams' : '无效的命令 "$1".', 'errDataNotJSON' : '服务器返回的数据不符合 JSON 格式.', 'errDataEmpty' : '服务器返回的数据为空.', 'errCmdReq' : '服务器端请求需要命令名称.', 'errOpen' : '无法打开 "$1".', 'errNotFolder' : '对象不是文件夹.', 'errNotFile' : '对象不是文件.', 'errRead' : '无法读取 "$1".', 'errWrite' : '无法写入 "$1".', 'errPerm' : '没有权限.', 'errLocked' : '"$1" 已被锁定,不能重命名, 移动或删除.', 'errExists' : '文件 "$1" 已经存在.', 'errInvName' : '无效的文件名.', 'errInvDirname' : '无效的文件夹名.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : '文件夹不存在.', 'errFileNotFound' : '文件不存在.', 'errTrgFolderNotFound' : '未找到目标文件夹 "$1".', 'errPopup' : '浏览器拦截了弹出窗口. 请在选项中允许弹出窗口.', 'errMkdir' : '不能创建文件夹 "$1".', 'errMkfile' : '不能创建文件 "$1".', 'errRename' : '不能重命名 "$1".', 'errCopyFrom' : '不允许从卷 "$1" 复制.', 'errCopyTo' : '不允许向卷 "$1" 复制.', 'errMkOutLink' : '无法创建链接到卷根以外的链接.', // from v2.1 added 03.10.2015 'errUpload' : '上传出错.', // old name - errUploadCommon 'errUploadFile' : '无法上传 "$1".', // old name - errUpload 'errUploadNoFiles' : '未找到要上传的文件.', 'errUploadTotalSize' : '数据超过了允许的最大大小.', // old name - errMaxSize 'errUploadFileSize' : '文件超过了允许的最大大小.', // old name - errFileMaxSize 'errUploadMime' : '不允许的文件类型.', 'errUploadTransfer' : '"$1" 传输错误.', 'errUploadTemp' : '无法为上传文件创建临时文件.', // from v2.1 added 26.09.2015 'errNotReplace' : ' "$1" 已存在, 不能被替换.', // new 'errReplace' : '无法替换 "$1".', 'errSave' : '无法保存 "$1".', 'errCopy' : '无法复制 "$1".', 'errMove' : '无法移动 "$1".', 'errCopyInItself' : '不能移动 "$1" 到原有位置.', 'errRm' : '无法删除 "$1".', 'errTrash' : '无法移到回收站.', // from v2.1.24 added 30.4.2017 'errRmSrc' : '不能删除源文件.', 'errExtract' : '无法从 "$1" 提取文件.', 'errArchive' : '无法创建压缩包.', 'errArcType' : '不支持的压缩格式.', 'errNoArchive' : '文件不是压缩包, 或者不支持该压缩格式.', 'errCmdNoSupport' : '服务器端不支持该命令.', 'errReplByChild' : '不能用文件夹 “$1” 下的项替换文件夹 “$1” 自身.', 'errArcSymlinks' : '出于安全上的考虑,不允许解压包含符号链接的压缩包.', // edited 24.06.2012 'errArcMaxSize' : '压缩包文件超过最大允许文件大小范围.', 'errResize' : '无法将调整大小到 "$1".', 'errResizeDegree' : '无效的旋转角度.', // added 7.3.2013 'errResizeRotate' : '无法旋转图片.', // added 7.3.2013 'errResizeSize' : '无效的图片尺寸.', // added 7.3.2013 'errResizeNoChange' : '图片尺寸未改变.', // added 7.3.2013 'errUsupportType' : '不被支持的文件格式.', 'errNotUTF8Content' : '文件 "$1" 不是 UTF-8 格式, 不能编辑.', // added 9.11.2011 'errNetMount' : '无法装载 "$1".', // added 17.04.2012 'errNetMountNoDriver' : '不支持该协议.', // added 17.04.2012 'errNetMountFailed' : '装载失败.', // added 17.04.2012 'errNetMountHostReq' : '需要指定主机.', // added 18.04.2012 'errSessionExpires' : '您的会话由于长时间未活动已过期.', 'errCreatingTempDir' : '无法创建临时目录 "$1"', 'errFtpDownloadFile' : '无法从FTP下载文件 "$1" ', 'errFtpUploadFile' : '无法将文件 "$1" 上传至FTP', 'errFtpMkdir' : '无法在FTP上创建远程目录 "$1"', 'errArchiveExec' : '归档文件"$1"时出错.', 'errExtractExec' : '解压文件"$1"时出错.', 'errNetUnMount' : '无法卸载.', // from v2.1 added 30.04.2012 'errConvUTF8' : '未转换至UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : '如果您需要上传目录, 请尝试使用Google Chrome.', // from v2.1 added 26.6.2015 'errSearchTimeout' : '搜索 "$1" 超时,仅显示部分搜索结果.', // from v2.1 added 12.1.2016 'errReauthRequire' : '必需重新授权.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : '最大可选择项目数为 $1.', // from v2.1.17 added 17.10.2016 'errRestore' : '无法从回收站中恢复,无法识别还原目的地.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : '找不到这个文件的编辑器.', // from v2.1.25 added 23.5.2017 'errServerError' : '服务端发生错误.', // from v2.1.25 added 16.6.2017 'errEmpty' : '无法清空文件夹 "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : '存在 $1 多个错误.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : '创建压缩包', 'cmdback' : '后退', 'cmdcopy' : '复制', 'cmdcut' : '剪切', 'cmddownload' : '下载', 'cmdduplicate' : '创建副本', 'cmdedit' : '编辑文件', 'cmdextract' : '从压缩包提取文件', 'cmdforward' : '前进', 'cmdgetfile' : '选择文件', 'cmdhelp' : '关于', 'cmdhome' : '首页', 'cmdinfo' : '查看详情', 'cmdmkdir' : '新建文件夹', 'cmdmkdirin' : '至新文件夹', // from v2.1.7 added 19.2.2016 'cmdmkfile' : '新建文件', 'cmdopen' : '打开', 'cmdpaste' : '粘贴', 'cmdquicklook' : '预览', 'cmdreload' : '刷新', 'cmdrename' : '重命名', 'cmdrm' : '删除', 'cmdtrash' : '至回收站', //from v2.1.24 added 29.4.2017 'cmdrestore' : '恢复', //from v2.1.24 added 3.5.2017 'cmdsearch' : '查找文件', 'cmdup' : '转到上一级文件夹', 'cmdupload' : '上传文件', 'cmdview' : '查看', 'cmdresize' : '调整大小&旋转', 'cmdsort' : '排序', 'cmdnetmount' : '装载网络卷', // added 18.04.2012 'cmdnetunmount': '卸载', // from v2.1 added 30.04.2012 'cmdplaces' : '添加到收藏夹', // added 28.12.2014 'cmdchmod' : '改变模式', // from v2.1 added 20.6.2015 'cmdopendir' : '打开文件夹', // from v2.1 added 13.1.2016 'cmdcolwidth' : '设置列宽', // from v2.1.13 added 12.06.2016 'cmdfullscreen': '全屏显示', // from v2.1.15 added 03.08.2016 'cmdmove' : '移动', // from v2.1.15 added 21.08.2016 'cmdempty' : '清空文件夹', // from v2.1.25 added 22.06.2017 'cmdundo' : '撤消', // from v2.1.27 added 31.07.2017 'cmdredo' : '重做', // from v2.1.27 added 31.07.2017 'cmdpreference': '偏好', // from v2.1.27 added 03.08.2017 'cmdselectall' : '全选', // from v2.1.28 added 15.08.2017 'cmdselectnone': '全不选', // from v2.1.28 added 15.08.2017 'cmdselectinvert': '反向选择', // from v2.1.28 added 15.08.2017 'cmdopennew' : '在新窗口打开', // from v2.1.38 added 3.4.2018 'cmdhide' : '隐藏 (偏好)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : '关闭', 'btnSave' : '保存', 'btnRm' : '删除', 'btnApply' : '应用', 'btnCancel' : '取消', 'btnNo' : '否', 'btnYes' : '是', 'btnMount' : '装载', // added 18.04.2012 'btnApprove': '至 $1 并确认', // from v2.1 added 26.04.2012 'btnUnmount': '卸载', // from v2.1 added 30.04.2012 'btnConv' : '转换', // from v2.1 added 08.04.2014 'btnCwd' : '这里', // from v2.1 added 22.5.2015 'btnVolume' : '卷', // from v2.1 added 22.5.2015 'btnAll' : '全部', // from v2.1 added 22.5.2015 'btnMime' : 'MIME类型', // from v2.1 added 22.5.2015 'btnFileName':'文件名', // from v2.1 added 22.5.2015 'btnSaveClose': '保存并关闭', // from v2.1 added 12.6.2015 'btnBackup' : '备份', // fromv2.1 added 28.11.2015 'btnRename' : '重命名', // from v2.1.24 added 6.4.2017 'btnRenameAll' : '重命名(All)', // from v2.1.24 added 6.4.2017 'btnPrevious' : '向前 ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : '向后 ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : '另存为', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : '打开文件夹', 'ntffile' : '打开文件', 'ntfreload' : '刷新文件夹内容', 'ntfmkdir' : '创建文件夹', 'ntfmkfile' : '创建文件', 'ntfrm' : '删除文件', 'ntfcopy' : '复制文件', 'ntfmove' : '移动文件', 'ntfprepare' : '准备复制文件', 'ntfrename' : '重命名文件', 'ntfupload' : '上传文件', 'ntfdownload' : '下载文件', 'ntfsave' : '保存文件', 'ntfarchive' : '创建压缩包', 'ntfextract' : '从压缩包提取文件', 'ntfsearch' : '搜索文件', 'ntfresize' : '正在更改尺寸', 'ntfsmth' : '正在忙 >_<', 'ntfloadimg' : '正在加载图片', 'ntfnetmount' : '正在装载网络卷', // added 18.04.2012 'ntfnetunmount': '卸载网络卷', // from v2.1 added 30.04.2012 'ntfdim' : '获取图像尺寸', // added 20.05.2013 'ntfreaddir' : '正在读取文件夹信息', // from v2.1 added 01.07.2013 'ntfurl' : '正在获取链接地址', // from v2.1 added 11.03.2014 'ntfchmod' : '正在改变文件模式', // from v2.1 added 20.6.2015 'ntfpreupload': '正在验证上传文件名', // from v2.1 added 31.11.2015 'ntfzipdl' : '正在创建一个下载文件', // from v2.1.7 added 23.1.2016 'ntfparents' : '正在取得路径信息', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': '正在处理上传文件', // from v2.1.17 added 2.11.2016 'ntftrash' : '移动到回收站', // from v2.1.24 added 2.5.2017 'ntfrestore' : '从回收站恢复', // from v2.1.24 added 3.5.2017 'ntfchkdir' : '检查目标文件夹', // from v2.1.24 added 3.5.2017 'ntfundo' : '撤消上一个全局操作', // from v2.1.27 added 31.07.2017 'ntfredo' : '重做上一全局操作', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : '检查内容', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : '回收站', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : '未知', 'Today' : '今天', 'Yesterday' : '昨天', 'msJan' : '一月', 'msFeb' : '二月', 'msMar' : '三月', 'msApr' : '四月', 'msMay' : '五月', 'msJun' : '六月', 'msJul' : '七月', 'msAug' : '八月', 'msSep' : '九月', 'msOct' : '十月', 'msNov' : '十一月', 'msDec' : '十二月', 'January' : '一月', 'February' : '二月', 'March' : '三月', 'April' : '四月', 'May' : '五月', 'June' : '六月', 'July' : '七月', 'August' : '八月', 'September' : '九月', 'October' : '十月', 'November' : '十一月', 'December' : '十二月', 'Sunday' : '星期日', 'Monday' : '星期一', 'Tuesday' : '星期二', 'Wednesday' : '星期三', 'Thursday' : '星期四', 'Friday' : '星期五', 'Saturday' : '星期六', 'Sun' : '周日', 'Mon' : '周一', 'Tue' : '周二', 'Wed' : '周三', 'Thu' : '周四', 'Fri' : '周五', 'Sat' : '周六', /******************************** sort variants ********************************/ 'sortname' : '按名称', 'sortkind' : '按类型', 'sortsize' : '按大小', 'sortdate' : '按日期', 'sortFoldersFirst' : '文件夹优先', 'sortperm' : '按权限排序', // from v2.1.13 added 13.06.2016 'sortmode' : '按属性排序', // from v2.1.13 added 13.06.2016 'sortowner' : '按所有者排序', // from v2.1.13 added 13.06.2016 'sortgroup' : '按组排序', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : '同时刷新树状目录', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : '新文件.txt', // added 10.11.2015 'untitled folder' : '新文件夹', // added 10.11.2015 'Archive' : '新压缩包', // from v2.1 added 10.11.2015 'untitled file' : '新文件.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: 文件', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : '请确认', 'confirmRm' : '确定要删除文件吗?
    该操作不可撤销!', 'confirmRepl' : '用新的文件替换原有文件?', 'confirmRest' : '从回收站替换当前项?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : '文件不是UTF-8格式.
    转换为UTF-8吗?
    通过在转换后保存,内容变为UTF-8.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : '无法检测到此文件的字符编码.需要暂时转换此文件为UTF-8编码以进行编辑.
    请选择此文件的字符编码.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : '文件已被编辑.
    如果不保存直接关闭,将丢失编辑内容.', // from v2.1 added 15.7.2015 'confirmTrash' : '确定要将该项移动到回收站么?', //from v2.1.24 added 29.4.2017 'confirmMove' : '确定要移动该项到 "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : '全部应用', 'name' : '名称', 'size' : '大小', 'perms' : '权限', 'modify' : '修改于', 'kind' : '类别', 'read' : '读取', 'write' : '写入', 'noaccess' : '无权限', 'and' : '和', 'unknown' : '未知', 'selectall' : '选择所有文件', 'selectfiles' : '选择文件', 'selectffile' : '选择第一个文件', 'selectlfile' : '选择最后一个文件', 'viewlist' : '列表视图', 'viewicons' : '图标视图', 'viewSmall' : '小图标', // from v2.1.39 added 22.5.2018 'viewMedium' : '中图标', // from v2.1.39 added 22.5.2018 'viewLarge' : '大图标', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : '超大图标', // from v2.1.39 added 22.5.2018 'places' : '位置', 'calc' : '计算', 'path' : '路径', 'aliasfor' : '别名', 'locked' : '锁定', 'dim' : '尺寸', 'files' : '文件', 'folders' : '文件夹', 'items' : '项目', 'yes' : '是', 'no' : '否', 'link' : '链接', 'searcresult' : '搜索结果', 'selected' : '选中的项目', 'about' : '关于', 'shortcuts' : '快捷键', 'help' : '帮助', 'webfm' : '网络文件管理器', 'ver' : '版本', 'protocolver' : '协议版本', 'homepage' : '项目主页', 'docs' : '文档', 'github' : '复刻我们的github', 'twitter' : '关注我们的twitter', 'facebook' : '加入我们的facebook', 'team' : '团队', 'chiefdev' : '首席开发', 'developer' : '开发', 'contributor' : '贡献', 'maintainer' : '维护', 'translator' : '翻译', 'icons' : '图标', 'dontforget' : '别忘了带上你擦汗的毛巾', 'shortcutsof' : '快捷键已禁用', 'dropFiles' : '把文件拖到这里', 'or' : '或者', 'selectForUpload' : '选择要上传的文件', 'moveFiles' : '移动文件', 'copyFiles' : '复制文件', 'restoreFiles' : '恢复文件', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : '从这里中删除', 'aspectRatio' : '保持比例', 'scale' : '缩放比例', 'width' : '宽', 'height' : '高', 'resize' : '调整大小', 'crop' : '裁切', 'rotate' : '旋转', 'rotate-cw' : '顺时针旋转90°', 'rotate-ccw' : '逆时针旋转90°', 'degree' : '°', 'netMountDialogTitle' : '装载网络目录', // added 18.04.2012 'protocol' : '协议', // added 18.04.2012 'host' : '主机', // added 18.04.2012 'port' : '端口', // added 18.04.2012 'user' : '用户', // added 18.04.2012 'pass' : '密码', // added 18.04.2012 'confirmUnmount' : '确实要卸载 $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': '从浏览器中拖放或粘贴文件', // from v2.1 added 30.05.2012 'dropPasteFiles' : '拖放文件,粘贴网址或剪贴板图像', // from v2.1 added 07.04.2014 'encoding' : '编码', // from v2.1 added 19.12.2014 'locale' : '语言环境', // from v2.1 added 19.12.2014 'searchTarget' : '目标: $1', // from v2.1 added 22.5.2015 'searchMime' : '按输入MIME类型搜索', // from v2.1 added 22.5.2015 'owner' : '所有者', // from v2.1 added 20.6.2015 'group' : '组', // from v2.1 added 20.6.2015 'other' : '其他', // from v2.1 added 20.6.2015 'execute' : '执行', // from v2.1 added 20.6.2015 'perm' : '许可', // from v2.1 added 20.6.2015 'mode' : '属性', // from v2.1 added 20.6.2015 'emptyFolder' : '文件夹是空的', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : '文件夹是空的\\A 拖放可追加项目', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : '文件夹是空的\\A 长按可添加项目', // from v2.1.6 added 30.12.2015 'quality' : '品质', // from v2.1.6 added 5.1.2016 'autoSync' : '自动同步', // from v2.1.6 added 10.1.2016 'moveUp' : '向上移动', // from v2.1.6 added 18.1.2016 'getLink' : '获取URL链接', // from v2.1.7 added 9.2.2016 'selectedItems' : '已选择项目 ($1)', // from v2.1.7 added 2.19.2016 'folderId' : '目录ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : '允许离线操作', // from v2.1.10 added 3.25.2016 'reAuth' : '重新验证', // from v2.1.10 added 3.25.2016 'nowLoading' : '正在加载...', // from v2.1.12 added 4.26.2016 'openMulti' : '打开多个文件', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '您正在尝试打开$1文件.您确定要在浏览器中打开吗?', // from v2.1.12 added 5.14.2016 'emptySearch' : '搜索目标中没有匹配结果', // from v2.1.12 added 5.16.2016 'editingFile' : '正在编辑文件.', // from v2.1.13 added 6.3.2016 'hasSelected' : '已选择 $1 个项目.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '剪贴板里有 $1 个项目.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : '增量搜索仅来自当前视图.', // from v2.1.13 added 6.30.2016 'reinstate' : '恢复', // from v2.1.15 added 3.8.2016 'complete' : '$1 完成', // from v2.1.15 added 21.8.2016 'contextmenu' : '上下文菜单', // from v2.1.15 added 9.9.2016 'pageTurning' : '翻页', // from v2.1.15 added 10.9.2016 'volumeRoots' : '根目录', // from v2.1.16 added 16.9.2016 'reset' : '重置', // from v2.1.16 added 1.10.2016 'bgcolor' : '背景色', // from v2.1.16 added 1.10.2016 'colorPicker' : '颜色选择器', // from v2.1.16 added 1.10.2016 '8pxgrid' : '步长(8px)', // from v2.1.16 added 4.10.2016 'enabled' : '启用', // from v2.1.16 added 4.10.2016 'disabled' : '关闭', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : '当前视图下没有匹配结果', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : '当前视图中的第一个字母搜索结果为空', // from v2.1.23 added 24.3.2017 'textLabel' : '文本标签', // from v2.1.17 added 13.10.2016 'minsLeft' : '剩余 $1 分钟', // from v2.1.17 added 13.11.2016 'openAsEncoding' : '使用所选编码重新打开', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : '使用所选编码保存', // from v2.1.19 added 2.12.2016 'selectFolder' : '选择目录', // from v2.1.20 added 13.12.2016 'firstLetterSearch': '首字母搜索', // from v2.1.23 added 24.3.2017 'presets' : '预置', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : '项目太多,不能移动到回收站.', // from v2.1.25 added 9.6.2017 'TextArea' : '文本区域', // from v2.1.25 added 14.6.2017 'folderToEmpty' : '清空文件夹 "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '文件夹 "$1" 为空.', // from v2.1.25 added 22.6.2017 'preference' : '偏好', // from v2.1.26 added 28.6.2017 'language' : '语言设置', // from v2.1.26 added 28.6.2017 'clearBrowserData': '清除保存在此浏览器中的偏好设置', // from v2.1.26 added 28.6.2017 'toolbarPref' : '工具栏设置', // from v2.1.27 added 2.8.2017 'charsLeft' : '... 剩余$1字符', // from v2.1.29 added 30.8.2017 'linesLeft' : '... 剩余$1行', // from v2.1.52 added 16.1.2020 'sum' : '总数', // from v2.1.29 added 28.9.2017 'roughFileSize' : '粗略的文件大小', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : '鼠标悬停在对话框内可编辑区域时自动获得焦点', // from v2.1.30 added 2.11.2017 'select' : '选择', // from v2.1.30 added 23.11.2017 'selectAction' : '双击选择的文件时', // from v2.1.30 added 23.11.2017 'useStoredEditor' : '用上次使用的编辑器打开', // from v2.1.30 added 23.11.2017 'selectinvert' : '反向选择', // from v2.1.30 added 25.11.2017 'renameMultiple' : '确定要重命名选定项 $1 为 $2 吗?
    该操作不能撤消!', // from v2.1.31 added 4.12.2017 'batchRename' : '批量重命名', // from v2.1.31 added 8.12.2017 'plusNumber' : '增加数量', // from v2.1.31 added 8.12.2017 'asPrefix' : '添加前缀', // from v2.1.31 added 8.12.2017 'asSuffix' : '添加后缀', // from v2.1.31 added 8.12.2017 'changeExtention' : '变化范围', // from v2.1.31 added 8.12.2017 'columnPref' : '列设置 (列表视图)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : '所有修改将立即反馈到文档.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : '所有修改在卸载本卷之前不会反馈', // from v2.1.33 added 2.3.2018 'unmountChildren' : '安装在本卷上的以下卷也会卸载.你确定要卸载吗?', // from v2.1.33 added 5.3.2018 'selectionInfo' : '选择信息', // from v2.1.33 added 7.3.2018 'hashChecker' : '显示文件散列值的算法', // from v2.1.33 added 10.3.2018 'infoItems' : '信息条目 (选择信息面板)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': '再按退出', // from v2.1.38 added 1.4.2018 'toolbar' : '工具条', // from v2.1.38 added 4.4.2018 'workspace' : '工作空间', // from v2.1.38 added 4.4.2018 'dialog' : '对话框', // from v2.1.38 added 4.4.2018 'all' : '全部', // from v2.1.38 added 4.4.2018 'iconSize' : '图标尺寸 (图标视图)', // from v2.1.39 added 7.5.2018 'editorMaximized' : '打开最大化编辑器窗口', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : '由于通过 API 转换功能当前不可用,请到网站上转换.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : '转换后,必须上传条目URL或一个下载的文件,以保存转换后的文件.', //from v2.1.40 added 8.7.2018 'convertOn' : '在 $1 站点上转换', // from v2.1.40 added 10.7.2018 'integrations' : '集成', // from v2.1.40 added 11.7.2018 'integrationWith' : '本 elFinder 集成以下外部服务.使用前请检查使用条款、隐私政策等.', // from v2.1.40 added 11.7.2018 'showHidden' : '显示已隐藏的条目', // from v2.1.41 added 24.7.2018 'hideHidden' : '隐藏已隐藏的条目', // from v2.1.41 added 24.7.2018 'toggleHidden' : '显示/隐藏已隐藏的条目', // from v2.1.41 added 24.7.2018 'makefileTypes' : '允许"新文件"使用的文件类型', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : '文本文件类型', // from v2.1.41 added 7.8.2018 'add' : '添加', // from v2.1.41 added 7.8.2018 'theme' : '主题', // from v2.1.43 added 19.10.2018 'default' : '缺省', // from v2.1.43 added 19.10.2018 'description' : '描述', // from v2.1.43 added 19.10.2018 'website' : '网站', // from v2.1.43 added 19.10.2018 'author' : '作者', // from v2.1.43 added 19.10.2018 'email' : '邮箱', // from v2.1.43 added 19.10.2018 'license' : '许可证', // from v2.1.43 added 19.10.2018 'exportToSave' : '本条目不能保存. 为避免丢失编辑数据,须要导出到你的电脑.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': '在文件上双击以选中它.', // from v2.1.47 added 22.1.2019 'useFullscreen' : '使用全屏模式', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : '未知', 'kindRoot' : '根目录', // from v2.1.16 added 16.10.2016 'kindFolder' : '文件夹', 'kindSelects' : '选择', // from v2.1.29 added 29.8.2017 'kindAlias' : '别名', 'kindAliasBroken' : '错误的别名', // applications 'kindApp' : '程序', 'kindPostscript' : 'Postscript 文档', 'kindMsOffice' : 'Microsoft Office 文档', 'kindMsWord' : 'Microsoft Word 文档', 'kindMsExcel' : 'Microsoft Excel 文档', 'kindMsPP' : 'Microsoft Powerpoint 演示', 'kindOO' : 'Open Office 文档', 'kindAppFlash' : 'Flash 程序', 'kindPDF' : 'PDF 文档', 'kindTorrent' : 'Bittorrent 文件', 'kind7z' : '7z 压缩包', 'kindTAR' : 'TAR 压缩包', 'kindGZIP' : 'GZIP 压缩包', 'kindBZIP' : 'BZIP 压缩包', 'kindXZ' : 'XZ 压缩包', 'kindZIP' : 'ZIP 压缩包', 'kindRAR' : 'RAR 压缩包', 'kindJAR' : 'Java JAR 文件', 'kindTTF' : 'True Type 字体', 'kindOTF' : 'Open Type 字体', 'kindRPM' : 'RPM 包', // texts 'kindText' : '文本文件', 'kindTextPlain' : '纯文本', 'kindPHP' : 'PHP 源代码', 'kindCSS' : '层叠样式表(CSS)', 'kindHTML' : 'HTML 文档', 'kindJS' : 'Javascript 源代码', 'kindRTF' : '富文本格式(RTF)', 'kindC' : 'C 源代码', 'kindCHeader' : 'C 头文件', 'kindCPP' : 'C++ 源代码', 'kindCPPHeader' : 'C++ 头文件', 'kindShell' : 'Unix 外壳脚本', 'kindPython' : 'Python 源代码', 'kindJava' : 'Java 源代码', 'kindRuby' : 'Ruby 源代码', 'kindPerl' : 'Perl 源代码', 'kindSQL' : 'SQL 脚本', 'kindXML' : 'XML 文档', 'kindAWK' : 'AWK 源代码', 'kindCSV' : '逗号分隔值文件(CSV)', 'kindDOCBOOK' : 'Docbook XML 文档', 'kindMarkdown' : 'Markdown 文本', // added 20.7.2015 // images 'kindImage' : '图片', 'kindBMP' : 'BMP 图片', 'kindJPEG' : 'JPEG 图片', 'kindGIF' : 'GIF 图片', 'kindPNG' : 'PNG 图片', 'kindTIFF' : 'TIFF 图片', 'kindTGA' : 'TGA 图片', 'kindPSD' : 'Adobe Photoshop 图片', 'kindXBITMAP' : 'X bitmap 图片', 'kindPXM' : 'Pixelmator 图片', // media 'kindAudio' : '音频', 'kindAudioMPEG' : 'MPEG 音频', 'kindAudioMPEG4' : 'MPEG-4 音频', 'kindAudioMIDI' : 'MIDI 音频', 'kindAudioOGG' : 'Ogg Vorbis 音频', 'kindAudioWAV' : 'WAV 音频', 'AudioPlaylist' : 'MP3 播放列表', 'kindVideo' : '视频', 'kindVideoDV' : 'DV 视频', 'kindVideoMPEG' : 'MPEG 视频', 'kindVideoMPEG4' : 'MPEG-4 视频', 'kindVideoAVI' : 'AVI 视频', 'kindVideoMOV' : 'Quick Time 视频', 'kindVideoWM' : 'Windows Media 视频', 'kindVideoFlash' : 'Flash 视频', 'kindVideoMKV' : 'Matroska 视频', 'kindVideoOGG' : 'Ogg 视频' } }; })); application/library/js/i18n/elfinder.ug_CN.js000064400000050160146731177160015045 0ustar00/** * Uyghur translation * @author Alim.Boyaq * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ug_CN = { translator : 'تەرجىمە قىلغۇچى: ئۆتكۈر بىز شىركىتى info@otkur.biz', language : 'ئ‍ۇيغۇرچە', direction : 'rtl', dateFormat : 'Y-m-d H:i', fancyDateFormat : '$1 H:i', messages : { /********************************** errors **********************************/ 'error' : 'خاتالىق', 'errUnknown' : 'كۈتۈلمىگەن خاتالىقكەن.', 'errUnknownCmd' : 'كۈتۈلمىگەن بۇيرۇقكەن.', 'errJqui' : 'jQuery UI تەڭشىكى توغرا بولمىغان. چوقۇم Selectable، draggable، droppabl قاتارلىق بۆلەكلەر بولۇشى كېرەك.', 'errNode' : 'elFinder DOM ئېلىمىنتلىرىنى قۇرالىشى كېرەك.', 'errURL' : 'elFinder تەڭشىكى توغرا بولمىغان! URL تەڭشىكى يېزىلمىغان.', 'errAccess' : 'زىيارەت قىلىش چەكلەنگەن.', 'errConnect' : 'ئارقا سۇپىغا ئۇلاش مەغلۇپ بولدى..', 'errAbort' : 'ئارقا سۇپىغا توختىتىلدى.', 'errTimeout' : 'ئارقا سۇپىغا بەلگىلەنگەن ۋاقىتتا ئۇلىيالمىدى.', 'errNotFound' : 'ئارقا سۇپا تېپىلمىدى.', 'errResponse' : 'ئارقا سۇپىدىن توغرا بولمىغان ئىنكاس قايتتى.', 'errConf' : 'ئارقا سۇپا تەڭشىكى توغرا ئەمەس.', 'errJSON' : 'PHP JSON بۆلىكى قاچىلانمىغان.', 'errNoVolumes' : 'ئوقۇشقا بولىدىغان ھۈججەت خالتىسى يوق.', 'errCmdParams' : 'پارامېتىر خاتا، بۇيرۇق: "$1".', 'errDataNotJSON' : 'ئارقا سۇپا قايتۇرغان سانلىق مەلۇمات توغرا بولغان JSON ئەمەسكەن.', 'errDataEmpty' : 'ئارقا سۇپا قايتۇرغان سانلىق مەلۇمات قۇرۇقكەن.', 'errCmdReq' : 'ئارقا سۇپىدىكى بۇيرۇقنىڭ ئ‍سىمى تەمىنلىنىشى كېرەك.', 'errOpen' : '"$1"نى ئاچالمىدى.', 'errNotFolder' : 'ئوبىكىت مۇندەرىجە ئەمەسكەن.', 'errNotFile' : 'ئوبىكىت ھۈججەت ئەمەسكەن.', 'errRead' : '"$1"نى ئوقۇيالمىدى.', 'errWrite' : '"$1"نى يازالمىدى.', 'errPerm' : 'ھوقۇق يوق.', 'errLocked' : '"$1" تاقالغان,ئۆزگەرتەلمەيسىز.', 'errExists' : '"$1" ناملىق ھۈججەت باركەن.', 'errInvName' : 'توغرا بولمىغان ھۈججەت قىسقۇچ ئىسمى.', 'errFolderNotFound' : 'ھۈججەت قىسقۇچنى تاپالمىدى.', 'errFileNotFound' : 'ھۈججەتنى تاپالمىدى.', 'errTrgFolderNotFound' : '"$1" ناملىق ھۈججەت قىسقۇچنى تاپالمىدى.', 'errPopup' : 'سەكرەپ چىققان يېڭى بەتنى تور كۆرگۈچ كۆرسەتمىدى، ئۈستىدىكى ئەسكەرتىشتىن تور كۆرگۈچنى كۆرسىتىشكە تەڭشەڭ.', 'errMkdir' : '"$1" ناملىق ھۈججەت قىسقۇچنى قۇرالمىدى.', 'errMkfile' : '"$1" ناملىق ھۈججەتنى قۇرالمىدى.', 'errRename' : '"$1" ناملىق ھۈججەتنىڭ ئىسمىنى يېڭىلاش مەغلۇپ بولدى.', 'errCopyFrom' : ' "$1" ناملىق ئورۇندىن ھۈججەت كۆچۈرۈش چەكلەنگەن.', 'errCopyTo' : '"$1" ناملىق ئورۇنغا ھۈججەت كۆچۈرۈش چەكلەنگەن.', 'errUpload' : 'يۈكلەشتە خاتالىق كۆرۈلدى.', 'errUploadFile' : '"$1" ناملىق ھۈججەتنى يۈكلەشتە خاتالىق كۆرۈلدى.', 'errUploadNoFiles' : 'يۈكلىمەكچى بولغان ھۈججەت تېپىلمىدى.', 'errUploadTotalSize' : 'سانلىق مەلۇمات چوڭلىقى چەكلىمىدىن ئېشىپ كەتكەن..', 'errUploadFileSize' : 'ھۈججەت چوڭلىقى چەكلىمىدىن ئېشىپ كەتكەن..', 'errUploadMime' : 'چەكلەنگەن ھۈججەت شەكلى.', 'errUploadTransfer' : '"$1" ناملىق ھۈججەتنى يوللاشتا خاتالىق كۆرۈلدى.', 'errNotReplace' : '"$1" ناملىق ھۈججەت باركەن، ئالماشتۇرۇشقا بولمايدۇ.', // new 'errReplace' : '"$1" ناملىق ھۈججەتنى ئالماشتۇرۇش مەغلۇپ بولدى.', 'errSave' : '"$1" ناملىق ھۈججەتنى ساقلاش مەغلۇپ بولدى.', 'errCopy' : '"$1" ناملىق ھۈججەتنى كۆچۈرۈش مەغلۇپ بولدى.', 'errMove' : '"$1" ناملىق ھۈججەتنى يۆتكەش مەغلۇپ بولدى.', 'errCopyInItself' : '"$1" ناملىق ھۈججەتنى ئەسلى ئورنىغا يۆتكەش مەغلۇپ بولدى.', 'errRm' : '"$1" ناملىق ھۈججەتنى ئۆچۈرۈش مەغلۇپ بولدى.', 'errRmSrc' : 'ئەسلى ھۈججەتنى ئۆچۈرۈش مەغلۇپ بولدى.', 'errExtract' : ' "$1" ناملىق مەلۇماتتىن ھۈججەت ئايرىش مەغلۇپ بولدى..', 'errArchive' : 'پىرىسلانغان ھۈججەت ھاسىللاش مەغلۇپ بولدى.', 'errArcType' : 'بۇ خىل پىرىسلانغان ھۈججەت شەكلىنى سىستېما بىر تەرەپ قىلالمىدى.', 'errNoArchive' : 'ھۈججەت پىرىسلانغان ھۈججەت ئەمەس، ياكى توغرا پىرىسلانمىغان.', 'errCmdNoSupport' : 'بۇ خىل بۇيرۇقنى بىر تەرەپ قىلالمىدى.', 'errReplByChild' : '“$1” ناملىق ھۈججەت قىسقۇچنى ئالماشۇتۇرۇشقا بولمايدۇ.', 'errArcSymlinks' : 'بىخەتەرلىك ئۈچۈن بۇ مەشغۇلات ئەمەلدىن قالدۇرۇلدى..', 'errArcMaxSize' : 'پىرىسلانغان ھۈججەتنىڭ چوڭلىقى چەكلىمىدىن ئېشىپ كەنكەن.', 'errResize' : ' "$1" چوڭلۇقنى تەڭشەشكە بولمىدى.', 'errResizeDegree' : 'توغرا بولمىغان پىقىرىتىش گىرادۇسى', 'errResizeRotate' : 'رەسىمنى پىقىرىتىشقا بولمىدى.', 'errResizeSize' : 'توغرا بولمىغان رەسىم چوڭلىقى.', 'errResizeNoChange' : 'رەسىم چوڭلىقى ئۆزگەرمىگەن.', 'errUsupportType' : 'قوللىمايدىغان ھۈججەت شەكلى.', 'errNotUTF8Content' : '"$1" ناملىق ھۈججەتنىڭ كودى UTF-8ئەمەسكەن، تەھرىرلىگىلى بولمايدۇ.', // added 9.11.2011 'errNetMount' : ' "$1" نى يۈكلەشتە خاتلىق يۈز بەردى..', // added 17.04.2012 'errNetMountNoDriver' : 'بۇ خىل پروتوكول قوللانمىدى..', // added 17.04.2012 'errNetMountFailed' : 'يۈكلەش مەغلۇپ بولدى.', // added 17.04.2012 'errNetMountHostReq' : 'مۇلازىمىتىرنى كۆرسىتىپ بېرىڭ.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'پىرىسلاش', 'cmdback' : 'قايتىش', 'cmdcopy' : 'كۆچۈرۈش', 'cmdcut' : 'كېسىش', 'cmddownload' : 'چۈشۈرۈش', 'cmdduplicate' : 'نۇسخىلاش', 'cmdedit' : 'تەھرىرلەش', 'cmdextract' : 'پىرىستىن ھۈججەت چىقىرىش', 'cmdforward' : 'ئ‍الدىغا مېڭىش', 'cmdgetfile' : 'تاللاش', 'cmdhelp' : 'ئەپ ھەققىدە', 'cmdhome' : 'باش بەت', 'cmdinfo' : 'ئۇچۇرلىرى', 'cmdmkdir' : 'يېڭى ھۈججەت قىسقۇچ', 'cmdmkfile' : 'يېڭى ھۈججەت', 'cmdopen' : 'ئېچىش', 'cmdpaste' : 'چاپلاش', 'cmdquicklook' : 'كۆرۈش', 'cmdreload' : 'يېڭىلاش', 'cmdrename' : 'نام يېڭىلاش', 'cmdrm' : 'ئۆچۈرۈش', 'cmdsearch' : 'ھۈججەت ئىزدەش', 'cmdup' : 'ئالدىنقى مۇندەرىجىگە بېرىش', 'cmdupload' : 'يۈكلەش', 'cmdview' : 'كۆرۈش', 'cmdresize' : 'چوڭلىقىنى تەڭشەش', 'cmdsort' : 'تەرتىپ', 'cmdnetmount' : 'توردىن قوشۇش', // added 18.04.2012 /*********************************** buttons ***********************************/ 'btnClose' : 'تاقاش', 'btnSave' : 'ساقلاش', 'btnRm' : 'ئۆچۈرۈش', 'btnApply' : 'ئىشلىتىش', 'btnCancel' : 'بېكارلاش', 'btnNo' : 'ياق', 'btnYes' : 'ھەئە', 'btnMount' : 'يۈكلەش', // added 18.04.2012 /******************************** notifications ********************************/ 'ntfopen' : 'قىسقۇچنى ئېچىش', 'ntffile' : 'ھۈججەتنى ئېچىش', 'ntfreload' : 'يېڭىلاش', 'ntfmkdir' : 'قىسقۇچ قۇرۇش', 'ntfmkfile' : 'ھۈججەت قۇرۇش', 'ntfrm' : 'ئۆچۈرۈش', 'ntfcopy' : 'كۆچۈرۈش', 'ntfmove' : 'يۆتكەش', 'ntfprepare' : 'كۆچۈرۈش تەييارلىقى', 'ntfrename' : 'نام يېڭىلاش', 'ntfupload' : 'يۈكلەش', 'ntfdownload' : 'چۈشۈرۈش', 'ntfsave' : 'ساقلاش', 'ntfarchive' : 'پىرىسلاش', 'ntfextract' : 'پىرىستىن يېشىش', 'ntfsearch' : 'ئىزدەش', 'ntfresize' : 'چوڭلىقى ئۆزگەرتىلىۋاتىدۇ', 'ntfsmth' : 'ئالدىراش >_<', 'ntfloadimg' : 'رەسىم ئېچىلىۋاتىدۇ', 'ntfnetmount' : 'تور ھۈججىتى يۈكلىنىۋاتىدۇ', // added 18.04.2012 'ntfdim' : 'Acquiring image dimension', /************************************ dates **********************************/ 'dateUnknown' : 'ئېنىق ئەمەس', 'Today' : 'بۈگۈن', 'Yesterday' : 'تۆنۈگۈن', 'msJan' : '1-ئاي', 'msFeb' : '2-ئاي', 'msMar' : '3-ئاي', 'msApr' : '4-ئاي', 'msMay' : '5-ئاي', 'msJun' : '6-ئاي', 'msJul' : '7-ئاي', 'msAug' : '8-ئاي', 'msSep' : '9-ئ‍اي', 'msOct' : '10-ئاي', 'msNov' : '11-ئاي', 'msDec' : '12-ئاي', 'January' : '1-ئاي', 'February' : '2-ئاي', 'March' : '3-ئاي', 'April' : '4-ئاي', 'May' : '5-ئاي', 'June' : '6-ئاي', 'July' : '7-ئاي', 'August' : '8-ئاي', 'September' : '9-ئاي', 'October' : '10-ئاي', 'November' : '11-ئاي', 'December' : '12-ئاي', 'Sunday' : 'يەكشەنبە', 'Monday' : 'دۈشەنبە', 'Tuesday' : 'سەيشەنبە', 'Wednesday' : 'چارشەنبە', 'Thursday' : 'پەيشەنبە', 'Friday' : 'جۈمە', 'Saturday' : 'شەنبە', 'Sun' : 'يە', 'Mon' : 'دۈ', 'Tue' : 'سە', 'Wed' : 'چا', 'Thu' : 'پە', 'Fri' : 'جۈ', 'Sat' : 'شە', /******************************** sort variants ********************************/ 'sortname' : 'نامى ', 'sortkind' : 'شەكلى ', 'sortsize' : 'چوڭلىقى', 'sortdate' : 'ۋاقتى', 'sortFoldersFirst' : 'قىسقۇچلار باشتا', /********************************** messages **********************************/ 'confirmReq' : 'مۇقىملاشتۇرۇڭ', 'confirmRm' : 'راستىنلا ئۆچۈرەمسىز?
    كەينىگە قايتۇرغىلى بولمايدۇ!', 'confirmRepl' : 'ھازىرقى ھۈججەت بىلەن كونىسىنى ئالماشتۇرامسىز?', 'apllyAll' : 'ھەممىسىگە ئىشلىتىش', 'name' : 'نامى', 'size' : 'چوڭلىقى', 'perms' : 'ھوقۇق', 'modify' : 'ئۆزگەرگەن ۋاقتى', 'kind' : 'تۈرى', 'read' : 'ئوقۇش', 'write' : 'يېزىش', 'noaccess' : 'ھوقۇق يوق', 'and' : 'ھەم', 'unknown' : 'ئېنىق ئەمەس', 'selectall' : 'ھەممىنى تاللاش', 'selectfiles' : 'تاللاش', 'selectffile' : 'بىرىنچىسىنى تاللاش', 'selectlfile' : 'ئەڭ ئاخىرقىسىنى تاللاش', 'viewlist' : 'جەدۋەللىك كۆرىنىشى', 'viewicons' : 'رەسىملىك كۆرىنىشى', 'places' : 'ئورنى', 'calc' : 'ھېسابلاش', 'path' : 'ئورنى', 'aliasfor' : 'باشقا نامى', 'locked' : 'تاقالغان', 'dim' : 'چوڭلىقى', 'files' : 'ھۈججەت', 'folders' : 'قىسقۇچ', 'items' : 'تۈرلەر', 'yes' : 'ھەئە', 'no' : 'ياق', 'link' : 'ئۇلىنىش', 'searcresult' : 'ئىزدەش نەتىجىسى', 'selected' : 'تاللانغان تۈرلەر', 'about' : 'چۈشەنچە', 'shortcuts' : 'تېز كونۇپكىلار', 'help' : 'ياردەم', 'webfm' : 'تور ھۈججەتلىرىنى باشقۇرۇش', 'ver' : 'نەشرى', 'protocolver' : 'پروتوكول نەشرى', 'homepage' : 'تۈر باش بېتى', 'docs' : 'ھۈججەت', 'github' : 'Fork us on Github', 'twitter' : 'Follow us on twitter', 'facebook' : 'Join us on facebook', 'team' : 'گۇرۇپپا', 'chiefdev' : 'باش پىروگراممىر', 'developer' : 'پىروگراممىر', 'contributor' : 'تۆھپىكار', 'maintainer' : 'ئاسرىغۇچى', 'translator' : 'تەرجىمان', 'icons' : 'سىنبەلگە', 'dontforget' : 'تەرىڭىزنى سۈرتىدىغان قولياغلىقىڭىزنى ئۇنۇتماڭ جۇمۇ', 'shortcutsof' : 'تېز كونۇپكىلار چەكلەنگەن', 'dropFiles' : 'ھۈججەتنى موشۇ يەرگە تاشلاڭ', 'or' : 'ياكى', 'selectForUpload' : 'يۈكلىمەكچى بولغان ھۈججەتنى تاللاڭ', 'moveFiles' : 'يۆتكەش', 'copyFiles' : 'كۆچۈرۈش', 'rmFromPlaces' : 'ھۈججەتلەرنى ئۆچۈرۈش', 'aspectRatio' : 'نىسبىتىنى ساقلاش', 'scale' : 'نىسبىتى', 'width' : 'ئۇزۇنلىقى', 'height' : 'ئىگىزلىكى', 'resize' : 'چوڭلىقىنى تەڭشەش', 'crop' : 'كېسىش', 'rotate' : 'پىقىرىتىش', 'rotate-cw' : 'سائەت ئىستىرىلكىسى بويىچە 90 گىرادۇس پىقىرىتىش', 'rotate-ccw' : 'سائەت ئىستىرىلكىسىنى تەتۈر يۆنىلىشى بويىچە 90گىرادۇس پىقىرىتىش', 'degree' : 'گىرادۇس', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'پىروتوكڭل', // added 18.04.2012 'host' : 'مۇلازىمىتىر', // added 18.04.2012 'port' : 'پورت', // added 18.04.2012 'user' : 'ئەزا', // added 18.04.2012 'pass' : 'ئىم', // added 18.04.2012 /********************************** mimetypes **********************************/ 'kindUnknown' : 'ئېنىق ئەمەس', 'kindFolder' : 'ھۈججەت قىسقۇچ', 'kindAlias' : 'باشقا نامى', 'kindAliasBroken' : 'باشقا نامى خاتا', // applications 'kindApp' : 'كود ھۈججىتى', 'kindPostscript' : 'Postscript ھۈججىتى', 'kindMsOffice' : 'Microsoft Office ھۈججىتى', 'kindMsWord' : 'Microsoft Word ھۈججىتى', 'kindMsExcel' : 'Microsoft Excel ھۈججىتى', 'kindMsPP' : 'Microsoft Powerpoint ھۈججىتى', 'kindOO' : 'Open Office ھۈججىتى', 'kindAppFlash' : 'Flash ھۈججىتى', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent ھۈججىتى', 'kind7z' : '7z ھۈججىتى', 'kindTAR' : 'TAR ھۈججىتى', 'kindGZIP' : 'GZIP ھۈججىتى', 'kindBZIP' : 'BZIP ھۈججىتى', 'kindXZ' : 'XZ ھۈججىتى', 'kindZIP' : 'ZIP ھۈججىتى', 'kindRAR' : 'RAR ھۈججىتى', 'kindJAR' : 'Java JAR ھۈججىتى', 'kindTTF' : 'True Type فونت', 'kindOTF' : 'Open Type فونت', 'kindRPM' : 'RPM', // texts 'kindText' : 'تېكىست', 'kindTextPlain' : 'تېكىست', 'kindPHP' : 'PHP ھۈججىتى', 'kindCSS' : 'CSS ھۈججىتى', 'kindHTML' : 'HTML ھۈججىتى', 'kindJS' : 'Javascript ھۈججىتى', 'kindRTF' : 'RTF ھۈججىتى', 'kindC' : 'C ھۈججىتى', 'kindCHeader' : 'C باش ھۈججىتى', 'kindCPP' : 'C++ ھۈججىتى', 'kindCPPHeader' : 'C++ باش ھۈججىتى', 'kindShell' : 'Unix سىكىرىپت ھۈججىتى', 'kindPython' : 'Python ھۈججىتى', 'kindJava' : 'Java ھۈججىتى', 'kindRuby' : 'Ruby ھۈججىتى', 'kindPerl' : 'Perl ھۈججىتى', 'kindSQL' : 'SQL ھۈججىتى', 'kindXML' : 'XML ھۈججىتى', 'kindAWK' : 'AWK ھۈججىتى', 'kindCSV' : 'CSV ھۈججىتى', 'kindDOCBOOK' : 'Docbook XML ھۈججىتى', // images 'kindImage' : 'رەسىم', 'kindBMP' : 'BMP رەسىم', 'kindJPEG' : 'JPEG رەسىم', 'kindGIF' : 'GIF رەسىم', 'kindPNG' : 'PNG رەسىم', 'kindTIFF' : 'TIFF رەسىم', 'kindTGA' : 'TGA رەسىم', 'kindPSD' : 'Adobe Photoshop رەسىم', 'kindXBITMAP' : 'X bitmap رەسىم', 'kindPXM' : 'Pixelmator رەسىم', // media 'kindAudio' : 'ئاۋاز', 'kindAudioMPEG' : 'MPEG ئاۋاز', 'kindAudioMPEG4' : 'MPEG-4 ئاۋاز', 'kindAudioMIDI' : 'MIDI ئاۋاز', 'kindAudioOGG' : 'Ogg Vorbis ئاۋاز', 'kindAudioWAV' : 'WAV ئاۋاز', 'AudioPlaylist' : 'MP3 قويۇش تىزىملىكى', 'kindVideo' : 'سىن', 'kindVideoDV' : 'DV سىن', 'kindVideoMPEG' : 'MPEG سىن', 'kindVideoMPEG4' : 'MPEG-4 سىن', 'kindVideoAVI' : 'AVI سىن', 'kindVideoMOV' : 'Quick Time سىن', 'kindVideoWM' : 'Windows Media سىن', 'kindVideoFlash' : 'Flash سىن', 'kindVideoMKV' : 'Matroska سىن', 'kindVideoOGG' : 'Ogg سىن' } }; })); application/library/js/i18n/elfinder.pl.js000064400000103204146731177160014463 0ustar00/** * Polskie tłumaczenie * @author Marcin Mikołajczyk * @author Bogusław Zięba * @version 2020-03-29 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.pl = { translator : 'Marcin Mikołajczyk <marcin@pjwstk.edu.pl>, Bogusław Zięba <bobi@poczta.fm>, Bogusław Zięba <bobi@poczta.fm>', language : 'Polski', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 29.03.2020 06:58 fancyDateFormat : '$1 H:i', // will show like: Dzisiaj 06:58 nonameDateFormat : 'ymd-His', // noname upload will show like: 200329-065813 messages : { /********************************** errors **********************************/ 'error' : 'Błąd', 'errUnknown' : 'Nieznany błąd.', 'errUnknownCmd' : 'Nieznane polecenie.', 'errJqui' : 'Niepoprawna konfiguracja jQuery UI. Muszą być zawarte komponenty selectable, draggable i droppable.', 'errNode' : 'elFinder wymaga utworzenia obiektu DOM.', 'errURL' : 'Niepoprawna konfiguracja elFinder! Pole URL nie jest ustawione.', 'errAccess' : 'Dostęp zabroniony.', 'errConnect' : 'Błąd połączenia z zapleczem.', 'errAbort' : 'Połączenie zostało przerwane.', 'errTimeout' : 'Upłynął czas oczekiwania na połączenie.', 'errNotFound' : 'Zaplecze nie zostało znalezione.', 'errResponse' : 'Nieprawidłowa odpowiedź zaplecza.', 'errConf' : 'Niepoprawna konfiguracja zaplecza.', 'errJSON' : 'Moduł PHP JSON nie jest zainstalowany.', 'errNoVolumes' : 'Brak możliwości odczytu katalogów.', 'errCmdParams' : 'Nieprawidłowe parametry dla polecenia "$1".', 'errDataNotJSON' : 'Dane nie są JSON.', 'errDataEmpty' : 'Dane są puste.', 'errCmdReq' : 'Zaplecze wymaga podania nazwy polecenia.', 'errOpen' : 'Nie można otworzyć "$1".', 'errNotFolder' : 'Obiekt nie jest katalogiem.', 'errNotFile' : 'Obiekt nie jest plikiem.', 'errRead' : 'Nie można odczytać "$1".', 'errWrite' : 'Nie można zapisać do "$1".', 'errPerm' : 'Brak uprawnień.', 'errLocked' : '"$1" jest zablokowany i nie może zostać zmieniony, przeniesiony lub usunięty.', 'errExists' : 'Plik "$1" już istnieje.', 'errInvName' : 'Nieprawidłowa nazwa pliku.', 'errInvDirname' : 'Nieprawidłowa nazwa folderu.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Nie znaleziono folderu.', 'errFileNotFound' : 'Plik nie został znaleziony.', 'errTrgFolderNotFound' : 'Katalog docelowy "$1" nie został znaleziony.', 'errPopup' : 'Przeglądarka zablokowała otwarcie nowego okna. Aby otworzyć plik, zmień ustawienia przeglądarki.', 'errMkdir' : 'Nie można utworzyć katalogu "$1".', 'errMkfile' : 'Nie można utworzyć pliku "$1".', 'errRename' : 'Nie można zmienić nazwy "$1".', 'errCopyFrom' : 'Kopiowanie z katalogu "$1" nie jest możliwe.', 'errCopyTo' : 'Kopiowanie do katalogu "$1" nie jest możliwe.', 'errMkOutLink' : 'Nie można utworzyć link do zewnętrznego katalogu głównego.', // from v2.1 added 03.10.2015 'errUpload' : 'Błąd wysyłania.', // old name - errUploadCommon 'errUploadFile' : 'Nie można wysłać "$1".', // old name - errUpload 'errUploadNoFiles' : 'Nie znaleziono plików do wysłania.', 'errUploadTotalSize' : 'Przekroczono dopuszczalny rozmiar wysyłanych plików.', // old name - errMaxSize 'errUploadFileSize' : 'Plik przekracza dopuszczalny rozmiar.', // old name - errFileMaxSize 'errUploadMime' : 'Niedozwolony typ pliku.', 'errUploadTransfer' : 'Błąd przesyłania "$1".', 'errUploadTemp' : 'Nie można wykonać tymczasowego pliku do przesłania.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Obiekt "$1" istnieje już w tej lokalizacji i nie może być zastąpiony przez inny typ obiektu.', // new 'errReplace' : 'Nie można zastąpić "$1".', 'errSave' : 'Nie można zapisać "$1".', 'errCopy' : 'Nie można skopiować "$1".', 'errMove' : 'Nie można przenieść "$1".', 'errCopyInItself' : 'Nie można skopiować "$1" w miejsce jego samego.', 'errRm' : 'Nie można usunąć "$1".', 'errTrash' : 'Nie można do kosza.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Nie należy usunąć pliku(s) źródłowy.', 'errExtract' : 'Nie można wypakować plików z "$1".', 'errArchive' : 'Nie można utworzyć archiwum.', 'errArcType' : 'Nieobsługiwany typ archiwum.', 'errNoArchive' : 'Plik nie jest prawidłowym typem archiwum.', 'errCmdNoSupport' : 'Zaplecze nie obsługuje tego polecenia.', 'errReplByChild' : 'Nie można zastąpić katalogu "$1" elementem w nim zawartym', 'errArcSymlinks' : 'Ze względów bezpieczeństwa rozpakowywanie archiwów zawierających dowiązania symboliczne (symlinks) jest niedozwolone.', // edited 24.06.2012 'errArcMaxSize' : 'Archiwum przekracza maksymalny dopuszczalny rozmiar.', 'errResize' : 'Nie można zmienić rozmiaru "$1".', 'errResizeDegree' : 'Nieprawidłowy stopień obracania.', // added 7.3.2013 'errResizeRotate' : 'Nie można obrócić obrazu.', // added 7.3.2013 'errResizeSize' : 'Nieprawidłowy rozmiar obrazu.', // added 7.3.2013 'errResizeNoChange' : 'Nie zmieniono rozmiaru obrazu.', // added 7.3.2013 'errUsupportType' : 'Nieobsługiwany typ pliku.', 'errNotUTF8Content' : 'Plik "$1" nie jest UTF-8 i nie może być edytowany.', // added 9.11.2011 'errNetMount' : 'Nie można zamontować "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Nieobsługiwany protokół.', // added 17.04.2012 'errNetMountFailed' : 'Montowanie nie powiodło się.', // added 17.04.2012 'errNetMountHostReq' : 'Host wymagany.', // added 18.04.2012 'errSessionExpires' : 'Twoja sesja wygasła z powodu nieaktywności.', 'errCreatingTempDir' : 'Nie można utworzyć katalogu tymczasowego: "$1"', 'errFtpDownloadFile' : 'Nie można pobrać pliku z FTP: "$1"', 'errFtpUploadFile' : 'Nie można przesłać pliku na serwer FTP: "$1"', 'errFtpMkdir' : 'Nie można utworzyć zdalnego katalogu FTP: "$1"', 'errArchiveExec' : 'Błąd podczas archiwizacji plików: "$1"', 'errExtractExec' : 'Błąd podczas wyodrębniania plików: "$1"', 'errNetUnMount' : 'Nie można odmontować', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nie wymienialne na UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Wypróbuj Google Chrome, jeśli chcesz przesłać katalog.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Upłynął limit czasu podczas wyszukiwania "$1". Wynik wyszukiwania jest częściowy.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Wymagana jest ponowna autoryzacja.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maks. liczba elementów do wyboru to $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Nie można przywrócić z kosza. Nie można zidentyfikować przywrócić docelowego.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Nie znaleziono edytora tego typu pliku.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Wystąpił błąd po stronie serwera .', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Nie można do pustego folderu "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Jest jeszcze $1 błąd/błędy.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Utwórz archiwum', 'cmdback' : 'Wstecz', 'cmdcopy' : 'Kopiuj', 'cmdcut' : 'Wytnij', 'cmddownload' : 'Pobierz', 'cmdduplicate' : 'Duplikuj', 'cmdedit' : 'Edytuj plik', 'cmdextract' : 'Wypakuj pliki z archiwum', 'cmdforward' : 'Dalej', 'cmdgetfile' : 'Wybierz pliki', 'cmdhelp' : 'Informacje o programie', 'cmdhome' : 'Główny', 'cmdinfo' : 'Właściwości', 'cmdmkdir' : 'Nowy katalog', 'cmdmkdirin' : 'Do nowego katalogu', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nowy plik', 'cmdopen' : 'Otwórz', 'cmdpaste' : 'Wklej', 'cmdquicklook' : 'Podgląd', 'cmdreload' : 'Odśwież', 'cmdrename' : 'Zmień nazwę', 'cmdrm' : 'Usuń', 'cmdtrash' : 'Do kosza', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Przywróć', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Wyszukaj pliki', 'cmdup' : 'Przejdź do katalogu nadrzędnego', 'cmdupload' : 'Wyślij pliki', 'cmdview' : 'Widok', 'cmdresize' : 'Zmień rozmiar i Obróć', 'cmdsort' : 'Sortuj', 'cmdnetmount' : 'Zamontuj wolumin sieciowy', // added 18.04.2012 'cmdnetunmount': 'Odmontuj', // from v2.1 added 30.04.2012 'cmdplaces' : 'Do Miejsc', // added 28.12.2014 'cmdchmod' : 'Zmiana trybu', // from v2.1 added 20.6.2015 'cmdopendir' : 'Otwórz katalog', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Resetuj szerokość kolumny', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Pełny ekran', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Przenieś', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Opróżnij folder', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Cofnij', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Ponów', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferencje', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Zaznacz wszystko', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Odznacz wszystko', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Odwróć wybór', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Otwórz w nowym oknie', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ukryj (osobiste)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Zamknij', 'btnSave' : 'Zapisz', 'btnRm' : 'Usuń', 'btnApply' : 'Zastosuj', 'btnCancel' : 'Anuluj', 'btnNo' : 'Nie', 'btnYes' : 'Tak', 'btnMount' : 'Montuj', // added 18.04.2012 'btnApprove': 'Idź do $1 & zatwierdź', // from v2.1 added 26.04.2012 'btnUnmount': 'Odmontuj', // from v2.1 added 30.04.2012 'btnConv' : 'Konwertuj', // from v2.1 added 08.04.2014 'btnCwd' : 'Tutaj', // from v2.1 added 22.5.2015 'btnVolume' : 'Wolumin', // from v2.1 added 22.5.2015 'btnAll' : 'Wszystko', // from v2.1 added 22.5.2015 'btnMime' : 'Typ MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nazwa pliku', // from v2.1 added 22.5.2015 'btnSaveClose': 'Zapisz & Zamknij', // from v2.1 added 12.6.2015 'btnBackup' : 'Kopia zapasowa', // fromv2.1 added 28.11.2015 'btnRename' : 'Zmień nazwę', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Zmień nazwę(Wszystkie)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Poprz ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Nast ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Zapisz Jako', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Otwieranie katalogu', 'ntffile' : 'Otwórz plik', 'ntfreload' : 'Odśwież zawartość katalogu', 'ntfmkdir' : 'Tworzenie katalogu', 'ntfmkfile' : 'Tworzenie plików', 'ntfrm' : 'Usuwanie plików', 'ntfcopy' : 'Kopiowanie plików', 'ntfmove' : 'Przenoszenie plików', 'ntfprepare' : 'Przygotowanie do kopiowania plików', 'ntfrename' : 'Zmiana nazw plików', 'ntfupload' : 'Wysyłanie plików', 'ntfdownload' : 'Pobieranie plików', 'ntfsave' : 'Zapisywanie plików', 'ntfarchive' : 'Tworzenie archiwum', 'ntfextract' : 'Wypakowywanie plików z archiwum', 'ntfsearch' : 'Wyszukiwanie plików', 'ntfresize' : 'Zmiana rozmiaru obrazów', 'ntfsmth' : 'Robienie czegoś >_<', 'ntfloadimg' : 'Ładowanie obrazu', 'ntfnetmount' : 'Montaż woluminu sieciowego', // added 18.04.2012 'ntfnetunmount': 'Odłączanie woluminu sieciowego', // from v2.1 added 30.04.2012 'ntfdim' : 'Pozyskiwanie wymiaru obrazu', // added 20.05.2013 'ntfreaddir' : 'Odczytywanie informacji katalogu', // from v2.1 added 01.07.2013 'ntfurl' : 'Pobieranie URL linku', // from v2.1 added 11.03.2014 'ntfchmod' : 'Zmiana trybu pliku', // from v2.1 added 20.6.2015 'ntfpreupload': 'Weryfikacja nazwy przesłanego pliku', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Tworzenie pliku do pobrania', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Uzyskiwanie informacji o ścieżce', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Przetwarzanie przesłanego pliku', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Wykonuje wrzucanie do kosza', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Wykonuje przywracanie z kosza', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Sprawdzanie folderu docelowego', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Cofanie poprzedniej operacji', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Ponownie poprzednio cofnięte', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Sprawdzanie zawartości', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Śmieci', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'nieznana', 'Today' : 'Dzisiaj', 'Yesterday' : 'Wczoraj', 'msJan' : 'Sty', 'msFeb' : 'Lut', 'msMar' : 'Mar', 'msApr' : 'Kwi', 'msMay' : 'Maj', 'msJun' : 'Cze', 'msJul' : 'Lip', 'msAug' : 'Sie', 'msSep' : 'Wrz', 'msOct' : 'Paź', 'msNov' : 'Lis', 'msDec' : 'Gru', 'January' : 'Styczeń', 'February' : 'Luty', 'March' : 'Marzec', 'April' : 'Kwiecień', 'May' : 'Maj', 'June' : 'Czerwiec', 'July' : 'Lipiec', 'August' : 'Sierpień', 'September' : 'Wrzesień', 'October' : 'Październik', 'November' : 'Listopad', 'December' : 'Grudzień', 'Sunday' : 'Niedziela', 'Monday' : 'Poniedziałek', 'Tuesday' : 'Wtorek', 'Wednesday' : 'Środa', 'Thursday' : 'Czwartek', 'Friday' : 'Piątek', 'Saturday' : 'Sobota', 'Sun' : 'Nie', 'Mon' : 'Pon', 'Tue' : 'Wto', 'Wed' : 'Śro', 'Thu' : 'Czw', 'Fri' : 'Pią', 'Sat' : 'Sob', /******************************** sort variants ********************************/ 'sortname' : 'w/g nazwy', 'sortkind' : 'w/g typu', 'sortsize' : 'w/g rozmiaru', 'sortdate' : 'w/g daty', 'sortFoldersFirst' : 'katalogi pierwsze', 'sortperm' : 'wg/nazwy', // from v2.1.13 added 13.06.2016 'sortmode' : 'wg/trybu', // from v2.1.13 added 13.06.2016 'sortowner' : 'wg/właściciela', // from v2.1.13 added 13.06.2016 'sortgroup' : 'wg/grup', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Również drzewa katalogów', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NowyPlik.txt', // added 10.11.2015 'untitled folder' : 'NowyFolder', // added 10.11.2015 'Archive' : 'NoweArchiwum', // from v2.1 added 10.11.2015 'untitled file' : 'NowyPlik.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1 Plik', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Wymagane potwierdzenie', 'confirmRm' : 'Czy na pewno chcesz usunąć pliki?
    Tej operacji nie można cofnąć!', 'confirmRepl' : 'Zastąpić stary plik nowym?', 'confirmRest' : 'Zamienić istniejący element na pozycję w koszu?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nie w UTF-8
    Konwertować na UTF-8?
    Zawartość stanie się UTF-8 poprzez zapisanie po konwersji.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Nie można wykryć kodowania tego pliku. Musi być tymczasowo przekształcony do UTF-8.
    Proszę wybrać kodowanie znaków tego pliku.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Został zmodyfikowany.
    Utracisz pracę, jeśli nie zapiszesz zmian.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Czy na pewno chcesz przenieść elementy do kosza?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Czy na pewno chcesz przenieść elementy do "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Zastosuj do wszystkich', 'name' : 'Nazwa', 'size' : 'Rozmiar', 'perms' : 'Uprawnienia', 'modify' : 'Zmodyfikowany', 'kind' : 'Typ', 'read' : 'odczyt', 'write' : 'zapis', 'noaccess' : 'brak dostępu', 'and' : 'i', 'unknown' : 'nieznany', 'selectall' : 'Zaznacz wszystkie pliki', 'selectfiles' : 'Zaznacz plik(i)', 'selectffile' : 'Zaznacz pierwszy plik', 'selectlfile' : 'Zaznacz ostatni plik', 'viewlist' : 'Widok listy', 'viewicons' : 'Widok ikon', 'viewSmall' : 'Małe ikony', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Średnie ikony', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Duże ikony', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Bardzo duże ikony', // from v2.1.39 added 22.5.2018 'places' : 'Ulubione', 'calc' : 'Obliczanie', 'path' : 'Ścieżka', 'aliasfor' : 'Alias do', 'locked' : 'Zablokowany', 'dim' : 'Wymiary', 'files' : 'Plik(ów)', 'folders' : 'Katalogi', 'items' : 'Element(ów)', 'yes' : 'tak', 'no' : 'nie', 'link' : 'Odnośnik', 'searcresult' : 'Wyniki wyszukiwania', 'selected' : 'zaznaczonych obiektów', 'about' : 'O programie', 'shortcuts' : 'Skróty klawiaturowe', 'help' : 'Pomoc', 'webfm' : 'Menedżer plików sieciowych', 'ver' : 'Wersja', 'protocolver' : 'wersja protokołu', 'homepage' : 'Strona projektu', 'docs' : 'Dokumentacja', 'github' : 'Obserwuj rozwój projektu na Github', 'twitter' : 'Śledź nas na Twitterze', 'facebook' : 'Dołącz do nas na Facebooku', 'team' : 'Zespół', 'chiefdev' : 'główny programista', 'developer' : 'programista', 'contributor' : 'współautor', 'maintainer' : 'koordynator', 'translator' : 'tłumacz', 'icons' : 'Ikony', 'dontforget' : 'i nie zapomnij zabrać ręcznika', 'shortcutsof' : 'Skróty klawiaturowe są wyłączone', 'dropFiles' : 'Upuść pliki tutaj', 'or' : 'lub', 'selectForUpload' : 'Wybierz pliki', 'moveFiles' : 'Przenieś pliki', 'copyFiles' : 'Kopiuj pliki', 'restoreFiles' : 'Przywróć elementy', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Usuń z miejsc', 'aspectRatio' : 'Zachowaj proporcje', 'scale' : 'Skala', 'width' : 'Szerokość', 'height' : 'Wysokość', 'resize' : 'Zmień rozmiar', 'crop' : 'Przytnij', 'rotate' : 'Obróć', 'rotate-cw' : 'Obróć 90° w lewo', 'rotate-ccw' : 'Obróć 90° w prawo', 'degree' : '°', 'netMountDialogTitle' : 'Montaż woluminu sieciowego', // added 18.04.2012 'protocol' : 'Protokół', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Użytkownik', // added 18.04.2012 'pass' : 'Hasło', // added 18.04.2012 'confirmUnmount' : 'Czy chcesz odmontować $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Upuść lub Wklej pliki z przeglądarki', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Upuść lub Wklej tutaj pliki i adresy URL', // from v2.1 added 07.04.2014 'encoding' : 'Kodowanie', // from v2.1 added 19.12.2014 'locale' : 'Lokalne', // from v2.1 added 19.12.2014 'searchTarget' : 'Docelowo: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Wyszukiwanie poprzez wpisanie typu MIME', // from v2.1 added 22.5.2015 'owner' : 'Właściciel', // from v2.1 added 20.6.2015 'group' : 'Grupa', // from v2.1 added 20.6.2015 'other' : 'Inne', // from v2.1 added 20.6.2015 'execute' : 'Wykonaj', // from v2.1 added 20.6.2015 'perm' : 'Uprawnienia', // from v2.1 added 20.6.2015 'mode' : 'Tryb', // from v2.1 added 20.6.2015 'emptyFolder' : 'Katalog jest pusty', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Katalog jest pusty\\AUpuść aby dodać pozycje', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Katalog jest pusty\\ADotknij dłużej aby dodać pozycje', // from v2.1.6 added 30.12.2015 'quality' : 'Jakość', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto synchronizacja', // from v2.1.6 added 10.1.2016 'moveUp' : 'Przenieś w górę', // from v2.1.6 added 18.1.2016 'getLink' : 'Pobierz URL linku', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Wybrane pozycje ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID Katalogu', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Zezwól na dostęp offline', // from v2.1.10 added 3.25.2016 'reAuth' : 'Aby ponownie uwierzytelnić', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Teraz ładuję...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Otwieranie wielu plików', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Próbujesz otworzyć $1 plików. Czy na pewno chcesz, aby otworzyć w przeglądarce?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Wynik wyszukiwania jest pusty', // from v2.1.12 added 5.16.2016 'editingFile' : 'Edytujesz plik.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Masz wybranych $1 pozycji.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Masz $1 pozycji w schowku.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Wyszukiwanie przyrostowe jest wyłącznie z bieżącego widoku.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Przywracanie', // from v2.1.15 added 3.8.2016 'complete' : '$1 zakończone', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu kontekstowe', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Obracanie strony', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Wolumin główny', // from v2.1.16 added 16.9.2016 'reset' : 'Resetuj', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Kolor tła', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Wybierania kolorów', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Kratka', // from v2.1.16 added 4.10.2016 'enabled' : 'Włączone', // from v2.1.16 added 4.10.2016 'disabled' : 'Wyłączone', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Wyniki wyszukiwania są puste w bieżącym widoku.\\AWciśnij [Enter] aby poszerzyć zakres wyszukiwania.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Wyszukiwanie pierwszej litery brak wyników w bieżącym widoku.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Etykieta tekstowa', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 min pozostało', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Otwórz ponownie z wybranym kodowaniem', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Zapisz z wybranym kodowaniem', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Wybierz katalog', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Wyszukiwanie pierwszej litery', // from v2.1.23 added 24.3.2017 'presets' : 'Wstępnie ustalone', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'To zbyt wiele rzeczy, więc nie mogą być w koszu.', // from v2.1.25 added 9.6.2017 'TextArea' : 'PoleTekstowe', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Opróżnij folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Brak elementów w folderze "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferencje', // from v2.1.26 added 28.6.2017 'language' : 'Ustawienie języka', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Zainicjuj ustawienia zapisane w tej przeglądarce', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Ustawienia paska narzędzi', // from v2.1.27 added 2.8.2017 'charsLeft' : '... pozostało $1 znak(ów).', // from v2.1.29 added 30.8.2017 'linesLeft' : '... pozostało $1 lini.', // from v2.1.52 added 16.1.2020 'sum' : 'Suma', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Przybliżony rozmiar pliku', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Skoncentruj się na elemencie dialogowym po najechaniu myszą', // from v2.1.30 added 2.11.2017 'select' : 'Wybierz', // from v2.1.30 added 23.11.2017 'selectAction' : 'Działanie po wybraniu pliku', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Otwórz za pomocą ostatnio używanego edytora', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Odwróć zaznaczenie', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Czy na pewno chcesz zmienić nazwę $1 wybranych elementów takich jak $2?
    Tego nie da się cofnąć!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Zmień partiami', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Liczba', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Dodaj prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Dodaj suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Zmień rozszerzenie', // from v2.1.31 added 8.12.2017 'columnPref' : 'Ustawienia kolumn (Widok listy)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Wszystkie zmiany widoczne natychmiast w archiwum.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Wszelkie zmiany nie będą widoczne, dopóki nie odłączysz tego woluminu.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Następujący wolumin (y), zamontowany na tym urządzeniu również niezamontowany. Czy na pewno chcesz go odmontować?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informacje Wyboru', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorytmy do pokazywania hash pliku', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Elementów (Wybór Panelu Informacyjnego)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Naciśnij ponownie, aby wyjść.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Pasek narzędziowy', // from v2.1.38 added 4.4.2018 'workspace' : 'Obszar Pracy', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Wszystko', // from v2.1.38 added 4.4.2018 'iconSize' : 'Rozmiar Ikony (Podgląd ikon)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Otwórz zmaksymalizowane okno edytora', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Ponieważ konwersja przez API nie jest obecnie dostępna, należy dokonać konwersji w witrynie.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Po konwersji musisz przesłać z adresem URL pozycji lub pobranym plikiem, aby zapisać przekonwertowany plik.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Konwertuj na stronie $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integracje', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Ten elFinder ma zintegrowane następujące usługi zewnętrzne. Przed użyciem ich sprawdź warunki użytkowania, politykę prywatności itp.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Pokaż ukryte pozycje', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Ukryj ukryte pozycje', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Pokaż/Ukryj ukryte pozycje', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Typy plików, które można włączyć za pomocą "Nowy plik"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Typ pliku tekstowego', // from v2.1.41 added 7.8.2018 'add' : 'Dodaj', // from v2.1.41 added 7.8.2018 'theme' : 'Motyw', // from v2.1.43 added 19.10.2018 'default' : 'Domyślnie', // from v2.1.43 added 19.10.2018 'description' : 'Opis', // from v2.1.43 added 19.10.2018 'website' : 'Witryna', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licencja', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Tego elementu nie można zapisać. Aby uniknąć utraty zmian, musisz wyeksportować go na swój komputer.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Kliknij dwukrotnie plik, aby go wybrać.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Użyj trybu pełnoekranowego', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Nieznany', 'kindRoot' : 'Główny Wolumin', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Katalog', 'kindSelects' : 'Zaznaczenie', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Utracony alias', // applications 'kindApp' : 'Aplikacja', 'kindPostscript' : 'Dokument Postscript', 'kindMsOffice' : 'Dokument Office', 'kindMsWord' : 'Dokument Word', 'kindMsExcel' : 'Dokument Excel', 'kindMsPP' : 'Prezentacja PowerPoint', 'kindOO' : 'Dokument OpenOffice', 'kindAppFlash' : 'Aplikacja Flash', 'kindPDF' : 'Dokument przenośny PDF', 'kindTorrent' : 'Plik BitTorrent', 'kind7z' : 'Archiwum 7z', 'kindTAR' : 'Archiwum TAR', 'kindGZIP' : 'Archiwum GZIP', 'kindBZIP' : 'Archiwum BZIP', 'kindXZ' : 'Archiwum XZ', 'kindZIP' : 'Archiwum ZIP', 'kindRAR' : 'Archiwum RAR', 'kindJAR' : 'Plik Java JAR', 'kindTTF' : 'Czcionka TrueType', 'kindOTF' : 'Czcionka OpenType', 'kindRPM' : 'Pakiet RPM', // texts 'kindText' : 'Dokument tekstowy', 'kindTextPlain' : 'Zwykły tekst', 'kindPHP' : 'Kod źródłowy PHP', 'kindCSS' : 'Kaskadowe arkusze stylów', 'kindHTML' : 'Dokument HTML', 'kindJS' : 'Kod źródłowy Javascript', 'kindRTF' : 'Tekst sformatowany RTF', 'kindC' : 'Kod źródłowy C', 'kindCHeader' : 'Plik nagłówka C', 'kindCPP' : 'Kod źródłowy C++', 'kindCPPHeader' : 'Plik nagłówka C++', 'kindShell' : 'Skrypt powłoki Unix', 'kindPython' : 'Kod źródłowy Python', 'kindJava' : 'Kod źródłowy Java', 'kindRuby' : 'Kod źródłowy Ruby', 'kindPerl' : 'Skrypt Perl', 'kindSQL' : 'Kod źródłowy SQL', 'kindXML' : 'Dokument XML', 'kindAWK' : 'Kod źródłowy AWK', 'kindCSV' : 'Tekst rozdzielany przecinkami CSV', 'kindDOCBOOK' : 'Dokument Docbook XML', 'kindMarkdown' : 'Tekst promocyjny', // added 20.7.2015 // images 'kindImage' : 'Obraz', 'kindBMP' : 'Obraz BMP', 'kindJPEG' : 'Obraz JPEG', 'kindGIF' : 'Obraz GIF', 'kindPNG' : 'Obraz PNG', 'kindTIFF' : 'Obraz TIFF', 'kindTGA' : 'Obraz TGA', 'kindPSD' : 'Obraz Adobe Photoshop', 'kindXBITMAP' : 'Obraz X BitMap', 'kindPXM' : 'Obraz Pixelmator', // media 'kindAudio' : 'Plik dźwiękowy', 'kindAudioMPEG' : 'Plik dźwiękowy MPEG', 'kindAudioMPEG4' : 'Plik dźwiękowy MPEG-4', 'kindAudioMIDI' : 'Plik dźwiękowy MIDI', 'kindAudioOGG' : 'Plik dźwiękowy Ogg Vorbis', 'kindAudioWAV' : 'Plik dźwiękowy WAV', 'AudioPlaylist' : 'Lista odtwarzania MP3', 'kindVideo' : 'Plik wideo', 'kindVideoDV' : 'Plik wideo DV', 'kindVideoMPEG' : 'Plik wideo MPEG', 'kindVideoMPEG4' : 'Plik wideo MPEG-4', 'kindVideoAVI' : 'Plik wideo AVI', 'kindVideoMOV' : 'Plik wideo Quick Time', 'kindVideoWM' : 'Plik wideo Windows Media', 'kindVideoFlash' : 'Plik wideo Flash', 'kindVideoMKV' : 'Plik wideo Matroska', 'kindVideoOGG' : 'Plik wideo Ogg' } }; })); application/library/js/i18n/elfinder.ar.js000064400000115441146731177160014460 0ustar00/** * الترجمة العربية * @author Khamis Alqutob * @author Tawfek Daghistani * @author Atef Ben Ali * @version 2020-12-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ar = { translator : 'Khamis Alqutob <alqutob@outlook.com>, Tawfek Daghistani <tawfekov@gmail.com>, Atef Ben Ali <atef.bettaib@gmail.com>', language : 'Arabic', direction : 'rtl', dateFormat : 'M d, Y h:i A', // will show like: Aug 24, 2018 04:39 PM fancyDateFormat : '$1 h:i A', // will show like: Today 04:39 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 180824-163916 messages : { /********************************** errors **********************************/ 'error' : 'خطأ', 'errUnknown' : 'خطأ غير معروف .', 'errUnknownCmd' : 'أمر غير معروف .', 'errJqui' : 'تكوين jQuery UI غير صالح. يجب تضمين المكونات القابلة للتحديد والقابلة للسحب والإفلات', 'errNode' : 'يتطلب elFinder إنشاء عنصر DOM.', 'errURL' : 'تكوين elFinder غير صالح ! لم يتم تعيين خيار رابط URL', 'errAccess' : 'الوصول مرفوض .', 'errConnect' : 'تعذر الاتصال مع خادم الخلفية', 'errAbort' : 'تم فصل الإتصال', 'errTimeout' : 'نفذ وقت الاتصال.', 'errNotFound' : 'الخادوم الخلفي غير موجود .', 'errResponse' : 'رد غير مقبول من الخادوم الخلفي', 'errConf' : 'خطأ في الإعدادات الخاصة بالخادوم الخلفي ', 'errJSON' : 'موديول PHP JSON module غير مثبت ', 'errNoVolumes' : 'الأحجام المقروءة غير متوفرة', 'errCmdParams' : 'معلمات غير صالحة للأمر "$1".', 'errDataNotJSON' : 'البيانات ليست من نوع JSON ', 'errDataEmpty' : 'البيانات فارغة', 'errCmdReq' : 'الخادوم الخلفي يتطلب اسم الأمر ', 'errOpen' : 'غير قادر على فتح "$1".', 'errNotFolder' : 'العنصر ليس مجلد', 'errNotFile' : 'العنصر ليس ملف', 'errRead' : 'غير قادر على قراءة "$1".', 'errWrite' : 'غير قادر على الكتابة في "$1".', 'errPerm' : 'وصول مرفوض ', 'errLocked' : '"$1" مقفل ولا يمكن إعادة تسميته أو نقله أو إزالته.', 'errExists' : 'العنصر الذي يحمل الاسم "$1" موجود مسبقاً.', 'errInvName' : 'اسم الملف غير صالح', 'errInvDirname' : 'اسم مجلد غير صالح', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'المجلد غير موجود', 'errFileNotFound' : 'الملف غير موجود', 'errTrgFolderNotFound' : 'المجلد الهدف "$1" غير موجود ', 'errPopup' : 'المتصفح منع من فتح نافذة منبثقة. لفتح ملف ، قم بتمكينه في خيارات المتصفح', 'errMkdir' : ' غير قادر على إنشاء مجلد "$1".', 'errMkfile' : ' غير قادر على إنشاء ملف "$1".', 'errRename' : 'غير قادر على إعادة تسمية "$1".', 'errCopyFrom' : 'نسخ الملفات من الدليل "$1" غير مسموح.', 'errCopyTo' : 'نسخ الملفات إلى الدليل "$1" غير مسموح .', 'errMkOutLink' : 'تعذر إنشاء رابط إلى خارج جذر الدليل.', // from v2.1 added 03.10.2015 'errUpload' : 'خطأ في عملية الرفع.', // old name - errUploadCommon 'errUploadFile' : 'غير قادر على رفع "$1".', // old name - errUpload 'errUploadNoFiles' : 'لم يتم العثور على ملفات للتحميل .', 'errUploadTotalSize' : 'البيانات تتجاوز الحد الأقصى للحجم المسموح به.', // old name - errMaxSize 'errUploadFileSize' : 'تجاوز الملف الحد الأقصى للحجم المسموح به.', // old name - errFileMaxSize 'errUploadMime' : 'نوع الملف غير مسموح به.', 'errUploadTransfer' : '"$1" خطأ نقل.', 'errUploadTemp' : 'تعذر إنشاء ملف مؤقت للتحميل .', // from v2.1 added 26.09.2015 'errNotReplace' : 'الكائن "$1" موجود بالفعل في هذا الموقع ولا يمكن استبداله بكائن بنوع آخر.', // new 'errReplace' : 'غير قادر على استبدال "$1".', 'errSave' : 'غير قادر على حفظ "$1".', 'errCopy' : 'غير قادر على نسخ "$1".', 'errMove' : 'غير قادر على نقل "$1".', 'errCopyInItself' : 'غير قادر على نسخ "$1" داخل نفسه.', 'errRm' : 'غير قادر على إزالة "$1".', 'errTrash' : 'غير قادر في سلة المهملات', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'تعذر إزالة ملف (ملفات) المصدر.', 'errExtract' : 'غير قادر على استخراج الملفات من "$1".', 'errArchive' : 'غير قادر على إنشاء ملف مضغوط.', 'errArcType' : 'نوع الملف المضغوط غير مدعوم.', 'errNoArchive' : 'هذا الملف ليس ملف مضغوط أو ذو صيغة غير مدعومة.', 'errCmdNoSupport' : 'الخادوم الخلفي لا يدعم هذا الأمر ', 'errReplByChild' : 'لا يمكن استبدال المجلد "$1" بعنصر محتوِ فيه.', 'errArcSymlinks' : 'لأسباب أمنية ، تم رفض فك ضغط الأرشيفات التي تحتوي على روابط رمزية أو ملفات بأسماء غير مسموح بها.', // edited 24.06.2012 'errArcMaxSize' : 'تتجاوز ملفات الأرشيف الحجم الأقصى المسموح به.', 'errResize' : 'تعذر تغيير حجم "$1".', 'errResizeDegree' : 'درجة تدوير غير صالحة.', // added 7.3.2013 'errResizeRotate' : 'تعذر تدوير الصورة.', // added 7.3.2013 'errResizeSize' : 'حجم الصورة غير صالح.', // added 7.3.2013 'errResizeNoChange' : 'حجم الصورة لم يتغير.', // added 7.3.2013 'errUsupportType' : 'نوع ملف غير مدعوم.', 'errNotUTF8Content' : 'الملف "$1" ليس بتنسيق UTF-8 ولا يمكن تحريره.', // added 9.11.2011 'errNetMount' : 'غير قادر على التثبيت "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'بروتوكول غير مدعوم.', // added 17.04.2012 'errNetMountFailed' : 'فشل التثبيت.', // added 17.04.2012 'errNetMountHostReq' : 'المضيف مطلوب.', // added 18.04.2012 'errSessionExpires' : 'انتهت جلسة العمل الخاصة بك بسبب عدم الفاعلية.', 'errCreatingTempDir' : 'تعذر إنشاء دليل مؤقت: "$1"', 'errFtpDownloadFile' : 'تعذر تنزيل الملف من FTP: "$1"', 'errFtpUploadFile' : 'تعذر تحميل الملف إلى FTP: "$1"', 'errFtpMkdir' : 'تعذر إنشاء دليل عن بعد في FTP: "$1"', 'errArchiveExec' : 'خطأ أثناء أرشفة الملفات: "$1"', 'errExtractExec' : 'خطأ أثناء استخراج الملفات: "$1"', 'errNetUnMount' : 'غير قادر على فك التثبيت.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'غير قابل للتحويل إلى UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'جرب المتصفح الحديث ، إذا كنت ترغب في تحميل المجلد.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'انتهت المهلة أثناء البحث "$1". نتيجة البحث جزئية.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'مطلوب إعادة التفويض.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'الحد الأقصى لعدد العناصر القابلة للتحديد هو $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'غير قادر على الاستعادة من سلة المهملات. لا يمكن تحديد وجهة الاستعادة.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'لم يتم العثور على المحرر لهذا النوع من الملفات.', // from v2.1.25 added 23.5.2017 'errServerError' : 'حدث خطأ من جانب الخادم.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'تعذر إفراغ المجلد "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'يوجد $1 أخطاء إضافية.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'إنشاء أرشيف', 'cmdback' : 'العودة', 'cmdcopy' : 'نسخ', 'cmdcut' : 'قص', 'cmddownload' : 'تنزيل', 'cmdduplicate' : 'تكرار', 'cmdedit' : 'تحرير الملف', 'cmdextract' : 'إستخراج الملفات من الأرشيف', 'cmdforward' : 'الأمام', 'cmdgetfile' : 'اختيار الملفات', 'cmdhelp' : 'عن هذه البرمجية', 'cmdhome' : 'الجذر', 'cmdinfo' : 'الحصول على المعلومات ', 'cmdmkdir' : 'مجلد جديد', 'cmdmkdirin' : 'داخل مجلد جديد', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'ملف جديد', 'cmdopen' : 'فتح', 'cmdpaste' : 'لصق', 'cmdquicklook' : 'معاينة', 'cmdreload' : 'إعادة تحميل', 'cmdrename' : 'إعادة تسمية', 'cmdrm' : 'حذف', 'cmdtrash' : 'داخل سلة المهملات', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'إستعادة', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'بحث عن ملفات', 'cmdup' : 'انتقل إلى المجلد الأصل', 'cmdupload' : 'رفع ملفات', 'cmdview' : 'عرض', 'cmdresize' : 'تغيير الحجم والتدوير', 'cmdsort' : 'فرز', 'cmdnetmount' : 'تثبيت حجم الشبكة', // added 18.04.2012 'cmdnetunmount': 'إلغاء التثبيت', // from v2.1 added 30.04.2012 'cmdplaces' : 'الى الاماكن', // added 28.12.2014 'cmdchmod' : 'تغيير النمط', // from v2.1 added 20.6.2015 'cmdopendir' : 'فتح مجلد', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'إعادة تعيين عرض العمود', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'ملء الشاشة', // from v2.1.15 added 03.08.2016 'cmdmove' : 'نقل', // from v2.1.15 added 21.08.2016 'cmdempty' : 'تفريغ المجلد', // from v2.1.25 added 22.06.2017 'cmdundo' : 'تراجع', // from v2.1.27 added 31.07.2017 'cmdredo' : 'إعادة', // from v2.1.27 added 31.07.2017 'cmdpreference': 'التفضيلات', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'تحديد الكل', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'تحديد لا شيء', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'عكس الاختيار', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'فتح في نافذة جديدة', // from v2.1.38 added 3.4.2018 'cmdhide' : 'إخفاء (الأفضلية)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'إغلاق', 'btnSave' : 'حفظ', 'btnRm' : 'إزالة', 'btnApply' : 'تطبيق', 'btnCancel' : 'إلغاء', 'btnNo' : 'لا', 'btnYes' : 'نعم', 'btnMount' : 'تثبيت', // added 18.04.2012 'btnApprove': 'انتقل إلى $1 والموافقة', // from v2.1 added 26.04.2012 'btnUnmount': 'إلغاء التثبيت', // from v2.1 added 30.04.2012 'btnConv' : 'تحويل', // from v2.1 added 08.04.2014 'btnCwd' : 'هنا', // from v2.1 added 22.5.2015 'btnVolume' : 'الحجم', // from v2.1 added 22.5.2015 'btnAll' : 'الكل', // from v2.1 added 22.5.2015 'btnMime' : 'نوع MIME', // from v2.1 added 22.5.2015 'btnFileName':'إسم الملف', // from v2.1 added 22.5.2015 'btnSaveClose': 'حفظ وإغلاق', // from v2.1 added 12.6.2015 'btnBackup' : 'نسخ احتياطي', // fromv2.1 added 28.11.2015 'btnRename' : 'إعادة تسمية', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'إعادة تسمية (الجميع)', // from v2.1.24 added 6.4.2017 'btnPrevious' : '($1/$2) السابق', // from v2.1.24 added 11.5.2017 'btnNext' : '($1/$2) التالي', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'حفظ كــ', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'فتح مجلد', 'ntffile' : 'فتح ملف', 'ntfreload' : 'إعادة تحميل محتوى المجلد', 'ntfmkdir' : 'إنشاء مجلد', 'ntfmkfile' : 'إنشاء ملفات', 'ntfrm' : 'حذف العناصر', 'ntfcopy' : 'نسخ العناصر', 'ntfmove' : 'نقل االعناصر', 'ntfprepare' : 'فحص العناصر الموجودة', 'ntfrename' : 'إعادة تسمية الملفات', 'ntfupload' : 'تحميل الملفات', 'ntfdownload' : 'تنزيل الملفات', 'ntfsave' : 'حفظ الملفات', 'ntfarchive' : 'إنشاء أرشيف', 'ntfextract' : 'استخراج ملفات من الأرشيف', 'ntfsearch' : 'البحث في الملفات', 'ntfresize' : 'تغيير حجم الصور', 'ntfsmth' : 'القيام بشيء ما', 'ntfloadimg' : 'تحميل الصورة', 'ntfnetmount' : 'تثبيت حجم الشبكة', // added 18.04.2012 'ntfnetunmount': 'إلغاء تثبيت حجم الشبكة', // from v2.1 added 30.04.2012 'ntfdim' : 'اكتساب أبعاد الصورة', // added 20.05.2013 'ntfreaddir' : 'قراءة معلومات المجلد', // from v2.1 added 01.07.2013 'ntfurl' : 'الحصول على URL الرابط', // from v2.1 added 11.03.2014 'ntfchmod' : 'تغيير نمط الملف', // from v2.1 added 20.6.2015 'ntfpreupload': 'التحقق من اسم ملف التحميل', // from v2.1 added 31.11.2015 'ntfzipdl' : 'إنشاء ملف للتنزيل', // from v2.1.7 added 23.1.2016 'ntfparents' : 'الحصول على معلومات المسار', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'معالجة الملف المرفوع', // from v2.1.17 added 2.11.2016 'ntftrash' : 'القيام بالرمي في القمامة', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'القيام بالاستعادة من سلة المهملات', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'التحقق من مجلد الوجهة', // from v2.1.24 added 3.5.2017 'ntfundo' : 'التراجع عن العملية السابقة', // from v2.1.27 added 31.07.2017 'ntfredo' : 'إعادة التراجع السابق', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'فحص المحتويات', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Trash', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'غير معلوم', 'Today' : 'اليوم', 'Yesterday' : 'الأمس', 'msJan' : 'كانون الثاني', 'msFeb' : 'شباط', 'msMar' : 'آذار', 'msApr' : 'نيسان', 'msMay' : 'أيار', 'msJun' : 'حزيران', 'msJul' : 'تموز', 'msAug' : 'آب', 'msSep' : 'أيلول', 'msOct' : 'تشرين الأول', 'msNov' : 'تشرين الثاني', 'msDec' : 'كانون الأول ', 'January' : 'كانون الثاني', 'February' : 'شباط', 'March' : 'آذار', 'April' : 'نيسان', 'May' : 'أيار', 'June' : 'حزيران', 'July' : 'تموز', 'August' : 'آب', 'September' : 'أيلول', 'October' : 'تشرين الأول', 'November' : 'تشرين الثاني', 'December' : 'كانون الثاني', 'Sunday' : 'الأحد', 'Monday' : 'الاثنين', 'Tuesday' : 'الثلاثاء', 'Wednesday' : 'الإربعاء', 'Thursday' : 'الخميس', 'Friday' : 'الجمعة', 'Saturday' : 'السبت', 'Sun' : 'الأحد', 'Mon' : 'الاثنين', 'Tue' : 'الثلاثاء', 'Wed' : 'الإربعاء', 'Thu' : 'الخميس', 'Fri' : 'الجمعة', 'Sat' : 'السبت', /******************************** sort variants ********************************/ 'sortname' : 'حسب الاسم', 'sortkind' : 'حسب النوع', 'sortsize' : 'حسب الحجم', 'sortdate' : 'حسب التاريخ', 'sortFoldersFirst' : 'المجلدات أولا', 'sortperm' : 'حسب الصلاحية', // from v2.1.13 added 13.06.2016 'sortmode' : 'حسب النمط', // from v2.1.13 added 13.06.2016 'sortowner' : 'حسب المالك', // from v2.1.13 added 13.06.2016 'sortgroup' : 'حسب المجموعة', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'أيضا عرض الشجرة', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'file.txt بدون عنوان' : 'NewFile.txt', // added 10.11.2015 'مجلد بلا عنوان' : 'NewFolder', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: ملف', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'التأكيد مطلوب', 'confirmRm' : 'هل تريد بالتأكيد إزالة العناصر نهائيًا؟
    لا يمكن التراجع عن هذا الإجراء! ', 'confirmRepl' : 'استبدال الملف القديم بملف جديد؟ (إذا كان يحتوي على مجلدات ، فسيتم دمجه. للنسخ الاحتياطي والاستبدال ، حدد النسخ الاحتياطي.)', 'confirmRest' : 'هل تريد استبدال العنصر الموجود بالعنصر الموجود في المهملات؟', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'ليس بصيغة UTF-8
    التحويل إلى UTF-8؟
    تصبح المحتويات UTF-8 بالحفظ بعد التحويل.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'تعذر الكشف عن ترميز الأحرف لهذا الملف. تحتاج إلى التحويل مؤقتاً إلى UTF-8 للتحرير.
    الرجاء تحديد ترميز الأحرف لهذا الملف.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'لقد تم تعديله.
    قد تخسر العمل إذا لم تقم بحفظ التغييرات.', // from v2.1 added 15.7.2015 'confirmTrash' : 'هل أنت متأكد أنك تريد نقل العناصر إلى سلة المهملات؟', //from v2.1.24 added 29.4.2017 'confirmMove' : 'هل أنت متأكد أنك تريد نقل العناصر إلى "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'تطبيق على الكل', 'name' : 'الاسم', 'size' : 'الحجم', 'perms' : 'الصلاحيات', 'modify' : 'التعديل', 'kind' : 'النوع', 'read' : 'قابل للقراءة', 'write' : 'قابل للكتابة', 'noaccess' : 'وصول ممنوع', 'and' : 'و', 'unknown' : 'غير معروف', 'selectall' : 'تحديد كل العناصر', 'selectfiles' : 'تحديد العناصر', 'selectffile' : 'تحديد العنصر الأول', 'selectlfile' : 'تحديد العنصر الأخير', 'viewlist' : 'عرض القائمة', 'viewicons' : 'عرض أيْقونات', 'viewSmall' : 'أيقونات صغيرة', // from v2.1.39 added 22.5.2018 'viewMedium' : 'أيقونات متوسطة', // from v2.1.39 added 22.5.2018 'viewLarge' : 'أيقونات كبيرة', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'أيقونات كبيرة جداً', // from v2.1.39 added 22.5.2018 'places' : 'المواقع', 'calc' : 'حساب', 'path' : 'المسار', 'aliasfor' : 'اسم مستعار لـ', 'locked' : 'مقفل', 'dim' : 'الأبعاد', 'files' : 'ملفات', 'folders' : 'مجلدات', 'items' : 'عناصر', 'yes' : 'نعم', 'no' : 'لا', 'link' : 'الرابط', 'searcresult' : 'نتائج البحث', 'selected' : 'العناصر المحددة', 'about' : 'حول', 'shortcuts' : 'الاختصارات', 'help' : 'المساعدة', 'webfm' : 'مدير ملفات الويب', 'ver' : 'الإصدار', 'protocolver' : 'إصدار البرتوكول', 'homepage' : 'رئيسية المشروع', 'docs' : 'الوثائق', 'github' : 'شاركنا على Github', 'twitter' : 'تابعنا على تويتر', 'facebook' : 'انضم إلينا على الفيس بوك', 'team' : 'الفريق', 'chiefdev' : 'رئيس المبرمجين', 'developer' : 'مبرمج', 'contributor' : 'مساهم', 'maintainer' : 'مشرف', 'translator' : 'مترجم', 'icons' : 'أيقونات', 'dontforget' : 'ولا تنس أن تأخذ المنشفة', 'shortcutsof' : 'الاختصارات غير مفعلة', 'dropFiles' : 'إفلات الملفات هنا', 'or' : 'أو', 'selectForUpload' : 'اختر الملفات', 'moveFiles' : 'نقل العناصر', 'copyFiles' : 'نسخ العناصر', 'restoreFiles' : 'استعادة العناصر', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'إزالة من الأماكن', 'aspectRatio' : 'ابعاد متزنة', 'scale' : 'مقياس', 'width' : 'عرض', 'height' : 'طول', 'resize' : 'تغيير الحجم', 'crop' : 'قص', 'rotate' : 'تدوير', 'rotate-cw' : 'استدارة 90 درجة مع عقارب الساعة', 'rotate-ccw' : 'استدارة 90 درجة عكس عقارب الساعة', 'degree' : '°', 'netMountDialogTitle' : 'تثبيت حجم الشبكة', // added 18.04.2012 'protocol' : 'البروتوكول', // added 18.04.2012 'host' : 'المضيف', // added 18.04.2012 'port' : 'المنفذ', // added 18.04.2012 'user' : 'المستخدم', // added 18.04.2012 'pass' : 'كلمة المرور', // added 18.04.2012 'confirmUnmount' : 'هل أنت متأكد من إلغاء تثبيت $1؟', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'قم بإسقاط أو لصق الملفات من المتصفح', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'قم بإسقاط الملفات أو لصق الروابط أو الصور (الحافظة) هنا', // from v2.1 added 07.04.2014 'encoding' : 'الترميز', // from v2.1 added 19.12.2014 'locale' : 'اللغة', // from v2.1 added 19.12.2014 'searchTarget' : 'الهدف: $1', // from v2.1 added 22.5.2015 'searchMime' : 'البحث عن طريق إدخال نوع MIME', // from v2.1 added 22.5.2015 'owner' : 'المالك', // from v2.1 added 20.6.2015 'group' : 'المجموعة', // from v2.1 added 20.6.2015 'other' : 'أخرى', // from v2.1 added 20.6.2015 'execute' : 'تنفيذ', // from v2.1 added 20.6.2015 'perm' : 'التصريح', // from v2.1 added 20.6.2015 'mode' : 'النمط', // from v2.1 added 20.6.2015 'emptyFolder' : 'المجلد فارغ', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'المجلد فارغ\\إفلات لإضافة عناصر', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'المجلد فارغ\\نقرة طويلة لإضافة العناصر', // from v2.1.6 added 30.12.2015 'quality' : 'النوعية', // from v2.1.6 added 5.1.2016 'autoSync' : 'مزامنة آلية', // from v2.1.6 added 10.1.2016 'moveUp' : 'تحريك لأعلى', // from v2.1.6 added 18.1.2016 'getLink' : 'الحصول على رابط URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'العناصر المحددة ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'معرف المجلد', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'السماح بالوصول دون اتصال', // from v2.1.10 added 3.25.2016 'reAuth' : 'لإعادة المصادقة', // from v2.1.10 added 3.25.2016 'nowLoading' : 'جاري التحميل الآن...', // from v2.1.12 added 4.26.2016 'openMulti' : 'فتح ملفات متعددة', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'أنت تحاول فتح $1 ملف. هل أنت متأكد أنك تريد الفتح في المتصفح؟', // from v2.1.12 added 5.14.2016 'emptySearch' : 'نتائج البحث فارغة في هدف البحث.', // from v2.1.12 added 5.16.2016 'editingFile' : 'إنها تقوم بتحرير ملف.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'لقد قمت بتحديد $1 عناصر.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'يوجد لديك $1 عناصر في الحافظة.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'البحث المتزايد هو فقط من العرض الحالي.', // from v2.1.13 added 6.30.2016 'reinstate' : 'إعادة', // from v2.1.15 added 3.8.2016 'complete' : '$1 إكتمل', // from v2.1.15 added 21.8.2016 'contextmenu' : 'قائمة السياق', // from v2.1.15 added 9.9.2016 'pageTurning' : 'قلب الصفحة', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'جذور الحجم', // from v2.1.16 added 16.9.2016 'reset' : 'إعادة تعيين', // from v2.1.16 added 1.10.2016 'bgcolor' : 'لون الخلفية', // from v2.1.16 added 1.10.2016 'colorPicker' : 'أداة انتقاء اللون', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'شبكة 8 بكسل', // from v2.1.16 added 4.10.2016 'enabled' : 'مفعل', // from v2.1.16 added 4.10.2016 'disabled' : 'معطل', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'نتائج البحث فارغة في العرض الحالي. \\ اضغط على [Enter] لتوسيع هدف البحث.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'نتائج البحث الحرف الأول فارغة في العرض الحالي.', // from v2.1.23 added 24.3.2017 'textLabel' : 'تسمية نصية', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 دقائق باقية', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'إعادة فتح مع الترميز المحدد', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'حفظ مع الترميز المحدد', // from v2.1.19 added 2.12.2016 'selectFolder' : 'تحديد مجلد', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'البحث بالحرف الأول', // from v2.1.23 added 24.3.2017 'presets' : 'الإعدادات المسبقة', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'هناك عدد كبير جداً من العناصر لذا لا يمكن وضعها في سلة المهملات.', // from v2.1.25 added 9.6.2017 'TextArea' : 'منطقة النص', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'إفراغ المجلد "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'لا توجد عناصر في مجلد "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'الأفضلية', // from v2.1.26 added 28.6.2017 'language' : 'اللغة', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'تهيئة الإعدادات المحفوظة في هذا المتصفح', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'إعدادات شريط الأدوات', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 حروف متبقية.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 سطور متبقية.', // from v2.1.52 added 16.1.2020 'sum' : 'المجموع', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'حجم ملف تقريبي', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'التركيز على عنصر الحوار مع تمرير الماوس', // from v2.1.30 added 2.11.2017 'select' : 'حدد', // from v2.1.30 added 23.11.2017 'selectAction' : 'الإجراء عند تحديد الملف', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'الفتح باستخدام المحرر المستخدم آخر مرة', // from v2.1.30 added 23.11.2017 'selectinvert' : 'عكس الاختيار', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'هل أنت متأكد أنك تريد إعادة تسمية $1 عناصر محددة مثل $2؟
    هذا لا يمكن التراجع عنه !', // from v2.1.31 added 4.12.2017 'batchRename' : 'إعادة تسمية الحزمة', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ رقم', // from v2.1.31 added 8.12.2017 'asPrefix' : 'إضافة بادئة', // from v2.1.31 added 8.12.2017 'asSuffix' : 'إضافة لاحقة', // from v2.1.31 added 8.12.2017 'changeExtention' : 'تغيير الامتداد', // from v2.1.31 added 8.12.2017 'columnPref' : 'إعدادات الأعمدة (عرض القائمة)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'ستنعكس جميع التغييرات على الفور على الأرشيف.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'لن تنعكس أي تغييرات حتى يتم فك هذا المجلد.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'المجلد (المجلدات) التالية المركبة على هذا المجلد غير مثبتة أيضاً. هل أنت متأكد من إلغاء تحميله؟', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'معلومات التحديد', // from v2.1.33 added 7.3.2018 'hashChecker' : 'خوارزميات لإظهار تجزئة الملف', // from v2.1.33 added 10.3.2018 'infoItems' : 'عناصر المعلومات (لوحة معلومات التحديد)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'اضغط مرة أخرى للخروج.', // from v2.1.38 added 1.4.2018 'toolbar' : 'شريط الأدوات', // from v2.1.38 added 4.4.2018 'workspace' : 'مساحة العمل', // from v2.1.38 added 4.4.2018 'dialog' : 'الحوار', // from v2.1.38 added 4.4.2018 'all' : 'الكل', // from v2.1.38 added 4.4.2018 'iconSize' : 'حجم الأيقونة (عرض الأيقونات)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'افتح نافذة المحرر المكبرة', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'نظراً لعدم توفر التحويل بواسطة API حالياً ، يرجى التحويل على موقع الويب.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'بعد التحويل ، يجب أن تقوم بالتحميل مع عنوان رابط العنصر أو الملف الذي تم تنزيله لحفظ الملف المحول.', //from v2.1.40 added 8.7.2018 'convertOn' : 'تحويل على موقع $1', // from v2.1.40 added 10.7.2018 'integrations' : 'تكاملات', // from v2.1.40 added 11.7.2018 'integrationWith' : 'يحتوي elFinder على الخدمات الخارجية التالية المتكاملة. يرجى التحقق من شروط الاستخدام وسياسة الخصوصية وما إلى ذلك قبل استخدامها.', // from v2.1.40 added 11.7.2018 'showHidden' : 'إظهار العناصر المخفية', // from v2.1.41 added 24.7.2018 'hideHidden' : 'إخفاء العناصر المخفية', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'إظهار / إخفاء العناصر المخفية', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'أنواع الملفات لتفعيلها مع "ملف جديد"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'نوع الملف النصي', // from v2.1.41 added 7.8.2018 'add' : 'إضافة', // from v2.1.41 added 7.8.2018 'theme' : 'الثيم', // from v2.1.43 added 19.10.2018 'default' : 'الافتراضي', // from v2.1.43 added 19.10.2018 'description' : 'الوصف', // from v2.1.43 added 19.10.2018 'website' : 'الموقع الالكتروني', // from v2.1.43 added 19.10.2018 'author' : 'المؤلف', // from v2.1.43 added 19.10.2018 'email' : 'البريد الالكتروني', // from v2.1.43 added 19.10.2018 'license' : 'الرخصة', // from v2.1.43 added 19.10.2018 'exportToSave' : 'لا يمكن حفظ هذا العنصر. لتجنب فقدان التحريرات التي تحتاجها للتصدير إلى جهاز الكمبيوتر الخاص بك.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'انقر نقراً مزدوجاً فوق الملف لتحديده.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'استخدام وضع ملء الشاشة', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'غير معروف', 'kindRoot' : 'جذر الحجم', // from v2.1.16 added 16.10.2016 'kindFolder' : 'مجلد', 'kindSelects' : 'مختارات', // from v2.1.29 added 29.8.2017 'kindAlias' : 'اسم مستعار', 'kindAliasBroken' : 'اسم مستعار مكسور', // applications 'kindApp' : 'التطبيق', 'kindPostscript' : 'وثيقة Postscript', 'kindMsOffice' : 'وثيقة Microsoft Office', 'kindMsWord' : 'وثيقة Microsoft Word', 'kindMsExcel' : 'وثيقة Microsoft Excel', 'kindMsPP' : 'عرض تقديمي Microsoft Powerpoint', 'kindOO' : 'وثيقة Open Office', 'kindAppFlash' : 'تطبيق فلاش', 'kindPDF' : 'تنسيق الوثائق المحمولة (PDF)', 'kindTorrent' : 'ملف Bittorrent ', 'kind7z' : 'أرشيف 7z', 'kindTAR' : 'أرشيف TAR', 'kindGZIP' : 'أرشيف GZIP', 'kindBZIP' : 'أرشيف BZIP', 'kindXZ' : 'أرشيف XZ', 'kindZIP' : 'أرشيف ZIP', 'kindRAR' : 'أرشيف RAR', 'kindJAR' : 'أرشيف Java JAR', 'kindTTF' : 'خط True Type ', 'kindOTF' : 'خط Open Type ', 'kindRPM' : 'حزمة RPM', // texts 'kindText' : 'وثيقة نصية', 'kindTextPlain' : 'نص عادي', 'kindPHP' : 'مصدر PHP', 'kindCSS' : 'ورقة الأنماط المتتالية', 'kindHTML' : 'وثيقة HTML', 'kindJS' : 'مصدر Javascript', 'kindRTF' : 'Rich Text Format', 'kindC' : 'مصدر C', 'kindCHeader' : 'مصدر C header', 'kindCPP' : 'مصدر C++', 'kindCPPHeader' : 'مصدر C++ header', 'kindShell' : 'مصدر Unix shell', 'kindPython' : 'مصدر Python', 'kindJava' : 'مصدر Java', 'kindRuby' : 'مصدر Ruby', 'kindPerl' : 'مصدر Perl', 'kindSQL' : 'مصدر SQL', 'kindXML' : 'وثيقة XML', 'kindAWK' : 'مصدر AWK', 'kindCSV' : 'ملف CSV', 'kindDOCBOOK' : 'وثيقة Docbook XML', 'kindMarkdown' : 'نص Markdown', // added 20.7.2015 // images 'kindImage' : 'صورة', 'kindBMP' : 'صورة BMP', 'kindJPEG' : 'صورة JPEG', 'kindGIF' : 'صورة GIF', 'kindPNG' : 'صورة PNG', 'kindTIFF' : 'صورة TIFF', 'kindTGA' : 'صورة TGA', 'kindPSD' : 'صورة Adobe Photoshop', 'kindXBITMAP' : 'صورة X bitmap', 'kindPXM' : 'صورة Pixelmator', // media 'kindAudio' : 'وسائط صوت', 'kindAudioMPEG' : 'ملف صوتي MPEG ', 'kindAudioMPEG4' : 'ملف صوتي MPEG-4', 'kindAudioMIDI' : 'ملف صوتي MIDI', 'kindAudioOGG' : 'ملف صوتي Ogg Vorbis', 'kindAudioWAV' : 'ملف صوتي WAV', 'AudioPlaylist' : 'قائمة تشغيل MP3', 'kindVideo' : 'وسائط فيديو', 'kindVideoDV' : 'ملف فيديو DV', 'kindVideoMPEG' : 'ملف فيديو MPEG', 'kindVideoMPEG4' : 'ملف فيديو MPEG-4', 'kindVideoAVI' : 'ملف فيديو AVI', 'kindVideoMOV' : 'ملف فيديو Quick Time', 'kindVideoWM' : 'ملف فيديو Windows Media', 'kindVideoFlash' : 'ملف فيديو Flash', 'kindVideoMKV' : 'ملف فيديو Matroska', 'kindVideoOGG' : 'ملف فيديو Ogg' } }; })); application/library/js/i18n/elfinder.fa.js000064400000122465146731177160014450 0ustar00/** * فارسی translation * @author Keyhan Mohammadpour * @author mhs prog * @version 2021-04-14 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.fa = { translator : 'Keyhan Mohammadpour <keyhan_universityworks@yahoo.com>, Farhad Zare <farhad@persianoc.com>', language : 'فارسی', direction : 'rtl', dateFormat : 'd.m.Y H:i', // will show like: 14.04.2021 19:24 fancyDateFormat : '$1 H:i', // will show like: امروز 19:24 nonameDateFormat : 'ymd-His', // noname upload will show like: 210414-192445 messages : { /********************************** errors **********************************/ 'error' : 'خطا', 'errUnknown' : 'خطای ناشناخته.', 'errUnknownCmd' : 'دستور ناشناخته.', 'errJqui' : 'تنظیمات کتابخانه JQuery UI شما به درستی انجام نشده است. این کتابخانه بایستی شامل Resizable ،Draggable و Droppable باشد.', 'errNode' : 'elfinder به درستی ایجاد نشده است.', 'errURL' : 'تنظیمات elfinder شما به درستی انجام نشده است. تنظیم Url را اصلاح نمایید.', 'errAccess' : 'محدودیت سطح دسترسی', 'errConnect' : 'امکان اتصال به مدیریت وجود ندارد.', 'errAbort' : 'ارتباط قطع شده است.', 'errTimeout' : 'مهلت زمانی ارتباط شما به اتمام رسیده است.', 'errNotFound' : 'تنظیم مدیریت یافت نشد.', 'errResponse' : 'پاسخ دریافتی از مدیریت صحیح نمی باشد.', 'errConf' : 'تنطیمات مدیریت به درستی انجام نشده است.', 'errJSON' : 'ماژول PHP JSON نصب نیست.', 'errNoVolumes' : 'درایوهای قابل خواندن یافت نشدند.', 'errCmdParams' : 'پارامترهای دستور "$1" به صورت صحیح ارسال نشده است.', 'errDataNotJSON' : 'داده ها در قالب JSON نمی باشند.', 'errDataEmpty' : 'داده دریافتی خالی است.', 'errCmdReq' : 'درخواست از سمت مدیریت نیازمند نام دستور می باشد.', 'errOpen' : 'امکان باز نمودن "$1" وجود ندارد.', 'errNotFolder' : 'آیتم موردنظر پوشه نیست.', 'errNotFile' : 'آیتم موردنظر فایل نیست.', 'errRead' : 'امکان خواندن "$1" وجود ندارد.', 'errWrite' : 'امکان نوشتن در درون "$1" وجود ندارد.', 'errPerm' : 'شما مجاز به انجام این عمل نمی باشید.', 'errLocked' : '"$1" قفل گردیده است و شما قادر به تغییر نام ، حذف و یا جابجایی آن نمی باشید.', 'errExists' : 'فایلی با نام "$1" هم اکنون وجود دارد.', 'errInvName' : 'نام انتخابی شما صحیح نمی باشد.', 'errInvDirname' : 'نام پوشه غیرمعتبر می باشد.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'پوشه مورد نظر یافت نشد.', 'errFileNotFound' : 'فایل مورد نظر یافت نشد.', 'errTrgFolderNotFound' : 'پوشه مقصد با نام "$1" یافت نشد.', 'errPopup' : 'مرورگر شما ار باز شدن پنجره popup جلوگیری می کند، لطفا تنظیمات مربوطه را در مرورگر خود فعال نمایید.', 'errMkdir' : 'امکان ایجاد پوشه ای با نام "$1" وجود ندارد.', 'errMkfile' : 'امکان ایجاد فایلی با نام "$1" وجود ندارد.', 'errRename' : 'امکان تغییر نام فایل "$1" وجود ندارد.', 'errCopyFrom' : 'کپی نمودن از درایو با نام "$1" ممکن نمی باشد.', 'errCopyTo' : 'کپی نمودن به درایو با نام "$1" ممکن نمی باشد.', 'errMkOutLink' : 'امکان ایجاد لینک به خارج از مسیر ریشه وجود ندارد.', // from v2.1 added 03.10.2015 'errUpload' : 'خطای آپلود', // old name - errUploadCommon 'errUploadFile' : 'امکان آپلود "$1" وجود ندارد.', // old name - errUpload 'errUploadNoFiles' : 'فایلی برای آپلود یافت نشد.', 'errUploadTotalSize' : 'حجم داده بیش از حد مجاز می باشد.', // old name - errMaxSize 'errUploadFileSize' : 'حجم فایل بیش از حد مجاز می باشد.', // old name - errFileMaxSize 'errUploadMime' : 'نوع فایل انتخابی مجاز نمی باشد.', 'errUploadTransfer' : 'در انتقال "$1" خطایی رخ داده است.', 'errUploadTemp' : 'امکان ایجاد فایل موقت جهت آپلود وجود ندارد.', // from v2.1 added 26.09.2015 'errNotReplace' : 'آیتم "$1" از قبل وجود دارد و امکان جایگزینی آن با آیتمی از نوع دیگر وجود ندارد.', // new 'errReplace' : 'امکان جایگزینی "$1" وجود ندارد.', 'errSave' : 'امکان ذخیره کردن "$1" وجود ندارد.', 'errCopy' : 'امکان کپی کردن "$1" وجود ندارد.', 'errMove' : 'امکان جابجایی "$1" وجود ندارد.', 'errCopyInItself' : 'امکان کپی کردن "$1" در درون خودش وجود ندارد.', 'errRm' : 'امکان حذف کردن "$1" وجود ندارد.', 'errTrash' : 'امکان حذف وجود ندارد.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'امکان حذف فایل(ها) از مبدا وجود ندارد.', 'errExtract' : 'امکان استخراج فایل فشرده "$1" وجود ندارد.', 'errArchive' : 'امکان ایجاد فایل فشرده وجود ندارد.', 'errArcType' : 'نوع ناشناخته برای فایل فشرده.', 'errNoArchive' : 'این فایل فشرده نیست یا اینکه این نوع فایل فشرده پشتیبانی نمی شود.', 'errCmdNoSupport' : 'مدیریت از این دستور پشتیبانی نمی کند.', 'errReplByChild' : 'امکان جایگزینی پوشه "$1" با یک آیتم از درون خودش وجود ندارد.', 'errArcSymlinks' : 'به دلایل مسائل امنیتی امکان باز کردن فایل فشرده دارای symlinks وجود ندارد.', // edited 24.06.2012 'errArcMaxSize' : 'فایل های فشرده به حداکثر اندازه تعیین شده رسیده اند.', 'errResize' : 'امکان تغییر اندازه "$1" وجود ندارد.', 'errResizeDegree' : 'درجه چرخش نامعتبر است.', // added 7.3.2013 'errResizeRotate' : 'امکان چرخش تصویر وجود ندارد.', // added 7.3.2013 'errResizeSize' : 'اندازه تصویر نامعتبر است.', // added 7.3.2013 'errResizeNoChange' : 'تغییری در اندازه تصویر ایجاد نشده است.', // added 7.3.2013 'errUsupportType' : 'این نوع فایل پشتیبانی نمی شود.', 'errNotUTF8Content' : 'فایل "$1" به صورت UTF-8 ذخیره نشده و امکان ویرایش آن وجود ندارد.', // added 9.11.2011 'errNetMount' : 'امکان اتصال "$1" وجود ندارد.', // added 17.04.2012 'errNetMountNoDriver' : 'این پروتکل پشتیبانی نمی شود.', // added 17.04.2012 'errNetMountFailed' : 'اتصال ناموفق بود.', // added 17.04.2012 'errNetMountHostReq' : 'میزبان موردنیاز است.', // added 18.04.2012 'errSessionExpires' : 'اعتبار جلسه کاری شما بدلیل عدم فعالیت برای مدت زمان طولانی به اتمام رسیده است.', 'errCreatingTempDir' : 'امکان ایجاد دایرکتوری موقت وجود ندارد: "$1"', 'errFtpDownloadFile' : 'امکان دریافت فایل از FTP وجود ندارد: "$1"', 'errFtpUploadFile' : 'امکان آپلود فایل به FTP وجود ندارد: "$1"', 'errFtpMkdir' : 'امکان ایجاد دایرکتوری برروی FTP وجود ندارد: "$1"', 'errArchiveExec' : 'خطا در زمان فشرده سازی این فایل‌ها: "$1"', 'errExtractExec' : 'خطا در زمان بازگشایی این فایل‌ها: "$1"', 'errNetUnMount' : 'امکان قطع اتصال وجود ندارد.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'امکان تبدیل به UTF-8 وجود ندارد', // from v2.1 added 08.04.2014 'errFolderUpload' : 'جهت آپلود کردن پوشه، از یک مرورگر مدرن استفاده نمایید.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'در هنگان جستجو برای "$1" خطایی رخ داده است. نتیجه جستجو به صورت ناتمام می باشد.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'اعتبارسنجی مجدد موردنیاز است.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'حداکثر تعداد انتخاب قابل قبول $1 می‌باشد.', // from v2.1.17 added 17.10.2016 'errRestore' : 'امکان بازیابی وجود ندارد. مقصد بازیابی نامشخص است.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'ویرایشگری برای این نوع فایل یافت نشد.', // from v2.1.25 added 23.5.2017 'errServerError' : 'خطایی در سمت سرور به وجود آمده است.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'امکان خالی کردن پوشه "$1" وجود ندارد.', // from v2.1.25 added 22.6.2017 'moreErrors' : '$1 خطای دیگر نیز وجود دارد.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'ایجاد فایل فشرده', 'cmdback' : 'بازگشت به عقب', 'cmdcopy' : 'کپی', 'cmdcut' : 'بریدن', 'cmddownload' : 'دانلود', 'cmdduplicate' : 'تکثیر فایل', 'cmdedit' : 'ویرایش محتوای فایل', 'cmdextract' : 'بازگشایی فایل فشرده', 'cmdforward' : 'حرکت به جلو', 'cmdgetfile' : 'انتخاب فایل‌ها', 'cmdhelp' : 'درباره این نرم‌افزار', 'cmdhome' : 'ریشه', 'cmdinfo' : 'مشاهده مشخصات', 'cmdmkdir' : 'پوشه جدید', 'cmdmkdirin' : 'انتقال به پوشه جدید', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'فایل جدید', 'cmdopen' : 'باز کردن', 'cmdpaste' : 'چسباندن', 'cmdquicklook' : 'پیش نمایش', 'cmdreload' : 'بارگذاری مجدد', 'cmdrename' : 'تغییر نام', 'cmdrm' : 'حذف', 'cmdtrash' : 'انتقال به سطل بازیافت', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'بازیابی', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'جستجوی فایل', 'cmdup' : 'رفتن به سطح بالاتر', 'cmdupload' : 'آپلود فایل', 'cmdview' : 'مشاهده', 'cmdresize' : 'تغییر اندازه و چرخش', 'cmdsort' : 'مرتب سازی', 'cmdnetmount' : 'اتصال درایو شبکه', // added 18.04.2012 'cmdnetunmount': 'قطع اتصال', // from v2.1 added 30.04.2012 'cmdplaces' : 'به مسیرهای', // added 28.12.2014 'cmdchmod' : 'تغییر حالت', // from v2.1 added 20.6.2015 'cmdopendir' : 'بازکردن یک پوشه', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'بازنشانی عرض ستون', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'حالت نمایش تمام صفحه', // from v2.1.15 added 03.08.2016 'cmdmove' : 'انتقال', // from v2.1.15 added 21.08.2016 'cmdempty' : 'خالی کردن پوشه', // from v2.1.25 added 22.06.2017 'cmdundo' : 'خنثی‌سازی', // from v2.1.27 added 31.07.2017 'cmdredo' : 'انجام مجدد', // from v2.1.27 added 31.07.2017 'cmdpreference': 'تنظیمات', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'انتخاب همه موارد', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'لغو انتخاب', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'انتخاب معکوس', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'باز کردن در پنجره جدید', // from v2.1.38 added 3.4.2018 'cmdhide' : 'مخفی (پیشنهادی)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'بستن', 'btnSave' : 'ذخیره', 'btnRm' : 'حذف', 'btnApply' : 'اعمال', 'btnCancel' : 'انصراف', 'btnNo' : 'خیر', 'btnYes' : 'بلی', 'btnMount' : 'اتصال', // added 18.04.2012 'btnApprove': 'رفتن به $1 و تایید', // from v2.1 added 26.04.2012 'btnUnmount': 'قطع اتصال', // from v2.1 added 30.04.2012 'btnConv' : 'تبدیل', // from v2.1 added 08.04.2014 'btnCwd' : 'اینجا', // from v2.1 added 22.5.2015 'btnVolume' : 'درایو', // from v2.1 added 22.5.2015 'btnAll' : 'همه', // from v2.1 added 22.5.2015 'btnMime' : 'نوع فایل', // from v2.1 added 22.5.2015 'btnFileName':'نام فایل', // from v2.1 added 22.5.2015 'btnSaveClose': 'ذخیره و بستن', // from v2.1 added 12.6.2015 'btnBackup' : 'پشتیبان‌گیری', // fromv2.1 added 28.11.2015 'btnRename' : 'تغییر نام', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'تغییر نام(همه)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'قبلی ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'بعدی ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'ذخیره با نام جدید', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'در حال باز کردن پوشه', 'ntffile' : 'در حال باز کردن فایل', 'ntfreload' : 'بارگذاری مجدد محتویات پوشه', 'ntfmkdir' : 'در حال ایجاد پوشه', 'ntfmkfile' : 'در حال ایجاد فایل', 'ntfrm' : 'در حال حذف موارد موردنظر', 'ntfcopy' : 'در حال کپی موارد موردنظر', 'ntfmove' : 'در حال انتقال موارد موردنظر', 'ntfprepare' : 'بررسی موارد موجود', 'ntfrename' : 'در حال تغییر نام فایل', 'ntfupload' : 'در حال آپلود فایل', 'ntfdownload' : 'در حال دانلود فایل', 'ntfsave' : 'در حال ذخیره فایل', 'ntfarchive' : 'در حال ایجاد فایل فشرده', 'ntfextract' : 'در حال استخراج فایل ها از حالت فشرده', 'ntfsearch' : 'در حال جستجوی فایل', 'ntfresize' : 'در حال تغییر اندازه تصاویر', 'ntfsmth' : 'درحال انجام عملیات ....', 'ntfloadimg' : 'در حال بارگذاری تصویر', 'ntfnetmount' : 'در حال اتصال درایو شبکه', // added 18.04.2012 'ntfnetunmount': 'قطع اتصال درایو شبکه', // from v2.1 added 30.04.2012 'ntfdim' : 'در حال محاسبه ابعاد تصویر', // added 20.05.2013 'ntfreaddir' : 'در حال دریافت مشخصات پوشه', // from v2.1 added 01.07.2013 'ntfurl' : 'در حال دریافت URL', // from v2.1 added 11.03.2014 'ntfchmod' : 'در حال تغییر نوع فایل', // from v2.1 added 20.6.2015 'ntfpreupload': 'در حال تایید نام فایل جهت آپلود', // from v2.1 added 31.11.2015 'ntfzipdl' : 'در حال ایجاد فایل جهت دانلود', // from v2.1.7 added 23.1.2016 'ntfparents' : 'در حال دریافت اطلاعات مسیر', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'در حال پردازش فایل آپلود شده', // from v2.1.17 added 2.11.2016 'ntftrash' : 'در حال انتقال به سطل بازیافت', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'در حال بازیابی از سطل بازیافت', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'بررسی پوشه مقصد', // from v2.1.24 added 3.5.2017 'ntfundo' : 'در حال خنثی‌سازی آخرین عملیات', // from v2.1.27 added 31.07.2017 'ntfredo' : 'در حال انجام مجدد آخرین عملیات', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'در حال بررسی مطالب', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'سطل بازیافت', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'نامعلوم', 'Today' : 'امروز', 'Yesterday' : 'دیروز', 'msJan' : 'ژانویه', 'msFeb' : 'فوریه', 'msMar' : 'مارس', 'msApr' : 'آوریل', 'msMay' : 'می', 'msJun' : 'جون', 'msJul' : 'جولای', 'msAug' : 'آگوست', 'msSep' : 'سپتامبر', 'msOct' : 'اکتبر', 'msNov' : 'نوامبر', 'msDec' : 'دسامبر', 'January' : 'ژانویه', 'February' : 'فوریه', 'March' : 'مارس', 'April' : 'آوریل', 'May' : 'می', 'June' : 'جون', 'July' : 'جولای', 'August' : 'آگوست', 'September' : 'سپتامبر', 'October' : 'اکتبر', 'November' : 'نوامبر', 'December' : 'دسامبر', 'Sunday' : 'یک‌شنبه', 'Monday' : 'دوشنبه', 'Tuesday' : 'سه‌شنبه', 'Wednesday' : 'چهارشنبه', 'Thursday' : 'پنج‌شنبه', 'Friday' : 'جمعه', 'Saturday' : 'شنبه', 'Sun' : 'یک‌شنبه', 'Mon' : 'دوشنبه', 'Tue' : 'سه‌شنبه', 'Wed' : 'چهارشنبه', 'Thu' : 'پنج‌شنبه', 'Fri' : 'جمعه', 'Sat' : 'شنبه', /******************************** sort variants ********************************/ 'sortname' : 'بر اساس نام', 'sortkind' : 'بر اساس نوع', 'sortsize' : 'بر اساس اندازه', 'sortdate' : 'بر اساس تاریخ', 'sortFoldersFirst' : 'پوشه‌ها در ابتدای لیست', 'sortperm' : 'براساس سطح دسترسی', // from v2.1.13 added 13.06.2016 'sortmode' : 'براساس مد دسترسی', // from v2.1.13 added 13.06.2016 'sortowner' : 'براساس مالک', // from v2.1.13 added 13.06.2016 'sortgroup' : 'براساس گروه', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'همچنین نمای درختی', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'فایل .txt جدید', // added 10.11.2015 'untitled folder' : 'پوشه جدید', // added 10.11.2015 'Archive' : 'بایگانی جدید', // from v2.1 added 10.11.2015 'untitled file' : '$1 فایل جدید', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: فایل', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'تایید نهایی عملیات ضروری است.', 'confirmRm' : 'آیا مطمئنید که موارد انتخابی حذف شوند؟ موارد حدف شده قابل بازیابی نخواهند بود!', 'confirmRepl' : 'مالیلد جایگزینی فایل قدیمی با فایل جدید انجام شود؟ (برای جایگزینی پوشه محتوای قدیمی با محتوای پوشه جدید ادغام خواهد شد. برای تهیه پشتیبانی و سپس جایگزینی گزینه پشتیبان‌گیری را انتخاب نمایید)', 'confirmRest' : 'آیا مایلید موارد موجود با موارد بازیابی شده از سطل بازیافت جایگزین شود؟', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8 نیست
    تبدیل به UTF-8 انجام شود؟
    پس از ذخیره سازی محتوا به صورت UTF-8 خواهد بود.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'encoding این فایل قابل تشخیص نیست. جهت ویرایش نیاز است که به صورت موقت به UTF-8 تبدیل شود.
    لطفا encoding فایل را انتخاب نمایید.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'تغییراتی اعمال شده است.
    در صورت عدم ذخیره تغییرات از بین خواهد رفت.', // from v2.1 added 15.7.2015 'confirmTrash' : 'آیا مطمئنید که این موارد به سطل بازیافت منتقل شوند؟', //from v2.1.24 added 29.4.2017 'confirmMove' : 'آیا مطمئن هستید که می خواهید موارد را به "$1" منتقل کنید؟', //from v2.1.50 added 27.7.2019 'apllyAll' : 'اعمال تغییرات به همه موارد', 'name' : 'نام', 'size' : 'اندازه', 'perms' : 'سطح دسترسی', 'modify' : 'آخرین تغییرات', 'kind' : 'نوع', 'read' : 'خواندن', 'write' : 'نوشتن', 'noaccess' : 'دسترسی وجود ندارد', 'and' : 'و', 'unknown' : 'نامعلوم', 'selectall' : 'انتخاب همه موارد', 'selectfiles' : 'انتخاب یک یا چند مورد', 'selectffile' : 'انتخاب اولین مورد', 'selectlfile' : 'انتخاب آخرین مورد', 'viewlist' : 'حالت نمایش لیست', 'viewicons' : 'نمایش با آیکون', 'viewSmall' : 'آیکون‌های کوچک', // from v2.1.39 added 22.5.2018 'viewMedium' : 'آیکون‌های متوسط', // from v2.1.39 added 22.5.2018 'viewLarge' : 'آیکون‌های بزرگ', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'آیکون‌های خیلی بزرگ', // from v2.1.39 added 22.5.2018 'places' : 'مسیرها', 'calc' : 'محاسبه', 'path' : 'مسیر', 'aliasfor' : 'نام مستعار برای', 'locked' : 'قفل شده', 'dim' : 'ابعاد', 'files' : 'فایل‌ها', 'folders' : 'پوشه‌ها', 'items' : 'آیتم‌ها', 'yes' : 'بلی', 'no' : 'خیر', 'link' : 'لینک', 'searcresult' : 'نتایج جستجو', 'selected' : 'موارد انتخاب شده', 'about' : 'درباره', 'shortcuts' : 'میانبرها', 'help' : 'راهنمایی', 'webfm' : 'مدیر فایل تحت وب', 'ver' : 'نسخه', 'protocolver' : 'نسخه پروتکل', 'homepage' : 'صفحه اصلی پروژه', 'docs' : 'مستندات', 'github' : 'صفحه پروژه را در Github مشاهده کنید', 'twitter' : 'ما را در Twitter دنبال کنید', 'facebook' : 'به ما در facebook ملحق شوید', 'team' : 'تیم', 'chiefdev' : 'توسعه دهنده اصلی', 'developer' : 'توسعه دهنده', 'contributor' : 'مشارکت کننده', 'maintainer' : 'پشتیبان', 'translator' : 'مترجم', 'icons' : 'آیکون‌ها', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'میانبرها غیرفعال شده‌اند.', 'dropFiles' : 'فایل ها در این بخش رها کنید.', 'or' : 'یا', 'selectForUpload' : 'انتخاب فایل جهت آپلود', 'moveFiles' : 'انتقال موارد', 'copyFiles' : 'کپی موارد', 'restoreFiles' : 'بازیابی موارد', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'حذف', 'aspectRatio' : 'نسبت تصویر', 'scale' : 'مقیاس', 'width' : 'طول', 'height' : 'ارتفاع', 'resize' : 'تغییر اندازه', 'crop' : 'بریدن', 'rotate' : 'چرخاندن', 'rotate-cw' : 'چرخاندن 90 درجه در جهت عقربه‌های ساعت', 'rotate-ccw' : 'چرخاندن 90 درجه در جهت خلاف عقربه‌های ساعت', 'degree' : '°', 'netMountDialogTitle' : 'اتصال درایو شبکه', // added 18.04.2012 'protocol' : 'پروتکل', // added 18.04.2012 'host' : 'میزبان', // added 18.04.2012 'port' : 'پورت', // added 18.04.2012 'user' : 'نام کاربری', // added 18.04.2012 'pass' : 'کلمه عبور', // added 18.04.2012 'confirmUnmount' : 'مطمئن به قطع اتصال $1 می باشد؟', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'فایل‌ها را به داخل این کادر بیندازید یا از حافظه paste کنید', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'فایل‌ها را به داخل این کادر بیندازید یا از داخل حافظه آدرس URL/تصاویر را paste کنید', // from v2.1 added 07.04.2014 'encoding' : 'نوع کد گذاری', // from v2.1 added 19.12.2014 'locale' : 'نوع Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'مقصد: $1', // from v2.1 added 22.5.2015 'searchMime' : 'جستجو براساس MIME Type وارد شده', // from v2.1 added 22.5.2015 'owner' : 'مالک', // from v2.1 added 20.6.2015 'group' : 'گروه', // from v2.1 added 20.6.2015 'other' : 'سایر', // from v2.1 added 20.6.2015 'execute' : 'قابل اجرا', // from v2.1 added 20.6.2015 'perm' : 'سطح دسترسی', // from v2.1 added 20.6.2015 'mode' : 'مد دسترسی', // from v2.1 added 20.6.2015 'emptyFolder' : 'پوشه خالی است', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'پوشه خالی است، فایل‌ها را جهت افزودن کشیده و رها کنید', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'پوشه خالی است، یک اشاره طولانی برای افزودن فایل کافی است', // from v2.1.6 added 30.12.2015 'quality' : 'کیفیت', // from v2.1.6 added 5.1.2016 'autoSync' : 'همگام‌سازی خودکار', // from v2.1.6 added 10.1.2016 'moveUp' : 'حرکت به بالا', // from v2.1.6 added 18.1.2016 'getLink' : 'دریافت URL لینک', // from v2.1.7 added 9.2.2016 'selectedItems' : 'موارد انتخاب شده ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'شناسه پوشه', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'اجازه دسترسی به صورت آفلاین', // from v2.1.10 added 3.25.2016 'reAuth' : 'جهت اعتبارسنجی مجدد', // from v2.1.10 added 3.25.2016 'nowLoading' : 'در حال بازگذاری...', // from v2.1.12 added 4.26.2016 'openMulti' : 'بازکردن چندین فایل', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'شما قصد باز کردن $1 فایل را دارید. آیا مایلید همه موارد در مرورگر باز شود؟', // from v2.1.12 added 5.14.2016 'emptySearch' : 'موردی یافت نشد.', // from v2.1.12 added 5.16.2016 'editingFile' : 'در حال ویرایش یک فایل.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'شما $1 مورد را انتخاب کرده‌اید.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'در حافظه $1 مورد وجود دارد.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'جستجوی افزایش فقط از نمای فعلی.', // from v2.1.13 added 6.30.2016 'reinstate' : 'بازگرداندن', // from v2.1.15 added 3.8.2016 'complete' : 'عملیات $1 انجام شد', // from v2.1.15 added 21.8.2016 'contextmenu' : 'منو راست', // from v2.1.15 added 9.9.2016 'pageTurning' : 'چرخش صفحه', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'ریشه‌های درایو', // from v2.1.16 added 16.9.2016 'reset' : 'بازنشانی', // from v2.1.16 added 1.10.2016 'bgcolor' : 'رنگ پس زمینه', // from v2.1.16 added 1.10.2016 'colorPicker' : 'انتخابگر رنگ', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'گرید 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'فعال شده', // from v2.1.16 added 4.10.2016 'disabled' : 'غیرفعال شده', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'در نمای فعلی موردی یافت نشد.\\Aبا فشردن کلید Enter مسیر جستجو را تغییر دهید.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'برای جستجوی تک حرفی در نمایش فعلی موردی یافت نشد.', // from v2.1.23 added 24.3.2017 'textLabel' : 'عنوان متنی', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 دقیقه باقیمانده', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'باز کردن مجدد با کد گذاری انتخاب شده', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'ذخیره با کد گذاری انتخاب شده', // from v2.1.19 added 2.12.2016 'selectFolder' : 'انتخاب پوشه', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'جستجوی تک حرفی', // from v2.1.23 added 24.3.2017 'presets' : 'از پیش تعیین شده', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'موارد زیاد است و امکان انتقال به سطل بازیافت وجود ندارد.', // from v2.1.25 added 9.6.2017 'TextArea' : 'ویرایش محتوا', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'خالی کردن پوشه "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'پوشه "$1" ‌ذاتا خالی است.', // from v2.1.25 added 22.6.2017 'preference' : 'تنظیمات', // from v2.1.26 added 28.6.2017 'language' : 'زبان', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'بازبینی تنظیمات ذخیره شده در این مرورگر', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'تنظیمات نوار ابزار', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 کاراکتر باقیمانده.', // from v2.1.29 added 30.8.2017 'linesLeft' : '$1 خط مانده است', // from v2.1.52 added 16.1.2020 'sum' : 'مجموع', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'اندازه فایل نامتعارف', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'انتخاب عناصر داخل دیالوگ با mouseover', // from v2.1.30 added 2.11.2017 'select' : 'انتخاب', // from v2.1.30 added 23.11.2017 'selectAction' : 'عملیات به هنگام انتخاب فایل', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'باز کردن با ویرایشگر مورداستفاده در آخرین دفعه', // from v2.1.30 added 23.11.2017 'selectinvert' : 'انتخاب معکوس', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'آیا مایل به تغییر نام $1 مورد انتخاب شده همانند $2 هستید؟
    امکان بازگرداندن این تغییر پس از اعمالو جود ندارد!', // from v2.1.31 added 4.12.2017 'batchRename' : 'تغییرنام گروهی', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ عدد', // from v2.1.31 added 8.12.2017 'asPrefix' : 'افزودن پیشوند', // from v2.1.31 added 8.12.2017 'asSuffix' : 'افزودن پسوند', // from v2.1.31 added 8.12.2017 'changeExtention' : 'تغییر پسوند فایل', // from v2.1.31 added 8.12.2017 'columnPref' : 'تنظیمات ستون‌ها (حالت نمایش لیست)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'تمامی تغییرات به صورت آنی برروی فایل فشرده اعمال خواهد شد.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'تمامی تغییرات تا زمانی که اتصال این درایو قطع نشده است اعمال نخواهند شد.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'اتصال به درایوهای زیر قطع خواهد شد. آیا مطمئن به ادامه عملیات هستید؟', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'مشخصات', // from v2.1.33 added 7.3.2018 'hashChecker' : 'الگوریتم های نمایش hash فایل', // from v2.1.33 added 10.3.2018 'infoItems' : 'موارد اطلاعات', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'جهت خروج مجدد فشار دهید.', // from v2.1.38 added 1.4.2018 'toolbar' : 'نوار ابزار', // from v2.1.38 added 4.4.2018 'workspace' : 'فضای کاری', // from v2.1.38 added 4.4.2018 'dialog' : 'پنجره دیالوگ', // from v2.1.38 added 4.4.2018 'all' : 'همه', // from v2.1.38 added 4.4.2018 'iconSize' : 'اندازه آیکون‌ها (نمایش به صورت آیکون)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'باز کردن پنجره ویرایشگر به صورت تمام صفحه', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'بدلیل در دسترسی نبودن تبدیل از طریق API، لطفا برروی وب سایت تبدیل را انجام دهید.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'پس از تبدیل, شما بایستی از طریق آدرس URL یا فایل دریافت شده آپلود را انجاد دهید تا فایل تبدیل شده ذخیره گردد.', //from v2.1.40 added 8.7.2018 'convertOn' : 'تبدیل برروی سایت از $1', // from v2.1.40 added 10.7.2018 'integrations' : 'هماهنگ سازی‌ها', // from v2.1.40 added 11.7.2018 'integrationWith' : 'elFinder با سرویس های زیر هماهنگ شده است. لطفا ابتدا شرایط استفاده، مقررات حریم خصوصی و سایر موارد را مطالعه بفرمایید.', // from v2.1.40 added 11.7.2018 'showHidden' : 'نمایش موارد پنهان', // from v2.1.41 added 24.7.2018 'hideHidden' : 'موارد مخفی را پنهان کنید', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'نمایش / پنهان کردن موارد پنهان', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'نوع فایل نوشتاری', // from v2.1.41 added 7.8.2018 'add' : 'اضافه کردن', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'پیش فرض', // from v2.1.43 added 19.10.2018 'description' : 'توضیحات', // from v2.1.43 added 19.10.2018 'website' : 'وب سایت', // from v2.1.43 added 19.10.2018 'author' : 'نویستده', // from v2.1.43 added 19.10.2018 'email' : 'ایمیل', // from v2.1.43 added 19.10.2018 'license' : 'لایسنس', // from v2.1.43 added 19.10.2018 'exportToSave' : 'این مورد ذخیره نمی شود برای جلوگیری از دست دادن ویرایش ها ، آنها را به رایانه خود منتقل کنید.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'برای انتخاب پرونده ، دوبار کلیک کنید.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'از حالت تمام صفحه استفاده کنید', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'نامعلوم', 'kindRoot' : 'ریشه درایو', // from v2.1.16 added 16.10.2016 'kindFolder' : 'پوشه', 'kindSelects' : 'انتخاب شده‌ها', // from v2.1.29 added 29.8.2017 'kindAlias' : 'اسم مستعار', 'kindAliasBroken' : 'اسم مستعار ناقص', // applications 'kindApp' : 'برنامه', 'kindPostscript' : 'سند Postscript', 'kindMsOffice' : 'سند Microsoft Office', 'kindMsWord' : 'سند Microsoft Word', 'kindMsExcel' : 'سند Microsoft Excel', 'kindMsPP' : 'فایل ارایه Microsoft Powerpoint', 'kindOO' : 'سند Open Office', 'kindAppFlash' : 'برنامه فلش', 'kindPDF' : 'سند قابل حمل (PDF)', 'kindTorrent' : 'فایل تورنت', 'kind7z' : 'فایل فشرده 7z', 'kindTAR' : 'فایل فشرده TAR', 'kindGZIP' : 'فایل فشرده GZIP', 'kindBZIP' : 'فایل فشرده BZIP', 'kindXZ' : 'فایل فشرده XZ', 'kindZIP' : 'فایل فشرده ZIP', 'kindRAR' : 'فایل فشرده RAR', 'kindJAR' : 'فایل JAR مربوط به جاوا', 'kindTTF' : 'فونت True Type', 'kindOTF' : 'فونت Open Type', 'kindRPM' : 'بسته RPM', // texts 'kindText' : 'سند متنی', 'kindTextPlain' : 'سند متنی ساده', 'kindPHP' : 'سورس کد PHP', 'kindCSS' : 'فایل style sheet', 'kindHTML' : 'سند HTML', 'kindJS' : 'سورس کد Javascript', 'kindRTF' : 'سند متنی غنی', 'kindC' : 'سورس کد C', 'kindCHeader' : 'سورس کد C header', 'kindCPP' : 'سورس کد C++', 'kindCPPHeader' : 'سورس کد C++ header', 'kindShell' : 'اسکریپت شل یونیکس', 'kindPython' : 'سورس کد Python', 'kindJava' : 'سورس کد Java', 'kindRuby' : 'سورس کد Ruby', 'kindPerl' : 'اسکریپت Perl', 'kindSQL' : 'سورس کد SQL', 'kindXML' : 'سند XML', 'kindAWK' : 'سورس کد AWK', 'kindCSV' : 'مقادیر جداشده با کامل', 'kindDOCBOOK' : 'سند Docbook XML', 'kindMarkdown' : 'سند متنی Markdown', // added 20.7.2015 // images 'kindImage' : 'تصویر', 'kindBMP' : 'تصویر BMP', 'kindJPEG' : 'تصویر JPEG', 'kindGIF' : 'تصویر GIF', 'kindPNG' : 'تصویر PNG', 'kindTIFF' : 'تصویر TIFF', 'kindTGA' : 'تصویر TGA', 'kindPSD' : 'تصویر Adobe Photoshop', 'kindXBITMAP' : 'تصویر X bitmap', 'kindPXM' : 'تصویر Pixelmator', // media 'kindAudio' : 'فایل صوتی', 'kindAudioMPEG' : 'فایل صوتی MPEG', 'kindAudioMPEG4' : 'فایل صوتی MPEG-4', 'kindAudioMIDI' : 'فایل صوتی MIDI', 'kindAudioOGG' : 'فایل صوتی Ogg Vorbis', 'kindAudioWAV' : 'فایل صوتی WAV', 'AudioPlaylist' : 'لیست پخش MP3', 'kindVideo' : 'فایل ویدیویی', 'kindVideoDV' : 'فایل ویدیویی DV', 'kindVideoMPEG' : 'فایل ویدیویی MPEG', 'kindVideoMPEG4' : 'فایل ویدیویی MPEG-4', 'kindVideoAVI' : 'فایل ویدیویی AVI', 'kindVideoMOV' : 'فایل ویدیویی Quick Time', 'kindVideoWM' : 'فایل ویدیویی Windows Media', 'kindVideoFlash' : 'فایل ویدیویی Flash', 'kindVideoMKV' : 'فایل ویدیویی Matroska', 'kindVideoOGG' : 'فایل ویدیویی Ogg' } }; })); application/library/js/i18n/elfinder.es.js000064400000076214146731177160014471 0ustar00/** * Español internacional translation * @author Julián Torres * @author Luis Faura * @author Adrià Vilanova * @author Wilman Marín Duran * @version 2018-04-10 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.es = { translator : 'Julián Torres <julian.torres@pabernosmatao.com>, Luis Faura <luis@luisfaura.es>, Adrià Vilanova <me@avm99963.tk>, Wilman Marín Duran <fuclo05@hotmail.com>', language : 'Español internacional', direction : 'ltr', dateFormat : 'M d, Y h:i A', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM nonameDateFormat : 'ymd-His', // to apply if upload file is noname: 120513172700 messages : { /********************************** errors **********************************/ 'error' : 'Error', 'errUnknown' : 'Error desconocido.', 'errUnknownCmd' : 'Comando desconocido.', 'errJqui' : 'Configuración no válida de jQuery UI. Deben estar incluidos los componentes selectable, draggable y droppable.', 'errNode' : 'elFinder necesita crear elementos DOM.', 'errURL' : '¡Configuración no válida de elFinder! La opción URL no está configurada.', 'errAccess' : 'Acceso denegado.', 'errConnect' : 'No se ha podido conectar con el backend.', 'errAbort' : 'Conexión cancelada.', 'errTimeout' : 'Conexión cancelada por timeout.', 'errNotFound' : 'Backend no encontrado.', 'errResponse' : 'Respuesta no válida del backend.', 'errConf' : 'Configuración no válida del backend .', 'errJSON' : 'El módulo PHP JSON no está instalado.', 'errNoVolumes' : 'No hay disponibles volúmenes legibles.', 'errCmdParams' : 'Parámetros no válidos para el comando "$1".', 'errDataNotJSON' : 'los datos no están en formato JSON.', 'errDataEmpty' : 'No hay datos.', 'errCmdReq' : 'La petición del backend necesita un nombre de comando.', 'errOpen' : 'No se puede abrir "$1".', 'errNotFolder' : 'El objeto no es una carpeta.', 'errNotFile' : 'El objeto no es un archivo.', 'errRead' : 'No se puede leer "$1".', 'errWrite' : 'No se puede escribir en "$1".', 'errPerm' : 'Permiso denegado.', 'errLocked' : '"$1" está bloqueado y no puede ser renombrado, movido o borrado.', 'errExists' : 'Ya existe un archivo llamado "$1".', 'errInvName' : 'Nombre de archivo no válido.', 'errInvDirname' : 'Nombre de carpeta inválido.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Carpeta no encontrada.', 'errFileNotFound' : 'Archivo no encontrado.', 'errTrgFolderNotFound' : 'Carpeta de destino "$1" no encontrada.', 'errPopup' : 'El navegador impide abrir nuevas ventanas. Puede activarlo en las opciones del navegador.', 'errMkdir' : 'No se puede crear la carpeta "$1".', 'errMkfile' : 'No se puede crear el archivo "$1".', 'errRename' : 'No se puede renombrar "$1".', 'errCopyFrom' : 'No se permite copiar archivos desde el volumen "$1".', 'errCopyTo' : 'No se permite copiar archivos al volumen "$1".', 'errMkOutLink' : 'No se ha podido crear el enlace fuera del volumen raíz.', // from v2.1 added 03.10.2015 'errUpload' : 'Error en el envío.', // old name - errUploadCommon 'errUploadFile' : 'No se ha podido cargar "$1".', // old name - errUpload 'errUploadNoFiles' : 'No hay archivos para subir.', 'errUploadTotalSize' : 'El tamaño de los datos excede el máximo permitido.', // old name - errMaxSize 'errUploadFileSize' : 'El tamaño del archivo excede el máximo permitido.', // old name - errFileMaxSize 'errUploadMime' : 'Tipo de archivo no permitido.', 'errUploadTransfer' : 'Error al transferir "$1".', 'errUploadTemp' : 'No se ha podido crear el archivo temporal para la subida.', // from v2.1 added 26.09.2015 'errNotReplace' : 'El objeto "$1" ya existe y no puede ser reemplazado por otro con otro tipo.', // new 'errReplace' : 'No se puede reemplazar "$1".', 'errSave' : 'No se puede guardar "$1".', 'errCopy' : 'No se puede copiar "$1".', 'errMove' : 'No se puede mover "$1".', 'errCopyInItself' : 'No se puede copiar "$1" en si mismo.', 'errRm' : 'No se puede borrar "$1".', 'errTrash' : 'No se puede enviar a la papelera.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'No se puede(n) borrar los archivo(s).', 'errExtract' : 'No se puede extraer archivos desde "$1".', 'errArchive' : 'No se puede crear el archivo.', 'errArcType' : 'Tipo de archivo no soportado.', 'errNoArchive' : 'El archivo no es de tipo archivo o es de un tipo no soportado.', 'errCmdNoSupport' : 'El backend no soporta este comando.', 'errReplByChild' : 'La carpeta “$1” no puede ser reemplazada por un elemento contenido en ella.', 'errArcSymlinks' : 'Por razones de seguridad no se pueden descomprimir archivos que contengan enlaces simbólicos.', // edited 24.06.2012 'errArcMaxSize' : 'El tamaño del archivo excede el máximo permitido.', 'errResize' : 'Error al redimensionar "$1".', 'errResizeDegree' : 'Grado de rotación inválido.', // added 7.3.2013 'errResizeRotate' : 'Error al rotar la imagen.', // added 7.3.2013 'errResizeSize' : 'Tamaño de imagen inválido.', // added 7.3.2013 'errResizeNoChange' : 'No se puede cambiar el tamaño de la imagen.', // added 7.3.2013 'errUsupportType' : 'Tipo de archivo no soportado.', 'errNotUTF8Content' : 'El archivo "$1" no está en formato UTF-8 y no puede ser editado.', // added 9.11.2011 'errNetMount' : 'Fallo al montar "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocolo no soportado.', // added 17.04.2012 'errNetMountFailed' : 'Fallo al montar.', // added 17.04.2012 'errNetMountHostReq' : 'Dominio requerido.', // added 18.04.2012 'errSessionExpires' : 'La sesión ha expirado por inactividad', 'errCreatingTempDir' : 'No se ha podido crear al directorio temporal: "$1"', 'errFtpDownloadFile' : 'No se ha podido descargar el archivo desde FTP: "$1"', 'errFtpUploadFile' : 'No se ha podido cargar el archivo a FTP: "$1"', 'errFtpMkdir' : 'No se ha podido crear el directorio remoto en FTP: "$1"', 'errArchiveExec' : 'Se ha producido un error durante el archivo: "$1"', 'errExtractExec' : 'Se ha producido un error durante la extracción de archivos: "$1"', 'errNetUnMount' : 'Imposible montar', // from v2.1 added 30.04.2012 'errConvUTF8' : 'No es convertible a UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Prueba con un navegador moderno, si quieres subir la carpeta completa.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Se agotó el tiempo de espera buscando "$1". Los resultados de búsqueda son parciales.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Se requiere autorizar de nuevo.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Número máximo de elementos seleccionables es $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'No se puede restaurar desde la papelera. No se puede identificar el destino de restauración.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor no encontrado para este tipo de archivo.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Error ocurrido en el lado del servidor.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'No es posible vaciar la carpeta "$1".', // from v2.1.25 added 22.6.2017 /******************************* commands names ********************************/ 'cmdarchive' : 'Crear archivo', 'cmdback' : 'Atrás', 'cmdcopy' : 'Copiar', 'cmdcut' : 'Cortar', 'cmddownload' : 'Descargar', 'cmdduplicate' : 'Duplicar', 'cmdedit' : 'Editar archivo', 'cmdextract' : 'Extraer elementos del archivo', 'cmdforward' : 'Adelante', 'cmdgetfile' : 'Seleccionar archivos', 'cmdhelp' : 'Acerca de este software', 'cmdhome' : 'Inicio', 'cmdinfo' : 'Obtener información', 'cmdmkdir' : 'Nueva carpeta', 'cmdmkdirin' : 'En una nueva carpeta', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nueva archivo', 'cmdopen' : 'Abrir', 'cmdpaste' : 'Pegar', 'cmdquicklook' : 'Previsualizar', 'cmdreload' : 'Recargar', 'cmdrename' : 'Cambiar nombre', 'cmdrm' : 'Eliminar', 'cmdtrash' : 'Enviar a la papelera', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurar', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Buscar archivos', 'cmdup' : 'Ir a la carpeta raíz', 'cmdupload' : 'Subir archivos', 'cmdview' : 'Ver', 'cmdresize' : 'Redimensionar y rotar', 'cmdsort' : 'Ordenar', 'cmdnetmount' : 'Montar volumen en red', // added 18.04.2012 'cmdnetunmount': 'Desmontar', // from v2.1 added 30.04.2012 'cmdplaces' : 'A Lugares', // added 28.12.2014 'cmdchmod' : 'Cambiar modo', // from v2.1 added 20.6.2015 'cmdopendir' : 'Abrir una carpeta', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Restablecer ancho de columna', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Pantalla completa', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Mover', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vaciar la carpeta', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Deshacer', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Rehacer', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferencias', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Seleccionar todo', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Seleccionar ninguno', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invertir selección', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Abrir en nueva ventana', // from v2.1.38 added 3.4.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Cerrar', 'btnSave' : 'Guardar', 'btnRm' : 'Eliminar', 'btnApply' : 'Aplicar', 'btnCancel' : 'Cancelar', 'btnNo' : 'No', 'btnYes' : 'Sí', 'btnMount' : 'Montar', // added 18.04.2012 'btnApprove': 'Ir a $1 y aprobar', // from v2.1 added 26.04.2012 'btnUnmount': 'Desmontar', // from v2.1 added 30.04.2012 'btnConv' : 'Convertir', // from v2.1 added 08.04.2014 'btnCwd' : 'Aquí', // from v2.1 added 22.5.2015 'btnVolume' : 'Volumen', // from v2.1 added 22.5.2015 'btnAll' : 'Todos', // from v2.1 added 22.5.2015 'btnMime' : 'Tipo MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nombre de archivo', // from v2.1 added 22.5.2015 'btnSaveClose': 'Guardar y cerrar', // from v2.1 added 12.6.2015 'btnBackup' : 'Copia de seguridad', // fromv2.1 added 28.11.2015 'btnRename' : 'Renombrar', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Renombrar(Todo)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Ant ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Sig ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Guardar como', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Abrir carpeta', 'ntffile' : 'Abrir archivo', 'ntfreload' : 'Actualizar contenido de la carpeta', 'ntfmkdir' : 'Creando directorio', 'ntfmkfile' : 'Creando archivos', 'ntfrm' : 'Eliminando archivos', 'ntfcopy' : 'Copiar archivos', 'ntfmove' : 'Mover archivos', 'ntfprepare' : 'Preparar copia de archivos', 'ntfrename' : 'Renombrar archivos', 'ntfupload' : 'Subiendo archivos', 'ntfdownload' : 'Descargando archivos', 'ntfsave' : 'Guardar archivos', 'ntfarchive' : 'Creando archivo', 'ntfextract' : 'Extrayendo elementos del archivo', 'ntfsearch' : 'Buscando archivos', 'ntfresize' : 'Redimensionando imágenes', 'ntfsmth' : 'Haciendo algo', 'ntfloadimg' : 'Cargando imagen', 'ntfnetmount' : 'Montando volumen en red', // added 18.04.2012 'ntfnetunmount': 'Desmontando volumen en red', // from v2.1 added 30.04.2012 'ntfdim' : 'Adquiriendo tamaño de imagen', // added 20.05.2013 'ntfreaddir' : 'Leyendo información de la carpeta', // from v2.1 added 01.07.2013 'ntfurl' : 'Obteniendo URL del enlace', // from v2.1 added 11.03.2014 'ntfchmod' : 'Cambiando el modo de archivo', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verificando nombre del archivo subido', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creando un archivo para descargar', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Obteniendo información de la ruta', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Procesando el archivo cargado', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Enviando a la papelera', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Restaurando desde la papelera', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Comprobando carpeta de destino', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Deshaciendo operación previa', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Rehaciendo previo deshacer', // from v2.1.27 added 31.07.2017 /*********************************** volumes *********************************/ 'volume_Trash' : 'Papelera', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'desconocida', 'Today' : 'Hoy', 'Yesterday' : 'Ayer', 'msJan' : 'Ene', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Abr', 'msMay' : 'May', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Ago', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Dic', 'January' : 'Enero', 'February' : 'Febrero', 'March' : 'Marzo', 'April' : 'Abril', 'May' : 'Mayo', 'June' : 'Junio', 'July' : 'Julio', 'August' : 'Agosto', 'September' : 'Septiembre', 'October' : 'Octubre', 'November' : 'Noviembre', 'December' : 'Diciembre', 'Sunday' : 'Domingo', 'Monday' : 'Lunes', 'Tuesday' : 'Martes', 'Wednesday' : 'Miércoles', 'Thursday' : 'Jueves', 'Friday' : 'Viernes', 'Saturday' : 'Sábado', 'Sun' : 'Dom', 'Mon' : 'Lun', 'Tue' : 'Mar', 'Wed' : 'Mie', 'Thu' : 'Jue', 'Fri' : 'Vie', 'Sat' : 'Sab', /******************************** sort variants ********************************/ 'sortname' : 'por nombre', 'sortkind' : 'por tipo', 'sortsize' : 'por tamaño', 'sortdate' : 'por fecha', 'sortFoldersFirst' : 'Las carpetas primero', 'sortperm' : 'por permiso', // from v2.1.13 added 13.06.2016 'sortmode' : 'por modo', // from v2.1.13 added 13.06.2016 'sortowner' : 'por propietario', // from v2.1.13 added 13.06.2016 'sortgroup' : 'por grupo', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'También árbol de directorios', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NuevoArchivo.txt', // added 10.11.2015 'untitled folder' : 'NuevaCarpeta', // added 10.11.2015 'Archive' : 'NuevoArchivo', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'Se necesita confirmación', 'confirmRm' : '¿Está seguro de querer eliminar archivos?
    ¡Esto no se puede deshacer!', 'confirmRepl' : '¿Reemplazar el antiguo archivo con el nuevo?', 'confirmRest' : '¿Reemplazar elemento existente con el elemento en la papelera?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'No está en UTF-8
    Convertir a UTF-8?
    Los contenidos se guardarán en UTF-8 tras la conversión.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Codificación de caracteres de este archivo no pudo ser detectada. Es necesario convertir temporalmente a UTF-8 para editarlo.
    Por favor, seleccione la codificación de caracteres de este archivo.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Ha sido modificado.
    Perderás los cambios si no los guardas.', // from v2.1 added 15.7.2015 'confirmTrash' : '¿Estás seguro que quieres mover los elementos a la papelera?', //from v2.1.24 added 29.4.2017 'apllyAll' : 'Aplicar a todo', 'name' : 'Nombre', 'size' : 'Tamaño', 'perms' : 'Permisos', 'modify' : 'Modificado', 'kind' : 'Tipo', 'read' : 'lectura', 'write' : 'escritura', 'noaccess' : 'sin acceso', 'and' : 'y', 'unknown' : 'desconocido', 'selectall' : 'Seleccionar todos los archivos', 'selectfiles' : 'Seleccionar archivo(s)', 'selectffile' : 'Seleccionar primer archivo', 'selectlfile' : 'Seleccionar último archivo', 'viewlist' : 'ver como lista', 'viewicons' : 'Ver como iconos', 'places' : 'Lugares', 'calc' : 'Calcular', 'path' : 'Ruta', 'aliasfor' : 'Alias para', 'locked' : 'Bloqueado', 'dim' : 'Dimensiones', 'files' : 'Archivos', 'folders' : 'Carpetas', 'items' : 'Elementos', 'yes' : 'sí', 'no' : 'no', 'link' : 'Enlace', 'searcresult' : 'Resultados de la búsqueda', 'selected' : 'elementos seleccionados', 'about' : 'Acerca', 'shortcuts' : 'Accesos directos', 'help' : 'Ayuda', 'webfm' : 'Administrador de archivos web', 'ver' : 'Versión', 'protocolver' : 'versión del protocolo', 'homepage' : 'Inicio', 'docs' : 'Documentación', 'github' : 'Bifúrcanos en Github', 'twitter' : 'Síguenos en Twitter', 'facebook' : 'Únete a nosotros en Facebook', 'team' : 'Equipo', 'chiefdev' : 'desarrollador jefe', 'developer' : 'desarrollador', 'contributor' : 'contribuyente', 'maintainer' : 'mantenedor', 'translator' : 'traductor', 'icons' : 'Iconos', 'dontforget' : 'y no olvide traer su toalla', 'shortcutsof' : 'Accesos directos desactivados', 'dropFiles' : 'Arrastre archivos aquí', 'or' : 'o', 'selectForUpload' : 'Seleccione archivos para subir', 'moveFiles' : 'Mover archivos', 'copyFiles' : 'Copiar archivos', 'restoreFiles' : 'Restaurar elementos', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Eliminar en sus ubicaciones', 'aspectRatio' : 'Relación de aspecto', 'scale' : 'Escala', 'width' : 'Ancho', 'height' : 'Alto', 'resize' : 'Redimensionar', 'crop' : 'Recortar', 'rotate' : 'Rotar', 'rotate-cw' : 'Rotar 90 grados en sentido horario', 'rotate-ccw' : 'Rotar 90 grados en sentido anti-horario', 'degree' : '°', 'netMountDialogTitle' : 'Montar volumen en red', // added 18.04.2012 'protocol' : 'Protocolo', // added 18.04.2012 'host' : 'Dominio', // added 18.04.2012 'port' : 'Puerto', // added 18.04.2012 'user' : 'Usuario', // added 18.04.2012 'pass' : 'Contraseña', // added 18.04.2012 'confirmUnmount' : '¿Desmontar $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Arrastra o pega archivos del navegador', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Arrastra o pega enlaces URL aquí', // from v2.1 added 07.04.2014 'encoding' : 'Codificando', // from v2.1 added 19.12.2014 'locale' : 'Local', // from v2.1 added 19.12.2014 'searchTarget' : 'Destino: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Buscar entrada por tipo MIME', // from v2.1 added 22.5.2015 'owner' : 'Propietario', // from v2.1 added 20.6.2015 'group' : 'Grupo', // from v2.1 added 20.6.2015 'other' : 'Otro', // from v2.1 added 20.6.2015 'execute' : 'Ejecutar', // from v2.1 added 20.6.2015 'perm' : 'Permiso', // from v2.1 added 20.6.2015 'mode' : 'Modo', // from v2.1 added 20.6.2015 'emptyFolder' : 'La carpeta está vacía', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'La carpeta está vacía\\A Arrastrar para añadir elementos', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'La carpeta está vacía\\A Presiona durante un rato para añadir elementos', // from v2.1.6 added 30.12.2015 'quality' : 'Calidad', // from v2.1.6 added 5.1.2016 'autoSync' : 'Sincronización automática', // from v2.1.6 added 10.1.2016 'moveUp' : 'Mover arriba', // from v2.1.6 added 18.1.2016 'getLink' : 'Obtener enlace', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Elementos seleccionados ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID carpeta', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permitir acceso sin conexión', // from v2.1.10 added 3.25.2016 'reAuth' : 'Para volver a autenticarse', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Cargando ahora...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Abrir múltiples archivos', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Estás tratando de abrir los $1 archivos. ¿Estás seguro que quieres abrir en el navegador?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'No se encontraron resultados en el objetivo de búsqueda.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Está editando un archivo.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Has seleccionado $1 elementos.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Posees $1 elementos en el portapapeles.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'La búsqueda incremental solo se realiza desde la vista actual.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reinstanciar', // from v2.1.15 added 3.8.2016 'complete' : '$1 completo', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menú contextual', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Cambio de página', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Raíces del volumen', // from v2.1.16 added 16.9.2016 'reset' : 'Reiniciar', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Color de fondo', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Selector de color', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Cuadricula', // from v2.1.16 added 4.10.2016 'enabled' : 'Habilitado', // from v2.1.16 added 4.10.2016 'disabled' : 'Deshabilitado', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Los resultados de la búsqueda están vacíos en la vista actual. \\ APulse [Intro] para expandir el objetivo de búsqueda.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'La primera letra de los resultados de búsqueda está vacía en la vista actual.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Etiqueta de texto', // from v2.1.17 added 13.10.2016 'minsLeft' : 'Falta $1 minuto(s)', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Abrir nuevamente con la codificación seleccionada', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Guardar con la codificación seleccionada', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Seleccionar carpeta', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Primera letra de búsqueda', // from v2.1.23 added 24.3.2017 'presets' : 'Preestablecidos', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Son demasiados elementos, por lo que no puede enviarse a la papelera.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Área de texto', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vaciar la carpeta "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'No hay elementos en la carpeta "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferencia', // from v2.1.26 added 28.6.2017 'language' : 'Lenguaje', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicializa la configuración guardada en este navegador', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Configuración de la barra de herramientas', // from v2.1.27 added 2.8.2017 'charsLeft' : '...falta $1 caracteres.', // from v2.1.29 added 30.8.2017 'sum' : 'Suma', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Tamaño de archivo aproximado', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Centrado en el elemento de diálogo con \'mouseover\'', // from v2.1.30 added 2.11.2017 'select' : 'Seleccionar', // from v2.1.30 added 23.11.2017 'selectAction' : 'Acción cuando selecciona un archivo', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Abrir con el editor utilizado la última vez', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invertir selección', // from v2.1.30 added 25.11.2017 'renameMultiple' : '¿Estás seguro que quieres renombrar $1 elementos seleccionados como $2?
    ¡Esto no puede ser deshecho!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Cambiar el nombre del lote', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Número', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Añadir prefijo', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Añadir sufijo', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Cambiar extensión', // from v2.1.31 added 8.12.2017 'columnPref' : 'Configuración de columnas (Vista de lista)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Todos los cambios se reflejarán inmediatamente en el archivo.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Cualquier cambio no se reflejará hasta que no se desmonte este volumen.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Los siguientes volúmenes montados en este volumen también se desmontaron. ¿Estás seguro de desmontarlo?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Información de la selección', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmos para mostrar el hash de archivos', // from v2.1.33 added 10.3.2018 'infoItems' : 'Elementos de información (Panel de información de selección)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Presiona de nuevo para salir.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barra de herramienta', // from v2.1.38 added 4.4.2018 'workspace' : 'Espacio de trabajo', // from v2.1.38 added 4.4.2018 'dialog' : 'Diálogo', // from v2.1.38 added 4.4.2018 'all' : 'Todo', // from v2.1.38 added 4.4.2018 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Desconocido', 'kindRoot' : 'Raíces del volumen', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Carpeta', 'kindSelects' : 'Selecciones', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Alias roto', // applications 'kindApp' : 'Aplicación', 'kindPostscript' : 'Documento Postscript', 'kindMsOffice' : 'Documento Microsoft Office', 'kindMsWord' : 'Documento Microsoft Word', 'kindMsExcel' : 'Documento Microsoft Excel', 'kindMsPP' : 'Presentación Microsoft Powerpoint', 'kindOO' : 'Documento Open Office', 'kindAppFlash' : 'Aplicación Flash', 'kindPDF' : 'Documento PDF', 'kindTorrent' : 'Archivo Bittorrent', 'kind7z' : 'Archivo 7z', 'kindTAR' : 'Archivo TAR', 'kindGZIP' : 'Archivo GZIP', 'kindBZIP' : 'Archivo BZIP', 'kindXZ' : 'Archivo XZ', 'kindZIP' : 'Archivo ZIP', 'kindRAR' : 'Archivo RAR', 'kindJAR' : 'Archivo Java JAR', 'kindTTF' : 'Fuente True Type', 'kindOTF' : 'Fuente Open Type', 'kindRPM' : 'Paquete RPM', // texts 'kindText' : 'Documento de texto', 'kindTextPlain' : 'Texto plano', 'kindPHP' : 'Código PHP', 'kindCSS' : 'Hoja de estilos CSS', 'kindHTML' : 'Documento HTML', 'kindJS' : 'Código Javascript', 'kindRTF' : 'Documento RTF', 'kindC' : 'Código C', 'kindCHeader' : 'Código C cabeceras', 'kindCPP' : 'Código C++', 'kindCPPHeader' : 'Código C++ cabeceras', 'kindShell' : 'Script de terminal de Unix', 'kindPython' : 'Código Python', 'kindJava' : 'Código Java', 'kindRuby' : 'Código Ruby', 'kindPerl' : 'Código Perl', 'kindSQL' : 'Código QL', 'kindXML' : 'Documento XML', 'kindAWK' : 'Código AWK', 'kindCSV' : 'Documento CSV (valores separados por comas)', 'kindDOCBOOK' : 'Documento Docbook XML', 'kindMarkdown' : 'Texto Markdown', // added 20.7.2015 // images 'kindImage' : 'Imagen', 'kindBMP' : 'Imagen BMP', 'kindJPEG' : 'Imagen JPEG', 'kindGIF' : 'Imagen GIF', 'kindPNG' : 'Imagen PNG', 'kindTIFF' : 'Imagen TIFF', 'kindTGA' : 'Imagen TGA', 'kindPSD' : 'Imagen Adobe Photoshop', 'kindXBITMAP' : 'Imagen X bitmap', 'kindPXM' : 'Imagen Pixelmator', // media 'kindAudio' : 'Archivo de audio', 'kindAudioMPEG' : 'Audio MPEG', 'kindAudioMPEG4' : 'Audio MPEG-4', 'kindAudioMIDI' : 'Audio MIDI', 'kindAudioOGG' : 'Audio Ogg Vorbis', 'kindAudioWAV' : 'Audio WAV', 'AudioPlaylist' : 'Lista de reproducción MP3', 'kindVideo' : 'Archivo de vídeo', 'kindVideoDV' : 'Película DV', 'kindVideoMPEG' : 'Película MPEG', 'kindVideoMPEG4' : 'Película MPEG-4', 'kindVideoAVI' : 'Película AVI', 'kindVideoMOV' : 'Película Quick Time', 'kindVideoWM' : 'Película Windows Media', 'kindVideoFlash' : 'Película Flash', 'kindVideoMKV' : 'Película Matroska MKV', 'kindVideoOGG' : 'Película Ogg' } }; })); application/library/js/i18n/elfinder.fr.js000064400000106105146731177160014462 0ustar00/** * française translation * @author Régis Guyomarch * @author Benoit Delachaux * @author Jonathan Grunder * @version 2023-04-16 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.fr = { translator : 'Régis Guyomarch <regisg@gmail.com>, Benoit Delachaux <benorde33@gmail.com>, Jonathan Grunder <jonathan.grunder@gmail.com>', language : 'française', direction : 'ltr', dateFormat : 'd/M/Y H:i', // will show like: 16/Avr/2023 12:36 fancyDateFormat : '$1 H:i', // will show like: Aujourd'hui 12:36 nonameDateFormat : 'ymd-His', // noname upload will show like: 230416-123657 messages : { /********************************** errors **********************************/ 'error' : 'Erreur', 'errUnknown' : 'Erreur inconnue.', 'errUnknownCmd' : 'Commande inconnue.', 'errJqui' : 'Mauvaise configuration de jQuery UI. Les composants Selectable, draggable et droppable doivent être inclus.', 'errNode' : 'elFinder requiert que l\'élément DOM ait été créé.', 'errURL' : 'Mauvaise configuration d\'elFinder ! L\'option URL n\'a pas été définie.', 'errAccess' : 'Accès refusé.', 'errConnect' : 'Impossible de se connecter au backend.', 'errAbort' : 'Connexion interrompue.', 'errTimeout' : 'Délai de connexion dépassé.', 'errNotFound' : 'Backend non trouvé.', 'errResponse' : 'Mauvaise réponse du backend.', 'errConf' : 'Mauvaise configuration du backend.', 'errJSON' : 'Le module PHP JSON n\'est pas installé.', 'errNoVolumes' : 'Aucun volume lisible.', 'errCmdParams' : 'Mauvais paramétrage de la commande "$1".', 'errDataNotJSON' : 'Les données ne sont pas au format JSON.', 'errDataEmpty' : 'Données inexistantes.', 'errCmdReq' : 'La requête au Backend doit comporter le nom de la commande.', 'errOpen' : 'Impossible d\'ouvrir "$1".', 'errNotFolder' : 'Cet objet n\'est pas un dossier.', 'errNotFile' : 'Cet objet n\'est pas un fichier.', 'errRead' : 'Impossible de lire "$1".', 'errWrite' : 'Impossible d\'écrire dans "$1".', 'errPerm' : 'Permission refusée.', 'errLocked' : '"$1" est verrouillé et ne peut être déplacé ou supprimé.', 'errExists' : 'Un élément nommé "$1" existe déjà.', 'errInvName' : 'Nom de fichier incorrect.', 'errInvDirname' : 'Nom de dossier incorrect.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Dossier non trouvé.', 'errFileNotFound' : 'Fichier non trouvé.', 'errTrgFolderNotFound' : 'Dossier destination "$1" non trouvé.', 'errPopup' : 'Le navigateur web a empêché l\'ouverture d\'une fenêtre "popup". Pour ouvrir le fichier, modifiez les options du navigateur web.', 'errMkdir' : 'Impossible de créer le dossier "$1".', 'errMkfile' : 'Impossible de créer le fichier "$1".', 'errRename' : 'Impossible de renommer "$1".', 'errCopyFrom' : 'Interdiction de copier des fichiers depuis le volume "$1".', 'errCopyTo' : 'Interdiction de copier des fichiers vers le volume "$1".', 'errMkOutLink' : 'Impossible de créer un lien en dehors du volume principal.', // from v2.1 added 03.10.2015 'errUpload' : 'Erreur lors de l\'envoi du fichier.', // old name - errUploadCommon 'errUploadFile' : 'Impossible d\'envoyer "$1".', // old name - errUpload 'errUploadNoFiles' : 'Aucun fichier à envoyer.', 'errUploadTotalSize' : 'Les données dépassent la taille maximale allouée.', // old name - errMaxSize 'errUploadFileSize' : 'Le fichier dépasse la taille maximale allouée.', // old name - errFileMaxSize 'errUploadMime' : 'Type de fichier non autorisé.', 'errUploadTransfer' : '"$1" erreur de transfert.', 'errUploadTemp' : 'Impossible de créer un fichier temporaire pour transférer les fichiers.', // from v2.1 added 26.09.2015 'errNotReplace' : 'L\'objet "$1" existe déjà à cet endroit et ne peut être remplacé par un objet d\'un type différent.', // new 'errReplace' : 'Impossible de remplacer "$1".', 'errSave' : 'Impossible de sauvegarder "$1".', 'errCopy' : 'Impossible de copier "$1".', 'errMove' : 'Impossible de déplacer "$1".', 'errCopyInItself' : 'Impossible de copier "$1" sur lui-même.', 'errRm' : 'Impossible de supprimer "$1".', 'errTrash' : 'Impossible de déplacer dans la corbeille', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Impossible de supprimer le(s) fichier(s) source(s).', 'errExtract' : 'Imbossible d\'extraire les fichiers à partir de "$1".', 'errArchive' : 'Impossible de créer l\'archive.', 'errArcType' : 'Type d\'archive non supporté.', 'errNoArchive' : 'Le fichier n\'est pas une archive, ou c\'est un type d\'archive non supporté.', 'errCmdNoSupport' : 'Le Backend ne prend pas en charge cette commande.', 'errReplByChild' : 'Le dossier “$1” ne peut pas être remplacé par un élément qu\'il contient.', 'errArcSymlinks' : 'Par mesure de sécurité, il est défendu d\'extraire une archive contenant des liens symboliques ou des noms de fichier non autorisés.', // edited 24.06.2012 'errArcMaxSize' : 'Les fichiers de l\'archive excèdent la taille maximale autorisée.', 'errResize' : 'Impossible de redimensionner "$1".', 'errResizeDegree' : 'Degré de rotation invalide.', // added 7.3.2013 'errResizeRotate' : 'L\'image ne peut pas être tournée.', // added 7.3.2013 'errResizeSize' : 'Dimension de l\'image non-valide.', // added 7.3.2013 'errResizeNoChange' : 'L\'image n\'est pas redimensionnable.', // added 7.3.2013 'errUsupportType' : 'Type de fichier non supporté.', 'errNotUTF8Content' : 'Le fichier "$1" n\'est pas en UTF-8, il ne peut être édité.', // added 9.11.2011 'errNetMount' : 'Impossible de monter "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocole non supporté.', // added 17.04.2012 'errNetMountFailed' : 'Echec du montage.', // added 17.04.2012 'errNetMountHostReq' : 'Hôte requis.', // added 18.04.2012 'errSessionExpires' : 'Votre session a expiré en raison de son inactivité.', 'errCreatingTempDir' : 'Impossible de créer le répertoire temporaire : "$1"', 'errFtpDownloadFile' : 'Impossible de télécharger le file depuis l\'accès FTP : "$1"', 'errFtpUploadFile' : 'Impossible d\'envoyer le fichier vers l\'accès FTP : "$1"', 'errFtpMkdir' : 'Impossible de créer un répertoire distant sur l\'accès FTP :"$1"', 'errArchiveExec' : 'Erreur lors de l\'archivage des fichiers : "$1"', 'errExtractExec' : 'Erreur lors de l\'extraction des fichiers : "$1"', 'errNetUnMount' : 'Impossible de démonter.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Conversion en UTF-8 impossible', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Essayez Google Chrome, si voulez envoyer le dossier.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Délai d’attente dépassé pour la recherche "$1". Le résultat de la recherche est partiel.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Réauthorisation requise.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Le nombre maximal d\'éléments pouvant être sélectionnés est $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Impossible de restaurer la corbeille. La destination de la restauration n\'a pu être identifiée.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Aucun éditeur n\'a été trouvé pour ce type de fichier.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Une erreur est survenue du côté serveur.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Impossible de vider le dossier "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Il y a encore $1 erreur(s).', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Vous ne pouvez créer que $1 dossier au même moment.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Créer une archive', 'cmdback' : 'Précédent', 'cmdcopy' : 'Copier', 'cmdcut' : 'Couper', 'cmddownload' : 'Télécharger', 'cmdduplicate' : 'Dupliquer', 'cmdedit' : 'Éditer le fichier', 'cmdextract' : 'Extraire les fichiers de l\'archive', 'cmdforward' : 'Suivant', 'cmdgetfile' : 'Sélectionner les fichiers', 'cmdhelp' : 'À propos de ce logiciel', 'cmdhome' : 'Accueil', 'cmdinfo' : 'Informations', 'cmdmkdir' : 'Nouveau dossier', 'cmdmkdirin' : 'Dans un nouveau dossier', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nouveau fichier', 'cmdopen' : 'Ouvrir', 'cmdpaste' : 'Coller', 'cmdquicklook' : 'Prévisualiser', 'cmdreload' : 'Actualiser', 'cmdrename' : 'Renommer', 'cmdrm' : 'Supprimer', 'cmdtrash' : 'À la corbeille', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurer', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Trouver les fichiers', 'cmdup' : 'Remonter au dossier parent', 'cmdupload' : 'Envoyer les fichiers', 'cmdview' : 'Vue', 'cmdresize' : 'Redimensionner l\'image', 'cmdsort' : 'Trier', 'cmdnetmount' : 'Monter un volume réseau', // added 18.04.2012 'cmdnetunmount': 'Démonter', // from v2.1 added 30.04.2012 'cmdplaces' : 'Vers Favoris', // added 28.12.2014 'cmdchmod' : 'Changer de mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Ouvrir un dossier', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Réinitialiser largeur colone', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Plein écran', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Déplacer', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vider le dossier', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Annuler', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Refaire', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Préférences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Tout sélectionner', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Tout désélectionner', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverser la sélection', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Ouvrir dans une nouvelle fenêtre', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Cacher (Préférence)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Fermer', 'btnSave' : 'Enregistrer', 'btnRm' : 'Supprimer', 'btnApply' : 'Appliquer', 'btnCancel' : 'Annuler', 'btnNo' : 'Non', 'btnYes' : 'Oui', 'btnMount' : 'Monter', // added 18.04.2012 'btnApprove': 'Aller à $1 & approuver', // from v2.1 added 26.04.2012 'btnUnmount': 'Démonter', // from v2.1 added 30.04.2012 'btnConv' : 'Convertir', // from v2.1 added 08.04.2014 'btnCwd' : 'Ici', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Tous', // from v2.1 added 22.5.2015 'btnMime' : 'Type MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nom du fichier', // from v2.1 added 22.5.2015 'btnSaveClose': 'Sauvegarder & Fermer', // from v2.1 added 12.6.2015 'btnBackup' : 'Sauvegarde', // fromv2.1 added 28.11.2015 'btnRename' : 'Renommer', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Renommer (tous)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Préc. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Suiv. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Sauvegarder sous', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Ouvrir le dossier', 'ntffile' : 'Ouvrir le fichier', 'ntfreload' : 'Actualiser le contenu du dossier', 'ntfmkdir' : 'Création du dossier', 'ntfmkfile' : 'Création des fichiers', 'ntfrm' : 'Supprimer les éléments', 'ntfcopy' : 'Copier les éléments', 'ntfmove' : 'Déplacer les éléments', 'ntfprepare' : 'Préparation de la copie des éléments', 'ntfrename' : 'Renommer les fichiers', 'ntfupload' : 'Envoi des fichiers', 'ntfdownload' : 'Téléchargement des fichiers', 'ntfsave' : 'Sauvegarder les fichiers', 'ntfarchive' : 'Création de l\'archive', 'ntfextract' : 'Extraction des fichiers de l\'archive', 'ntfsearch' : 'Recherche des fichiers', 'ntfresize' : 'Redimensionner les images', 'ntfsmth' : 'Fait quelque chose', 'ntfloadimg' : 'Chargement de l\'image', 'ntfnetmount' : 'Monte le volume réseau', // added 18.04.2012 'ntfnetunmount': 'Démonte le volume réseau', // from v2.1 added 30.04.2012 'ntfdim' : 'Calcule la dimension de l\'image', // added 20.05.2013 'ntfreaddir' : 'Lecture des informations du dossier', // from v2.1 added 01.07.2013 'ntfurl' : 'Récupération de l’URL du lien', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changement de mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Vérification du nom du fichier envoyé', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Création d’un fichier pour le téléchargement', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Traitement de l\'information du chemin', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Traitement du fichier envoyé', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Mettre à la corbeille', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Restaurer depuis la corbeille', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Validation du dossier de destination', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Annuler l\'opération précédente', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Refaire l\'opération annulée', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Vérification du contenu', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Corbeille', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Inconnue', 'Today' : 'Aujourd\'hui', 'Yesterday' : 'Hier', 'msJan' : 'Jan', 'msFeb' : 'Fév', 'msMar' : 'Mar', 'msApr' : 'Avr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aoû', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Déc', 'January' : 'Janvier', 'February' : 'Février', 'March' : 'Mars', 'April' : 'Avril', 'May' : 'Mai', 'June' : 'Juin', 'July' : 'Juillet', 'August' : 'Août', 'September' : 'Septembre', 'October' : 'Octobre', 'November' : 'Novembre', 'December' : 'Décembre', 'Sunday' : 'Dimanche', 'Monday' : 'Lundi', 'Tuesday' : 'Mardi', 'Wednesday' : 'Mercredi', 'Thursday' : 'Jeudi', 'Friday' : 'Vendredi', 'Saturday' : 'Samedi', 'Sun' : 'Dim', 'Mon' : 'Lun', 'Tue' : 'Mar', 'Wed' : 'Mer', 'Thu' : 'Jeu', 'Fri' : 'Ven', 'Sat' : 'Sam', /******************************** sort variants ********************************/ 'sortname' : 'par nom', 'sortkind' : 'par type', 'sortsize' : 'par taille', 'sortdate' : 'par date', 'sortFoldersFirst' : 'Dossiers en premier', 'sortperm' : 'par permission', // from v2.1.13 added 13.06.2016 'sortmode' : 'par mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'par propriétaire', // from v2.1.13 added 13.06.2016 'sortgroup' : 'par groupe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Egalement arborescence', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NouveauFichier.txt', // added 10.11.2015 'untitled folder' : 'NouveauDossier', // added 10.11.2015 'Archive' : 'NouvelleArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Fichier', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmation requise', 'confirmRm' : 'Êtes-vous certain de vouloir supprimer les éléments ?
    Cela ne peut être annulé !', 'confirmRepl' : 'Remplacer l\'ancien fichier par le nouveau ?', 'confirmRest' : 'Remplacer l\'élément existant par l\'élément de la corbeille ?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'L\'encodage n\'est pas UTf-8
    Convertir en UTF-8 ?
    Les contenus deviendront UTF-8 en sauvegardant après la conversion.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Impossible de détecter l\'encodage de ce fichier. Pour être modifié, il doit être temporairement convertit en UTF-8.
    Veuillez s\'il vous plaît sélectionner un encodage pour ce fichier.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Ce fichier a été modifié.
    Les données seront perdues si les changements ne sont pas sauvegardés.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Êtes-vous certain de vouloir déplacer les éléments vers la corbeille?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Etes-vous sûr de vouloir déplacer ces éléments vers "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Appliquer à tous', 'name' : 'Nom', 'size' : 'Taille', 'perms' : 'Permissions', 'modify' : 'Modifié', 'kind' : 'Type', 'read' : 'Lecture', 'write' : 'Écriture', 'noaccess' : 'Pas d\'accès', 'and' : 'et', 'unknown' : 'inconnu', 'selectall' : 'Sélectionner tous les éléments', 'selectfiles' : 'Sélectionner le(s) élément(s)', 'selectffile' : 'Sélectionner le premier élément', 'selectlfile' : 'Sélectionner le dernier élément', 'viewlist' : 'Vue par liste', 'viewicons' : 'Vue par icônes', 'viewSmall' : 'Petites icônes', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Moyennes icônes', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Grandes icônes', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Très grandes icônes', // from v2.1.39 added 22.5.2018 'places' : 'Favoris', 'calc' : 'Calculer', 'path' : 'Chemin', 'aliasfor' : 'Raccourcis pour', 'locked' : 'Verrouiller', 'dim' : 'Dimensions', 'files' : 'Fichiers', 'folders' : 'Dossiers', 'items' : 'Éléments', 'yes' : 'oui', 'no' : 'non', 'link' : 'Lien', 'searcresult' : 'Résultats de la recherche', 'selected' : 'Éléments sélectionnés', 'about' : 'À propos', 'shortcuts' : 'Raccourcis', 'help' : 'Aide', 'webfm' : 'Gestionnaire de fichier Web', 'ver' : 'Version', 'protocolver' : 'Version du protocole', 'homepage' : 'Page du projet', 'docs' : 'Documentation', 'github' : 'Forkez-nous sur Github', 'twitter' : 'Suivez nous sur Twitter', 'facebook' : 'Joignez-nous sur Facebook', 'team' : 'Équipe', 'chiefdev' : 'Développeur en chef', 'developer' : 'Développeur', 'contributor' : 'Contributeur', 'maintainer' : 'Mainteneur', 'translator' : 'Traducteur', 'icons' : 'Icônes', 'dontforget' : 'et n\'oubliez pas votre serviette', 'shortcutsof' : 'Raccourcis désactivés', 'dropFiles' : 'Déposez les fichiers ici', 'or' : 'ou', 'selectForUpload' : 'Sélectionner les fichiers à envoyer', 'moveFiles' : 'Déplacer les éléments', 'copyFiles' : 'Copier les éléments', 'restoreFiles' : 'Restaurer les éléments', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Retirer des favoris', 'aspectRatio' : 'Ratio d’affichage', 'scale' : 'Mise à l\'échelle', 'width' : 'Largeur', 'height' : 'Hauteur', 'resize' : 'Redimensionner', 'crop' : 'Recadrer', 'rotate' : 'Rotation', 'rotate-cw' : 'Rotation de 90 degrés horaire', 'rotate-ccw' : 'Rotation de 90 degrés antihoraire', 'degree' : '°', 'netMountDialogTitle' : 'Monter un volume réseau', // added 18.04.2012 'protocol' : 'Protocole', // added 18.04.2012 'host' : 'Hôte', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Utilisateur', // added 18.04.2012 'pass' : 'Mot de passe', // added 18.04.2012 'confirmUnmount' : 'Démonter $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Glissez-déposez depuis le navigateur de fichier', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Glissez-déposez les fichiers ici', // from v2.1 added 07.04.2014 'encoding' : 'Encodage', // from v2.1 added 19.12.2014 'locale' : 'Encodage régional', // from v2.1 added 19.12.2014 'searchTarget' : 'Destination: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Recherche par type MIME', // from v2.1 added 22.5.2015 'owner' : 'Propriétaire', // from v2.1 added 20.6.2015 'group' : 'Groupe', // from v2.1 added 20.6.2015 'other' : 'Autre', // from v2.1 added 20.6.2015 'execute' : 'Exécuter', // from v2.1 added 20.6.2015 'perm' : 'Permission', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Le dossier est vide', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Le dossier est vide.\\ Glissez-déposez pour ajouter des éléments.', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Le dossier est vide.\\ Appuyez longuement pour ajouter des éléments.', // from v2.1.6 added 30.12.2015 'quality' : 'Qualité', // from v2.1.6 added 5.1.2016 'autoSync' : 'Synchronisation automatique', // from v2.1.6 added 10.1.2016 'moveUp' : 'Déplacer vers le haut', // from v2.1.6 added 18.1.2016 'getLink' : 'Obtenir le lien d’URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Éléments sélectionnés ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID du dossier', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permettre l\'accès hors-ligne', // from v2.1.10 added 3.25.2016 'reAuth' : 'Pour se réauthentifier', // from v2.1.10 added 3.25.2016 'nowLoading' : 'En cours de chargement...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Ouvrir multiples fichiers', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Vous allez ouvrir $1 fichiers. Êtes-vous sûr de vouloir les ouvrir dans le navigateur ?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Aucun résultat trouvé avec les paramètres de recherche.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Modification d\'un fichier.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Vous avez sélectionné $1 éléments.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Vous avez $1 éléments dans le presse-papier.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Recherche incrémentale disponible uniquement pour la vue active.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Rétablir', // from v2.1.15 added 3.8.2016 'complete' : '$1 complété', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu contextuel', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Tourner la page', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volumes principaux', // from v2.1.16 added 16.9.2016 'reset' : 'Réinitialiser', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Couleur de fond', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Sélecteur de couleur', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Grille 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Actif', // from v2.1.16 added 4.10.2016 'disabled' : 'Inactif', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Aucun résultat trouvé.\\Appuyez sur [Entrée] pour développer la cible de recherche.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Aucun résultat trouvé pour la recherche par première lettre.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Label texte', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins restantes', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Réouvrir avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Sauvegarder avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Choisir le dossier', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Recherche par première lettre', // from v2.1.23 added 24.3.2017 'presets' : 'Présélections', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Impossible de mettre autant d\'éléments à la corbeille.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Zone de texte', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vider le dossier "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Il n\'y a pas d\'élément dans le dossier "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Préférences', // from v2.1.26 added 28.6.2017 'language' : 'Configuration de langue', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialisation des configurations sauvegardées dans ce navigateur', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Paramètres de la barre d\'outils', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caractère(s) restant(s).', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 ligne(s) restante(s).', // from v2.1.52 added 16.1.2020 'sum' : 'Somme', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Taille de fichier brute', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Concentrez-vous sur l\'élément de dialogue avec le survol de la souris', // from v2.1.30 added 2.11.2017 'select' : 'Sélectionner', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action lors de la sélection d\'un fichier', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Ouvrir avec le dernier éditeur utilisé', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverser la sélection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Êtes-vous sûr de vouloir renommer les éléments sélectionnés $1 en $2 ?
    L\'action est définitive !', // from v2.1.31 added 4.12.2017 'batchRename' : 'Renommer le Batch', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nombre', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Ajouter un préfixe', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Ajouter un suffixe', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Modifier l\'extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Paramètres des colonnes (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Les changements seront immédiatement appliqués à l\'archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Aucun changement ne sera appliqué tant que ce volume n\'a pas été démonté.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Le(s) volume(s) suivant(s) montés sur ce volume seront également démontés. Êtes-vous sûr de vouloir le démonter ?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informations sur la sélection', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithme de hachage de fichier', // from v2.1.33 added 10.3.2018 'infoItems' : 'Éléments d\'information (panneau de sélection d\'informations )', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Appuyez à nouveau pour quitter.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barre d\'outils', // from v2.1.38 added 4.4.2018 'workspace' : 'Espace de travail', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialogue', // from v2.1.38 added 4.4.2018 'all' : 'Tout', // from v2.1.38 added 4.4.2018 'iconSize' : 'Dimensions de l\'icône (Aperçu)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Ouvrir la fenêtre d\'édition à la taille maximale', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Étant donné que la conversion par API n\'est pas disponible actuellement, veuillez effectuer la conversion sur le site Web.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Après la conversion, vous devez ajouter l\'URL de l\'élément ou un fichier téléchargé pour enregistrer le fichier converti.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convertir sur le site de $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Intégrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Cet elFinder intègre les services externes suivants. Veuillez vérifier les conditions d\'utilisation, la politique de confidentialité, etc. avant de l\'utiliser.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Afficher les élément cachés', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Ne pas afficher les élément cachés', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Afficher/Cacher les éléments cachés', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Type de ficher autorisé avec "Nouveau fichier"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type du fichier de texte', // from v2.1.41 added 7.8.2018 'add' : 'Ajouter', // from v2.1.41 added 7.8.2018 'theme' : 'Thème', // from v2.1.43 added 19.10.2018 'default' : 'Par Défaut', // from v2.1.43 added 19.10.2018 'description' : 'Description', // from v2.1.43 added 19.10.2018 'website' : 'Site Web', // from v2.1.43 added 19.10.2018 'author' : 'Aauteur', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'License', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Cet élément ne peut être enregistrer. Pour éviter de perdre les modifications, vous devez exporter vers votre ordinateur.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double-cliquez sur le fichier pour le sélectionner.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Utiliser le mode plein écran', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Inconnu', 'kindRoot' : 'Volume principal', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Dossier', 'kindSelects' : 'Sélections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Raccourci', 'kindAliasBroken' : 'Raccourci cassé', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Document Postscript', 'kindMsOffice' : 'Document Microsoft Office', 'kindMsWord' : 'Document Microsoft Word', 'kindMsExcel' : 'Document Microsoft Excel', 'kindMsPP' : 'Présentation Microsoft PowerPoint', 'kindOO' : 'Document OpenOffice', 'kindAppFlash' : 'Application Flash', 'kindPDF' : 'Format de document portable (PDF)', 'kindTorrent' : 'Fichier BitTorrent', 'kind7z' : 'Archive 7z', 'kindTAR' : 'Archive TAR', 'kindGZIP' : 'Archive GZIP', 'kindBZIP' : 'Archive BZIP', 'kindXZ' : 'Archive XZ', 'kindZIP' : 'Archive ZIP', 'kindRAR' : 'Archive RAR', 'kindJAR' : 'Fichier Java JAR', 'kindTTF' : 'Police True Type', 'kindOTF' : 'Police Open Type', 'kindRPM' : 'Package RPM', // texts 'kindText' : 'Document Text', 'kindTextPlain' : 'Texte non formaté', 'kindPHP' : 'Source PHP', 'kindCSS' : 'Feuille de style en cascade', 'kindHTML' : 'Document HTML', 'kindJS' : 'Source JavaScript', 'kindRTF' : 'Format de texte enrichi (Rich Text Format)', 'kindC' : 'Source C', 'kindCHeader' : 'Source header C', 'kindCPP' : 'Source C++', 'kindCPPHeader' : 'Source header C++', 'kindShell' : 'Shell script Unix', 'kindPython' : 'Source Python', 'kindJava' : 'Source Java', 'kindRuby' : 'Source Ruby', 'kindPerl' : 'Script Perl', 'kindSQL' : 'Source SQL', 'kindXML' : 'Document XML', 'kindAWK' : 'Source AWK', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Document Docbook XML', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Image', 'kindBMP' : 'Image BMP', 'kindJPEG' : 'Image JPEG', 'kindGIF' : 'Image GIF', 'kindPNG' : 'Image PNG', 'kindTIFF' : 'Image TIFF', 'kindTGA' : 'Image TGA', 'kindPSD' : 'Image Adobe Photoshop', 'kindXBITMAP' : 'Image X bitmap', 'kindPXM' : 'Image Pixelmator', // media 'kindAudio' : 'Son', 'kindAudioMPEG' : 'Son MPEG', 'kindAudioMPEG4' : 'Son MPEG-4', 'kindAudioMIDI' : 'Son MIDI', 'kindAudioOGG' : 'Son Ogg Vorbis', 'kindAudioWAV' : 'Son WAV', 'AudioPlaylist' : 'Liste de lecture audio', 'kindVideo' : 'Vidéo', 'kindVideoDV' : 'Vidéo DV', 'kindVideoMPEG' : 'Vidéo MPEG', 'kindVideoMPEG4' : 'Vidéo MPEG-4', 'kindVideoAVI' : 'Vidéo AVI', 'kindVideoMOV' : 'Vidéo Quick Time', 'kindVideoWM' : 'Vidéo Windows Media', 'kindVideoFlash' : 'Vidéo Flash', 'kindVideoMKV' : 'Vidéo Matroska', 'kindVideoOGG' : 'Vidéo Ogg' } }; })); application/library/js/i18n/elfinder.sl.js000064400000037447146731177160014505 0ustar00/** * Slovenian translation * @author Damjan Rems * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.sl = { translator : 'Damjan Rems <d_rems at yahoo.com>', language : 'Slovenščina', direction : 'ltr', dateFormat : 'd.m.Y H:i', fancyDateFormat : '$1 H:i', messages : { /********************************** errors **********************************/ 'error' : 'Napaka', 'errUnknown' : 'Neznana napaka.', 'errUnknownCmd' : 'Neznan ukaz.', 'errJqui' : 'Napačna jQuery UI nastavitev. Selectable, draggable in droppable dodatki morajo biti vključeni.', 'errNode' : 'elFinder potrebuje "DOM Element".', 'errURL' : 'Napačna nastavitev elFinder-ja! Manjka URL nastavitev.', 'errAccess' : 'Dostop zavrnjen.', 'errConnect' : 'Ne morem se priključiti na "backend".', 'errAbort' : 'Povezava prekinjena (aborted).', 'errTimeout' : 'Povezava potekla (timeout).', 'errNotFound' : 'Nisem našel "backend-a".', 'errResponse' : 'Napačni "backend" odgovor.', 'errConf' : 'Napačna "backend" nastavitev.', 'errJSON' : 'JSON modul ni instaliran.', 'errNoVolumes' : 'Readable volumes not available.', 'errCmdParams' : 'Napačni parametri za ukaz "$1".', 'errDataNotJSON' : 'Podatki niso v JSON obliki.', 'errDataEmpty' : 'Ni podatkov oz. so prazni.', 'errCmdReq' : '"Backend" zahtevek potrebuje ime ukaza.', 'errOpen' : '"$1" ni možno odpreti.', 'errNotFolder' : 'Objekt ni mapa.', 'errNotFile' : 'Objekt ni datoteka.', 'errRead' : '"$1" ni možno brati.', 'errWrite' : 'Ne morem pisati v "$1".', 'errPerm' : 'Dostop zavrnjen.', 'errLocked' : '"$1" je zaklenjen(a) in je ni možno preimenovati, premakniti ali izbrisati.', 'errExists' : 'Datoteka z imenom "$1" že obstaja.', 'errInvName' : 'Napačno ime datoteke.', 'errFolderNotFound' : 'Mape nisem našel.', 'errFileNotFound' : 'Datoteke nisem našel.', 'errTrgFolderNotFound' : 'Ciljna mapa "$1" ne obstaja.', 'errPopup' : 'Brskalnik je preprečil prikaz (popup) okna. Za vpogled datoteke omogočite nastavitev v vašem brskalniku.', 'errMkdir' : 'Ni možno dodati mape "$1".', 'errMkfile' : 'Ni možno dodati datoteke "$1".', 'errRename' : 'Ni možno preimenovati "$1".', 'errCopyFrom' : 'Kopiranje datotek iz "$1" ni dovoljeno.', 'errCopyTo' : 'Kopiranje datotek na "$1" ni dovoljeno.', 'errUpload' : 'Napaka pri prenosu.', 'errUploadFile' : '"$1" ni možno naložiti (upload).', 'errUploadNoFiles' : 'Ni datotek za nalaganje (upload).', 'errUploadTotalSize' : 'Podatki presegajo največjo dovoljeno velikost.', 'errUploadFileSize' : 'Datoteka presega največjo dovoljeno velikost.', 'errUploadMime' : 'Datoteke s to končnico niso dovoljene.', 'errUploadTransfer' : '"$1" napaka pri prenosu.', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : '"$1" ni možno shraniti.', 'errCopy' : '"$1" ni možno kopirati.', 'errMove' : '"$1" ni možno premakniti.', 'errCopyInItself' : '"$1" ni možno kopirati samo vase.', 'errRm' : '"$1" ni možno izbrisati.', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Datotek iz "$1" ni možno odpakirati.', 'errArchive' : 'Napaka pri delanju arhiva.', 'errArcType' : 'Nepodprta vrsta arhiva.', 'errNoArchive' : 'Datoteka ni arhiv ali vrsta arhiva ni podprta.', 'errCmdNoSupport' : '"Backend" ne podpira tega ukaza.', 'errReplByChild' : 'Mape “$1” ni možno zamenjati z vsebino mape.', 'errArcSymlinks' : 'Zaradi varnostnih razlogov arhiva ki vsebuje "symlinks" ni možno odpakirati.', 'errArcMaxSize' : 'Datoteke v arhivu presegajo največjo dovoljeno velikost.', 'errResize' : '"$1" ni možno razširiti.', 'errResizeDegree' : 'Invalid rotate degree.', 'errResizeRotate' : 'Unable to rotate image.', 'errResizeSize' : 'Invalid image size.', 'errResizeNoChange' : 'Image size not changed.', 'errUsupportType' : 'Nepodprta vrsta datoteke.', 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', // added 9.11.2011 'errNetMount' : 'Unable to mount "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Unsupported protocol.', // added 17.04.2012 'errNetMountFailed' : 'Mount failed.', // added 17.04.2012 'errNetMountHostReq' : 'Host required.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'Naredi arhiv', 'cmdback' : 'Nazaj', 'cmdcopy' : 'Kopiraj', 'cmdcut' : 'Izreži', 'cmddownload' : 'Poberi (download)', 'cmdduplicate' : 'Podvoji', 'cmdedit' : 'Uredi datoteko', 'cmdextract' : 'Odpakiraj datoteke iz arhiva', 'cmdforward' : 'Naprej', 'cmdgetfile' : 'Izberi datoteke', 'cmdhelp' : 'Več o', 'cmdhome' : 'Domov', 'cmdinfo' : 'Lastnosti', 'cmdmkdir' : 'Nova mapa', 'cmdmkfile' : 'Nova datoteka', 'cmdopen' : 'Odpri', 'cmdpaste' : 'Prilepi', 'cmdquicklook' : 'Hitri ogled', 'cmdreload' : 'Osveži', 'cmdrename' : 'Preimenuj', 'cmdrm' : 'Izbriši', 'cmdsearch' : 'Poišči datoteke', 'cmdup' : 'Mapa nazaj', 'cmdupload' : 'Naloži (upload)', 'cmdview' : 'Ogled', 'cmdresize' : 'Povečaj (pomanjšaj) sliko', 'cmdsort' : 'Razvrsti', 'cmdnetmount' : 'Mount network volume', /*********************************** buttons ***********************************/ 'btnClose' : 'Zapri', 'btnSave' : 'Shrani', 'btnRm' : 'Izbriši', 'btnApply' : 'Uporabi', 'btnCancel' : 'Prekliči', 'btnNo' : 'Ne', 'btnYes' : 'Da', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'Odpri mapo', 'ntffile' : 'Odpri datoteko', 'ntfreload' : 'Osveži vsebino mape', 'ntfmkdir' : 'Ustvarjam mapo', 'ntfmkfile' : 'Ustvarjam datoteke', 'ntfrm' : 'Brišem datoteke', 'ntfcopy' : 'Kopiram datoteke', 'ntfmove' : 'Premikam datoteke', 'ntfprepare' : 'Pripravljam se na kopiranje datotek', 'ntfrename' : 'Preimenujem datoteke', 'ntfupload' : 'Nalagam (upload) datoteke', 'ntfdownload' : 'Pobiram (download) datoteke', 'ntfsave' : 'Shranjujem datoteke', 'ntfarchive' : 'Ustvarjam arhiv', 'ntfextract' : 'Razpakiram datoteke iz arhiva', 'ntfsearch' : 'Iščem datoteke', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Počakaj delam >_<', 'ntfloadimg' : 'Nalagam sliko', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013 /************************************ dates **********************************/ 'dateUnknown' : 'neznan', 'Today' : 'Danes', 'Yesterday' : 'Včeraj', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Avg', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'Marec', 'April' : 'April', 'May' : 'Maj', 'June' : 'Junij', 'July' : 'Julij', 'August' : 'Avgust', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Nedelja', 'Monday' : 'Ponedeljek', 'Tuesday' : 'Torek', 'Wednesday' : 'Sreda', 'Thursday' : 'Četrtek', 'Friday' : 'Petek', 'Saturday' : 'Sobota', 'Sun' : 'Ned', 'Mon' : 'Pon', 'Tue' : 'Tor', 'Wed' : 'Sre', 'Thu' : 'Čet', 'Fri' : 'Pet', 'Sat' : 'Sob', /******************************** sort variants ********************************/ 'sortname' : 'po imenu', 'sortkind' : 'po vrsti', 'sortsize' : 'po velikosti', 'sortdate' : 'po datumu', 'sortFoldersFirst' : 'Folders first', /********************************** messages **********************************/ 'confirmReq' : 'Zahtevana je potrditev', 'confirmRm' : 'Ste prepričani, da želite izbrisati datoteko?
    POZOR! Tega ukaza ni možno preklicati!', 'confirmRepl' : 'Zamenjam staro datoteko z novo?', 'apllyAll' : 'Uporabi pri vseh', 'name' : 'Ime', 'size' : 'Velikost', 'perms' : 'Dovoljenja', 'modify' : 'Spremenjeno', 'kind' : 'Vrsta', 'read' : 'beri', 'write' : 'piši', 'noaccess' : 'ni dostopa', 'and' : 'in', 'unknown' : 'neznan', 'selectall' : 'Izberi vse datoteke', 'selectfiles' : 'Izberi datotek(o)e', 'selectffile' : 'Izberi prvo datoteko', 'selectlfile' : 'Izberi zadnjo datoteko', 'viewlist' : 'Seznam', 'viewicons' : 'Ikone', 'places' : 'Mesta (places)', 'calc' : 'Izračun', 'path' : 'Pot do', 'aliasfor' : 'Sopomenka (alias) za', 'locked' : 'Zaklenjeno', 'dim' : 'Dimenzije', 'files' : 'Datoteke', 'folders' : 'Mape', 'items' : 'Predmeti', 'yes' : 'da', 'no' : 'ne', 'link' : 'Povezava', 'searcresult' : 'Rezultati iskanja', 'selected' : 'izbrani predmeti', 'about' : 'Več o', 'shortcuts' : 'Bližnjice', 'help' : 'Pomoč', 'webfm' : 'Spletni upravitelj datotek', 'ver' : 'Verzija', 'protocolver' : 'verzija protokola', 'homepage' : 'Domača stran', 'docs' : 'Dokumentacija', 'github' : 'Fork us on Github', 'twitter' : 'Sledi na twitterju', 'facebook' : 'Pridruži se nam na facebook-u', 'team' : 'Tim', 'chiefdev' : 'Glavni razvijalec', 'developer' : 'razvijalec', 'contributor' : 'contributor', 'maintainer' : 'vzdrževalec', 'translator' : 'prevajalec', 'icons' : 'Ikone', 'dontforget' : 'In ne pozabi na brisačo', 'shortcutsof' : 'Bližnjica onemogočena', 'dropFiles' : 'Datoteke spusti tukaj', 'or' : 'ali', 'selectForUpload' : 'Izberi datoteke za nalaganje', 'moveFiles' : 'Premakni datoteke', 'copyFiles' : 'Kopiraj datoteke', 'rmFromPlaces' : 'Izbriši iz mesta (places)', 'aspectRatio' : 'Razmerje slike', 'scale' : 'Razširi', 'width' : 'Širina', 'height' : 'Višina', 'resize' : 'Povečaj', 'crop' : 'Obreži', 'rotate' : 'Zavrti', 'rotate-cw' : 'Zavrti 90 st. v smeri ure', 'rotate-ccw' : 'Zavrti 90 st. v obratni smeri ure', 'degree' : 'Stopnja', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'User', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Neznan', 'kindFolder' : 'Mapa', 'kindAlias' : 'Sopomenka (alias)', 'kindAliasBroken' : 'Nedelujoča sopomenka (alias)', // applications 'kindApp' : 'Program', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint predstavitev', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash program', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent datoteka', 'kind7z' : '7z arhiv', 'kindTAR' : 'TAR arhiv', 'kindGZIP' : 'GZIP arhiv', 'kindBZIP' : 'BZIP arhiv', 'kindXZ' : 'XZ arhiv', 'kindZIP' : 'ZIP arhiv', 'kindRAR' : 'RAR arhiv', 'kindJAR' : 'Java JAR datoteka', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM paket', // texts 'kindText' : 'Tekst dokument', 'kindTextPlain' : 'Samo tekst', 'kindPHP' : 'PHP koda', 'kindCSS' : 'Cascading style sheet (CSS)', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript koda', 'kindRTF' : 'Rich Text Format (RTF)', 'kindC' : 'C koda', 'kindCHeader' : 'C header koda', 'kindCPP' : 'C++ koda', 'kindCPPHeader' : 'C++ header koda', 'kindShell' : 'Unix shell skripta', 'kindPython' : 'Python kdoa', 'kindJava' : 'Java koda', 'kindRuby' : 'Ruby koda', 'kindPerl' : 'Perl skripta', 'kindSQL' : 'SQL koda', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK koda', 'kindCSV' : 'Besedilo ločeno z vejico (CSV)', 'kindDOCBOOK' : 'Docbook XML dokument', // images 'kindImage' : 'Slika', 'kindBMP' : 'BMP slika', 'kindJPEG' : 'JPEG slika', 'kindGIF' : 'GIF slika', 'kindPNG' : 'PNG slika', 'kindTIFF' : 'TIFF slika', 'kindTGA' : 'TGA slika', 'kindPSD' : 'Adobe Photoshop slika', 'kindXBITMAP' : 'X bitmap slika', 'kindPXM' : 'Pixelmator slika', // media 'kindAudio' : 'Avdio medija', 'kindAudioMPEG' : 'MPEG zvok', 'kindAudioMPEG4' : 'MPEG-4 zvok', 'kindAudioMIDI' : 'MIDI zvok', 'kindAudioOGG' : 'Ogg Vorbis zvok', 'kindAudioWAV' : 'WAV zvok', 'AudioPlaylist' : 'MP3 seznam', 'kindVideo' : 'Video medija', 'kindVideoDV' : 'DV film', 'kindVideoMPEG' : 'MPEG film', 'kindVideoMPEG4' : 'MPEG-4 film', 'kindVideoAVI' : 'AVI film', 'kindVideoMOV' : 'Quick Time film', 'kindVideoWM' : 'Windows Media film', 'kindVideoFlash' : 'Flash film', 'kindVideoMKV' : 'Matroska film', 'kindVideoOGG' : 'Ogg film' } }; })); application/library/js/i18n/elfinder.fallback.js000064400000000353146731177160015610 0ustar00(function(factory) { if (typeof define === 'function' && define.amd) { define(factory); } else if (typeof exports !== 'undefined') { module.exports = factory(); } else { factory(); } }(this, function() { return void 0; })); application/library/js/i18n/elfinder.LANG.js000064400000077754146731177160014615 0ustar00/** * elFinder translation template * use this file to create new translation * submit new translation via https://github.com/Studio-42/elFinder/issues * or make a pull request */ /** * XXXXX translation * @author Translator Name * @version 201x-xx-xx */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.REPLACE_WITH_xx_OR_xx_YY_LANG_CODE = { translator : 'Translator name <translator@email.tld>', language : 'Language of translation in your language', direction : 'ltr', dateFormat : 'M d, Y h:i A', // will show like: Mar 13, 2012 05:27 PM fancyDateFormat : '$1 h:i A', // will show like: Today 12:25 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 120513-172700 messages : { /********************************** errors **********************************/ 'error' : 'Error', 'errUnknown' : 'Unknown error.', 'errUnknownCmd' : 'Unknown command.', 'errJqui' : 'Invalid jQuery UI configuration. Selectable, draggable and droppable components must be included.', 'errNode' : 'elFinder requires DOM Element to be created.', 'errURL' : 'Invalid elFinder configuration! URL option is not set.', 'errAccess' : 'Access denied.', 'errConnect' : 'Unable to connect to backend.', 'errAbort' : 'Connection aborted.', 'errTimeout' : 'Connection timeout.', 'errNotFound' : 'Backend not found.', 'errResponse' : 'Invalid backend response.', 'errConf' : 'Invalid backend configuration.', 'errJSON' : 'PHP JSON module not installed.', 'errNoVolumes' : 'Readable volumes not available.', 'errCmdParams' : 'Invalid parameters for command "$1".', 'errDataNotJSON' : 'Data is not JSON.', 'errDataEmpty' : 'Data is empty.', 'errCmdReq' : 'Backend request requires command name.', 'errOpen' : 'Unable to open "$1".', 'errNotFolder' : 'Object is not a folder.', 'errNotFile' : 'Object is not a file.', 'errRead' : 'Unable to read "$1".', 'errWrite' : 'Unable to write into "$1".', 'errPerm' : 'Permission denied.', 'errLocked' : '"$1" is locked and can not be renamed, moved or removed.', 'errExists' : 'Item named "$1" already exists.', 'errInvName' : 'Invalid file name.', 'errInvDirname' : 'Invalid folder name.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Folder not found.', 'errFileNotFound' : 'File not found.', 'errTrgFolderNotFound' : 'Target folder "$1" not found.', 'errPopup' : 'Browser prevented opening popup window. To open file enable it in browser options.', 'errMkdir' : 'Unable to create folder "$1".', 'errMkfile' : 'Unable to create file "$1".', 'errRename' : 'Unable to rename "$1".', 'errCopyFrom' : 'Copying files from volume "$1" not allowed.', 'errCopyTo' : 'Copying files to volume "$1" not allowed.', 'errMkOutLink' : 'Unable to create a link to outside the volume root.', // from v2.1 added 03.10.2015 'errUpload' : 'Upload error.', // old name - errUploadCommon 'errUploadFile' : 'Unable to upload "$1".', // old name - errUpload 'errUploadNoFiles' : 'No files found for upload.', 'errUploadTotalSize' : 'Data exceeds the maximum allowed size.', // old name - errMaxSize 'errUploadFileSize' : 'File exceeds maximum allowed size.', // old name - errFileMaxSize 'errUploadMime' : 'File type not allowed.', 'errUploadTransfer' : '"$1" transfer error.', 'errUploadTemp' : 'Unable to make temporary file for upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', // new 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Unable to save "$1".', 'errCopy' : 'Unable to copy "$1".', 'errMove' : 'Unable to move "$1".', 'errCopyInItself' : 'Unable to copy "$1" into itself.', 'errRm' : 'Unable to remove "$1".', 'errTrash' : 'Unable into trash.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Unable to extract files from "$1".', 'errArchive' : 'Unable to create archive.', 'errArcType' : 'Unsupported archive type.', 'errNoArchive' : 'File is not archive or has unsupported archive type.', 'errCmdNoSupport' : 'Backend does not support this command.', 'errReplByChild' : 'The folder "$1" can\'t be replaced by an item it contains.', 'errArcSymlinks' : 'For security reason denied to unpack archives contains symlinks or files with not allowed names.', // edited 24.06.2012 'errArcMaxSize' : 'Archive files exceeds maximum allowed size.', 'errResize' : 'Unable to resize "$1".', 'errResizeDegree' : 'Invalid rotate degree.', // added 7.3.2013 'errResizeRotate' : 'Unable to rotate image.', // added 7.3.2013 'errResizeSize' : 'Invalid image size.', // added 7.3.2013 'errResizeNoChange' : 'Image size not changed.', // added 7.3.2013 'errUsupportType' : 'Unsupported file type.', 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', // added 9.11.2011 'errNetMount' : 'Unable to mount "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Unsupported protocol.', // added 17.04.2012 'errNetMountFailed' : 'Mount failed.', // added 17.04.2012 'errNetMountHostReq' : 'Host required.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', 'errNetUnMount' : 'Unable to unmount.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Not convertible to UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Try the modern browser, If you\'d like to upload the folder.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Timed out while searching "$1". Search result is partial.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-authorization is required.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Max number of selectable items is $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Unable to restore from the trash. Can\'t identify the restore destination.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor not found to this file type.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Error occurred on the server side.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Unable to empty folder "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'There are $1 more errors.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'You can create up to $1 folders at one time.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Create archive', 'cmdback' : 'Back', 'cmdcopy' : 'Copy', 'cmdcut' : 'Cut', 'cmddownload' : 'Download', 'cmdduplicate' : 'Duplicate', 'cmdedit' : 'Edit file', 'cmdextract' : 'Extract files from archive', 'cmdforward' : 'Forward', 'cmdgetfile' : 'Select files', 'cmdhelp' : 'About this software', 'cmdhome' : 'Root', 'cmdinfo' : 'Get info', 'cmdmkdir' : 'New folder', 'cmdmkdirin' : 'Into New Folder', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'New file', 'cmdopen' : 'Open', 'cmdpaste' : 'Paste', 'cmdquicklook' : 'Preview', 'cmdreload' : 'Reload', 'cmdrename' : 'Rename', 'cmdrm' : 'Delete', 'cmdtrash' : 'Into trash', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restore', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Find files', 'cmdup' : 'Go to parent folder', 'cmdupload' : 'Upload files', 'cmdview' : 'View', 'cmdresize' : 'Resize & Rotate', 'cmdsort' : 'Sort', 'cmdnetmount' : 'Mount network volume', // added 18.04.2012 'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'To Places', // added 28.12.2014 'cmdchmod' : 'Change mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Open a folder', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Reset column width', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Full Screen', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Move', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Empty the folder', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Undo', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Redo', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Select all', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Select none', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invert selection', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Open in new window', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Hide (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Close', 'btnSave' : 'Save', 'btnRm' : 'Remove', 'btnApply' : 'Apply', 'btnCancel' : 'Cancel', 'btnNo' : 'No', 'btnYes' : 'Yes', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Goto $1 & approve', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Convert', // from v2.1 added 08.04.2014 'btnCwd' : 'Here', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'All', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015 'btnFileName':'Filename', // from v2.1 added 22.5.2015 'btnSaveClose': 'Save & Close', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Rename', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Rename(All)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Prev ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Next ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Save As', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Open folder', 'ntffile' : 'Open file', 'ntfreload' : 'Reload folder content', 'ntfmkdir' : 'Creating folder', 'ntfmkfile' : 'Creating files', 'ntfrm' : 'Delete items', 'ntfcopy' : 'Copy items', 'ntfmove' : 'Move items', 'ntfprepare' : 'Checking existing items', 'ntfrename' : 'Rename files', 'ntfupload' : 'Uploading files', 'ntfdownload' : 'Downloading files', 'ntfsave' : 'Save files', 'ntfarchive' : 'Creating archive', 'ntfextract' : 'Extracting files from archive', 'ntfsearch' : 'Searching files', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Doing something', 'ntfloadimg' : 'Loading image', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013 'ntfreaddir' : 'Reading folder infomation', // from v2.1 added 01.07.2013 'ntfurl' : 'Getting URL of link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changing file mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verifying upload file name', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creating a file for download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Getting path infomation', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processing the uploaded file', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Doing throw in the trash', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Doing restore from the trash', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Checking destination folder', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Undoing previous operation', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Redoing previous undone', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Checking contents', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Trash', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'unknown', 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'May', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', 'Sun' : 'Sun', 'Mon' : 'Mon', 'Tue' : 'Tue', 'Wed' : 'Wed', 'Thu' : 'Thu', 'Fri' : 'Fri', 'Sat' : 'Sat', /******************************** sort variants ********************************/ 'sortname' : 'by name', 'sortkind' : 'by kind', 'sortsize' : 'by size', 'sortdate' : 'by date', 'sortFoldersFirst' : 'Folders first', 'sortperm' : 'by permission', // from v2.1.13 added 13.06.2016 'sortmode' : 'by mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'by owner', // from v2.1.13 added 13.06.2016 'sortgroup' : 'by group', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Also Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'NewFolder', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmation required', 'confirmRm' : 'Are you sure you want to permanently remove items?
    This cannot be undone!', 'confirmRepl' : 'Replace old file with new one? (If it contains folders, it will be merged. To backup and replace, select Backup.)', 'confirmRest' : 'Replace existing item with the item in trash?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Not in UTF-8
    Convert to UTF-8?
    Contents become UTF-8 by saving after conversion.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.
    Please select character encoding of this file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'It has been modified.
    Losing work if you do not save changes.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Are you sure you want to move items to trash bin?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Are you sure you want to move items to "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Apply to all', 'name' : 'Name', 'size' : 'Size', 'perms' : 'Permissions', 'modify' : 'Modified', 'kind' : 'Kind', 'read' : 'read', 'write' : 'write', 'noaccess' : 'no access', 'and' : 'and', 'unknown' : 'unknown', 'selectall' : 'Select all items', 'selectfiles' : 'Select item(s)', 'selectffile' : 'Select first item', 'selectlfile' : 'Select last item', 'viewlist' : 'List view', 'viewicons' : 'Icons view', 'viewSmall' : 'Small icons', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medium icons', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Large icons', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra large icons', // from v2.1.39 added 22.5.2018 'places' : 'Places', 'calc' : 'Calculate', 'path' : 'Path', 'aliasfor' : 'Alias for', 'locked' : 'Locked', 'dim' : 'Dimensions', 'files' : 'Files', 'folders' : 'Folders', 'items' : 'Items', 'yes' : 'yes', 'no' : 'no', 'link' : 'Link', 'searcresult' : 'Search results', 'selected' : 'selected items', 'about' : 'About', 'shortcuts' : 'Shortcuts', 'help' : 'Help', 'webfm' : 'Web file manager', 'ver' : 'Version', 'protocolver' : 'protocol version', 'homepage' : 'Project home', 'docs' : 'Documentation', 'github' : 'Fork us on GitHub', 'twitter' : 'Follow us on Twitter', 'facebook' : 'Join us on Facebook', 'team' : 'Team', 'chiefdev' : 'chief developer', 'developer' : 'developer', 'contributor' : 'contributor', 'maintainer' : 'maintainer', 'translator' : 'translator', 'icons' : 'Icons', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'Shortcuts disabled', 'dropFiles' : 'Drop files here', 'or' : 'or', 'selectForUpload' : 'Select files', 'moveFiles' : 'Move items', 'copyFiles' : 'Copy items', 'restoreFiles' : 'Restore items', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Remove from places', 'aspectRatio' : 'Aspect ratio', 'scale' : 'Scale', 'width' : 'Width', 'height' : 'Height', 'resize' : 'Resize', 'crop' : 'Crop', 'rotate' : 'Rotate', 'rotate-cw' : 'Rotate 90 degrees CW', 'rotate-ccw' : 'Rotate 90 degrees CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'User', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 'confirmUnmount' : 'Are you unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drop or Paste files from browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drop files, Paste URLs or images(clipboard) here', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Search by input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Owner', // from v2.1 added 20.6.2015 'group' : 'Group', // from v2.1 added 20.6.2015 'other' : 'Other', // from v2.1 added 20.6.2015 'execute' : 'Execute', // from v2.1 added 20.6.2015 'perm' : 'Permission', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Folder is empty', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Folder is empty\\A Drop to add items', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Folder is empty\\A Long tap to add items', // from v2.1.6 added 30.12.2015 'quality' : 'Quality', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Move up', // from v2.1.6 added 18.1.2016 'getLink' : 'Get URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Selected items ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Folder ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Allow offline access', // from v2.1.10 added 3.25.2016 'reAuth' : 'To re-authenticate', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Now loading...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Open multiple files', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'You are trying to open the $1 files. Are you sure you want to open in browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Search results is empty in search target.', // from v2.1.12 added 5.16.2016 'editingFile' : 'It is editing a file.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'You have selected $1 items.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'You have $1 items in the clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Incremental search is only from the current view.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reinstate', // from v2.1.15 added 3.8.2016 'complete' : '$1 complete', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Page turning', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'Reset', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Background color', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Color picker', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Enabled', // from v2.1.16 added 4.10.2016 'disabled' : 'Disabled', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Search results is empty in current view.\\APress [Enter] to expand search target.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'First letter search results is empty in current view.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Text label', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins left', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Select folder', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'First letter search', // from v2.1.23 added 24.3.2017 'presets' : 'Presets', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'It\'s too many items so it can\'t into trash.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Empty the folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'There are no items in a folder "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preference', // from v2.1.26 added 28.6.2017 'language' : 'Language', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialize the settings saved in this browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbar settings', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 chars left.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 lines left.', // from v2.1.52 added 16.1.2020 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Rough file size', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Select', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action when select file', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open with the editor used last time', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invert selection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Are you sure you want to rename $1 selected items like $2?
    This cannot be undone!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch rename', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Number', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Add prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Add suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Change extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Columns settings (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'All changes will reflect immediately to the archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Any changes will not reflect until un-mount this volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Selection Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithms to show the file hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Press again to exit.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Toolbar', // from v2.1.38 added 4.4.2018 'workspace' : 'Work Space', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'All', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icon Size (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open the maximized editor window', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Because conversion by API is not currently available, please convert on the website.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convert on the site of $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Show hidden items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Hide hidden items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Show/Hide hidden items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type of the Text file', // from v2.1.41 added 7.8.2018 'add' : 'Add', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Description', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Author', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'License', // from v2.1.43 added 19.10.2018 'exportToSave' : 'This item can\'t be saved. To avoid losing the edits you need to export to your PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double click on the file to select it.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Use fullscreen mode', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Unknown', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Folder', 'kindSelects' : 'Selections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Broken alias', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Postscript document', 'kindMsOffice' : 'Microsoft Office document', 'kindMsWord' : 'Microsoft Word document', 'kindMsExcel' : 'Microsoft Excel document', 'kindMsPP' : 'Microsoft Powerpoint presentation', 'kindOO' : 'Open Office document', 'kindAppFlash' : 'Flash application', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent file', 'kind7z' : '7z archive', 'kindTAR' : 'TAR archive', 'kindGZIP' : 'GZIP archive', 'kindBZIP' : 'BZIP archive', 'kindXZ' : 'XZ archive', 'kindZIP' : 'ZIP archive', 'kindRAR' : 'RAR archive', 'kindJAR' : 'Java JAR file', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM package', // texts 'kindText' : 'Text document', 'kindTextPlain' : 'Plain text', 'kindPHP' : 'PHP source', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML document', 'kindJS' : 'Javascript source', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C source', 'kindCHeader' : 'C header source', 'kindCPP' : 'C++ source', 'kindCPPHeader' : 'C++ header source', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python source', 'kindJava' : 'Java source', 'kindRuby' : 'Ruby source', 'kindPerl' : 'Perl script', 'kindSQL' : 'SQL source', 'kindXML' : 'XML document', 'kindAWK' : 'AWK source', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML document', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Image', 'kindBMP' : 'BMP image', 'kindJPEG' : 'JPEG image', 'kindGIF' : 'GIF Image', 'kindPNG' : 'PNG Image', 'kindTIFF' : 'TIFF image', 'kindTGA' : 'TGA image', 'kindPSD' : 'Adobe Photoshop image', 'kindXBITMAP' : 'X bitmap image', 'kindPXM' : 'Pixelmator image', // media 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV movie', 'kindVideoMPEG' : 'MPEG movie', 'kindVideoMPEG4' : 'MPEG-4 movie', 'kindVideoAVI' : 'AVI movie', 'kindVideoMOV' : 'Quick Time movie', 'kindVideoWM' : 'Windows Media movie', 'kindVideoFlash' : 'Flash movie', 'kindVideoMKV' : 'Matroska movie', 'kindVideoOGG' : 'Ogg movie' } }; })); application/library/js/i18n/elfinder.ko.js000064400000105673146731177160014475 0ustar00/** * Korea-한국어 translation * @author Hwang Ahreum; * @author Park Sungyong; * @author Yeonjeong Woo * @author Kwon Hyungjoo * @version 2020-04-07 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ko = { translator : 'Hwang Ahreum; <luckmagic@naver.com>, Park Sungyong; <sungyong@gmail.com>, Yeonjeong Woo <eat_sweetly@naver.com>, Kwon Hyungjoo <hyung778@gmail.com>', language : 'Korea-한국어', direction : 'ltr', dateFormat : 'Y-m-d H:i', // will show like: 2020-04-07 10:24 fancyDateFormat : '$1 H:i', // will show like: 오늘 10:24 nonameDateFormat : 'ymd-His', // noname upload will show like: 200407-102404 messages : { /********************************** errors **********************************/ 'error' : '오류', 'errUnknown' : '알 수 없는 오류.', 'errUnknownCmd' : '알 수 없는 명령어.', 'errJqui' : 'jQuery UI 설정이 올바르지 않습니다. Selectable, draggable 및 droppable 구성 요소가 포함되어 있어야 합니다.', 'errNode' : 'elFinder를 생성하기 위해서는 DOM Element를 요구합니다.', 'errURL' : 'elFinder 환경설정이 올바르지 않습니다! URL 옵션이 설정되지 않았습니다.', 'errAccess' : '접근 제한.', 'errConnect' : 'Backend에 연결할 수 없습니다.', 'errAbort' : '연결 실패.', 'errTimeout' : '연결시간 초과.', 'errNotFound' : 'Backend를 찾을 수 없습니다.', 'errResponse' : 'Backend가 응답하지 않습니다.', 'errConf' : 'Backend 환경설정이 올바르지 않습니다.', 'errJSON' : 'PHP JSON 모듈이 설치되지 않았습니다.', 'errNoVolumes' : '읽을 수 있는 볼륨이 없습니다.', 'errCmdParams' : '"$1" 명령에 잘못된 매개 변수가 있습니다.', 'errDataNotJSON' : '데이터가 JSON이 아닙니다.', 'errDataEmpty' : '데이터가 비어있습니다.', 'errCmdReq' : 'Backend 요청에는 명령어 이름이 필요합니다.', 'errOpen' : '"$1"을(를) 열 수 없습니다.', 'errNotFolder' : '폴더가 아닙니다.', 'errNotFile' : '파일이 아닙니다.', 'errRead' : '"$1"을(를) 읽을 수 없습니다.', 'errWrite' : '"$1"에 쓸 수 없습니다.', 'errPerm' : '권한이 없습니다.', 'errLocked' : '"$1"이(가) 잠겨 있습니다, 이동, 삭제가 불가능합니다', 'errExists' : '이미 "$1"파일이 존재합니다.', 'errInvName' : '파일명에 올바르지 않은 문자가 포함되었습니다.', 'errInvDirname' : '폴더명에 올바르지 않은 문자가 포함되었습니다.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : '폴더를 찾을 수 없습니다.', 'errFileNotFound' : '파일을 찾을 수 없습니다.', 'errTrgFolderNotFound' : '"$1" 폴더를 찾을 수 없습니다.', 'errPopup' : '브라우저에서 팝업을 차단하였습니다. 팝업을 허용하려면 브라우저 옵션을 변경하세요.', 'errMkdir' : '"$1" 폴더를 생성할 수 없습니다.', 'errMkfile' : '"$1" 파일을 생성할 수 없습니다.', 'errRename' : '"$1"의 이름을 변경할 수 없습니다.', 'errCopyFrom' : '볼률 "$1"으(로)부터 파일을 복사할 수 없습니다.', 'errCopyTo' : '볼률 "$1"에 파일을 복사할 수 없습니다.', 'errMkOutLink' : 'root 볼륨 외부에 링크를 만들 수 없습니다.', // from v2.1 added 03.10.2015 'errUpload' : '업로드 오류.', // old name - errUploadCommon 'errUploadFile' : '"$1"을(를) 업로드할 수 없습니다.', // old name - errUpload 'errUploadNoFiles' : '업로드할 파일이 없습니다.', 'errUploadTotalSize' : '데이터가 허용된 최대크기를 초과하였습니다.', // old name - errMaxSize 'errUploadFileSize' : '파일이 허용된 최대크기를 초과하였습니다.', // old name - errFileMaxSize 'errUploadMime' : '잘못된 파일형식입니다.', 'errUploadTransfer' : '"$1" 전송 오류.', 'errUploadTemp' : '업로드에 필요한 임시파일 생성을 할 수 없습니다.', // from v2.1 added 26.09.2015 'errNotReplace' : '"$1"개체가 현재 위치에 이미 존재하며 다른 유형의 개체로 대체 할 수 없습니다.', // new 'errReplace' : '"$1"을(를) 변경할 수 없습니다.', 'errSave' : '"$1"을(를) 저장할 수 없습니다.', 'errCopy' : '"$1"을(를) 복사할 수 없습니다.', 'errMove' : '"$1"을(를) 이동할 수 없습니다.', 'errCopyInItself' : '"$1"을(를) 자기 자신에게 복사할 수 없습니다.', 'errRm' : '"$1"의 이름을 변경할 수 없습니다.', 'errTrash' : '휴지통으로 보낼 수 없습니다.', // from v2.1.24 added 30.4.2017 'errRmSrc' : '원본 파일을 제거할 수 없습니다.', 'errExtract' : '"$1"에 압축을 풀 수 없습니다.', 'errArchive' : '압축파일을 생성할 수 없습니다.', 'errArcType' : '지원하지 않는 압축파일 형식입니다.', 'errNoArchive' : '압축파일이 아니거나 지원하지 않는 압축파일 형식입니다.', 'errCmdNoSupport' : 'Backend에서 이 명령을 지원하지 않습니다.', 'errReplByChild' : '"$1" 폴더에 덮어쓸수 없습니다.', 'errArcSymlinks' : '보안상의 이유로 압축파일이 심볼릭 링크를 포함하거나 허용되지 않는 이름이 있을 경우 압축 해제가 불가능합니다.', // edited 24.06.2012 'errArcMaxSize' : '압축파일이 허용된 최대크기를 초과하였습니다.', 'errResize' : '"$1"의 크기 변경을 할 수 없습니다.', 'errResizeDegree' : '회전가능한 각도가 아닙니다.', // added 7.3.2013 'errResizeRotate' : '이미지를 회전할 수 없습니다.', // added 7.3.2013 'errResizeSize' : '올바르지 않은 크기의 이미지입니다.', // added 7.3.2013 'errResizeNoChange' : '이미지 크기가 변경되지 않았습니다.', // added 7.3.2013 'errUsupportType' : '지원하지 않는 파일 형식.', 'errNotUTF8Content' : '파일 "$1"은 UTF-8 형식이 아니어서 편집할 수 없습니다.', // added 9.11.2011 'errNetMount' : '"$1"을(를) 마운트할 수 없습니다.', // added 17.04.2012 'errNetMountNoDriver' : '지원되지 않는 프로토콜.', // added 17.04.2012 'errNetMountFailed' : '마운드 실패.', // added 17.04.2012 'errNetMountHostReq' : '호스트가 필요합니다.', // added 18.04.2012 'errSessionExpires' : '활동이 없어 세션이 만료되었습니다.', 'errCreatingTempDir' : '임시 폴더 생성에 실패했습니다: "$1"', 'errFtpDownloadFile' : 'FTP를 통한 다운로드에 실패했습니다: "$1"', 'errFtpUploadFile' : 'FTP에 업로드 실패했습니다: "$1"', 'errFtpMkdir' : 'FTP에서 폴더 생성에 실패했습니다: "$1"', 'errArchiveExec' : '압축중 오류가 발생했습니다: "$1"', 'errExtractExec' : '압축해제중 오류가 발생했습니다: "$1"', 'errNetUnMount' : '마운트를 해제할 수 없습니다.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'UTF-8로 변환할 수 없습니다.', // from v2.1 added 08.04.2014 'errFolderUpload' : '폴더를 업로드 하려면 최신 브라우저를 사용하세요.', // from v2.1 added 26.6.2015 'errSearchTimeout' : '"$1" 검색중 시간을 초과하였습니다. 일부 결과만 표시됩니다.', // from v2.1 added 12.1.2016 'errReauthRequire' : '재인증이 필요합니다.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : '선택 가능한 최대 개수는 $1개입니다.', // from v2.1.17 added 17.10.2016 'errRestore' : '휴지통에서 복원할 수 없습니다. 복원할 위치를 확인할 수 없습니다.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : '이 파일 형식을 위한 편집기를 찾지 못했습니다.', // from v2.1.25 added 23.5.2017 'errServerError' : '서버측에서 오류가 발생했습니다.', // from v2.1.25 added 16.6.2017 'errEmpty' : '"$1" 폴더를 비울 수 없습니다.', // from v2.1.25 added 22.6.2017 'moreErrors' : '$1개의 오류가 더 발생했습니다.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : '압축파일생성', 'cmdback' : '뒤로', 'cmdcopy' : '복사', 'cmdcut' : '자르기', 'cmddownload' : '다운로드', 'cmdduplicate' : '사본', 'cmdedit' : '편집', 'cmdextract' : '압축풀기', 'cmdforward' : '앞으로', 'cmdgetfile' : '선택', 'cmdhelp' : '이 소프트웨어는', 'cmdhome' : '홈', 'cmdinfo' : '파일정보', 'cmdmkdir' : '새 폴더', 'cmdmkdirin' : '새 폴더로', // from v2.1.7 added 19.2.2016 'cmdmkfile' : '새 파일', 'cmdopen' : '열기', 'cmdpaste' : '붙여넣기', 'cmdquicklook' : '미리보기', 'cmdreload' : '새로고침', 'cmdrename' : '이름바꾸기', 'cmdrm' : '삭제', 'cmdtrash' : '휴지통으로', //from v2.1.24 added 29.4.2017 'cmdrestore' : '복원', //from v2.1.24 added 3.5.2017 'cmdsearch' : '파일찾기', 'cmdup' : '상위폴더', 'cmdupload' : '업로드', 'cmdview' : '보기', 'cmdresize' : '이미지 크기 변경 & 회전', 'cmdsort' : '정렬', 'cmdnetmount' : '네트워크 볼륨 마운트', // added 18.04.2012 'cmdnetunmount': '마운트 해제', // from v2.1 added 30.04.2012 'cmdplaces' : '즐겨찾기로', // added 28.12.2014 'cmdchmod' : '모드 변경', // from v2.1 added 20.6.2015 'cmdopendir' : '폴더 열기', // from v2.1 added 13.1.2016 'cmdcolwidth' : '컬럼 넓이 초기화', // from v2.1.13 added 12.06.2016 'cmdfullscreen': '전체 화면', // from v2.1.15 added 03.08.2016 'cmdmove' : '이동', // from v2.1.15 added 21.08.2016 'cmdempty' : '폴더 비우기', // from v2.1.25 added 22.06.2017 'cmdundo' : '실행 취소', // from v2.1.27 added 31.07.2017 'cmdredo' : '다시 실행', // from v2.1.27 added 31.07.2017 'cmdpreference': '환경설정', // from v2.1.27 added 03.08.2017 'cmdselectall' : '전체 선택', // from v2.1.28 added 15.08.2017 'cmdselectnone': '선택 취소', // from v2.1.28 added 15.08.2017 'cmdselectinvert': '선택 반전', // from v2.1.28 added 15.08.2017 'cmdopennew' : '새 창으로 열기', // from v2.1.38 added 3.4.2018 'cmdhide' : '숨기기 (환경설정)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : '닫기', 'btnSave' : '저장', 'btnRm' : '삭제', 'btnApply' : '적용', 'btnCancel' : '취소', 'btnNo' : '아니오', 'btnYes' : '예', 'btnMount' : '마운트', // added 18.04.2012 'btnApprove': '$1로 이동 및 승인', // from v2.1 added 26.04.2012 'btnUnmount': '마운트 해제', // from v2.1 added 30.04.2012 'btnConv' : '변환', // from v2.1 added 08.04.2014 'btnCwd' : '여기', // from v2.1 added 22.5.2015 'btnVolume' : '볼륨', // from v2.1 added 22.5.2015 'btnAll' : '전체', // from v2.1 added 22.5.2015 'btnMime' : 'MIME 타입', // from v2.1 added 22.5.2015 'btnFileName':'파일 이름', // from v2.1 added 22.5.2015 'btnSaveClose': '저장후 닫기', // from v2.1 added 12.6.2015 'btnBackup' : '백업', // fromv2.1 added 28.11.2015 'btnRename' : '이름변경', // from v2.1.24 added 6.4.2017 'btnRenameAll' : '전체이름 변경', // from v2.1.24 added 6.4.2017 'btnPrevious' : '이전 ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : '다음 ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : '다른 이름으로 저장하기', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : '폴더 열기', 'ntffile' : '파일 열기', 'ntfreload' : '새로고침', 'ntfmkdir' : '폴더 생성', 'ntfmkfile' : '파일 생성', 'ntfrm' : '삭제', 'ntfcopy' : '복사', 'ntfmove' : '이동', 'ntfprepare' : '복사 준비', 'ntfrename' : '이름바꾸기', 'ntfupload' : '업로드', 'ntfdownload' : '다운로드', 'ntfsave' : '저장하기', 'ntfarchive' : '압축파일만들기', 'ntfextract' : '압축풀기', 'ntfsearch' : '검색', 'ntfresize' : '이미지 크기 변경', 'ntfsmth' : '작업중 >_<', 'ntfloadimg' : '이미지 불러오는 중', 'ntfnetmount' : '네트워크 볼륨 마운트 중', // added 18.04.2012 'ntfnetunmount': '네트워크 볼륨 마운트 해제 중', // from v2.1 added 30.04.2012 'ntfdim' : '이미지 해상도 가져오는 중', // added 20.05.2013 'ntfreaddir' : '폴더 정보 읽는 중', // from v2.1 added 01.07.2013 'ntfurl' : '링크 URL 가져오는 중', // from v2.1 added 11.03.2014 'ntfchmod' : '파일 모드 변경하는 중', // from v2.1 added 20.6.2015 'ntfpreupload': '업로드된 파일명 검증 중', // from v2.1 added 31.11.2015 'ntfzipdl' : '다운로드할 파일 생성 중', // from v2.1.7 added 23.1.2016 'ntfparents' : '경로 정보 가져오는 중', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': '업로드된 파일 처리 중', // from v2.1.17 added 2.11.2016 'ntftrash' : '휴지통으로 이동 중', // from v2.1.24 added 2.5.2017 'ntfrestore' : '휴지통에서 복원 중', // from v2.1.24 added 3.5.2017 'ntfchkdir' : '대상 폴더 점검 중', // from v2.1.24 added 3.5.2017 'ntfundo' : '이전 작업 취소 중', // from v2.1.27 added 31.07.2017 'ntfredo' : '취소된 작업 다시 하는 중', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : '내용 확인 중', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : '휴지통', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : '알 수 없음', 'Today' : '오늘', 'Yesterday' : '어제', 'msJan' : '1월', 'msFeb' : '2월', 'msMar' : '3월', 'msApr' : '4월', 'msMay' : '5월', 'msJun' : '6월', 'msJul' : '7월', 'msAug' : '8월', 'msSep' : '9월', 'msOct' : '10월', 'msNov' : '11월', 'msDec' : '12월', 'January' : '1월', 'February' : '2월', 'March' : '3월', 'April' : '4월', 'May' : '5월', 'June' : '6월', 'July' : '7월', 'August' : '8월', 'September' : '9월', 'October' : '10월', 'November' : '11월', 'December' : '12월', 'Sunday' : '일요일', 'Monday' : '월요일', 'Tuesday' : '화요일', 'Wednesday' : '수요일', 'Thursday' : '목요일', 'Friday' : '금요일', 'Saturday' : '토요일', 'Sun' : '일', 'Mon' : '월', 'Tue' : '화', 'Wed' : '수', 'Thu' : '목', 'Fri' : '금', 'Sat' : '토', /******************************** sort variants ********************************/ 'sortname' : '이름', 'sortkind' : '종류', 'sortsize' : '크기', 'sortdate' : '날짜', 'sortFoldersFirst' : '폴더 먼저', 'sortperm' : '퍼미션별', // from v2.1.13 added 13.06.2016 'sortmode' : '모드별', // from v2.1.13 added 13.06.2016 'sortowner' : '소유자별', // from v2.1.13 added 13.06.2016 'sortgroup' : '그룹별', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : '트리뷰도 같이', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : '새파일.txt', // added 10.11.2015 'untitled folder' : '새폴더', // added 10.11.2015 'Archive' : '새아카이브', // from v2.1 added 10.11.2015 'untitled file' : '새파일.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: 파일', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : '확인', 'confirmRm' : '이 파일을 정말로 삭제 하겠습니까?
    실행 후 되돌릴 수 없습니다!', 'confirmRepl' : '오래된 파일을 새 파일로 바꾸시겠습니까? (폴더가 포함되어 있으면 병합됩니다. 백업 및 교체하려면 백업을 선택하세요.)', 'confirmRest' : '이미 있는 파일을 휴지통에 있는 파일로 교체하시겠습니까?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8이 아닙니다
    UTF-8로 변환할까요?
    변환후 저장하면 UTF-8로 바뀝니다.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : '이 파일의 인코딩 타입을 알아내지 못했습니다. 편집하려면 임시로 UTF-8로 변환해야 합니다.
    이 파일의 인코딩을 선택해주세요.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : '변경된 부분이 있습니다.
    저장하지 않는다면 현재 작업중인 내용을 잃을 수 있습니다.', // from v2.1 added 15.7.2015 'confirmTrash' : '휴지통으로 이동하시겠습니까?', //from v2.1.24 added 29.4.2017 'confirmMove' : '이 파일을 정말 "$1"(으)로 이동하시겠습니까?', //from v2.1.50 added 27.7.2019 'apllyAll' : '모두 적용', 'name' : '이름', 'size' : '크기', 'perms' : '권한', 'modify' : '수정된 시간', 'kind' : '종류', 'read' : '읽기', 'write' : '쓰기', 'noaccess' : '액세스 불가', 'and' : '와', 'unknown' : '알 수 없음', 'selectall' : '모든 파일 선택', 'selectfiles' : '파일 선택', 'selectffile' : '첫번째 파일 선택', 'selectlfile' : '마지막 파일 선택', 'viewlist' : '리스트 보기', 'viewicons' : '아이콘 보기', 'viewSmall' : '작은 아이콘', // from v2.1.39 added 22.5.2018 'viewMedium' : '중간 아이콘', // from v2.1.39 added 22.5.2018 'viewLarge' : '큰 아이콘', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : '아주 큰 아이콘', // from v2.1.39 added 22.5.2018 'places' : '즐겨찾기', 'calc' : '계산', 'path' : '경로', 'aliasfor' : '별명', 'locked' : '잠금', 'dim' : '크기', 'files' : '파일', 'folders' : '폴더', 'items' : '아이템', 'yes' : '예', 'no' : '아니오', 'link' : '링크', 'searcresult' : '검색 결과', 'selected' : '아이템 선택', 'about' : '이 프로그램은..', 'shortcuts' : '단축아이콘', 'help' : '도움말', 'webfm' : '웹 파일매니저', 'ver' : '버전', 'protocolver' : '프로토콜 버전', 'homepage' : '홈페이지', 'docs' : '문서', 'github' : 'Github에서 포크하기', 'twitter' : '트위터에서 팔로우하기', 'facebook' : '페이스북에서 가입하기', 'team' : '팀', 'chiefdev' : '개발팀장', 'developer' : '개발자', 'contributor' : '공헌자', 'maintainer' : '관리자', 'translator' : '번역', 'icons' : '아이콘', 'dontforget' : '그리고 수건 가져가는 것을 잊지 마세요', 'shortcutsof' : '단축아이콘 사용불가', 'dropFiles' : '여기로 이동하기', 'or' : '또는', 'selectForUpload' : '업로드 파일 선택', 'moveFiles' : '파일 이동', 'copyFiles' : '파일 복사', 'restoreFiles' : '복원하기', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : '현재 폴더에서 삭제하기', 'aspectRatio' : '화면비율', 'scale' : '크기', 'width' : '가로', 'height' : '세로', 'resize' : '사이즈 변경', 'crop' : '자르기', 'rotate' : '회전', 'rotate-cw' : '반시계방향 90도 회전', 'rotate-ccw' : '시계방향 90도 회전', 'degree' : '도', 'netMountDialogTitle' : '네트워크 볼륨 마운트', // added 18.04.2012 'protocol' : '프로토콜', // added 18.04.2012 'host' : '호스트', // added 18.04.2012 'port' : '포트', // added 18.04.2012 'user' : '사용자', // added 18.04.2012 'pass' : '비밀번호', // added 18.04.2012 'confirmUnmount' : '$1을(를) 마운트 해제하시겠습니까?', // from v2.1 added 30.04.2012 'dropFilesBrowser': '브라우저에서 파일을 끌어오거나 붙여넣으세요', // from v2.1 added 30.05.2012 'dropPasteFiles' : '파일을 끌어오거나, 클립보드의 URL이나 이미지들을 붙여넣으세요', // from v2.1 added 07.04.2014 'encoding' : '인코딩', // from v2.1 added 19.12.2014 'locale' : '로케일', // from v2.1 added 19.12.2014 'searchTarget' : '대상: $1', // from v2.1 added 22.5.2015 'searchMime' : '입력한 MIME 타입으로 검색하기', // from v2.1 added 22.5.2015 'owner' : '소유자', // from v2.1 added 20.6.2015 'group' : '그룹', // from v2.1 added 20.6.2015 'other' : '그외', // from v2.1 added 20.6.2015 'execute' : '실행', // from v2.1 added 20.6.2015 'perm' : '권한', // from v2.1 added 20.6.2015 'mode' : '모드', // from v2.1 added 20.6.2015 'emptyFolder' : '빈 폴더입니다', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : '빈 폴더입니다\\A 드래드 앤 드롭으로 파일을 추가하세요', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : '빈 폴더입니다\\A 길게 눌러 파일을 추가하세요', // from v2.1.6 added 30.12.2015 'quality' : '품질', // from v2.1.6 added 5.1.2016 'autoSync' : '자동 동기', // from v2.1.6 added 10.1.2016 'moveUp' : '위로 이동', // from v2.1.6 added 18.1.2016 'getLink' : 'URL 링크 가져오기', // from v2.1.7 added 9.2.2016 'selectedItems' : '선택된 항목 ($1)', // from v2.1.7 added 2.19.2016 'folderId' : '폴더 ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : '오프라인 접근 허용', // from v2.1.10 added 3.25.2016 'reAuth' : '재인증하기', // from v2.1.10 added 3.25.2016 'nowLoading' : '로딩중...', // from v2.1.12 added 4.26.2016 'openMulti' : '여러 파일 열기', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '$1 파일을 열려고 합니다. 브라우저에서 열겠습니까?', // from v2.1.12 added 5.14.2016 'emptySearch' : '검색결과가 없습니다.', // from v2.1.12 added 5.16.2016 'editingFile' : '편집중인 파일입니다.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1개를 선택했습니다.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '클립보드에 $1개가 있습니다.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : '증분 검색은 현재 보기에서만 가능합니다.', // from v2.1.13 added 6.30.2016 'reinstate' : '복원', // from v2.1.15 added 3.8.2016 'complete' : '$1 완료', // from v2.1.15 added 21.8.2016 'contextmenu' : '컨텍스트 메뉴', // from v2.1.15 added 9.9.2016 'pageTurning' : '페이지 전환', // from v2.1.15 added 10.9.2016 'volumeRoots' : '볼륨 루트', // from v2.1.16 added 16.9.2016 'reset' : '초기화', // from v2.1.16 added 1.10.2016 'bgcolor' : '배경색', // from v2.1.16 added 1.10.2016 'colorPicker' : '색 선택기', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px 그리드', // from v2.1.16 added 4.10.2016 'enabled' : '활성', // from v2.1.16 added 4.10.2016 'disabled' : '비활성', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : '현재 보기에는 검색결과가 없습니다.\\A[Enter]를 눌러 검색 대상을 확장하세요.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : '현재 보기에는 첫 글자 검색 결과가 없습니다.', // from v2.1.23 added 24.3.2017 'textLabel' : '텍스트 라벨', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 분 남았습니다', // from v2.1.17 added 13.11.2016 'openAsEncoding' : '선택한 인코딩으로 다시 열기', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : '선택한 인코딩으로 저장하기', // from v2.1.19 added 2.12.2016 'selectFolder' : '폴더 선택', // from v2.1.20 added 13.12.2016 'firstLetterSearch': '첫 글자 검색', // from v2.1.23 added 24.3.2017 'presets' : '프리셋', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : '휴지통으로 옮기기엔 항목이 너무 많습니다.', // from v2.1.25 added 9.6.2017 'TextArea' : '글자영역', // from v2.1.25 added 14.6.2017 'folderToEmpty' : '"$1" 폴더를 비우세요.', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '"$1" 폴더에 아무것도 없습니다.', // from v2.1.25 added 22.6.2017 'preference' : '환경설정', // from v2.1.26 added 28.6.2017 'language' : '언어 설정', // from v2.1.26 added 28.6.2017 'clearBrowserData': '이 브라우저에 저장된 설정값 초기화하기', // from v2.1.26 added 28.6.2017 'toolbarPref' : '툴바 설정', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 글자 남았습니다.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 줄 남았습니다.', // from v2.1.52 added 16.1.2020 'sum' : '합계', // from v2.1.29 added 28.9.2017 'roughFileSize' : '대략적인 파일 크기', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : '마우스를 가져갈 때 대화창 요소에 초점 맞추기', // from v2.1.30 added 2.11.2017 'select' : '선택', // from v2.1.30 added 23.11.2017 'selectAction' : '파일 선택시 동작', // from v2.1.30 added 23.11.2017 'useStoredEditor' : '마지막 사용한 편집기로 열기', // from v2.1.30 added 23.11.2017 'selectinvert' : '선택 반전', // from v2.1.30 added 25.11.2017 'renameMultiple' : '선택한 $1을(를) $2와 같이 바꾸겠습니까?
    이 작업은 되돌릴 수 없습니다!', // from v2.1.31 added 4.12.2017 'batchRename' : '일괄 이름 바꾸기', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ 숫자', // from v2.1.31 added 8.12.2017 'asPrefix' : '접두사 추가', // from v2.1.31 added 8.12.2017 'asSuffix' : '접미사 추가', // from v2.1.31 added 8.12.2017 'changeExtention' : '확장자 변경', // from v2.1.31 added 8.12.2017 'columnPref' : '사이드바 설정 (리스트 보기)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : '모든 변경은 아카이브에 즉시 반영됩니다.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : '이 볼륨의 마운트를 해제할 때까지는 어떠한 변경사항도 반영되지 않습니다.', // from v2.1.33 added 2.3.2018 'unmountChildren' : '아래의 볼륨들도 이 볼륨과 함께 마운트가 해제됩니다. 계속하시겠습니까?', // from v2.1.33 added 5.3.2018 'selectionInfo' : '선택 정보', // from v2.1.33 added 7.3.2018 'hashChecker' : '파일 해쉬 알고리즘', // from v2.1.33 added 10.3.2018 'infoItems' : '정보 (선택 정보 패널)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': '나가기 위해서 한 번 더 누르세요.', // from v2.1.38 added 1.4.2018 'toolbar' : '툴바', // from v2.1.38 added 4.4.2018 'workspace' : '작업공간', // from v2.1.38 added 4.4.2018 'dialog' : '대화상자', // from v2.1.38 added 4.4.2018 'all' : '전체', // from v2.1.38 added 4.4.2018 'iconSize' : '아이콘 크기 (아이콘 보기)', // from v2.1.39 added 7.5.2018 'editorMaximized' : '최대화된 편집기 창을 엽니다', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : '현재 API를 통한 변환이 불가능하므로 웹 사이트에서 변환하시기 바랍니다.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : '변환 후 변환된 파일을 저장하기 위해서는 파일 URL이나 다운로드받은 파일을 업로드 해야 합니다.', //from v2.1.40 added 8.7.2018 'convertOn' : '$1 사이트에서 변환하시기 바랍니다.', // from v2.1.40 added 10.7.2018 'integrations' : '통합', // from v2.1.40 added 11.7.2018 'integrationWith' : 'elFinder에는 다음과 같은 외부 서비스가 통합되어 있습니다. 이용하기 전에 이용 약관, 개인정보 보호정책 등을 확인하시기 바랍니다.', // from v2.1.40 added 11.7.2018 'showHidden' : '숨겨진 파일 표시', // from v2.1.41 added 24.7.2018 'hideHidden' : '숨겨진 파일 숨기기', // from v2.1.41 added 24.7.2018 'toggleHidden' : '숨겨진 항목 표시/숨기기', // from v2.1.41 added 24.7.2018 'makefileTypes' : '"새 파일"에서 사용할 파일 형식', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : '텍스트 파일 유형', // from v2.1.41 added 7.8.2018 'add' : '추가', // from v2.1.41 added 7.8.2018 'theme' : '테마', // from v2.1.43 added 19.10.2018 'default' : '기본값', // from v2.1.43 added 19.10.2018 'description' : '설명', // from v2.1.43 added 19.10.2018 'website' : '웹사이트', // from v2.1.43 added 19.10.2018 'author' : '저자', // from v2.1.43 added 19.10.2018 'email' : '이메일', // from v2.1.43 added 19.10.2018 'license' : '라이선스', // from v2.1.43 added 19.10.2018 'exportToSave' : '이 파일은 저장될 수 없습니다. 편집한 내용을 유지하려면 PC로 내보내시기 바랍니다.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': '파일을 두 번 클릭하여 선택하세요.', // from v2.1.47 added 22.1.2019 'useFullscreen' : '전체 화면 모드 사용', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : '알 수 없음', 'kindRoot' : 'Root 볼륨', // from v2.1.16 added 16.10.2016 'kindFolder' : '폴더', 'kindSelects' : '선택', // from v2.1.29 added 29.8.2017 'kindAlias' : '별칭', 'kindAliasBroken' : '손상된 별칭', // applications 'kindApp' : '응용프로그램', 'kindPostscript' : 'Postscript 문서', 'kindMsOffice' : 'Microsoft Office 문서', 'kindMsWord' : 'Microsoft Word 문서', 'kindMsExcel' : 'Microsoft Excel 문서', 'kindMsPP' : 'Microsoft Powerpoint 프레젠테이션', 'kindOO' : 'Open Office 문서', 'kindAppFlash' : '플래쉬 파일', 'kindPDF' : 'PDF 문서', 'kindTorrent' : '비트토렌트 파일', 'kind7z' : '7z 압축파일', 'kindTAR' : 'TAR 압축파일', 'kindGZIP' : 'GZIP 압축파일', 'kindBZIP' : 'BZIP 압축파일', 'kindXZ' : 'XZ 압축파일', 'kindZIP' : 'ZIP 압축파일', 'kindRAR' : 'RAR 압축파일', 'kindJAR' : '자바 JAR 파일', 'kindTTF' : '트루 타입 글꼴', 'kindOTF' : '오픈 타입 글꼴', 'kindRPM' : 'RPM 패키지', // texts 'kindText' : '텍스트 문서', 'kindTextPlain' : '일반 텍스트', 'kindPHP' : 'PHP 소스', 'kindCSS' : 'CSS 문서', 'kindHTML' : 'HTML 문서', 'kindJS' : '자바스크립트 소스', 'kindRTF' : 'RTF 형식', 'kindC' : 'C 소스', 'kindCHeader' : 'C 헤더 소스', 'kindCPP' : 'C++ 소스', 'kindCPPHeader' : 'C++ 헤더 소스', 'kindShell' : '유닉스 쉘 스크립트', 'kindPython' : '파이썬 소스', 'kindJava' : '자바 소스', 'kindRuby' : '루비 소스', 'kindPerl' : '펄 스크립트', 'kindSQL' : 'SQL 소스', 'kindXML' : 'XML 문서', 'kindAWK' : 'AWK 소스', 'kindCSV' : 'CSV 파일', 'kindDOCBOOK' : '닥북 XML 문서', 'kindMarkdown' : '마크다운 문서', // added 20.7.2015 // images 'kindImage' : '이미지', 'kindBMP' : 'BMP 이미지', 'kindJPEG' : 'JPEG 이미지', 'kindGIF' : 'GIF 이미지', 'kindPNG' : 'PNG 이미지', 'kindTIFF' : 'TIFF 이미지', 'kindTGA' : 'TGA 이미지', 'kindPSD' : 'Adobe Photoshop 이미지', 'kindXBITMAP' : 'X 비트맵 이미지', 'kindPXM' : 'Pixelmator 이미지', // media 'kindAudio' : '오디오 미디어', 'kindAudioMPEG' : 'MPEG 오디오', 'kindAudioMPEG4' : 'MPEG-4 오디오', 'kindAudioMIDI' : 'MIDI 오디오', 'kindAudioOGG' : 'Ogg Vorbis 오디오', 'kindAudioWAV' : 'WAV 오디오', 'AudioPlaylist' : 'MP3 플레이 리스트', 'kindVideo' : '동영상 미디어', 'kindVideoDV' : 'DV 동영상', 'kindVideoMPEG' : 'MPEG 동영상', 'kindVideoMPEG4' : 'MPEG-4 동영상', 'kindVideoAVI' : 'AVI 동영상', 'kindVideoMOV' : '퀵 타임 동영상', 'kindVideoWM' : '윈도우 미디어 플레이어 동영상', 'kindVideoFlash' : '플래쉬 동영상', 'kindVideoMKV' : 'Matroska 동영상', 'kindVideoOGG' : 'Ogg 동영상' } }; })); application/library/js/i18n/elfinder.en.js000064400000077325146731177160014470 0ustar00/** * English translation * @author Troex Nevelin * @author Naoki Sawada * @version 2021-06-02 */ // elfinder.en.js is integrated into elfinder.(full|min).js by jake build if (typeof elFinder === 'function' && elFinder.prototype.i18) { elFinder.prototype.i18.en = { translator : 'Troex Nevelin <troex@fury.scancode.ru>, Naoki Sawada <hypweb+elfinder@gmail.com>', language : 'English', direction : 'ltr', dateFormat : 'M d, Y h:i A', // will show like: Aug 24, 2018 04:39 PM fancyDateFormat : '$1 h:i A', // will show like: Today 04:39 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 180824-163916 messages : { /********************************** errors **********************************/ 'error' : 'Error', 'errUnknown' : 'Unknown error.', 'errUnknownCmd' : 'Unknown command.', 'errJqui' : 'Invalid jQuery UI configuration. Selectable, draggable and droppable components must be included.', 'errNode' : 'elFinder requires DOM Element to be created.', 'errURL' : 'Invalid elFinder configuration! URL option is not set.', 'errAccess' : 'Access denied.', 'errConnect' : 'Unable to connect to backend.', 'errAbort' : 'Connection aborted.', 'errTimeout' : 'Connection timeout.', 'errNotFound' : 'Backend not found.', 'errResponse' : 'Invalid backend response.', 'errConf' : 'Invalid backend configuration.', 'errJSON' : 'PHP JSON module not installed.', 'errNoVolumes' : 'Readable volumes not available.', 'errCmdParams' : 'Invalid parameters for command "$1".', 'errDataNotJSON' : 'Data is not JSON.', 'errDataEmpty' : 'Data is empty.', 'errCmdReq' : 'Backend request requires command name.', 'errOpen' : 'Unable to open "$1".', 'errNotFolder' : 'Object is not a folder.', 'errNotFile' : 'Object is not a file.', 'errRead' : 'Unable to read "$1".', 'errWrite' : 'Unable to write into "$1".', 'errPerm' : 'Permission denied.', 'errLocked' : '"$1" is locked and can not be renamed, moved or removed.', 'errExists' : 'Item named "$1" already exists.', 'errInvName' : 'Invalid file name.', 'errInvDirname' : 'Invalid folder name.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Folder not found.', 'errFileNotFound' : 'File not found.', 'errTrgFolderNotFound' : 'Target folder "$1" not found.', 'errPopup' : 'Browser prevented opening popup window. To open file enable it in browser options.', 'errMkdir' : 'Unable to create folder "$1".', 'errMkfile' : 'Unable to create file "$1".', 'errRename' : 'Unable to rename "$1".', 'errCopyFrom' : 'Copying files from volume "$1" not allowed.', 'errCopyTo' : 'Copying files to volume "$1" not allowed.', 'errMkOutLink' : 'Unable to create a link to outside the volume root.', // from v2.1 added 03.10.2015 'errUpload' : 'Upload error.', // old name - errUploadCommon 'errUploadFile' : 'Unable to upload "$1".', // old name - errUpload 'errUploadNoFiles' : 'No files found for upload.', 'errUploadTotalSize' : 'Data exceeds the maximum allowed size.', // old name - errMaxSize 'errUploadFileSize' : 'File exceeds maximum allowed size.', // old name - errFileMaxSize 'errUploadMime' : 'File type not allowed.', 'errUploadTransfer' : '"$1" transfer error.', 'errUploadTemp' : 'Unable to make temporary file for upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', // new 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Unable to save "$1".', 'errCopy' : 'Unable to copy "$1".', 'errMove' : 'Unable to move "$1".', 'errCopyInItself' : 'Unable to copy "$1" into itself.', 'errRm' : 'Unable to remove "$1".', 'errTrash' : 'Unable into trash.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Unable to extract files from "$1".', 'errArchive' : 'Unable to create archive.', 'errArcType' : 'Unsupported archive type.', 'errNoArchive' : 'File is not archive or has unsupported archive type.', 'errCmdNoSupport' : 'Backend does not support this command.', 'errReplByChild' : 'The folder "$1" can\'t be replaced by an item it contains.', 'errArcSymlinks' : 'For security reason denied to unpack archives contains symlinks or files with not allowed names.', // edited 24.06.2012 'errArcMaxSize' : 'Archive files exceeds maximum allowed size.', 'errResize' : 'Unable to resize "$1".', 'errResizeDegree' : 'Invalid rotate degree.', // added 7.3.2013 'errResizeRotate' : 'Unable to rotate image.', // added 7.3.2013 'errResizeSize' : 'Invalid image size.', // added 7.3.2013 'errResizeNoChange' : 'Image size not changed.', // added 7.3.2013 'errUsupportType' : 'Unsupported file type.', 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', // added 9.11.2011 'errNetMount' : 'Unable to mount "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Unsupported protocol.', // added 17.04.2012 'errNetMountFailed' : 'Mount failed.', // added 17.04.2012 'errNetMountHostReq' : 'Host required.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', 'errNetUnMount' : 'Unable to unmount.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Not convertible to UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Try the modern browser, If you\'d like to upload the folder.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Timed out while searching "$1". Search result is partial.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-authorization is required.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Max number of selectable items is $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Unable to restore from the trash. Can\'t identify the restore destination.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor not found to this file type.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Error occurred on the server side.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Unable to empty folder "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'There are $1 more errors.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'You can create up to $1 folders at one time.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Create archive', 'cmdback' : 'Back', 'cmdcopy' : 'Copy', 'cmdcut' : 'Cut', 'cmddownload' : 'Download', 'cmdduplicate' : 'Duplicate', 'cmdedit' : 'Edit file', 'cmdextract' : 'Extract files from archive', 'cmdforward' : 'Forward', 'cmdgetfile' : 'Select files', 'cmdhelp' : 'About this software', 'cmdhome' : 'Root', 'cmdinfo' : 'Get info', 'cmdmkdir' : 'New folder', 'cmdmkdirin' : 'Into New Folder', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'New file', 'cmdopen' : 'Open', 'cmdpaste' : 'Paste', 'cmdquicklook' : 'Preview', 'cmdreload' : 'Reload', 'cmdrename' : 'Rename', 'cmdrm' : 'Delete', 'cmdtrash' : 'Into trash', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restore', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Find files', 'cmdup' : 'Go to parent folder', 'cmdupload' : 'Upload files', 'cmdview' : 'View', 'cmdresize' : 'Resize & Rotate', 'cmdsort' : 'Sort', 'cmdnetmount' : 'Mount network volume', // added 18.04.2012 'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'To Places', // added 28.12.2014 'cmdchmod' : 'Change mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Open a folder', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Reset column width', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Full Screen', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Move', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Empty the folder', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Undo', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Redo', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Select all', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Select none', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invert selection', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Open in new window', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Hide (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Close', 'btnSave' : 'Save', 'btnRm' : 'Remove', 'btnApply' : 'Apply', 'btnCancel' : 'Cancel', 'btnNo' : 'No', 'btnYes' : 'Yes', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Goto $1 & approve', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Convert', // from v2.1 added 08.04.2014 'btnCwd' : 'Here', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'All', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015 'btnFileName':'Filename', // from v2.1 added 22.5.2015 'btnSaveClose': 'Save & Close', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Rename', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Rename(All)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Prev ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Next ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Save As', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Open folder', 'ntffile' : 'Open file', 'ntfreload' : 'Reload folder content', 'ntfmkdir' : 'Creating folder', 'ntfmkfile' : 'Creating files', 'ntfrm' : 'Delete items', 'ntfcopy' : 'Copy items', 'ntfmove' : 'Move items', 'ntfprepare' : 'Checking existing items', 'ntfrename' : 'Rename files', 'ntfupload' : 'Uploading files', 'ntfdownload' : 'Downloading files', 'ntfsave' : 'Save files', 'ntfarchive' : 'Creating archive', 'ntfextract' : 'Extracting files from archive', 'ntfsearch' : 'Searching files', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Doing something', 'ntfloadimg' : 'Loading image', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013 'ntfreaddir' : 'Reading folder infomation', // from v2.1 added 01.07.2013 'ntfurl' : 'Getting URL of link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changing file mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verifying upload file name', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creating a file for download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Getting path infomation', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processing the uploaded file', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Doing throw in the trash', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Doing restore from the trash', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Checking destination folder', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Undoing previous operation', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Redoing previous undone', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Checking contents', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Trash', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'unknown', 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'May', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', 'Sun' : 'Sun', 'Mon' : 'Mon', 'Tue' : 'Tue', 'Wed' : 'Wed', 'Thu' : 'Thu', 'Fri' : 'Fri', 'Sat' : 'Sat', /******************************** sort variants ********************************/ 'sortname' : 'by name', 'sortkind' : 'by kind', 'sortsize' : 'by size', 'sortdate' : 'by date', 'sortFoldersFirst' : 'Folders first', 'sortperm' : 'by permission', // from v2.1.13 added 13.06.2016 'sortmode' : 'by mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'by owner', // from v2.1.13 added 13.06.2016 'sortgroup' : 'by group', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Also Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'NewFolder', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmation required', 'confirmRm' : 'Are you sure you want to permanently remove items?
    This cannot be undone!', 'confirmRepl' : 'Replace old file with new one? (If it contains folders, it will be merged. To backup and replace, select Backup.)', 'confirmRest' : 'Replace existing item with the item in trash?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Not in UTF-8
    Convert to UTF-8?
    Contents become UTF-8 by saving after conversion.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.
    Please select character encoding of this file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'It has been modified.
    Losing work if you do not save changes.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Are you sure you want to move items to trash bin?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Are you sure you want to move items to "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Apply to all', 'name' : 'Name', 'size' : 'Size', 'perms' : 'Permissions', 'modify' : 'Modified', 'kind' : 'Kind', 'read' : 'read', 'write' : 'write', 'noaccess' : 'no access', 'and' : 'and', 'unknown' : 'unknown', 'selectall' : 'Select all items', 'selectfiles' : 'Select item(s)', 'selectffile' : 'Select first item', 'selectlfile' : 'Select last item', 'viewlist' : 'List view', 'viewicons' : 'Icons view', 'viewSmall' : 'Small icons', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medium icons', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Large icons', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra large icons', // from v2.1.39 added 22.5.2018 'places' : 'Places', 'calc' : 'Calculate', 'path' : 'Path', 'aliasfor' : 'Alias for', 'locked' : 'Locked', 'dim' : 'Dimensions', 'files' : 'Files', 'folders' : 'Folders', 'items' : 'Items', 'yes' : 'yes', 'no' : 'no', 'link' : 'Link', 'searcresult' : 'Search results', 'selected' : 'selected items', 'about' : 'About', 'shortcuts' : 'Shortcuts', 'help' : 'Help', 'webfm' : 'Web file manager', 'ver' : 'Version', 'protocolver' : 'protocol version', 'homepage' : 'Project home', 'docs' : 'Documentation', 'github' : 'Fork us on GitHub', 'twitter' : 'Follow us on Twitter', 'facebook' : 'Join us on Facebook', 'team' : 'Team', 'chiefdev' : 'chief developer', 'developer' : 'developer', 'contributor' : 'contributor', 'maintainer' : 'maintainer', 'translator' : 'translator', 'icons' : 'Icons', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'Shortcuts disabled', 'dropFiles' : 'Drop files here', 'or' : 'or', 'selectForUpload' : 'Select files', 'moveFiles' : 'Move items', 'copyFiles' : 'Copy items', 'restoreFiles' : 'Restore items', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Remove from places', 'aspectRatio' : 'Aspect ratio', 'scale' : 'Scale', 'width' : 'Width', 'height' : 'Height', 'resize' : 'Resize', 'crop' : 'Crop', 'rotate' : 'Rotate', 'rotate-cw' : 'Rotate 90 degrees CW', 'rotate-ccw' : 'Rotate 90 degrees CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'User', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 'confirmUnmount' : 'Are you sure to unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drop or Paste files from browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drop files, Paste URLs or images(clipboard) here', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Search by input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Owner', // from v2.1 added 20.6.2015 'group' : 'Group', // from v2.1 added 20.6.2015 'other' : 'Other', // from v2.1 added 20.6.2015 'execute' : 'Execute', // from v2.1 added 20.6.2015 'perm' : 'Permission', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Folder is empty', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Folder is empty\\A Drop to add items', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Folder is empty\\A Long tap to add items', // from v2.1.6 added 30.12.2015 'quality' : 'Quality', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Move up', // from v2.1.6 added 18.1.2016 'getLink' : 'Get URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Selected items ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Folder ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Allow offline access', // from v2.1.10 added 3.25.2016 'reAuth' : 'To re-authenticate', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Now loading...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Open multiple files', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'You are trying to open the $1 files. Are you sure you want to open in browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Search results is empty in search target.', // from v2.1.12 added 5.16.2016 'editingFile' : 'It is editing a file.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'You have selected $1 items.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'You have $1 items in the clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Incremental search is only from the current view.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reinstate', // from v2.1.15 added 3.8.2016 'complete' : '$1 complete', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Page turning', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'Reset', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Background color', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Color picker', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Enabled', // from v2.1.16 added 4.10.2016 'disabled' : 'Disabled', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Search results is empty in current view.\\A Press [Enter] to expand search target.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'First letter search results is empty in current view.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Text label', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins left', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Select folder', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'First letter search', // from v2.1.23 added 24.3.2017 'presets' : 'Presets', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'It\'s too many items so it can\'t into trash.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Empty the folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'There are no items in a folder "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preference', // from v2.1.26 added 28.6.2017 'language' : 'Language', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialize the settings saved in this browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbar settings', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 chars left.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 lines left.', // from v2.1.52 added 16.1.2020 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Rough file size', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Select', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action when select file', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open with the editor used last time', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invert selection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Are you sure you want to rename $1 selected items like $2?
    This cannot be undone!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch rename', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Number', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Add prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Add suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Change extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Columns settings (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'All changes will reflect immediately to the archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Any changes will not reflect until un-mount this volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Selection Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithms to show the file hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Press again to exit.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Toolbar', // from v2.1.38 added 4.4.2018 'workspace' : 'Work Space', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'All', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icon Size (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open the maximized editor window', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Because conversion by API is not currently available, please convert on the website.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convert on the site of $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Show hidden items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Hide hidden items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Show/Hide hidden items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type of the Text file', // from v2.1.41 added 7.8.2018 'add' : 'Add', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Description', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Author', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'License', // from v2.1.43 added 19.10.2018 'exportToSave' : 'This item can\'t be saved. To avoid losing the edits you need to export to your PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double click on the file to select it.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Use fullscreen mode', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Unknown', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Folder', 'kindSelects' : 'Selections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Broken alias', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Postscript document', 'kindMsOffice' : 'Microsoft Office document', 'kindMsWord' : 'Microsoft Word document', 'kindMsExcel' : 'Microsoft Excel document', 'kindMsPP' : 'Microsoft Powerpoint presentation', 'kindOO' : 'Open Office document', 'kindAppFlash' : 'Flash application', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent file', 'kind7z' : '7z archive', 'kindTAR' : 'TAR archive', 'kindGZIP' : 'GZIP archive', 'kindBZIP' : 'BZIP archive', 'kindXZ' : 'XZ archive', 'kindZIP' : 'ZIP archive', 'kindRAR' : 'RAR archive', 'kindJAR' : 'Java JAR file', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM package', // texts 'kindText' : 'Text document', 'kindTextPlain' : 'Plain text', 'kindPHP' : 'PHP source', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML document', 'kindJS' : 'Javascript source', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C source', 'kindCHeader' : 'C header source', 'kindCPP' : 'C++ source', 'kindCPPHeader' : 'C++ header source', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python source', 'kindJava' : 'Java source', 'kindRuby' : 'Ruby source', 'kindPerl' : 'Perl script', 'kindSQL' : 'SQL source', 'kindXML' : 'XML document', 'kindAWK' : 'AWK source', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML document', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Image', 'kindBMP' : 'BMP image', 'kindJPEG' : 'JPEG image', 'kindGIF' : 'GIF Image', 'kindPNG' : 'PNG Image', 'kindTIFF' : 'TIFF image', 'kindTGA' : 'TGA image', 'kindPSD' : 'Adobe Photoshop image', 'kindXBITMAP' : 'X bitmap image', 'kindPXM' : 'Pixelmator image', // media 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV movie', 'kindVideoMPEG' : 'MPEG movie', 'kindVideoMPEG4' : 'MPEG-4 movie', 'kindVideoAVI' : 'AVI movie', 'kindVideoMOV' : 'Quick Time movie', 'kindVideoWM' : 'Windows Media movie', 'kindVideoFlash' : 'Flash movie', 'kindVideoMKV' : 'Matroska movie', 'kindVideoOGG' : 'Ogg movie' } }; } application/library/js/i18n/elfinder.de.js000064400000103274146731177160014447 0ustar00/** * German Translation / Deutsche Übersetzung * @author JPG & Mace * @author tora60 from pragmaMx.org * @author Timo-Linde * @author OSWorX * @author Maximilian Schwarz * @author SF Webdesign * @version 2019-12-13 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.de = { translator : 'JPG & Mace <dev@flying-datacenter.de>, tora60 from pragmaMx.org, Timo-Linde <info@timo-linde.de>, OSWorX <info@osworx.net>, Maximilian Schwarz <info@deefuse.de>, SF Webdesign <webdesign@stephan-frank.de>', language : 'Deutsch', direction : 'ltr', dateFormat : 'j. F Y H:i', // 3. März 2020 14:58 fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM nonameDateFormat : 'ymd-His', // to apply if upload file is noname: 120513172700 messages : { /********************************** errors **********************************/ 'error' : 'Fehler', 'errUnknown' : 'Unbekannter Fehler.', 'errUnknownCmd' : 'Unbekannter Befehl.', 'errJqui' : 'Ungültige jQuery UI-Konfiguration. Die Komponenten Selectable, Draggable und Droppable müssen inkludiert sein.', 'errNode' : 'Für elFinder muss das DOM-Element erstellt werden.', 'errURL' : 'Ungültige elFinder-Konfiguration! Die URL-Option ist nicht gesetzt.', 'errAccess' : 'Zugriff verweigert.', 'errConnect' : 'Verbindung zum Backend fehlgeschlagen.', 'errAbort' : 'Verbindung abgebrochen.', 'errTimeout' : 'Zeitüberschreitung der Verbindung.', 'errNotFound' : 'Backend nicht gefunden.', 'errResponse' : 'Ungültige Backend-Antwort.', 'errConf' : 'Ungültige Backend-Konfiguration.', 'errJSON' : 'PHP JSON-Modul nicht vorhanden.', 'errNoVolumes' : 'Keine lesbaren Laufwerke vorhanden.', 'errCmdParams' : 'Ungültige Parameter für Befehl: "$1".', 'errDataNotJSON' : 'Daten nicht im JSON-Format.', 'errDataEmpty' : 'Daten sind leer.', 'errCmdReq' : 'Backend-Anfrage benötigt Befehl.', 'errOpen' : 'Kann "$1" nicht öffnen.', 'errNotFolder' : 'Objekt ist kein Ordner.', 'errNotFile' : 'Objekt ist keine Datei.', 'errRead' : 'Kann "$1" nicht öffnen.', 'errWrite' : 'Kann nicht in "$1" schreiben.', 'errPerm' : 'Zugriff verweigert.', 'errLocked' : '"$1" ist gesperrt und kann nicht umbenannt, verschoben oder gelöscht werden.', 'errExists' : 'Die Datei "$1" existiert bereits.', 'errInvName' : 'Ungültiger Dateiname.', 'errInvDirname' : 'Ungültiger Ordnername.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Ordner nicht gefunden.', 'errFileNotFound' : 'Datei nicht gefunden.', 'errTrgFolderNotFound' : 'Zielordner "$1" nicht gefunden.', 'errPopup' : 'Der Browser hat das Pop-Up-Fenster unterbunden. Um die Datei zu öffnen, Pop-Ups in den Browsereinstellungen aktivieren.', 'errMkdir' : 'Kann Ordner "$1" nicht erstellen.', 'errMkfile' : 'Kann Datei "$1" nicht erstellen.', 'errRename' : 'Kann "$1" nicht umbenennen.', 'errCopyFrom' : 'Kopieren von Dateien von "$1" nicht erlaubt.', 'errCopyTo' : 'Kopieren von Dateien nach "$1" nicht erlaubt.', 'errMkOutLink' : 'Der Link kann nicht außerhalb der Partition führen.', // from v2.1 added 03.10.2015 'errUpload' : 'Upload-Fehler.', // old name - errUploadCommon 'errUploadFile' : 'Kann "$1" nicht hochladen.', // old name - errUpload 'errUploadNoFiles' : 'Keine Dateien zum Hochladen gefunden.', 'errUploadTotalSize' : 'Gesamtgröße überschreitet die Maximalgröße.', // old name - errMaxSize 'errUploadFileSize' : 'Die Datei überschreitet die Maximalgröße.', // old name - errFileMaxSize 'errUploadMime' : 'Dateiart (mime) nicht zulässig.', 'errUploadTransfer' : '"$1" Übertragungsfehler.', 'errUploadTemp' : 'Kann temporäre Datei nicht erstellen.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Das Objekt "$1" existiert bereits an dieser Stelle und kann nicht durch ein Objekt eines anderen Typs ersetzt werden.', // new 'errReplace' : 'Kann "$1" nicht ersetzen.', 'errSave' : 'Kann "$1" nicht speichern.', 'errCopy' : 'Kann "$1" nicht kopieren.', 'errMove' : 'Kann "$1" nicht verschieben.', 'errCopyInItself' : '"$1" kann sich nicht in sich selbst kopieren.', 'errRm' : 'Kann "$1" nicht entfernen.', 'errTrash' : 'Kann Objekt nicht in Mülleimer legen.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Kann Quelldatei(en) nicht entfernen.', 'errExtract' : 'Kann "$1" nicht entpacken.', 'errArchive' : 'Archiv konnte nicht erstellt werden.', 'errArcType' : 'Archivtyp nicht untersützt.', 'errNoArchive' : 'Bei der Datei handelt es sich nicht um ein Archiv, oder die Archivart wird nicht unterstützt.', 'errCmdNoSupport' : 'Das Backend unterstützt diesen Befehl nicht.', 'errReplByChild' : 'Der Ordner "$1" kann nicht durch etwas ersetzt werden, das ihn selbst enthält.', 'errArcSymlinks' : 'Aus Sicherheitsgründen ist es verboten, ein Archiv mit symbolischen Links zu extrahieren.', // edited 24.06.2012 'errArcMaxSize' : 'Die Archivdateien übersteigen die maximal erlaubte Größe.', 'errResize' : 'Größe von "$1" kann nicht geändert werden.', 'errResizeDegree' : 'Ungültiger Rotationswert.', // added 7.3.2013 'errResizeRotate' : 'Bild konnte nicht gedreht werden.', // added 7.3.2013 'errResizeSize' : 'Ungültige Bildgröße.', // added 7.3.2013 'errResizeNoChange' : 'Bildmaße nicht geändert.', // added 7.3.2013 'errUsupportType' : 'Nicht unterstützte Dateiart.', 'errNotUTF8Content' : 'Die Datei "$1" ist nicht im UTF-8-Format und kann nicht bearbeitet werden.', // added 9.11.2011 'errNetMount' : 'Verbindung mit "$1" nicht möglich.', // added 17.04.2012 'errNetMountNoDriver' : 'Nicht unterstütztes Protokoll.', // added 17.04.2012 'errNetMountFailed' : 'Verbindung fehlgeschlagen.', // added 17.04.2012 'errNetMountHostReq' : 'Host benötigt.', // added 18.04.2012 'errSessionExpires' : 'Diese Sitzung ist aufgrund von Inaktivität abgelaufen.', 'errCreatingTempDir' : 'Erstellung des temporären Ordners nicht möglich: "$1"', 'errFtpDownloadFile' : 'Download der Datei über FTP nicht möglich: "$1"', 'errFtpUploadFile' : 'Upload der Datei zu FTP nicht möglich: "$1"', 'errFtpMkdir' : 'Erstellung des Remote-Ordners mit FTP nicht möglich: "$1"', 'errArchiveExec' : 'Fehler beim Archivieren der Dateien: "$1"', 'errExtractExec' : 'Fehler beim Extrahieren der Dateien: "$1"', 'errNetUnMount' : 'Kann nicht ausgehängt werden.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Kann nicht zu UTF-8 konvertiert werden.', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Ordner kann nich hochladen werden, eventuell mit Google Chrome versuchen.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Zeitüberschreitung während der Suche nach "$1". Suchergebnis ist unvollständig.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Erneutes Anmelden ist erforderlich.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Die maximale Anzahl auswählbarer Elemente ist $1', // from v2.1.17 added 17.10.2016 'errRestore' : 'Datei konnte nicht aus Mülleimer wieder hergestellt werden bzw. Ziel für Wiederherstellung nicht gefunden.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Kein Editor für diesen Dateityp gefunden.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Ein serverseitiger Fehler trat auf.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Konnte Ordner "$1" nicht Leeren.', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Es sind noch $1 weitere Fehler.', // from v2.1.44 added 13.12.2019 /******************************* commands names ********************************/ 'cmdarchive' : 'Archiv erstellen', 'cmdback' : 'Zurück', 'cmdcopy' : 'Kopieren', 'cmdcut' : 'Ausschneiden', 'cmddownload' : 'Herunterladen', 'cmdduplicate' : 'Duplizieren', 'cmdedit' : 'Datei bearbeiten', 'cmdextract' : 'Archiv entpacken', 'cmdforward' : 'Vorwärts', 'cmdgetfile' : 'Datei auswählen', 'cmdhelp' : 'Über diese Software', 'cmdhome' : 'Startordner', 'cmdinfo' : 'Informationen', 'cmdmkdir' : 'Neuer Ordner', 'cmdmkdirin' : 'In neuen Ordner', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Neuer Datei', 'cmdopen' : 'Öffnen', 'cmdpaste' : 'Einfügen', 'cmdquicklook' : 'Vorschau', 'cmdreload' : 'Aktualisieren', 'cmdrename' : 'Umbenennen', 'cmdrm' : 'Löschen', 'cmdtrash' : 'In den Mülleimer legen', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Wiederherstellen', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Suchen', 'cmdup' : 'In übergeordneten Ordner wechseln', 'cmdupload' : 'Datei hochladen', 'cmdview' : 'Ansehen', 'cmdresize' : 'Größe ändern & drehen', 'cmdsort' : 'Sortieren', 'cmdnetmount' : 'Verbinde mit Netzwerkspeicher', // added 18.04.2012 'cmdnetunmount': 'Abhängen', // from v2.1 added 30.04.2012 'cmdplaces' : 'Favoriten', // added 28.12.2014 'cmdchmod' : 'Berechtigung ändern', // from v2.1 added 20.6.2015 'cmdopendir' : 'Einen Ordner öffnen', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Spaltenbreite zurücksetzen', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Vollbild', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Verschieben', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Ordner Leeren', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Rückgängig', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Wiederholen', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Einstellungen', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Alle auswählen', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Keine auswählen', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Auswahl rückgängig machen', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'In neuem Fenster öffnen', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Verstecken', // from v2.1.41 added 13.12.2019 /*********************************** buttons ***********************************/ 'btnClose' : 'Schließen', 'btnSave' : 'Speichern', 'btnRm' : 'Entfernen', 'btnApply' : 'Anwenden', 'btnCancel' : 'Abbrechen', 'btnNo' : 'Nein', 'btnYes' : 'Ja', 'btnMount' : 'Verbinden', // added 18.04.2012 'btnApprove': 'Gehe zu $1 und genehmige', // from v2.1 added 26.04.2012 'btnUnmount': 'Auswerfen', // from v2.1 added 30.04.2012 'btnConv' : 'Konvertieren', // from v2.1 added 08.04.2014 'btnCwd' : 'Arbeitspfad', // from v2.1 added 22.5.2015 'btnVolume' : 'Partition', // from v2.1 added 22.5.2015 'btnAll' : 'Alle', // from v2.1 added 22.5.2015 'btnMime' : 'MIME-Typ', // from v2.1 added 22.5.2015 'btnFileName':'Dateiname', // from v2.1 added 22.5.2015 'btnSaveClose': 'Speichern & Schließen', // from v2.1 added 12.6.2015 'btnBackup' : 'Sicherung', // fromv2.1 added 28.11.2015 'btnRename' : 'Umbenennen', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Alle Umbenennen', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Zurück ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Weiter ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Speichern als', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Öffne Ordner', 'ntffile' : 'Öffne Datei', 'ntfreload' : 'Ordnerinhalt neu', 'ntfmkdir' : 'Erstelle Ordner', 'ntfmkfile' : 'Erstelle Dateien', 'ntfrm' : 'Lösche Dateien', 'ntfcopy' : 'Kopiere Dateien', 'ntfmove' : 'Verschiebe Dateien', 'ntfprepare' : 'Kopiervorgang initialisieren', 'ntfrename' : 'Benenne Dateien um', 'ntfupload' : 'Dateien hochladen', 'ntfdownload' : 'Dateien herunterladen', 'ntfsave' : 'Speichere Datei', 'ntfarchive' : 'Erstelle Archiv', 'ntfextract' : 'Entpacke Dateien', 'ntfsearch' : 'Suche', 'ntfresize' : 'Bildgrößen ändern', 'ntfsmth' : 'Bin beschäftigt ..', 'ntfloadimg' : 'Lade Bild ..', 'ntfnetmount' : 'Mit Netzwerkspeicher verbinden', // added 18.04.2012 'ntfnetunmount': 'Netzwerkspeicher auswerfen', // from v2.1 added 30.04.2012 'ntfdim' : 'Bildgröße erfassen', // added 20.05.2013 'ntfreaddir' : 'Lese Ordnerinformationen', // from v2.1 added 01.07.2013 'ntfurl' : 'Hole URL von Link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Ändere Dateiberechtigungen', // from v2.1 added 20.6.2015 'ntfpreupload': 'Upload-Dateinamen überprüfen', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Erstelle Datei zum Download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Beziehe Pfad Informationen', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Upload läuft', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Bewege in den Mülleimer', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Wiederherstellung aus Mülleimer', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Prüfe Zielordner', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Vorherige Operation rückgängig machen', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Wiederherstellen', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Überprüfe Inhalte', // from v2.1.41 added 13.12.2019 /*********************************** volumes *********************************/ 'volume_Trash' : 'Mülleimer', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'unbekannt', 'Today' : 'Heute', 'Yesterday' : 'Gestern', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mär', 'msApr' : 'Apr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dez', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'März', 'April' : 'April', 'May' : 'Mai', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'August', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'Dezember', 'Sunday' : 'Sonntag', 'Monday' : 'Montag', 'Tuesday' : 'Dienstag', 'Wednesday' : 'Mittwoch', 'Thursday' : 'Donnerstag', 'Friday' : 'Freitag', 'Saturday' : 'Samstag', 'Sun' : 'So', 'Mon' : 'Mo', 'Tue' : 'Di', 'Wed' : 'Mi', 'Thu' : 'Do', 'Fri' : 'Fr', 'Sat' : 'Sa', /******************************** sort variants ********************************/ 'sortname' : 'nach Name', 'sortkind' : 'nach Art', 'sortsize' : 'nach Größe', 'sortdate' : 'nach Datum', 'sortFoldersFirst' : 'Ordner zuerst', 'sortperm' : 'nach Berechtigung', // from v2.1.13 added 13.06.2016 'sortmode' : 'nach Modus', // from v2.1.13 added 13.06.2016 'sortowner' : 'nach Besitzer', // from v2.1.13 added 13.06.2016 'sortgroup' : 'nach Gruppe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'auch Baumansicht', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Neues Textdokument (.txt)', // added 10.11.2015 'untitled folder' : 'Neuer Ordner', // added 10.11.2015 'Archive' : 'Neues Archiv', // from v2.1 added 10.11.2015 'untitled file' : 'Neue Datei $1', // from v2.1.41 added 13.12.2019 'extentionfile' : '$1: Datei', // from v2.1.41 added 13.12.2019 'extentiontype' : '$1: $2', // from v2.1.43 added 13.12.2018 /********************************** messages **********************************/ 'confirmReq' : 'Bestätigung benötigt', 'confirmRm' : 'Sollen die Dateien gelöscht werden?
    Vorgang ist endgültig!', 'confirmRepl' : 'Datei ersetzen?', 'confirmRest' : 'Vorhandenes Element durch das Element aus Mülleimer ersetzen?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nicht UTF-8 kodiert
    Zu UTF-8 konvertieren?
    Inhalte werden zu UTF-8 konvertiert bei Speicherung.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Die Zeichencodierung dieser Datei konnte nicht erkannt werden. Es muss vorübergehend in UTF-8 zur Bearbeitung konvertiert werden.
    Bitte eine Zeichenkodierung dieser Datei auswählen.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Die Datei wurde geändert.
    Änderungen gehen verloren wenn nicht gespeichert wird.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Sicher diese Elemente in den Mülleimer verschieben?', // from v2.1.24 added 29.4.2017 'confirmMove' : 'Sicher alle Elemente nach "$1" verschieben?', // from v2.1.50 added 13.12.2019 'apllyAll' : 'Alles bestätigen', 'name' : 'Name', 'size' : 'Größe', 'perms' : 'Berechtigungen', 'modify' : 'Geändert', 'kind' : 'Typ', 'read' : 'Lesen', 'write' : 'Schreiben', 'noaccess' : 'Kein Zugriff', 'and' : 'und', 'unknown' : 'unbekannt', 'selectall' : 'Alle Dateien auswählen', 'selectfiles' : 'Dateien auswählen', 'selectffile' : 'Erste Datei auswählen', 'selectlfile' : 'Letzte Datei auswählen', 'viewlist' : 'Spaltenansicht', 'viewicons' : 'Symbolansicht', 'viewSmall' : 'Kleine Icons', // from v2.1.39 added 13.12.2019 'viewMedium' : 'Medium Icons', // from v2.1.39 added 13.12.2019 'viewLarge' : 'Große Icons', // from v2.1.39 added 13.12.2019 'viewExtraLarge' : 'Extragroße Icons', // from v2.1.39 added 13.12.2019 'places' : 'Favoriten', 'calc' : 'Berechne', 'path' : 'Pfad', 'aliasfor' : 'Verknüpfung zu', 'locked' : 'Gesperrt', 'dim' : 'Bildgröße', 'files' : 'Dateien', 'folders' : 'Ordner', 'items' : 'Objekte', 'yes' : 'ja', 'no' : 'nein', 'link' : 'Link', 'searcresult' : 'Suchergebnisse', 'selected' : 'Objekte ausgewählt', 'about' : 'Über', 'shortcuts' : 'Tastenkombinationen', 'help' : 'Hilfe', 'webfm' : 'Web-Dateiverwaltung', 'ver' : 'Version', 'protocolver' : 'Protokoll-Version', 'homepage' : 'Projekt-Webseite', 'docs' : 'Dokumentation', 'github' : 'Forke uns auf Github', 'twitter' : 'Folge uns auf twitter', 'facebook' : 'Begleite uns auf facebook', 'team' : 'Team', 'chiefdev' : 'Chefentwickler', 'developer' : 'Entwickler', 'contributor' : 'Unterstützer', 'maintainer' : 'Maintainer', 'translator' : 'Übersetzer', 'icons' : 'Icons', 'dontforget' : 'und vergiss nicht .. morgen ist auch noch ein Tag ..', 'shortcutsof' : 'Tastenkombinationen deaktiviert', 'dropFiles' : 'Dateien hier ablegen', 'or' : 'oder', 'selectForUpload' : 'Dateien zum Upload auswählen', 'moveFiles' : 'Dateien verschieben', 'copyFiles' : 'Dateien kopieren', 'restoreFiles' : 'Elemente wiederherstellen', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Lösche von Favoriten', 'aspectRatio' : 'Seitenverhältnis', 'scale' : 'Maßstab', 'width' : 'Breite', 'height' : 'Höhe', 'resize' : 'Größe ändern', 'crop' : 'Zuschneiden', 'rotate' : 'Drehen', 'rotate-cw' : 'Drehe 90° im Uhrzeigersinn', 'rotate-ccw' : 'Drehe 90° gegen Uhrzeigersinn', 'degree' : '°', 'netMountDialogTitle' : 'verbinde Netzwerkspeicher', // added 18.04.2012 'protocol' : 'Protokoll', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Benutzer', // added 18.04.2012 'pass' : 'Passwort', // added 18.04.2012 'confirmUnmount' : 'Soll "$1" ausgehängt werden', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Dateien in den Browser ziehen', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Dateien hier loslassen', // from v2.1 added 07.04.2014 'encoding' : 'Kodierung', // from v2.1 added 19.12.2014 'locale' : 'Lokal', // from v2.1 added 19.12.2014 'searchTarget' : 'Ziel: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Suche nach MIME-Typ', // from v2.1 added 22.5.2015 'owner' : 'Besitzer', // from v2.1 added 20.6.2015 'group' : 'Gruppe', // from v2.1 added 20.6.2015 'other' : 'Andere', // from v2.1 added 20.6.2015 'execute' : 'Ausführen', // from v2.1 added 20.6.2015 'perm' : 'Berechtigung', // from v2.1 added 20.6.2015 'mode' : 'Modus', // from v2.1 added 20.6.2015 'emptyFolder' : 'Der Ordner ist leer', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Der Ordner ist leer\\A Elemente durch Ziehen hinzufügen', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Der Ordner ist leer\\A Elemente durch langes Tippen hinzufügen', // from v2.1.6 added 30.12.2015 'quality' : 'Qualität', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatische Synchronisation', // from v2.1.6 added 10.1.2016 'moveUp' : 'Nach oben bewegen', // from v2.1.6 added 18.1.2016 'getLink' : 'URL-Link holen', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Ausgewählte Objekte ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Ordner-ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Offline-Zugriff erlauben', // from v2.1.10 added 3.25.2016 'reAuth' : 'Erneut anmelden', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Wird geladen...', // from v2.1.12 added 4.26.2016 'openMulti' : 'mehrere Dateien öffnen', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Es wird versucht die $1 Dateien zu öffnen .. sicher im Browser öffnen?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Kein Suchergebnis', // from v2.1.12 added 5.16.2016 'editingFile' : 'Datei wird bearbeitet.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 Objekt(e) ausgewählt.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '$1 Objekte im Clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementelle Suche bezieht sich nur auf die aktuelle Ansicht.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Wiederherstellen', // from v2.1.15 added 3.8.2016 'complete' : '$1 abgeschlossen', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontextmenü', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Seite umblättern', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume-Rootverzeichnisse', // from v2.1.16 added 16.9.2016 'reset' : 'Neustart', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Hintergrund Farbe', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Farbauswahl', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Raster', // from v2.1.16 added 4.10.2016 'enabled' : 'Ein', // from v2.1.16 added 4.10.2016 'disabled' : 'Aus', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Keine Ergebnisse in der aktuellen Anzeige', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Die Ergebnisse der ersten Buchstabensuche sind in der aktuellen Ansicht leer.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Text Bezeichnung', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 Minuten übrig', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Wiedereröffnen mit ausgewählter Codierung', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Speichern mit der gewählten Kodierung', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Verzeichnis auswählen', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Erster Buchstabe suche', // from v2.1.23 added 24.3.2017 'presets' : 'Voreinstellungen', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Zu viele Elemente auf einmal für den Mülleimer.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Textbereich', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Leere Ordner "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Es befinden sich keine Elemente im Ordner "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Einstellungen', // from v2.1.26 added 28.6.2017 'language' : 'Spracheinstellungen', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialisiere die Einstellungen, welche in diesem Browser gespeichert sind', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbareinstellung', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 Zeichen übrig', // from v2.1.29 added 30.8.2017 'sum' : 'Summe', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Ungefähre Dateigröße', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fokussierung auf das Element Dialog mit Mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Auswählen', // from v2.1.30 added 23.11.2017 'selectAction' : 'Aktion bei der Auswahl der Datei', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Öffnen mit dem zuletzt verwendeten Editor', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Auswahl umkehren', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Sicher $1 ausgewählte Elemente in $2 umbenennen?
    Rückgängig nicht möglich!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Stapelumbenennung', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nummer', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Vorzeichen hinzufügen', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Nachzeichen hinzufügen', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Erweiterung ändern', // from v2.1.31 added 8.12.2017 'columnPref' : 'Spalteneinstellungen (Listenansicht)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Alle Änderungen werden sofort im Archiv angewendet.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Alle Änderungen werden nicht angewendet bis dieses Volume entfernt wird.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Die folgenden Datenträger, die auf diesem Datenträger eingehängt sind, werden ebenfalls ausgehängt. Sicher dass alle aushängt werden sollen?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Auswahl Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Datei-Hash-Algorithmen', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info-Elemente (Auswahl-Info-Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Drücken Sie erneut, um zu beenden.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Symbolleiste', // from v2.1.38 added 4.4.2018 'workspace' : 'Arbeitsplatz', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Alle', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icongröße (Symbolansicht)', // form v2.1.39 added 7.5.2018 'editorMaximized' : 'Öffne Editorfenster in voller Größe', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Aktuell keine API zur Bearbeitung verfügbar, bitte auf Webseite bearbeiten', //from v2.1.40 added 13.12.2019 'editorConvNeedUpload' : 'Um zu speichern nach der Bearbeitung Element entweder mit URL hochladen oder mit herunter geladener Datei', // from v2.1.40 added 13.12.2019 'convertOn' : 'Bearbeiten auf Seite $1', // from v2.1.40 added 13.12.2019 'integrations' : 'Integrationen', // from v2.1.40 added 13.12.2019 'integrationWith' : 'Diese Software hat folgende externe Dienste integriert. Vor Anwendung bitte die jeweiligen Nutzungsbedingungen usw. beachten', // from v2.1.40 added 13.12.2019 'showHidden' : 'Zeige versteckte Elemente', // from v2.1.41 added 13.12.2019 'hideHidden' : 'Verberge versteckte Elemente', // from v2.1.41 added 13.12.2019 'toggleHidden' : 'Zeige/Verberge versteckte Elemente', // from v2.1.41 added 13.12.2019 'makefileTypes' : 'Dateiarten bei "Neue Datei" aktivieren', // from v2.1.41 added 13.12.2019 'typeOfTextfile' : 'Art der Textdatei', // from v2.1.41 added 13.12.2019 'add' : 'Neu', // from v2.1.41 added 13.12.2019 'theme' : 'Thema', // from v2.1.43 added 13.12.2019 'default' : 'Standard', // from v2.1.43 added 13.12.2019 'description' : 'Beschreibung', // from v2.1.43 added 13.12.2019 'website' : 'Webseite', // from v2.1.43 added 13.12.2019 'author' : 'Autor', // from v2.1.43 added 13.12.2019 'email' : 'Email', // from v2.1.43 added 13.12.2019 'license' : 'Lizenz', // from v2.1.43 added 13.12.2019 'exportToSave' : 'Dieses Element kann nicht gespeichert werden. Um Änderungen nicht zu verlieren, muss es auf den lokalen PC exportiert werden', // from v2.1.44 added 13.12.2019 'dblclickToSelect': 'Doppelt auf Datei klicken um auszuwählen', // from v2.1.47 added 13.12.2019 'useFullscreen' : 'Gesamter Bildschirm', // from v2.1.47 added 13.12.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Unbekannt', 'kindRoot' : 'Stammverzeichnis', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Ordner', 'kindSelects' : 'Auswahlkriterien', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Verknüpfung', 'kindAliasBroken' : 'Defekte Verknüpfung', // applications 'kindApp' : 'Programm', 'kindPostscript' : 'Postscript-Dokument', 'kindMsOffice' : 'MS Office-Dokument', 'kindMsWord' : 'MS Word-Dokument', 'kindMsExcel' : 'MS Excel-Dokument', 'kindMsPP' : 'MS Powerpoint-Präsentation', 'kindOO' : 'Open Office-Dokument', 'kindAppFlash' : 'Flash', 'kindPDF' : 'Portables Dokumentenformat (PDF)', 'kindTorrent' : 'Bittorrent-Datei', 'kind7z' : '7z-Archiv', 'kindTAR' : 'TAR-Archiv', 'kindGZIP' : 'GZIP-Archiv', 'kindBZIP' : 'BZIP-Archiv', 'kindXZ' : 'XZ-Archiv', 'kindZIP' : 'ZIP-Archiv', 'kindRAR' : 'RAR-Archiv', 'kindJAR' : 'Java JAR-Datei', 'kindTTF' : 'True Type-Schrift', 'kindOTF' : 'Open Type-Schrift', 'kindRPM' : 'RPM-Paket', // texts 'kindText' : 'Text-Dokument', 'kindTextPlain' : 'Text-Dokument', 'kindPHP' : 'PHP-Quelltext', 'kindCSS' : 'CSS Stilvorlage', 'kindHTML' : 'HTML-Dokument', 'kindJS' : 'Javascript-Quelltext', 'kindRTF' : 'Formatierte Textdatei', 'kindC' : 'C-Quelltext', 'kindCHeader' : 'C Header-Quelltext', 'kindCPP' : 'C++ Quelltext', 'kindCPPHeader' : 'C++ Header-Quelltext', 'kindShell' : 'Unix-Shell-Skript', 'kindPython' : 'Python-Quelltext', 'kindJava' : 'Java-Quelltext', 'kindRuby' : 'Ruby-Quelltext', 'kindPerl' : 'Perl Script', 'kindSQL' : 'SQL-Quelltext', 'kindXML' : 'XML-Dokument', 'kindAWK' : 'AWK-Quelltext', 'kindCSV' : 'Kommagetrennte Daten', 'kindDOCBOOK' : 'Docbook XML-Dokument', 'kindMarkdown' : 'Markdown-Text', // added 20.7.2015 // images 'kindImage' : 'Bild', 'kindBMP' : 'Bitmap-Bild', 'kindJPEG' : 'JPEG-Bild', 'kindGIF' : 'GIF-Bild', 'kindPNG' : 'PNG-Bild', 'kindTIFF' : 'TIFF-Bild', 'kindTGA' : 'TGA-Bild', 'kindPSD' : 'Adobe Photoshop-Dokument', 'kindXBITMAP' : 'X Bitmap-Bild', 'kindPXM' : 'Pixelmator-Bild', // media 'kindAudio' : 'Audiodatei', 'kindAudioMPEG' : 'MPEG Audio', 'kindAudioMPEG4' : 'MPEG-4 Audio', 'kindAudioMIDI' : 'MIDI Audio', 'kindAudioOGG' : 'Ogg Vorbis Audio', 'kindAudioWAV' : 'WAV Audio', 'AudioPlaylist' : 'MP3-Playlist', 'kindVideo' : 'Videodatei', 'kindVideoDV' : 'DV Film', 'kindVideoMPEG' : 'MPEG Film', 'kindVideoMPEG4' : 'MPEG4 Film', 'kindVideoAVI' : 'AVI Film', 'kindVideoMOV' : 'QuickTime Film', 'kindVideoWM' : 'Windows Media Film', 'kindVideoFlash' : 'Flash Film', 'kindVideoMKV' : 'Matroska Film', 'kindVideoOGG' : 'Ogg Film' } }; })); application/library/js/i18n/elfinder.nl.js000064400000105745146731177160014475 0ustar00/** * Dutch translation * @author Barry vd. Heuvel * @author Patrick Tingen * @version 2019-04-17 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.nl = { translator : 'Barry vd. Heuvel <barry@fruitcakestudio.nl>, Patrick Tingen <patrick@tingen.net>', language : 'Nederlands', direction : 'ltr', dateFormat : 'd-m-Y H:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 120513-172700 messages : { /********************************** errors **********************************/ 'error' : 'Fout', 'errUnknown' : 'Onbekend fout', 'errUnknownCmd' : 'Onbekend commando', 'errJqui' : 'Ongeldige jQuery UI configuratie. Selectable, draggable en droppable componenten moeten aanwezig zijn', 'errNode' : 'Voor elFinder moet een DOM Element gemaakt worden', 'errURL' : 'Ongeldige elFinder configuratie! URL optie is niet ingesteld', 'errAccess' : 'Toegang geweigerd', 'errConnect' : 'Kan geen verbinding met de backend maken', 'errAbort' : 'Verbinding afgebroken', 'errTimeout' : 'Verbinding time-out', 'errNotFound' : 'Backend niet gevonden', 'errResponse' : 'Ongeldige reactie van de backend', 'errConf' : 'Ongeldige backend configuratie', 'errJSON' : 'PHP JSON module niet geïnstalleerd', 'errNoVolumes' : 'Leesbaar volume is niet beschikbaar', 'errCmdParams' : 'Ongeldige parameters voor commando "$1"', 'errDataNotJSON' : 'Data is niet JSON', 'errDataEmpty' : 'Data is leeg', 'errCmdReq' : 'Backend verzoek heeft een commando naam nodig', 'errOpen' : 'Kan "$1" niet openen', 'errNotFolder' : 'Object is geen map', 'errNotFile' : 'Object is geen bestand', 'errRead' : 'Kan "$1" niet lezen', 'errWrite' : 'Kan niet schrijven in "$1"', 'errPerm' : 'Toegang geweigerd', 'errLocked' : '"$1" is vergrendeld en kan niet hernoemd, verplaats of verwijderd worden', 'errExists' : 'Bestand "$1" bestaat al', 'errInvName' : 'Ongeldige bestandsnaam', 'errFolderNotFound' : 'Map niet gevonden', 'errFileNotFound' : 'Bestand niet gevonden', 'errTrgFolderNotFound' : 'Doelmap "$1" niet gevonden', 'errPopup' : 'De browser heeft voorkomen dat de pop-up is geopend. Pas de browser instellingen aan om de popup te kunnen openen', 'errMkdir' : 'Kan map "$1" niet aanmaken', 'errMkfile' : 'Kan bestand "$1" niet aanmaken', 'errRename' : 'Kan "$1" niet hernoemen', 'errCopyFrom' : 'Bestanden kopiëren van "$1" is niet toegestaan', 'errCopyTo' : 'Bestanden kopiëren naar "$1" is niet toegestaan', 'errMkOutLink' : 'Kan geen link maken buiten de hoofdmap', // from v2.1 added 03.10.2015 'errUpload' : 'Upload fout', // old name - errUploadCommon 'errUploadFile' : 'Kan "$1" niet uploaden', // old name - errUpload 'errUploadNoFiles' : 'Geen bestanden gevonden om te uploaden', 'errUploadTotalSize' : 'Data overschrijdt de maximale grootte', // old name - errMaxSize 'errUploadFileSize' : 'Bestand overschrijdt de maximale grootte', // old name - errFileMaxSize 'errUploadMime' : 'Bestandstype niet toegestaan', 'errUploadTransfer' : '"$1" overdrachtsfout', 'errUploadTemp' : 'Kan geen tijdelijk bestand voor de upload maken', // from v2.1 added 26.09.2015 'errNotReplace' : 'Object "$1" bestaat al op deze locatie en kan niet vervangen worden door een ander type object', // new 'errReplace' : 'Kan "$1" niet vervangen', 'errSave' : 'Kan "$1" niet opslaan', 'errCopy' : 'Kan "$1" niet kopiëren', 'errMove' : 'Kan "$1" niet verplaatsen', 'errCopyInItself' : 'Kan "$1" niet in zichzelf kopiëren', 'errRm' : 'Kan "$1" niet verwijderen', 'errRmSrc' : 'Kan bronbestanden niet verwijderen', 'errExtract' : 'Kan de bestanden van "$1" niet uitpakken', 'errArchive' : 'Kan het archief niet maken', 'errArcType' : 'Archief type is niet ondersteund', 'errNoArchive' : 'Bestand is geen archief of geen ondersteund archief type', 'errCmdNoSupport' : 'Backend ondersteund dit commando niet', 'errReplByChild' : 'De map "$1" kan niet vervangen worden door een item uit die map', 'errArcSymlinks' : 'Om veiligheidsredenen kan een bestand met symlinks of bestanden met niet toegestane namen niet worden uitgepakt ', // edited 24.06.2012 'errArcMaxSize' : 'Archief overschrijdt de maximale bestandsgrootte', 'errResize' : 'Kan het formaat van "$1" niet wijzigen', 'errResizeDegree' : 'Ongeldig aantal graden om te draaien', // added 7.3.2013 'errResizeRotate' : 'Afbeelding kan niet gedraaid worden', // added 7.3.2013 'errResizeSize' : 'Ongeldig afbeelding formaat', // added 7.3.2013 'errResizeNoChange' : 'Afbeelding formaat is niet veranderd', // added 7.3.2013 'errUsupportType' : 'Bestandstype wordt niet ondersteund', 'errNotUTF8Content' : 'Bestand "$1" is niet in UTF-8 and kan niet aangepast worden', // added 9.11.2011 'errNetMount' : 'Kan "$1" niet mounten', // added 17.04.2012 'errNetMountNoDriver' : 'Niet ondersteund protocol', // added 17.04.2012 'errNetMountFailed' : 'Mount mislukt', // added 17.04.2012 'errNetMountHostReq' : 'Host is verplicht', // added 18.04.2012 'errSessionExpires' : 'Uw sessie is verlopen vanwege inactiviteit', 'errCreatingTempDir' : 'Kan de tijdelijke map niet aanmaken: "$1" ', 'errFtpDownloadFile' : 'Kan het bestand niet downloaden vanaf FTP: "$1"', 'errFtpUploadFile' : 'Kan het bestand niet uploaden naar FTP: "$1"', 'errFtpMkdir' : 'Kan het externe map niet aanmaken op de FTP-server: "$1"', 'errArchiveExec' : 'Er is een fout opgetreden bij het archivering van de bestanden: "$1" ', 'errExtractExec' : 'Er is een fout opgetreden bij het uitpakken van de bestanden: "$1" ', 'errNetUnMount' : 'Kan niet unmounten', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Niet om te zetten naar UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Probeer een moderne browser als je bestanden wil uploaden', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Time-out bij zoeken naar "$1". Zoekresulataat is niet compleet', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Je moet je opnieuw aanmelden', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Max aantal selecteerbare items is $1', // from v2.1.17 added 17.10.2016 'errRestore' : 'Kan niet herstellen uit prullenbak, weet niet waar het heen moet', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Geen editor voor dit type bestand', // from v2.1.25 added 23.5.2017 'errServerError' : 'Fout opgetreden op de server', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Kan folder "$1" niet legen', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Er zijn nog $1 fouten', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Maak archief', 'cmdback' : 'Vorige', 'cmdcopy' : 'Kopieer', 'cmdcut' : 'Knip', 'cmddownload' : 'Download', 'cmdduplicate' : 'Dupliceer', 'cmdedit' : 'Pas bestand aan', 'cmdextract' : 'Bestanden uit archief uitpakken', 'cmdforward' : 'Volgende', 'cmdgetfile' : 'Kies bestanden', 'cmdhelp' : 'Over deze software', 'cmdhome' : 'Home', 'cmdinfo' : 'Bekijk info', 'cmdmkdir' : 'Nieuwe map', 'cmdmkdirin' : 'In nieuwe map', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nieuw bestand', 'cmdopen' : 'Open', 'cmdpaste' : 'Plak', 'cmdquicklook' : 'Voorbeeld', 'cmdreload' : 'Vernieuwen', 'cmdrename' : 'Naam wijzigen', 'cmdrm' : 'Verwijder', 'cmdtrash' : 'Naar prullenbak', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Herstellen', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Zoek bestanden', 'cmdup' : 'Ga een map hoger', 'cmdupload' : 'Upload bestanden', 'cmdview' : 'Bekijk', 'cmdresize' : 'Formaat wijzigen', 'cmdsort' : 'Sorteren', 'cmdnetmount' : 'Mount netwerk volume', // added 18.04.2012 'cmdnetunmount' : 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'Naar Plaatsen', // added 28.12.2014 'cmdchmod' : 'Wijzig modus', // from v2.1 added 20.6.2015 'cmdopendir' : 'Open een map', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Herstel kolombreedtes', // from v2.1.13 added 12.06.2016 'cmdfullscreen' : 'Volledig scherm', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Verplaatsen', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Map leegmaken', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Undo', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Redo', // from v2.1.27 added 31.07.2017 'cmdpreference' : 'Voorkeuren', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Selecteer alles', // from v2.1.28 added 15.08.2017 'cmdselectnone' : 'Deselecteer alles', // from v2.1.28 added 15.08.2017 'cmdselectinvert' : 'Selectie omkeren', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Open in nieuw venster', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Verberg (voorkeur)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Sluit', 'btnSave' : 'Opslaan', 'btnRm' : 'Verwijder', 'btnApply' : 'Toepassen', 'btnCancel' : 'Annuleren', 'btnNo' : 'Nee', 'btnYes' : 'Ja', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove' : 'Ga naar $1 & keur goed', // from v2.1 added 26.04.2012 'btnUnmount' : 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Converteer', // from v2.1 added 08.04.2014 'btnCwd' : 'Hier', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Alles', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015 'btnFileName' : 'Bestandsnaam', // from v2.1 added 22.5.2015 'btnSaveClose' : 'Opslaan & Sluiten', // from v2.1 added 12.6.2015 'btnBackup' : 'Back-up', // fromv2.1 added 28.11.2015 'btnRename' : 'Hernoemen', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Hernoem alles', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Vorige ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Volgende ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Opslaan als', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Bezig met openen van map', 'ntffile' : 'Bezig met openen bestand', 'ntfreload' : 'Herladen map inhoud', 'ntfmkdir' : 'Bezig met map maken', 'ntfmkfile' : 'Bezig met Bestanden maken', 'ntfrm' : 'Verwijderen bestanden', 'ntfcopy' : 'Kopieer bestanden', 'ntfmove' : 'Verplaats bestanden', 'ntfprepare' : 'Voorbereiden kopiëren', 'ntfrename' : 'Hernoem bestanden', 'ntfupload' : 'Bestanden uploaden actief', 'ntfdownload' : 'Bestanden downloaden actief', 'ntfsave' : 'Bestanden opslaan', 'ntfarchive' : 'Archief aan het maken', 'ntfextract' : 'Bestanden uitpakken actief', 'ntfsearch' : 'Zoeken naar bestanden', 'ntfresize' : 'Formaat wijzigen van afbeeldingen', 'ntfsmth' : 'Iets aan het doen', 'ntfloadimg' : 'Laden van plaatje', 'ntfnetmount' : 'Mounten van netwerk volume', // added 18.04.2012 'ntfnetunmount' : 'Unmounten van netwerk volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Opvragen afbeeldingen dimensies', // added 20.05.2013 'ntfreaddir' : 'Map informatie lezen', // from v2.1 added 01.07.2013 'ntfurl' : 'URL van link ophalen', // from v2.1 added 11.03.2014 'ntfchmod' : 'Bestandsmodus wijzigen', // from v2.1 added 20.6.2015 'ntfpreupload' : 'Upload bestandsnaam verifiëren', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Zipbestand aan het maken', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Verzamelen padinformatie', // from v2.1.17 added 2.11.2016 'ntfchunkmerge' : 'Aan het verwerken', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Aan het verwijderen', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Aan het herstellen', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Controleren doelmap', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Vorige bewerking ongedaan maken', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Opnieuw doen', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Inhoud controleren', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Prullenbak', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'onbekend', 'Today' : 'Vandaag', 'Yesterday' : 'Gisteren', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Mei', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Januari', 'February' : 'Februari', 'March' : 'Maart', 'April' : 'April', 'May' : 'Mei', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'Augustus', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Zondag', 'Monday' : 'Maandag', 'Tuesday' : 'Dinsdag', 'Wednesday' : 'Woensdag', 'Thursday' : 'Donderdag', 'Friday' : 'Vrijdag', 'Saturday' : 'Zaterdag', 'Sun' : 'Zo', 'Mon' : 'Ma', 'Tue' : 'Di', 'Wed' : 'Wo', 'Thu' : 'Do', 'Fri' : 'Vr', 'Sat' : 'Za', /******************************** sort variants ********************************/ 'sortname' : 'op naam', 'sortkind' : 'op type', 'sortsize' : 'op grootte', 'sortdate' : 'op datum', 'sortFoldersFirst' : 'Mappen eerst', 'sortperm' : 'op rechten', // from v2.1.13 added 13.06.2016 'sortmode' : 'op mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'op eigenaar', // from v2.1.13 added 13.06.2016 'sortgroup' : 'op groep', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Als boom', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NieuwBestand.txt', // added 10.11.2015 'untitled folder' : 'NieuweMap', // added 10.11.2015 'Archive' : 'NieuwArchief', // from v2.1 added 10.11.2015 'untitled file' : 'NieuwBestand.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Bestand', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Bevestiging nodig', 'confirmRm' : 'Weet u zeker dat u deze bestanden wil verwijderen?
    Deze actie kan niet ongedaan gemaakt worden!', 'confirmRepl' : 'Oud bestand vervangen door het nieuwe bestand?', 'confirmRest' : 'Replace existing item with the item in trash?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Niet in UTF-8
    Converteren naar UTF-8?
    De inhoud wordt UTF-8 door op te slaan na de conversie', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.
    Please select character encoding of this file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Het is aangepast.
    Wijzigingen gaan verloren als je niet opslaat', // from v2.1 added 15.7.2015 'confirmTrash' : 'Are you sure you want to move items to trash bin?', //from v2.1.24 added 29.4.2017 'apllyAll' : 'Toepassen op alles', 'name' : 'Naam', 'size' : 'Grootte', 'perms' : 'Rechten', 'modify' : 'Aangepast', 'kind' : 'Type', 'read' : 'lees', 'write' : 'schrijf', 'noaccess' : 'geen toegang', 'and' : 'en', 'unknown' : 'onbekend', 'selectall' : 'Selecteer alle bestanden', 'selectfiles' : 'Selecteer bestand(en)', 'selectffile' : 'Selecteer eerste bestand', 'selectlfile' : 'Selecteer laatste bestand', 'viewlist' : 'Lijst weergave', 'viewicons' : 'Icoon weergave', 'viewSmall' : 'Klein', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Middelgroot', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Groot', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra groot', // from v2.1.39 added 22.5.2018 'places' : 'Plaatsen', 'calc' : 'Bereken', 'path' : 'Pad', 'aliasfor' : 'Alias voor', 'locked' : 'Vergrendeld', 'dim' : 'Dimensies', 'files' : 'Bestanden', 'folders' : 'Mappen', 'items' : 'Items', 'yes' : 'ja', 'no' : 'nee', 'link' : 'Link', 'searcresult' : 'Zoek resultaten', 'selected' : 'geselecteerde items', 'about' : 'Over', 'shortcuts' : 'Snelkoppelingen', 'help' : 'Help', 'webfm' : 'Web bestandsmanager', 'ver' : 'Versie', 'protocolver' : 'protocol versie', 'homepage' : 'Project home', 'docs' : 'Documentatie', 'github' : 'Fork ons op Github', 'twitter' : 'Volg ons op twitter', 'facebook' : 'Wordt lid op facebook', 'team' : 'Team', 'chiefdev' : 'Hoofd ontwikkelaar', 'developer' : 'ontwikkelaar', 'contributor' : 'bijdrager', 'maintainer' : 'onderhouder', 'translator' : 'vertaler', 'icons' : 'Iconen', 'dontforget' : 'En vergeet je handdoek niet!', 'shortcutsof' : 'Snelkoppelingen uitgeschakeld', 'dropFiles' : 'Sleep hier uw bestanden heen', 'or' : 'of', 'selectForUpload' : 'Selecteer bestanden om te uploaden', 'moveFiles' : 'Verplaats bestanden', 'copyFiles' : 'Kopieer bestanden', 'restoreFiles' : 'Items herstellen', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Verwijder uit Plaatsen', 'aspectRatio' : 'Aspect ratio', 'scale' : 'Schaal', 'width' : 'Breedte', 'height' : 'Hoogte', 'resize' : 'Verkleinen', 'crop' : 'Bijsnijden', 'rotate' : 'Draaien', 'rotate-cw' : 'Draai 90 graden rechtsom', 'rotate-ccw' : 'Draai 90 graden linksom', 'degree' : '°', 'netMountDialogTitle' : 'Mount netwerk volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Poort', // added 18.04.2012 'user' : 'Gebruikersnaams', // added 18.04.2012 'pass' : 'Wachtwoord', // added 18.04.2012 'confirmUnmount' : 'Weet u zeker dat u $1 wil unmounten?', // from v2.1 added 30.04.2012 'dropFilesBrowser' : 'Sleep of plak bestanden vanuit de browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Sleep of plak bestanden hier', // from v2.1 added 07.04.2014 'encoding' : 'Encodering', // from v2.1 added 19.12.2014 'locale' : 'Localisatie', // from v2.1 added 19.12.2014 'searchTarget' : 'Doel: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Zoek op invoer MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Eigenaar', // from v2.1 added 20.6.2015 'group' : 'Groep', // from v2.1 added 20.6.2015 'other' : 'Overig', // from v2.1 added 20.6.2015 'execute' : 'Uitvoeren', // from v2.1 added 20.6.2015 'perm' : 'Rechten', // from v2.1 added 20.6.2015 'mode' : 'Modus', // from v2.1 added 20.6.2015 'emptyFolder' : 'Map is leeg', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Map is leeg\\A Sleep hier naar toe om toe te voegen', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Map is leeg\\A Lang ingedrukt houden om toe te voegen', // from v2.1.6 added 30.12.2015 'quality' : 'Kwaliteit', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Omhoog', // from v2.1.6 added 18.1.2016 'getLink' : 'Geef link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Geselecteerde items ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Map ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Toestaan offline toegang', // from v2.1.10 added 3.25.2016 'reAuth' : 'Opnieuw autenticeren', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Laden..', // from v2.1.12 added 4.26.2016 'openMulti' : 'Open meerdere bestanden', // from v2.1.12 added 5.14.2016 'openMultiConfirm' : 'Je probeert het $1 bestanden te openen. Weet je zeker dat je dat in je browser wil doen?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Geen zoekresultaten', // from v2.1.12 added 5.16.2016 'editingFile' : 'Bestand wordt bewerkt', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Je hebt $1 items geselecteerd', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Je hebt $1 items op het clipboard', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Verder zoeken kan alleen vanuit huidige view', // from v2.1.13 added 6.30.2016 'reinstate' : 'Herstellen', // from v2.1.15 added 3.8.2016 'complete' : '$1 compleet', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Pagina omslaan', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'Reset', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Achtergrondkleur', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Kleurkiezer', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Actief', // from v2.1.16 added 4.10.2016 'disabled' : 'Inactief', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Zoekresultaten zijn leeg in actuele view\\ADruk [Enter] om zoekgebied uit te breiden', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Zoeken op eerste letter is leeg in actuele view', // from v2.1.23 added 24.3.2017 'textLabel' : 'Tekstlabel', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minuten over', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Opnieuw openen met geselecteerde encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Opslaan met geselecteerde encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Selecteer map', // from v2.1.20 added 13.12.2016 'firstLetterSearch' : 'Zoeken op eerste letter', // from v2.1.23 added 24.3.2017 'presets' : 'Voorkeuren', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Teveel voor in de prullenbak', // from v2.1.25 added 9.6.2017 'TextArea' : 'Tekstgebied', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Map "$1" legen', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Er zijn geen items in map "$1"', // from v2.1.25 added 22.6.2017 'preference' : 'Voorkeur', // from v2.1.26 added 28.6.2017 'language' : 'Taal', // from v2.1.26 added 28.6.2017 'clearBrowserData' : 'Initialiseer instellingen van deze browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbar instellingen', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 tekens over', // from v2.1.29 added 30.8.2017 'sum' : 'Totaal', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Geschatte bestandsgrootte', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus op het dialoogelement met mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Selecteren', // from v2.1.30 added 23.11.2017 'selectAction' : 'Actie als bestand is geselecteerd', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open met laatstgebruikte editor', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Selectie omkeren', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Weet je zeker dat je $1 items wil hernoemen naar $2?
    Dit kan niet ongedaan worden gemaakt!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch hernoemen', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nummer', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Voeg prefix toe', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Voeg suffix toe', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Verander extentie', // from v2.1.31 added 8.12.2017 'columnPref' : 'Kolominstelllingen (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Aanpassingen worden direct toegepast op het archief', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Aanpassingen worden pas toegepast na re-mount van dit volume', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Deze volume(s) worden ook unmounted. Weet je het zeker?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Selectie informatie', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmes voor file hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Informatie Items (Selectie Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit' : 'Druk nogmaals om te eindigen', // from v2.1.38 added 1.4.2018 'toolbar' : 'Toolbar', // from v2.1.38 added 4.4.2018 'workspace' : 'Work Space', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialoog', // from v2.1.38 added 4.4.2018 'all' : 'Alles', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icoongrootte (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open de maximale editor', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Conversie via API is niet beschikbaar, converteer aub op de website', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file', //from v2.1.40 added 8.7.2018 'convertOn' : 'Converteer op de site $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integratie', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Deze elFinder heeft de volgende externe services. Controleer de voorwaarden, privacy policy, etc. voor gebruik', // from v2.1.40 added 11.7.2018 'showHidden' : 'Toon verborgen items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Verberg verborgen items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Toon/verberg verborgen items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types die aangemaakt mogen worden', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type voor tekstbestand', // from v2.1.41 added 7.8.2018 'add' : 'Toevoegen', // from v2.1.41 added 7.8.2018 'theme' : 'Thema', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Beschrijving', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Auteur', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'Licensie', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Dit item kan niet worden opgeslagen, exporteer naar je pc om wijzingen te bewaren', // from v2.1.44 added 1.12.2018 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Onbekend', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Map', 'kindSelects' : 'Selecties', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Verbroken alias', /********************************** applications **********************************/ 'kindApp' : 'Applicatie', 'kindPostscript' : 'Postscript document', 'kindMsOffice' : 'Microsoft Office document', 'kindMsWord' : 'Microsoft Word document', 'kindMsExcel' : 'Microsoft Excel document', 'kindMsPP' : 'Microsoft Powerpoint presentation', 'kindOO' : 'Open Office document', 'kindAppFlash' : 'Flash applicatie', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent bestand', 'kind7z' : '7z archief', 'kindTAR' : 'TAR archief', 'kindGZIP' : 'GZIP archief', 'kindBZIP' : 'BZIP archief', 'kindXZ' : 'XZ archief', 'kindZIP' : 'ZIP archief', 'kindRAR' : 'RAR archief', 'kindJAR' : 'Java JAR bestand', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM package', /********************************** texts **********************************/ 'kindText' : 'Tekst bestand', 'kindTextPlain' : 'Tekst', 'kindPHP' : 'PHP bronbestand', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML document', 'kindJS' : 'Javascript bronbestand', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C bronbestand', 'kindCHeader' : 'C header bronbestand', 'kindCPP' : 'C++ bronbestand', 'kindCPPHeader' : 'C++ header bronbestand', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python bronbestand', 'kindJava' : 'Java bronbestand', 'kindRuby' : 'Ruby bronbestand', 'kindPerl' : 'Perl bronbestand', 'kindSQL' : 'SQL bronbestand', 'kindXML' : 'XML document', 'kindAWK' : 'AWK bronbestand', 'kindCSV' : 'Komma gescheiden waardes', 'kindDOCBOOK' : 'Docbook XML document', 'kindMarkdown' : 'Markdown tekst', // added 20.7.2015 /********************************** images **********************************/ // 'kindImage' : 'Afbeelding', 'kindBMP' : 'BMP afbeelding', 'kindJPEG' : 'JPEG afbeelding', 'kindGIF' : 'GIF afbeelding', 'kindPNG' : 'PNG afbeelding', 'kindTIFF' : 'TIFF afbeelding', 'kindTGA' : 'TGA afbeelding', 'kindPSD' : 'Adobe Photoshop afbeelding', 'kindXBITMAP' : 'X bitmap afbeelding', 'kindPXM' : 'Pixelmator afbeelding', /********************************** media **********************************/ 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); application/library/js/i18n/elfinder.vi.js000064400000104626146731177160014477 0ustar00/** * Ngôn ngữ Việt Nam translation * @author Chung Thủy f * @author Son Nguyen * @author Nguyễn Trần Chung * @version 2019-12-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.vi = { translator : 'Chung Thủy f <chungthuyf@gmail.com>, Son Nguyen <son.nguyen@catalyst.net.nz>, Nguyễn Trần Chung <admin@chungnguyen.xyz>', language : 'Ngôn ngữ Việt Nam', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 03.12.2019 17:28 fancyDateFormat : '$1 H:i', // will show like: Hôm nay 17:28 nonameDateFormat : 'ymd-His', // noname upload will show like: 191203-172820 messages : { /********************************** errors **********************************/ 'error' : 'Lỗi', 'errUnknown' : 'Lỗi không xác định được.', 'errUnknownCmd' : 'Lỗi không rõ lệnh.', 'errJqui' : 'Cấu hình jQueryUI không hợp lệ. Các thành phần lựa chọn, kéo và thả phải được bao gồm.', 'errNode' : 'elFinder đòi hỏi phần tử DOM phải được tạo ra.', 'errURL' : 'Cấu hình elFinder không hợp lệ! URL không được thiết lập tùy chọn.', 'errAccess' : 'Truy cập bị từ chối.', 'errConnect' : 'Không thể kết nối với backend.', 'errAbort' : 'Kết nối bị hủy bỏ.', 'errTimeout' : 'Thời gian chờ kết nối đã hết.', 'errNotFound' : 'Backend không tìm thấy.', 'errResponse' : 'Phản hồi backend không hợp lệ.', 'errConf' : 'Cấu hình backend không hợp lệ.', 'errJSON' : 'Mô-đun PHP JSON không được cài đặt.', 'errNoVolumes' : 'Tập có thể đọc không có sẵn.', 'errCmdParams' : 'Thông số không hợp lệ cho lệnh "$1".', 'errDataNotJSON' : 'Dữ liệu không phải là JSON.', 'errDataEmpty' : 'Dữ liệu trống.', 'errCmdReq' : 'Backend đòi hỏi tên lệnh.', 'errOpen' : 'Không thể mở "$1".', 'errNotFolder' : 'Đối tượng không phải là một thư mục.', 'errNotFile' : 'Đối tượng không phải là một tập tin.', 'errRead' : 'Không thể đọc "$1".', 'errWrite' : 'Không thể ghi vào "$1".', 'errPerm' : 'Quyền bị từ chối.', 'errLocked' : '"$1" đã bị khóa và không thể đổi tên, di chuyển hoặc loại bỏ.', 'errExists' : 'Tập tin có tên "$1" đã tồn tại.', 'errInvName' : 'Tên tập tin không hợp lệ.', 'errInvDirname' : 'Tên thư mục không hợp lệ.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Thư mục không tìm thấy.', 'errFileNotFound' : 'Tập tin không tìm thấy.', 'errTrgFolderNotFound' : 'Thư mục đích "$1" không được tìm thấy.', 'errPopup' : 'Trình duyệt ngăn chặn mở cửa sổ popup.', 'errMkdir' : 'Không thể tạo thư mục "$1".', 'errMkfile' : 'Không thể tạo tập tin "$1".', 'errRename' : 'Không thể đổi tên "$1".', 'errCopyFrom' : 'Sao chép tập tin từ tập "$1" không được phép.', 'errCopyTo' : 'Sao chép tập tin tới tập "$1" không được phép.', 'errMkOutLink' : 'Không thể tạo liên kết ra bên ngoài volume root.', // from v2.1 added 03.10.2015 'errUpload' : 'Tải lên báo lỗi.', // old name - errUploadCommon 'errUploadFile' : 'Không thể tải lên "$1".', // old name - errUpload 'errUploadNoFiles' : 'Không thấy tập tin nào để tải lên.', 'errUploadTotalSize' : 'Dữ liệu vượt quá kích thước tối đa cho phép.', // old name - errMaxSize 'errUploadFileSize' : 'Tập tin vượt quá kích thước tối đa cho phép.', // old name - errFileMaxSize 'errUploadMime' : 'Kiểu tập tin không được phép.', 'errUploadTransfer' : 'Lỗi khi truyền "$1".', 'errUploadTemp' : 'Không thể tạo thư mục tạm để tải lên.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Đối tượng "$1" đã tồn tại ở vị trí này và không thể thay thế bằng đối tượng với loại khác.', // new 'errReplace' : 'Không thể thay thế "$1".', 'errSave' : 'Không thể lưu "$1".', 'errCopy' : 'Không thể sao chép "$1".', 'errMove' : 'Không thể chuyển "$1".', 'errCopyInItself' : 'Không thể sao chép "$1" vào chính nó.', 'errRm' : 'Không thể xóa "$1".', 'errTrash' : 'Không thể cho vào thùng rác.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Không thể xóa tệp nguồn.', 'errExtract' : 'Không thể giải nén các tập tin từ"$1".', 'errArchive' : 'Không thể tạo ra lưu trữ.', 'errArcType' : 'Loại lưu trữ không được hỗ trợ.', 'errNoArchive' : 'Tập tin không phải là lưu trữ hoặc có kiểu lưu trữ không được hỗ trợ.', 'errCmdNoSupport' : 'Backend không hỗ trợ lệnh này.', 'errReplByChild' : 'Thư mục "$1" không thể được thay thế bằng một mục con mà nó chứa.', 'errArcSymlinks' : 'Vì lý do bảo mật, từ chối giải nén tập tin lưu trữ có chứa liên kết mềm.', // edited 24.06.2012 'errArcMaxSize' : 'Tập tin lưu trữ vượt quá kích thước tối đa cho phép.', 'errResize' : 'Không thể thay đổi kích thước "$1".', 'errResizeDegree' : 'Độ xoay không hợp lệ.', // added 7.3.2013 'errResizeRotate' : 'Không thể xoay hình ảnh.', // added 7.3.2013 'errResizeSize' : 'Kích thước hình ảnh không hợp lệ.', // added 7.3.2013 'errResizeNoChange' : 'Kích thước hình ảnh không thay đổi.', // added 7.3.2013 'errUsupportType' : 'Loại tập tin không được hỗ trợ.', 'errNotUTF8Content' : 'Tệp "$1" không phải bộ ký tự UTF-8 nên không thể chỉnh sửa.', // added 9.11.2011 'errNetMount' : 'Không thể gắn kết "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Giao thức không được hỗ trợ.', // added 17.04.2012 'errNetMountFailed' : 'Gắn (kết nối) thất bại.', // added 17.04.2012 'errNetMountHostReq' : 'Yêu cầu máy chủ.', // added 18.04.2012 'errSessionExpires' : 'Phiên của bạn đã hết hạn do không hoạt động.', 'errCreatingTempDir' : 'Không thể tạo thư mục tạm thời: "$1"', 'errFtpDownloadFile' : 'Không thể tải xuống tệp từ FTP: "$1"', 'errFtpUploadFile' : 'Không thể tải tệp lên FTP: "$1"', 'errFtpMkdir' : 'Không thể tạo thư mục từ xa trên FTP: "$1"', 'errArchiveExec' : 'Lỗi trong khi lưu trữ tệp: "$1"', 'errExtractExec' : 'Lỗi trong khi giải nén tập tin: "$1"', 'errNetUnMount' : 'Không thể gỡ gắn (liên kết).', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Không thể chuyển đổi thành UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Hãy thử trình duyệt mới hơn (vì trình duyệt hiện tại có vẻ cũ nên không hỗ trợ tải lên thư mục).', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Đã hết thời gian trong khi tìm kiếm "$1". Kết quả tìm kiếm là một phần.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Cần ủy quyền lại.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Số lượng tối đa của các mục có thể chọn là $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Không thể khôi phục từ thùng rác. Không thể xác định đích khôi phục.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Không tìm thấy trình chỉnh sửa cho loại tệp này.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Lỗi xảy ra ở phía máy chủ.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Không thể làm rỗng thư mục "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Có thêm $1 lỗi.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Tạo tập tin nén', 'cmdback' : 'Trở lại', 'cmdcopy' : 'Sao chép', 'cmdcut' : 'Cắt', 'cmddownload' : 'Tải về', 'cmdduplicate' : 'Bản sao', 'cmdedit' : 'Sửa tập tin', 'cmdextract' : 'Giải nén tập tin', 'cmdforward' : 'Trước', 'cmdgetfile' : 'Chọn tập tin', 'cmdhelp' : 'Giới thiệu phần mềm', 'cmdhome' : 'Home', 'cmdinfo' : 'Thông tin', 'cmdmkdir' : 'Thư mục', 'cmdmkdirin' : 'Vào thư mục mới', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Tạo tập tin Text', 'cmdopen' : 'Mở', 'cmdpaste' : 'Dán', 'cmdquicklook' : 'Xem trước', 'cmdreload' : 'Nạp lại', 'cmdrename' : 'Đổi tên', 'cmdrm' : 'Xóa', 'cmdtrash' : 'Vào thùng rác', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Khôi phục', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Tìm tập tin', 'cmdup' : 'Go to parent directory', 'cmdupload' : 'Tải tập tin lên', 'cmdview' : 'Xem', 'cmdresize' : 'Thay đổi kích thước và xoay', 'cmdsort' : 'Sắp xếp', 'cmdnetmount' : 'Mount network volume', // added 18.04.2012 'cmdnetunmount': 'Gỡ mount', // from v2.1 added 30.04.2012 'cmdplaces' : 'To Places', // added 28.12.2014 'cmdchmod' : 'Thay đổi chế độ', // from v2.1 added 20.6.2015 'cmdopendir' : 'Mở một thư mục', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Đặt lại chiều rộng cột', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Toàn màn hình', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Di chuyển', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Làm rỗng thư mục', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Hủy bỏ (hoàn tác)', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Làm lại', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Chọn tất cả', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Không chọn gì', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Chọn ngược lại', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Mở trong cửa sổ mới', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ẩn (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Đóng', 'btnSave' : 'Lưu', 'btnRm' : 'Gỡ bỏ', 'btnApply' : 'Áp dụng', 'btnCancel' : 'Hủy bỏ', 'btnNo' : 'Không', 'btnYes' : 'Đồng ý', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Goto $1 & approve', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Convert', // from v2.1 added 08.04.2014 'btnCwd' : 'Here', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'All', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015 'btnFileName':'Filename', // from v2.1 added 22.5.2015 'btnSaveClose': 'Save & Close', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Rename', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Rename(All)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Prev ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Next ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Save As', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Mở thư mục', 'ntffile' : 'Mở tập tin', 'ntfreload' : 'Nạp lại nội dung thư mục', 'ntfmkdir' : 'Tạo thư mục', 'ntfmkfile' : 'Tạo tập tin', 'ntfrm' : 'Xóa tập tin', 'ntfcopy' : 'Sao chép tập tin', 'ntfmove' : 'Di chuyển tập tin', 'ntfprepare' : 'Chuẩn bị để sao chép các tập tin', 'ntfrename' : 'Đổi tên tập tin', 'ntfupload' : 'Tải tập tin lên', 'ntfdownload' : 'Tải tập tin', 'ntfsave' : 'Lưu tập tin', 'ntfarchive' : 'Tạo tập tin nén', 'ntfextract' : 'Giải nén tập tin', 'ntfsearch' : 'Tìm kiếm tập tin', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Doing something >_<', 'ntfloadimg' : 'Đang tải hình ảnh', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013 'ntfreaddir' : 'Reading folder infomation', // from v2.1 added 01.07.2013 'ntfurl' : 'Getting URL of link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changing file mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verifying upload file name', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creating a file for download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Getting path infomation', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processing the uploaded file', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Doing throw in the trash', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Doing restore from the trash', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Checking destination folder', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Undoing previous operation', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Redoing previous undone', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Checking contents', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Trash', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Chưa biết', 'Today' : 'Hôm nay', 'Yesterday' : 'Hôm qua', 'msJan' : 'Tháng 1', 'msFeb' : 'Tháng 2', 'msMar' : 'Tháng 3', 'msApr' : 'Tháng 4', 'msMay' : 'Tháng 5', 'msJun' : 'Tháng 6', 'msJul' : 'Tháng 7', 'msAug' : 'Tháng 8', 'msSep' : 'Tháng 9', 'msOct' : 'Tháng 10', 'msNov' : 'Tháng 11', 'msDec' : 'Tháng 12', 'January' : 'Tháng 1', 'February' : 'Tháng 2', 'March' : 'Tháng 3', 'April' : 'Tháng 4', 'May' : 'Tháng 5', 'June' : 'Tháng 6', 'July' : 'Tháng 7', 'August' : 'Tháng 8', 'September' : 'Tháng 9', 'October' : 'Tháng 10', 'November' : 'Tháng 11', 'December' : 'Tháng 12', 'Sunday' : 'Chủ nhật', 'Monday' : 'Thứ 2', 'Tuesday' : 'Thứ 3', 'Wednesday' : 'Thứ 4', 'Thursday' : 'Thứ 5', 'Friday' : 'Thứ 6', 'Saturday' : 'Thứ 7', 'Sun' : 'Chủ nhật', 'Mon' : 'Thứ 2', 'Tue' : 'Thứ 3', 'Wed' : 'Thứ 4', 'Thu' : 'Thứ 5', 'Fri' : 'Thứ 6', 'Sat' : 'Thứ 7', /******************************** sort variants ********************************/ 'sortname' : 'theo tên', 'sortkind' : 'theo loại', 'sortsize' : 'theo kích cỡ', 'sortdate' : 'theo ngày', 'sortFoldersFirst' : 'Thư mục đầu tiên', 'sortperm' : 'theo quyền hạn', // from v2.1.13 added 13.06.2016 'sortmode' : 'theo chế độ', // from v2.1.13 added 13.06.2016 'sortowner' : 'theo người tạo', // from v2.1.13 added 13.06.2016 'sortgroup' : 'theo nhóm', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Also Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'NewFolder', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Yêu cầu xác nhận', 'confirmRm' : 'Bạn có chắc chắn muốn xóa vĩnh viễn các mục?
    Điều này không thể được hoàn tác!', 'confirmRepl' : 'Thay tập tin cũ bằng tập tin mới? (Nếu nó chứa các thư mục, nó sẽ được hợp nhất. Để sao lưu và thay thế, chọn Sao lưu.)', 'confirmRest' : 'Thay thế mục hiện có bằng một mục trong thùng rác?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Not in UTF-8
    Convert to UTF-8?
    Contents become UTF-8 by saving after conversion.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.
    Please select character encoding of this file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'It has been modified.
    Losing work if you do not save changes.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Bạn có chắc chắn muốn chuyển các mục vào thùng rác?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Bạn có chắc chắn muốn chuyển các mục vào "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Áp dụng cho tất cả', 'name' : 'Tên', 'size' : 'Kích cỡ', 'perms' : 'Quyền', 'modify' : 'Sửa đổi', 'kind' : 'Loại', 'read' : 'đọc', 'write' : 'viết', 'noaccess' : 'không truy cập', 'and' : 'và', 'unknown' : 'không xác định', 'selectall' : 'Chọn tất cả các mục', 'selectfiles' : 'Chọn các mục', 'selectffile' : 'Chọn mục đầu tiên', 'selectlfile' : 'Chọn mục cuối cùng', 'viewlist' : 'Hiển thị danh sách', 'viewicons' : 'Hiển thị biểu tượng', 'viewSmall' : 'Biểu tượng nhỏ', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Biểu tượng vừa', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Biểu tượng lớn', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Biểu tượng cực lớn', // from v2.1.39 added 22.5.2018 'places' : 'Places', 'calc' : 'Tính toán', 'path' : 'Đường dẫn', 'aliasfor' : 'Bí danh cho', 'locked' : 'Đã khóa', 'dim' : 'Kích thước', 'files' : 'Tệp', 'folders' : 'Thư mục', 'items' : 'Items', 'yes' : 'yes', 'no' : 'no', 'link' : 'Liên kết', 'searcresult' : 'Kết quả tìm kiếm', 'selected' : 'mục đã chọn', 'about' : 'Về', 'shortcuts' : 'Lối tắt', 'help' : 'Giúp đỡ', 'webfm' : 'Web file manager', 'ver' : 'Phiên bản', 'protocolver' : 'phiên bản protocol', 'homepage' : 'Trang chủ dự án', 'docs' : 'Tài liệu', 'github' : 'Theo dõi chúng tôi trên GitHub', 'twitter' : 'Theo dõi chúng tôi trên Twitter', 'facebook' : 'Theo dõi chúng tôi trên Facebook', 'team' : 'Đội ngũ', 'chiefdev' : 'Trùm sò', 'developer' : 'người phát triển', 'contributor' : 'người đóng góp', 'maintainer' : 'người bảo trì', 'translator' : 'người dịch', 'icons' : 'Icons', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'Shortcuts disabled', 'dropFiles' : 'Thả tệp vào đây', 'or' : 'hoặc', 'selectForUpload' : 'Chọn tệp', 'moveFiles' : 'Di chuyển các mục', 'copyFiles' : 'Sao chép các mục', 'restoreFiles' : 'Khôi mục các mục', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Remove from places', 'aspectRatio' : 'Tỉ lệ khung hình', 'scale' : 'Tỉ lệ', 'width' : 'Rộng', 'height' : 'Cao', 'resize' : 'Thay đổi kích cỡ', 'crop' : 'Cắt', 'rotate' : 'Xoay', 'rotate-cw' : 'Xoay 90 độ CW', 'rotate-ccw' : 'Xoay 90 độ CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'User', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 'confirmUnmount' : 'Are you unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drop or Paste files from browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drop files, Paste URLs or images(clipboard) here', // from v2.1 added 07.04.2014 'encoding' : 'Mã hóa', // from v2.1 added 19.12.2014 'locale' : 'Địa phương', // from v2.1 added 19.12.2014 'searchTarget' : 'Mục tiêu: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Tìm kiếm theo kiểu tệp (MIME)', // from v2.1 added 22.5.2015 'owner' : 'Chủ sở hữu', // from v2.1 added 20.6.2015 'group' : 'Nhóm', // from v2.1 added 20.6.2015 'other' : 'Khác', // from v2.1 added 20.6.2015 'execute' : 'Thực thi', // from v2.1 added 20.6.2015 'perm' : 'Quyền', // from v2.1 added 20.6.2015 'mode' : 'Chế độ', // from v2.1 added 20.6.2015 'emptyFolder' : 'Thư mục trống', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Thư mục trống\\A Kéo thả vào đây để thêm các mục', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Thư mục trống\\A Nhấn giữ để thêm các mục', // from v2.1.6 added 30.12.2015 'quality' : 'Chất lượng', // from v2.1.6 added 5.1.2016 'autoSync' : 'Tự động động bộ', // from v2.1.6 added 10.1.2016 'moveUp' : 'Di chuyển lên', // from v2.1.6 added 18.1.2016 'getLink' : 'Lấy liên kết URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Các mục đã chọn ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID thư mục', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Cho phép truy cập ngoại tuyến', // from v2.1.10 added 3.25.2016 'reAuth' : 'Xác thực lại', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Đang tải...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Mở nhiều tập tin', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'You are trying to open the $1 files. Are you sure you want to open in browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Kết quả tìm kiếm trống trong mục tiêu tìm kiếm.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Nó là một tập tin đang chỉnh sửa.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'You have selected $1 items.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'You have $1 items in the clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Tìm kiếm gia tăng chỉ từ hiển thị hiện tại.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Phục hồi', // from v2.1.15 added 3.8.2016 'complete' : '$1 hoàn thành', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Trình đơn ngữ cảnh', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Chuyển trang', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'Đặt lại', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Màu nền', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Chọn màu', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Đã bật', // from v2.1.16 added 4.10.2016 'disabled' : 'Đã tắt', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Search results is empty in current view.\\APress [Enter] to expand search target.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Kết quả tìm kiếm thư đầu tiên là trống trong chế độ xem hiện tại.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Nhãn văn bản', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins left', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Chọn thư mục', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'First letter search', // from v2.1.23 added 24.3.2017 'presets' : 'Đặt trước', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Có quá nhiều mục vì vậy không thể cho vào thùng rác.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Empty the folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'There are no items in a folder "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preference', // from v2.1.26 added 28.6.2017 'language' : 'Ngôn ngữ', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialize the settings saved in this browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Cài đặt thanh công cụ', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 chars left.', // from v2.1.29 added 30.8.2017 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Rough file size', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Select', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action when select file', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open with the editor used last time', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invert selection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Are you sure you want to rename $1 selected items like $2?
    This cannot be undone!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch rename', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Number', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Thêm tiền tố', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Thêm hậu tố', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Thay đổi phần mở rộng', // from v2.1.31 added 8.12.2017 'columnPref' : 'Columns settings (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'All changes will reflect immediately to the archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Any changes will not reflect until un-mount this volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Selection Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithms to show the file hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Nhấn một lần nữa để thoát.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Toolbar', // from v2.1.38 added 4.4.2018 'workspace' : 'Work Space', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'All', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icon Size (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open the maximized editor window', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Because conversion by API is not currently available, please convert on the website.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convert on the site of $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Show hidden items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Hide hidden items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Show/Hide hidden items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type of the Text file', // from v2.1.41 added 7.8.2018 'add' : 'Add', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Description', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Author', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'License', // from v2.1.43 added 19.10.2018 'exportToSave' : 'This item can\'t be saved. To avoid losing the edits you need to export to your PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double click on the file to select it.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Use fullscreen mode', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Unknown', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Folder', 'kindSelects' : 'Selections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Broken alias', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Postscript document', 'kindMsOffice' : 'Microsoft Office document', 'kindMsWord' : 'Microsoft Word document', 'kindMsExcel' : 'Microsoft Excel document', 'kindMsPP' : 'Microsoft Powerpoint presentation', 'kindOO' : 'Open Office document', 'kindAppFlash' : 'Flash application', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent file', 'kind7z' : '7z archive', 'kindTAR' : 'TAR archive', 'kindGZIP' : 'GZIP archive', 'kindBZIP' : 'BZIP archive', 'kindXZ' : 'XZ archive', 'kindZIP' : 'ZIP archive', 'kindRAR' : 'RAR archive', 'kindJAR' : 'Java JAR file', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM package', // texts 'kindText' : 'Text document', 'kindTextPlain' : 'Plain text', 'kindPHP' : 'PHP source', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML document', 'kindJS' : 'Javascript source', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C source', 'kindCHeader' : 'C header source', 'kindCPP' : 'C++ source', 'kindCPPHeader' : 'C++ header source', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python source', 'kindJava' : 'Java source', 'kindRuby' : 'Ruby source', 'kindPerl' : 'Perl script', 'kindSQL' : 'SQL source', 'kindXML' : 'XML document', 'kindAWK' : 'AWK source', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML document', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Image', 'kindBMP' : 'BMP image', 'kindJPEG' : 'JPEG image', 'kindGIF' : 'GIF Image', 'kindPNG' : 'PNG Image', 'kindTIFF' : 'TIFF image', 'kindTGA' : 'TGA image', 'kindPSD' : 'Adobe Photoshop image', 'kindXBITMAP' : 'X bitmap image', 'kindPXM' : 'Pixelmator image', // media 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV movie', 'kindVideoMPEG' : 'MPEG movie', 'kindVideoMPEG4' : 'MPEG-4 movie', 'kindVideoAVI' : 'AVI movie', 'kindVideoMOV' : 'Quick Time movie', 'kindVideoWM' : 'Windows Media movie', 'kindVideoFlash' : 'Flash movie', 'kindVideoMKV' : 'Matroska movie', 'kindVideoOGG' : 'Ogg movie' } }; })); application/library/js/i18n/elfinder.sk.js000064400000104305146731177160014470 0ustar00/** * Slovak translation * @author RobiNN * @author Jakub Ďuraš * @version 2021-06-10 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.sk = { translator : 'RobiNN <robo@kelcak.com>, Jakub Ďuraš <jkblmr@gmail.com>', language : 'Slovenčina', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 10.06.2021 23:35 fancyDateFormat : '$1 H:i', // will show like: Dnes 23:35 nonameDateFormat : 'ymd-His', // noname upload will show like: 210610-233522 messages : { /********************************** errors **********************************/ 'error' : 'Chyba', 'errUnknown' : 'Neznáma chyba.', 'errUnknownCmd' : 'Neznámy príkaz.', 'errJqui' : 'Nesprávna jQuery UI konfigurácia. Selectable, draggable a droppable musia byť načítané.', 'errNode' : 'elFinder vyžaduje vytvorenie DOM elementu.', 'errURL' : 'Nesprávna elFinder konfigurácia! URL nie je definovaná.', 'errAccess' : 'Prístup zamietnutý.', 'errConnect' : 'Nepodarilo sa pripojiť do backendu.', 'errAbort' : 'Spojenie bolo prerušené.', 'errTimeout' : 'Časový limit vypršal.', 'errNotFound' : 'Backend nenájdený.', 'errResponse' : 'Nesprávna backend odpoveď.', 'errConf' : 'Nesprávna backend konfigurácia.', 'errJSON' : 'PHP JSON modul nie je nainštalovaný.', 'errNoVolumes' : 'Nie sú dostupné žiadne čitateľné média.', 'errCmdParams' : 'Nesprávne parametre pre príkaz "$1".', 'errDataNotJSON' : 'Dáta nie sú formátu JSON.', 'errDataEmpty' : 'Prázdne dáta.', 'errCmdReq' : 'Backend požiadavka požaduje názov príkazu.', 'errOpen' : 'Nie je možné otvoriť "$1".', 'errNotFolder' : 'Objekt nie je priečinok.', 'errNotFile' : 'Objekt nie je súbor.', 'errRead' : 'Nie je možné prečítať "$1".', 'errWrite' : 'Nie je možné písať do "$1".', 'errPerm' : 'Prístup zamietnutý.', 'errLocked' : '"$1" je uzamknutý a nemôže byť premenovaný, presunutý alebo odstránený.', 'errExists' : 'Položka s názvom "$1" už existuje.', 'errInvName' : 'Neplatný názov súboru.', 'errInvDirname' : 'Neplatný názov priečinka.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Priečinok nebol nájdený.', 'errFileNotFound' : 'Súbor nenájdený.', 'errTrgFolderNotFound' : 'Cieľový priečinok "$1" sa nenašiel.', 'errPopup' : 'Prehliadač zabránil otvoreniu vyskakovacieho okna. Pre otvorenie súboru povoľte vyskakovacie okná.', 'errMkdir' : 'Nepodarilo sa vytvoriť priečinok "$1".', 'errMkfile' : 'Nepodarilo sa vytvoriť súbor "$1".', 'errRename' : 'Nepodarilo sa premenovať "$1".', 'errCopyFrom' : 'Kopírovanie súborov z média "$1" nie je povolené.', 'errCopyTo' : 'Kopírovanie súborov na médium "$1" nie je povolené.', 'errMkOutLink' : 'Nie je možné vytvoriť odkaz mimo koreňového zväzku.', // from v2.1 added 03.10.2015 'errUpload' : 'Chyba pri nahrávaní.', // old name - errUploadCommon 'errUploadFile' : 'Nepodarilo sa nahrať "$1".', // old name - errUpload 'errUploadNoFiles' : 'Neboli nájdené žiadne súbory na nahranie.', 'errUploadTotalSize' : 'Dáta prekračujú maximálnu povolenú veľkosť.', // old name - errMaxSize 'errUploadFileSize' : 'Súbor prekračuje maximálnu povolenú veľkosť.', // old name - errFileMaxSize 'errUploadMime' : 'Nepovolený typ súboru.', 'errUploadTransfer' : 'Problém s nahrávaním "$1".', 'errUploadTemp' : 'Nepodarilo sa vytvoriť dočasný súbor na nahranie.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objekt "$1" na tomto mieste už existuje a nemôže byť nahradený objektom iného typu.', // new 'errReplace' : 'Nie je možné nahradiť "$1".', 'errSave' : 'Nie je možné uložiť "$1".', 'errCopy' : 'Nie je možné kopírovať "$1".', 'errMove' : 'Nie je možné preniesť "$1".', 'errCopyInItself' : 'Nie je možné kopírovať "$1" do seba.', 'errRm' : 'Nie je možné vymazať "$1".', 'errTrash' : 'Nie je možné presunúť do koša.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Nie je možné odstrániť zdrojový/é súbor/y.', 'errExtract' : 'Nie je možné extrahovať súbory z "$1".', 'errArchive' : 'Nie je možné vytvoriť archív.', 'errArcType' : 'Nepodporovaný typ archívu.', 'errNoArchive' : 'Súbor nie je archív alebo má nepodporovaný typ archívu.', 'errCmdNoSupport' : 'Backend nepodporuje tento príkaz.', 'errReplByChild' : 'Priečinok "$1" nemôže byť nahradený položkou, ktorú už obsahuje.', 'errArcSymlinks' : 'Z bezpečnostných dôvodov bolo zakázané extrahovanie archívov obsahujúcich symlinky, alebo súborov s nepovolenými názvami.', // edited 24.06.2012 'errArcMaxSize' : 'Súbory archívu prekračujú maximálnu povolenú veľkosť.', 'errResize' : 'Nie je možné zmeniť veľkosť "$1".', 'errResizeDegree' : 'Neplatný stupeň otočenia.', // added 7.3.2013 'errResizeRotate' : 'Nie je možné otočiť obrázok.', // added 7.3.2013 'errResizeSize' : 'Neplatná veľkosť obrázka.', // added 7.3.2013 'errResizeNoChange' : 'Veľkosť obrázku sa nezmenila.', // added 7.3.2013 'errUsupportType' : 'Nepodporovaný typ súboru.', 'errNotUTF8Content' : 'Súbor "$1" nie je v UTF-8 a nemôže byť upravený.', // added 9.11.2011 'errNetMount' : 'Nie je možné pripojiť "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Nepodporovaný protokol.', // added 17.04.2012 'errNetMountFailed' : 'Pripájanie zlyhalo.', // added 17.04.2012 'errNetMountHostReq' : 'Hosť je požadovaný.', // added 18.04.2012 'errSessionExpires' : 'Vaša relácia vypršala kvôli nečinnosti.', 'errCreatingTempDir' : 'Nepodarilo sa vytvoriť dočasný adresár: "$1"', 'errFtpDownloadFile' : 'Nie je možné stiahnuť súbor z FTP: "$1"', 'errFtpUploadFile' : 'Nie je možné nahrať súbor na FTP: "$1"', 'errFtpMkdir' : 'Nedá sa vytvoriť vzdialený adresár na FTP: "$1"', 'errArchiveExec' : 'Chyba pri archivácii súborov: "$1"', 'errExtractExec' : 'Chyba pri extrahovaní súborov: "$1"', 'errNetUnMount' : 'Nepodarilo sa odpojiť', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nie je prevoditeľný na UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Vyskúšajte moderný prehliadač, ak chcete nahrať priečinok.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Vypršal časový limit pri hľadaní "$1". Výsledok vyhľadávania je čiastočný.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Opätovné povolenie je potrebné.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maximálny počet voliteľných položiek je $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Nepodarilo sa obnoviť z koša. Cieľ obnovenia nie je možné identifikovať.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor tohto typu súboru nebol nájdený.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Vyskytla sa chyba na strane servera.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Nepodarilo sa vyprázdniť priečinok "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Existujú ešte ďalšie $1 chyby.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Môžete vytvoriť až $1 priečinkov naraz.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Vytvoriť archív', 'cmdback' : 'Späť', 'cmdcopy' : 'Kopírovať', 'cmdcut' : 'Vystrihnúť', 'cmddownload' : 'Stiahnuť', 'cmdduplicate' : 'Duplikovať', 'cmdedit' : 'Upraviť súbor', 'cmdextract' : 'Extrahovať súbory z archívu', 'cmdforward' : 'Ďalej', 'cmdgetfile' : 'Vybrať súbory', 'cmdhelp' : 'O tomto softvéri', 'cmdhome' : 'Domov', 'cmdinfo' : 'Info', 'cmdmkdir' : 'Nový priečinok', 'cmdmkdirin' : 'Do novej zložky', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nový súbor', 'cmdopen' : 'Otvoriť', 'cmdpaste' : 'Vložiť', 'cmdquicklook' : 'Náhľad', 'cmdreload' : 'Obnoviť', 'cmdrename' : 'Premenovať', 'cmdrm' : 'Vymazať', 'cmdtrash' : 'Do koša', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Obnoviť', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Nájsť súbory', 'cmdup' : 'Prejsť do nadradeného priečinka', 'cmdupload' : 'Nahrať súbory', 'cmdview' : 'Pozrieť', 'cmdresize' : 'Zmeniť veľkosť obrázku', 'cmdsort' : 'Zoradiť', 'cmdnetmount' : 'Pripojiť sieťové médium', // added 18.04.2012 'cmdnetunmount': 'Odpojiť', // from v2.1 added 30.04.2012 'cmdplaces' : 'Do umiestnení', // added 28.12.2014 'cmdchmod' : 'Zmeniť režim', // from v2.1 added 20.6.2015 'cmdopendir' : 'Otvoriť priečinok', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Resetovať šírku stĺpca', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Celá obrazovka', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Posúvať', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vyprázdniť priečinok', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Krok späť', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Vykonať znova', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferencie', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Vybrať všetko', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Nič nevyberať', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invertovať výber', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Otvoriť v novom okne', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Skryť (Predvoľba)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Zavrieť', 'btnSave' : 'Uložiť', 'btnRm' : 'Vymazať', 'btnApply' : 'Použiť', 'btnCancel' : 'Zrušiť', 'btnNo' : 'Nie', 'btnYes' : 'Áno', 'btnMount' : 'Pripojiť', // added 18.04.2012 'btnApprove': 'Ísť na $1 & schváliť', // from v2.1 added 26.04.2012 'btnUnmount': 'Odpojiť', // from v2.1 added 30.04.2012 'btnConv' : 'Previesť', // from v2.1 added 08.04.2014 'btnCwd' : 'Tu', // from v2.1 added 22.5.2015 'btnVolume' : 'Médium', // from v2.1 added 22.5.2015 'btnAll' : 'Všetko', // from v2.1 added 22.5.2015 'btnMime' : 'MIME typ', // from v2.1 added 22.5.2015 'btnFileName':'Názov súboru', // from v2.1 added 22.5.2015 'btnSaveClose': 'Uložiť & zavrieť', // from v2.1 added 12.6.2015 'btnBackup' : 'Zálohovať', // fromv2.1 added 28.11.2015 'btnRename' : 'Premenovať', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Premenovať všetko', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Predchádzajúce ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Ďalšie ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Uložiť ako', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Otváranie priečinka', 'ntffile' : 'Otváranie súboru', 'ntfreload' : 'Znovu-načítanie obsahu priečinka', 'ntfmkdir' : 'Vytváranie priečinka', 'ntfmkfile' : 'Vytváranie súborov', 'ntfrm' : 'Vymazanie položiek', 'ntfcopy' : 'Kopírovanie položiek', 'ntfmove' : 'Premiestnenie položiek', 'ntfprepare' : 'Kontrola existujúcich položiek', 'ntfrename' : 'Premenovanie súborov', 'ntfupload' : 'Nahrávanie súborov', 'ntfdownload' : 'Sťahovanie súborov', 'ntfsave' : 'Uloženie súborov', 'ntfarchive' : 'Vytváranie archívu', 'ntfextract' : 'Extrahovanie súborov z archívu', 'ntfsearch' : 'Vyhľadávanie súborov', 'ntfresize' : 'Zmena veľkosti obrázkov', 'ntfsmth' : 'Počkajte prosím...', 'ntfloadimg' : 'Načítavanie obrázka', 'ntfnetmount' : 'Pripájanie sieťového média', // added 18.04.2012 'ntfnetunmount': 'Odpájanie sieťového média', // from v2.1 added 30.04.2012 'ntfdim' : 'Získanie rozmeru obrázka', // added 20.05.2013 'ntfreaddir' : 'Čítajú sa informácie o priečinku', // from v2.1 added 01.07.2013 'ntfurl' : 'Získanie adresy URL odkazu', // from v2.1 added 11.03.2014 'ntfchmod' : 'Zmena súboru', // from v2.1 added 20.6.2015 'ntfpreupload': 'Overenie názvu nahravaného súboru', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Vytvorenie súboru na stiahnutie', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Získanie informácií o ceste', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Spracovanie nahraného súboru', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Vhadzovanie do koša', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Vykonávanie obnovy z koša', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Kontrola cieľového priečinka', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Zrušiť predchádzajúcu operáciu', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Obnovenie predchádzajúceho zrušenia', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Kontrola obsahu', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Kôš', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'neznámy', 'Today' : 'Dnes', 'Yesterday' : 'Včera', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'Júl', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Január', 'February' : 'Február', 'March' : 'Marec', 'April' : 'Apríl', 'May' : 'Máj', 'June' : 'Jún', 'July' : 'Júl', 'August' : 'August', 'September' : 'September', 'October' : 'Október', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Nedeľa', 'Monday' : 'Pondelok', 'Tuesday' : 'Utorok', 'Wednesday' : 'Streda', 'Thursday' : 'Štvrtok', 'Friday' : 'Piatok', 'Saturday' : 'Sobota', 'Sun' : 'Ned', 'Mon' : 'Pon', 'Tue' : 'Ut', 'Wed' : 'Str', 'Thu' : 'Štv', 'Fri' : 'Pia', 'Sat' : 'Sob', /******************************** sort variants ********************************/ 'sortname' : 'podľa názvu', 'sortkind' : 'podľa druhu', 'sortsize' : 'podľa veľkosti', 'sortdate' : 'podľa dátumu', 'sortFoldersFirst' : 'Najskôr priečinky', 'sortperm' : 'podľa povolenia', // from v2.1.13 added 13.06.2016 'sortmode' : 'podľa módu', // from v2.1.13 added 13.06.2016 'sortowner' : 'podľa majiteľa', // from v2.1.13 added 13.06.2016 'sortgroup' : 'podľa skupiny', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Tiež stromové zobrazenie', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Nový súbor.txt', // added 10.11.2015 'untitled folder' : 'Nový priečinok', // added 10.11.2015 'Archive' : 'Nový archív', // from v2.1 added 10.11.2015 'untitled file' : 'Nový súbor.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1 súbor', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Potrebné potvrdenie', 'confirmRm' : 'Určite chcete vymazať súbory?
    Nie je to možné vrátiť späť!', 'confirmRepl' : 'Nahradiť starý súbor za nový? (Ak obsahuje priečinky, bude zlúčené. Ak chcete zálohovať a nahradiť, vyberte možnosť Zálohovať.)', 'confirmRest' : 'Nahradiť existujúcu položku s položkou v koši?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nie je v UTF-8
    Previesť na UTF-8?
    Obsah bude v UTF-8 po uložení konverzie.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Kódovanie tohto súboru nemohlo byť detekované. Pre úpravu dočasne potrebujete previesť na UTF-8 .
    Prosím, vyberte kódovanie znakov tohto súboru.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Bol upravený.
    Ak zmeny neuložíte, stratíte vykonanú prácu.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Naozaj chcete presunúť položky do koša?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Naozaj chcete presunúť položky do "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Použiť na všetky', 'name' : 'Názov', 'size' : 'Veľkosť', 'perms' : 'Povolenia', 'modify' : 'Zmenené', 'kind' : 'Druh', 'read' : 'čítať', 'write' : 'zapisovať', 'noaccess' : 'bez prístupu', 'and' : 'a', 'unknown' : 'neznámy', 'selectall' : 'Vybrať všetky položky', 'selectfiles' : 'Vybrať položku(y)', 'selectffile' : 'Vybrať prvú položku', 'selectlfile' : 'Vybrať poslednú položku', 'viewlist' : 'Zoznam', 'viewicons' : 'Ikony', 'viewSmall' : 'Malé ikony', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Stredné ikony', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Veľké ikony', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra veľké ikony', // from v2.1.39 added 22.5.2018 'places' : 'Miesta', 'calc' : 'Prepočítavanie', 'path' : 'Cesta', 'aliasfor' : 'Alias pre', 'locked' : 'Uzamknuté', 'dim' : 'Rozmery', 'files' : 'Súbory', 'folders' : 'Priečinky', 'items' : 'Položky', 'yes' : 'áno', 'no' : 'nie', 'link' : 'Odkaz', 'searcresult' : 'Výsledky hľadania', 'selected' : 'zvolené položky', 'about' : 'O aplikácii', 'shortcuts' : 'Skratky', 'help' : 'Pomoc', 'webfm' : 'Webový správca súborov', 'ver' : 'Verzia', 'protocolver' : 'verzia protokolu', 'homepage' : 'Domovská stránka', 'docs' : 'Dokumentácia', 'github' : 'Pozri nás na Githube', 'twitter' : 'Nasleduj nás na Twitteri', 'facebook' : 'Pripoj sa k nám na Facebooku', 'team' : 'Tím', 'chiefdev' : 'Hlavný vývojár', 'developer' : 'Vývojár', 'contributor' : 'Prispievateľ', 'maintainer' : 'Správca', 'translator' : 'Prekladateľ', 'icons' : 'Ikony', 'dontforget' : 'a nezabudnite si plavky', 'shortcutsof' : 'Skratky nie sú povolené', 'dropFiles' : 'Sem pretiahnite súbory', 'or' : 'alebo', 'selectForUpload' : 'Vyberte súbory', 'moveFiles' : 'Premiestniť súbory', 'copyFiles' : 'Kopírovať súbory', 'restoreFiles' : 'Obnoviť položky', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Odstrániť z umiestnení', 'aspectRatio' : 'Pomer zobrazenia', 'scale' : 'Mierka', 'width' : 'Šírka', 'height' : 'Výška', 'resize' : 'Zmeniť veľkosť', 'crop' : 'Orezať', 'rotate' : 'Otočiť', 'rotate-cw' : 'Otočiť o 90 stupňov (v smere h.r.)', 'rotate-ccw' : 'Otočiť o 90 stupňov (proti smeru)', 'degree' : '°', 'netMountDialogTitle' : 'Pripojiť sieťové médium', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Hosť', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Užívateľ', // added 18.04.2012 'pass' : 'Heslo', // added 18.04.2012 'confirmUnmount' : 'Naozaj chcete odpojiť $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Premiestnite alebo presuňte súbory z prehliadača', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Tu premiestnite alebo presuňte súbory a adresy URL', // from v2.1 added 07.04.2014 'encoding' : 'Kódovanie', // from v2.1 added 19.12.2014 'locale' : 'Lokalizácia', // from v2.1 added 19.12.2014 'searchTarget' : 'Cieľ: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Vyhľadávanie podľa vstupného MIME typu', // from v2.1 added 22.5.2015 'owner' : 'Majiteľ', // from v2.1 added 20.6.2015 'group' : 'Skupina', // from v2.1 added 20.6.2015 'other' : 'Ostatné', // from v2.1 added 20.6.2015 'execute' : 'Spustiť', // from v2.1 added 20.6.2015 'perm' : 'Povolenie', // from v2.1 added 20.6.2015 'mode' : 'Režim', // from v2.1 added 20.6.2015 'emptyFolder' : 'Priečinok je prázdny', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Priečinok je prázdny\\A Premiestnite alebo presuňte položky', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Priečinok je prázdny\\A Dlhým kliknutím pridáte položky', // from v2.1.6 added 30.12.2015 'quality' : 'Kvalita', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatická synchronizácia', // from v2.1.6 added 10.1.2016 'moveUp' : 'Posunúť nahor', // from v2.1.6 added 18.1.2016 'getLink' : 'Získať URL odkaz', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Vybraté položky ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID priečinka', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Povoliť prístup v offline režime', // from v2.1.10 added 3.25.2016 'reAuth' : 'Znova overiť', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Práve načítava...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Otvorenie viacerých súborov', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Pokúšate sa otvoriť súbor $1. Naozaj ho chcete otvoriť v prehliadači?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Výsledky vyhľadávania sú prázdne v hľadanom cieli.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Je to úprava súboru.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Vybrali ste $1 položky.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Máte $1 položky v schránke.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Prírastkové hľadanie je iba z aktuálneho zobrazenia.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Obnovovanie', // from v2.1.15 added 3.8.2016 'complete' : '$1: kompletné', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontextové menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Otáčanie stránky', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Korene média', // from v2.1.16 added 16.9.2016 'reset' : 'Resetovať', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Farba pozadia', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Výber farby', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px mriežka', // from v2.1.16 added 4.10.2016 'enabled' : 'Povolené', // from v2.1.16 added 4.10.2016 'disabled' : 'Zakázané', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Výsledky vyhľadávania sú prázdne v aktuálnom zobrazení. Stlačením tlačidla [Enter] rozšírite vyhľadávanie cieľa.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Výsledky vyhľadávania prvého listu sú v aktuálnom zobrazení prázdne.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Nápis textu', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minút ostáva', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Otvoriť s vybratým kódovaním', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Uložiť s vybratým kódovaním', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Vyberte priečinok', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Hľadanie prvého listu', // from v2.1.23 added 24.3.2017 'presets' : 'Presety', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Je to príliš veľa položiek, takže sa nemôže dostať do koša.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Textarea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vyprázdniť priečinok "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'V priečinku "$1" nie sú žiadne položky.', // from v2.1.25 added 22.6.2017 'preference' : 'Preferencie', // from v2.1.26 added 28.6.2017 'language' : 'Nastavenie jazyka', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicializujte nastavenia uložené v tomto prehliadači', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Nastavenie panela s nástrojmi', // from v2.1.27 added 2.8.2017 'charsLeft' : '...$1 znakov ostáva.', // from v2.1.29 added 30.8.2017 'linesLeft' : '...$1 riadkov ostáva.', // from v2.1.52 added 16.1.2020 'sum' : 'Súčet', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Hrubá veľkosť súboru', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Zameranie na prvok dialógu s mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Vybrať', // from v2.1.30 added 23.11.2017 'selectAction' : 'Akcia pri vybranom súbore', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Otvoriť pomocou naposledy použitého editora', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invertovať výber položiek', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Naozaj chcete premenovať $1 vybraných položiek, ako napríklad $2
    Nie je to možné vrátiť späť!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch premenovanie', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Číslo', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Pridať predponu', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Pridať príponu', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Zmeniť príponu', // from v2.1.31 added 8.12.2017 'columnPref' : 'Nastavenia stĺpcov (zoznamové zobrazenie)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Všetky zmeny sa okamžite premietnu do archívu.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Akékoľvek zmeny sa neodzrkadľujú, kým sa toto médium neodinštaluje.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Nasledujúce médium(a) pripojené v tomto médiu je tiež odpojené. Určite ho odpojiť?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informácie o výbere', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmy na zobrazenie hashu súborov', // from v2.1.33 added 10.3.2018 'infoItems' : 'Informačné položky (panel s informáciami o výbere)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Opätovným stlačením opustíte.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Panel nástrojov', // from v2.1.38 added 4.4.2018 'workspace' : 'Pracovný priestor', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialóg', // from v2.1.38 added 4.4.2018 'all' : 'Všetko', // from v2.1.38 added 4.4.2018 'iconSize' : 'Veľkosť ikony (zobrazenie ikon)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Otvorte maximalizované okno editora', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Pretože konverzia podľa rozhrania API momentálne nie je k dispozícii, skonvertujte na webovej stránke.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Po konverzii musíte nahrať skonvertovaný súbor pomocou URL položky alebo stiahnutý súbor na uloženie skonvertovaného súboru.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Konvertovať na stránke $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrácie', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Tento elFinder má integrované nasledujúce externé služby. Pred použitím skontrolujte podmienky používania, zásady ochrany osobných údajov atď.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Zobraziť skryté položky', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Skryť skryté položky', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Zobraziť/skryť skryté položky', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Typy súborov, ktoré sa majú povoliť pomocou "Nový súbor"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Typ textového súboru', // from v2.1.41 added 7.8.2018 'add' : 'Pridať', // from v2.1.41 added 7.8.2018 'theme' : 'Téma', // from v2.1.43 added 19.10.2018 'default' : 'Predvolená', // from v2.1.43 added 19.10.2018 'description' : 'Popis', // from v2.1.43 added 19.10.2018 'website' : 'Stránka', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licencia', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Túto položku nemožno uložiť. Ak chcete zabrániť strate úprav, musíte ju exportovať do počítača.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dvakrát kliknite na súbor a vyberte ho.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Použiť režim celej obrazovky', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Neznámy', 'kindRoot' : 'Koreň média', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Priečinok', 'kindSelects' : 'Výbery', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Porušený alias', // applications 'kindApp' : 'Aplikácia', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint prezentácia', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flashová aplikácia', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent súbor', 'kind7z' : '7z archív', 'kindTAR' : 'TAR archív', 'kindGZIP' : 'GZIP archív', 'kindBZIP' : 'BZIP archív', 'kindXZ' : 'XZ archív', 'kindZIP' : 'ZIP archív', 'kindRAR' : 'RAR archív', 'kindJAR' : 'Java JAR súbor', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM balík', // texts 'kindText' : 'Textový document', 'kindTextPlain' : 'Obyčajný text', 'kindPHP' : 'PHP zdrojový kód', 'kindCSS' : 'Cascading style sheet (CSS)', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript zdrojový kód', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C zdrojový kód', 'kindCHeader' : 'C header zdrojový kód', 'kindCPP' : 'C++ zdrojový kód', 'kindCPPHeader' : 'C++ header zdrojový kód', 'kindShell' : 'Unix shell skript', 'kindPython' : 'Python zdrojový kód', 'kindJava' : 'Java zdrojový kód', 'kindRuby' : 'Ruby zdrojový kód', 'kindPerl' : 'Perl zdrojový kód', 'kindSQL' : 'SQL zdrojový kód', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK zdrojový kód', 'kindCSV' : 'Čiarkou oddeľované hodnoty', 'kindDOCBOOK' : 'Docbook XML dokument', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Obrázok', 'kindBMP' : 'BMP obrázok', 'kindJPEG' : 'JPEG obrázok', 'kindGIF' : 'GIF obrázok', 'kindPNG' : 'PNG obrázok', 'kindTIFF' : 'TIFF obrázok', 'kindTGA' : 'TGA obrázok', 'kindPSD' : 'Adobe Photoshop obrázok', 'kindXBITMAP' : 'X bitmap obrázok', 'kindPXM' : 'Pixelmator obrázok', // media 'kindAudio' : 'Zvukový súbor', 'kindAudioMPEG' : 'MPEG zvuk', 'kindAudioMPEG4' : 'MPEG-4 zvuk', 'kindAudioMIDI' : 'MIDI zvuk', 'kindAudioOGG' : 'Ogg Vorbis zvuk', 'kindAudioWAV' : 'WAV zvuk', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video súbor', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); application/library/js/i18n/elfinder.sv.js000064400000036611146731177160014507 0ustar00/** * Swedish translation * @author Gabriel Satzger * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.sv = { translator : 'Gabriel Satzger <gabriel.satzger@sbg.se>', language : 'Svenska', direction : 'ltr', dateFormat : 'Y-m-d H:i', fancyDateFormat : '$1 H:i', messages : { /********************************** errors **********************************/ 'error' : 'Error', 'errUnknown' : 'Okänt error.', 'errUnknownCmd' : 'Okänt kommando.', 'errJqui' : 'Felaktig jQuery UI konfiguration. Komponenterna selectable, draggable och droppable måste vara inkluderade.', 'errNode' : 'elFinder kräver att DOM Elementen skapats.', 'errURL' : 'Felaktig elFinder konfiguration! URL parametern är inte satt.', 'errAccess' : 'Åtkomst nekad.', 'errConnect' : 'Kan inte ansluta till backend.', 'errAbort' : 'Anslutningen avbröts.', 'errTimeout' : 'Anslutningen löpte ut.', 'errNotFound' : 'Backend hittades inte.', 'errResponse' : 'Ogiltig backend svar.', 'errConf' : 'Ogiltig backend konfiguration.', 'errJSON' : 'PHP JSON modul är inte installerad.', 'errNoVolumes' : 'Läsbara volymer är inte tillgängliga.', 'errCmdParams' : 'Ogiltiga parametrar för kommandot "$1".', 'errDataNotJSON' : 'Datan är inte JSON.', 'errDataEmpty' : 'Datan är tom.', 'errCmdReq' : 'Backend begäran kräver kommandonamn.', 'errOpen' : 'Kan inte öppna "$1".', 'errNotFolder' : 'Objektet är inte en mapp.', 'errNotFile' : 'Objektet är inte en fil.', 'errRead' : 'Kan inte läsa "$1".', 'errWrite' : 'Kan inte skriva till "$1".', 'errPerm' : 'Tillstånd nekat.', 'errLocked' : '"$1" är låst och kan inte döpas om, flyttas eller tas bort.', 'errExists' : 'Fil med namn "$1" finns redan.', 'errInvName' : 'Ogiltigt filnamn.', 'errFolderNotFound' : 'Mappen hittades inte.', 'errFileNotFound' : 'Filen hittades inte.', 'errTrgFolderNotFound' : 'Målmappen "$1" hittades inte.', 'errPopup' : 'Webbläsaren hindrade popup-fönstret att öppnas. Ändra i webbläsarens inställningar för att kunna öppna filen.', 'errMkdir' : 'Kan inte skapa mappen "$1".', 'errMkfile' : 'Kan inte skapa filen "$1".', 'errRename' : 'Kan inte döpa om "$1".', 'errCopyFrom' : 'Kopiera filer från volym "$1" tillåts inte.', 'errCopyTo' : 'Kopiera filer till volym "$1" tillåts inte.', 'errUpload' : 'Error vid uppladdningen.', 'errUploadFile' : 'Kan inte ladda upp "$1".', 'errUploadNoFiles' : 'Inga filer hittades för uppladdning.', 'errUploadTotalSize' : 'Data överskrider den högsta tillåtna storleken.', 'errUploadFileSize' : 'Filen överskrider den högsta tillåtna storleken.', 'errUploadMime' : 'Otillåten filtyp.', 'errUploadTransfer' : '"$1" överföringsfel.', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Kan inte spara "$1".', 'errCopy' : 'Kan inte kopiera "$1".', 'errMove' : 'Kan inte flytta "$1".', 'errCopyInItself' : 'Kan inte flytta "$1" till sig själv.', 'errRm' : 'Kan inte ta bort "$1".', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Kan inte packa upp filen från "$1".', 'errArchive' : 'Kan inte skapa arkiv.', 'errArcType' : 'Arkivtypen stöds inte.', 'errNoArchive' : 'Filen är inte av typen arkiv.', 'errCmdNoSupport' : 'Backend stöder inte detta kommando.', 'errReplByChild' : 'Mappen “$1” kan inte ersättas av ett objekt den innehåller.', 'errArcSymlinks' : 'Av säkerhetsskäl nekas arkivet att packas upp då det innehåller symboliska länkar eller filer med ej tillåtna namn.', // edited 24.06.2012 'errArcMaxSize' : 'Arkivfiler överskrider största tillåtna storlek.', 'errResize' : 'Kan inte ändra storlek "$1".', 'errResizeDegree' : 'Invalid rotate degree.', 'errResizeRotate' : 'Unable to rotate image.', 'errResizeSize' : 'Invalid image size.', 'errResizeNoChange' : 'Image size not changed.', 'errUsupportType' : 'Filtypen stöds inte.', 'errNotUTF8Content' : 'Filen "$1" är inte i UTF-8 och kan inte redigeras.', // added 9.11.2011 'errNetMount' : 'Kan inte koppla "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protokollet stöds inte.', // added 17.04.2012 'errNetMountFailed' : 'Kopplingen misslyckades.', // added 17.04.2012 'errNetMountHostReq' : 'Host krävs.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'Skapa arkiv', 'cmdback' : 'Tillbaka', 'cmdcopy' : 'Kopiera', 'cmdcut' : 'Klipp ut', 'cmddownload' : 'Ladda ned', 'cmdduplicate' : 'Duplicera', 'cmdedit' : 'Redigera fil', 'cmdextract' : 'Extrahera filer från arkiv', 'cmdforward' : 'Framåt', 'cmdgetfile' : 'Välj filer', 'cmdhelp' : 'Om denna programvara', 'cmdhome' : 'Hem', 'cmdinfo' : 'Visa info', 'cmdmkdir' : 'Ny mapp', 'cmdmkfile' : 'Ny fil', 'cmdopen' : 'Öppna', 'cmdpaste' : 'Klistra in', 'cmdquicklook' : 'Förhandsgranska', 'cmdreload' : 'Ladda om', 'cmdrename' : 'Döp om', 'cmdrm' : 'Radera', 'cmdsearch' : 'Hitta filer', 'cmdup' : 'Gå till överordnade katalog', 'cmdupload' : 'Ladda upp filer', 'cmdview' : 'Visa', 'cmdresize' : 'Ändra bildstorlek', 'cmdsort' : 'Sortera', 'cmdnetmount' : 'Mount network volume', /*********************************** buttons ***********************************/ 'btnClose' : 'Stäng', 'btnSave' : 'Spara', 'btnRm' : 'Ta bort', 'btnApply' : 'Verkställ', 'btnCancel' : 'Ångra', 'btnNo' : 'Nej', 'btnYes' : 'Ja', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'Öppnar mapp', 'ntffile' : 'Öppnar fil', 'ntfreload' : 'Laddar om mappinnehållet', 'ntfmkdir' : 'Skapar katalog', 'ntfmkfile' : 'Skapar fil', 'ntfrm' : 'Tar bort filer', 'ntfcopy' : 'Kopierar filer', 'ntfmove' : 'Flyttar filer', 'ntfprepare' : 'Förbereder att flytta filer', 'ntfrename' : 'Döper om filer', 'ntfupload' : 'Laddar upp filer', 'ntfdownload' : 'Laddar ner filer', 'ntfsave' : 'Sparar filer', 'ntfarchive' : 'Skapar arkiv', 'ntfextract' : 'Extraherar filer från arkiv', 'ntfsearch' : 'Söker filer', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Gör någonting >_<', 'ntfloadimg' : 'Laddar bild', 'ntfnetmount' : 'kopplar nätverksvolym', // added 18.04.2012 'ntfdim' : 'Acquiring image dimension', /************************************ dates **********************************/ 'dateUnknown' : 'okänt', 'Today' : 'Idag', 'Yesterday' : 'Igår', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Januari', 'February' : 'Februari', 'March' : 'Mars', 'April' : 'April', 'May' : 'Maj', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'Augusti', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Söndag', 'Monday' : 'Måndag', 'Tuesday' : 'Tisdag', 'Wednesday' : 'Onsdag', 'Thursday' : 'Torsdag', 'Friday' : 'Fredag', 'Saturday' : 'Lördag', 'Sun' : 'Sön', 'Mon' : 'Mån', 'Tue' : 'Tis', 'Wed' : 'Ons', 'Thu' : 'Tor', 'Fri' : 'Fre', 'Sat' : 'Lör', /******************************** sort variants ********************************/ 'sortname' : 'efter namn', 'sortkind' : 'efter sort', 'sortsize' : 'efter storlek', 'sortdate' : 'efter datum', 'sortFoldersFirst' : 'Mappar först', // added 22.06.2012 /********************************** messages **********************************/ 'confirmReq' : 'Bekräftelse krävs', 'confirmRm' : 'Är du säker på att du vill ta bort filer?
    Detta kan inte ångras!', 'confirmRepl' : 'Ersätt den gamla filen med en ny?', 'apllyAll' : 'Använd för alla', 'name' : 'Namn', 'size' : 'Storlek', 'perms' : 'Rättigheter', 'modify' : 'Ändrad', 'kind' : 'Sort', 'read' : 'läs', 'write' : 'skriv', 'noaccess' : 'ingen åtkomst', 'and' : 'och', 'unknown' : 'okänd', 'selectall' : 'Välj alla filer', 'selectfiles' : 'Välj fil(er)', 'selectffile' : 'Välj första filen', 'selectlfile' : 'Välj sista filen', 'viewlist' : 'Listvy', 'viewicons' : 'Ikonvy', 'places' : 'Platser', 'calc' : 'Beräkna', 'path' : 'Sökväg', 'aliasfor' : 'Alias för', 'locked' : 'Låst', 'dim' : 'Dimensioner', 'files' : 'Filer', 'folders' : 'Mappar', 'items' : 'Objekt', 'yes' : 'ja', 'no' : 'nej', 'link' : 'Länk', 'searcresult' : 'Sökresultat', 'selected' : 'valda objekt', 'about' : 'Om', 'shortcuts' : 'Genväg', 'help' : 'Hjälp', 'webfm' : 'Webbfilhanterare', 'ver' : 'Version', 'protocolver' : 'protokolversion', 'homepage' : 'Projekt hemsida', 'docs' : 'Dokumentation', 'github' : 'Forka oss på Github', 'twitter' : 'Följ oss på twitter', 'facebook' : 'Följ oss på facebook', 'team' : 'Team', 'chiefdev' : 'senior utvecklare', 'developer' : 'utvecklare', 'contributor' : 'bidragsgivare', 'maintainer' : 'underhållare', 'translator' : 'översättare', 'icons' : 'Ikoner', 'dontforget' : 'och glöm inte att ta med din handduk', 'shortcutsof' : 'Genvägar avaktiverade', 'dropFiles' : 'Släpp filerna här', 'or' : 'eller', 'selectForUpload' : 'Välj filer att ladda upp', 'moveFiles' : 'Flytta filer', 'copyFiles' : 'Kopiera filer', 'rmFromPlaces' : 'Ta bort från platser', 'aspectRatio' : 'Aspekt ratio', 'scale' : 'Skala', 'width' : 'Bredd', 'height' : 'Höjd', 'resize' : 'Ändra storlek', 'crop' : 'Beskär', 'rotate' : 'Rotera', 'rotate-cw' : 'Rotera 90 grader medurs', 'rotate-ccw' : 'Rotera 90 grader moturs', 'degree' : 'Grader', 'netMountDialogTitle' : 'Koppla nätverksvolym', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'användare', // added 18.04.2012 'pass' : 'Lösenord', // added 18.04.2012 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Okänd', 'kindFolder' : 'Mapp', 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Trasigt alias', // applications 'kindApp' : 'Applikation', 'kindPostscript' : 'Postscript', 'kindMsOffice' : 'Microsoft Office', 'kindMsWord' : 'Microsoft Word', 'kindMsExcel' : 'Microsoft Excel', 'kindMsPP' : 'Microsoft Powerpoint', 'kindOO' : 'Open Office', 'kindAppFlash' : 'Flash', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent', 'kind7z' : '7z', 'kindTAR' : 'TAR', 'kindGZIP' : 'GZIP', 'kindBZIP' : 'BZIP', 'kindXZ' : 'XZ', 'kindZIP' : 'ZIP', 'kindRAR' : 'RAR', 'kindJAR' : 'Java JAR', 'kindTTF' : 'True Type', 'kindOTF' : 'Open Type', 'kindRPM' : 'RPM', // texts 'kindText' : 'Text', 'kindTextPlain' : 'Plain', 'kindPHP' : 'PHP', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML', 'kindJS' : 'Javascript', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C', 'kindCHeader' : 'C header', 'kindCPP' : 'C++', 'kindCPPHeader' : 'C++ header', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python', 'kindJava' : 'Java', 'kindRuby' : 'Ruby', 'kindPerl' : 'Perl', 'kindSQL' : 'SQL', 'kindXML' : 'XML', 'kindAWK' : 'AWK', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Docbook XML', // images 'kindImage' : 'Bild', 'kindBMP' : 'BMP', 'kindJPEG' : 'JPEG', 'kindGIF' : 'GIF', 'kindPNG' : 'PNG', 'kindTIFF' : 'TIFF', 'kindTGA' : 'TGA', 'kindPSD' : 'Adobe Photoshop', 'kindXBITMAP' : 'X bitmap', 'kindPXM' : 'Pixelmator', // media 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV movie', 'kindVideoMPEG' : 'MPEG movie', 'kindVideoMPEG4' : 'MPEG-4 movie', 'kindVideoAVI' : 'AVI movie', 'kindVideoMOV' : 'Quick Time movie', 'kindVideoWM' : 'Windows Media movie', 'kindVideoFlash' : 'Flash movie', 'kindVideoMKV' : 'Matroska movie', 'kindVideoOGG' : 'Ogg movie' } }; })); application/library/js/i18n/elfinder.tr.js000064400000103200146731177160014471 0ustar00/** * Türkçe translation * @author I.Taskinoglu & A.Kaya * @author Abdullah ELEN * @author Osman KAYAN * @author Ali KAYAN * @author Cengiz AKCAN cengiz@vobo.company * @version 2022-05-08 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.tr = { translator : 'I.Taskinoglu & A.Kaya <alikaya@armsyazilim.com>, Abdullah ELEN <abdullahelen@msn.com>, Osman KAYAN <osmnkayan@gmail.com>, alikayan95@gmail.com, Cengiz AKCAN cengiz@vobo.company, Ali KAYAN <alikayan95@gmail.com>', language : 'Türkçe', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 08.05.2022 21:53 fancyDateFormat : '$1 H:i', // will show like: Bugün 21:53 nonameDateFormat : 'ymd-His', // noname upload will show like: 220508-215305 messages : { /********************************** errors **********************************/ 'error' : 'Hata', 'errUnknown' : 'Bilinmeyen hata.', 'errUnknownCmd' : 'Bilinmeyen komut.', 'errJqui' : 'Geçersiz jQuery UI yapılandırması. Seçilebilir, sürükle ve bırak bileşenlerini içermelidir.', 'errNode' : 'elFinder, DOM Element\'ini oluşturması gerekir.', 'errURL' : 'Geçersiz elFinder yapılandırması! URL seçeneği ayarlı değil.', 'errAccess' : 'Erişim engellendi.', 'errConnect' : 'Sunucuya bağlanamıyor.', 'errAbort' : 'Bağlantı durduruldu.', 'errTimeout' : 'Bağlantı zaman aşımı.', 'errNotFound' : 'Sunucu bulunamadı.', 'errResponse' : 'Geçersiz sunucu yanıtı.', 'errConf' : 'Geçersiz sunucu yapılandırması.', 'errJSON' : 'PHP JSON modülü kurulu değil.', 'errNoVolumes' : 'Okunabilir birimler mevcut değil.', 'errCmdParams' : '"$1" komutu için geçersiz parametre.', 'errDataNotJSON' : 'Bu veri JSON formatında değil.', 'errDataEmpty' : 'Boş veri.', 'errCmdReq' : 'Sunucu isteği için komut adı gerekli.', 'errOpen' : '"$1" açılamıyor.', 'errNotFolder' : 'Bu nesne bir klasör değil.', 'errNotFile' : 'Bu nesne bir dosya değil.', 'errRead' : '"$1" okunamıyor.', 'errWrite' : '"$1" yazılamıyor.', 'errPerm' : 'Yetki engellendi.', 'errLocked' : '"$1" kilitli. Bu nedenle taşıma, yeniden adlandırma veya kaldırma yapılamıyor.', 'errExists' : '"$1" adında bir dosya zaten var.', 'errInvName' : 'Geçersiz dosya ismi.', 'errInvDirname' : 'Geçersiz klasör ismi', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Klasör bulunamıyor.', 'errFileNotFound' : 'Dosya bulunamadı.', 'errTrgFolderNotFound' : 'Hedef klasör "$1" bulunamadı.', 'errPopup' : 'Tarayıcı popup penceresi açmayı engelledi. Tarayıcı ayarlarından dosya açmayı aktif hale getirin.', 'errMkdir' : 'Klasör oluşturulamıyor "$1".', 'errMkfile' : '"$1" dosyası oluşturulamıyor.', 'errRename' : '"$1" yeniden adlandırma yapılamıyor.', 'errCopyFrom' : '"$1" biriminden dosya kopyalamaya izin verilmedi.', 'errCopyTo' : '"$1" birimine dosya kopyalamaya izin verilmedi.', 'errMkOutLink' : 'Kök birim dışında bir bağlantı oluşturulamıyor', // from v2.1 added 03.10.2015 'errUpload' : 'Dosya yükleme hatası.', // old name - errUploadCommon 'errUploadFile' : '"$1" dosya yüklenemedi.', // old name - errUpload 'errUploadNoFiles' : 'Yüklenecek dosya bulunamadı.', 'errUploadTotalSize' : 'Veri izin verilen boyuttan büyük.', // old name - errMaxSize 'errUploadFileSize' : 'Dosya izin verilen boyuttan büyük.', // old name - errFileMaxSize 'errUploadMime' : 'Dosya türüne izin verilmedi.', 'errUploadTransfer' : '"$1" transfer hatası.', 'errUploadTemp' : 'Yükleme için geçici dosya yapılamıyor.', // from v2.1 added 26.09.2015 'errNotReplace' : '"$1" nesnesi bu konumda zaten var ve başka türde nesne ile değiştirilemez.', // new 'errReplace' : 'Değişiklik yapılamıyor "$1".', 'errSave' : '"$1" kaydedilemiyor.', 'errCopy' : '"$1" kopyalanamıyor.', 'errMove' : '"$1" taşınamıyor.', 'errCopyInItself' : '"$1" kendi içine kopyalanamaz.', 'errRm' : '"$1" kaldırılamıyor.', 'errTrash' : 'Çöp kutusuna taşınamıyor.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Kaynak dosya(lar) kaldırılamıyor.', 'errExtract' : '"$1" kaynağından dosyalar çıkartılamıyor.', 'errArchive' : 'Arşiv oluşturulamıyor.', 'errArcType' : 'Desteklenmeyen arşiv türü.', 'errNoArchive' : 'Dosya arşiv değil veya desteklenmeyen arşiv türü.', 'errCmdNoSupport' : 'Sunucu bu komutu desteklemiyor.', 'errReplByChild' : '“$1” klasörü içerdiği bir öğe tarafından değiştirilemez.', 'errArcSymlinks' : 'Sembolik bağlantıları içeren arşivlerin açılması güvenlik nedeniyle reddedildi.', // edited 24.06.2012 'errArcMaxSize' : 'Arşiv dosyaları izin verilen maksimum boyutu aştı.', 'errResize' : '"$1" yeniden boyutlandırılamıyor.', 'errResizeDegree' : 'Geçersiz döndürme derecesi.', // added 7.3.2013 'errResizeRotate' : 'Resim döndürülemiyor.', // added 7.3.2013 'errResizeSize' : 'Geçersiz resim boyutu.', // added 7.3.2013 'errResizeNoChange' : 'Resim boyutu değiştirilemez.', // added 7.3.2013 'errUsupportType' : 'Desteklenmeyen dosya türü.', 'errNotUTF8Content' : 'Dosya "$1" UTF-8 olmadığından düzenlenemez.', // added 9.11.2011 'errNetMount' : '"$1" bağlanamadı.', // added 17.04.2012 'errNetMountNoDriver' : 'Desteklenmeyen protokol.', // added 17.04.2012 'errNetMountFailed' : 'Bağlama hatası.', // added 17.04.2012 'errNetMountHostReq' : 'Sunucu gerekli.', // added 18.04.2012 'errSessionExpires' : 'Uzun süre işlem yapılmadığından oturumunuz sonlandı.', 'errCreatingTempDir' : 'Geçici dizin oluşturulamıyor: "$1"', 'errFtpDownloadFile' : 'Dosya FTP: "$1" adresinden indirilemiyor.', 'errFtpUploadFile' : 'Dosya FTP: "$1" adresine yüklenemiyor.', 'errFtpMkdir' : 'FTP: "$1" üzerinde uzak dizin oluşturulamıyor.', 'errArchiveExec' : '"$1" Dosyalarında arşivlenirken hata oluştu.', 'errExtractExec' : '"$1" Dosyaları arşivden çıkartılırken hata oluştu.', 'errNetUnMount' : 'Bağlantı kaldırılamıyor.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'UTF-8\'e dönüştürülemez.', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Klasör yükleyebilmek için daha modern bir tarayıcıya ihtiyacınız var.', // from v2.1 added 26.6.2015 'errSearchTimeout' : '"$1" araması zaman aşımına uğradı. Kısmi arama sonuçları listeleniyor.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Yeniden yetkilendirme gerekiyor.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maksimum seçilebilir öge sayısı $1 adettir', // from v2.1.17 added 17.10.2016 'errRestore' : 'Çöp kutusundan geri yüklenemiyor. Geri yükleme notkası belirlenemiyor.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editör bu dosya türünü bulamıyor.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Sunucu tarafında beklenilmeyen bir hata oluştu.', // from v2.1.25 added 16.6.2017 'errEmpty' : '"$1" klasörü boşaltılamıyor.', // from v2.1.25 added 22.6.2017 'moreErrors' : '"$1" veya daha fazla hata', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Tek seferde 1$\'a kadar klasör oluşturabilirsiniz.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Arşiv oluştur', 'cmdback' : 'Geri', 'cmdcopy' : 'Kopyala', 'cmdcut' : 'Kes', 'cmddownload' : 'İndir', 'cmdduplicate' : 'Çoğalt', 'cmdedit' : 'Dosyayı düzenle', 'cmdextract' : 'Arşivden dosyaları çıkart', 'cmdforward' : 'İleri', 'cmdgetfile' : 'Dosyaları seç', 'cmdhelp' : 'Bu yazılım hakkında', 'cmdhome' : 'Anasayfa', 'cmdinfo' : 'Bilgi göster', 'cmdmkdir' : 'Yeni klasör', 'cmdmkdirin' : 'Yeni Klasör / aç', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Yeni dosya', 'cmdopen' : 'Aç', 'cmdpaste' : 'Yapıştır', 'cmdquicklook' : 'Ön izleme', 'cmdreload' : 'Geri Yükle', 'cmdrename' : 'Yeniden Adlandır', 'cmdrm' : 'Sil', 'cmdtrash' : 'Çöpe at', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'geri yükle', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Dosyaları bul', 'cmdup' : 'Üst dizine çık', 'cmdupload' : 'Dosyaları yükle', 'cmdview' : 'Görüntüle', 'cmdresize' : 'Resmi yeniden boyutlandır', 'cmdsort' : 'Sırala', 'cmdnetmount' : 'Bağlı ağ birimi', // added 18.04.2012 'cmdnetunmount': 'Devredışı bırak', // from v2.1 added 30.04.2012 'cmdplaces' : 'Yerlere', // added 28.12.2014 'cmdchmod' : 'Mod değiştir', // from v2.1 added 20.6.2015 'cmdopendir' : 'Klasör aç', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Sütun genişliğini sıfırla', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Tam ekran', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Taşı', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Klasörü boşalt', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Geri al', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Yinele', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Tercihler', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Tümünü seç', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Seçimi temizle', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Diğerlerini seç', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Yeni Sekmede aç', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ögeyi Gizle', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Kapat', 'btnSave' : 'Kaydet', 'btnRm' : 'Kaldır', 'btnApply' : 'Uygula', 'btnCancel' : 'İptal', 'btnNo' : 'Hayır', 'btnYes' : 'Evet', 'btnMount' : 'Bağla', // added 18.04.2012 'btnApprove': 'Git $1 & onayla', // from v2.1 added 26.04.2012 'btnUnmount': 'Bağlantıyı kes', // from v2.1 added 30.04.2012 'btnConv' : 'Dönüştür', // from v2.1 added 08.04.2014 'btnCwd' : 'Buraya', // from v2.1 added 22.5.2015 'btnVolume' : 'Birim', // from v2.1 added 22.5.2015 'btnAll' : 'Hepsi', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Türü', // from v2.1 added 22.5.2015 'btnFileName':'Dosya adı', // from v2.1 added 22.5.2015 'btnSaveClose': 'Kaydet & Kapat', // from v2.1 added 12.6.2015 'btnBackup' : 'Yedekle', // fromv2.1 added 28.11.2015 'btnRename' : 'Yeniden adlandır', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Yeniden adlandır(Tümü)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Önceki ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Sonraki ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Farklı Kaydet', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Klasör Aç', 'ntffile' : 'Dosya Aç', 'ntfreload' : 'Klasör içeriğini yeniden yükle', 'ntfmkdir' : 'Dizin oluşturuluyor', 'ntfmkfile' : 'Dosyaları oluşturma', 'ntfrm' : 'Dosyaları sil', 'ntfcopy' : 'Dosyaları kopyala', 'ntfmove' : 'Dosyaları taşı', 'ntfprepare' : 'Dosyaları kopyalamaya hazırla', 'ntfrename' : 'Dosyaları yeniden adlandır', 'ntfupload' : 'Dosyalar yükleniyor', 'ntfdownload' : 'Dosyalar indiriliyor', 'ntfsave' : 'Dosyalar kaydediliyor', 'ntfarchive' : 'Arşiv oluşturuluyor', 'ntfextract' : 'Arşivden dosyalar çıkartılıyor', 'ntfsearch' : 'Dosyalar aranıyor', 'ntfresize' : 'Resimler boyutlandırılıyor', 'ntfsmth' : 'İşlem yapılıyor', 'ntfloadimg' : 'Resim yükleniyor', 'ntfnetmount' : 'Ağ birimine bağlanılıyor', // added 18.04.2012 'ntfnetunmount': 'Ağ birimi bağlantısı kesiliyor', // from v2.1 added 30.04.2012 'ntfdim' : 'Resim boyutu alınıyor', // added 20.05.2013 'ntfreaddir' : 'Klasör bilgisi okunuyor', // from v2.1 added 01.07.2013 'ntfurl' : 'Bağlantının URL\'si alınıyor', // from v2.1 added 11.03.2014 'ntfchmod' : 'Dosya modu değiştiriliyor', // from v2.1 added 20.6.2015 'ntfpreupload': 'Yüklenen dosya ismi doğrulanıyor', // from v2.1 added 31.11.2015 'ntfzipdl' : 'İndirilecek dosya oluşturuluyor', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Dosya yolu bilgileri alınıyor', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Yüklenen dosya işleniyor', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Çöp kutusuna atma', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Çöp kutusundan geri yükle', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Hedef klasör kontrol ediliyor', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Önceki işlemi geri alma', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Önceki geri almayı tekrarlama', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'İçeriği kontrol ediniz', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Çöp', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Bilinmiyor', 'Today' : 'Bugün', 'Yesterday' : 'Dün', 'msJan' : 'Oca', 'msFeb' : 'Şub', 'msMar' : 'Mar', 'msApr' : 'Nis', 'msMay' : 'May', 'msJun' : 'Haz', 'msJul' : 'Tem', 'msAug' : 'Ağu', 'msSep' : 'Eyl', 'msOct' : 'Ekm', 'msNov' : 'Kas', 'msDec' : 'Ara', 'January' : 'Ocak', 'February' : 'Şubat', 'March' : 'Mart', 'April' : 'Nisan', 'May' : 'Mayıs', 'June' : 'Haziran', 'July' : 'Temmuz', 'August' : 'Ağustos', 'September' : 'Eylül', 'October' : 'Ekim', 'November' : 'Kasım', 'December' : 'Aralık', 'Sunday' : 'Pazar', 'Monday' : 'Pazartesi', 'Tuesday' : 'Salı', 'Wednesday' : 'Çarşamba', 'Thursday' : 'Perşembe', 'Friday' : 'Cuma', 'Saturday' : 'Cumartesi', 'Sun' : 'Paz', 'Mon' : 'Pzt', 'Tue' : 'Sal', 'Wed' : 'Çar', 'Thu' : 'Per', 'Fri' : 'Cum', 'Sat' : 'Cmt', /******************************** sort variants ********************************/ 'sortname' : 'Ada göre', 'sortkind' : 'Türe göre', 'sortsize' : 'Boyuta göre', 'sortdate' : 'Tarihe göre', 'sortFoldersFirst' : 'Önce klasörler', 'sortperm' : 'izinlere göre', // from v2.1.13 added 13.06.2016 'sortmode' : 'moduna göre', // from v2.1.13 added 13.06.2016 'sortowner' : 'sahibine göre', // from v2.1.13 added 13.06.2016 'sortgroup' : 'grubuna göre', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Ayrıca ağaç görünümü', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'YeniDosya.txt', // added 10.11.2015 'untitled folder' : 'YeniKlasor', // added 10.11.2015 'Archive' : 'YeniArsiv', // from v2.1 added 10.11.2015 'untitled file' : 'YeniDosya.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Dosya', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Onay gerekli', 'confirmRm' : 'Dosyaları kaldırmak istediğinden emin misin?
    Bu işlem geri alınamaz!', 'confirmRepl' : 'Eski dosya yenisi ile değiştirilsin mi?', 'confirmRest' : 'Mevcut öge çöp kutusundaki ögeyle değiştirilsin mi?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8 değil
    UTF-8\'e dönüştürülsün mü?
    Dönüştürme sonrası kaydedebilmek için içeriğin UTF-8 olması gerekir.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Bu dosyanın karakter kodlaması tespit edilemedi. Düzenleme için geçici olarak UTF-8\'e dönüştürülmesi gerekir.
    Lütfen bu dosyanın karakter kodlamasını seçin.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Düzenlenmiş içerik.
    Değişiklikleri kaydetmek istemiyorsanız son yapılanlar kaybolacak.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Öğeleri çöp kutusuna taşımak istediğinizden emin misiniz?', //from v2.1.24 added 29.4.2017 'confirmMove' : '"$1" değiştirmek istediğinizden emin misiniz?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Tümüne uygula', 'name' : 'İsim', 'size' : 'Boyut', 'perms' : 'Yetkiler', 'modify' : 'Değiştirildi', 'kind' : 'Tür', 'read' : 'oku', 'write' : 'yaz', 'noaccess' : 'erişim yok', 'and' : 've', 'unknown' : 'bilinimiyor', 'selectall' : 'Tüm dosyaları seç', 'selectfiles' : 'Dosya(lar)ı seç', 'selectffile' : 'İlk dosyayı seç', 'selectlfile' : 'Son dosyayı seç', 'viewlist' : 'Liste görünümü', 'viewicons' : 'Simge görünümü', 'viewSmall' : 'Small iconlar', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medium iconlar', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Large iconlar', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra large iconlar', // from v2.1.39 added 22.5.2018 'places' : 'Yerler', 'calc' : 'Hesapla', 'path' : 'Yol', 'aliasfor' : 'Takma adı:', 'locked' : 'Kilitli', 'dim' : 'Ölçüler', 'files' : 'Dosyalar', 'folders' : 'Klasörler', 'items' : 'Nesneler', 'yes' : 'evet', 'no' : 'hayır', 'link' : 'Bağlantı', 'searcresult' : 'Arama sonuçları', 'selected' : 'Seçili öğeler', 'about' : 'Hakkında', 'shortcuts' : 'Kısayollar', 'help' : 'Yardım', 'webfm' : 'Web dosyası yöneticisi', 'ver' : 'Sürüm', 'protocolver' : 'protokol sürümü', 'homepage' : 'Proje Anasayfası', 'docs' : 'Belgeler', 'github' : 'Github\'ta bizi takip edin', 'twitter' : 'Twitter\'da bizi takip edin', 'facebook' : 'Facebook\'ta bize katılın', 'team' : 'Takım', 'chiefdev' : 'geliştirici şefi', 'developer' : 'geliştirici', 'contributor' : 'iştirakçi', 'maintainer' : 'bakıcı', 'translator' : 'çeviri', 'icons' : 'Simgeler', 'dontforget' : 've havlunuzu almayı unutmayın', 'shortcutsof' : 'Kısayollar devre dışı', 'dropFiles' : 'Dosyaları buraya taşı', 'or' : 'veya', 'selectForUpload' : 'Yüklemek için dosyaları seçin', 'moveFiles' : 'Dosyaları taşı', 'copyFiles' : 'Dosyaları kopyala', 'restoreFiles' : 'Öğeleri geri yükle', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Yerlerinden sil', 'aspectRatio' : 'Görünüm oranı', 'scale' : 'Ölçeklendir', 'width' : 'Genişlik', 'height' : 'Yükseklik', 'resize' : 'Boyutlandır', 'crop' : 'Kırp', 'rotate' : 'Döndür', 'rotate-cw' : '90 derece sağa döndür', 'rotate-ccw' : '90 derece sola döndür', 'degree' : 'Derece', 'netMountDialogTitle' : 'Bağlı (Mount) ağ birimi', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Sunucu', // added 18.04.2012 'port' : 'Kapı(Port)', // added 18.04.2012 'user' : 'Kullanıcı', // added 18.04.2012 'pass' : 'Şifre', // added 18.04.2012 'confirmUnmount' : 'Bağlantı kesilsin mi $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Dosyaları tarayıcıdan yapıştır veya bırak', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Dosyaları buraya yapıştır veya bırak', // from v2.1 added 07.04.2014 'encoding' : 'Kodlama', // from v2.1 added 19.12.2014 'locale' : 'Yerel', // from v2.1 added 19.12.2014 'searchTarget' : 'Hedef: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Giriş MIME Türüne Göre Arama', // from v2.1 added 22.5.2015 'owner' : 'Sahibi', // from v2.1 added 20.6.2015 'group' : 'Grup', // from v2.1 added 20.6.2015 'other' : 'Diğer', // from v2.1 added 20.6.2015 'execute' : 'Çalıştır', // from v2.1 added 20.6.2015 'perm' : 'Yetki', // from v2.1 added 20.6.2015 'mode' : 'Mod', // from v2.1 added 20.6.2015 'emptyFolder' : 'Klasör boş', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Klasör boş\\A Eklemek için sürükleyin', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Klasör boş\\A Eklemek için basılı tutun', // from v2.1.6 added 30.12.2015 'quality' : 'Kalite', // from v2.1.6 added 5.1.2016 'autoSync' : 'Otomatik senkronizasyon', // from v2.1.6 added 10.1.2016 'moveUp' : 'Yukarı taşı', // from v2.1.6 added 18.1.2016 'getLink' : 'URL bağlantısı alın', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Seçili öğeler ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Klasör kimliği', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Çevrimdışı erişime izin ver', // from v2.1.10 added 3.25.2016 'reAuth' : 'Yeniden kimlik doğrulaması için', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Şimdi yükleniyor...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Çoklu dosya aç', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '$1 dosyalarını açmaya çalışıyorsunuz. Tarayıcıda açmak istediğinizden emin misiniz?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Arama hedefinde eşleşen sonuç bulunamadı.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Dosya düzenleniyor.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 öğe seçtiniz.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Panonuzda $1 öğeniz var.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Artan arama yalnızca geçerli görünümden yapılır.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Eski durumuna getir', // from v2.1.15 added 3.8.2016 'complete' : '$1 tamamlandı', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Durum menüsü', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Sayfa çevir', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Disk kök dizini', // from v2.1.16 added 16.9.2016 'reset' : 'Sıfırla', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Arkaplan rengi', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Renk seçici', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Izgara', // from v2.1.16 added 4.10.2016 'enabled' : 'Etkin', // from v2.1.16 added 4.10.2016 'disabled' : 'Engelli', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Geçerli görünümde arama sonucu bulunamadı. Arama sonucunu genişletmek için \\APress [Enter] yapın', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Geçerli görünümde ilk harf arama sonuçları boş.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Metin etiketi', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 dakika kaldı', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Seçilen kodlamayla yeniden aç', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Seçilen kodlamayla kaydet', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Klasör seç', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'İlk arama sayfası', // from v2.1.23 added 24.3.2017 'presets' : 'Hazır ayarlar', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'çok fazla öge var çöp kutusuna atılamaz.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Metin alanı(TextArea)', // from v2.1.25 added 14.6.2017 'folderToEmpty' : '"$1" klasörünü boşalt.', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '"$1" klasöründe öge yok.', // from v2.1.25 added 22.6.2017 'preference' : 'Tercih', // from v2.1.26 added 28.6.2017 'language' : 'Dil ayarları', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Bu tarayıcıda kayıtlı ayarları başlat', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Araç çubuğu ayarları', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 karakter kaldı', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 satır kaldı.', // from v2.1.52 added 16.1.2020 'sum' : 'Toplam', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Kaba dosya boyutu', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fare ile üzerine gelince diyalog öğesi odaklansın', // from v2.1.30 added 2.11.2017 'select' : 'Seç', // from v2.1.30 added 23.11.2017 'selectAction' : 'Dosya seçildiğinde işleme al', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Geçen sefer kullanılan editörle aç', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Zıt seçim', // from v2.1.30 added 25.11.2017 'renameMultiple' : '$1 seçilen öğeleri $2 gibi yeniden adlandırmak istediğinizden emin misiniz?
    Bu geri alınamaz!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Yığın adını değiştir', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Sayı', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Ön ek kele', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Son ek ekle', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Uzantıyı değiştir', // from v2.1.31 added 8.12.2017 'columnPref' : 'Sütun ayarları (Liste görünümü)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Tüm değişiklikler hemen arşive yansıtılacaktır.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Herhangi bir değişiklik, bu birimi kaldırılıncaya kadar yansıtılmayacaktır.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Bu cihaza monte edilen aşağıdaki birim (ler) de bağlanmamıştır. Çıkardığınızdan emin misiniz?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Seçim Bilgisi', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Dosya imza(hash) algoritmaları', // from v2.1.33 added 10.3.2018 'infoItems' : 'öğelerin bilgisi (Seçim Bilgi Paneli)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Çıkmak için tekrar basın.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Araç Çubuğu', // from v2.1.38 added 4.4.2018 'workspace' : 'Çalışma alanı', // from v2.1.38 added 4.4.2018 'dialog' : 'Diyalog', // from v2.1.38 added 4.4.2018 'all' : 'Tümü', // from v2.1.38 added 4.4.2018 'iconSize' : 'İcon Boyutu (İcon Görünümü İçin)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Maksimum düzenleyici penceresini aç', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'API ile dönüşüm şu anda mevcut olmadığından, lütfen web sitesinde dönüştürün.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Dönüştürmeden sonra, dönüştürülen dosyayı kaydetmek için öğe URL\'si veya indirilen bir dosya ile karşıya yüklemeniz gerekir.', //from v2.1.40 added 8.7.2018 'convertOn' : ' $1 site çevrildi', // from v2.1.40 added 10.7.2018 'integrations' : 'Entegrasyonlar', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Bu elFinder aşağıdaki harici hizmetlere entegre edilmiştir. Lütfen kullanmadan önce kullanım koşullarını, gizlilik politikasını vb. Kontrol edin.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Gizli ögeleri aç.', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Gizli ögeleri kapat.', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Gizli ögeleri aç/kapat', // from v2.1.41 added 24.7.2018 'makefileTypes' : '"Yeni dosya" ile etkinleştirilecek dosya türleri', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Text dosyası tipi.', // from v2.1.41 added 7.8.2018 'add' : 'Ekle', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Varsayılan', // from v2.1.43 added 19.10.2018 'description' : 'Açıklama', // from v2.1.43 added 19.10.2018 'website' : 'Websayfası', // from v2.1.43 added 19.10.2018 'author' : 'Yazar', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Lisans', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Bu öğe kaydedilemez. Düzenlemeleri kaybetmemek için PC\'nize aktarmanız gerekir.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dosyayı seçmek için çift tıklayın.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Tam ekran modunu kullan', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Bilinmiyor', 'kindRoot' : 'Sürücü Kök dizini', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Klasör', 'kindSelects' : 'Seçim', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias (Takma ad)', 'kindAliasBroken' : 'Bozuk alias', // applications 'kindApp' : 'Uygulama', 'kindPostscript' : 'Postscript dosyası', 'kindMsOffice' : 'Microsoft Office dosyası', 'kindMsWord' : 'Microsoft Word dosyası', 'kindMsExcel' : 'Microsoft Excel dosyası', 'kindMsPP' : 'Microsoft Powerpoint sunumu', 'kindOO' : 'Open Office dosyası', 'kindAppFlash' : 'Flash uygulaması', 'kindPDF' : 'PDF', 'kindTorrent' : 'Bittorrent dosyası', 'kind7z' : '7z arşivi', 'kindTAR' : 'TAR arşivi', 'kindGZIP' : 'GZIP arşivi', 'kindBZIP' : 'BZIP arşivi', 'kindXZ' : 'XZ arşivi', 'kindZIP' : 'ZIP arşivi', 'kindRAR' : 'RAR arşivi', 'kindJAR' : 'Java JAR dosyası', 'kindTTF' : 'True Type fontu', 'kindOTF' : 'Open Type fontu', 'kindRPM' : 'RPM paketi', // texts 'kindText' : 'Metin dosyası', 'kindTextPlain' : 'Düz metin', 'kindPHP' : 'PHP kodu', 'kindCSS' : 'CSS dosyası', 'kindHTML' : 'HTML dosyası', 'kindJS' : 'Javascript kodu', 'kindRTF' : 'Zengin Metin Belgesi', 'kindC' : 'C kodu', 'kindCHeader' : 'C başlık kodu', 'kindCPP' : 'C++ kodu', 'kindCPPHeader' : 'C++ başlık kodu', 'kindShell' : 'Unix shell scripti', 'kindPython' : 'Python kodu', 'kindJava' : 'Java kodu', 'kindRuby' : 'Ruby kodu', 'kindPerl' : 'Perl scripti', 'kindSQL' : 'SQL kodu', 'kindXML' : 'XML dosyası', 'kindAWK' : 'AWK kodu', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Docbook XML dosyası', 'kindMarkdown' : 'Markdown dosyası', // added 20.7.2015 // images 'kindImage' : 'Resim', 'kindBMP' : 'BMP dosyası', 'kindJPEG' : 'JPEG dosyası', 'kindGIF' : 'GIF dosyası', 'kindPNG' : 'PNG dosyası', 'kindTIFF' : 'TIFF dosyası', 'kindTGA' : 'TGA dosyası', 'kindPSD' : 'Adobe Photoshop dosyası', 'kindXBITMAP' : 'X bitmap dosyası', 'kindPXM' : 'Pixelmator dosyası', // media 'kindAudio' : 'Ses ortamı', 'kindAudioMPEG' : 'MPEG ses', 'kindAudioMPEG4' : 'MPEG-4 ses', 'kindAudioMIDI' : 'MIDI ses', 'kindAudioOGG' : 'Ogg Vorbis ses', 'kindAudioWAV' : 'WAV ses', 'AudioPlaylist' : 'MP3 listesi', 'kindVideo' : 'Video ortamı', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); application/library/js/i18n/elfinder.he.js000064400000045000146731177160014443 0ustar00/** * עברית translation * @author Yaron Shahrabani * @version 2015-11-02 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.he = { translator : 'Yaron Shahrabani ', language : 'עברית', direction : 'rtl', dateFormat : 'd.m.Y H:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM messages : { /********************************** errors **********************************/ 'error' : 'שגיאה', 'errUnknown' : 'שגיאה בלתי מוכרת.', 'errUnknownCmd' : 'פקודה בלתי מוכרת.', 'errJqui' : 'תצורת ה־jQuery UI שגויה. יש לכלול רכיבים הניתנים לבחירה, גרירה והשלכה.', 'errNode' : 'elFinder דורש יצירה של רכיב DOM.', 'errURL' : 'התצורה של elFinder שגויה! אפשרות הכתובת (URL) לא הוגדרה.', 'errAccess' : 'הגישה נדחית.', 'errConnect' : 'לא ניתן להתחבר למנגנון.', 'errAbort' : 'החיבור בוטל.', 'errTimeout' : 'זמן החיבור פג.', 'errNotFound' : 'לא נמצא מנגנון.', 'errResponse' : 'תגובת המנגנון שגויה.', 'errConf' : 'תצורת המנגנון שגויה.', 'errJSON' : 'המודול PHP JSON לא מותקן.', 'errNoVolumes' : 'אין כוננים זמינים לקריאה.', 'errCmdParams' : 'פרמטרים שגויים לפקודה „$1“.', 'errDataNotJSON' : 'הנתונים אינם JSON.', 'errDataEmpty' : 'הנתונים ריקים.', 'errCmdReq' : 'בקשה למנגנון דורשת שם פקודה.', 'errOpen' : 'לא ניתן לפתוח את „$1“.', 'errNotFolder' : 'הפריט אינו תיקייה.', 'errNotFile' : 'הפריט אינו קובץ.', 'errRead' : 'לא ניתן לקרוא את „$1“.', 'errWrite' : 'לא ניתן לכתוב אל „$1“.', 'errPerm' : 'ההרשאה נדחתה.', 'errLocked' : '„$1“ נעול ואין אפשרות לשנות את שמו, להעבירו או להסירו.', 'errExists' : 'קובץ בשם „$1“ כבר קיים.', 'errInvName' : 'שם הקובץ שגוי.', 'errFolderNotFound' : 'התיקייה לא נמצאה.', 'errFileNotFound' : 'הקובץ לא נמצא.', 'errTrgFolderNotFound' : 'תיקיית היעד „$1“ לא נמצאה.', 'errPopup' : 'הדפדפן מנע פתיחת חלון קובץ. כדי לפתוח קובץ יש לאפשר זאת בהגדרות הדפדפן.', 'errMkdir' : 'לא ניתן ליצור את התיקייה „$1“.', 'errMkfile' : 'לא ניתן ליצור את הקובץ „$1“.', 'errRename' : 'לא ניתן לשנות את השם של „$1“.', 'errCopyFrom' : 'העתקת קבצים מהכונן „$1“ אינה מאופשרת.', 'errCopyTo' : 'העתקת קבצים אל הכונן „$1“ אינה מאופשרת.', 'errUpload' : 'שגיאת העלאה.', // old name - errUploadCommon 'errUploadFile' : 'לא ניתן להעלות את „$1“.', // old name - errUpload 'errUploadNoFiles' : 'לא נמצאו קבצים להעלאה.', 'errUploadTotalSize' : 'הנתונים חורגים מהגודל המרבי המותר.', // old name - errMaxSize 'errUploadFileSize' : 'הקובץ חורג מהגודל המרבי המותר.', // old name - errFileMaxSize 'errUploadMime' : 'סוג הקובץ אינו מורשה.', 'errUploadTransfer' : 'שגיאת העברה „$1“.', 'errNotReplace' : 'הפריט „$1“ כבר קיים במיקום זה ואי אפשר להחליפו בפריט מסוג אחר.', // new 'errReplace' : 'לא ניתן להחליף את „$1“.', 'errSave' : 'לא ניתן לשמור את „$1“.', 'errCopy' : 'לא ניתן להעתיק את „$1“.', 'errMove' : 'לא ניתן להעביר את „$1“.', 'errCopyInItself' : 'לא ניתן להעתיק את „$1“ לתוך עצמו.', 'errRm' : 'לא ניתן להסיר את „$1“.', 'errRmSrc' : 'לא ניתן להסיר את קובצי המקור.', 'errExtract' : 'לא ניתן לחלץ קבצים מהארכיון „$1“.', 'errArchive' : 'לא ניתן ליצור ארכיון.', 'errArcType' : 'סוג הארכיון אינו נתמך.', 'errNoArchive' : 'הקובץ אינו ארכיון או שסוג הקובץ שלו אינו נתמך.', 'errCmdNoSupport' : 'המנגנון אינו תומך בפקודה זו.', 'errReplByChild' : 'לא ניתן להחליף את התיקייה „$1“ בפריט מתוכה.', 'errArcSymlinks' : 'מטעמי אבטחה לא ניתן לחלץ ארכיונים שמכילים קישורים סימבוליים או קבצים עם שמות בלתי מורשים.', // edited 24.06.2012 'errArcMaxSize' : 'הארכיון חורג מהגודל המרבי המותר.', 'errResize' : 'לא ניתן לשנות את הגודל של „$1“.', 'errResizeDegree' : 'מעלות ההיפוך שגויות.', // added 7.3.2013 'errResizeRotate' : 'לא ניתן להפוך את התמונה.', // added 7.3.2013 'errResizeSize' : 'גודל התמונה שגוי.', // added 7.3.2013 'errResizeNoChange' : 'גודל התמונה לא השתנה.', // added 7.3.2013 'errUsupportType' : 'סוג הקובץ אינו נתמך.', 'errNotUTF8Content' : 'הקובץ „$1“ הוא לא בתסדיר UTF-8 ולא ניתן לערוך אותו.', // added 9.11.2011 'errNetMount' : 'לא ניתן לעגן את „$1“.', // added 17.04.2012 'errNetMountNoDriver' : 'פרוטוקול בלתי נתמך.', // added 17.04.2012 'errNetMountFailed' : 'העיגון נכשל.', // added 17.04.2012 'errNetMountHostReq' : 'נדרש מארח.', // added 18.04.2012 'errSessionExpires' : 'ההפעלה שלך פגה עקב חוסר פעילות.', 'errCreatingTempDir' : 'לא ניתן ליצור תיקייה זמנית: „$1“', 'errFtpDownloadFile' : 'לא ניתן להוריד קובץ מ־ FTP: „$1“', 'errFtpUploadFile' : 'לא ניתן להעלות קובץ ל־FTP: „$1“', 'errFtpMkdir' : 'לא ניתן ליצור תיקייה מרוחקת ב־FTP: „$1“', 'errArchiveExec' : 'שמירת הקבצים בארכיון נכשלה: „$1“', 'errExtractExec' : 'חילוץ קבצים נכשל: „$1“', /******************************* commands names ********************************/ 'cmdarchive' : 'יצירת ארכיון', 'cmdback' : 'חזרה', 'cmdcopy' : 'העתקה', 'cmdcut' : 'גזירה', 'cmddownload' : 'הורדה', 'cmdduplicate' : 'שכפול', 'cmdedit' : 'עריכת קובץ', 'cmdextract' : 'חילוץ קבצים מארכיון', 'cmdforward' : 'העברה', 'cmdgetfile' : 'בחירת קבצים', 'cmdhelp' : 'פרטים על התכנית הזו', 'cmdhome' : 'בית', 'cmdinfo' : 'קבלת מידע', 'cmdmkdir' : 'תיקייה חדשה', 'cmdmkfile' : 'קובץ חדש', 'cmdopen' : 'פתיחה', 'cmdpaste' : 'הדבקה', 'cmdquicklook' : 'תצוגה מקדימה', 'cmdreload' : 'רענון', 'cmdrename' : 'שינוי שם', 'cmdrm' : 'מחיקה', 'cmdsearch' : 'חיפוש קבצים', 'cmdup' : 'מעבר לתיקיית ההורה', 'cmdupload' : 'העלאת קבצים', 'cmdview' : 'תצוגה', 'cmdresize' : 'שינוי גודל והיפוך', 'cmdsort' : 'מיון', 'cmdnetmount' : 'עיגון כונן רשת', // added 18.04.2012 /*********************************** buttons ***********************************/ 'btnClose' : 'סגירה', 'btnSave' : 'שמירה', 'btnRm' : 'הסרה', 'btnApply' : 'החלה', 'btnCancel' : 'ביטול', 'btnNo' : 'לא', 'btnYes' : 'כן', 'btnMount' : 'עיגון', // added 18.04.2012 /******************************** notifications ********************************/ 'ntfopen' : 'פתיחת תיקייה', 'ntffile' : 'פתיחת קובץ', 'ntfreload' : 'רענון תוכן התיקייה', 'ntfmkdir' : 'תיקייה נוצרת', 'ntfmkfile' : 'קבצים נוצרים', 'ntfrm' : 'קבצים נמחקים', 'ntfcopy' : 'קבצים מועתקים', 'ntfmove' : 'קבצים מועברים', 'ntfprepare' : 'העתקת קבצים בהכנה', 'ntfrename' : 'שמות קבצים משתנים', 'ntfupload' : 'קבצים נשלחים', 'ntfdownload' : 'קבצים מתקבלים', 'ntfsave' : 'שמירת קבצים', 'ntfarchive' : 'ארכיון נוצר', 'ntfextract' : 'מחולצים קבצים מארכיון', 'ntfsearch' : 'קבצים בחיפוש', 'ntfresize' : 'גודל קבצים משתנה', 'ntfsmth' : 'מתבצעת פעולה', 'ntfloadimg' : 'נטענת תמונה', 'ntfnetmount' : 'כונן רשת מעוגן', // added 18.04.2012 'ntfdim' : 'ממדי תמונה מתקבלים', // added 20.05.2013 /************************************ dates **********************************/ 'dateUnknown' : 'לא ידוע', 'Today' : 'היום', 'Yesterday' : 'מחר', 'msJan' : 'ינו׳', 'msFeb' : 'פבר׳', 'msMar' : 'מרץ', 'msApr' : 'אפר׳', 'msMay' : 'מאי', 'msJun' : 'יונ׳', 'msJul' : 'יול׳', 'msAug' : 'אוג׳', 'msSep' : 'ספט׳', 'msOct' : 'אוק׳', 'msNov' : 'נוב׳', 'msDec' : 'דצמ׳', 'January' : 'ינואר', 'February' : 'פברואר', 'March' : 'מרץ', 'April' : 'אפריל', 'May' : 'מאי', 'June' : 'יוני', 'July' : 'יולי', 'August' : 'אוגוסט', 'September' : 'ספטמבר', 'October' : 'אוקטובר', 'November' : 'נובמבר', 'December' : 'דצמבר', 'Sunday' : 'יום ראשון', 'Monday' : 'יום שני', 'Tuesday' : 'יום שלישי', 'Wednesday' : 'יום רביעי', 'Thursday' : 'יום חמישי', 'Friday' : 'יום שישי', 'Saturday' : 'שבת', 'Sun' : 'א׳', 'Mon' : 'ב׳', 'Tue' : 'ג׳', 'Wed' : 'ד׳', 'Thu' : 'ה', 'Fri' : 'ו׳', 'Sat' : 'ש׳', /******************************** sort variants ********************************/ 'sortname' : 'לפי שם', 'sortkind' : 'לפי סוג', 'sortsize' : 'לפי גודל', 'sortdate' : 'לפי תאריך', 'sortFoldersFirst' : 'תיקיות תחילה', /********************************** messages **********************************/ 'confirmReq' : 'נדרש אישור', 'confirmRm' : 'להסיר את הקבצים?
    פעולה זו בלתי הפיכה!', 'confirmRepl' : 'להחליף קובץ ישן בקובץ חדש?', 'apllyAll' : 'להחיל על הכול', 'name' : 'שם', 'size' : 'גודל', 'perms' : 'הרשאות', 'modify' : 'שינוי', 'kind' : 'סוג', 'read' : 'קריאה', 'write' : 'כתיבה', 'noaccess' : 'אין גישה', 'and' : 'וגם', 'unknown' : 'לא ידוע', 'selectall' : 'בחירת כל הקבצים', 'selectfiles' : 'בחירת קובץ אחד ומעלה', 'selectffile' : 'בחירת הקובץ הראשון', 'selectlfile' : 'בחירת הקובץ האחרון', 'viewlist' : 'תצוגת רשימה', 'viewicons' : 'תצוגת סמלים', 'places' : 'מיקומים', 'calc' : 'חישוב', 'path' : 'נתיב', 'aliasfor' : 'כינוי עבור', 'locked' : 'נעול', 'dim' : 'ממדים', 'files' : 'קבצים', 'folders' : 'תיקיות', 'items' : 'פריטים', 'yes' : 'כן', 'no' : 'לא', 'link' : 'קישור', 'searcresult' : 'תוצאות חיפוש', 'selected' : 'קבצים נבחרים', 'about' : 'על אודות', 'shortcuts' : 'קיצורי דרך', 'help' : 'עזרה', 'webfm' : 'מנהל קבצים בדפדפן', 'ver' : 'גרסה', 'protocolver' : 'גרסת פרוטוקול', 'homepage' : 'דף הבית של המיזם', 'docs' : 'תיעוד', 'github' : 'פילוג עותק ב־Github', 'twitter' : 'לעקוב אחרינו בטוויטר', 'facebook' : 'להצטרף אלינו בפייסבוק', 'team' : 'צוות', 'chiefdev' : 'מפתח ראשי', 'developer' : 'מתכנת', 'contributor' : 'תורם', 'maintainer' : 'מתחזק', 'translator' : 'מתרגם', 'icons' : 'סמלים', 'dontforget' : 'לא לשכוח לקחת את המגבת שלך', 'shortcutsof' : 'קיצורי הדרך מנוטרלים', 'dropFiles' : 'ניתן להשליך את הקבצים לכאן', 'or' : 'או', 'selectForUpload' : 'לבחור קבצים להעלאה', 'moveFiles' : 'העברת קבצים', 'copyFiles' : 'העתקת קבצים', 'rmFromPlaces' : 'הסרה ממיקומים', 'aspectRatio' : 'יחס תצוגה', 'scale' : 'מתיחה', 'width' : 'רוחב', 'height' : 'גובה', 'resize' : 'שינוי הגודל', 'crop' : 'חיתוך', 'rotate' : 'היפוך', 'rotate-cw' : 'היפוך ב־90 מעלות נגד השעון', 'rotate-ccw' : 'היפוך ב־90 מעלות עם השעון CCW', 'degree' : '°', 'netMountDialogTitle' : 'עיגון כונן רשת', // added 18.04.2012 'protocol' : 'פרוטוקול', // added 18.04.2012 'host' : 'מארח', // added 18.04.2012 'port' : 'פתחה', // added 18.04.2012 'user' : 'משתמש', // added 18.04.2012 'pass' : 'ססמה', // added 18.04.2012 /********************************** mimetypes **********************************/ 'kindUnknown' : 'בלתי ידוע', 'kindFolder' : 'תיקייה', 'kindAlias' : 'כינוי', 'kindAliasBroken' : 'כינוי שבור', // applications 'kindApp' : 'יישום', 'kindPostscript' : 'מסמך Postscript', 'kindMsOffice' : 'מסמך Microsoft Office', 'kindMsWord' : 'מסמך Microsoft Word', 'kindMsExcel' : 'מסמך Microsoft Excel', 'kindMsPP' : 'מצגת Microsoft Powerpoint', 'kindOO' : 'מסמך Open Office', 'kindAppFlash' : 'יישום Flash', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'קובץ Bittorrent', 'kind7z' : 'ארכיון 7z', 'kindTAR' : 'ארכיון TAR', 'kindGZIP' : 'ארכיון GZIP', 'kindBZIP' : 'ארכיון BZIP', 'kindXZ' : 'ארכיון XZ', 'kindZIP' : 'ארכיון ZIP', 'kindRAR' : 'ארכיון RAR', 'kindJAR' : 'קובץ JAR של Java', 'kindTTF' : 'גופן True Type', 'kindOTF' : 'גופן Open Type', 'kindRPM' : 'חבילת RPM', // texts 'kindText' : 'מסמך טקסט', 'kindTextPlain' : 'טקסט פשוט', 'kindPHP' : 'מקור PHP', 'kindCSS' : 'גיליון סגנון מדורג', 'kindHTML' : 'מסמך HTML', 'kindJS' : 'מקור Javascript', 'kindRTF' : 'תבנית טקסט עשיר', 'kindC' : 'מקור C', 'kindCHeader' : 'מקור כותרת C', 'kindCPP' : 'מקור C++', 'kindCPPHeader' : 'מקור כותרת C++', 'kindShell' : 'תסריט מעטפת יוניקס', 'kindPython' : 'מקור Python', 'kindJava' : 'מקור Java', 'kindRuby' : 'מקור Ruby', 'kindPerl' : 'תסריט Perl', 'kindSQL' : 'מקור SQL', 'kindXML' : 'מקור XML', 'kindAWK' : 'מקור AWK', 'kindCSV' : 'ערכים מופרדים בפסיקים', 'kindDOCBOOK' : 'מסמךDocbook XML', // images 'kindImage' : 'תמונה', 'kindBMP' : 'תמונת BMP', 'kindJPEG' : 'תמונת JPEG', 'kindGIF' : 'תמונת GIF', 'kindPNG' : 'תמונת PNG', 'kindTIFF' : 'תמונת TIFF', 'kindTGA' : 'תמונת TGA', 'kindPSD' : 'תמונת Adobe Photoshop', 'kindXBITMAP' : 'תמונת מפת סיביות X', 'kindPXM' : 'תמונת Pixelmator', // media 'kindAudio' : 'מדיה מסוג שמע', 'kindAudioMPEG' : 'שמע MPEG', 'kindAudioMPEG4' : 'שמע MPEG-4', 'kindAudioMIDI' : 'שמע MIDI', 'kindAudioOGG' : 'שמע Ogg Vorbis', 'kindAudioWAV' : 'שמע WAV', 'AudioPlaylist' : 'רשימת נגינה MP3', 'kindVideo' : 'מדיה מסוג וידאו', 'kindVideoDV' : 'סרטון DV', 'kindVideoMPEG' : 'סרטון MPEG', 'kindVideoMPEG4' : 'סרטון MPEG-4', 'kindVideoAVI' : 'סרטון AVI', 'kindVideoMOV' : 'סרטון Quick Time', 'kindVideoWM' : 'סרטון Windows Media', 'kindVideoFlash' : 'סרטון Flash', 'kindVideoMKV' : 'סרטון Matroska', 'kindVideoOGG' : 'סרטון Ogg' } }; })); application/library/js/i18n/elfinder.sr.js000064400000037313146731177160014503 0ustar00 /** * Serbian translation * @author Momčilo m0k1 Mićanović * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.sr = { translator : 'Momčilo m0k1 Mićanović <moki.forum@gmail.com>', language : 'Srpski', direction : 'ltr', dateFormat : 'd.m.Y H:i', fancyDateFormat : '$1 H:i', messages : { /********************************** errors **********************************/ 'error' : 'Greška', 'errUnknown' : 'Nepoznata greška.', 'errUnknownCmd' : 'Nepoznata komanda.', 'errJqui' : 'Neispravna konfiguracija jQuery UI. Komponente koje mogu da se odabiru, povlače, izbacuju moraju biti uključene.', 'errNode' : 'elFinder zahteva DOM Element da bude kreiran.', 'errURL' : 'Neispravna elFinder konfiguracija! URL opcija nije postavljena.', 'errAccess' : 'Pristup odbijen.', 'errConnect' : 'Nije moguće povezivanje s skriptom.', 'errAbort' : 'Veza prekinuta.', 'errTimeout' : 'Veza odbačena.', 'errNotFound' : 'Skripta nije pronađena.', 'errResponse' : 'Neispravan odgovor skripte.', 'errConf' : 'Neispravna konfiguracija skripte.', 'errJSON' : 'PHP JSON modul nije instaliran.', 'errNoVolumes' : 'Vidljivi volumeni nisu dostupni.', 'errCmdParams' : 'Nevažeći parametri za komandu "$1".', 'errDataNotJSON' : 'Podaci nisu JSON.', 'errDataEmpty' : 'Podaci nisu prazni.', 'errCmdReq' : 'Skripta zahteva komandu.', 'errOpen' : 'Nemoguće otvoriti "$1".', 'errNotFolder' : 'Objekat nije folder.', 'errNotFile' : 'Objekat nije datoteka.', 'errRead' : 'Nemoguće pročitati "$1".', 'errWrite' : 'Nemoguće pisati u "$1".', 'errPerm' : 'Dozvola je odbijena.', 'errLocked' : '"$1" je zaključan i nemože biti preimenovan, premešten ili obrisan.', 'errExists' : 'Datoteka zvana "$1" već postoji.', 'errInvName' : 'Neispravno ime datoteke.', 'errFolderNotFound' : 'Folder nije pronađen.', 'errFileNotFound' : 'Datoteka nije pronađena.', 'errTrgFolderNotFound' : 'Izabrani folder "$1" nije pronađen.', 'errPopup' : 'Pretraživač sprečava otvaranje iskačućih prozora. Da otvorite datoteku uključite iskačuće prozore u opcijama pretraživača.', 'errMkdir' : 'Nemoguće kreirati folder "$1".', 'errMkfile' : 'Nemoguće kreirati datoteku "$1".', 'errRename' : 'Nemoguće preimenovati datoteku "$1".', 'errCopyFrom' : 'Kopiranje datoteki sa "$1" nije dozvoljeno.', 'errCopyTo' : 'Kopiranje datoteki na "$1" nije dozvoljeno.', 'errUpload' : 'Greska pri slanju.', 'errUploadFile' : 'Nemoguće poslati "$1".', 'errUploadNoFiles' : 'Nisu pronađene datoteke za slanje.', 'errUploadTotalSize' : 'Podaci premašuju najveću dopuštenu veličinu.', 'errUploadFileSize' : 'Datoteka premašuje najveću dopuštenu veličinu.', 'errUploadMime' : 'Vrsta datoteke nije dopuštena.', 'errUploadTransfer' : '"$1" greška prilikom slanja.', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Nemožeš sačuvati "$1".', 'errCopy' : 'Nemožeš kopirati "$1".', 'errMove' : 'Nemožeš premestiti "$1".', 'errCopyInItself' : 'Nemožeš kopirati "$1" na istu lokaciju.', 'errRm' : 'Nemožeš obrisati "$1".', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Nemoguće izvaditi datoteke iz "$1".', 'errArchive' : 'Nemoguće kreirati arhivu.', 'errArcType' : 'Nepodržani tip arhive.', 'errNoArchive' : 'Datoteka nije arhiva ili je nepodržani tip arhive.', 'errCmdNoSupport' : 'Skripta nepodržava ovu komandu.', 'errReplByChild' : 'Folder “$1” ne može biti zamenut stavkom koju sadrži.', 'errArcSymlinks' : 'Zbog bezbednosnih razloga ne možete raspakovati arhive koje sadrže simboličke veze ili datoteke sa nedozvoljenim imenima.', 'errArcMaxSize' : 'Arhiva je dostigla maksimalnu veličinu.', 'errResize' : 'Nemoguće promeniti veličinu "$1".', 'errResizeDegree' : 'Invalid rotate degree.', 'errResizeRotate' : 'Unable to rotate image.', 'errResizeSize' : 'Invalid image size.', 'errResizeNoChange' : 'Image size not changed.', 'errUsupportType' : 'nepodržan tip datoteke.', 'errNotUTF8Content' : 'Datoteka "$1" nije u UTF-8 formati i ne može biti izmenjena.', 'errNetMount' : 'Nije moguće montirati "$1".', 'errNetMountNoDriver' : 'Nepodržani protokol.', 'errNetMountFailed' : 'Montiranje neuspelo.', 'errNetMountHostReq' : 'Host je potreban.', 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'Kreiraj arhivu', 'cmdback' : 'Nazad', 'cmdcopy' : 'Kopiraj', 'cmdcut' : 'Iseci', 'cmddownload' : 'Preuzmi', 'cmdduplicate' : 'Dupliraj', 'cmdedit' : 'Izmeni datoteku', 'cmdextract' : 'Raspakuj arhivu', 'cmdforward' : 'Napred', 'cmdgetfile' : 'Izaberi datoteke', 'cmdhelp' : 'O ovom softveru', 'cmdhome' : 'Početna', 'cmdinfo' : 'Proveri informacije', 'cmdmkdir' : 'Novi folder', 'cmdmkfile' : 'Nova datoteka', 'cmdopen' : 'Otvori', 'cmdpaste' : 'Zalepi', 'cmdquicklook' : 'Pregledaj', 'cmdreload' : 'Povno učitaj', 'cmdrename' : 'Preimenuj', 'cmdrm' : 'Obriši', 'cmdsearch' : 'Pronađi datoteke', 'cmdup' : 'Idi na nadređeni folder', 'cmdupload' : 'Pošalji datoteke', 'cmdview' : 'Pogledaj', 'cmdresize' : 'Promeni veličinu slike', 'cmdsort' : 'Sortiraj', 'cmdnetmount' : 'Mount network volume', /*********************************** buttons ***********************************/ 'btnClose' : 'Zatvori', 'btnSave' : 'Sačuvaj', 'btnRm' : 'Obriši', 'btnApply' : 'Potvrdi', 'btnCancel' : 'Prekini', 'btnNo' : 'Ne', 'btnYes' : 'Da', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'Otvaranje foldera', 'ntffile' : 'Otvaranje datoteke', 'ntfreload' : 'Ponovo učitavanje sadržaja foldera', 'ntfmkdir' : 'Kreiranje foldera', 'ntfmkfile' : 'Kreiranje datoteke', 'ntfrm' : 'Brisanje datoteke', 'ntfcopy' : 'Kopiranje datoteke', 'ntfmove' : 'Premeštanje datoteke', 'ntfprepare' : 'Priprema za kopiranje dateoteke', 'ntfrename' : 'Primenovanje datoteke', 'ntfupload' : 'Slanje datoteke', 'ntfdownload' : 'Preuzimanje datoteke', 'ntfsave' : 'Čuvanje datoteke', 'ntfarchive' : 'Kreiranje arhive', 'ntfextract' : 'Izdvajanje datoteka iz arhive', 'ntfsearch' : 'Pretraga datoteka', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Radim nešto >_<', 'ntfloadimg' : 'Učitavanje slike', 'ntfnetmount' : 'Montiranje mrežnog volumena', 'ntfdim' : 'Acquiring image dimension', /************************************ dates **********************************/ 'dateUnknown' : 'nepoznat', 'Today' : 'Danas', 'Yesterday' : 'Sutra', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Avg', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'Mart', 'April' : 'April', 'May' : 'Maj', 'June' : 'Jun', 'July' : 'Jul', 'August' : 'Avgust', 'September' : 'Septembar', 'October' : 'Oktobar', 'November' : 'Novembar', 'December' : 'Decembar', 'Sunday' : 'Nedelja', 'Monday' : 'Ponedeljak', 'Tuesday' : 'Utorak', 'Wednesday' : 'Sreda', 'Thursday' : 'Četvrtak', 'Friday' : 'Petak', 'Saturday' : 'Subota', 'Sun' : 'Ned', 'Mon' : 'Pon', 'Tue' : 'Uto', 'Wed' : 'Sre', 'Thu' : 'Čet', 'Fri' : 'Pet', 'Sat' : 'Sub', /******************************** sort variants ********************************/ 'sortname' : 'po imenu', 'sortkind' : 'po vrsti', 'sortsize' : 'po veličini', 'sortdate' : 'po datumu', 'sortFoldersFirst' : 'Prvo folderi', /********************************** messages **********************************/ 'confirmReq' : 'Potrebna potvrda', 'confirmRm' : 'Da li ste sigurni da želite da obrišete datoteke?
    Ovo se ne može poništiti!', 'confirmRepl' : 'Zameniti stare datoteke sa novima?', 'apllyAll' : 'Potvrdi za sve', 'name' : 'Ime', 'size' : 'Veličina', 'perms' : 'Dozvole', 'modify' : 'Izmenjeno', 'kind' : 'Vrsta', 'read' : 'čitanje', 'write' : 'pisanje', 'noaccess' : 'bez pristupa', 'and' : 'i', 'unknown' : 'nepoznato', 'selectall' : 'Izaberi sve datoteke', 'selectfiles' : 'Izaberi datoteku(e)', 'selectffile' : 'Izaberi prvu datoteku', 'selectlfile' : 'Izaberi poslednju datoteku', 'viewlist' : 'Popisni prikaz', 'viewicons' : 'Pregled ikona', 'places' : 'Mesta', 'calc' : 'Izračunaj', 'path' : 'Putanja', 'aliasfor' : 'Nadimak za', 'locked' : 'Zaključano', 'dim' : 'Dimenzije', 'files' : 'Datoteke', 'folders' : 'Folderi', 'items' : 'Stavke', 'yes' : 'da', 'no' : 'ne', 'link' : 'Veza', 'searcresult' : 'Rezultati pretrage', 'selected' : 'odabrane stavke', 'about' : 'O softveru', 'shortcuts' : 'Prečice', 'help' : 'Pomoć', 'webfm' : 'Web menađer datoteka', 'ver' : 'Verzija', 'protocolver' : 'verzija protokla', 'homepage' : 'Adresa projekta', 'docs' : 'Dokumentacija', 'github' : 'Forkuj nas na Github', 'twitter' : 'Prati nas na twitter', 'facebook' : 'Pridruži nam se na facebook', 'team' : 'Tim', 'chiefdev' : 'glavni programer', 'developer' : 'programer', 'contributor' : 'pomoćnik', 'maintainer' : 'održavatelj', 'translator' : 'prevodilac', 'icons' : 'Ikone', 'dontforget' : 'i ne zaboravite da ponesete peškir', 'shortcutsof' : 'Prečice isključene', 'dropFiles' : 'Prevucite datoteke ovde', 'or' : 'ili', 'selectForUpload' : 'Odaberite datoteke za slanje', 'moveFiles' : 'Premesti datoteke', 'copyFiles' : 'Kopiraj datoteke', 'rmFromPlaces' : 'Ukloni iz mesta', 'aspectRatio' : 'Omer širine i visine', 'scale' : 'Razmera', 'width' : 'Širina', 'height' : 'Visina', 'resize' : 'Promeni veličinu', 'crop' : 'Iseci', 'rotate' : 'Rotiraj', 'rotate-cw' : 'Rotiraj 90 stepeni CW', 'rotate-ccw' : 'Rotiraj 90 stepeni CCW', 'degree' : 'Stepeni', 'netMountDialogTitle' : 'Montiraj mrežni volumen', 'protocol' : 'Protokol', 'host' : 'Host', 'port' : 'Port', 'user' : 'Korisničko Ime', 'pass' : 'Lozinka', /********************************** mimetypes **********************************/ 'kindUnknown' : 'Nepoznat', 'kindFolder' : 'Folder', 'kindAlias' : 'Nadimak', 'kindAliasBroken' : 'Neispravan nadimak', // applications 'kindApp' : 'Aplikacija', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint prezentacija', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash aplikacija', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent datoteka', 'kind7z' : '7z arhiva', 'kindTAR' : 'TAR arhiva', 'kindGZIP' : 'GZIP arhiva', 'kindBZIP' : 'BZIP arhiva', 'kindXZ' : 'XZ arhiva', 'kindZIP' : 'ZIP arhiva', 'kindRAR' : 'RAR arhiva', 'kindJAR' : 'Java JAR datoteka', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM paket', // texts 'kindText' : 'Teokstualni dokument', 'kindTextPlain' : 'Čist tekst', 'kindPHP' : 'PHP kod', 'kindCSS' : 'CSS kod', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript kod', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C kod', 'kindCHeader' : 'C header kod', 'kindCPP' : 'C++ kod', 'kindCPPHeader' : 'C++ header kod', 'kindShell' : 'Unix shell skripta', 'kindPython' : 'Python kod', 'kindJava' : 'Java kod', 'kindRuby' : 'Ruby kod', 'kindPerl' : 'Perl skripta', 'kindSQL' : 'SQL kod', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK kod', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML dokument', // images 'kindImage' : 'Slika', 'kindBMP' : 'BMP slika', 'kindJPEG' : 'JPEG slika', 'kindGIF' : 'GIF slika', 'kindPNG' : 'PNG slika', 'kindTIFF' : 'TIFF slika', 'kindTGA' : 'TGA slika', 'kindPSD' : 'Adobe Photoshop slika', 'kindXBITMAP' : 'X bitmap slika', 'kindPXM' : 'Pixelmator slika', // media 'kindAudio' : 'Zvuk', 'kindAudioMPEG' : 'MPEG zvuk', 'kindAudioMPEG4' : 'MPEG-4 zvuk', 'kindAudioMIDI' : 'MIDI zvuk', 'kindAudioOGG' : 'Ogg Vorbis zvuk', 'kindAudioWAV' : 'WAV zvuk', 'AudioPlaylist' : 'MP3 lista', 'kindVideo' : 'Video', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); application/library/js/i18n/elfinder.id.js000064400000063753146731177160014462 0ustar00/** * Bahasa Indonesia translation * @author Suyadi <1441177004009@student.unsika.ac.id> * @author Ammar Faizi * @version 2017-05-28 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.id = { translator : 'Suyadi <1441177004009@student.unsika.ac.id>, Ammar Faizi <ammarfaizi2@gmail.com>', language : 'Bahasa Indonesia', direction : 'ltr', dateFormat : 'j F, Y H:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM nonameDateFormat : 'd m Y - H : i : s', // to apply if upload file is noname: 120513172700 messages : { /********************************** errors **********************************/ 'error' : 'Kesalahan', 'errUnknown' : 'Kesalahan tak dikenal.', 'errUnknownCmd' : 'Perintah tak dikenal.', 'errJqui' : 'Konfigurasi jQuery UI tidak valid. Komponen pemilih, penyeret dan penaruh harus disertakan.', 'errNode' : 'elFinder membutuhkan pembuatan elemen DOM.', 'errURL' : 'Konfigurasi elFinder tidak valid! opsi URL belum diatur.', 'errAccess' : 'Akses ditolak.', 'errConnect' : 'Tidak dapat tersambung ke backend.', 'errAbort' : 'Koneksi dibatalkan.', 'errTimeout' : 'Waktu koneksi habis.', 'errNotFound' : 'Backend tidak ditemukan.', 'errResponse' : 'Respon backend tidak valid.', 'errConf' : 'Konfigurasi elFinder tidak valid.', 'errJSON' : 'Modul PHP JSON belum terpasang.', 'errNoVolumes' : 'Tidak tersedia ruang kosong.', 'errCmdParams' : 'Parameter perintah "$1" tidak valid.', 'errDataNotJSON' : 'Data bukan merupakan JSON.', 'errDataEmpty' : 'Data masih kosong.', 'errCmdReq' : 'Permintaan ke backend membutuhkan nama perintah.', 'errOpen' : 'Tidak dapat membuka "$1".', 'errNotFolder' : 'Obyek ini bukan folder.', 'errNotFile' : 'Obyek ini bukan berkas.', 'errRead' : 'Tidak dapat membaca "$1".', 'errWrite' : 'Tidak dapat menulis ke "$1".', 'errPerm' : 'Ijin ditolak.', 'errLocked' : '"$1" ini terkunci dan tak dapat dipidahkan, diubah atau dihapus.', 'errExists' : 'Berkas bernama "$1" sudah ada.', 'errInvName' : 'Nama berkas tidak valid.', 'errInvDirname' : 'Nama folder salah.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Folder tidak ditemukan.', 'errFileNotFound' : 'Berkas tidak ditemukan.', 'errTrgFolderNotFound' : 'Folder tujuan "$1" tidak ditemukan.', 'errPopup' : 'Peramban anda mencegah untuk membuka jendela munculan. Untuk dapat membuka berkas ini ubah pengaturan pada peramban anda.', 'errMkdir' : 'Tidak dapat membuat folder "$1".', 'errMkfile' : 'Tidak dapat membuat berkas "$1".', 'errRename' : 'Tidak dapat mengubah nama "$1".', 'errCopyFrom' : 'Tidak diizinkan menyalin berkas dari volume "$1".', 'errCopyTo' : 'tidak diizinkan menyalin berkas ke volume "$1".', 'errMkOutLink' : 'Tidak dapat membuat tautan diluar volume root.', // from v2.1 added 03.10.2015 'errUpload' : 'Kesalahan saat mengunggah.', // old name - errUploadCommon 'errUploadFile' : 'Tidak dapat mengunggah "$1".', // old name - errUpload 'errUploadNoFiles' : 'Tak ada berkas untuk diunggah.', 'errUploadTotalSize' : 'Data melampaui ukuran yang diperbolehkan.', // old name - errMaxSize 'errUploadFileSize' : 'Berkas melampaui ukuran yang diperbolehkan.', // old name - errFileMaxSize 'errUploadMime' : 'Jenis berkas ini tidak diijinkan.', 'errUploadTransfer' : 'Kesalahan transfer "$1".', 'errUploadTemp' : 'Tidak dapat membuat file sementara untuk diupload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Obyek "$1" sudah ada di lokasi ini dan tidak dapat ditimpa oleh obyek jenis lain.', // new 'errReplace' : 'Tidak dapat menimpa "$1".', 'errSave' : 'Tidak dapat menyimpan "$1".', 'errCopy' : 'Tidak dapat menyalin "$1".', 'errMove' : 'Tidak dapat memindahkan "$1".', 'errCopyInItself' : 'Tidak dapat menyalin "$1" ke dirinya sendiri.', 'errRm' : 'Tidak dapat menghapus "$1".', 'errTrash' : 'Tidak dapat masuk ke tempat sampah.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Tidak dapat menghapus sumber berkas.', 'errExtract' : 'Tidak dapat mengekstrak berkas dari "$1".', 'errArchive' : 'Tidak dapat membuat arsip.', 'errArcType' : 'Jenis arsip tidak didukung.', 'errNoArchive' : 'Berkas ini bukan arsip atau arsip jenis ini tidak didukung.', 'errCmdNoSupport' : 'Backend tidak mendukung perintah ini.', 'errReplByChild' : 'Folder “$1” tidak dapat ditimpa dengan berkas didalamnya.', 'errArcSymlinks' : 'Untuk keamanan tak diijinkan mengekstrak arsip berisi symlink atau jenis berkas yang tak diijinkan.', // edited 24.06.2012 'errArcMaxSize' : 'Arsip ini melampaui ukuran yang diijinkan.', 'errResize' : 'Tidak dapat mengubah ukuran "$1".', 'errResizeDegree' : 'Derajat putaran tidak valid.', // added 7.3.2013 'errResizeRotate' : 'Citra tidak diputar.', // added 7.3.2013 'errResizeSize' : 'Ukuran citra tidak valid.', // added 7.3.2013 'errResizeNoChange' : 'Ukuran citra tidak diubah.', // added 7.3.2013 'errUsupportType' : 'Jenis berkas tidak didukung.', 'errNotUTF8Content' : 'Berkas "$1" tidak dalam format UTF-8 dan tidak dapat disunting.', // added 9.11.2011 'errNetMount' : 'Tidak dapat membaca susunan "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protokol tidak didukung.', // added 17.04.2012 'errNetMountFailed' : 'Tidak dapat membaca susunannya.', // added 17.04.2012 'errNetMountHostReq' : 'Host harus ada.', // added 18.04.2012 'errSessionExpires' : 'Sesi anda telah kadaluwarsa karena lama tidak aktif.', 'errCreatingTempDir' : 'Tidak dapat membuat direktori sementara: "$1"', 'errFtpDownloadFile' : 'Tidak dapat mengunduh berkas dari FTP: "$1"', 'errFtpUploadFile' : 'Tidak dapat mengunggah berkas dari FTP: "$1"', 'errFtpMkdir' : 'Tidak dapat membuat remot direktori dari FTP: "$1"', 'errArchiveExec' : 'Kesalahan saat mengarsipkan berkas: "$1"', 'errExtractExec' : 'Kesalahan saat mengekstrak berkas: "$1"', 'errNetUnMount' : 'Tidak dapat melakukan mount.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Tidak cocok untuk konversi ke UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Coba dengan browser yang modern, Jika akan mengupload folder.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Waktu habis selama melakukan pencarian "$1". Hasil sementara.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-authorization dibutuhkan.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Berkas maksimal yang dipilih adalah $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Tidak dapat mengembalikan berkas dari tempat sampah. Tujuan tidak ditemukan.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Tidak ditemukan editor untuk file tipe ini.', // from v2.1.25 added 23.5.2017 /******************************* commands names ********************************/ 'cmdarchive' : 'Buat arsip', 'cmdback' : 'Kembali', 'cmdcopy' : 'Salin', 'cmdcut' : 'Potong', 'cmddownload' : 'Unduh', 'cmdduplicate' : 'Gandakan', 'cmdedit' : 'Sunting berkas', 'cmdextract' : 'Ekstrak berkas dari arsip', 'cmdforward' : 'Maju', 'cmdgetfile' : 'Pilih berkas', 'cmdhelp' : 'Tentang software ini', 'cmdhome' : 'Rumah', 'cmdinfo' : 'Dapatkan info', 'cmdmkdir' : 'Buat folder', 'cmdmkdirin' : 'Masuk ke folder baru', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Buat fail', 'cmdopen' : 'Buka', 'cmdpaste' : 'Tempel', 'cmdquicklook' : 'Pratinjau', 'cmdreload' : 'Muat-ulang', 'cmdrename' : 'Ganti nama', 'cmdrm' : 'Hapus', 'cmdtrash' : 'Sampahkan', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Kembalikan', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Cari berkas', 'cmdup' : 'Ke direktori utama', 'cmdupload' : 'Unggah berkas', 'cmdview' : 'Lihat', 'cmdresize' : 'Ubah ukuran & Putar', 'cmdsort' : 'Urutkan', 'cmdnetmount' : 'Baca-susun volume jaringan', // added 18.04.2012 'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'Ke Tempat', // added 28.12.2014 'cmdchmod' : 'Mode mengubah', // from v2.1 added 20.6.2015 'cmdopendir' : 'Membuka folder', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Reset column width', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Layar Penuh', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Pindah', // from v2.1.15 added 21.08.2016 /*********************************** buttons ***********************************/ 'btnClose' : 'Tutup', 'btnSave' : 'Simpan', 'btnRm' : 'Buang', 'btnApply' : 'Terapkan', 'btnCancel' : 'Batal', 'btnNo' : 'Tidak', 'btnYes' : 'Ya', 'btnMount' : 'Baca susunan', // added 18.04.2012 'btnApprove': 'Menuju ke $1 & setujui', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Konversi', // from v2.1 added 08.04.2014 'btnCwd' : 'Disini', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Semua', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015 'btnFileName':'Nama file', // from v2.1 added 22.5.2015 'btnSaveClose': 'Simpan & Tutup', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Ubah nama', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Ubah nama(Semua)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Sebelumnya ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Selanjutnya ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Simpan sebagai', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Buka folder', 'ntffile' : 'Buka berkas', 'ntfreload' : 'Muat-ulang isi folder', 'ntfmkdir' : 'Membuat direktori', 'ntfmkfile' : 'Membuat berkas', 'ntfrm' : 'Menghapus berkas', 'ntfcopy' : 'Salin berkas', 'ntfmove' : 'Pindahkan berkas', 'ntfprepare' : 'Persiapan menyalin berkas', 'ntfrename' : 'Ubah nama berkas', 'ntfupload' : 'Unggah berkas', 'ntfdownload' : 'Mengunduh berkas', 'ntfsave' : 'Simpan berkas', 'ntfarchive' : 'Membuat arsip', 'ntfextract' : 'Mengekstrak berkas dari arsip', 'ntfsearch' : 'Mencari berkas', 'ntfresize' : 'Mengubah ukuran citra', 'ntfsmth' : 'Melakukan sesuatu', 'ntfloadimg' : 'Memuat citra', 'ntfnetmount' : 'Membaca susunan volume jaringan', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Mendapatkan dimensi citra', // added 20.05.2013 'ntfreaddir' : 'Membaca informasi folder', // from v2.1 added 01.07.2013 'ntfurl' : 'Mendapatkan URL dari link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Dalam mode mengubah', // from v2.1 added 20.6.2015 'ntfpreupload': 'Sedang memverifikasi nama file yang diupload', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Membuat file untuk didownload', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Mengambil informasi path', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Sedang mengupload file', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Sedang melempar ke tempat sampah', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Sedang mengembalikan dari tempat sampah', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Mengecek folder tujuan', // from v2.1.24 added 3.5.2017 /*********************************** volumes *********************************/ 'volume_Trash' : 'Sampah', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'tak diketahui', 'Today' : 'Hari ini', 'Yesterday' : 'Kemarin', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Mei', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Agt', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nop', 'msDec' : 'Des', 'January' : 'Januari', 'February' : 'Pebruari', 'March' : 'Maret', 'April' : 'April', 'May' : 'Mei', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'Agustus', 'September' : 'September', 'October' : 'Oktober', 'November' : 'Nopember', 'December' : 'Desember', 'Sunday' : 'Minggu', 'Monday' : 'Senin', 'Tuesday' : 'Selasa', 'Wednesday' : 'Rabu', 'Thursday' : 'Kamis', 'Friday' : 'Jum \'at', 'Saturday' : 'Sabtu', 'Sun' : 'Min', 'Mon' : 'Sen', 'Tue' : 'Sel', 'Wed' : 'Rab', 'Thu' : 'Kam', 'Fri' : 'Jum', 'Sat' : 'Sab', /******************************** sort variants ********************************/ 'sortname' : 'menurut nama', 'sortkind' : 'menurut jenis', 'sortsize' : 'menurut ukuran', 'sortdate' : 'menurut tanggal', 'sortFoldersFirst' : 'Utamakan folder', 'sortperm' : 'menurut perizinan', // from v2.1.13 added 13.06.2016 'sortmode' : 'menurut mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'menurut pemilik', // from v2.1.13 added 13.06.2016 'sortgroup' : 'menurut grup', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Also Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'FileBaru.txt', // added 10.11.2015 'untitled folder' : 'FolderBaru', // added 10.11.2015 'Archive' : 'ArsipBaru', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'Diperlukan konfirmasi', 'confirmRm' : 'Anda yakin akan menghapus berkas?
    Ini tidak dapat kembalikan!', 'confirmRepl' : 'Timpa berkas lama dengan yang baru?', 'confirmRest' : 'Timpa berkas yang ada dengan berkas dari sampah?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Bukan UTF-8
    Konversi ke UTF-8?
    Konten akan berubah menjadi UTF-8 ketika disimpan dengan konversi.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.
    Please select character encoding of this file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Telah terjadi perubahan.
    Kehilangan perkerjaan jika kamu tidak menyimpan.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Anda yakin untuk membuang berkas ke tempat sampah?', //from v2.1.24 added 29.4.2017 'apllyAll' : 'Terapkan ke semua', 'name' : 'Nama', 'size' : 'Ukuran', 'perms' : 'Perijinan', 'modify' : 'Diubah', 'kind' : 'Jenis', 'read' : 'baca', 'write' : 'tulis', 'noaccess' : 'tidak ada akses', 'and' : 'dan', 'unknown' : 'tak diketahui', 'selectall' : 'Pilih semua berkas', 'selectfiles' : 'Pilih berkas', 'selectffile' : 'Pilih berkas pertama', 'selectlfile' : 'Pilih berkas terakhir', 'viewlist' : 'Tampilan daftar', 'viewicons' : 'Tampilan ikon', 'places' : 'Lokasi', 'calc' : 'Hitung', 'path' : 'Alamat', 'aliasfor' : 'Nama lain untuk', 'locked' : 'Dikunci', 'dim' : 'Dimensi', 'files' : 'Berkas', 'folders' : 'Folder', 'items' : 'Pokok', 'yes' : 'ya', 'no' : 'tidak', 'link' : 'Tautan', 'searcresult' : 'Hasil pencarian', 'selected' : 'Pokok terpilih', 'about' : 'Tentang', 'shortcuts' : 'Pintasan', 'help' : 'Bantuan', 'webfm' : 'Pengelola berkas web', 'ver' : 'Versi', 'protocolver' : 'versi protokol', 'homepage' : 'Rumah proyek', 'docs' : 'Dokumentasi', 'github' : 'Ambil kami di Github', 'twitter' : 'Ikuti kami di twitter', 'facebook' : 'Gabung dengan kami di facebook', 'team' : 'Tim', 'chiefdev' : 'kepala pengembang', 'developer' : 'pengembang', 'contributor' : 'kontributor', 'maintainer' : 'pengurus', 'translator' : 'penerjemah', 'icons' : 'Ikon', 'dontforget' : 'dan jangan lupa pakai handukmu', 'shortcutsof' : 'Pintasan dimatikan', 'dropFiles' : 'Seret berkas anda kesini', 'or' : 'atau', 'selectForUpload' : 'Pilih berkas untuk diunggah', 'moveFiles' : 'Pindahkan berkas', 'copyFiles' : 'Salin berkas', 'restoreFiles' : 'Kembalikan berkas', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Hapus dari lokasi', 'aspectRatio' : 'Aspek rasio', 'scale' : 'Skala', 'width' : 'Lebar', 'height' : 'Tinggi', 'resize' : 'Ubah ukuran', 'crop' : 'Potong', 'rotate' : 'Putar', 'rotate-cw' : 'Putar 90 derajat ke kanan', 'rotate-ccw' : 'Putar 90 derajat ke kiri', 'degree' : '°', 'netMountDialogTitle' : 'Baca susunan volume jaringan', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Pengguna', // added 18.04.2012 'pass' : 'Sandi', // added 18.04.2012 'confirmUnmount' : 'Apakah anda unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Seret atau Tempel file dari browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Seret file, Tempel URL atau gambar dari clipboard', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Lokasi', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Mencari berdasarkan inpu MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Pemilik', // from v2.1 added 20.6.2015 'group' : 'Grup', // from v2.1 added 20.6.2015 'other' : 'Lainnya', // from v2.1 added 20.6.2015 'execute' : 'Eksekusi', // from v2.1 added 20.6.2015 'perm' : 'Izin', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Folder kosong', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Folder kosong\\A Seret untuk tambahkan berkas', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Folder kosong\\A Tekan yang lama untuk tambahkan berkas', // from v2.1.6 added 30.12.2015 'quality' : 'Kualitas', // from v2.1.6 added 5.1.2016 'autoSync' : 'Sinkronasi Otomatis', // from v2.1.6 added 10.1.2016 'moveUp' : 'Pindah ke atas', // from v2.1.6 added 18.1.2016 'getLink' : 'Mendepatkan URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : '($1) berkas dipilih', // from v2.1.7 added 2.19.2016 'folderId' : 'ID Folder', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Izin akses offline', // from v2.1.10 added 3.25.2016 'reAuth' : 'To re-authenticate', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Sedang memuat...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Membuka file bersamaan', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Anda mencoba membuka file $1. Apakah anda ingin membuka di browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Hasil pencarian kosong dalam target', // from v2.1.12 added 5.16.2016 'editingFile' : 'Sedang mengedit file', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Anda memilih $1 berkas', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Kamu mempunyai $i berkas di clipboard', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Hanya pencarian bertamah untuk menampilkan tampilan sekarang', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reinstate', // from v2.1.15 added 3.8.2016 'complete' : '$1 selesai', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Page turning', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'Reset', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Warna background', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Mengambil warna', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Diaktifkan', // from v2.1.16 added 4.10.2016 'disabled' : 'Nonaktifkan', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Search results is empty in current view.\\APress [Enter] to expand search target.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'First letter search results is empty in current view.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Text label', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins left', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Select folder', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'First letter search', // from v2.1.23 added 24.3.2017 'presets' : 'Presets', // from v2.1.25 added 26.5.2017 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Tak diketahui', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Folder', 'kindAlias' : 'Nama lain', 'kindAliasBroken' : 'Nama lain rusak', // applications 'kindApp' : 'Aplikasi', 'kindPostscript' : 'Dokumen postscript', 'kindMsOffice' : 'Dokumen Ms. Office', 'kindMsWord' : 'Dokumen Ms. Word', 'kindMsExcel' : 'Dokumen Ms. Excel', 'kindMsPP' : 'Dokumen Ms. Powerpoint', 'kindOO' : 'Dokumen Open Office', 'kindAppFlash' : 'Aplikasi Flash', 'kindPDF' : 'Portable Dokumen Format (PDF)', 'kindTorrent' : 'Berkas Bittorrent', 'kind7z' : 'Arsip 7z', 'kindTAR' : 'Arsip TAR', 'kindGZIP' : 'Arsip GZIP', 'kindBZIP' : 'Arsip BZIP', 'kindXZ' : 'Arsip XZ', 'kindZIP' : 'Arsip ZIP', 'kindRAR' : 'Arsip RAR', 'kindJAR' : 'Berkas Java JAR', 'kindTTF' : 'Huruf True Type', 'kindOTF' : 'Huruf Open Type', 'kindRPM' : 'Paket RPM', // texts 'kindText' : 'Dokumen teks', 'kindTextPlain' : 'Berkas teks biasa', 'kindPHP' : 'Kode-sumber PHP', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'Dokumen HTML', 'kindJS' : 'Kode-sumber Javascript', 'kindRTF' : 'Berkas Rich Text', 'kindC' : 'Kode-sumber C', 'kindCHeader' : 'Kode-sumber header C', 'kindCPP' : 'Kode-sumber C++', 'kindCPPHeader' : 'Kode-sumber header C++', 'kindShell' : 'Berkas shell Unix', 'kindPython' : 'Kode-sumber Python', 'kindJava' : 'Kode-sumber Java', 'kindRuby' : 'Kode-sumber Ruby', 'kindPerl' : 'Kode-sumber Perl', 'kindSQL' : 'Kode-sumber SQL', 'kindXML' : 'Dokumen XML', 'kindAWK' : 'Kode-sumber AWK', 'kindCSV' : 'Dokumen CSV', 'kindDOCBOOK' : 'Dokumen Docbook XML', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Citra', 'kindBMP' : 'Citra BMP', 'kindJPEG' : 'Citra JPEG', 'kindGIF' : 'Citra GIF', 'kindPNG' : 'Citra PNG', 'kindTIFF' : 'Citra TIFF', 'kindTGA' : 'Citra TGA', 'kindPSD' : 'Citra Adobe Photoshop', 'kindXBITMAP' : 'Citra X bitmap', 'kindPXM' : 'Citra Pixelmator', // media 'kindAudio' : 'Berkas audio', 'kindAudioMPEG' : 'Berkas audio MPEG', 'kindAudioMPEG4' : 'Berkas audio MPEG-4', 'kindAudioMIDI' : 'Berkas audio MIDI', 'kindAudioOGG' : 'Berkas audio Ogg Vorbis', 'kindAudioWAV' : 'Berkas audio WAV', 'AudioPlaylist' : 'Berkas daftar putar MP3', 'kindVideo' : 'Berkas video', 'kindVideoDV' : 'Berkas video DV', 'kindVideoMPEG' : 'Berkas video MPEG', 'kindVideoMPEG4' : 'Berkas video MPEG-4', 'kindVideoAVI' : 'Berkas video AVI', 'kindVideoMOV' : 'Berkas video Quick Time', 'kindVideoWM' : 'Berkas video Windows Media', 'kindVideoFlash' : 'Berkas video Flash', 'kindVideoMKV' : 'Berkas video Matroska', 'kindVideoOGG' : 'Berkas video Ogg' } }; })); application/library/js/i18n/elfinder.el.js000064400000052137146731177160014460 0ustar00/** * Greek translation * @author yawd , Romanos * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.el = { translator : 'yawd <ingo@yawd.eu>', language : 'Ελληνικά', direction : 'ltr', dateFormat : 'd.m.Y H:i', fancyDateFormat : '$1 H:i', messages : { /********************************** errors **********************************/ 'error' : 'Πρόβλημα', 'errUnknown' : 'Άγνωστο πρόβλημα.', 'errUnknownCmd' : 'Άγνωστη εντολή.', 'errJqui' : 'Μη έγκυρη ρύθμιση του jQuery UI. Τα components "selectable", "draggable" και "droppable" πρέπει να περιληφούν.', 'errNode' : 'το elFinder χρειάζεται να έχει δημιουργηθεί το DOM Element.', 'errURL' : 'Μη έγκυρες ρυθμίσεις για το elFinder! η επιλογή URL δεν έχει οριστεί.', 'errAccess' : 'Απαγορεύεται η πρόσβαση.', 'errConnect' : 'Δεν ήταν δυνατή η σύνδεση με το backend.', 'errAbort' : 'Η σύνδεση εγκαταλείφθηκε.', 'errTimeout' : 'Η σύνδεση έληξε.', 'errNotFound' : 'Δε βρέθηκε το backend.', 'errResponse' : 'Μή έγκυρη απάντηση από το backend.', 'errConf' : 'Μη έγκυρες ρυθμίσεις για το backend.', 'errJSON' : 'Το PHP JSON module δεν είναι εγκατεστημένο.', 'errNoVolumes' : 'Δεν βρέθηκαν αναγνώσιμα volumes.', 'errCmdParams' : 'Μη έγκυρες παράμετροι για την εντολή "$1".', 'errDataNotJSON' : 'Τα δεδομένα δεν είναι JSON.', 'errDataEmpty' : 'Τα δεδομένα είναι άδεια.', 'errCmdReq' : 'Το Backend request χρειάζεται όνομα εντολής.', 'errOpen' : 'Δεν ήταν δυνατό να ανοίξει το "$1".', 'errNotFolder' : 'Το αντικείμενο δεν είναι φάκελος.', 'errNotFile' : 'Το αντικείμενο δεν είναι αρχείο.', 'errRead' : 'Δεν ήταν δυνατόν να διαβαστεί το "$1".', 'errWrite' : 'Δεν ήταν δυνατή η εγγραφή στο "$1".', 'errPerm' : 'Απαγορεύεται η πρόσβαση.', 'errLocked' : '"$1" είναι κλειδωμένο και δεν μπορεί να μετονομαστεί, μετακινηθεί ή διαγραφεί.', 'errExists' : 'Το αρχείο με όνομα "$1" υπάρχει ήδη.', 'errInvName' : 'Μη έγκυρο όνομα αρχείου.', 'errFolderNotFound' : 'Ο φάκελος δε βρέθηκε.', 'errFileNotFound' : 'Το αρχείο δε βρέθηκε.', 'errTrgFolderNotFound' : 'Ο φάκελος "$1" δε βρέθηκε.', 'errPopup' : 'Το πρόγραμμα πλήγησης εμπόδισε το άνοιγμα αναδυόμενου παραθύρου. Για ανοίξετε το αρχείο ενεργοποιήστε το στις επιλογές του περιηγητή.', 'errMkdir' : 'Η δυμιουργία του φακέλου "$1" δεν ήταν δυνατή.', 'errMkfile' : 'Η δημιουργία του αρχείου "$1" δεν ήταν δυνατή.', 'errRename' : 'Η μετονομασία του αρχείου "$1" δεν ήταν δυνατή.', 'errCopyFrom' : 'Δεν επιτρέπεται η αντιγραφή αρχείων από το volume "$1".', 'errCopyTo' : 'Δεν επιτρέπεται η αντιγραφή αρχείων στο volume "$1".', 'errUpload' : 'Πρόβλημα κατά το upload.', 'errUploadFile' : 'Το αρχείο "$1" δεν μπόρεσε να γίνει upload.', 'errUploadNoFiles' : 'Δεν βρέθηκαν αρχεία για upload.', 'errUploadTotalSize' : 'Τα δεδομένα υπερβαίνουν το επιτρεπόμενο μέγιστο μέγεθος δεδομένων.', 'errUploadFileSize' : 'Το αρχείο υπερβαίνει το επιτρεπόμενο μέγιστο μέγεθος.', 'errUploadMime' : 'Ο τύπος αρχείου δεν επιτρέπεται.', 'errUploadTransfer' : 'Πρόβλημα μεταφοράς για το "$1".', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Το "$1" δεν ήταν δυνατόν να αποθηκευτεί.', 'errCopy' : 'Δεν ήταν δυνατή η αντιγραφή του "$1".', 'errMove' : 'Δεν ήταν δυνατή η μετακίνηση του "$1".', 'errCopyInItself' : 'Δεν είναι δυνατή η αντιγραφή του "$1" στον εαυτό του.', 'errRm' : 'Δεν ήταν δυνατή η αφαίρεση του "$1".', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Δεν ήταν δυνατή η ανάγνωση των αρχείων από "$1".', 'errArchive' : 'Δεν ήταν δυνατή η δημιουργία του αρχείου.', 'errArcType' : 'Ο τύπος αρχείου δεν υποστηρίζεται.', 'errNoArchive' : 'Το αρχείο δεν είναι έγκυρο ή δεν υποστηρίζεται ο τύπος του.', 'errCmdNoSupport' : 'Το backend δεν υποστηρίζει αυτή την εντολή.', 'errReplByChild' : 'Ο φάκελος “$1” δεν μπορεί να αντικατασταθεί από οποιοδήποτε αρχείο περιέχεται σε αυτόν.', 'errArcSymlinks' : 'Για λόγους ασφαλείας δεν είναι δυνατόν να διαβαστούν αρχεία που περιέχουν symlinks orη αρχεία με μη επιτρεπτά ονόματα.', // edited 24.06.2012 'errArcMaxSize' : 'Το μέγεθος του αρχείου υπερβαίνει το μέγιστο επιτρεπτό όριο.', 'errResize' : 'Δεν ήταν δυνατή η αλλαγή μεγέθους του "$1".', 'errResizeDegree' : 'Invalid rotate degree.', 'errResizeRotate' : 'Unable to rotate image.', 'errResizeSize' : 'Invalid image size.', 'errResizeNoChange' : 'Image size not changed.', 'errUsupportType' : 'Ο τύπος αρχείου δεν υποστηρίζεται.', 'errNotUTF8Content' : 'Το αρχείο "$1" δεν είναι UTF-8 και δεν μπορεί να επεξεργασθεί.', // added 9.11.2011 'errNetMount' : 'Δεν ήταν δυνατή η φόρτωση του "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Μη υποστηριζόμενο πρωτόκολο.', // added 17.04.2012 'errNetMountFailed' : 'Η φόρτωση απέτυχε.', // added 17.04.2012 'errNetMountHostReq' : 'Απαιτείται host εξυπηρετητής.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'Δημιουργία archive αρχείου', 'cmdback' : 'Πίσω', 'cmdcopy' : 'Αντιγραφή', 'cmdcut' : 'Αφαίρεση', 'cmddownload' : 'Μεταφόρτωση', 'cmdduplicate' : 'Αντίγραφο', 'cmdedit' : 'Επεξεργασία αρχείου', 'cmdextract' : 'Εξαγωγή αρχείων από archive', 'cmdforward' : 'Προώθηση', 'cmdgetfile' : 'Επιλέξτε αρχεία', 'cmdhelp' : 'Σχετικά με αυτό το λογισμικό', 'cmdhome' : 'Home', 'cmdinfo' : 'Πληροφορίες', 'cmdmkdir' : 'Νέος φάκελος', 'cmdmkfile' : 'Νέος αρχείο', 'cmdopen' : 'Άνοιγμα', 'cmdpaste' : 'Επικόλληση', 'cmdquicklook' : 'Προεπισκόπηση', 'cmdreload' : 'Ανανέωση', 'cmdrename' : 'Μετονομασία', 'cmdrm' : 'Διαγραφή', 'cmdsearch' : 'Έυρεση αρχείων', 'cmdup' : 'Μετάβαση στο γονικό φάκελο', 'cmdupload' : 'Ανέβασμα αρχείων', 'cmdview' : 'Προβολή', 'cmdresize' : 'Αλλαγή μεγέθους εικόνας', 'cmdsort' : 'Ταξινόμηση', 'cmdnetmount' : 'Mount network volume', /*********************************** buttons ***********************************/ 'btnClose' : 'Κλείσιμο', 'btnSave' : 'Αποθήκευση', 'btnRm' : 'Αφαίρεση', 'btnApply' : 'Εφαρμογή', 'btnCancel' : 'Ακύρωση', 'btnNo' : 'Όχι', 'btnYes' : 'Ναι', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'Άνοιγμα φακέλου', 'ntffile' : 'Άνοιγμα αρχείου', 'ntfreload' : 'Ανανέωση περιεχομένων φακέλου', 'ntfmkdir' : 'Δημιουργία φακέλου', 'ntfmkfile' : 'Δημιουργία αρχείων', 'ntfrm' : 'Διαγραφή αρχείων', 'ntfcopy' : 'Αντιγραφή αρχείων', 'ntfmove' : 'Μετακίνηση αρχείων', 'ntfprepare' : 'Προετοιμασία αντιγραφής αρχείων', 'ntfrename' : 'Μετονομασία αρχείων', 'ntfupload' : 'Ανέβασμα αρχείων', 'ntfdownload' : 'Μεταφόρτωση αρχείων', 'ntfsave' : 'Αποθήκευση αρχείων', 'ntfarchive' : 'Δημιουργία αρχείου', 'ntfextract' : 'Εξαγωγή αρχείων από το archive', 'ntfsearch' : 'Αναζήτηση αρχείων', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Σύστημα απασχολημένο>_<', 'ntfloadimg' : 'Φόρτωση εικόνας', 'ntfnetmount' : 'Φόρτωση δικτυακού δίσκου', // added 18.04.2012 'ntfdim' : 'Acquiring image dimension', /************************************ dates **********************************/ 'dateUnknown' : 'άγνωστο', 'Today' : 'Σήμερα', 'Yesterday' : 'Χθές', 'msJan' : 'Ιαν', 'msFeb' : 'Φεβ', 'msMar' : 'Μαρ', 'msApr' : 'Απρ', 'msMay' : 'Μαϊ', 'msJun' : 'Ιουν', 'msJul' : 'Ιουλ', 'msAug' : 'Αυγ', 'msSep' : 'Σεπ', 'msOct' : 'Οκτ', 'msNov' : 'Νοεμ', 'msDec' : 'Δεκ', 'January' : 'Ιανουάριος', 'February' : 'Φεβρουάριος', 'March' : 'Μάρτιος', 'April' : 'Απρίλιος', 'May' : 'Μάϊος', 'June' : 'Ιούνιος', 'July' : 'Ιούλιος', 'August' : 'Αύγουστος', 'September' : 'Σεπτέμβριος', 'October' : 'Οκτώβριος', 'November' : 'Νοέμβριος', 'December' : 'Δεκέμβριος', 'Sunday' : 'Κυριακή', 'Monday' : 'Δευτέρα', 'Tuesday' : 'Τρίτη', 'Wednesday' : 'Τετάρτη', 'Thursday' : 'Πέμπτη', 'Friday' : 'Παρασκευή', 'Saturday' : 'Σάββατο', 'Sun' : 'Κυρ', 'Mon' : 'Δευ', 'Tue' : 'Τρ', 'Wed' : 'Τετ', 'Thu' : 'Πεμ', 'Fri' : 'Παρ', 'Sat' : 'Σαβ', /******************************** sort variants ********************************/ 'sortname' : 'κατά όνομα', 'sortkind' : 'κατά είδος', 'sortsize' : 'κατά μέγεθος', 'sortdate' : 'κατά ημερομηνία', 'sortFoldersFirst' : 'Πρώτα οι φάκελοι', // added 22.06.2012 /********************************** messages **********************************/ 'confirmReq' : 'Απαιτείται επιβεβαίωση', 'confirmRm' : 'Είστε σίγουροι πως θέλετε να διαγράψετε τα αρχεία?
    Οι αλλαγές θα είναι μόνιμες!', 'confirmRepl' : 'Αντικατάσταση του παλιού αρχείου με το νέο?', 'apllyAll' : 'Εφαρμογή σε όλα', 'name' : 'Όνομα', 'size' : 'Μέγεθος', 'perms' : 'Δικαιώματα', 'modify' : 'Τροποποιήθηκε', 'kind' : 'Είδος', 'read' : 'ανάγνωση', 'write' : 'εγγραφή', 'noaccess' : 'δεν υπάρχει πρόσβαση', 'and' : 'και', 'unknown' : 'άγνωστο', 'selectall' : 'Επιλογή όλων', 'selectfiles' : 'Επιλογή αρχείων', 'selectffile' : 'Επιλογή πρώτου αρχείου', 'selectlfile' : 'Επιλογή τελευταίου αρχείου', 'viewlist' : 'Προβολή λίστας', 'viewicons' : 'Προβολή εικονιδίων', 'places' : 'Τοποθεσίες', 'calc' : 'Υπολογισμός', 'path' : 'Διαδρομή', 'aliasfor' : 'Ψευδώνυμο για', 'locked' : 'Κλειδωμένο', 'dim' : 'Διαστάσεις', 'files' : 'Αρχεία', 'folders' : 'Φάκελοι', 'items' : 'Αντικείμενα', 'yes' : 'ναι', 'no' : 'όχι', 'link' : 'Σύνδεσμος', 'searcresult' : 'Αποτελέσματα αναζήτησης', 'selected' : 'επιλεγμένα αντικείμενα', 'about' : 'Σχετικά', 'shortcuts' : 'Συντομεύσεις', 'help' : 'Βοήθεια', 'webfm' : 'εργαλείο διαχείρισης αρχείων από το web', 'ver' : 'Έκδοση', 'protocolver' : 'έκδοση πρωτοκόλλου', 'homepage' : 'Σελίδα του project', 'docs' : 'Τεκμηρίωση (documentation)', 'github' : 'Κάντε μας fork στο Github', 'twitter' : 'Ακολουθήστε μας στο twitter', 'facebook' : 'Βρείτε μας στο facebook', 'team' : 'Ομάδα', 'chiefdev' : 'κύριος προγραμματιστής', 'developer' : 'προγραμματιστής', 'contributor' : 'συνεισφορά', 'maintainer' : 'συντηρητής', 'translator' : 'μεταφραστής', 'icons' : 'Εικονίδια', 'dontforget' : 'και μην ξεχάσεις την πετσέτα σου!', 'shortcutsof' : 'Οι συντομεύσεις είναι απενεργοποιημένες', 'dropFiles' : 'Κάντε drop τα αρχεία εδώ', 'or' : 'ή', 'selectForUpload' : 'Επιλογή αρχείων για ανέβασμα', 'moveFiles' : 'Μετακίνηση αρχείων', 'copyFiles' : 'Αντιγραφή αρχείων', 'rmFromPlaces' : 'Αντιγραφή από τοποθεσίες', 'aspectRatio' : 'Αναλογία διαστάσεων', 'scale' : 'Κλίμακα', 'width' : 'Πλάτος', 'height' : 'Ύψος', 'resize' : 'Αλλαγή μεγέθους', 'crop' : 'Crop', 'rotate' : 'Περιστροφή', 'rotate-cw' : 'Περιστροφή κατά 90 βαθμούς CW', 'rotate-ccw' : 'Περιστροφή κατά 90 βαθμούς CCW', 'degree' : 'Βαθμός', 'netMountDialogTitle' : 'Φορτώστε δικτυακό δίσκο', // added 18.04.2012 'protocol' : 'Πρωτόκολλο', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Χρήστης', // added 18.04.2012 'pass' : 'Κωδικός', // added 18.04.2012 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Άγνωστο', 'kindFolder' : 'Φάκελος', 'kindAlias' : 'Ψευδώνυμο (alias)', 'kindAliasBroken' : 'Μη έγκυρο ψευδώνυμο', // applications 'kindApp' : 'Εφαρμογή', 'kindPostscript' : 'Έγγραφο Postscript', 'kindMsOffice' : 'Έγγραφο Microsoft Office', 'kindMsWord' : 'Έγγραφο Microsoft Word', 'kindMsExcel' : 'Έγγραφο Microsoft Excel', 'kindMsPP' : 'Παρουσίαση Microsoft Powerpoint', 'kindOO' : 'Έγγραφο Open Office', 'kindAppFlash' : 'Εφαρμογή Flash', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Αρχείο Bittorrent', 'kind7z' : 'Αρχείο 7z', 'kindTAR' : 'Αρχείο TAR', 'kindGZIP' : 'Αρχείο GZIP', 'kindBZIP' : 'Αρχείο BZIP', 'kindXZ' : 'Αρχείο XZ', 'kindZIP' : 'Αρχείο ZIP', 'kindRAR' : 'Αρχείο RAR', 'kindJAR' : 'Αρχείο Java JAR', 'kindTTF' : 'Γραμματοσειρά True Type', 'kindOTF' : 'Γραμματοσειρά Open Type', 'kindRPM' : 'Πακέτο RPM', // texts 'kindText' : 'Έγγραφο κειμένου', 'kindTextPlain' : 'Απλό κείμενο', 'kindPHP' : 'Κώδικας PHP', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'Έγγραφο HTML', 'kindJS' : 'Κώδικας Javascript', 'kindRTF' : 'Rich Text Format', 'kindC' : 'Κώδικας C', 'kindCHeader' : 'Κώδικας κεφαλίδας C', 'kindCPP' : 'Κώδικας C++', 'kindCPPHeader' : 'Κώδικας κεφαλίδας C++', 'kindShell' : 'Unix shell script', 'kindPython' : 'Κώδικας Python', 'kindJava' : 'Κώδικας Java', 'kindRuby' : 'Κώδικας Ruby', 'kindPerl' : 'Perl script', 'kindSQL' : 'Κώδικας SQL', 'kindXML' : 'Έγγραφο XML', 'kindAWK' : 'Κώδικας AWK', 'kindCSV' : 'Τιμές χωρισμένες με κόμμα', 'kindDOCBOOK' : 'Έγγραφο Docbook XML', // images 'kindImage' : 'Εικόνα', 'kindBMP' : 'Εικόνα BMP', 'kindJPEG' : 'Εικόνα JPEG', 'kindGIF' : 'Εικόνα GIF', 'kindPNG' : 'Εικόνα PNG', 'kindTIFF' : 'Εικόνα TIFF', 'kindTGA' : 'Εικόνα TGA', 'kindPSD' : 'Εικόνα Adobe Photoshop', 'kindXBITMAP' : 'Εικόνα X bitmap', 'kindPXM' : 'Εικόνα Pixelmator', // media 'kindAudio' : 'Αρχεία ήχου', 'kindAudioMPEG' : 'Ήχος MPEG', 'kindAudioMPEG4' : 'Εικόνα MPEG-4', 'kindAudioMIDI' : 'Εικόνα MIDI', 'kindAudioOGG' : 'Εικόνα Ogg Vorbis', 'kindAudioWAV' : 'Εικόνα WAV', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Αρχεία media', 'kindVideoDV' : 'Ταινία DV', 'kindVideoMPEG' : 'Ταινία MPEG', 'kindVideoMPEG4' : 'Ταινία MPEG-4', 'kindVideoAVI' : 'Ταινία AVI', 'kindVideoMOV' : 'Ταινία Quick Time', 'kindVideoWM' : 'Ταινία Windows Media', 'kindVideoFlash' : 'Ταινία flash', 'kindVideoMKV' : 'Ταινία matroska', 'kindVideoOGG' : 'Ταινία ogg' } }; })); application/library/js/i18n/help/de.html.js000064400000004370146731177160014550 0ustar00

    Anwendungstipps

    Die Verwendung dieser Anwendung ist ähnlich der einer lokalen Dateiverwaltung.
    Hinweis: auf mobilen Geräten ist das Ziehen und Ablegen (Drag and Drop) von Dateien nicht möglich.

    • Rechtsklick auf ein Element oder länger darauf zeigen öffnet das Kontextmenü
    • Um Elemente in andere Ordner oder aktuellen Arbeitsbereich zu kopieren oder verschieben diese Ziehen und Ablegen
    • Elementauswahl im Arbeitsbereich kann mit der Hochstell- oder ALT-TAste erweitert werden
    • Um lokale Ordner und Dateien in den Zielorder oder -arbeitsbereich zu kopieren diese Ziehen und Ablegen
    • Der Uploaddialog erlaubt Daten aus dem Clipboard (Zwischenspeicher), eine URL und Ziehen und Ablegen aus anderen Browsern und Dateiverwaltungsoberflächen
    • Ziehen mit gedrückter ALT-Taste erlaubt einen einfachen Dateidownload (nur Google Chrome)
    • Ordner und Dateien können ausgeblendet (versteckt) werden. Um sie wieder dauerhaft sichtbar zu machen, über die Menüleiste das "Icon Einstellungen" anklicken, dort unter Arbeitsplatz "Zeige versteckte Elemente" den Button "Neustart" anklicken
    • Das Kontextmenü (rechte Maustaste) zeigt je nach ausgewählten Element diverse Aktionen an
    • Je nach Art des Elements kann der Inhalt entweder mit dem integrierten Editor bearbeitet werden (z.B. .php, .txt, .ini usw.) oder wenn ein Bild dieses gedreht sowie die Größe geändert werden
    • Zum verbinden externer Speicherorte (FTP, Dropbox, Box, GoogleDrive, OneDrive) sowie Onlineeditor Zoho Office Editor oder Konvertierungsdienst Online-Convert müssen diese Anwendungen freigeschaltet als auch die entsprechenden API-Daten zum Abrufen je Dienst definiert sein.
      Sollten diese Dienste nicht verfügbar sein, müssen diese entweder selbständig dazu programmiert werden, oder einen Entwickler des Vertrauens damit beauftragen (z.B. OSWorX)
    • In den Einstellungen "Menü Icon Einstellungen" kann der gesamte Arbeitsbereich, die Menüleiste sowie etliche weitere Aktionen definiert werden
    application/library/js/i18n/help/ru.html.js000064400000003105146731177160014601 0ustar00

    Советы по работе

    Работа с пользовательским интерфейсом похожа на стандартный файловый менеджер операционной системы. Однако перетаскивание в мобильных браузерах невозможно.

    • Щелкните правой кнопкой мыши или используйте «длинный тап», чтобы отобразить контекстное меню.
    • Перетащите в дерево папок или текущую рабочую область для перемещения / копирования элементов.
    • Выбор элемента в рабочей области может быть расширен с помощью клавиши Shift или Alt (Option).
    • Перетащите в папку назначения или рабочую область для загрузки файлов и папок.
    • В диалоговом окне загрузки можно использовать вставку данных или списков URL-адресов из буфера обмена, а также перетаскивать из других браузеров или файловых менеджеров и т.д.
    • Начните перетаскивание, нажав Alt (Option), чтобы перетащить за пределы браузера. Это запустить процесс скачивания в Google Chrome.
    application/library/js/i18n/help/en.html.js000064400000001440146731177160014555 0ustar00

    Operation Tips

    Operation on the UI is similar to operating system's standard file manager. However, Drag and Drop is not possible with mobile browsers.

    • Right click or long tap to show the context menu.
    • Drag and drop into the folder tree or the current workspace to move/copy items.
    • Item selection in the workspace can be extended selection with Shift or Alt (Option) key.
    • Drag and Drop to the destination folder or workspace to upload files and folders.
    • The upload dialog can accept paste/drop clipboard data or URL lists and Drag and Drop from other browser or file managers etc.
    • Drag start with pressing Alt(Option) key to drag out to outside browser. It will became download operation with Google Chrome.
    application/library/js/i18n/help/es.html.js000064400000002042146731177160014561 0ustar00

    Consejos de operación

    Operar en la Interfaz del Usuario es similar al administrador de archivos estandar del sistema operativo. Sin embargo, Arrastrar y soltar no es posible con los navegadores móviles.

    • Click derecho o un tap largo para mostrar el menú de contexto.
    • Arrastrar y soltar dentro del árbol de carpetas o el espacio de trabajo actual para mover/copiar elementos.
    • La selección de elementos en el espacio de trabajo puede ampliarse con la tecla Shift o Alt (Opción).
    • Arrastrar y soltar a la carpeta de destino o área de trabajo para cargar archivos y carpetas.
    • El cuadro de diálogo de carga puede aceptar pegar/soltar datos del portapapeles o listas de URL y arrastrar y soltar desde otro navegador o administrador de archivos, etc.
    • Iniciar a arrastrar presionando la tecla Alt (Opción) para arrastrar fuera del navegador. Se convertirá en una operación de descarga con Google Chrome.
    application/library/js/i18n/help/ko.html.js000064400000002034146731177160014564 0ustar00

    사용 팁

    UI 조작은 운영체제의 표준 파일 관리자를 사용하는 방법과 비슷합니다. 하지만 모바일 브라우저에서는 드래그앤드롭을 사용할 수 없습니다.

    • 오른쪽 클릭하거나 길게 누르면 컨텍스트 메뉴가 나타납니다.
    • 이동/복사하려면 폴더 트리 또는 원하는 폴더로 드래그앤드롭하십시오.
    • 작업공간에서 항목을 선택하려면 Shift또는 Alt(Option) 키를 사용하여 선택 영역을 넓힐 수 있습니다.
    • 업로드 대상 폴더 또는 작업 영역으로 파일및 폴더를 드래그앤드롭하여 업로드할 수 있습니다.
    • 다른 브라우저 또는 파일관리자등에서 드래그앤드롭하거나, 클립보드를 통해 데이터또는 URL을 복사/붙여넣어 업로드할 수 있습니다.
    • 크롬브라우저의 경우, Alt(Option) 키를 누른 상태에서 브라우저 밖으로 드래그앤드롭하면 다운로드가 가능합니다.
    application/library/js/i18n/help/tr.html.js000064400000001652146731177160014605 0ustar00

    İşlem İpuçları

    Kullanıcı arayüzündeki işlem, işletim sisteminin standart dosya yöneticisine benzer. Ancak Sürükle ve Bırak özelliği mobil tarayıcılarda mümkün değildir.

    • Bağlam menüsünü göstermek için sağ tıklayın veya uzun dokunun.
    • Öğeleri taşımak/kopyalamak için klasör ağacına veya geçerli çalışma alanına sürükleyip bırakın.
    • Çalışma alanındaki öğe seçimi Shift veya Alt (Seçenek) tuşuyla genişletilebilir.
    • Dosya ve klasör yüklemek için hedef klasöre veya çalışma alanına sürükleyip bırakın.
    • Yükleme iletişim kutusu, pano verilerini veya URL listelerini yapıştırma/bırakma ve diğer tarayıcı veya dosya yöneticilerinden Sürükle ve Bırak vb.
    • Dış tarayıcıya sürüklemek için Alt (Seçenek) tuşuna basarak sürükleyin. Google Chrome ile indirme işlemi olacak.
    application/library/js/i18n/help/sk.html.js000064400000001745146731177160014600 0ustar00

    Tipy na obsluhu

    Obsluha na používateľskom rozhraní je podobná štandardnému správcovi súborov operačného systému. Drag and Drop však nie je možné používať s mobilnými prehliadačmi.

    • Kliknutím pravým tlačidlom alebo dlhým klepnutím zobrazíte kontextové menu.
    • Presuňte myšou do stromu priečinkov alebo do aktuálneho pracovného priestoru a presuňte / kopírujte položky.
    • Výber položky v pracovnom priestore môžete rozšíriť pomocou klávesov Shift alebo Alt (Možnosť).
    • Premiestnite súbory a priečinky do cieľovej zložky alebo do pracovného priestoru.
    • Dialog odovzdávania môže prijímať dáta schránky alebo zoznamy adries URL a pritiahnuť a odísť z iných prehliadačov alebo správcov súborov.
    • Potiahnutím spustite stlačením klávesu Alt (Možnosť) pretiahnite do vonkajšieho prehliadača. Táto funkcia sa prevezme pomocou prehliadača Google Chrome.
    application/library/js/i18n/help/pl.html.js000064400000002007146731177160014566 0ustar00

    Wskazówki Obsługi

    Działanie w interfejsie użytkownika jest podobne do standardowego menedżera plików systemu operacyjnego. Jednak Przeciąganie i Upuszczanie nie jest możliwe w przeglądarkach mobilnych.

    • Kliknij prawym przyciskiem myszy lub dłużej, aby wyświetlić menu kontekstowe.
    • Przeciągnij i upuść w drzewie folderów lub bieżącym obszarze roboczym, aby przenieść/kopiować elementy.
    • Wybór elementu w obszarze roboczym można rozszerzyć wybór z klawiszem Shift lub Alt(Opcja).
    • Przeciągnij i Upuść do folderu docelowego lub obszaru roboczego, aby przesłać pliki i foldery.
    • W oknie dialogowym przesyłania można zaakceptować wklejanie/upuszczanie danych schowka lub listy adresów URL, i Przeciągnij i Upuść z innych przeglądarek lub menedżerów plików, itp.
    • Rozpocznij Przeciąganie naciskając Alt (Opcja), aby przeciągnąć na zewnątrz przeglądarki. Stanie się operacją pobierania z Google Chrome.
    application/library/js/i18n/help/cs.html.js000064400000001722146731177160014563 0ustar00

    Tipy na obsluhu

    Obsluha na uživatelském rozhraní je podobná standardnímu správci souborů operačního systému. Drag and Drop však není možné používat s mobilními prohlížeči.

    • Kliknutím pravým tlačítkem nebo dlouhým klepnutím zobrazíte kontextové menu.
    • Přetáhněte do stromu složek nebo do aktuálního pracovního prostoru a přetáhněte / kopírujte položky.
    • Výběr položky v pracovním prostoru můžete rozšířit pomocí kláves Shift nebo Alt (Možnost).
    • Přemístěte soubory a složky do cílové složky nebo do pracovního prostoru.
    • Dialog předávání může přijímat data schránky nebo seznamy adres URL a přitáhnout a odejít z jiných prohlížečů nebo správců souborů.
    • Zatažením spusťte stisknutím klávesy Alt (Možnost) přetáhněte do vnějšího prohlížeče. Tato funkce se převezme pomocí prohlížeče Google Chrome.
    application/library/js/i18n/help/ja.html.js000064400000002402146731177160014544 0ustar00

    操作のヒント

    UIの操作は、オペレーティングシステムの標準ファイルマネージャにほぼ準拠しています。ただし、モバイルブラウザではドラッグ&ドロップはできません。

    • 右クリックまたはロングタップでコンテキストメニューを表示します。
    • アイテムを移動/コピーするには、フォルダツリーまたはワークスペースにドラッグ&ドロップします。
    • ワークスペース内のアイテムの選択は、ShiftキーまたはAltキー(Optionキー)で選択範囲を拡張できます。
    • コピー先のフォルダまたはワークスペースにドラッグアンドドロップして、ファイルとフォルダをアップロードします。
    • アップロードダイアログでは、クリップボードのデータやURLリストのペースト/ドロップ、他のブラウザやファイルマネージャからのドラッグ&ドロップなどを受け入れることができます。
    • Altキー(Optionキー)を押しながらドラッグすると、ブラウザの外にドラッグできます。Google Chromeでダウンロード操作になります。
    application/library/js/i18n/elfinder.fr_CA.js000064400000105055146731177160015030 0ustar00/** * Traduction canadienne française (identique à la traduction française) * @author Régis Guyomarch * @author Benoit Delachaux * @author Jonathan Grunder * @version 2019-10-15 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.fr_CA = { translator : 'Régis Guyomarch <regisg@gmail.com>, Benoit Delachaux <benorde33@gmail.com>, Jonathan Grunder <jonathan.grunder@gmail.com>', language : 'française', direction : 'ltr', dateFormat : 'd/M/Y H:i', // will show like: 15/Oct/2019 14:47 fancyDateFormat : '$1 H:i', // will show like: Aujourd'hui 14:47 nonameDateFormat : 'ymd-His', // noname upload will show like: 191015-144704 messages : { /********************************** errors **********************************/ 'error' : 'Erreur', 'errUnknown' : 'Erreur inconnue.', 'errUnknownCmd' : 'Commande inconnue.', 'errJqui' : 'Mauvaise configuration de jQuery UI. Les composants Selectable, draggable et droppable doivent être inclus.', 'errNode' : 'elFinder requiert que l\'élément DOM ait été créé.', 'errURL' : 'Mauvaise configuration d\'elFinder ! L\'option URL n\'a pas été définie.', 'errAccess' : 'Accès refusé.', 'errConnect' : 'Impossible de se connecter au backend.', 'errAbort' : 'Connexion interrompue.', 'errTimeout' : 'Délai de connexion dépassé.', 'errNotFound' : 'Backend non trouvé.', 'errResponse' : 'Mauvaise réponse du backend.', 'errConf' : 'Mauvaise configuration du backend.', 'errJSON' : 'Le module PHP JSON n\'est pas installé.', 'errNoVolumes' : 'Aucun volume lisible.', 'errCmdParams' : 'Mauvais paramétrage de la commande "$1".', 'errDataNotJSON' : 'Les données ne sont pas au format JSON.', 'errDataEmpty' : 'Données inexistantes.', 'errCmdReq' : 'La requête au Backend doit comporter le nom de la commande.', 'errOpen' : 'Impossible d\'ouvrir "$1".', 'errNotFolder' : 'Cet objet n\'est pas un dossier.', 'errNotFile' : 'Cet objet n\'est pas un fichier.', 'errRead' : 'Impossible de lire "$1".', 'errWrite' : 'Impossible d\'écrire dans "$1".', 'errPerm' : 'Permission refusée.', 'errLocked' : '"$1" est verrouillé et ne peut être déplacé ou supprimé.', 'errExists' : 'Un élément nommé "$1" existe déjà.', 'errInvName' : 'Nom de fichier incorrect.', 'errInvDirname' : 'Nom de dossier incorrect.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Dossier non trouvé.', 'errFileNotFound' : 'Fichier non trouvé.', 'errTrgFolderNotFound' : 'Dossier destination "$1" non trouvé.', 'errPopup' : 'Le navigateur web a empêché l\'ouverture d\'une fenêtre "popup". Pour ouvrir le fichier, modifiez les options du navigateur web.', 'errMkdir' : 'Impossible de créer le dossier "$1".', 'errMkfile' : 'Impossible de créer le fichier "$1".', 'errRename' : 'Impossible de renommer "$1".', 'errCopyFrom' : 'Interdiction de copier des fichiers depuis le volume "$1".', 'errCopyTo' : 'Interdiction de copier des fichiers vers le volume "$1".', 'errMkOutLink' : 'Impossible de créer un lien en dehors du volume principal.', // from v2.1 added 03.10.2015 'errUpload' : 'Erreur lors de l\'envoi du fichier.', // old name - errUploadCommon 'errUploadFile' : 'Impossible d\'envoyer "$1".', // old name - errUpload 'errUploadNoFiles' : 'Aucun fichier à envoyer.', 'errUploadTotalSize' : 'Les données dépassent la taille maximale allouée.', // old name - errMaxSize 'errUploadFileSize' : 'Le fichier dépasse la taille maximale allouée.', // old name - errFileMaxSize 'errUploadMime' : 'Type de fichier non autorisé.', 'errUploadTransfer' : '"$1" erreur transfert.', 'errUploadTemp' : 'Impossible de créer un fichier temporaire pour transférer les fichiers.', // from v2.1 added 26.09.2015 'errNotReplace' : 'L\'objet "$1" existe déjà à cet endroit et ne peut être remplacé par un objet d\'un type différent.', // new 'errReplace' : 'Impossible de remplacer "$1".', 'errSave' : 'Impossible de sauvegarder "$1".', 'errCopy' : 'Impossible de copier "$1".', 'errMove' : 'Impossible de déplacer "$1".', 'errCopyInItself' : 'Impossible de copier "$1" sur lui-même.', 'errRm' : 'Impossible de supprimer "$1".', 'errTrash' : 'Impossible de déplacer dans la corbeille', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Impossible de supprimer le(s) fichier(s) source(s).', 'errExtract' : 'Imbossible d\'extraire les fichiers à partir de "$1".', 'errArchive' : 'Impossible de créer l\'archive.', 'errArcType' : 'Type d\'archive non supporté.', 'errNoArchive' : 'Le fichier n\'est pas une archive, ou c\'est un type d\'archive non supporté.', 'errCmdNoSupport' : 'Le Backend ne prend pas en charge cette commande.', 'errReplByChild' : 'Le dossier “$1” ne peut pas être remplacé par un élément qu\'il contient.', 'errArcSymlinks' : 'Par mesure de sécurité, il est défendu d\'extraire une archive contenant des liens symboliques ou des noms de fichier non autorisés.', // edited 24.06.2012 'errArcMaxSize' : 'Les fichiers de l\'archive excèdent la taille maximale autorisée.', 'errResize' : 'Impossible de redimensionner "$1".', 'errResizeDegree' : 'Degré de rotation invalide.', // added 7.3.2013 'errResizeRotate' : 'L\'image ne peut pas être tournée.', // added 7.3.2013 'errResizeSize' : 'Dimension de l\'image non-valide.', // added 7.3.2013 'errResizeNoChange' : 'L\'image n\'est pas redimensionnable.', // added 7.3.2013 'errUsupportType' : 'Type de fichier non supporté.', 'errNotUTF8Content' : 'Le fichier "$1" n\'est pas en UTF-8, il ne peut être édité.', // added 9.11.2011 'errNetMount' : 'Impossible de monter "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocole non supporté.', // added 17.04.2012 'errNetMountFailed' : 'Echec du montage.', // added 17.04.2012 'errNetMountHostReq' : 'Hôte requis.', // added 18.04.2012 'errSessionExpires' : 'Votre session a expiré en raison de son inactivité.', 'errCreatingTempDir' : 'Impossible de créer le répertoire temporaire : "$1"', 'errFtpDownloadFile' : 'Impossible de télécharger le file depuis l\'accès FTP : "$1"', 'errFtpUploadFile' : 'Impossible d\'envoyer le fichier vers l\'accès FTP : "$1"', 'errFtpMkdir' : 'Impossible de créer un répertoire distant sur l\'accès FTP :"$1"', 'errArchiveExec' : 'Erreur lors de l\'archivage des fichiers : "$1"', 'errExtractExec' : 'Erreur lors de l\'extraction des fichiers : "$1"', 'errNetUnMount' : 'Impossible de démonter.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Conversion en UTF-8 impossible', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Essayez Google Chrome, si voulez envoyer le dossier.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Délai d’attente dépassé pour la recherche "$1". Le résultat de la recherche est partiel.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Réauthorisation requise.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Le nombre maximal d\'éléments pouvant être sélectionnés est $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Impossible de restaurer la corbeille. La destination de la restauration n\'a pu être identifiée.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Aucun éditeur n\'a été trouvé pour ce type de fichier.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Une erreur est survenue du côté serveur.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Impossible de vider le dossier "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'There are $1 more errors.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Créer une archive', 'cmdback' : 'Précédent', 'cmdcopy' : 'Copier', 'cmdcut' : 'Couper', 'cmddownload' : 'Télécharger', 'cmdduplicate' : 'Dupliquer', 'cmdedit' : 'Éditer le fichier', 'cmdextract' : 'Extraire les fichiers de l\'archive', 'cmdforward' : 'Suivant', 'cmdgetfile' : 'Sélectionner les fichiers', 'cmdhelp' : 'À propos de ce logiciel', 'cmdhome' : 'Accueil', 'cmdinfo' : 'Informations', 'cmdmkdir' : 'Nouveau dossier', 'cmdmkdirin' : 'Dans un nouveau dossier', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nouveau fichier', 'cmdopen' : 'Ouvrir', 'cmdpaste' : 'Coller', 'cmdquicklook' : 'Prévisualiser', 'cmdreload' : 'Actualiser', 'cmdrename' : 'Renommer', 'cmdrm' : 'Supprimer', 'cmdtrash' : 'À la corbeille', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurer', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Trouver les fichiers', 'cmdup' : 'Remonter au dossier parent', 'cmdupload' : 'Envoyer les fichiers', 'cmdview' : 'Vue', 'cmdresize' : 'Redimensionner l\'image', 'cmdsort' : 'Trier', 'cmdnetmount' : 'Monter un volume réseau', // added 18.04.2012 'cmdnetunmount': 'Démonter', // from v2.1 added 30.04.2012 'cmdplaces' : 'Vers Favoris', // added 28.12.2014 'cmdchmod' : 'Changer de mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Ouvrir un dossier', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Réinitialiser largeur colone', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Plein écran', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Déplacer', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vider le dossier', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Annuler', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Refaire', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Préférences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Tout sélectionner', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Tout désélectionner', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverser la sélection', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Ouvrir dans une nouvelle fenêtre', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Hide (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Fermer', 'btnSave' : 'Sauvegarder', 'btnRm' : 'Supprimer', 'btnApply' : 'Confirmer', 'btnCancel' : 'Annuler', 'btnNo' : 'Non', 'btnYes' : 'Oui', 'btnMount' : 'Monter', // added 18.04.2012 'btnApprove': 'Aller à $1 & approuver', // from v2.1 added 26.04.2012 'btnUnmount': 'Démonter', // from v2.1 added 30.04.2012 'btnConv' : 'Convertir', // from v2.1 added 08.04.2014 'btnCwd' : 'Ici', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Tous', // from v2.1 added 22.5.2015 'btnMime' : 'Type MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nom du fichier', // from v2.1 added 22.5.2015 'btnSaveClose': 'Enregistrer & Ferme', // from v2.1 added 12.6.2015 'btnBackup' : 'Sauvegarde', // fromv2.1 added 28.11.2015 'btnRename' : 'Renommer', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Renommer (tous)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Préc. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Suiv. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Sauvegarder sous', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Ouvrir le dossier', 'ntffile' : 'Ouvrir le fichier', 'ntfreload' : 'Actualiser le contenu du dossier', 'ntfmkdir' : 'Création du dossier', 'ntfmkfile' : 'Création des fichiers', 'ntfrm' : 'Supprimer les éléments', 'ntfcopy' : 'Copier les éléments', 'ntfmove' : 'Déplacer les éléments', 'ntfprepare' : 'Préparation de la copie des éléments', 'ntfrename' : 'Renommer les fichiers', 'ntfupload' : 'Envoi des fichiers', 'ntfdownload' : 'Téléchargement des fichiers', 'ntfsave' : 'Sauvegarder les fichiers', 'ntfarchive' : 'Création de l\'archive', 'ntfextract' : 'Extraction des fichiers de l\'archive', 'ntfsearch' : 'Recherche des fichiers', 'ntfresize' : 'Redimensionner les images', 'ntfsmth' : 'Fait quelque chose', 'ntfloadimg' : 'Chargement de l\'image', 'ntfnetmount' : 'Monte le volume réseau', // added 18.04.2012 'ntfnetunmount': 'Démonte le volume réseau', // from v2.1 added 30.04.2012 'ntfdim' : 'Calcule la dimension de l\'image', // added 20.05.2013 'ntfreaddir' : 'Lecture des informations du dossier', // from v2.1 added 01.07.2013 'ntfurl' : 'Récupération de l’URL du lien', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changement de mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Vérification du nom du fichier envoyé', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Création d’un fichier pour le téléchargement', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Traitement de l\'information du chemin', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Traitement du fichier envoyé', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Mettre à la corbeille', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Restaurer depuis la corbeille', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Validation du dossier de destination', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Annuler l\'opération précédente', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Refaire l\'opération annulée', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Checking contents', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Corbeille', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Inconnue', 'Today' : 'Aujourd\'hui', 'Yesterday' : 'Hier', 'msJan' : 'Jan', 'msFeb' : 'Fév', 'msMar' : 'Mar', 'msApr' : 'Avr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aoû', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Déc', 'January' : 'Janvier', 'February' : 'Février', 'March' : 'Mars', 'April' : 'Avril', 'May' : 'Mai', 'June' : 'Juin', 'July' : 'Huillet', 'August' : 'Août', 'September' : 'Septembre', 'October' : 'Octobre', 'November' : 'Novembre', 'December' : 'Décembre', 'Sunday' : 'Dimanche', 'Monday' : 'Lundi', 'Tuesday' : 'Mardi', 'Wednesday' : 'Mercredi', 'Thursday' : 'Jeudi', 'Friday' : 'Vendredi', 'Saturday' : 'Samedi', 'Sun' : 'Dim', 'Mon' : 'Lun', 'Tue' : 'Mar', 'Wed' : 'Mer', 'Thu' : 'Jeu', 'Fri' : 'Ven', 'Sat' : 'Sam', /******************************** sort variants ********************************/ 'sortname' : 'par nom', 'sortkind' : 'par type', 'sortsize' : 'par taille', 'sortdate' : 'par date', 'sortFoldersFirst' : 'Dossiers en premier', 'sortperm' : 'par permission', // from v2.1.13 added 13.06.2016 'sortmode' : 'par mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'par propriétaire', // from v2.1.13 added 13.06.2016 'sortgroup' : 'par groupe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Egalement arborescence', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NouveauFichier.txt', // added 10.11.2015 'untitled folder' : 'NouveauDossier', // added 10.11.2015 'Archive' : 'NouvelleArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmation requise', 'confirmRm' : 'Êtes-vous certain de vouloir supprimer les éléments ?
    Cela ne peut être annulé !', 'confirmRepl' : 'Supprimer l\'ancien fichier par le nouveau ?', 'confirmRest' : 'Remplacer l\'élément existant par l\'élément de la corbeille ?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'L\'encodage n\'est pas UTf-8
    Convertir en UTF-8 ?
    Les contenus deviendront UTF-8 en sauvegardant après la conversion.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Impossible de détecter l\'encodage de ce fichier. Pour être modifié, il doit être temporairement convertit en UTF-8.
    Veuillez s\'il vous plaît sélectionner un encodage pour ce fichier.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Ce fichier a été modifié.
    Les données seront perdues si les changements ne sont pas sauvegardés.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Êtes-vous certain de vouloir déplacer les éléments vers la corbeille?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Are you sure you want to move items to "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Appliquer à tous', 'name' : 'Nom', 'size' : 'Taille', 'perms' : 'Permissions', 'modify' : 'Modifié', 'kind' : 'Type', 'read' : 'Lecture', 'write' : 'Écriture', 'noaccess' : 'Pas d\'accès', 'and' : 'et', 'unknown' : 'inconnu', 'selectall' : 'Sélectionner tous les éléments', 'selectfiles' : 'Sélectionner le(s) élément(s)', 'selectffile' : 'Sélectionner le premier élément', 'selectlfile' : 'Sélectionner le dernier élément', 'viewlist' : 'Vue par liste', 'viewicons' : 'Vue par icônes', 'viewSmall' : 'Petites icônes', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Moyennes icônes', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Grandes icônes', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Très grandes icônes', // from v2.1.39 added 22.5.2018 'places' : 'Favoris', 'calc' : 'Calculer', 'path' : 'Chemin', 'aliasfor' : 'Raccourcis pour', 'locked' : 'Verrouiller', 'dim' : 'Dimensions', 'files' : 'Fichiers', 'folders' : 'Dossiers', 'items' : 'Éléments', 'yes' : 'oui', 'no' : 'non', 'link' : 'Lien', 'searcresult' : 'Résultats de la recherche', 'selected' : 'Éléments sélectionnés', 'about' : 'À propos', 'shortcuts' : 'Raccourcis', 'help' : 'Aide', 'webfm' : 'Gestionnaire de fichier Web', 'ver' : 'Version', 'protocolver' : 'Version du protocole', 'homepage' : 'Page du projet', 'docs' : 'Documentation', 'github' : 'Forkez-nous sur Github', 'twitter' : 'Suivez nous sur twitter', 'facebook' : 'Joignez-nous facebook', 'team' : 'Équipe', 'chiefdev' : 'Développeur en chef', 'developer' : 'Développeur', 'contributor' : 'Contributeur', 'maintainer' : 'Mainteneur', 'translator' : 'Traducteur', 'icons' : 'Icônes', 'dontforget' : 'et n\'oubliez pas votre serviette', 'shortcutsof' : 'Raccourcis désactivés', 'dropFiles' : 'Déposez les fichiers ici', 'or' : 'ou', 'selectForUpload' : 'Sélectionner les fichiers à envoyer', 'moveFiles' : 'Déplacer les éléments', 'copyFiles' : 'Copier les éléments', 'restoreFiles' : 'Restaurer les éléments', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Retirer des favoris', 'aspectRatio' : 'Ratio d’affichage', 'scale' : 'Mise à l\'échelle', 'width' : 'Largeur', 'height' : 'Hauteur', 'resize' : 'Redimensionner', 'crop' : 'Recadrer', 'rotate' : 'Rotation', 'rotate-cw' : 'Rotation de 90 degrés horaire', 'rotate-ccw' : 'Rotation de 90 degrés antihoraire', 'degree' : '°', 'netMountDialogTitle' : 'Monter un volume réseau', // added 18.04.2012 'protocol' : 'Protocole', // added 18.04.2012 'host' : 'Hôte', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Utilisateur', // added 18.04.2012 'pass' : 'Mot de passe', // added 18.04.2012 'confirmUnmount' : 'Démonter $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Glissez-déposez depuis le navigateur de fichier', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Glissez-déposez les fichiers ici', // from v2.1 added 07.04.2014 'encoding' : 'Encodage', // from v2.1 added 19.12.2014 'locale' : 'Encodage régional', // from v2.1 added 19.12.2014 'searchTarget' : 'Destination: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Recherche par type MIME', // from v2.1 added 22.5.2015 'owner' : 'Propriétaire', // from v2.1 added 20.6.2015 'group' : 'Groupe', // from v2.1 added 20.6.2015 'other' : 'Autre', // from v2.1 added 20.6.2015 'execute' : 'Exécuter', // from v2.1 added 20.6.2015 'perm' : 'Permission', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Le dossier est vide', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Le dossier est vide.\\ Glissez-déposez pour ajouter des éléments.', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Le dossier est vide.\\ Appuyez longuement pour ajouter des éléments.', // from v2.1.6 added 30.12.2015 'quality' : 'Qualité', // from v2.1.6 added 5.1.2016 'autoSync' : 'Synchronisation automatique', // from v2.1.6 added 10.1.2016 'moveUp' : 'Déplacer vers le haut', // from v2.1.6 added 18.1.2016 'getLink' : 'Obtenir le lien d’URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Éléments sélectionnés ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID du dossier', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permettre l\'accès hors-ligne', // from v2.1.10 added 3.25.2016 'reAuth' : 'Pour se réauthentifier', // from v2.1.10 added 3.25.2016 'nowLoading' : 'En cours de chargement...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Ouvrir multiples fichiers', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Vous allez ouvrir $1 fichiers. Êtes-vous sûr de vouloir les ouvrir dans le navigateur ?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Aucun résultat trouvé avec les paramètres de recherche.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Modification d\'un fichier.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Vous avez sélectionné $1 éléments.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Vous avez $1 éléments dans le presse-papier.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Recherche incrémentale disponible uniquement pour la vue active.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Rétablir', // from v2.1.15 added 3.8.2016 'complete' : '$1 complété', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu contextuel', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Tourner la page', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volumes principaux', // from v2.1.16 added 16.9.2016 'reset' : 'Réinitialiser', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Couleur de fond', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Sélecteur de couleur', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Grille 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Actif', // from v2.1.16 added 4.10.2016 'disabled' : 'Inactif', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Aucun résultat trouvé.\\AAppuyez sur [Entrée] pour développer la cible de recherche.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Aucun résultat trouvé pour la recherche par première lettre.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Label texte', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins restantes', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Réouvrir avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Sauvegarder avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Choisir le dossier', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Recherche par première lettre', // from v2.1.23 added 24.3.2017 'presets' : 'Présélections', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Impossible de mettre autant d\'éléments à la corbeille.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Zone de texte', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vider le dossier "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Il n\'y a pas d\'élément dans le dossier "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Préférence', // from v2.1.26 added 28.6.2017 'language' : 'Configuration de langue', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialisation des configurations sauvegardées dans ce navigateur', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Paramètres de la barre d\'outils', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caractères restants.', // from v2.1.29 added 30.8.2017 'sum' : 'Somme', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Taille de fichier brute', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Sélectionner', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action lors de la sélection d\'un fichier', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Ouvrir avec le dernier éditeur utilisé', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverser la sélection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Êtes-vous sûr de vouloir renommer les éléments sélectionnés $1 en $2 ?
    L\'action est définitive !', // from v2.1.31 added 4.12.2017 'batchRename' : 'Renommer le Batch', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nombre', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Ajouter un préfixe', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Ajouter un suffixe', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Modifier l\'extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Paramètres des colonnes (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Les changements seront immédiatement appliqués à l\'archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Aucun changement ne sera appliqué tant que ce volume n\'a pas été démonté.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Le(s) volume(s) suivant(s) montés sur ce volume seront également démontés. Êtes-vous sûr de vouloir le démonter ?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informations sur la sélection', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithme de hachage de fichier', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Appuyez à nouveau pour quitter.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barre d\'outils', // from v2.1.38 added 4.4.2018 'workspace' : 'Espace de travail', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialogue', // from v2.1.38 added 4.4.2018 'all' : 'Tout', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icon Size (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open the maximized editor window', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Because conversion by API is not currently available, please convert on the website.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convert on the site of $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Show hidden items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Hide hidden items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Show/Hide hidden items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type of the Text file', // from v2.1.41 added 7.8.2018 'add' : 'Add', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Description', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Author', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'License', // from v2.1.43 added 19.10.2018 'exportToSave' : 'This item can\'t be saved. To avoid losing the edits you need to export to your PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double click on the file to select it.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Use fullscreen mode', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Inconnu', 'kindRoot' : 'Volume principal', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Dossier', 'kindSelects' : 'Sélections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Raccourci', 'kindAliasBroken' : 'Raccourci cassé', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Document Postscript', 'kindMsOffice' : 'Document Microsoft Office', 'kindMsWord' : 'Document Microsoft Word', 'kindMsExcel' : 'Document Microsoft Excel', 'kindMsPP' : 'Présentation Microsoft PowerPoint', 'kindOO' : 'Document OpenOffice', 'kindAppFlash' : 'Application Flash', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Fichier BitTorrent', 'kind7z' : 'Archive 7z', 'kindTAR' : 'Archive TAR', 'kindGZIP' : 'Archive GZIP', 'kindBZIP' : 'Archive BZIP', 'kindXZ' : 'Archive XZ', 'kindZIP' : 'Archive ZIP', 'kindRAR' : 'Archive RAR', 'kindJAR' : 'Fichier Java JAR', 'kindTTF' : 'Police True Type', 'kindOTF' : 'Police Open Type', 'kindRPM' : 'Package RPM', // texts 'kindText' : 'Document Text', 'kindTextPlain' : 'Texte non formaté', 'kindPHP' : 'Source PHP', 'kindCSS' : 'Feuille de style en cascade', 'kindHTML' : 'Document HTML', 'kindJS' : 'Source JavaScript', 'kindRTF' : 'Format de texte enrichi (Rich Text Format)', 'kindC' : 'Source C', 'kindCHeader' : 'Source header C', 'kindCPP' : 'Source C++', 'kindCPPHeader' : 'Source header C++', 'kindShell' : 'Shell script Unix', 'kindPython' : 'Source Python', 'kindJava' : 'Source Java', 'kindRuby' : 'Source Ruby', 'kindPerl' : 'Script Perl', 'kindSQL' : 'Source SQL', 'kindXML' : 'Document XML', 'kindAWK' : 'Source AWK', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Document Docbook XML', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Image', 'kindBMP' : 'Image BMP', 'kindJPEG' : 'Image JPEG', 'kindGIF' : 'Image GIF', 'kindPNG' : 'Image PNG', 'kindTIFF' : 'Image TIFF', 'kindTGA' : 'Image TGA', 'kindPSD' : 'Image Adobe Photoshop', 'kindXBITMAP' : 'Image X bitmap', 'kindPXM' : 'Image Pixelmator', // media 'kindAudio' : 'Son', 'kindAudioMPEG' : 'Son MPEG', 'kindAudioMPEG4' : 'Son MPEG-4', 'kindAudioMIDI' : 'Son MIDI', 'kindAudioOGG' : 'Son Ogg Vorbis', 'kindAudioWAV' : 'Son WAV', 'AudioPlaylist' : 'Liste de lecture audio', 'kindVideo' : 'Vidéo', 'kindVideoDV' : 'Vidéo DV', 'kindVideoMPEG' : 'Vidéo MPEG', 'kindVideoMPEG4' : 'Vidéo MPEG-4', 'kindVideoAVI' : 'Vidéo AVI', 'kindVideoMOV' : 'Vidéo Quick Time', 'kindVideoWM' : 'Vidéo Windows Media', 'kindVideoFlash' : 'Vidéo Flash', 'kindVideoMKV' : 'Vidéo Matroska', 'kindVideoOGG' : 'Vidéo Ogg' } }; })); application/library/js/i18n/elfinder.no.js000064400000037156146731177160014500 0ustar00/** * Norwegian translation * @author Stian Jacobsen * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.no = { translator : 'Stian Jacobsen <stian@promonorge.no>', language : 'Norwegian Bokmål', dateFormat : 'M d, Y h:i A', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM direction : 'ltr', messages : { /********************************** errors **********************************/ 'error' : 'Feil', 'errUnknown' : 'Ukjent feil.', 'errUnknownCmd' : 'Ukjent kommando.', 'errJqui' : 'Ugyldig jQuery UI konfigurasjon. Selectable, draggable og droppable komponentene må være inkludert.', 'errNode' : 'elFinder påkrever at DOM Elementer kan opprettes.', 'errURL' : 'Ugyldig elFinder konfigurasjon! URL-valget er ikke satt.', 'errAccess' : 'Ingen adgang.', 'errConnect' : 'Kunne ikke koble til.', 'errAbort' : 'Tilkoblingen avbrutt.', 'errTimeout' : 'Tilkoblingen tidsavbrudd.', 'errNotFound' : 'Backend ble ikke funnet', 'errResponse' : 'Ugyldig backend respons.', 'errConf' : 'Ugyldig backend konfigurasjon.', 'errJSON' : 'PHP JSON modul er ikke installert.', 'errNoVolumes' : 'Lesbar volum er ikke tilgjennelig.', 'errCmdParams' : 'Ugyldig parameter for kommando "$1".', 'errDataNotJSON' : 'Innhold er ikke JSON.', 'errDataEmpty' : 'Innholdet er tomt.', 'errCmdReq' : 'Backend spørringen påkrever kommando.', 'errOpen' : 'Kunne ikke åpne "$1".', 'errNotFolder' : 'Objektet er ikke en mappe.', 'errNotFile' : 'Objektet er ikke en fil.', 'errRead' : 'Kunne ikke lese "$1".', 'errWrite' : 'Kunne ikke skrive til "$1".', 'errPerm' : 'Du har ikke rettigheter.', 'errLocked' : '"$1" er låst og kan ikke flyttes, slettes eller endres', 'errExists' : 'Filen "$1" finnes allerede.', 'errInvName' : 'Ugyldig filnavn.', 'errFolderNotFound' : 'Mappen finnes ikke.', 'errFileNotFound' : 'Filen finnes ikke.', 'errTrgFolderNotFound' : 'Målmappen "$1" ble ikke funnet.', 'errPopup' : 'Nettleseren din blokkerte et pop-up vindu. For å åpne filen må du aktivere pop-up i din nettlesers innstillinger.', 'errMkdir' : 'Kunne ikke opprette mappen "$1".', 'errMkfile' : 'Kunne ikke opprette filen "$1".', 'errRename' : 'Kunne ikke gi nytt navn til "$1".', 'errCopyFrom' : 'Kopiere filer fra "$1" er ikke tillatt.', 'errCopyTo' : 'Kopiere filer til "$1" er ikke tillatt.', 'errUpload' : 'Feil under opplasting.', 'errUploadFile' : 'Kunne ikke laste opp "$1".', 'errUploadNoFiles' : 'Ingen filer funnet til opplasting.', 'errUploadTotalSize' : 'Innholdet overgår maksimum tillatt størrelse.', 'errUploadFileSize' : 'Filen vergår maksimum tillatt størrelse.', 'errUploadMime' : 'Filtypen ikke tillatt.', 'errUploadTransfer' : '"$1" overførings feil.', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Kunne ikke lagre "$1".', 'errCopy' : 'Kunne ikke kopiere "$1".', 'errMove' : 'Kunne ikke flytte "$1".', 'errCopyInItself' : 'Kunne ikke kopiere "$1" til seg selv.', 'errRm' : 'Kunne ikke slette "$1".', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Kunne ikke pakke ut filer fra "$1".', 'errArchive' : 'Kunne ikke opprette arkiv.', 'errArcType' : 'akriv-typen er ikke støttet.', 'errNoArchive' : 'Filen er ikke et arkiv eller et arkiv som ikke er støttet.', 'errCmdNoSupport' : 'Backend støtter ikke denne kommandoen.', 'errReplByChild' : 'The folder “$1” can’t be replaced by an item it contains.', 'errArcSymlinks' : 'For security reason denied to unpack archives contains symlinks or files with not allowed names.', // edited 24.06.2012 'errArcMaxSize' : 'Archive files exceeds maximum allowed size.', 'errResize' : 'Unable to resize "$1".', 'errResizeDegree' : 'Invalid rotate degree.', // added 7.3.2013 'errResizeRotate' : 'Unable to rotate image.', // added 7.3.2013 'errResizeSize' : 'Invalid image size.', // added 7.3.2013 'errResizeNoChange' : 'Image size not changed.', // added 7.3.2013 'errUsupportType' : 'Unsupported file type.', 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', // added 9.11.2011 'errNetMount' : 'Unable to mount "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Unsupported protocol.', // added 17.04.2012 'errNetMountFailed' : 'Mount failed.', // added 17.04.2012 'errNetMountHostReq' : 'Host required.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'Opprett arkiv', 'cmdback' : 'Tilbake', 'cmdcopy' : 'Kopier', 'cmdcut' : 'Klipp ut', 'cmddownload' : 'Last ned', 'cmdduplicate' : 'Dupliser', 'cmdedit' : 'Rediger fil', 'cmdextract' : 'Pakk ut filer fra arkiv', 'cmdforward' : 'Frem', 'cmdgetfile' : 'Velg filer', 'cmdhelp' : 'Om', 'cmdhome' : 'Hjem', 'cmdinfo' : 'Vis info', 'cmdmkdir' : 'Ny mappe', 'cmdmkfile' : 'Ny fil', 'cmdopen' : 'Åpne', 'cmdpaste' : 'Lim inn', 'cmdquicklook' : 'Forhåndsvis', 'cmdreload' : 'Last inn på nytt', 'cmdrename' : 'Gi nytt navn', 'cmdrm' : 'Slett', 'cmdsearch' : 'Find filer', 'cmdup' : 'Opp et nivå', 'cmdupload' : 'Last opp filer', 'cmdview' : 'Vis', 'cmdresize' : 'Resize & Rotate', 'cmdsort' : 'Sort', 'cmdnetmount' : 'Mount network volume', /*********************************** buttons ***********************************/ 'btnClose' : 'Lukk', 'btnSave' : 'Lagre', 'btnRm' : 'Slett', 'btnApply' : 'Apply', 'btnCancel' : 'Avbryt', 'btnNo' : 'Nei', 'btnYes' : 'Ja', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'Åpne mappe', 'ntffile' : 'Åpne fil', 'ntfreload' : 'Last inn mappen på nytt', 'ntfmkdir' : 'Oppretter mappe', 'ntfmkfile' : 'Oppretter filer', 'ntfrm' : 'Sletter filer', 'ntfcopy' : 'Kopierer filer', 'ntfmove' : 'Flytter filer', 'ntfprepare' : 'Gjør klar til kopiering av filer', 'ntfrename' : 'Gir nytt navn til filer', 'ntfupload' : 'Laster opp filer', 'ntfdownload' : 'Laster ned filer', 'ntfsave' : 'Lagrer filer', 'ntfarchive' : 'Oppretter arkiv', 'ntfextract' : 'Pakker ut filer fra arkiv', 'ntfsearch' : 'Søker i filer', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Gjør noe... >_<', 'ntfloadimg' : 'Loading image', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013 /************************************ dates **********************************/ 'dateUnknown' : 'Ukjent', 'Today' : 'I dag', 'Yesterday' : 'I går', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Des', 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', 'Sun' : 'Sun', 'Mon' : 'Mon', 'Tue' : 'Tue', 'Wed' : 'Wed', 'Thu' : 'Thu', 'Fri' : 'Fri', 'Sat' : 'Sat', /******************************** sort variants ********************************/ 'sortname' : 'by name', 'sortkind' : 'by kind', 'sortsize' : 'by size', 'sortdate' : 'by date', 'sortFoldersFirst' : 'Folders first', /********************************** messages **********************************/ 'confirmReq' : 'Bekreftelse nødvendig', 'confirmRm' : 'Er du sikker på at du ønsker å slette filene?', 'confirmRepl' : 'Erstatt fil?', 'apllyAll' : 'Apply to all', 'name' : 'Navn', 'size' : 'Størrelse', 'perms' : 'Rettigheter', 'modify' : 'Endret', 'kind' : 'Type', 'read' : 'les', 'write' : 'skriv', 'noaccess' : 'ingen adgang', 'and' : 'og', 'unknown' : 'ukjent', 'selectall' : 'Velg alle filene', 'selectfiles' : 'Velg fil(er)', 'selectffile' : 'Velg første fil', 'selectlfile' : 'Velg siste fil', 'viewlist' : 'Listevisning', 'viewicons' : 'Ikoner', 'places' : 'Områder', 'calc' : 'Beregn', 'path' : 'Bane', 'aliasfor' : 'Alias for', 'locked' : 'Låst', 'dim' : 'Størrelser', 'files' : 'Filer', 'folders' : 'Mapper', 'items' : 'objekter', 'yes' : 'ja', 'no' : 'nei', 'link' : 'Link', 'searcresult' : 'Søkeresultater', 'selected' : 'valgte filer', 'about' : 'Om', 'shortcuts' : 'Snarveier', 'help' : 'Hjelp', 'webfm' : 'Web-filbehandler', 'ver' : 'Versjon', 'protocolver' : 'protokol versjon', 'homepage' : 'Project home', 'docs' : 'dokumentasjon', 'github' : 'Fork us on Github', 'twitter' : 'Follow us on twitter', 'facebook' : 'Join us on facebook', 'team' : 'Team', 'chiefdev' : 'chief developer', 'developer' : 'developer', 'contributor' : 'contributor', 'maintainer' : 'maintainer', 'translator' : 'translator', 'icons' : 'Ikoner', 'dontforget' : 'and don\'t forget to bring a towel', 'shortcutsof' : 'Snarveier avslått', 'dropFiles' : 'Slipp filer her', 'or' : 'eller', 'selectForUpload' : 'Velg filer til opplasting', 'moveFiles' : 'Flytt filer', 'copyFiles' : 'Kopier filer', 'rmFromPlaces' : 'Remove from places', 'aspectRatio' : 'Aspect ratio', 'scale' : 'Scale', 'width' : 'Width', 'height' : 'Height', 'resize' : 'Resize', 'crop' : 'Crop', 'rotate' : 'Rotate', 'rotate-cw' : 'Rotate 90 degrees CW', 'rotate-ccw' : 'Rotate 90 degrees CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'User', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ukjent', 'kindFolder' : 'Mappe', 'kindAlias' : 'Snarvei', 'kindAliasBroken' : 'Ugyldig snarvei', // applications 'kindApp' : 'Programfil', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint presentation', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash', 'kindPDF' : 'Portabelt dokument (PDF)', 'kindTorrent' : 'Bittorrent file', 'kind7z' : '7z arkiv', 'kindTAR' : 'TAR arkiv', 'kindGZIP' : 'GZIP arkiv', 'kindBZIP' : 'BZIP arkiv', 'kindXZ' : 'XZ arkiv', 'kindZIP' : 'ZIP arkiv', 'kindRAR' : 'RAR ar', 'kindJAR' : 'Java JAR file', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM package', // texts 'kindText' : 'Tekst dokument', 'kindTextPlain' : 'Plain text', 'kindPHP' : 'PHP kilde', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript', 'kindRTF' : 'Rikt Tekst Format', 'kindC' : 'C kilde', 'kindCHeader' : 'C header kilde', 'kindCPP' : 'C++ kilde', 'kindCPPHeader' : 'C++ header kilde', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python kilde', 'kindJava' : 'Java kilde', 'kindRuby' : 'Ruby kilde', 'kindPerl' : 'Perl script', 'kindSQL' : 'SQL skilde', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK kilde', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML dokument', // Images 'kindImage' : 'Bilde', 'kindBMP' : 'BMP bilde', 'kindJPEG' : 'JPEG bilde', 'kindGIF' : 'GIF bilde', 'kindPNG' : 'PNG bilde', 'kindTIFF' : 'TIFF bilde', 'kindTGA' : 'TGA bilde', 'kindPSD' : 'Adobe Photoshop bilde', 'kindXBITMAP' : 'X bitmap bilde', 'kindPXM' : 'Pixelmator bilde', // media 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 spilleliste', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV film', 'kindVideoMPEG' : 'MPEG film', 'kindVideoMPEG4' : 'MPEG-4 film', 'kindVideoAVI' : 'AVI film', 'kindVideoMOV' : 'Quick Time film', 'kindVideoWM' : 'Windows Media film', 'kindVideoFlash' : 'Flash film', 'kindVideoMKV' : 'Matroska film', 'kindVideoOGG' : 'Ogg film' } }; })); application/library/js/i18n/elfinder.bg.js000064400000117206146731177160014447 0ustar00/** * Bulgarian translation * @author Stamo Petkov * @author Nikolay Petkov * @version 2018-07-28 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.bg = { translator : 'Stamo Petkov <stamo.petkov@gmail.com>, Nikolay Petkov <office@cmstory.com>', language : 'Bulgarian', direction : 'ltr', dateFormat : 'd.m.Y H:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM nonameDateFormat : 'Ymd-His', // to apply if upload file is noname: 120513172700 messages : { /********************************** errors **********************************/ 'error' : 'Грешка', 'errUnknown' : 'Непозната грешка.', 'errUnknownCmd' : 'Непозната команда.', 'errJqui' : 'Грешна конфигурация на jQuery UI. Компонентите selectable, draggable и droppable трябва да са включени.', 'errNode' : 'elFinder изисква да бъде създаден DOM елемент.', 'errURL' : 'Грешка в настройките на elFinder! не е зададена стойност на URL.', 'errAccess' : 'Достъп отказан.', 'errConnect' : 'Няма връзка със сървъра.', 'errAbort' : 'Връзката е прекъсната.', 'errTimeout' : 'Просрочена връзка.', 'errNotFound' : 'Сървърът не е намерен.', 'errResponse' : 'Грешен отговор от сървъра.', 'errConf' : 'Грешни настройки на сървъра.', 'errJSON' : 'Не е инсталиран модул на PHP за JSON.', 'errNoVolumes' : 'Няма дялове достъпни за четене.', 'errCmdParams' : 'Грешни параметри на командата "$1".', 'errDataNotJSON' : 'Данните не са JSON.', 'errDataEmpty' : 'Липсват данни.', 'errCmdReq' : 'Запитването от сървъра изисква име на команда.', 'errOpen' : 'Неуспешно отваряне на "$1".', 'errNotFolder' : 'Обектът не е папка.', 'errNotFile' : 'Обектът не е файл.', 'errRead' : 'Неуспешно прочитане на "$1".', 'errWrite' : 'Неуспешен запис в "$1".', 'errPerm' : 'Разрешение отказано.', 'errLocked' : '"$1" е заключен и не може да бъде преименуван, местен или премахван.', 'errExists' : 'Вече съществува файл с име "$1"', 'errInvName' : 'Грешно име на файл.', 'errInvDirname' : 'Невалидно име на папка.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Папката не е открита.', 'errFileNotFound' : 'Файлът не е открит.', 'errTrgFolderNotFound' : 'Целевата папка "$1" не е намерена.', 'errPopup' : 'Браузъра блокира отварянето на прозорец. За да отворите файла, разрешете отварянето в настройките на браузъра.', 'errMkdir' : 'Неуспешно създаване на папка "$1".', 'errMkfile' : 'Неуспешно създаване на файл "$1".', 'errRename' : 'Неуспешно преименуване на "$1".', 'errCopyFrom' : 'Копирането на файлове от том "$1" не е разрешено.', 'errCopyTo' : 'Копирането на файлове в том "$1" не е разрешено.', 'errMkOutLink' : 'Неуспех при създаване на връзка извън началото на ресурса.', // from v2.1 added 03.10.2015 'errUpload' : 'Грешка при качване.', // old name - errUploadCommon 'errUploadFile' : 'Неуспешно качване на "$1".', // old name - errUpload 'errUploadNoFiles' : 'Не са намерени файлове за качване.', 'errUploadTotalSize' : 'Данните превишават максимално допостумия размер.', // old name - errMaxSize 'errUploadFileSize' : 'Файлът превишава максимално допустимия размер.', // old name - errFileMaxSize 'errUploadMime' : 'Непозволен тип на файла.', 'errUploadTransfer' : '"$1" грешка при предаване.', 'errUploadTemp' : 'Неуспешно създаване на временен файл за качване.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Обект "$1" вече съществува на това място и не може да бъде заменен от обект от друг тип.', // new 'errReplace' : 'Не може да се замени "$1".', 'errSave' : 'Не може да се запише "$1".', 'errCopy' : 'Не може да се копира "$1".', 'errMove' : 'Не може да се премести "$1".', 'errCopyInItself' : 'Не може да се копира "$1" върху самия него.', 'errRm' : 'Не може да се премахне "$1".', 'errTrash' : 'Не може да се премести в кошчето', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Не може да се премахне изходния файл(ове).', 'errExtract' : 'Не може да се извлекат файловете от "$1".', 'errArchive' : 'Не може да се създаде архив.', 'errArcType' : 'Неподдържан тип на архива.', 'errNoArchive' : 'Файлът не е архив или е от неподдържан тип.', 'errCmdNoSupport' : 'Сървъра не поддържа тази команда.', 'errReplByChild' : 'Папката “$1” не може да бъде заменена от съдържащ се в нея елемент.', 'errArcSymlinks' : 'От съображения за сигурност няма да бъдат разопаковани архиви съдържащи symlinks.', // edited 24.06.2012 'errArcMaxSize' : 'Архивните файлове превишават максимално допустимия размер.', 'errResize' : 'Не може да се преоразмери "$1".', 'errResizeDegree' : 'Невалиден градус за ротация.', // added 7.3.2013 'errResizeRotate' : 'Изображението не е ротирано.', // added 7.3.2013 'errResizeSize' : 'Невалиден размер на изображение.', // added 7.3.2013 'errResizeNoChange' : 'Размерът на изображението не е променен.', // added 7.3.2013 'errUsupportType' : 'Неподдържан тип на файл.', 'errNotUTF8Content' : 'Файл "$1" не е в UTF-8 формат и не може да бъде редактиран.', // added 9.11.2011 'errNetMount' : 'Не може да се монтира "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Неподдържан протокол.', // added 17.04.2012 'errNetMountFailed' : 'Монтирането не е успешно.', // added 17.04.2012 'errNetMountHostReq' : 'Хост се изисква.', // added 18.04.2012 'errSessionExpires' : 'Сесията ви изтече поради липса на активност.', 'errCreatingTempDir' : 'Не може да се създаде временна директория: "$1"', 'errFtpDownloadFile' : 'Не може да се изтегли файл от FTP: "$1"', 'errFtpUploadFile' : 'Не може да се качи файл на FTP: "$1"', 'errFtpMkdir' : 'Не може да се създаде директория на FTP: "$1"', 'errArchiveExec' : 'Грешка при архивиране на файлове: "$1"', 'errExtractExec' : 'Грешка при разархивиране на файлове: "$1"', 'errNetUnMount' : 'Не може да се размонтира', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Не е конвертируем до UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Опитайте Google Chrome, ако искате да качите папка.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Времето изтече при търсенето на "$1". Резултатът от търсенето е частичен.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Необходимо е повторно оторизиране.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Максималният брой избрани файлове е $ 1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Не може да се възстанови от кошчето. Не може да се определи местоположението за възстановяване.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Не е намерен редактор за този тип файл.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Възникна грешка на сървъра.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Папката "$1" не може да се изпразни.', // from v2.1.25 added 22.6.2017 /******************************* commands names ********************************/ 'cmdarchive' : 'Създай архив', 'cmdback' : 'Назад', 'cmdcopy' : 'Копирай', 'cmdcut' : 'Изрежи', 'cmddownload' : 'Свали', 'cmdduplicate' : 'Дублирай', 'cmdedit' : 'Редактирай файл', 'cmdextract' : 'Извлечи файловете от архива', 'cmdforward' : 'Напред', 'cmdgetfile' : 'Избери файлове', 'cmdhelp' : 'За тази програма', 'cmdhome' : 'Начало', 'cmdinfo' : 'Информация', 'cmdmkdir' : 'Нова папка', 'cmdmkdirin' : 'В нова папка', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Нов файл', 'cmdopen' : 'Отвори', 'cmdpaste' : 'Вмъкни', 'cmdquicklook' : 'Преглед', 'cmdreload' : 'Презареди', 'cmdrename' : 'Преименувай', 'cmdrm' : 'Изтрий', 'cmdtrash' : 'В кошчето', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Възстанови', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Намери файлове', 'cmdup' : 'Една директория нагоре', 'cmdupload' : 'Качи файлове', 'cmdview' : 'Виж', 'cmdresize' : 'Промени изображение', 'cmdsort' : 'Подреди', 'cmdnetmount' : 'Монтирай мрежов ресурс', // added 18.04.2012 'cmdnetunmount': 'Размонтирай', // from v2.1 added 30.04.2012 'cmdplaces' : 'Към избрани', // added 28.12.2014 'cmdchmod' : 'Промяна на вид', // from v2.1 added 20.6.2015 'cmdopendir' : 'Отвори папка', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Нулирай ширината на колоната', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Цял екран', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Премести', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Изпразни папката', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Отмени', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Преправи', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Настройки', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Избери всичко', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Избери нищо', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Обърни селекцията', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Отвори в нов прозорец', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Скрий (лично)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Затвори', 'btnSave' : 'Запиши', 'btnRm' : 'Премахни', 'btnApply' : 'Приложи', 'btnCancel' : 'Отказ', 'btnNo' : 'Не', 'btnYes' : 'Да', 'btnMount' : 'Монтирай', // added 18.04.2012 'btnApprove': 'Отиди на $1 и одобри', // from v2.1 added 26.04.2012 'btnUnmount': 'Размонтирай', // from v2.1 added 30.04.2012 'btnConv' : 'Конвертирай', // from v2.1 added 08.04.2014 'btnCwd' : 'Тук', // from v2.1 added 22.5.2015 'btnVolume' : 'Ресурс', // from v2.1 added 22.5.2015 'btnAll' : 'Всички', // from v2.1 added 22.5.2015 'btnMime' : 'MIME тип', // from v2.1 added 22.5.2015 'btnFileName':'Име', // from v2.1 added 22.5.2015 'btnSaveClose': 'Запази и затвори', // from v2.1 added 12.6.2015 'btnBackup' : 'Архивирай', // fromv2.1 added 28.11.2015 'btnRename' : 'Преименувай', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Преименувай(Всички)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Пред ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'След ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Запази като', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Отваряне на папка', 'ntffile' : 'Отваряне на файл', 'ntfreload' : 'Презареждане съдържанието на папка', 'ntfmkdir' : 'Създава се директория', 'ntfmkfile' : 'Създава се файл', 'ntfrm' : 'Изтриване на файлове', 'ntfcopy' : 'Копиране на файлове', 'ntfmove' : 'Преместване на файлове', 'ntfprepare' : 'Подготовка за копиране на файлове', 'ntfrename' : 'Преименуване на файлове', 'ntfupload' : 'Качват се файлове', 'ntfdownload' : 'Свалят се файлове', 'ntfsave' : 'Запис на файлове', 'ntfarchive' : 'Създава се архив', 'ntfextract' : 'Извличат се файловете от архив', 'ntfsearch' : 'Търсят се файлове', 'ntfresize' : 'Преоразмеряват се изображения', 'ntfsmth' : 'Зает съм >_<', 'ntfloadimg' : 'Зареждат се изображения', 'ntfnetmount' : 'Монтира се мрежов ресурс', // added 18.04.2012 'ntfnetunmount': 'Размонтира се мрежов ресурс', // from v2.1 added 30.04.2012 'ntfdim' : 'Извличат се размерите на изображение', // added 20.05.2013 'ntfreaddir' : 'Извлича се информация за папка', // from v2.1 added 01.07.2013 'ntfurl' : 'Взима се URL от връзка', // from v2.1 added 11.03.2014 'ntfchmod' : 'Променя се вида на файл', // from v2.1 added 20.6.2015 'ntfpreupload': 'Проверка на името на файла за качване', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Създаване на файл за изтегляне', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Получава се информация за пътя', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Обработка на качения файл', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Прехвърлят се позиции в кошчето', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Извършва се възстановяване от кошчето', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Проверка на целевата папка', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Отмяна на предишната операция', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Възстановяване на предходните отменени', // from v2.1.27 added 31.07.2017 /*********************************** volumes *********************************/ 'volume_Trash' : 'Кошче', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'неизвестна', 'Today' : 'днес', 'Yesterday' : 'вчера', 'msJan' : 'яну', 'msFeb' : 'фев', 'msMar' : 'мар', 'msApr' : 'апр', 'msMay' : 'май', 'msJun' : 'юни', 'msJul' : 'юли', 'msAug' : 'авг', 'msSep' : 'сеп', 'msOct' : 'окт', 'msNov' : 'ное', 'msDec' : 'дек', 'January' : 'януари', 'February' : 'февруари', 'March' : 'март', 'April' : 'април', 'May' : 'май', 'June' : 'юни', 'July' : 'юли', 'August' : 'август', 'September' : 'септември', 'October' : 'октомври', 'November' : 'ноември', 'December' : 'декември', 'Sunday' : 'неделя', 'Monday' : 'понеделник', 'Tuesday' : 'вторник', 'Wednesday' : 'сряда', 'Thursday' : 'четвъртък', 'Friday' : 'петък', 'Saturday' : 'събота', 'Sun' : 'нед', 'Mon' : 'пон', 'Tue' : 'вто', 'Wed' : 'сря', 'Thu' : 'чет', 'Fri' : 'пет', 'Sat' : 'съб', /******************************** sort variants ********************************/ 'sortname' : 'по име', 'sortkind' : 'по вид', 'sortsize' : 'по размер', 'sortdate' : 'по дата', 'sortFoldersFirst' : 'Папките първи', 'sortperm' : 'по права', // from v2.1.13 added 13.06.2016 'sortmode' : 'по вид', // from v2.1.13 added 13.06.2016 'sortowner' : 'по собственик', // from v2.1.13 added 13.06.2016 'sortgroup' : 'по група', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Също дървовиден изглед', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'NewFolder', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'Изисква се подтвърждение', 'confirmRm' : 'Сигурни ли сте, че желаете да премахнете файловете?
    Това действие е необратимо!', 'confirmRepl' : 'Да заменя ли стария файл с новия?', 'confirmRest' : 'Да се замени ли съществуващата позиция с тази в кошчето?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Не е в UTF-8 формат
    Конвертиране до UTF-8?
    Съдържанието става в UTF-8 формат при запазване след конверсията.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Кодирането на този файл не може да бъде открито. Необходимо е временно да се преобразува в UTF-8 за редактиране.
    Моля, изберете кодиране на този файл.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Има направени промени.
    Те ще бъдат загубени, ако не запишете промените.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Наистина ли искате да преместите позиции в кошчето за боклук?', //from v2.1.24 added 29.4.2017 'apllyAll' : 'Приложи за всички', 'name' : 'Име', 'size' : 'Размер', 'perms' : 'Права', 'modify' : 'Променено', 'kind' : 'Вид', 'read' : 'четене', 'write' : 'запис', 'noaccess' : 'без достъп', 'and' : 'и', 'unknown' : 'непознат', 'selectall' : 'Избери всички файлове', 'selectfiles' : 'Избери файл(ове)', 'selectffile' : 'Избери първият файл', 'selectlfile' : 'Избери последният файл', 'viewlist' : 'Изглед списък', 'viewicons' : 'Изглед икони', 'viewSmall' : 'Малки икони', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Средни икони', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Големи икони', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Много големи икони', // from v2.1.39 added 22.5.2018 'places' : 'Избрани', 'calc' : 'Изчисли', 'path' : 'Път', 'aliasfor' : 'Връзка към', 'locked' : 'Заключен', 'dim' : 'Размери', 'files' : 'Файлове', 'folders' : 'Папки', 'items' : 'Позиции', 'yes' : 'да', 'no' : 'не', 'link' : 'Връзка', 'searcresult' : 'Резултати от търсенето', 'selected' : 'Избрани позиции', 'about' : 'За', 'shortcuts' : 'Бързи клавиши', 'help' : 'Помощ', 'webfm' : 'Файлов менажер за Интернет', 'ver' : 'Версия', 'protocolver' : 'версия на протокола', 'homepage' : 'Начало', 'docs' : 'Документация', 'github' : 'Разклонение в Github', 'twitter' : 'Последвайте ни в Twitter', 'facebook' : 'Присъединете се към нас във Facebook', 'team' : 'Екип', 'chiefdev' : 'Главен разработчик', 'developer' : 'разработчик', 'contributor' : 'сътрудник', 'maintainer' : 'поддръжка', 'translator' : 'преводач', 'icons' : 'Икони', 'dontforget' : 'и не забравяйте да си вземете кърпата', 'shortcutsof' : 'Преките пътища са изключени', 'dropFiles' : 'Пуснете файловете тук', 'or' : 'или', 'selectForUpload' : 'Избери файлове', 'moveFiles' : 'Премести файлове', 'copyFiles' : 'Копирай файлове', 'restoreFiles' : 'Възстанови файлове', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Премахни от избрани', 'aspectRatio' : 'Отношение', 'scale' : 'Мащаб', 'width' : 'Ширина', 'height' : 'Височина', 'resize' : 'Преоразмери', 'crop' : 'Отрежи', 'rotate' : 'Ротирай', 'rotate-cw' : 'Ротирай 90 градуса CW', 'rotate-ccw' : 'Ротирай 90 градуса CCW', 'degree' : '°', 'netMountDialogTitle' : 'Монтиране на мрежов ресурс', // added 18.04.2012 'protocol' : 'Протокол', // added 18.04.2012 'host' : 'Хост', // added 18.04.2012 'port' : 'Порт', // added 18.04.2012 'user' : 'Потребител', // added 18.04.2012 'pass' : 'Парола', // added 18.04.2012 'confirmUnmount' : 'Ще размонтирате $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Пусни или вмъкни файлове от браузера', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Тук поснете файловете, URL адресите или изображенията от клипборда', // from v2.1 added 07.04.2014 'encoding' : 'Кодировка', // from v2.1 added 19.12.2014 'locale' : 'Локали', // from v2.1 added 19.12.2014 'searchTarget' : 'Цел: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Търсене по въведен MIME тип', // from v2.1 added 22.5.2015 'owner' : 'Собственик', // from v2.1 added 20.6.2015 'group' : 'Група', // from v2.1 added 20.6.2015 'other' : 'Други', // from v2.1 added 20.6.2015 'execute' : 'Изпълнява', // from v2.1 added 20.6.2015 'perm' : 'Разрешение', // from v2.1 added 20.6.2015 'mode' : 'Вид', // from v2.1 added 20.6.2015 'emptyFolder' : 'Папката е празна', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Папката е празна\\A Влачи и пусни за да добавите файлове', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Папката е празна\\A Докоснете дълго за да добавите позиции', // from v2.1.6 added 30.12.2015 'quality' : 'Качество', // from v2.1.6 added 5.1.2016 'autoSync' : 'Автоматично синхронизиране', // from v2.1.6 added 10.1.2016 'moveUp' : 'Премести нагоре', // from v2.1.6 added 18.1.2016 'getLink' : 'Вземи URL връзка', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Избрани позиции ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Папка ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Позволи офлайн достъп', // from v2.1.10 added 3.25.2016 'reAuth' : 'За повторно удостоверяване', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Сега се зарежда...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Отваряне на няколко файла', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Опитвате се да отворите $1 файла. Наистина ли искате да ги отворите в браузъра?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Няма резултат от търсенето.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Редактира се файл.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Вие сте избрали $1 позиции.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Имате $1 позиции в клипборда.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Инкременталното търсене е само от текущия изглед.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Възстановяване', // from v2.1.15 added 3.8.2016 'complete' : '$1 завършени', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Контекстно меню', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Завъртане на страницата', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Начала на ресурси', // from v2.1.16 added 16.9.2016 'reset' : 'Нулиране', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Цвят на фона', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Средство за избиране на цвят', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px мрежа', // from v2.1.16 added 4.10.2016 'enabled' : 'Активно', // from v2.1.16 added 4.10.2016 'disabled' : 'Неактивно', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Няма резултат от търсенето в текущия изглед.\\AНатиснете [Enter] за да разширите целта на търсене.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Резултатите от търсенето на първата буква са празни в текущия изглед.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Текстов етикет', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 мин остават', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Отваряне отново с избрано кодиране', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Запазете с избраното кодиране', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Избери папка', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Търсене по първа буква', // from v2.1.23 added 24.3.2017 'presets' : 'Мостри', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Прекалено много позиции, не може да премести в кошчето.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Текстово поле', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Изпразнете папка "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'В папка "$1" няма позиции.', // from v2.1.25 added 22.6.2017 'preference' : 'Настройки', // from v2.1.26 added 28.6.2017 'language' : 'Настройка на езика', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Инициализирайте настройките запаметени в този браузър', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Настройки на лентата с инструменти', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 символа остават.', // from v2.1.29 added 30.8.2017 'sum' : 'Сумарно', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Груб размер на файла', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Фокусирайте върху елемента в диалоговия прозорец с мишката', // from v2.1.30 added 2.11.2017 'select' : 'Избери', // from v2.1.30 added 23.11.2017 'selectAction' : 'Действие при избор на файл', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Отворете с редактора, използван за последен път', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Обърнете селекцията', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Наистина ли искате да преименувате $1 избрани позиции като $2?
    Това не може да бъде отменено!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Групово преименуване', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Номер', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Добави префикс', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Добави суфикс', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Промени разширение', // from v2.1.31 added 8.12.2017 'columnPref' : 'Настройки за колони (Изглед в списък)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Всички промени ще се отразят незабавно в архива.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Промените няма да се отразят, докато не размонтирате този диск.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Информация за селекцията', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Алгоритми за показване на файловия хеш', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Натиснете отново, за да излезете.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Лента с инструменти', // from v2.1.38 added 4.4.2018 'workspace' : 'Работно пространство', // from v2.1.38 added 4.4.2018 'dialog' : 'Диалог', // from v2.1.38 added 4.4.2018 'all' : 'Всички', // from v2.1.38 added 4.4.2018 'iconSize' : 'Размер на иконите (изглед с икони)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Отваря максимизиран прозорец на редактора', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Тъй като в момента не е налична API за конверсията, моля, конвертирайте в уебсайта.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'След конверсията трябва да го качите с URL адреса или изтегления файл, за да запазите конвертирания файл.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Конвертиране на сайта от $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Интеграции', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Този elFinder има следните интегрирани външни услуги. Моля, проверете условията за ползване, декларацията за поверителност и т.н., преди да ги използвате.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Покажи скритите елементи', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Скрий скритите елементи', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Покажи/скрий скритите елементи', // from v2.1.41 added 24.7.2018 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Непознат', 'kindRoot' : 'Начало на ресурс', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Папка', 'kindSelects' : 'Селекции', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Връзка', 'kindAliasBroken' : 'Счупена връзка', // applications 'kindApp' : 'Приложение', 'kindPostscript' : 'Postscript документ', 'kindMsOffice' : 'Microsoft Office документ', 'kindMsWord' : 'Microsoft Word документ', 'kindMsExcel' : 'Microsoft Excel документ', 'kindMsPP' : 'Microsoft Powerpoint презентация', 'kindOO' : 'Open Office документ', 'kindAppFlash' : 'Flash приложение', 'kindPDF' : 'PDF документ', 'kindTorrent' : 'Bittorrent файл', 'kind7z' : '7z архив', 'kindTAR' : 'TAR архив', 'kindGZIP' : 'GZIP архив', 'kindBZIP' : 'BZIP архив', 'kindXZ' : 'XZ архив', 'kindZIP' : 'ZIP архив', 'kindRAR' : 'RAR архив', 'kindJAR' : 'Java JAR файл', 'kindTTF' : 'True Type шрифт', 'kindOTF' : 'Open Type шрифт', 'kindRPM' : 'RPM пакет', // texts 'kindText' : 'Текстов документ', 'kindTextPlain' : 'Чист текст', 'kindPHP' : 'PHP изходен код', 'kindCSS' : 'CSS таблица със стилове', 'kindHTML' : 'HTML документ', 'kindJS' : 'Javascript изходен код', 'kindRTF' : 'RTF текстови файл', 'kindC' : 'C изходен код', 'kindCHeader' : 'C header изходен код', 'kindCPP' : 'C++ изходен код', 'kindCPPHeader' : 'C++ header изходен код', 'kindShell' : 'Unix shell изходен код', 'kindPython' : 'Python изходен код', 'kindJava' : 'Java изходен код', 'kindRuby' : 'Ruby изходен код', 'kindPerl' : 'Perl изходен код', 'kindSQL' : 'SQL изходен код', 'kindXML' : 'XML документ', 'kindAWK' : 'AWK изходен код', 'kindCSV' : 'CSV стойности разделени със запетая', 'kindDOCBOOK' : 'Docbook XML документ', 'kindMarkdown' : 'Markdown текст', // added 20.7.2015 // images 'kindImage' : 'Изображение', 'kindBMP' : 'BMP изображение', 'kindJPEG' : 'JPEG изображение', 'kindGIF' : 'GIF изображение', 'kindPNG' : 'PNG изображение', 'kindTIFF' : 'TIFF изображение', 'kindTGA' : 'TGA изображение', 'kindPSD' : 'Adobe Photoshop изображение', 'kindXBITMAP' : 'X bitmap изображение', 'kindPXM' : 'Pixelmator изображение', // media 'kindAudio' : 'Аудио медия', 'kindAudioMPEG' : 'MPEG звук', 'kindAudioMPEG4' : 'MPEG-4 звук', 'kindAudioMIDI' : 'MIDI звук', 'kindAudioOGG' : 'Ogg Vorbis звук', 'kindAudioWAV' : 'WAV звук', 'AudioPlaylist' : 'MP3 списък за изпълнение', 'kindVideo' : 'Видео медия', 'kindVideoDV' : 'DV филм', 'kindVideoMPEG' : 'MPEG филм', 'kindVideoMPEG4' : 'MPEG-4 филм', 'kindVideoAVI' : 'AVI филм', 'kindVideoMOV' : 'Quick Time филм', 'kindVideoWM' : 'Windows Media филм', 'kindVideoFlash' : 'Flash филм', 'kindVideoMKV' : 'Matroska филм', 'kindVideoOGG' : 'Ogg филм' } }; })); application/library/js/i18n/elfinder.it.js000064400000104123146731177160014465 0ustar00/** * Italiano translation * @author Alberto Tocci (alberto.tocci@gmail.com) * @author Claudio Nicora (coolsoft.ita@gmail.com) * @author Stefano Galeazzi * @author Thomas Camaran * @author Fabio Ferrero * @version 2023-04-21 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.it = { translator : 'Alberto Tocci (alberto.tocci@gmail.com), Claudio Nicora (coolsoft.ita@gmail.com), Stefano Galeazzi <stefano.galeazzi@probanet.it>, Thomas Camaran <camaran@gmail.com>, Fabio Ferrero <fabioferrero@gmail.com>', language : 'Italiano', direction : 'ltr', dateFormat : 'd/m/Y H:i', // will show like: 21/04/2023 16:21 fancyDateFormat : '$1 H:i', // will show like: Oggi 16:21 nonameDateFormat : 'ymd-His', // noname upload will show like: 230421-162111 messages : { /********************************** errors **********************************/ 'error' : 'Errore', 'errUnknown' : 'Errore sconosciuto.', 'errUnknownCmd' : 'Comando sconosciuto.', 'errJqui' : 'Configurazione JQuery UI non valida. Devono essere inclusi i plugin Selectable, Draggable e Droppable.', 'errNode' : 'elFinder necessita dell\'elemento DOM per essere inizializzato.', 'errURL' : 'Configurazione non valida.Il parametro URL non è settato.', 'errAccess' : 'Accesso negato.', 'errConnect' : 'Impossibile collegarsi al backend.', 'errAbort' : 'Connessione annullata.', 'errTimeout' : 'Timeout di connessione.', 'errNotFound' : 'Backend non trovato.', 'errResponse' : 'Risposta non valida dal backend.', 'errConf' : 'Configurazione backend non valida.', 'errJSON' : 'Modulo PHP JSON non installato.', 'errNoVolumes' : 'Non è stato possibile leggere i volumi.', 'errCmdParams' : 'Parametri non validi per il comando "$1".', 'errDataNotJSON' : 'I dati non sono nel formato JSON.', 'errDataEmpty' : 'Stringa vuota.', 'errCmdReq' : 'La richiesta al backend richiede il nome del comando.', 'errOpen' : 'Impossibile aprire "$1".', 'errNotFolder' : 'L\'oggetto non è una cartella..', 'errNotFile' : 'L\'oggetto non è un file.', 'errRead' : 'Impossibile leggere "$1".', 'errWrite' : 'Non è possibile scrivere in "$1".', 'errPerm' : 'Permesso negato.', 'errLocked' : '"$1" è bloccato e non può essere rinominato, spostato o eliminato.', 'errExists' : 'Il file "$1" è già esistente.', 'errInvName' : 'Nome file non valido.', 'errInvDirname' : 'Nome cartella non valido.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Cartella non trovata.', 'errFileNotFound' : 'File non trovato.', 'errTrgFolderNotFound' : 'La cartella di destinazione"$1" non è stata trovata.', 'errPopup' : 'Il tuo Browser non consente di aprire finestre di pop-up. Per aprire il file abilita questa opzione nelle impostazioni del tuo Browser.', 'errMkdir' : 'Impossibile creare la cartella "$1".', 'errMkfile' : 'Impossibile creare il file "$1".', 'errRename' : 'Impossibile rinominare "$1".', 'errCopyFrom' : 'Non è possibile copiare file da "$1".', 'errCopyTo' : 'Non è possibile copiare file in "$1".', 'errMkOutLink' : 'Impossibile creare un link all\'esterno della radice del volume.', // from v2.1 added 03.10.2015 'errUpload' : 'Errore di Caricamento.', // old name - errUploadCommon 'errUploadFile' : 'Impossibile Caricare "$1".', // old name - errUpload 'errUploadNoFiles' : 'Non sono stati specificati file da caricare.', 'errUploadTotalSize' : 'La dimensione totale dei file supera il limite massimo consentito.', // old name - errMaxSize 'errUploadFileSize' : 'Le dimensioni del file superano il massimo consentito.', // old name - errFileMaxSize 'errUploadMime' : 'FileType non consentito.', 'errUploadTransfer' : 'Trasferimento errato del file "$1".', 'errUploadTemp' : 'Impossibile creare il file temporaneo per l\'upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'L\'oggetto "$1" esiste già in questa cartella e non può essere sostituito con un oggetto di un tipo differente.', // new 'errReplace' : 'Impossibile sostituire "$1".', 'errSave' : 'Impossibile salvare "$1".', 'errCopy' : 'Impossibile copiare "$1".', 'errMove' : 'Impossibile spostare "$1".', 'errCopyInItself' : 'Sorgente e destinazione risultato essere uguali.', 'errRm' : 'Impossibile rimuovere "$1".', 'errTrash' : 'Impossibile cestinare.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Impossibile eliminare i file origine.', 'errExtract' : 'Impossibile estrarre file da "$1".', 'errArchive' : 'Impossibile creare archivio.', 'errArcType' : 'Tipo di archivio non supportato.', 'errNoArchive' : 'Il file non è un archivio o contiene file non supportati.', 'errCmdNoSupport' : 'Il Backend non supporta questo comando.', 'errReplByChild' : 'La cartella $1 non può essere sostituita da un oggetto in essa contenuto.', 'errArcSymlinks' : 'Per questioni di sicurezza non è possibile estrarre archivi che contengono collegamenti..', // edited 24.06.2012 'errArcMaxSize' : 'La dimensione dell\'archivio supera le massime dimensioni consentite.', 'errResize' : 'Impossibile ridimensionare "$1".', 'errResizeDegree' : 'Angolo di rotazione non valido.', // added 7.3.2013 'errResizeRotate' : 'Impossibile ruotare l\'immagine.', // added 7.3.2013 'errResizeSize' : 'Dimensione dell\'immagine non valida.', // added 7.3.2013 'errResizeNoChange' : 'Dimensione dell\'immagine non modificata.', // added 7.3.2013 'errUsupportType' : 'Tipo di file non supportato.', 'errNotUTF8Content' : 'Il file "$1" non è nel formato UTF-8 e non può essere modificato.', // added 9.11.2011 'errNetMount' : 'Impossibile montare "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocollo non supportato.', // added 17.04.2012 'errNetMountFailed' : 'Mount fallito.', // added 17.04.2012 'errNetMountHostReq' : 'Host richiesto.', // added 18.04.2012 'errSessionExpires' : 'La sessione è scaduta a causa di inattività.', 'errCreatingTempDir' : 'Impossibile creare la cartella temporanea: "$1"', 'errFtpDownloadFile' : 'Impossibile scaricare il file tramite FTP: "$1"', 'errFtpUploadFile' : 'Impossibile caricare il file tramite FTP: "$1"', 'errFtpMkdir' : 'Impossibile creare la cartella remota tramite FTP: "$1"', 'errArchiveExec' : 'Errore durante l\'archiviazione dei file: "$1"', 'errExtractExec' : 'Errore durante l\'estrazione dei file: "$1"', 'errNetUnMount' : 'Impossibile smontare', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Non convertibile nel formato UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Per uploadare l0intera cartella usare Google Chrome.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Timeout durante la ricerca di "$1". I risultati della ricerca sono parziali.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'E\' necessaria la riautorizzazione.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Il numero massimo di oggetti selezionabili è $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Impossibile ripristinare dal cestino: destinazione di ripristino non trovata.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Impossibile trovare un editor per questo tipo di file.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Si è verificato un errore lato server.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Impossibile svuotare la cartella "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Ci sono $1 ulteriori errori.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Puoi creare fino a $1 cartelle alla volta.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Crea archivio', 'cmdback' : 'Indietro', 'cmdcopy' : 'Copia', 'cmdcut' : 'Taglia', 'cmddownload' : 'Scarica', 'cmdduplicate' : 'Duplica', 'cmdedit' : 'Modifica File', 'cmdextract' : 'Estrai Archivio', 'cmdforward' : 'Avanti', 'cmdgetfile' : 'Seleziona File', 'cmdhelp' : 'Informazioni su...', 'cmdhome' : 'Home', 'cmdinfo' : 'Informazioni', 'cmdmkdir' : 'Nuova cartella', 'cmdmkdirin' : 'In una nuova cartella', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nuovo file', 'cmdopen' : 'Apri', 'cmdpaste' : 'Incolla', 'cmdquicklook' : 'Anteprima', 'cmdreload' : 'Ricarica', 'cmdrename' : 'Rinomina', 'cmdrm' : 'Elimina', 'cmdtrash' : 'Nel cestino', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Ripristina', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Ricerca file', 'cmdup' : 'Vai alla directory padre', 'cmdupload' : 'Carica File', 'cmdview' : 'Visualizza', 'cmdresize' : 'Ridimensiona Immagine', 'cmdsort' : 'Ordina', 'cmdnetmount' : 'Monta disco di rete', // added 18.04.2012 'cmdnetunmount': 'Smonta', // from v2.1 added 30.04.2012 'cmdplaces' : 'Aggiungi ad Accesso rapido', // added 28.12.2014 'cmdchmod' : 'Cambia modalità', // from v2.1 added 20.6.2015 'cmdopendir' : 'Apri una cartella', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Reimposta dimensione colonne', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Schermo intero', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Sposta', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Svuota la cartella', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Annulla', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Ripeti', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferenze', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Seleziona tutto', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Annulla selezione', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverti selezione', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Apri in una nuova finestra', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Nascondi (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Chiudi', 'btnSave' : 'Salva', 'btnRm' : 'Elimina', 'btnApply' : 'Applica', 'btnCancel' : 'Annulla', 'btnNo' : 'No', 'btnYes' : 'Sì', 'btnMount' : 'Monta', // added 18.04.2012 'btnApprove': 'Vai a $1 & approva', // from v2.1 added 26.04.2012 'btnUnmount': 'Smonta', // from v2.1 added 30.04.2012 'btnConv' : 'Converti', // from v2.1 added 08.04.2014 'btnCwd' : 'Qui', // from v2.1 added 22.5.2015 'btnVolume' : 'Disco', // from v2.1 added 22.5.2015 'btnAll' : 'Tutti', // from v2.1 added 22.5.2015 'btnMime' : 'Tipo MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nome file', // from v2.1 added 22.5.2015 'btnSaveClose': 'Salva & Chiudi', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Rinomina', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Rinomina (tutto)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Indietro ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Avanti ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Salva come', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Apri cartella', 'ntffile' : 'Apri file', 'ntfreload' : 'Ricarica il contenuto della cartella', 'ntfmkdir' : 'Creazione delle directory in corso', 'ntfmkfile' : 'Creazione dei files in corso', 'ntfrm' : 'Eliminazione dei files in corso', 'ntfcopy' : 'Copia file in corso', 'ntfmove' : 'Spostamento file in corso', 'ntfprepare' : 'Preparazione della copia dei file.', 'ntfrename' : 'Sto rinominando i file', 'ntfupload' : 'Caricamento file in corso', 'ntfdownload' : 'Downloading file in corso', 'ntfsave' : 'Salvataggio file in corso', 'ntfarchive' : 'Creazione archivio in corso', 'ntfextract' : 'Estrazione file dall\'archivio in corso', 'ntfsearch' : 'Ricerca files in corso', 'ntfresize' : 'Ridimensionamento immagini', 'ntfsmth' : 'Operazione in corso. Attendere...', 'ntfloadimg' : 'Caricamento immagine in corso', 'ntfnetmount' : 'Montaggio disco di rete', // added 18.04.2012 'ntfnetunmount': 'Smontaggio disco di rete', // from v2.1 added 30.04.2012 'ntfdim' : 'Lettura dimensioni immagine', // added 20.05.2013 'ntfreaddir' : 'Lettura informazioni cartella', // from v2.1 added 01.07.2013 'ntfurl' : 'Lettura URL del collegamento', // from v2.1 added 11.03.2014 'ntfchmod' : 'Modifica della modalità del file', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verifica del nome del file caricato', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creazione del file da scaricare', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Ottenimento informazioni percorso', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processazione file caricato', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Spostamento nel cestino', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Ripristino dal cestino', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Controllo cartella destinazione', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Annullamento operazione precedente', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Rifacimento precedente annullamento', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Controllo contenuto', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Cestino', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Sconosciuto', 'Today' : 'Oggi', 'Yesterday' : 'Ieri', 'msJan' : 'Gen', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Mag', 'msJun' : 'Giu', 'msJul' : 'Lug', 'msAug' : 'Ago', 'msSep' : 'Set', 'msOct' : 'Ott', 'msNov' : 'Nov', 'msDec' : 'Dic', 'January' : 'Gennaio', 'February' : 'Febbraio', 'March' : 'Marzo', 'April' : 'Aprile', 'May' : 'Maggio', 'June' : 'Giugno', 'July' : 'Luglio', 'August' : 'Agosto', 'September' : 'Settembre', 'October' : 'Ottobre', 'November' : 'Novembre', 'December' : 'Dicembre', 'Sunday' : 'Domenica', 'Monday' : 'Lunedì', 'Tuesday' : 'Martedì', 'Wednesday' : 'Mercoledì', 'Thursday' : 'Giovedì', 'Friday' : 'Venerdì', 'Saturday' : 'Sabato', 'Sun' : 'Dom', 'Mon' : 'Lun', 'Tue' : 'Mar', 'Wed' : 'Mer', 'Thu' : 'Gio', 'Fri' : 'Ven', 'Sat' : 'Sab', /******************************** sort variants ********************************/ 'sortname' : 'per nome', 'sortkind' : 'per tipo', 'sortsize' : 'per dimensione', 'sortdate' : 'per data', 'sortFoldersFirst' : 'cartelle in testa', 'sortperm' : 'per permessi', // from v2.1.13 added 13.06.2016 'sortmode' : 'per modalità', // from v2.1.13 added 13.06.2016 'sortowner' : 'per possessore', // from v2.1.13 added 13.06.2016 'sortgroup' : 'per gruppo', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Anche vista ad albero', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NuovoFile.txt', // added 10.11.2015 'untitled folder' : 'NuovaCartella', // added 10.11.2015 'Archive' : 'NuovoArchivio', // from v2.1 added 10.11.2015 'untitled file' : 'NuovoFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Conferma richiesta', 'confirmRm' : 'Sei sicuro di voler eliminare i file?
    L\'operazione non è reversibile!', 'confirmRepl' : 'Sostituire i file ?', 'confirmRest' : 'Rimpiazza l\'oggetto esistente con quello nel cestino?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Non in formato UTF-8
    Convertire in UTF-8?
    Il contenuto diventerà UTF-8 salvando dopo la conversione.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'La codifica caratteri di questo file non può essere determinata. Sarà temporaneamente convertito in UTF-8 per l\'editting.
    Per cortesia, selezionare la codifica caratteri per il file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Il contenuto è stato modificato.
    Le modifiche andranno perse se non si salveranno.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Sei sicuro di voler cestinare gli oggetti?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Sei sicuro di voler spostare gli oggetti in "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Applica a tutti', 'name' : 'Nome', 'size' : 'Dimensione', 'perms' : 'Permessi', 'modify' : 'Modificato il', 'kind' : 'Tipo', 'read' : 'lettura', 'write' : 'scrittura', 'noaccess' : 'nessun accesso', 'and' : 'e', 'unknown' : 'sconosciuto', 'selectall' : 'Seleziona tutti i file', 'selectfiles' : 'Seleziona file', 'selectffile' : 'Seleziona il primo file', 'selectlfile' : 'Seleziona l\'ultimo file', 'viewlist' : 'Visualizza Elenco', 'viewicons' : 'Visualizza Icone', 'viewSmall' : 'Icone piccole', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Icone medie', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Icone grandi', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Icone molto grandi', // from v2.1.39 added 22.5.2018 'places' : 'Accesso rapido', 'calc' : 'Calcola', 'path' : 'Percorso', 'aliasfor' : 'Alias per', 'locked' : 'Bloccato', 'dim' : 'Dimensioni', 'files' : 'File', 'folders' : 'Cartelle', 'items' : 'Oggetti', 'yes' : 'sì', 'no' : 'no', 'link' : 'Collegamento', 'searcresult' : 'Risultati ricerca', 'selected' : 'oggetti selezionati', 'about' : 'Informazioni', 'shortcuts' : 'Scorciatoie', 'help' : 'Aiuto', 'webfm' : 'Gestore file WEB', 'ver' : 'Versione', 'protocolver' : 'versione protocollo', 'homepage' : 'Home del progetto', 'docs' : 'Documentazione', 'github' : 'Seguici su Github', 'twitter' : 'Seguici su Twitter', 'facebook' : 'Seguici su Facebook', 'team' : 'Gruppo', 'chiefdev' : 'sviluppatore capo', 'developer' : 'sviluppatore', 'contributor' : 'collaboratore', 'maintainer' : 'manutentore', 'translator' : 'traduttore', 'icons' : 'Icone', 'dontforget' : 'e non dimenticate di portare l\'asciugamano', 'shortcutsof' : 'Scorciatoie disabilitate', 'dropFiles' : 'Trascina i file qui', 'or' : 'o', 'selectForUpload' : 'Seleziona file da caricare', 'moveFiles' : 'Sposta file', 'copyFiles' : 'Copia file', 'restoreFiles' : 'Ripristina oggetti', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Rimuovi da Accesso rapido', 'aspectRatio' : 'Proporzioni', 'scale' : 'Scala', 'width' : 'Larghezza', 'height' : 'Altezza', 'resize' : 'Ridimensione', 'crop' : 'Ritaglia', 'rotate' : 'Ruota', 'rotate-cw' : 'Ruota di 90° in senso orario', 'rotate-ccw' : 'Ruota di 90° in senso antiorario', 'degree' : 'Gradi', 'netMountDialogTitle' : 'Monta disco di rete', // added 18.04.2012 'protocol' : 'Protocollo', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Porta', // added 18.04.2012 'user' : 'Utente', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 'confirmUnmount' : 'Vuoi smontare $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Rilascia o incolla dal browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Rilascia o incolla files e indirizzi URL qui', // from v2.1 added 07.04.2014 'encoding' : 'Codifica', // from v2.1 added 19.12.2014 'locale' : 'Lingua', // from v2.1 added 19.12.2014 'searchTarget' : 'Destinazione: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Cerca per MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Possessore', // from v2.1 added 20.6.2015 'group' : 'Gruppo', // from v2.1 added 20.6.2015 'other' : 'Altri', // from v2.1 added 20.6.2015 'execute' : 'Esegui', // from v2.1 added 20.6.2015 'perm' : 'Permessi', // from v2.1 added 20.6.2015 'mode' : 'Modalità', // from v2.1 added 20.6.2015 'emptyFolder' : 'La cartella è vuota', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'La cartella è vuota\\A Trascina e rilascia per aggiungere elementi', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'La cartella è vuota\\A Premi a lungo per aggiungere elementi', // from v2.1.6 added 30.12.2015 'quality' : 'Qualità', // from v2.1.6 added 5.1.2016 'autoSync' : 'Sincr. automatica', // from v2.1.6 added 10.1.2016 'moveUp' : 'Sposta in alto', // from v2.1.6 added 18.1.2016 'getLink' : 'Mostra URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Elementi selezionati ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID cartella', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permetti accesso non in linea', // from v2.1.10 added 3.25.2016 'reAuth' : 'Per ri-autenticarsi', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Caricamento...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Apri più files', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Stai cercando di aprire $1 files. Sei sicuro di volerli aprire nel browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Nessun risultato soddisfa i criteri di ricerca', // from v2.1.12 added 5.16.2016 'editingFile' : 'Il file è in modifica.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 elementi sono selezionati.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '$1 elementi negli appunti.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'La ricerca incrementale è solo dalla vista corrente.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reistanzia', // from v2.1.15 added 3.8.2016 'complete' : '$1 completato', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu contestuale', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Orientamento pagina', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Percorsi base del volume', // from v2.1.16 added 16.9.2016 'reset' : 'Resetta', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Colore di sfondo', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Selettore colori', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Griglia di 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Abilitato', // from v2.1.16 added 4.10.2016 'disabled' : 'Disabilitato', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Nessun risultato di ricerca nella vista corrente\\APremere [Invio] per espandere l\'oggetto della ricerca.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Nessun risultato di ricerca tramite prima lettera nella vista corrente.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Etichetta di testo', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minuti rimanenti', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Riapri con la codifica di caratteri selezionata', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Salva con la codifica di caratteri selezionata', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Seleziona cartella', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Cerca tramite la prima lettera', // from v2.1.23 added 24.3.2017 'presets' : 'Opzioni predefinite', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Troppi oggetti da spostare nel cestino', // from v2.1.25 added 9.6.2017 'TextArea' : 'Area di testo', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Svuota la cartella "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Non ci sono oggetti nella cartella "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferenze', // from v2.1.26 added 28.6.2017 'language' : 'Impostazioni Lingua', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inizializza le impostazioni salvate nel browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Impostazioni ToolBar', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caratteri rimanenti.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 linee rimaste.', // from v2.1.52 added 16.1.2020 'sum' : 'Somma', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Dimensione file approssimativa', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fuoco sull\'elemento sotto al mouse', // from v2.1.30 added 2.11.2017 'select' : 'Seleziona', // from v2.1.30 added 23.11.2017 'selectAction' : 'Azione quando un file è selezionato', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Apri con l\'editor usato l\'ultima volta', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverti selezione', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Sei sicuro di voler rinominare $1 selezionati come $2?
    Questo non può essere annullato!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Rinomina gruppo', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Numero', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Aggiungi prefisso', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Aggiungi sufisso', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Cambia estensione', // from v2.1.31 added 8.12.2017 'columnPref' : 'Impostazioni delle colonne (visualizzazione elenco)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Tutti i cambiamenti saranno immeditamente applicati.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Qualsiasi modifica non sarà visibile fino a quando non si monta questo volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'I seguenti volumi montati su questo volume saranno smontati. Sei sicuro di volerlo smontare?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Seleziona Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmi per visualizzare l\'hash del file', // from v2.1.33 added 10.3.2018 'infoItems' : 'Informazioni (pannello di informazioni sulla selezione)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Premi di nuovo per uscire.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Toolbar', // from v2.1.38 added 4.4.2018 'workspace' : 'Spazio di lavoro', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialogo', // from v2.1.38 added 4.4.2018 'all' : 'Tutti', // from v2.1.38 added 4.4.2018 'iconSize' : 'Dimensione icona (Visualizzazione icone)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Apri la finestra di modifica massimizzata', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Dato che le API di conversione non sono disponibili, effettua la conversione sul sito web.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Dopo la conversione, devi caricarlo con l\'URL o con il file scaricato per salvare il file convertito.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Converti sul sito di $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrazioni', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Questo elFinder ha i seguenti servizi esterni integrati. Controlla i termini di utilizzo, le politiche sulla privacy, etc, prima di utilizzarli.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Mostra oggetti nascosti', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Nascondi oggetti nascosti', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Visualizza/Nascondi oggetti nascosti', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Tipi di file da abilitare con "Nuovo file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Tipo del file di testo', // from v2.1.41 added 7.8.2018 'add' : 'Aggiungi', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Descrizione', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Autore', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'Licenza', // from v2.1.43 added 19.10.2018 'exportToSave' : 'L\'oggetto non può essere salvato. Per non perdere le modifiche, devi esportarlo sul tuo computer.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Doppio click sul file per selezionarlo.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Usa schermo intero', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Sconosciuto', 'kindRoot' : 'Percorso base del volume', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Cartella', 'kindSelects' : 'Selezioni', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Alias guasto', // applications 'kindApp' : 'Applicazione', 'kindPostscript' : 'Documento Postscript', 'kindMsOffice' : 'Documento Microsoft Office', 'kindMsWord' : 'Documento Microsoft Word', 'kindMsExcel' : 'Documento Microsoft Excel', 'kindMsPP' : 'Presentazione Microsoft Powerpoint', 'kindOO' : 'Documento Open Office', 'kindAppFlash' : 'Applicazione Flash', 'kindPDF' : 'Documento PDF', 'kindTorrent' : 'File Bittorrent', 'kind7z' : 'Archivio 7z', 'kindTAR' : 'Archivio TAR', 'kindGZIP' : 'Archivio GZIP', 'kindBZIP' : 'Archivio BZIP', 'kindXZ' : 'Archivio XZ', 'kindZIP' : 'Archivio ZIP', 'kindRAR' : 'Archivio RAR', 'kindJAR' : 'File Java JAR', 'kindTTF' : 'Font True Type', 'kindOTF' : 'Font Open Type', 'kindRPM' : 'Pacchetto RPM', // texts 'kindText' : 'Documento di testo', 'kindTextPlain' : 'Testo Semplice', 'kindPHP' : 'File PHP', 'kindCSS' : 'File CSS (Cascading Style Sheet)', 'kindHTML' : 'Documento HTML', 'kindJS' : 'File Javascript', 'kindRTF' : 'File RTF (Rich Text Format)', 'kindC' : 'File C', 'kindCHeader' : 'File C (header)', 'kindCPP' : 'File C++', 'kindCPPHeader' : 'File C++ (header)', 'kindShell' : 'Script Unix shell', 'kindPython' : 'File Python', 'kindJava' : 'File Java', 'kindRuby' : 'File Ruby', 'kindPerl' : 'File Perl', 'kindSQL' : 'File SQL', 'kindXML' : 'File XML', 'kindAWK' : 'File AWK', 'kindCSV' : 'File CSV (Comma separated values)', 'kindDOCBOOK' : 'File Docbook XML', 'kindMarkdown' : 'Testo markdown', // added 20.7.2015 // images 'kindImage' : 'Immagine', 'kindBMP' : 'Immagine BMP', 'kindJPEG' : 'Immagine JPEG', 'kindGIF' : 'Immagine GIF', 'kindPNG' : 'Immagine PNG', 'kindTIFF' : 'Immagine TIFF', 'kindTGA' : 'Immagine TGA', 'kindPSD' : 'Immagine Adobe Photoshop', 'kindXBITMAP' : 'Immagine X bitmap', 'kindPXM' : 'Immagine Pixelmator', // media 'kindAudio' : 'File Audio', 'kindAudioMPEG' : 'Audio MPEG', 'kindAudioMPEG4' : 'Audio MPEG-4', 'kindAudioMIDI' : 'Audio MIDI', 'kindAudioOGG' : 'Audio Ogg Vorbis', 'kindAudioWAV' : 'Audio WAV', 'AudioPlaylist' : 'Playlist MP3', 'kindVideo' : 'File Video', 'kindVideoDV' : 'Filmato DV', 'kindVideoMPEG' : 'Filmato MPEG', 'kindVideoMPEG4' : 'Filmato MPEG-4', 'kindVideoAVI' : 'Filmato AVI', 'kindVideoMOV' : 'Filmato Quick Time', 'kindVideoWM' : 'Filmato Windows Media', 'kindVideoFlash' : 'Filmato Flash', 'kindVideoMKV' : 'Filmato Matroska', 'kindVideoOGG' : 'Filmato Ogg' } }; })); application/library/js/i18n/elfinder.uk.js000064400000122531146731177160014473 0ustar00/** * Українська мова translation * @author ITLancer * @author cjayho * @version 2020-02-10 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.uk = { translator : 'ITLancer, cjayho <cj.fooser@gmail.com>', language : 'Українська мова', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 10.02.2020 16:52 fancyDateFormat : '$1 H:i', // will show like: сьогодні 16:52 nonameDateFormat : 'ymd-His', // noname upload will show like: 200210-165246 messages : { /********************************** errors **********************************/ 'error' : 'Помилка', 'errUnknown' : 'Невідома помилка.', 'errUnknownCmd' : 'Невідома команда.', 'errJqui' : 'Неправильне налаштування jQuery UI. Відсутні компоненти: selectable, draggable, droppable.', 'errNode' : 'Відсутній елемент DOM для створення elFinder.', 'errURL' : 'Неправильне налаштування! Не вказана опція URL.', 'errAccess' : 'Доступ заборонено.', 'errConnect' : 'Не вдалося з’єднатися з backend.', 'errAbort' : 'З’єднання розірване.', 'errTimeout' : 'Тайм-аут з’єднання.', 'errNotFound' : 'Не знайдено backend.', 'errResponse' : 'Неправильна відповідь від backend.', 'errConf' : 'Неправильне налаштування backend.', 'errJSON' : 'Модуль PHP JSON не встановлено.', 'errNoVolumes' : 'Немає доступних для читання директорій.', 'errCmdParams' : 'Неправильні параметри для команди "$1".', 'errDataNotJSON' : 'Дані не у форматі JSON.', 'errDataEmpty' : 'Дані відсутні.', 'errCmdReq' : 'Backend вимагає назву команди.', 'errOpen' : 'Неможливо відкрити "$1".', 'errNotFolder' : 'Об’єкт не є папкою.', 'errNotFile' : 'Об’єкт не є файлом.', 'errRead' : 'Неможливо прочитати "$1".', 'errWrite' : 'Неможливо записати в "$1".', 'errPerm' : 'Помилка доступу.', 'errLocked' : 'Файл "$1" заблоковано і його неможливо перемістити, перейменувати чи вилучити.', 'errExists' : 'Файл з назвою "$1" вже існує.', 'errInvName' : 'Недійсна назва файла.', 'errInvDirname' : 'Недійсна назва теки.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Теку не знайдено.', 'errFileNotFound' : 'Файл не знайдено.', 'errTrgFolderNotFound' : 'Цільову теку "$1" не знайдено.', 'errPopup' : 'Браузер забороняє відкривати popup-вікно. Дозвольте у налаштування браузера, щоб відкрити файл.', 'errMkdir' : 'Неможливо створити теку "$1".', 'errMkfile' : 'Неможливо створити файл "$1".', 'errRename' : 'Неможливо перейменувати файл "$1".', 'errCopyFrom' : 'Копіювання файлів з тому "$1" не дозволено.', 'errCopyTo' : 'Копіювання файлів на том "$1" не дозволено.', 'errMkOutLink' : 'Неможливо створити посилання у місце за межами кореневої теки носія.', // from v2.1 added 03.10.2015 'errUpload' : 'Помилка відвантаження.', // old name - errUploadCommon 'errUploadFile' : 'Неможливо відвантажити файл "$1".', // old name - errUpload 'errUploadNoFiles' : 'Не знайдено файлів для відвантаження.', 'errUploadTotalSize' : 'Об\'єм даних перевищив встановлений ліміт.', // old name - errMaxSize 'errUploadFileSize' : 'Об\'єм файла перевищив встановлений ліміт.', // old name - errFileMaxSize 'errUploadMime' : 'Файли цього типу заборонені.', 'errUploadTransfer' : '"$1" : помилка передачі.', 'errUploadTemp' : 'Неможливо створити тимчасовий файл для відвантаження.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Об\'єкт "$1" вже існує тут та не може бути заміненим на об\'єкт іншого типу.', // new 'errReplace' : 'Неможливо замінити "$1".', 'errSave' : 'Неможливо записати "$1".', 'errCopy' : 'Неможливо скопіювати "$1".', 'errMove' : 'Неможливо перенести "$1".', 'errCopyInItself' : 'Неможливо скопіювати "$1" сам у себе.', 'errRm' : 'Неможливо вилучити "$1".', 'errTrash' : 'Неможливо пересунути до смітника.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Неможливо видалити оригінальний(і) файл(и).', 'errExtract' : 'Неможливо розпакувати файли з "$1".', 'errArchive' : 'Неможливо створити архів.', 'errArcType' : 'Тип архіву не підтримується.', 'errNoArchive' : 'Файл не є архівом, або є архівом, тип якого не підтримується.', 'errCmdNoSupport' : 'Серверна частина не підтримує цієї команди.', 'errReplByChild' : 'Папка “$1” не може бути замінена елементом, який вона містить.', 'errArcSymlinks' : 'З міркувань безпеки заборонено розпаковувати архіви з символічними посиланнями.', // edited 24.06.2012 'errArcMaxSize' : 'Розмір файлів архіву перевищує допустиме значення.', 'errResize' : 'Неможливо масштабувати "$1".', 'errResizeDegree' : 'Недійсний кут обертання.', // added 7.3.2013 'errResizeRotate' : 'Неможливо повернути світлину.', // added 7.3.2013 'errResizeSize' : 'Недійсний розмір світлини.', // added 7.3.2013 'errResizeNoChange' : 'Розмір світлини не змінено.', // added 7.3.2013 'errUsupportType' : 'Непідтримуваний тип файла.', 'errNotUTF8Content' : 'Файл "$1" не в UTF-8 і не може бути відредагований.', // added 9.11.2011 'errNetMount' : 'Неможливо змонтувати "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Непідтримуваний протокл.', // added 17.04.2012 'errNetMountFailed' : 'В процесі монтування сталася помилка.', // added 17.04.2012 'errNetMountHostReq' : 'Необхідно вказати хост.', // added 18.04.2012 'errSessionExpires' : 'Час сеансу минув через неактивність.', 'errCreatingTempDir' : 'НЕможливо створити тимчасову директорію: "$1"', 'errFtpDownloadFile' : 'Неможливо завантажити файл з FTP: "$1"', 'errFtpUploadFile' : 'Неможливо завантажити файл на FTP: "$1"', 'errFtpMkdir' : 'Неможливо створити віддалений каталог на FTP: "$1"', 'errArchiveExec' : 'Помилка при архівації файлів: "$1"', 'errExtractExec' : 'Помилка при розархівуванні файлів: "$1"', 'errNetUnMount' : 'Неможливо демонтувати', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Неможливо конвертувати в UTF - 8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Використовуйте Google Chrome, якщо ви хочете завантажити папку', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Час пошуку "$1" вийшов. Результат пошуку частковий', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Необхідна повторна авторизація.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Максимальна кількість об\'єктів що можна обрати складає $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Неможливо відновити зі смітника: неможливо визначити місце куди відновлювати.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Для цього типу файлів не знайдено редактора.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Помилка на боці сервера.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Неможливо спорожнити теку "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Є також ще $1 помилок.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Архівувати', 'cmdback' : 'Назад', 'cmdcopy' : 'Копівати', 'cmdcut' : 'Вирізати', 'cmddownload' : 'Завантажити', 'cmdduplicate' : 'Дублювати', 'cmdedit' : 'Редагувати файл', 'cmdextract' : 'Розпакувати файли з архіву', 'cmdforward' : 'Вперед', 'cmdgetfile' : 'Вибрати файли', 'cmdhelp' : 'Про програму', 'cmdhome' : 'Додому', 'cmdinfo' : 'Інформація', 'cmdmkdir' : 'Створити теку', 'cmdmkdirin' : 'До нової теки', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Створити файл', 'cmdopen' : 'Відкрити', 'cmdpaste' : 'Вставити', 'cmdquicklook' : 'Попередній перегляд', 'cmdreload' : 'Перечитати', 'cmdrename' : 'Перейменувати', 'cmdrm' : 'Вилучити', 'cmdtrash' : 'До смітника', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Відновити', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Шукати файли', 'cmdup' : 'На 1 рівень вгору', 'cmdupload' : 'Відвантажити файли', 'cmdview' : 'Перегляд', 'cmdresize' : 'Масштабувати зображення', 'cmdsort' : 'Сортування', 'cmdnetmount' : 'Змонтувати мережевий диск', // added 18.04.2012 'cmdnetunmount': 'Розмонтувати', // from v2.1 added 30.04.2012 'cmdplaces' : 'До Місць', // added 28.12.2014 'cmdchmod' : 'Змінити права', // from v2.1 added 20.6.2015 'cmdopendir' : 'Відкрии директорію', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Скинути ширину стовпчика', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Повний екран', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Пересунути', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Спорожнити теку', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Скасувати', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Відновити', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Налаштування', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Вибрати усі', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Зняти вибір', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Інвертувати вибір', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Відкрити у новому вікні', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Сховати (Налаштування)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Закрити', 'btnSave' : 'Зберегти', 'btnRm' : 'Вилучити', 'btnApply' : 'Застосувати', 'btnCancel' : 'Скасувати', 'btnNo' : 'Ні', 'btnYes' : 'Так', 'btnMount' : 'Підключити', // added 18.04.2012 'btnApprove': 'Перейти в $1 і прийняти', // from v2.1 added 26.04.2012 'btnUnmount': 'Відключити', // from v2.1 added 30.04.2012 'btnConv' : 'Конвертувати', // from v2.1 added 08.04.2014 'btnCwd' : 'Тут', // from v2.1 added 22.5.2015 'btnVolume' : 'Розділ', // from v2.1 added 22.5.2015 'btnAll' : 'Всі', // from v2.1 added 22.5.2015 'btnMime' : 'MIME тип', // from v2.1 added 22.5.2015 'btnFileName':'Назва файла', // from v2.1 added 22.5.2015 'btnSaveClose': 'Зберегти і вийти', // from v2.1 added 12.6.2015 'btnBackup' : 'Резервна копія', // fromv2.1 added 28.11.2015 'btnRename' : 'Перейменувати', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Перейменуваті(Усі)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Попер. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Наступ. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Зберегти як', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Відкрити теку', 'ntffile' : 'Відкрити файл', 'ntfreload' : 'Перечитати вміст теки', 'ntfmkdir' : 'Створення теки', 'ntfmkfile' : 'Створення файлів', 'ntfrm' : 'Вилучити файли', 'ntfcopy' : 'Копіювати файли', 'ntfmove' : 'Перенести файли', 'ntfprepare' : 'Підготовка до копіювання файлів', 'ntfrename' : 'Перейменувати файли', 'ntfupload' : 'Відвантажити файли', 'ntfdownload' : 'Завантажити файли', 'ntfsave' : 'Записати файли', 'ntfarchive' : 'Створення архіву', 'ntfextract' : 'Розпаковування архіву', 'ntfsearch' : 'Пошук файлів', 'ntfresize' : 'Зміна розміру світлини', 'ntfsmth' : 'Виконуємо', 'ntfloadimg' : 'Завантаження зображення', 'ntfnetmount' : 'Монтування мережевого диска', // added 18.04.2012 'ntfnetunmount': 'Розмонтування мережевого диска', // from v2.1 added 30.04.2012 'ntfdim' : 'Визначення розміру світлини', // added 20.05.2013 'ntfreaddir' : 'Читання інформації директорії', // from v2.1 added 01.07.2013 'ntfurl' : 'отримання URL посилання', // from v2.1 added 11.03.2014 'ntfchmod' : 'Зміна прав файлу', // from v2.1 added 20.6.2015 'ntfpreupload': 'Перевірка імені завантажуваного файла', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Створення файлу для завантаження', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Отримання інформації про шлях', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Обробка вивантаженого файлу', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Переміщуємо до смітника', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Відновлюємо зі смітника', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Перевіряємо теку призначення', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Скасування попередньої дії', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Повторення раніше скасованої дії', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Перевірка вмісту', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Смітник', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'невідомо', 'Today' : 'сьогодні', 'Yesterday' : 'вчора', 'msJan' : 'Січ', 'msFeb' : 'Лют', 'msMar' : 'Бер', 'msApr' : 'Кві', 'msMay' : 'Тра', 'msJun' : 'Чер', 'msJul' : 'Лип', 'msAug' : 'Сер', 'msSep' : 'Вер', 'msOct' : 'Жов', 'msNov' : 'Лис', 'msDec' : 'Гру', 'January' : 'січня', 'February' : 'лютого', 'March' : 'березня', 'April' : 'квітня', 'May' : 'травня', 'June' : 'червня', 'July' : 'липня', 'August' : 'серпня', 'September' : 'вересня', 'October' : 'жовтня', 'November' : 'листопада', 'December' : 'грудня', 'Sunday' : 'Неділя', 'Monday' : 'Понеділок', 'Tuesday' : 'Вівторок', 'Wednesday' : 'Середа', 'Thursday' : 'Четвер', 'Friday' : 'П’ятниця', 'Saturday' : 'Субота', 'Sun' : 'Нд', 'Mon' : 'Пн', 'Tue' : 'Вт', 'Wed' : 'Ср', 'Thu' : 'Чт', 'Fri' : 'Пт', 'Sat' : 'Сб', /******************************** sort variants ********************************/ 'sortname' : 'за назвою', 'sortkind' : 'за типом', 'sortsize' : 'за розміром', 'sortdate' : 'за датою', 'sortFoldersFirst' : 'Список тек', 'sortperm' : 'за дозволами', // from v2.1.13 added 13.06.2016 'sortmode' : 'за режимом', // from v2.1.13 added 13.06.2016 'sortowner' : 'за власником', // from v2.1.13 added 13.06.2016 'sortgroup' : 'за групою', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Також вигляд дерева', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'неназваний файл.txt', // added 10.11.2015 'untitled folder' : 'неназвана тека', // added 10.11.2015 'Archive' : 'НовийАрхів', // from v2.1 added 10.11.2015 'untitled file' : 'НовийФайл.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Файл', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2 ', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Необхідне підтвердження', 'confirmRm' : 'Ви справді хочете вилучити файли?
    Операція незворотня!', 'confirmRepl' : 'Замінити старий файл новим? (при наявності тек вони будуть об\'єднані. Для резервної копії та заміни оберіть Резервну Копію)', 'confirmRest' : 'Замінити існуючий об\'єкт об\'єктом зі смітника?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Не у UTF-8
    Конвертувати у UTF-8?
    Вміст стане у UTF-8 збереженням після конвертації.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Кодування символів цього файлу неможливо визначити. Потрібно тимчасово конвертувати його у UTF-8 для редагування.
    Оберіть кодування цього файлу.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Було внесено зміни.
    Якщо ії не зберегти, їх буде втрачено.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Ви точно бажаєте перемістити ці об\'єкти до смітника?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Ви точно бажаєте перемістити об\'єкти до "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Застосувати до всіх', 'name' : 'Назва', 'size' : 'Розмір', 'perms' : 'Доступи', 'modify' : 'Змінено', 'kind' : 'Тип', 'read' : 'читання', 'write' : 'запис', 'noaccess' : 'недоступно', 'and' : 'і', 'unknown' : 'невідомо', 'selectall' : 'Вибрати всі файли', 'selectfiles' : 'Вибрати файл(и)', 'selectffile' : 'Вибрати перший файл', 'selectlfile' : 'Вибрати останній файл', 'viewlist' : 'Списком', 'viewicons' : 'Значками', 'viewSmall' : 'Маленькі значки', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Середні значки', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Великі значки', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Дуже великі значки', // from v2.1.39 added 22.5.2018 'places' : 'Розташування', 'calc' : 'Вирахувати', 'path' : 'Шлях', 'aliasfor' : 'Аліас для', 'locked' : 'Заблоковано', 'dim' : 'Розміри', 'files' : 'Файли', 'folders' : 'теки', 'items' : 'Елементи', 'yes' : 'так', 'no' : 'ні', 'link' : 'Посилання', 'searcresult' : 'Результати пошуку', 'selected' : 'Вибрані елементи', 'about' : 'Про', 'shortcuts' : 'Ярлики', 'help' : 'Допомога', 'webfm' : 'Web-менеджер файлів', 'ver' : 'Версія', 'protocolver' : 'версія протоколу', 'homepage' : 'Сторінка проекту', 'docs' : 'Документація', 'github' : 'Fork us on Github', 'twitter' : 'Слідкуйте у Твітері', 'facebook' : 'Приєднуйтесь у фейсбуці', 'team' : 'Автори', 'chiefdev' : 'головний розробник', 'developer' : 'розробник', 'contributor' : 'учасник', 'maintainer' : 'супроводжувач', 'translator' : 'перекладач', 'icons' : 'Значки', 'dontforget' : 'і не забудьте рушничок', 'shortcutsof' : 'Створення посилань вимкнено', 'dropFiles' : 'Кидайте файли сюди', 'or' : 'або', 'selectForUpload' : 'Виберіть файли для відвантаження', 'moveFiles' : 'Перемістити файли', 'copyFiles' : 'Копіювати файли', 'restoreFiles' : 'Відновити об\'єкти', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Вилучити з розташувань', 'aspectRatio' : 'Співвідношення', 'scale' : 'Масштаб', 'width' : 'Ширина', 'height' : 'Висота', 'resize' : 'Змінити розмір', 'crop' : 'Обрізати', 'rotate' : 'Повернути', 'rotate-cw' : 'Повернути на 90 градусів за год. стр.', 'rotate-ccw' : 'Повернути на 90 градусів проти год. стр.', 'degree' : 'Градус', 'netMountDialogTitle' : 'Змонтувати носій у мережі', // added 18.04.2012 'protocol' : 'версія протоколу', // added 18.04.2012 'host' : 'Хост', // added 18.04.2012 'port' : 'Порт', // added 18.04.2012 'user' : 'Логін', // added 18.04.2012 'pass' : 'Пароль', // added 18.04.2012 'confirmUnmount' : 'Ви відмонтовуєте $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Перетягніть або вставте файли з оглядача', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Перетягніть файли, Вставте URL або світлини (з буфера обміну) сюди', // from v2.1 added 07.04.2014 'encoding' : 'Кодування', // from v2.1 added 19.12.2014 'locale' : 'Локаль', // from v2.1 added 19.12.2014 'searchTarget' : 'Призначення: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Пошук за введеним типом MIME', // from v2.1 added 22.5.2015 'owner' : 'Власник', // from v2.1 added 20.6.2015 'group' : 'Група', // from v2.1 added 20.6.2015 'other' : 'Інші', // from v2.1 added 20.6.2015 'execute' : 'Виконання', // from v2.1 added 20.6.2015 'perm' : 'Дозвіл', // from v2.1 added 20.6.2015 'mode' : 'Режим', // from v2.1 added 20.6.2015 'emptyFolder' : 'Тека порожня', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Тека порожня\\A Перетягніть об\'єкти для додавання', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Тека порожня\\A Для додавання об\'єктів торкніть та утримуйте', // from v2.1.6 added 30.12.2015 'quality' : 'Якість', // from v2.1.6 added 5.1.2016 'autoSync' : 'Авто синх.', // from v2.1.6 added 10.1.2016 'moveUp' : 'Пересунути вгору', // from v2.1.6 added 18.1.2016 'getLink' : 'Отримати URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Обрані об\'єкти ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID теки', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Дозволити доступ офлайн', // from v2.1.10 added 3.25.2016 'reAuth' : 'Для реаутентифікації', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Зараз завантажуємо...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Відкрити декілька файлів', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Ви намагаєтесь відкрити $1 файлів. Ви впевнені що хочете відкрити ії у оглядачі?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Пошук не дав результатів у обраному місці.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Редагує файл.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Ви обрали $1 об\'єктів.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'У вас є $1 об\'єктів у буфері обміну.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Інкрементний пошук є тільки для поточного перегляду.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Відновити', // from v2.1.15 added 3.8.2016 'complete' : '$1 виконано', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Контекстне меню', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Обертання сторінки', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Кореневі теки носіїв', // from v2.1.16 added 16.9.2016 'reset' : 'Обнулити', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Колір фону', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Обрати колір', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'сітка 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Увімкнено', // from v2.1.16 added 4.10.2016 'disabled' : 'Вимкнено', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Результати пошуку у поточному перегляді відсутні.\\AНатисніть [Enter] для розширення критеріїв пошуку.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Результати пошуку за першою літерою відсутні у поточному перегляді.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Текстова мітка', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 хв. залишилось', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Відкрити знову з обраним кодуванням', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Зберегти з обраним кодуванням', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Обрати теку', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Пошук за першою літерою', // from v2.1.23 added 24.3.2017 'presets' : 'Шаблони', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Дуже багато об\'єктів для переміщення у смітник.', // from v2.1.25 added 9.6.2017 'TextArea' : 'ТекстовеПоле', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Спорожнити теку "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Тека "$1" порожня.', // from v2.1.25 added 22.6.2017 'preference' : 'Налаштування', // from v2.1.26 added 28.6.2017 'language' : 'Мова', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Ініціювати налаштування збережені у цьому оглядачі', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Налаштування лотку інструментів', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 символів залишилось.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 рядків залишилось.', // from v2.1.52 added 16.1.2020 'sum' : 'Сума', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Приблизний розмір файу', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Фокусувати елемент діалога при наведенні курсора миші', // from v2.1.30 added 2.11.2017 'select' : 'Обрати', // from v2.1.30 added 23.11.2017 'selectAction' : 'Дія при виборі файла', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Відкрити редактором, що використовувався крайній раз.', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Інвертувати вибір', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Ви точно хочете перейменувати $1 обраних об\'єктів на кшталт $2?
    Це незворотна дія!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Пакетне перейменування', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Число', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Додати префікс', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Додати суфікс', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Змінити розширення', // from v2.1.31 added 8.12.2017 'columnPref' : 'Налаштування стовпчиків (вигляд списку)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Усі зміни будуть негайно застосовані у архіві.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Деякі зміни не буде видно до розмонтування носія.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Наступний(і) носій(ї) на цьому носії також не змонтовані. Ви точно хочете відмонтувати носій?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Інформація про обране', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Алгоритми для показу хешу файла', // from v2.1.33 added 10.3.2018 'infoItems' : 'Інформаційні об\'єкти (Панель інформації про обране)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Натисніть знову для виходу.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Панель інструментів', // from v2.1.38 added 4.4.2018 'workspace' : 'Робочий простір', // from v2.1.38 added 4.4.2018 'dialog' : 'Діалог', // from v2.1.38 added 4.4.2018 'all' : 'Усі', // from v2.1.38 added 4.4.2018 'iconSize' : 'Розмір значків (вигляд значків)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Відкрити розгорнуте вікно редактора', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Через неможливість конвертування API, сконвертуйте на вебсайті.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Після конвертування вам треба завантажити за допомогою URL або збереженого файу, для збереження конвертованого файлу.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Конвертувати сайт з $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Інтеграції', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Цей elFinder має наступні інтегровані сервіси. Перевірте умови використання, політику приватності та інше перед використанням.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Показати приховані об\'єкти', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Сховати приховані об\'єкти', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Показати/Сховати приховані о\'єкти', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Типи файлів, які можна створювати', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Тип текстового файлу', // from v2.1.41 added 7.8.2018 'add' : 'Додати', // from v2.1.41 added 7.8.2018 'theme' : 'Тема', // from v2.1.43 added 19.10.2018 'default' : 'Як зазвичай', // from v2.1.43 added 19.10.2018 'description' : 'Опис', // from v2.1.43 added 19.10.2018 'website' : 'Веб-сайт', // from v2.1.43 added 19.10.2018 'author' : 'Автор', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Ліцензія', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Об\'єкт неможливо зберегти. Щоб уникнути втрати правок вам треба експортувати ії до себе у пристрій.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Двічі клацніть файл для вибору.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Використовувати повноекранний режим', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Невідомо', 'kindRoot' : 'Коренева тека носія', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Папка', 'kindSelects' : 'Вибір', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Аліас', 'kindAliasBroken' : 'Пошкоджений аліас', // applications 'kindApp' : 'Програма', 'kindPostscript' : 'Документ Postscript', 'kindMsOffice' : 'Документ Microsoft Office', 'kindMsWord' : 'Документ Microsoft Word', 'kindMsExcel' : 'Документ Microsoft Excel', 'kindMsPP' : 'Презентація Microsoft Powerpoint', 'kindOO' : 'Документ Open Office', 'kindAppFlash' : 'Flash-додаток', 'kindPDF' : 'Портативний формат документів (PDF)', 'kindTorrent' : 'Файл Bittorrent', 'kind7z' : 'Архів 7z', 'kindTAR' : 'Архів TAR', 'kindGZIP' : 'Архів GZIP', 'kindBZIP' : 'Архів BZIP', 'kindXZ' : 'Архів XZ', 'kindZIP' : 'Архів ZIP', 'kindRAR' : 'Архів RAR', 'kindJAR' : 'Файл Java JAR', 'kindTTF' : 'Шрифт True Type', 'kindOTF' : 'Шрифт Open Type', 'kindRPM' : 'Пакунок RPM', // texts 'kindText' : 'Текстовий документ', 'kindTextPlain' : 'Простий текст', 'kindPHP' : 'Код PHP', 'kindCSS' : 'Каскадна таблиця стилів (CSS)', 'kindHTML' : 'Документ HTML', 'kindJS' : 'Код Javascript', 'kindRTF' : 'Файл RTF', 'kindC' : 'Код C', 'kindCHeader' : 'Заголовковий код C', 'kindCPP' : 'Код C++', 'kindCPPHeader' : 'Заголовковий код C++', 'kindShell' : 'Скрипт Unix shell', 'kindPython' : 'Код Python', 'kindJava' : 'Код Java', 'kindRuby' : 'Код Ruby', 'kindPerl' : 'Код Perl', 'kindSQL' : 'Код SQL', 'kindXML' : 'Документ XML', 'kindAWK' : 'Код AWK', 'kindCSV' : 'Значення розділені комою (CSV)', 'kindDOCBOOK' : 'Документ Docbook XML', 'kindMarkdown' : 'Текст Markdown', // added 20.7.2015 // images 'kindImage' : 'Зображення', 'kindBMP' : 'Зображення BMP', 'kindJPEG' : 'Зображення JPEG', 'kindGIF' : 'Зображення GIF', 'kindPNG' : 'Зображення PNG', 'kindTIFF' : 'Зображення TIFF', 'kindTGA' : 'Зображення TGA', 'kindPSD' : 'Зображення Adobe Photoshop', 'kindXBITMAP' : 'Зображення X bitmap', 'kindPXM' : 'Зображення Pixelmator', // media 'kindAudio' : 'Аудіо', 'kindAudioMPEG' : 'Аудіо MPEG', 'kindAudioMPEG4' : 'Аудіо MPEG-4', 'kindAudioMIDI' : 'Аудіо MIDI', 'kindAudioOGG' : 'Аудіо Ogg Vorbis', 'kindAudioWAV' : 'Аудіо WAV', 'AudioPlaylist' : 'Список відтворення MP3', 'kindVideo' : 'Відео', 'kindVideoDV' : 'Відео DV', 'kindVideoMPEG' : 'Відео MPEG', 'kindVideoMPEG4' : 'Відео MPEG-4', 'kindVideoAVI' : 'Відео AVI', 'kindVideoMOV' : 'Відео Quick Time', 'kindVideoWM' : 'Відео Windows Media', 'kindVideoFlash' : 'Відео Flash', 'kindVideoMKV' : 'Відео Matroska', 'kindVideoOGG' : 'Відео Ogg' } }; })); application/library/js/i18n/elfinder.da.js000064400000100447146731177160014442 0ustar00/** * Danish translation * @author Mark Topper (webman.io) * @author Helmuth Mikkelsen * @version 2020-11-27 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.da = { translator : 'Mark Topper (webman.io), Helmuth Mikkelsen <helmuthm@gmail.com>', language : 'Danish', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 27.11.2020 11:50 fancyDateFormat : '$1 H:i', // will show like: I dag 11:50 nonameDateFormat : 'Ymd-His', // noname upload will show like: 20201127-115006 messages : { /********************************** errors **********************************/ 'error' : 'Fejl', 'errUnknown' : 'Ukendt fejl.', 'errUnknownCmd' : 'Ukendt kommando.', 'errJqui' : 'Ugyldig jQuery UI-konfiguration. Valgbare, trækbare og dropbare komponenter skal medtages.', 'errNode' : 'elFinder kræver DOM Element oprettet.', 'errURL' : 'Ugyldig elFinder konfiguration! URL option er ikke sat.', 'errAccess' : 'Adgang nægtet.', 'errConnect' : 'Kan ikke få kontatkt med backend.', 'errAbort' : 'Forbindelse afbrudt.', 'errTimeout' : 'Forbindelse timeout.', 'errNotFound' : 'Backend ikke fundet.', 'errResponse' : 'Ugyldigt backend svar.', 'errConf' : 'Ugyldig backend konfiguration.', 'errJSON' : 'PHP JSON modul ikke installeret.', 'errNoVolumes' : 'Læsbare diskenheder er ikke tilgængelige.', 'errCmdParams' : 'Ugyldige parametre for kommando "$1".', 'errDataNotJSON' : 'Data er ikke JSON.', 'errDataEmpty' : 'Data er tom.', 'errCmdReq' : 'Backend-anmodning kræver kommandonavn.', 'errOpen' : 'Kunne ikke åbne "$1".', 'errNotFolder' : 'Objektet er ikke en mappe.', 'errNotFile' : 'Objektet er ikke en fil.', 'errRead' : 'Kunne ikke læse "$1".', 'errWrite' : 'Kunne ikke skrive til "$1".', 'errPerm' : 'Adgang nægtet.', 'errLocked' : '"$1" er låst og kan ikke blive omdøbt, flyttet eller slettet.', 'errExists' : 'Der findes allerede en fil ved navn "$1".', 'errInvName' : 'Ugyldigt filnavn.', 'errInvDirname' : 'Ugyldigt mappenavn.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Mappe ikke fundet.', 'errFileNotFound' : 'Fil ikke fundet.', 'errTrgFolderNotFound' : 'Mappen "$1" blev ikke fundet.', 'errPopup' : 'Browser forhindrede åbning af pop up-vindue. For at åbne filen skal du aktivere den i browserindstillinger.', 'errMkdir' : 'Kunne ikke oprette mappen "$1".', 'errMkfile' : 'Kunne ikke oprette filen "$1".', 'errRename' : 'Kunne ikke omdøbe "$1".', 'errCopyFrom' : 'Kopiering af filer fra diskenhed "$1" er ikke tilladt.', 'errCopyTo' : 'Kopiering af filer til diskenhed "$1" er ikke tilladt.', 'errMkOutLink' : 'Kan ikke oprette et link til uden for diskenhedsroden.', // from v2.1 added 03.10.2015 'errUpload' : 'Upload fejl.', // old name - errUploadCommon 'errUploadFile' : 'Kunne ikke uploade "$1".', // old name - errUpload 'errUploadNoFiles' : 'Ingen filer fundet til upload.', 'errUploadTotalSize' : 'Data overskrider den maksimalt tilladte størrelse.', // old name - errMaxSize 'errUploadFileSize' : 'Fil overskrider den maksimalt tilladte størrelse.', // old name - errFileMaxSize 'errUploadMime' : 'Filtype ikke godkendt.', 'errUploadTransfer' : '"$1" overførselsfejl.', 'errUploadTemp' : 'Kan ikke oprette midlertidig fil til upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objekt "$1" findes allerede på dette sted og kan ikke erstattes af objekt med en anden type.', // new 'errReplace' : 'Kan ikke erstatte "$1".', 'errSave' : 'Kunne ikke gemme "$1".', 'errCopy' : 'Kunne ikke kopiere "$1".', 'errMove' : 'Kunne ikke flytte "$1".', 'errCopyInItself' : 'Kunne ikke kopiere "$1" til sig selv.', 'errRm' : 'Kunne ikke slette "$1".', 'errTrash' : 'Kan ikke komme i papirkurven.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Kunne ikke fjerne kildefil(er).', 'errExtract' : 'Kunne ikke udpakke filer fra "$1".', 'errArchive' : 'Kunne ikke oprette arkiv.', 'errArcType' : 'Arkivtypen er ikke understøttet.', 'errNoArchive' : 'Filen er ikke et arkiv eller har ien kke-understøttet arkivtype.', 'errCmdNoSupport' : 'Backend understøtter ikke denne kommando.', 'errReplByChild' : 'Mappen "$1" kan ikke erstattes af et element, den indeholder.', 'errArcSymlinks' : 'Af sikkerhedsmæssige årsager nægtes at udpakke arkiver der indeholder symlinks eller filer med ikke-tilladte navne.', // edited 24.06.2012 'errArcMaxSize' : 'Arkivfiler overskrider den maksimalt tilladte størrelse.', 'errResize' : 'Kunne ikke ændre størrelsen på "$1".', 'errResizeDegree' : 'Ugyldig rotationsgrad.', // added 7.3.2013 'errResizeRotate' : 'Kunne ikke rotere billedet.', // added 7.3.2013 'errResizeSize' : 'Ugyldig billedstørrelse.', // added 7.3.2013 'errResizeNoChange' : 'Billedstørrelse ikke ændret.', // added 7.3.2013 'errUsupportType' : 'Ikke-understøttet filtype.', 'errNotUTF8Content' : 'Filen "$1" er ikke i UTF-8 og kan ikke blive redigeret.', // added 9.11.2011 'errNetMount' : 'Kunne ikke mounte "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Ikke-understøttet protokol.', // added 17.04.2012 'errNetMountFailed' : 'Mount mislykkedes.', // added 17.04.2012 'errNetMountHostReq' : 'Værten kræves.', // added 18.04.2012 'errSessionExpires' : 'Din session er udløbet på grund af inaktivitet.', 'errCreatingTempDir' : 'Kunne ikke oprette midlertidig mappe: "$1"', 'errFtpDownloadFile' : 'Kunne ikke downloade filen fra FTP: "$1"', 'errFtpUploadFile' : 'Kunne ikke uploade filen til FTP: "$1"', 'errFtpMkdir' : 'Kunne ikke oprette fjernmappe på FTP: "$1"', 'errArchiveExec' : 'Fejl under arkivering af filer: "$1"', 'errExtractExec' : 'Fejl under udpakning af filer: "$1"', 'errNetUnMount' : 'Kan ikke unmounte.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Kan ikke konverteres til UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Prøv den nyeste browser, hvis du vil uploade mappen.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Time out under søgning på "$1". Søgeresultatet er delvis.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-autorisation er påkrævet.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maksimalt antal valgbare emner er $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Kan ikke gendannes fra papirkurven. Kan ikke identificere gendannelsesdestinationen.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor blev ikke fundet til denne filtype.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Der opstod en fejl på serversiden.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Kunne ikke tømme mappen "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Der er $1 flere fejl.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Opret arkiv', 'cmdback' : 'Tilbage', 'cmdcopy' : 'Kopier', 'cmdcut' : 'Klip', 'cmddownload' : 'Download', 'cmdduplicate' : 'Dupliker', 'cmdedit' : 'Rediger fil', 'cmdextract' : 'Udpak filer fra arkiv', 'cmdforward' : 'Frem', 'cmdgetfile' : 'Vælg filer', 'cmdhelp' : 'Om denne software', 'cmdhome' : 'Hjem', 'cmdinfo' : 'Information', 'cmdmkdir' : 'Ny mappe', 'cmdmkdirin' : 'I en ny mappe', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Ny fil', 'cmdopen' : 'Åben', 'cmdpaste' : 'Indsæt', 'cmdquicklook' : 'Vis', 'cmdreload' : 'Genindlæs', 'cmdrename' : 'Omdøb', 'cmdrm' : 'Slet', 'cmdtrash' : 'I papirkurven', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Gendan', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Find filer', 'cmdup' : 'Gå til overordnet mappe', 'cmdupload' : 'Upload filer', 'cmdview' : 'Vis', 'cmdresize' : 'Tilpas størrelse & Roter', 'cmdsort' : 'Sorter', 'cmdnetmount' : 'Mount netværksdrev', // added 18.04.2012 'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'Til steder', // added 28.12.2014 'cmdchmod' : 'Skift tilstand', // from v2.1 added 20.6.2015 'cmdopendir' : 'Åbn en mappe', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Nulstil søjlebredde', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Fuld skærm', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Flyt', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Tøm mappe', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Fortryd', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Gentag igen', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Præferencer', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Vælg alle', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Vælg ingen', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverter valg', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Åbn i nyt vindue', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Skjul (præference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Luk', 'btnSave' : 'Gem', 'btnRm' : 'Slet', 'btnApply' : 'Anvend', 'btnCancel' : 'Annuler', 'btnNo' : 'Nej', 'btnYes' : 'Ja', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Gå til $1 & godkend', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Konverter', // from v2.1 added 08.04.2014 'btnCwd' : 'Her', // from v2.1 added 22.5.2015 'btnVolume' : 'Diskenhed', // from v2.1 added 22.5.2015 'btnAll' : 'Alle', // from v2.1 added 22.5.2015 'btnMime' : 'MIME-type', // from v2.1 added 22.5.2015 'btnFileName':'Filnavn', // from v2.1 added 22.5.2015 'btnSaveClose': 'Gem & Luk', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Omdøb', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Omdøb(Alle)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Forrige ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Næste ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Gem som', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Åben mappe', 'ntffile' : 'Åben fil', 'ntfreload' : 'Genindlæs mappeindhold', 'ntfmkdir' : 'Opretter mappe', 'ntfmkfile' : 'Opretter filer', 'ntfrm' : 'Sletter filer', 'ntfcopy' : 'Kopier filer', 'ntfmove' : 'Flytter filer', 'ntfprepare' : 'Kontrol af eksisterende emner', 'ntfrename' : 'Omdøb filer', 'ntfupload' : 'Uploader filer', 'ntfdownload' : 'Downloader filer', 'ntfsave' : 'Gemmer filer', 'ntfarchive' : 'Opretter arkiv', 'ntfextract' : 'Udpakker filer fra arkiv', 'ntfsearch' : 'Søger filer', 'ntfresize' : 'Ændring af størrelsen på billeder', 'ntfsmth' : 'Gør noget', 'ntfloadimg' : 'Henter billede', 'ntfnetmount' : 'Mounter netværksdrev', // added 18.04.2012 'ntfnetunmount': 'Unmounter netværksdrev', // from v2.1 added 30.04.2012 'ntfdim' : 'Henter billeddimension', // added 20.05.2013 'ntfreaddir' : 'Læser folderinfomation', // from v2.1 added 01.07.2013 'ntfurl' : 'Får URL til link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Ændring af filtilstand', // from v2.1 added 20.6.2015 'ntfpreupload': 'Bekræftelse af upload filnavn', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Oprettelse af en fil til download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Få stiinformation', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Behandler den uploadede fil', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Smider i papirkurv', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Udfører gendannelse fra papirkurven', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Kontrollerer destinationsmappe', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Fortryder tidligere handling', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Gentager tidligere fortryd', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Kontrol af indhold', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Papirkurv', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'ukendt', 'Today' : 'I dag', 'Yesterday' : 'I går', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'Marts', 'April' : 'April', 'May' : 'Maj', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'August', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Søndag', 'Monday' : 'Mandag', 'Tuesday' : 'Tirsdag', 'Wednesday' : 'Onsdag', 'Thursday' : 'Torsdag', 'Friday' : 'Fredag', 'Saturday' : 'Lørdag', 'Sun' : 'Søn', 'Mon' : 'Man', 'Tue' : 'Tir', 'Wed' : 'Ons', 'Thu' : 'Tor', 'Fri' : 'Fre', 'Sat' : 'Lør', /******************************** sort variants ********************************/ 'sortname' : 'efter navn', 'sortkind' : 'efter type', 'sortsize' : 'efter størrelse', 'sortdate' : 'efter dato', 'sortFoldersFirst' : 'Mapper først', 'sortperm' : 'efter tilladelse', // from v2.1.13 added 13.06.2016 'sortmode' : 'efter mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'efter ejer', // from v2.1.13 added 13.06.2016 'sortgroup' : 'efter gruppe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Også Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NyFil.txt', // added 10.11.2015 'untitled folder' : 'NyFolder', // added 10.11.2015 'Archive' : 'NytArkiv', // from v2.1 added 10.11.2015 'untitled file' : 'NyFil.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Fil', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Bekræftelse påkrævet', 'confirmRm' : 'Er du sikker på du vil slette valgte filer?
    Dette kan ikke fortrydes!', 'confirmRepl' : 'Erstat gammel fil med ny fil?', 'confirmRest' : 'Erstat eksisterende element med elementet i papirkurven?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Ikke i UTF-8
    Konverter til UTF-8?
    Indholdet bliver UTF-8 ved at gemme efter konvertering.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Tegnkodning af denne fil kunne ikke registreres. Det er nødvendigt at konvertere midlertidigt til UTF-8 til redigering.
    Vælg tegnkodning af denne fil.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Det er blevet ændret.
    Du mister arbejde, hvis du ikke gemmer ændringer.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Er du sikker på, at du vil flytte emner til papirkurven?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Er du sikker på, at du vil flytte emner til "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Anvend ved alle', 'name' : 'Navn', 'size' : 'Størrelse', 'perms' : 'Rettigheder', 'modify' : 'Ændret', 'kind' : 'Type', 'read' : 'læse', 'write' : 'skrive', 'noaccess' : 'ingen adgang', 'and' : 'og', 'unknown' : 'ukendt', 'selectall' : 'Vælg alle filer', 'selectfiles' : 'Vælg fil(er)', 'selectffile' : 'Vælg første fil', 'selectlfile' : 'Vælg sidste fil', 'viewlist' : 'Listevisning', 'viewicons' : 'Ikonvisning', 'viewSmall' : 'Små ikoner', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medium ikoner', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Store ikoner', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Ekstra store ikoner', // from v2.1.39 added 22.5.2018 'places' : 'Placeringer', 'calc' : 'Beregn', 'path' : 'Sti', 'aliasfor' : 'Alias for', 'locked' : 'Låst', 'dim' : 'Størrelser', 'files' : 'Filer', 'folders' : 'Mapper', 'items' : 'Emner', 'yes' : 'ja', 'no' : 'nej', 'link' : 'Link', 'searcresult' : 'Søgeresultater', 'selected' : 'valgte emner', 'about' : 'Om', 'shortcuts' : 'Genveje', 'help' : 'Hjælp', 'webfm' : 'Internet filmanager', 'ver' : 'Version', 'protocolver' : 'protokol version', 'homepage' : 'Projektside', 'docs' : 'Dokumentation', 'github' : 'Fork os på Github', 'twitter' : 'Følg os på Twitter', 'facebook' : 'Følg os på Facebook', 'team' : 'Hold', 'chiefdev' : 'hovedudvikler', 'developer' : 'udvikler', 'contributor' : 'bidragyder', 'maintainer' : 'vedligeholder', 'translator' : 'oversætter', 'icons' : 'Ikoner', 'dontforget' : 'og glem ikke at tage dit håndklæde', 'shortcutsof' : 'Gemveje deaktiveret', 'dropFiles' : 'Drop filer hertil', 'or' : 'eller', 'selectForUpload' : 'Vælg filer', 'moveFiles' : 'Flyt filer', 'copyFiles' : 'Kopier filer', 'restoreFiles' : 'Gendan emner', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Slet fra placering', 'aspectRatio' : 'Skærmformat', 'scale' : 'Skala', 'width' : 'Bredde', 'height' : 'Højde', 'resize' : 'Tilpas størrelse', 'crop' : 'Beskær', 'rotate' : 'Roter', 'rotate-cw' : 'Roter 90 grader med uret', 'rotate-ccw' : 'Roter 90 grader mod uret', 'degree' : 'Grader', 'netMountDialogTitle' : 'Mount netwærkdrev', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Vært', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Bruger', // added 18.04.2012 'pass' : 'Kodeord', // added 18.04.2012 'confirmUnmount' : 'Unmounter du $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Slip eller indsæt filer fra browseren', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Slip filer, indsæt webadresser eller billeder (udklipsholder) her', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Søg efter input MIME-type', // from v2.1 added 22.5.2015 'owner' : 'Ejer', // from v2.1 added 20.6.2015 'group' : 'Gruppe', // from v2.1 added 20.6.2015 'other' : 'Andet', // from v2.1 added 20.6.2015 'execute' : 'Udfør', // from v2.1 added 20.6.2015 'perm' : 'Tilladelse', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Mappe er tom', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Mappe er tom\\A Drop for at tilføje enmer', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Mappen er tom\\A Langt tryk for at tilføje emner', // from v2.1.6 added 30.12.2015 'quality' : 'Kvalitet', // from v2.1.6 added 5.1.2016 'autoSync' : 'Autosync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Flyt op', // from v2.1.6 added 18.1.2016 'getLink' : 'Hent URL-link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Valgte emner ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Folder-ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Tillad offline adgang', // from v2.1.10 added 3.25.2016 'reAuth' : 'For at godkende igen', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Indlæser nu...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Åben flere filer', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Du prøver at åbne $1-filerne. Er du sikker på, at du vil åbne i browseren?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Søgeresultaterne er tomme i søgemålet.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Redigerer en fil.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Du har valgt $1 emner.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Du har $1 emner i udklipsholder.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementel søgning er kun fra den aktuelle visning.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Genindsæt', // from v2.1.15 added 3.8.2016 'complete' : '$1 færdig', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontekstmenu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Sidevending', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Diskenheds rødder', // from v2.1.16 added 16.9.2016 'reset' : 'Nulstil', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Baggrundsfarve', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Farvevælger', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Aktiveret', // from v2.1.16 added 4.10.2016 'disabled' : 'Deaktiveret', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Søgeresultaterne er tomme i den aktuelle visning.\\ATryk på [Enter] for at udvide søgemålet.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Førstebogstavs søgeresultater er tomme i den aktuelle visning.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Tekstlabel', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minutter tilbage', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Åbn igen med valgt encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Gem med valgt encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Vælg mappe', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Førstebogstavs søgning', // from v2.1.23 added 24.3.2017 'presets' : 'Forudindstillinger', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Det er for mange emner, så det kan ikke komme i papirkurven.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Tøm mappen "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Der er ingen emner i mappen "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Præference', // from v2.1.26 added 28.6.2017 'language' : 'Sprog', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialiser de indstillinger, der er gemt i denne browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Værktøjslinjens indstillinger', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 tegn tilbage.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 linjer tilbage.', // from v2.1.52 added 16.1.2020 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Omtrentlig filstørrelse', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fokuser på elementet i dialog med musemarkering', // from v2.1.30 added 2.11.2017 'select' : 'Vælg', // from v2.1.30 added 23.11.2017 'selectAction' : 'Handling, når du vælger fil', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Åbn med den editor, der blev brugt sidst', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverter valg', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Er du sikker på, at du vil omdøbe $1 valgte emner som $2?
    Dette kan ikke fortrydes!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch omdøbning', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Tal', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Tilføj prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Tilføj suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Skift filendelse', // from v2.1.31 added 8.12.2017 'columnPref' : 'Kolonneindstillinger (listevisning)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Alle ændringer påvirker straks arkivet.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Eventuelle ændringer gennemføres ikke, før denne enhed fjernes.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Følgende disk(e) mounted på denne enhed unmountes også. Er du sikker på at unmounte den?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Valg info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmer, der viser filens hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info-emner (panelet til valg af info)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Tryk igen for at afslutte.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Værktøjslinje', // from v2.1.38 added 4.4.2018 'workspace' : 'Arbejdsområde', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Alle', // from v2.1.38 added 4.4.2018 'iconSize' : 'Ikonstørrelse (ikonvisning)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Åbn det maksimerede editorvindue', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Da konvertering via API ikke er tilgængelig i øjeblikket, bedes du konvertere på webstedet.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Efter konvertering skal du uploade med elementets URL eller en downloadet fil for at gemme den konverterede fil.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Konverter på stedet på $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrationer', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Denne elFinder har følgende eksterne tjenester integreret. Kontroller venligst vilkårene for brug, fortrolighedspolitik osv. inden du bruger det.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Vis skjulte emner', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Skjul skjulte emner', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Vis / Skjul skjulte emner', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Filtyper, der skal aktiveres med "Ny fil"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type af tekstfilen', // from v2.1.41 added 7.8.2018 'add' : 'Tilføj', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Standard', // from v2.1.43 added 19.10.2018 'description' : 'Beskrivelse', // from v2.1.43 added 19.10.2018 'website' : 'Hjemmeside', // from v2.1.43 added 19.10.2018 'author' : 'Forfatter', // from v2.1.43 added 19.10.2018 'email' : 'Mail', // from v2.1.43 added 19.10.2018 'license' : 'Licens', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Dette element kan ikke gemmes. For at undgå at miste redigeringerne skal du eksportere til din pc.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dobbeltklik på filen for at vælge den.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Brug fuldskærmstilstand', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ukendt', 'kindRoot' : 'Diskenheds rod', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Mappe', 'kindSelects' : 'Valg', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Ødelagt alias', // applications 'kindApp' : 'Applikation', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint præsentation', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash applikation', 'kindPDF' : 'Flytbart Dokument Format (PDF)', 'kindTorrent' : 'Bittorrent fil', 'kind7z' : '7z arkiv', 'kindTAR' : 'TAR arkiv', 'kindGZIP' : 'GZIP arkiv', 'kindBZIP' : 'BZIP arkiv', 'kindXZ' : 'XZ arkiv', 'kindZIP' : 'ZIP arkiv', 'kindRAR' : 'RAR arkiv', 'kindJAR' : 'Java JAR fil', 'kindTTF' : 'True Type skrift', 'kindOTF' : 'Open Type skrift', 'kindRPM' : 'RPM pakke', // texts 'kindText' : 'Tekstdokument', 'kindTextPlain' : 'Ren tekst', 'kindPHP' : 'PHP-kode', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML-dokument', 'kindJS' : 'Javascript-kode', 'kindRTF' : 'Rich Text Format', 'kindC' : 'Ckkode', 'kindCHeader' : 'C header-kode', 'kindCPP' : 'C++-kode', 'kindCPPHeader' : 'C++ header-kode', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python-kode', 'kindJava' : 'Java-kode', 'kindRuby' : 'Ruby-kode', 'kindPerl' : 'Perlscript', 'kindSQL' : 'SQ- kode', 'kindXML' : 'XML-dokument', 'kindAWK' : 'AWK-kode', 'kindCSV' : 'Komma seperarede værdier', 'kindDOCBOOK' : 'Docbook XML-dokument', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Billede', 'kindBMP' : 'BMP-billede', 'kindJPEG' : 'JPEG-billede', 'kindGIF' : 'GIF-billede', 'kindPNG' : 'PNG-billede', 'kindTIFF' : 'TIFF-billede', 'kindTGA' : 'TGA-billede', 'kindPSD' : 'Adobe Photoshop-billede', 'kindXBITMAP' : 'X bitmap-billede', 'kindPXM' : 'Pixelmator-billede', // media 'kindAudio' : 'Lydmedie', 'kindAudioMPEG' : 'MPEG-lyd', 'kindAudioMPEG4' : 'MPEG-4-lyd', 'kindAudioMIDI' : 'MIDI-lyd', 'kindAudioOGG' : 'Ogg Vorbis-lyd', 'kindAudioWAV' : 'WAV-lyd', 'AudioPlaylist' : 'MP3-spilleliste', 'kindVideo' : 'Videomedie', 'kindVideoDV' : 'DV-video', 'kindVideoMPEG' : 'MPEG-video', 'kindVideoMPEG4' : 'MPEG-4-video', 'kindVideoAVI' : 'AVI-video', 'kindVideoMOV' : 'Quick Time-video', 'kindVideoWM' : 'Windows Media-video', 'kindVideoFlash' : 'Flash-video', 'kindVideoMKV' : 'Matroska-video', 'kindVideoOGG' : 'Ogg-video' } }; })); application/library/js/i18n/elfinder.si.js000064400000126147146731177160014476 0ustar00/** * Sinhala translation * @author CodeLyokoXtEAM * @version 2018-03-26 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.si = { translator : 'CodeLyokoXtEAM <XcodeLyokoTEAM@gmail.com>', language : 'Sinhala', direction : 'ltr', dateFormat : 'Y.m.d h:i A', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM nonameDateFormat : 'Ymd-His', // to apply if upload file is noname: 120513172700 messages : { /********************************** errors **********************************/ 'error' : 'දෝෂයකි.', 'errUnknown' : 'නොදන්නා දෝෂයකි.', 'errUnknownCmd' : 'නොදන්නා විධානයකි.', 'errJqui' : 'වලංගු නොවන jQuery UI සැකැස්මකි. තේරිය හැකි, ඇදගෙන යාම සහ ඇද දැමිය හැකි කොටස් ඇතුළත් කළ යුතුය.', 'errNode' : 'ElFinder විසින් DOM Element නිර්මාණය කිරීමට අවශ්‍යව අැත.', 'errURL' : 'වලංගු නොවන elFinder සැකැස්මකි! URL විකල්පය සැකසා නැත.', 'errAccess' : 'භාවිතය අත්හිටුවා ඇත.', 'errConnect' : 'පසුබිම(Backend) වෙත සම්බන්ධ වීමට නොහැකිය.', 'errAbort' : 'සම්බන්ධතාවය වසාදමා ඇත.', 'errTimeout' : 'සම්බන්ධතා කල් ඉකුත්වී ඇත.', 'errNotFound' : 'පසුබිම(Backend) සොයාගත නොහැකි විය.', 'errResponse' : 'වලංගු නොවන පසුබිම(Backend) ප්‍රතිචාරය.', 'errConf' : 'වලංගු නොවන Backend සැකැස්මකි.', 'errJSON' : 'PHP JSON මොඩියුලය ස්ථාපනය කර නැත.', 'errNoVolumes' : 'කියවිය හැකි එ්කක(volumes) නොමැත.', 'errCmdParams' : '"$1" නම් විධානය වලංගු නොවන පරාමිතියකි.', 'errDataNotJSON' : 'JSON දත්ත නොවේ.', 'errDataEmpty' : 'හිස් දත්තයකි.', 'errCmdReq' : 'Backend සඳහා ඉල්ලන ලද විධානයේ නම අවශ්‍ය වේ.', 'errOpen' : '"$1" විවෘත කළ නොහැක.', 'errNotFolder' : 'අායිත්තම(object) ෆොල්ඩරයක් නොවේ.', 'errNotFile' : 'අායිත්තම(object) ගොනුවක් නොවේ.', 'errRead' : '"$1" කියවීමට නොහැක.', 'errWrite' : '"$1" තුල ලිවීමට නොහැකිය.', 'errPerm' : 'අවසරය නොමැත.', 'errLocked' : '"$1" අගුළු දමා ඇති අතර එය නැවත නම් කිරීම, සම්පූර්ණයෙන් විස්ථාපනය කිරීම හෝ ඉවත් කිරීම කළ නොහැක.', 'errExists' : '"$1" නම් ගොනුව දැනටමත් පවතී.', 'errInvName' : 'ගොනු නම වලංගු නොවේ.', 'errInvDirname' : 'ෆෝල්ඩර් නම වලංගු නොවේ.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'ෆෝල්ඩරය හමු නොවිණි.', 'errFileNotFound' : 'ගොනුව හමු නොවිණි.', 'errTrgFolderNotFound' : 'ඉලක්කගත ෆෝල්ඩරය "$1" හමු නොවිනි.', 'errPopup' : 'බ්‍රවුසරය උත්පතන කවුළුව විවෘත කිරීම වළක්වයි. ගොනු විවෘත කිරීම සඳහා බ්‍රවුසරයේ විකල්ප තුළ එය සක්රිය කරන්න.', 'errMkdir' : '"$1" ෆෝල්ඩරය සෑදීමට නොහැකිය.', 'errMkfile' : '"$1" ගොනුව සෑදිය නොහැක.', 'errRename' : '"$1" නැවත නම් කිරීමට නොහැකි විය.', 'errCopyFrom' : '"$1" volume යෙන් ගොනු පිටපත් කිරීම තහනම්ය.', 'errCopyTo' : '"$1" volume යට ගොනු පිටපත් කිරීම තහනම්ය.', 'errMkOutLink' : 'volume root යෙන් පිටතට සබැඳිය(link) නිර්මාණය කිරීමට නොහැකි විය.', // from v2.1 added 03.10.2015 'errUpload' : 'උඩුගත(upload) කිරීමේ දෝෂයකි.', // old name - errUploadCommon 'errUploadFile' : '"$1" උඩුගත(upload) කිරීමට නොහැකි විය.', // old name - errUpload 'errUploadNoFiles' : 'උඩුගත(upload) කිරීම සඳහා ගොනු කිසිවක් සොයාගත නොහැකි විය.', 'errUploadTotalSize' : 'දත්ත අවසර දී අැති උපරිම ප්‍රමාණය ඉක්මවා ඇත.', // old name - errMaxSize 'errUploadFileSize' : 'ගොනු අවසර දී අැති උපරිම ප්‍රමාණය ඉක්මවා ඇත.', // old name - errFileMaxSize 'errUploadMime' : 'ගොනු වර්ගයට අවසර නැත.', 'errUploadTransfer' : '"$1" ව මාරු කිරීමේ දෝෂයකි.', 'errUploadTemp' : 'upload කිරීම සඳහා තාවකාලික ගොනුව සෑදිය නොහැක.', // from v2.1 added 26.09.2015 'errNotReplace' : '"$1" අායිත්තම(object) දැනටමත් මෙම ස්ථානයේ පවතී, වෙනත් වර්ගයකිනි ප්‍රතිස්ථාපනය කළ නොහැක.', // new 'errReplace' : '"$1" ප්‍රතිස්ථාපනය කළ නොහැක.', 'errSave' : '"$1" සුරැකීමට නොහැක.', 'errCopy' : '"$1" පිටපත් කිරීමට නොහැක.', 'errMove' : '"$1" සම්පූර්ණයෙන් විස්ථාපනය කිරීමට නොහැක.', 'errCopyInItself' : '"$1" තුලට පිටපත් කිරීමට නොහැක.', 'errRm' : '"$1" ඉවත් කිරීමට නොහැකි විය.', 'errTrash' : 'කුණු-කූඩය තුලට දැමීමට නොහැක.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'මූලාශ්‍රය ගොනු(ව) ඉවත් කළ නොහැක.', 'errExtract' : '"$1" වෙතින් ගොනු දිග හැරීමට නොහැක.', 'errArchive' : 'සංරක්ෂිතය සෑදීමට නොහැකි විය.', 'errArcType' : 'නොගැලපෙන සංරක්ෂණ වර්ගයකි.', 'errNoArchive' : 'ගොනුව නොගැලපෙන සංරක්ෂණ වර්ගයක් හෝ සංරක්ෂිතයක් නොවේ.', 'errCmdNoSupport' : 'පසුබිම(Backend) මෙම විධානය නොදනී.', 'errReplByChild' : '"$1" ෆෝල්ඩරය එහිම අඩංගු අයිතමයක් මගින් ප්‍රතිස්ථාපනය කළ නොහැක.', 'errArcSymlinks' : 'ආරක්ෂිත හේතුව නිසා අනුමත නොකෙරෙන සබැඳි සම්බන්දතා හෝ ලිපිගොනු නම් අඩංගු බැවින් සංරක්ෂිතය දිග හැරීම කිරීමට ඉඩ නොදෙන.', // edited 24.06.2012 'errArcMaxSize' : 'සංරක්ෂිතය ලිපිගොනු උපරිම ප්‍රමාණය ඉක්මවා ඇත.', 'errResize' : 'ප්‍රතිප්‍රමාණය කිරීමට නොහැකි විය.', 'errResizeDegree' : 'වලංගු නොවන භ්‍රමණ කෝණයකි.', // added 7.3.2013 'errResizeRotate' : 'රූපය භ්‍රමණය කිරීමට නොහැකි විය.', // added 7.3.2013 'errResizeSize' : 'රූපයේ ප්‍රමාණය වලංගු නොවේ.', // added 7.3.2013 'errResizeNoChange' : 'රූපයේ ප්‍රමාණය වෙනස් නොවුණි.', // added 7.3.2013 'errUsupportType' : 'නොගැලපෙන ගොනු වර්ගයකි.', 'errNotUTF8Content' : '"$1" ගොනුව UTF-8 හි නොමැති අතර සංස්කරණය කළ නොහැක.', // added 9.11.2011 'errNetMount' : '"$1" සවි(mount) කිරීමට නොහැක.', // added 17.04.2012 'errNetMountNoDriver' : 'ප්‍රොටොකෝලය(protocol) නොගැලපේ.', // added 17.04.2012 'errNetMountFailed' : 'සවි කිරීම(mount කිරීම) අසාර්ථක විය.', // added 17.04.2012 'errNetMountHostReq' : 'ධාරකය(Host) අවශ්‍ය වේ.', // added 18.04.2012 'errSessionExpires' : 'ඔබේ අක්‍රියතාව හේතුවෙන් සැසිය(session) කල් ඉකුත් වී ඇත.', 'errCreatingTempDir' : 'තාවකාලික ඩිරෙක්ටරයක්(directory) ​​සෑදිය නොහැක: "$1"', 'errFtpDownloadFile' : 'FTP වලින් ගොනුව බාගත(download) කිරීමට නොහැකි විය: "$1"', 'errFtpUploadFile' : 'ගොනුව FTP වෙත උඩුගත(upload) කිරීමට නොහැකි විය: "$1"', 'errFtpMkdir' : 'FTP මත දුරස්ථ නාමාවලියක්(remote directory) නිර්මාණය කිරීමට නොහැකි විය: "$1"', 'errArchiveExec' : 'ගොනු සංරක්ෂණය(archiving) කිරීමේදී දෝෂයක් ඇතිවිය: "$1"', 'errExtractExec' : 'ගොනු දිගහැරීමේදී(extracting) දෝෂයක් ඇතිවිය: "$1"', 'errNetUnMount' : 'විසන්ධි කිරීමට(unmount) නොහැක.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'UTF-8 වෙත පරිවර්තනය කළ නොහැක.', // from v2.1 added 08.04.2014 'errFolderUpload' : 'ඔබ ෆෝල්ඩරය උඩුගත(upload) කිරීමට කැමති නම් නවීන බ්‍රවුසරයකින් උත්සාහ කරන්න.', // from v2.1 added 26.6.2015 'errSearchTimeout' : '"$1" සෙවීම කල් ඉකුත්වී ඇත. සෙවුම් ප්‍රතිඵල අර්ධ වශයෙන් දිස්වේ.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'නැවත බලය(Re-authorization) ලබා දීම අවශ්‍ය වේ.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'තෝරා ගත හැකි උපරිම අයිතම සංඛ්‍යාව $1 ක් වේ.', // from v2.1.17 added 17.10.2016 'errRestore' : 'කුණු කූඩයෙන් නැවත ලබා ගත නොහැක. යළි පිහිටුවීමේ ගමනාන්තය(restore destination) හඳුනාගත නොහැක.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'මෙම ගොනු වර්ගයේ සංස්කාරකය හමු නොවිණි.', // from v2.1.25 added 23.5.2017 'errServerError' : 'සේවාදායකයේ පැත්තෙන්(server side) දෝශයක් ඇතිවිය.', // from v2.1.25 added 16.6.2017 'errEmpty' : '"$1" ෆෝල්ඩරය හිස් කිරීමට නොහැක.', // from v2.1.25 added 22.6.2017 /******************************* commands names ********************************/ 'cmdarchive' : 'සංරක්ෂිතය(archive) නිර්මාණය කරන්න', 'cmdback' : 'ආපසු', 'cmdcopy' : 'පිටපත් කරන්න', 'cmdcut' : 'මුළුමනින්ම පිටපත් කරන්න(Cut)', 'cmddownload' : 'බාගත කරන්න(Download)', 'cmdduplicate' : 'අනුපිටපත් කරන්න(Duplicate)', 'cmdedit' : 'ගොනුව සංස්කරණය කරන්න', 'cmdextract' : 'සංරක්ෂිතයේ ගොනු දිගහරින්න(Extract)', 'cmdforward' : 'ඉදිරියට', 'cmdgetfile' : 'ගොනු තෝරන්න', 'cmdhelp' : 'මෙම මෘදුකාංගය පිළිබඳව', 'cmdhome' : 'නිවහන(Home)', 'cmdinfo' : 'තොරතුරු ලබාගන්න', 'cmdmkdir' : 'අළුත් ෆෝල්ඩරයක්', 'cmdmkdirin' : 'අළුත් ෆෝල්ඩරයක් තුළට', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'නව ගොනුවක්', 'cmdopen' : 'විවෘත කරන්න', 'cmdpaste' : 'දමන්න(Paste)', 'cmdquicklook' : 'පූර්ව දර්ශනයක්(Preview)', 'cmdreload' : 'නැවත අළුත් කරන්න(Reload)', 'cmdrename' : 'නම වෙනස් කරන්න', 'cmdrm' : 'මකන්න', 'cmdtrash' : 'කුණු කූඩයට දමන්න', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'යළි පිහිටුවන්න(Restore)', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'ගොනු සොයන්න', 'cmdup' : 'ප්‍ර්‍රධාන නාමාවලිය(parent directory) වෙත යන්න', 'cmdupload' : 'ගොනු උඩුගත(Upload) කරන්න', 'cmdview' : 'දර්ශනය(View)', 'cmdresize' : 'ප්‍රථිප්‍රමාණය සහ භ්‍රමණය', 'cmdsort' : 'වර්ගීකරණය කරන්න', 'cmdnetmount' : 'ජාල එ්කකයක් සවි කරන්න(Mount network volume)', // added 18.04.2012 'cmdnetunmount': 'ගලවන්න(Unmount)', // from v2.1 added 30.04.2012 'cmdplaces' : 'පහසු ස්ථානයට(To Places)', // added 28.12.2014 'cmdchmod' : 'ක්‍රමය වෙනස් කරන්න', // from v2.1 added 20.6.2015 'cmdopendir' : 'ෆෝල්ඩරය විවෘත කරන්න', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'නැවත තීරු පළල පිහිටුවන්න', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'පුළුල් තිරය', // from v2.1.15 added 03.08.2016 'cmdmove' : 'මාරු කරන්න(Move)', // from v2.1.15 added 21.08.2016 'cmdempty' : 'ෆෝල්ඩරය හිස් කරන්න', // from v2.1.25 added 22.06.2017 'cmdundo' : 'නිෂ්ප්‍රභ කරන්න', // from v2.1.27 added 31.07.2017 'cmdredo' : 'නැවත කරන්න', // from v2.1.27 added 31.07.2017 'cmdpreference': 'අභිමතයන් (Preferences)', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'සියල්ල තෝරන්න', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'කිසිවක් තෝරන්න එපා', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'විරුද්ධ අාකාරයට තෝරන්න', // from v2.1.28 added 15.08.2017 /*********************************** buttons ***********************************/ 'btnClose' : 'වසන්න', 'btnSave' : 'සුරකින්න', 'btnRm' : 'ඉවත් කරන්න', 'btnApply' : 'යොදන්න(Apply)', 'btnCancel' : 'අවලංගු කරන්න', 'btnNo' : 'නැත', 'btnYes' : 'ඔව්', 'btnMount' : 'සවිකිරීම(Mount)', // added 18.04.2012 'btnApprove': 'කරුණාකර $1 අනුමත කරන්න', // from v2.1 added 26.04.2012 'btnUnmount': 'ගලවන්න(Unmount)', // from v2.1 added 30.04.2012 'btnConv' : 'පරිවර්තනය කරන්න', // from v2.1 added 08.04.2014 'btnCwd' : 'මෙතන', // from v2.1 added 22.5.2015 'btnVolume' : 'එ්කකය(Volume)', // from v2.1 added 22.5.2015 'btnAll' : 'සියල්ල', // from v2.1 added 22.5.2015 'btnMime' : 'MIME වර්ගය', // from v2.1 added 22.5.2015 'btnFileName':'ගොනුවේ නම', // from v2.1 added 22.5.2015 'btnSaveClose': 'සුරකින්න සහ වසන්න', // from v2.1 added 12.6.2015 'btnBackup' : 'උපස්ථ(Backup) කරන්න', // fromv2.1 added 28.11.2015 'btnRename' : 'නම වෙනස් කරන්න', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'නම වෙනස් කරන්න(සියල්ල)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'පෙර ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'ඊළඟ ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'වෙනත් නමකින් සුරකිමින්(Save As)', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'ෆෝල්ඩරය විවෘත කරමින්', 'ntffile' : 'ගොනුව විවෘත කරමින්', 'ntfreload' : 'ෆෝල්ඩර් අන්තර්ගතය නැවත අළුත් කරමින්(Reloading)', 'ntfmkdir' : 'ෆෝල්ඩරයක් නිර්මාණය කරමින්', 'ntfmkfile' : 'ගොනුව නිර්මාණය කරමින්', 'ntfrm' : 'අයිතමයන් මකමින්', 'ntfcopy' : 'අයිතමයන් පිටපත් කරමින්', 'ntfmove' : 'අයිතමයන් සම්පූර්ණයෙන් විස්ථාපනය කරමින්', 'ntfprepare' : 'පවතින අයිතම පිරික්සමින්', 'ntfrename' : 'ගොනු නැවත නම් කරමින්', 'ntfupload' : 'ගොනු උඩුගත(uploading) කරමින්', 'ntfdownload' : 'ගොනු බාගත(downloading) කරමින්', 'ntfsave' : 'ගොනු සුරකිමින්', 'ntfarchive' : 'සංරක්ෂණය(archive) සාදමින්', 'ntfextract' : 'සංරක්ෂණයෙන්(archive) ගොනු දිගහරිමින්(Extracting)', 'ntfsearch' : 'ගොනු සොයමින්', 'ntfresize' : 'රූප ප්‍රමාණය වෙනස් කරමින්', 'ntfsmth' : 'දෙයක් කරමින්', 'ntfloadimg' : 'පින්තූරය පූරණය කරමින්(Loading)', 'ntfnetmount' : 'ජාල එ්කකයක් සවිකරමින්(Mounting network volume)', // added 18.04.2012 'ntfnetunmount': 'ජාල එ්කකයක් ගලවමින්(Unmounting network volume)', // from v2.1 added 30.04.2012 'ntfdim' : 'පිංතූරයේ මානය(dimension) ලබාගනිමින්', // added 20.05.2013 'ntfreaddir' : 'ෆෝල්ඩරයේ තොරතුරු කියවමින්', // from v2.1 added 01.07.2013 'ntfurl' : 'Getting URL of link', // from v2.1 added 11.03.2014 'ntfchmod' : 'ගොනු ආකරය වෙනස් කරමින්', // from v2.1 added 20.6.2015 'ntfpreupload': 'උඩුගත(upload) කරන ලද ගොනු නාමය සත්‍යාපනය කරමින්(Verifying)', // from v2.1 added 31.11.2015 'ntfzipdl' : 'බාගත කරගැනීම(download) සඳහා ගොනුවක් නිර්මාණය කරමින්', // from v2.1.7 added 23.1.2016 'ntfparents' : 'මාර්ග(path) තොරතුරු ලබා ගනිමින්', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'උඩුගත කරන ලද(uploaded) ගොනුව සකසමින්', // from v2.1.17 added 2.11.2016 'ntftrash' : 'කුණු කූඩයට දමමින්', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'කුණු කූඩයට දැමීම යළි පිහිටුවමින්(Doing restore)', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'ගමනාන්ත(destination) ෆෝල්ඩරය පරීක්ෂා කරමින්', // from v2.1.24 added 3.5.2017 'ntfundo' : 'පෙර මෙහෙයුම(operation) ඉවත් කරමින්', // from v2.1.27 added 31.07.2017 'ntfredo' : 'පෙර ආපසු හැරවීම යළි සැකසමින්', // from v2.1.27 added 31.07.2017 /*********************************** volumes *********************************/ 'volume_Trash' : 'කුණු කූඩය', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'නොදනී', 'Today' : 'අද', 'Yesterday' : 'ඊයේ', 'msJan' : 'ජනවා.', 'msFeb' : 'පෙබ.', 'msMar' : 'මාර්.', 'msApr' : 'අප්‍රේ.', 'msMay' : 'මැයි', 'msJun' : 'ජූනි', 'msJul' : 'ජුලි', 'msAug' : 'අගෝ.', 'msSep' : 'සැප්.', 'msOct' : 'ඔක්තෝ.', 'msNov' : 'නොවැ.', 'msDec' : 'දෙසැ.', 'January' : 'ජනවාරි', 'February' : 'පෙබරවාරි', 'March' : 'මාර්තු', 'April' : 'අප්‍රේල්', 'May' : 'මැයි', 'June' : 'ජූනි', 'July' : 'ජුලි', 'August' : 'අගෝස්තු', 'September' : 'සැප්තැම්බර්', 'October' : 'ඔක්තෝම්බර්', 'November' : 'නොවැම්බර්', 'December' : 'දෙසැම්බර්', 'Sunday' : 'ඉරිදා', 'Monday' : 'සඳුදා', 'Tuesday' : 'අඟහරුවාදා', 'Wednesday' : 'බදාදා', 'Thursday' : 'බ්‍රහස්පතින්දා', 'Friday' : 'සිකුරාදා', 'Saturday' : 'සෙනසුරාදා', 'Sun' : 'ඉරිදා', 'Mon' : 'සඳු.', 'Tue' : 'අඟහ.', 'Wed' : 'බදාදා', 'Thu' : 'බ්‍රහස්.', 'Fri' : 'සිකු.', 'Sat' : 'සෙන.', /******************************** sort variants ********************************/ 'sortname' : 'නම අනුව', 'sortkind' : 'වර්ගය අනුව', 'sortsize' : 'ප්‍රමාණය අනුව', 'sortdate' : 'දිනය අනුව', 'sortFoldersFirst' : 'ෆෝල්ඩර වලට පළමු තැන', 'sortperm' : 'අවසරය අනුව', // from v2.1.13 added 13.06.2016 'sortmode' : 'අාකාරය අනුව', // from v2.1.13 added 13.06.2016 'sortowner' : 'හිමිකරු අනුව', // from v2.1.13 added 13.06.2016 'sortgroup' : 'කණ්ඩායම අනුව', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'එලෙසටම රුක්සටහනත්(Treeview)', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'නව ෆෝල්ඩරයක්', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'තහවුරු කිරීම අවශ්‍යයි', 'confirmRm' : 'අයිතමයන් සදහටම ඉවත් කිරීමට අවශ්‍ය බව ඔබට විශ්වාසද?
    මෙය අාපසු හැරවිය නොහැකිය!', 'confirmRepl' : 'පැරණි අයිතමය නව එකක මගින් ප්‍රතිස්ථාපනය කරන්නද?', 'confirmRest' : 'දැනට පවතින අයිතමය කුණු කූඩය තුළ පවතින අයිතමය මගින් ප්‍රතිස්ථාපනය කරන්නද?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8 හි නොවේ
    UTF-8 වෙත පරිවර්තනය කරන්න ද?
    සුරැකීමෙන් පසු අන්තර්ගතය UTF-8 බවට පරිවර්තනය වේ.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'මෙම ගොනුවෙහි කේතන කේත(Character encoding) හඳුනාගත නොහැකි විය. සංස්කරණ කිරීමට එය තාවකාලිකව UTF-8 වෙත පරිවර්තනය කිරීම අවශ්‍ය වේ.
    කරුණාකර මෙම ගොනුවෙහි අක්ෂර කේතන කේත(character encoding) තෝරන්න.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'මෙය වෙනස් කර ඇත.
    ඔබට වෙනස්කම් සුරැකීමට නොහැකි නම් සිදු කරනු ලැබූ වෙනස්කම් අහිමි වේ.', // from v2.1 added 15.7.2015 'confirmTrash' : 'කුණු කූඩය තුලට අයිතමය යැවීමට ඔබට අවශ්‍ය ද?', //from v2.1.24 added 29.4.2017 'apllyAll' : 'සියල්ලටම යොදන්න', 'name' : 'නම', 'size' : 'ප්‍රමාණය', 'perms' : 'අවසරය', 'modify' : 'නවීකරණය කෙරුණ ලද්දේ', 'kind' : 'ජාතිය', 'read' : 'කියවන්න', 'write' : 'ලියන්න', 'noaccess' : 'ප්‍රවේශයක් නොමැත', 'and' : 'සහ', 'unknown' : 'නොහඳුනයි', 'selectall' : 'සියලු ගොනු තෝරන්න', 'selectfiles' : 'ගොනු(ව) තෝරන්න', 'selectffile' : 'පළමු ගොනුව තෝරන්න', 'selectlfile' : 'අවසාන ගොනුව තෝරන්න', 'viewlist' : 'ලැයිස්තු අාකාරය', 'viewicons' : 'අයිකන අාකාරය', 'places' : 'Places', 'calc' : 'ගණනය කරන්න', 'path' : 'මාර්ගය', 'aliasfor' : 'Alias for', 'locked' : 'අගුළු දමා ඇත', 'dim' : 'මාන(Dimensions)', 'files' : 'ගොනු', 'folders' : 'ෆෝල්ඩර', 'items' : 'අයිතම(Items)', 'yes' : 'ඔව්', 'no' : 'නැත', 'link' : 'සබැඳිය(Link)', 'searcresult' : 'සෙවුම් ප්‍රතිඵල', 'selected' : 'තෝරාගත් අයිතම', 'about' : 'මේ ගැන', 'shortcuts' : 'කෙටිමං', 'help' : 'උදව්', 'webfm' : 'වෙබ් ගොනු කළමනාකරු', 'ver' : 'අනුවාදය(version)', 'protocolver' : 'ප්‍රොටොකෝලය අනුවාදය(protocol version)', 'homepage' : 'ව්‍යාපෘතිය නිවහන', 'docs' : 'ලේඛනගත කිරීම', 'github' : 'Github හරහා සංවාදයේ යෙදෙන්න', 'twitter' : 'Twitter හරහා අපව සම්බන්ධ වන්න', 'facebook' : 'Facebook හරහා අප සමඟ එකතු වන්න', 'team' : 'කණ්ඩායම', 'chiefdev' : 'ප්‍රධාන සංස්කරු(chief developer)', 'developer' : 'සංස්කරු(developer)', 'contributor' : 'දායකයා(contributor)', 'maintainer' : 'නඩත්තු කරන්නා(maintainer)', 'translator' : 'පරිවර්තකයා', 'icons' : 'අයිකන', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'කෙටිමං අක්‍රීය කර ඇත', 'dropFiles' : 'ගොනු මෙතැනට ඇද දමන්න', 'or' : 'හෝ', 'selectForUpload' : 'ගොනු තෝරන්න', 'moveFiles' : 'අායිත්තම සම්පූර්ණයෙන් විස්ථාපනය', 'copyFiles' : 'අයිතමයන් පිටපත් කරන්න', 'restoreFiles' : 'Restore items', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Remove from places', 'aspectRatio' : 'දර්ශන අනුපාතය(Aspect ratio)', 'scale' : 'පරිමාණය', 'width' : 'පළල', 'height' : 'උස', 'resize' : 'ප්‍රතිප්‍රමානණය', 'crop' : 'Crop', 'rotate' : 'කැරකැවීම', 'rotate-cw' : 'අංශක 90කින් කරකවන්න CW', 'rotate-ccw' : 'අංශක 90කින් කරකවන්න CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'පරිශීලක', // added 18.04.2012 'pass' : 'මුරපදය', // added 18.04.2012 'confirmUnmount' : 'Are you unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drop or Paste files from browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drop files, Paste URLs or images(clipboard) here', // from v2.1 added 07.04.2014 'encoding' : 'කේතීකරණය(Encoding)', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'ඉලක්කය: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Search by input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'හිමිකරු', // from v2.1 added 20.6.2015 'group' : 'සමූහය', // from v2.1 added 20.6.2015 'other' : 'වෙනත්', // from v2.1 added 20.6.2015 'execute' : 'ක්‍රයාත්මක කරන්න', // from v2.1 added 20.6.2015 'perm' : 'අවසරය', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'ෆෝල්ඩරය හිස්', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'ෆාේල්ඩරය හිස්\\A අායිත්තම අතහැරීමෙන් අැතුලු කරන්න', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'ෆාේල්ඩරය හිස්\\A දිර්ඝ එබීමෙන් අායිත්තම අැතුලු කරන්න', // from v2.1.6 added 30.12.2015 'quality' : 'ගුණාත්මකභාවය', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Move up', // from v2.1.6 added 18.1.2016 'getLink' : 'Get URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'තෝරාගත් අයිතම ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Folder ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Allow offline access', // from v2.1.10 added 3.25.2016 'reAuth' : 'To re-authenticate', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Now loading...', // from v2.1.12 added 4.26.2016 'openMulti' : 'බහු ගොනු විවෘත කරන්න', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'ඔබ $1 ගොනු විවෘත කිරීමට උත්සාහ කරයි. බ්‍රව්සරයෙන් ඔබට විවෘත කිරීමට අවශ්‍ය බව ඔබට විශ්වාසද?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'සෙවුම් ඉලක්කයේ ගවේෂණ ප්‍රතිඵල නොමැත.', // from v2.1.12 added 5.16.2016 'editingFile' : 'එය ගොනුව සංස්කරණය කිරීමකි.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'ඔබ අයිතම $1 ප්‍රමාණයක් තෝරාගෙන ඇත.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'You have $1 items in the clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Incremental search is only from the current view.', // from v2.1.13 added 6.30.2016 'reinstate' : 'යථා තත්ත්වයට පත් කරන්න', // from v2.1.15 added 3.8.2016 'complete' : '$1 සම්පූර්ණයි', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Page turning', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'යළි පිහිටුවන්න(Reset)', // from v2.1.16 added 1.10.2016 'bgcolor' : 'පසුබිම් වර්ණය', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Color picker', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'පික්සල් 8ක දැල', // from v2.1.16 added 4.10.2016 'enabled' : 'සක්‍රීයයි', // from v2.1.16 added 4.10.2016 'disabled' : 'අක්‍රීයයි', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'වර්තමාන දර්ශනය තුළ සෙවුම් ප්‍රතිපල හිස්ව ඇත. \\A සෙවුම් ඉලක්කය පුළුල් කිරීම සඳහා [Enter] යතුර ඔබන්න.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'වර්තමාන දර්ශනයේ පළමු අකුර සෙවුම් ප්‍රතිපල හිස්ව පවතී.', // from v2.1.23 added 24.3.2017 'textLabel' : 'ලේබල්වල නම්', // from v2.1.17 added 13.10.2016 'minsLeft' : 'විනාඩි $1 ක් ගතවේ', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'ෆෝල්ඩරය තෝරන්න', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'පළමු අකුරෙන් සෙවීම', // from v2.1.23 added 24.3.2017 'presets' : 'Presets', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'It\'s too many items so it can\'t into trash.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Empty the folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'There are no items in a folder "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preference', // from v2.1.26 added 28.6.2017 'language' : 'Language setting', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialize the settings saved in this browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbar setting', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 ක් අකුරු ඉතිරිව පවතී', // from v2.1.29 added 30.8.2017 'sum' : 'එකතුව', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Rough file size', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017 'select' : 'තෝරන්න', // from v2.1.30 added 23.11.2017 'selectAction' : 'ගොනුවක් තේරූ විට සිදුකල යුතු දේ', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open with the editor used last time', // from v2.1.30 added 23.11.2017 'selectinvert' : 'ප්‍රතිවිරුද්ධ අාකාරයට තෝරන්න', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Are you sure you want to rename $1 selected items like $2?
    This cannot be undone!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch rename', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Number', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Add prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Add suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Change extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Columns settings (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'All changes will reflect immediately to the archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Any changes will not reflect until un-mount this volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'තෝරාගැනීම්වල තොරතුරු', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithms to show the file hash', // from v2.1.33 added 10.3.2018 /********************************** mimetypes **********************************/ 'kindUnknown' : 'නොදන්නා', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'ෆෝල්ඩරය', 'kindSelects' : 'තේරීම්', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Broken alias', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Postscript ලේඛනය', 'kindMsOffice' : 'Microsoft Office ලේඛනය', 'kindMsWord' : 'Microsoft Word ලේඛනය', 'kindMsExcel' : 'Microsoft Excel ලේඛනය', 'kindMsPP' : 'Microsoft Powerpoint presentation', 'kindOO' : 'Open Office ලේඛනය', 'kindAppFlash' : 'Flash application', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent file', 'kind7z' : '7z archive', 'kindTAR' : 'TAR archive', 'kindGZIP' : 'GZIP archive', 'kindBZIP' : 'BZIP archive', 'kindXZ' : 'XZ archive', 'kindZIP' : 'ZIP archive', 'kindRAR' : 'RAR archive', 'kindJAR' : 'Java JAR file', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM package', // texts 'kindText' : 'Text ලේඛනය', 'kindTextPlain' : 'Plain text', 'kindPHP' : 'PHP මූලාශ්‍රය', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML ලේඛනය', 'kindJS' : 'Javascript මූලාශ්‍රය', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C මූලාශ්‍රය', 'kindCHeader' : 'C header මූලාශ්‍රය', 'kindCPP' : 'C++ මූලාශ්‍රය', 'kindCPPHeader' : 'C++ header මූලාශ්‍රය', 'kindShell' : 'Unix shell රචනයකි', 'kindPython' : 'Python මූලාශ්‍රය', 'kindJava' : 'Java මූලාශ්‍රය', 'kindRuby' : 'Ruby මූලාශ්‍රය', 'kindPerl' : 'Perl රචනයකි', 'kindSQL' : 'SQL මූලාශ්‍රය', 'kindXML' : 'XML ලේඛනය', 'kindAWK' : 'AWK මූලාශ්‍රය', 'kindCSV' : 'කොමාවන් වෙන් කළ අගයන්', 'kindDOCBOOK' : 'Docbook XML ලේඛනය', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'පින්තූරය', 'kindBMP' : 'BMP පින්තූරය', 'kindJPEG' : 'JPEG පින්තූරය', 'kindGIF' : 'GIF පින්තූරය', 'kindPNG' : 'PNG පින්තූරය', 'kindTIFF' : 'TIFF පින්තූරය', 'kindTGA' : 'TGA පින්තූරය', 'kindPSD' : 'Adobe Photoshop පින්තූරය', 'kindXBITMAP' : 'X bitmap පින්තූරය', 'kindPXM' : 'Pixelmator පින්තූරය', // media 'kindAudio' : 'ශබ්ධ මාධ්‍ය', 'kindAudioMPEG' : 'MPEG ශබ්ධපටය', 'kindAudioMPEG4' : 'MPEG-4 ශබ්ධපටය', 'kindAudioMIDI' : 'MIDI ශබ්ධපටය', 'kindAudioOGG' : 'Ogg Vorbis ශබ්ධපටය', 'kindAudioWAV' : 'WAV ශබ්ධපටය', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video මාධ්‍ය', 'kindVideoDV' : 'DV චිත්‍රපටය', 'kindVideoMPEG' : 'MPEG චිත්‍රපටය', 'kindVideoMPEG4' : 'MPEG-4 චිත්‍රපටය', 'kindVideoAVI' : 'AVI චිත්‍රපටය', 'kindVideoMOV' : 'Quick Time චිත්‍රපටය', 'kindVideoWM' : 'Windows Media චිත්‍රපටය', 'kindVideoFlash' : 'Flash චිත්‍රපටය', 'kindVideoMKV' : 'Matroska චිත්‍රපටය', 'kindVideoOGG' : 'Ogg චිත්‍රපටය' } }; })); application/library/js/i18n/elfinder.ca.js000064400000040577146731177160014450 0ustar00/** * Catalan translation * @author Sergio Jovani * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ca = { translator : 'Sergio Jovani <lesergi@gmail.com>', language : 'Català', direction : 'ltr', dateFormat : 'M d, Y h:i A', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM messages : { /********************************** errors **********************************/ 'error' : 'Error', 'errUnknown' : 'Error desconegut.', 'errUnknownCmd' : 'Ordre desconeguda.', 'errJqui' : 'La configuració de jQuery UI no és vàlida. S\'han d\'incloure els components "selectable", "draggable" i "droppable".', 'errNode' : 'elFinder necessita crear elements DOM.', 'errURL' : 'La configuració de l\'elFinder no és vàlida! L\'opció URL no està configurada.', 'errAccess' : 'Accés denegat.', 'errConnect' : 'No s\'ha pogut connectar amb el rerefons.', 'errAbort' : 'S\'ha interromput la connexió.', 'errTimeout' : 'Temps de connexió excedit.', 'errNotFound' : 'No s\'ha trobat el rerefons.', 'errResponse' : 'La resposta del rerefons no és vàlida.', 'errConf' : 'La configuració del rerefons no és vàlida.', 'errJSON' : 'No està instal·lat el mòdul JSON del PHP.', 'errNoVolumes' : 'No s\'han trobat volums llegibles.', 'errCmdParams' : 'Els paràmetres per l\'ordre "$1" no són vàlids.', 'errDataNotJSON' : 'Les dades no són JSON.', 'errDataEmpty' : 'Les dades estan buides.', 'errCmdReq' : 'La sol·licitud del rerefons necessita el nom de l\'ordre.', 'errOpen' : 'No s\'ha pogut obrir "$1".', 'errNotFolder' : 'L\'objecte no és una carpeta.', 'errNotFile' : 'L\'objecte no és un fitxer.', 'errRead' : 'No s\'ha pogut llegir "$1".', 'errWrite' : 'No s\'ha pogut escriure a "$1".', 'errPerm' : 'Permís denegat.', 'errLocked' : '"$1" està bloquejat i no podeu canviar-li el nom, moure-lo ni suprimir-lo.', 'errExists' : 'Ja existeix un fitxer anomenat "$1".', 'errInvName' : 'El nom de fitxer no és vàlid.', 'errFolderNotFound' : 'No s\'ha trobat la carpeta.', 'errFileNotFound' : 'No s\'ha trobat el fitxer.', 'errTrgFolderNotFound' : 'No s\'ha trobat la carpeta de destí "$1".', 'errPopup' : 'El navegador ha evitat obrir una finestra emergent. Autoritzeu-la per obrir el fitxer.', 'errMkdir' : 'No s\'ha pogut crear la carpeta "$1".', 'errMkfile' : 'No s\'ha pogut crear el fitxer "$1".', 'errRename' : 'No s\'ha pogut canviar el nom de "$1".', 'errCopyFrom' : 'No està permès copiar fitxers des del volum "$1".', 'errCopyTo' : 'No està permès copiar fitxers al volum "$1".', 'errUpload' : 'S\'ha produït un error en la càrrega.', 'errUploadFile' : 'No s\'ha pogut carregar "$1".', 'errUploadNoFiles' : 'No s\'han trobat fitxers per carregar.', 'errUploadTotalSize' : 'Les dades excedeixen la mida màxima permesa.', 'errUploadFileSize' : 'El fitxer excedeix la mida màxima permesa.', 'errUploadMime' : 'El tipus de fitxer no està permès.', 'errUploadTransfer' : 'S\'ha produït un error en transferir "$1".', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'No s\'ha pogut desar "$1".', 'errCopy' : 'No s\'ha pogut copiar "$1".', 'errMove' : 'No s\'ha pogut moure "$1".', 'errCopyInItself' : 'No s\'ha pogut copiar "$1" a si mateix.', 'errRm' : 'No s\'ha pogut suprimir "$1".', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'No s\'han pogut extreure els fitxers de "$1".', 'errArchive' : 'No s\'ha pogut crear l\'arxiu.', 'errArcType' : 'El tipus d\'arxiu no està suportat.', 'errNoArchive' : 'El fitxer no és un arxiu o és un tipus no suportat.', 'errCmdNoSupport' : 'El rerefons no suporta aquesta ordre.', 'errReplByChild' : 'No es pot reemplaçar la carpeta “$1” per un element que conté.', 'errArcSymlinks' : 'Per raons de seguretat, no es permet extreure arxius que contenen enllaços simbòlics.', 'errArcMaxSize' : 'Els fitxers de l\'arxiu excedeixen la mida màxima permesa.', 'errResize' : 'No s\'ha pogut redimensionar "$1".', 'errResizeDegree' : 'Invalid rotate degree.', 'errResizeRotate' : 'Unable to rotate image.', 'errResizeSize' : 'Invalid image size.', 'errResizeNoChange' : 'Image size not changed.', 'errUsupportType' : 'El tipus de fitxer no està suportat.', 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', 'errNetMount' : 'Unable to mount "$1".', 'errNetMountNoDriver' : 'Unsupported protocol.', 'errNetMountFailed' : 'Mount failed.', 'errNetMountHostReq' : 'Host required.', 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'Crea arxiu', 'cmdback' : 'Enrere', 'cmdcopy' : 'Copia', 'cmdcut' : 'Retalla', 'cmddownload' : 'Descarrega', 'cmdduplicate' : 'Duplica', 'cmdedit' : 'Edita el fitxer', 'cmdextract' : 'Extreu els fitxers de l\'arxiu', 'cmdforward' : 'Endavant', 'cmdgetfile' : 'Selecciona els fitxers', 'cmdhelp' : 'Quant a aquest programari', 'cmdhome' : 'Inici', 'cmdinfo' : 'Obté informació', 'cmdmkdir' : 'Nova carpeta', 'cmdmkfile' : 'Nou fitxer', 'cmdopen' : 'Obre', 'cmdpaste' : 'Enganxa', 'cmdquicklook' : 'Previsualitza', 'cmdreload' : 'Torna a carregar', 'cmdrename' : 'Canvia el nom', 'cmdrm' : 'Suprimeix', 'cmdsearch' : 'Cerca fitxers', 'cmdup' : 'Vés al directori superior', 'cmdupload' : 'Carrega fitxers', 'cmdview' : 'Visualitza', 'cmdresize' : 'Redimensiona la imatge', 'cmdsort' : 'Ordena', 'cmdnetmount' : 'Mount network volume', /*********************************** buttons ***********************************/ 'btnClose' : 'Tanca', 'btnSave' : 'Desa', 'btnRm' : 'Suprimeix', 'btnApply' : 'Aplica', 'btnCancel' : 'Cancel·la', 'btnNo' : 'No', 'btnYes' : 'Sí', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'S\'està obrint la carpeta', 'ntffile' : 'S\'està obrint el fitxer', 'ntfreload' : 'S\'està tornant a carregar el contingut de la carpeta', 'ntfmkdir' : 'S\'està creant el directori', 'ntfmkfile' : 'S\'estan creant el fitxers', 'ntfrm' : 'S\'estan suprimint els fitxers', 'ntfcopy' : 'S\'estan copiant els fitxers', 'ntfmove' : 'S\'estan movent els fitxers', 'ntfprepare' : 'S\'està preparant per copiar fitxers', 'ntfrename' : 'S\'estan canviant els noms del fitxers', 'ntfupload' : 'S\'estan carregant els fitxers', 'ntfdownload' : 'S\'estan descarregant els fitxers', 'ntfsave' : 'S\'estan desant els fitxers', 'ntfarchive' : 'S\'està creant l\'arxiu', 'ntfextract' : 'S\'estan extreient els fitxers de l\'arxiu', 'ntfsearch' : 'S\'estan cercant els fitxers', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'S\'estan realitzant operacions', 'ntfloadimg' : 'S\'està carregant la imatge', 'ntfnetmount' : 'Mounting network volume', 'ntfdim' : 'Acquiring image dimension', /************************************ dates **********************************/ 'dateUnknown' : 'desconegut', 'Today' : 'Avui', 'Yesterday' : 'Ahir', 'msJan' : 'gen.', 'msFeb' : 'febr.', 'msMar' : 'març', 'msApr' : 'abr.', 'msMay' : 'maig', 'msJun' : 'juny', 'msJul' : 'jul.', 'msAug' : 'ag.', 'msSep' : 'set.', 'msOct' : 'oct.', 'msNov' : 'nov.', 'msDec' : 'des.', 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', 'Sun' : 'Sun', 'Mon' : 'Mon', 'Tue' : 'Tue', 'Wed' : 'Wed', 'Thu' : 'Thu', 'Fri' : 'Fri', 'Sat' : 'Sat', /******************************** sort variants ********************************/ 'sortname' : 'per nom', 'sortkind' : 'per tipus', 'sortsize' : 'per mida', 'sortdate' : 'per data', 'sortFoldersFirst' : 'Folders first', /********************************** messages **********************************/ 'confirmReq' : 'Es necessita confirmació', 'confirmRm' : 'Voleu suprimir els fitxers?
    L\'acció es podrà desfer!', 'confirmRepl' : 'Voleu reemplaçar el fitxer antic amb el nou?', 'apllyAll' : 'Aplica a tot', 'name' : 'Nom', 'size' : 'Mida', 'perms' : 'Permisos', 'modify' : 'Modificat', 'kind' : 'Tipus', 'read' : 'llegir', 'write' : 'escriure', 'noaccess' : 'sense accés', 'and' : 'i', 'unknown' : 'desconegut', 'selectall' : 'Selecciona tots els fitxers', 'selectfiles' : 'Selecciona el(s) fitxer(s)', 'selectffile' : 'Selecciona el primer fitxer', 'selectlfile' : 'Selecciona l\'últim fitxer', 'viewlist' : 'Vista en llista', 'viewicons' : 'Vista en icones', 'places' : 'Llocs', 'calc' : 'Calcula', 'path' : 'Camí', 'aliasfor' : 'Àlies per', 'locked' : 'Bloquejat', 'dim' : 'Dimensions', 'files' : 'Fitxers', 'folders' : 'Carpetes', 'items' : 'Elements', 'yes' : 'sí', 'no' : 'no', 'link' : 'Enllaç', 'searcresult' : 'Resultats de la cerca', 'selected' : 'Elements seleccionats', 'about' : 'Quant a', 'shortcuts' : 'Dreceres', 'help' : 'Ajuda', 'webfm' : 'Gestor de fitxers web', 'ver' : 'Versió', 'protocolver' : 'versió de protocol', 'homepage' : 'Pàgina del projecte', 'docs' : 'Documentació', 'github' : 'Bifurca\'ns a GitHub', 'twitter' : 'Segueix-nos a Twitter', 'facebook' : 'Uniu-vos a Facebook', 'team' : 'Equip', 'chiefdev' : 'cap desenvolupador', 'developer' : 'desenvolupador', 'contributor' : 'col·laborador', 'maintainer' : 'mantenidor', 'translator' : 'traductor', 'icons' : 'Icones', 'dontforget' : 'i no oblideu agafar la vostra tovallola', 'shortcutsof' : 'Les dreceres estan inhabilitades', 'dropFiles' : 'Arrossegueu els fitxers aquí', 'or' : 'o', 'selectForUpload' : 'Seleccioneu els fitxer a carregar', 'moveFiles' : 'Mou els fitxers', 'copyFiles' : 'Copia els fitxers', 'rmFromPlaces' : 'Suprimeix dels llocs', 'aspectRatio' : 'Relació d\'aspecte', 'scale' : 'Escala', 'width' : 'Amplada', 'height' : 'Alçada', 'resize' : 'Redimensiona', 'crop' : 'Retalla', 'rotate' : 'Rotate', 'rotate-cw' : 'Rotate 90 degrees CW', 'rotate-ccw' : 'Rotate 90 degrees CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', 'protocol' : 'Protocol', 'host' : 'Host', 'port' : 'Port', 'user' : 'User', 'pass' : 'Password', /********************************** mimetypes **********************************/ 'kindUnknown' : 'Desconegut', 'kindFolder' : 'Carpeta', 'kindAlias' : 'Àlies', 'kindAliasBroken' : 'Àlies no vàlid', // applications 'kindApp' : 'Aplicació', 'kindPostscript' : 'Document Postscript', 'kindMsOffice' : 'Document del Microsoft Office', 'kindMsWord' : 'Document del Microsoft Word', 'kindMsExcel' : 'Document del Microsoft Excel', 'kindMsPP' : 'Presentació del Microsoft Powerpoint', 'kindOO' : 'Document de l\'Open Office', 'kindAppFlash' : 'Aplicació Flash', 'kindPDF' : 'Document PDF', 'kindTorrent' : 'Fitxer Bittorrent', 'kind7z' : 'Arxiu 7z', 'kindTAR' : 'Arxiu TAR', 'kindGZIP' : 'Arxiu GZIP', 'kindBZIP' : 'Arxiu BZIP', 'kindXZ' : 'Arxiu XZ', 'kindZIP' : 'Arxiu ZIP', 'kindRAR' : 'Arxiu RAR', 'kindJAR' : 'Fitxer JAR de Java', 'kindTTF' : 'Tipus de lletra True Type', 'kindOTF' : 'Tipus de lletra Open Type', 'kindRPM' : 'Paquet RPM', // texts 'kindText' : 'Document de text', 'kindTextPlain' : 'Document de text net', 'kindPHP' : 'Codi PHP', 'kindCSS' : 'Full d\'estils CSS', 'kindHTML' : 'Document HTML', 'kindJS' : 'Codi Javascript', 'kindRTF' : 'Document RTF', 'kindC' : 'Codi C', 'kindCHeader' : 'Codi de caçalera C', 'kindCPP' : 'Codi C++', 'kindCPPHeader' : 'Codi de caçalera C++', 'kindShell' : 'Script Unix', 'kindPython' : 'Codi Python', 'kindJava' : 'Codi Java', 'kindRuby' : 'Codi Ruby', 'kindPerl' : 'Script Perl', 'kindSQL' : 'Codi SQL', 'kindXML' : 'Document XML', 'kindAWK' : 'Codi AWK', 'kindCSV' : 'Document CSV', 'kindDOCBOOK' : 'Document XML de Docbook', // images 'kindImage' : 'Imatge', 'kindBMP' : 'Imatge BMP', 'kindJPEG' : 'Imatge JPEG', 'kindGIF' : 'Imatge GIF', 'kindPNG' : 'Imatge PNG', 'kindTIFF' : 'Imatge TIFF', 'kindTGA' : 'Imatge TGA', 'kindPSD' : 'Imatge Adobe Photoshop', 'kindXBITMAP' : 'Imatge X bitmap', 'kindPXM' : 'Imatge Pixelmator', // media 'kindAudio' : 'Fitxer d\'àudio', 'kindAudioMPEG' : 'Fitxer d\'àudio MPEG', 'kindAudioMPEG4' : 'Fitxer d\'àudio MPEG-4', 'kindAudioMIDI' : 'Fitxer d\'àudio MIDI', 'kindAudioOGG' : 'Fitxer d\'àudio Ogg Vorbis', 'kindAudioWAV' : 'Fitxer d\'àudio WAV', 'AudioPlaylist' : 'Llista de reproducció MP3', 'kindVideo' : 'Fitxer de vídeo', 'kindVideoDV' : 'Fitxer de vídeo DV', 'kindVideoMPEG' : 'Fitxer de vídeo MPEG', 'kindVideoMPEG4' : 'Fitxer de vídeo MPEG-4', 'kindVideoAVI' : 'Fitxer de vídeo AVI', 'kindVideoMOV' : 'Fitxer de vídeo Quick Time', 'kindVideoWM' : 'Fitxer de vídeo Windows Media', 'kindVideoFlash' : 'Fitxer de vídeo Flash', 'kindVideoMKV' : 'Fitxer de vídeo Matroska', 'kindVideoOGG' : 'Fitxer de vídeo Ogg' } }; })); application/library/js/worker/quicklook.tiff.js000064400000000362146731177160015744 0ustar00var data = self.data; if (data.memory) { Tiff.initialize({ TOTAL_MEMORY: data.memory }); } var tiff = new Tiff({buffer: data.data}); var image = tiff.readRGBAImage(); self.res = { image: image, width: tiff.width(), height: tiff.height() }; application/library/js/worker/calcfilehash.js000064400000001024146731177160015416 0ustar00var type = self.data.type, bin = self.data.bin, hashOpts = self.data.hashOpts; self.res = {}; if (type === 'md5') { let sp = new self.SparkMD5.ArrayBuffer(); sp.append(bin); self.res.hash = sp.end(); } else { let sha = new jsSHA('SHA' + (type.length === 5? type : ('-' + type)).toUpperCase(), 'ARRAYBUFFER'), opts = {}; if (type === 'ke128') { opts.shakeLen = hashOpts.shake128len; } else if (type === 'ke256') { opts.shakeLen = hashOpts.shake256len; } sha.update(bin); self.res.hash = sha.getHash('HEX', opts); } application/library/js/worker/quicklook.unzip.js000064400000003464146731177160016167 0ustar00var type = self.data.type, bin = self.data.bin, unzipFiles = function() { /** @type {Array.} */ var filenameList = []; /** @type {number} */ var i; /** @type {number} */ var il; /** @type {Array.} */ var fileHeaderList; // need check this.Y when update cdns.zlibUnzip this.Y(); fileHeaderList = this.i; for (i = 0, il = fileHeaderList.length; i < il; ++i) { // need check fileHeaderList[i].J when update cdns.zlibUnzip filenameList[i] = fileHeaderList[i].filename + (fileHeaderList[i].J? ' ({formatSize(' + fileHeaderList[i].J + ')})' : ''); } return filenameList; }, tarFiles = function(tar) { var filenames = [], tarlen = tar.length, offset = 0, toStr = function(arr) { return String.fromCharCode.apply(null, arr).replace(/\0+$/, ''); }, h, name, prefix, size, dbs; while (offset < tarlen && tar[offset] !== 0) { h = tar.subarray(offset, offset + 512); name = toStr(h.subarray(0, 100)); if (prefix = toStr(h.subarray(345, 500))) { name = prefix + name; } size = parseInt(toStr(h.subarray(124, 136)), 8); dbs = Math.ceil(size / 512) * 512; if (name === '././@LongLink') { name = toStr(tar.subarray(offset + 512, offset + 512 + dbs)); } (name !== 'pax_global_header') && filenames.push(name + (size? ' ({formatSize(' + size + ')})': '')); offset = offset + 512 + dbs; } return filenames; }; self.res = {}; if (type === 'tar') { self.res.files = tarFiles(new Uint8Array(bin)); } else if (type === 'zip') { self.res.files = unzipFiles.call(new Zlib.Unzip(new Uint8Array(bin))); } else if (type === 'gzip') { self.res.files = tarFiles((new Zlib.Gunzip(new Uint8Array(bin))).decompress()); } else if (type === 'bzip2') { self.res.files = tarFiles(self.bzip2.simple(self.bzip2.array(new Uint8Array(bin)))); } application/library/js/extras/quicklook.googledocs.js000064400000004401146731177160017134 0ustar00(function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { "use strict"; try { if (! elFinder.prototype.commands.quicklook.plugins) { elFinder.prototype.commands.quicklook.plugins = []; } elFinder.prototype.commands.quicklook.plugins.push(function(ql) { var fm = ql.fm, preview = ql.preview; preview.on('update', function(e) { var win = ql.window, file = e.file, node, loading; if (file.mime.indexOf('application/vnd.google-apps.') === 0) { if (file.url == '1') { preview.hide(); $('
    ').appendTo(ql.info.find('.elfinder-quicklook-info')) .on('click', function() { $(this).html(''); fm.request({ data : {cmd : 'url', target : file.hash}, preventDefault : true }) .always(function() { preview.show(); $(this).html(''); }) .done(function(data) { var rfile = fm.file(file.hash); ql.value.url = rfile.url = data.url || ''; if (ql.value.url) { preview.trigger($.Event('update', {file : ql.value})); } }); }); } if (file.url !== '' && file.url != '1') { e.stopImmediatePropagation(); loading = $('
    '+fm.i18n('nowLoading')+'
    ').appendTo(ql.info.find('.elfinder-quicklook-info')); node = $('') .css('background-color', 'transparent') .on('load', function() { ql.hideinfo(); loading.remove(); node.css('background-color', '#fff'); }) .on('error', function() { loading.remove(); node.remove(); }) .appendTo(preview) .attr('src', fm.url(file.hash)); preview.one('change', function() { loading.remove(); node.off('load').remove(); }); } } }); }); } catch(e) {} })); application/library/js/extras/editors.default.js000064400000242351146731177160016113 0ustar00(function(editors, elFinder) { if (typeof define === 'function' && define.amd) { define(['elfinder'], editors); } else if (elFinder) { var optEditors = elFinder.prototype._options.commandsOptions.edit.editors; elFinder.prototype._options.commandsOptions.edit.editors = optEditors.concat(editors(elFinder)); } }(function(elFinder) { "use strict"; var apps = {}, // get query of getfile getfile = window.location.search.match(/getfile=([a-z]+)/), useRequire = elFinder.prototype.hasRequire, ext2mime = { bmp: 'image/x-ms-bmp', dng: 'image/x-adobe-dng', gif: 'image/gif', jpeg: 'image/jpeg', jpg: 'image/jpeg', pdf: 'application/pdf', png: 'image/png', ppm: 'image/x-portable-pixmap', psd: 'image/vnd.adobe.photoshop', pxd: 'image/x-pixlr-data', svg: 'image/svg+xml', tiff: 'image/tiff', webp: 'image/webp', xcf: 'image/x-xcf', sketch: 'application/x-sketch', ico: 'image/x-icon', dds: 'image/vnd-ms.dds', emf: 'application/x-msmetafile' }, mime2ext, getExtention = function(mime, fm, jpeg) { if (!mime2ext) { mime2ext = fm.arrayFlip(ext2mime); } var ext = mime2ext[mime] || fm.mimeTypes[mime]; if (!jpeg) { if (ext === 'jpeg') { ext = 'jpg'; } } else { if (ext === 'jpg') { ext = 'jpeg'; } } return ext; }, changeImageType = function(src, toMime) { var dfd = $.Deferred(); try { var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), img = new Image(), conv = function() { var url = canvas.toDataURL(toMime), mime, m; if (m = url.match(/^data:([a-z0-9]+\/[a-z0-9.+-]+)/i)) { mime = m[1]; } else { mime = ''; } if (mime.toLowerCase() === toMime.toLowerCase()) { dfd.resolve(canvas.toDataURL(toMime), canvas); } else { dfd.reject(); } }; img.src = src; $(img).on('load', function() { try { canvas.width = img.width; canvas.height = img.height; ctx.drawImage(img, 0, 0); conv(); } catch(e) { dfd.reject(); } }).on('error', function () { dfd.reject(); }); return dfd; } catch(e) { return dfd.reject(); } }, initImgTag = function(id, file, content, fm) { var node = $(this).children('img:first').data('ext', getExtention(file.mime, fm)), spnr = $('
    ') .html('' + fm.i18n('ntfloadimg') + '') .hide() .appendTo(this), setup = function() { node.attr('id', id+'-img') .attr('src', url || content) .css({'height':'', 'max-width':'100%', 'max-height':'100%', 'cursor':'pointer'}) .data('loading', function(done) { var btns = node.closest('.elfinder-dialog').find('button,.elfinder-titlebar-button'); btns.prop('disabled', !done)[done? 'removeClass' : 'addClass']('ui-state-disabled'); node.css('opacity', done? '' : '0.3'); spnr[done? 'hide' : 'show'](); return node; }); }, url; if (!content.match(/^data:/)) { fm.openUrl(file.hash, false, function(v) { url = v; node.attr('_src', content); setup(); }); } else { setup(); } }, imgBase64 = function(node, mime) { var style = node.attr('style'), img, canvas, ctx, data; try { // reset css for getting image size node.attr('style', ''); // img node img = node.get(0); // New Canvas canvas = document.createElement('canvas'); canvas.width = img.width; canvas.height = img.height; // restore css node.attr('style', style); // Draw Image canvas.getContext('2d').drawImage(img, 0, 0); // To Base64 data = canvas.toDataURL(mime); } catch(e) { data = node.attr('src'); } return data; }, iframeClose = function(ifm) { var $ifm = $(ifm), dfd = $.Deferred().always(function() { $ifm.off('load', load); }), ab = 'about:blank', chk = function() { tm = setTimeout(function() { var src; try { src = base.contentWindow.location.href; } catch(e) { src = null; } if (src === ab) { dfd.resolve(); } else if (--cnt > 0){ chk(); } else { dfd.reject(); } }, 500); }, load = function() { tm && clearTimeout(tm); dfd.resolve(); }, cnt = 20, // 500ms * 20 = 10sec wait tm; $ifm.one('load', load); ifm.src = ab; chk(); return dfd; }; // check getfile callback function if (getfile) { getfile = getfile[1]; if (getfile === 'ckeditor') { elFinder.prototype._options.getFileCallback = function(file, fm) { window.opener.CKEDITOR.tools.callFunction((function() { var reParam = new RegExp('(?:[?&]|&)CKEditorFuncNum=([^&]+)', 'i'), match = window.location.search.match(reParam); return (match && match.length > 1) ? match[1] : ''; })(), fm.convAbsUrl(file.url)); fm.destroy(); window.close(); }; } } // return editors Array return [ { // tui.image-editor - https://github.com/nhnent/tui.image-editor info : { id: 'tuiimgedit', name: 'TUI Image Editor', iconImg: 'img/editor-icons.png 0 -48', dataScheme: true, schemeContent: true, openMaximized: true, canMakeEmpty: false, integrate: { title: 'TOAST UI Image Editor', link: 'http://ui.toast.com/tui-image-editor/' } }, // MIME types to accept mimes : ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp'], // HTML of this editor html : '
    ', // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE8 || fm.UA.Mobile) { this.disabled = true; } else { this.opts = Object.assign({ version: 'v3.15.3' }, opts.extraOptions.tuiImgEditOpts || {}, { iconsPath : fm.baseUrl + 'img/tui-', theme : {} }); if (!fm.isSameOrigin(this.opts.iconsPath)) { this.disabled = true; fm.debug('warning', 'Setting `commandOptions.edit.extraOptions.tuiImgEditOpts.iconsPath` MUST follow the same origin policy.'); } } }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, content, fm) { this.data('url', content); }, load : function(base) { var self = this, fm = this.fm, dfrd = $.Deferred(), cdns = fm.options.cdns, ver = self.confObj.opts.version, init = function(editor) { var $base = $(base), bParent = $base.parent(), opts = self.confObj.opts, iconsPath = opts.iconsPath, tmpContainer = $('
    ').appendTo(bParent), tmpDiv = [ $('
    ').appendTo(tmpContainer), $('
    ').appendTo(tmpContainer) ], iEditor = new editor(base, { includeUI: { loadImage: { path: $base.data('url'), name: self.file.name }, theme: opts.theme, initMenu: 'filter', menuBarPosition: 'bottom' }, cssMaxWidth: Math.max(300, bParent.width()), cssMaxHeight: Math.max(200, bParent.height() - (tmpDiv[0].height() + tmpDiv[1].height() + 3 /*margin*/)), usageStatistics: false }), canvas = $base.find('canvas:first').get(0), zoom = function(v) { if (typeof v !== 'undefined') { var c = $(canvas), w = parseInt(c.attr('width')), h = parseInt(c.attr('height')), a = w / h, z, mw, mh; if (v === 0) { mw = w; mh = h; } else { mw = parseInt(c.css('max-width')) + Number(v); mh = mw / a; if (mw > w && mh > h) { mw = w; mh = h; } } z = Math.round(mw / w * 100); // Control zoom button of TUI Image Editor if (z < 100) { iEditor.resetZoom(); iEditor.stopDrawingMode(); tuiZoomCtrls.hide(); } else { tuiZoomCtrls.show(); } per.text(z + '%'); iEditor.resizeCanvasDimension({width: mw, height: mh}); // continually change more if (zoomMore) { setTimeout(function() { zoomMore && zoom(v); }, 50); } } }, zup = $('').data('val', 10), zdown = $('').data('val', -10), per = $('').css('width', '4em').text('%').attr('title', '100%').data('val', 0), tuiZoomCtrls, quty, qutyTm, zoomTm, zoomMore; tmpContainer.remove(); $base.removeData('url').data('mime', self.file.mime); // jpeg quality controls if (self.file.mime === 'image/jpeg') { $base.data('quality', fm.storage('jpgQuality') || fm.option('jpgQuality')); quty = $('') .attr('min', '1') .attr('max', '100') .attr('title', '1 - 100') .on('change', function() { var q = quty.val(); $base.data('quality', q); qutyTm && cancelAnimationFrame(qutyTm); qutyTm = requestAnimationFrame(function() { canvas.toBlob(function(blob) { blob && quty.next('span').text(' (' + fm.formatSize(blob.size) + ')'); }, 'image/jpeg', Math.max(Math.min(q, 100), 1) / 100); }); }) .val($base.data('quality')); $('
    ') .append( $('').html(fm.i18n('quality') + ' : '), quty, $('') ) .prependTo($base.parent().next()); } else if (self.file.mime === 'image/svg+xml') { $base.closest('.ui-dialog').trigger('changeType', { extention: 'png', mime : 'image/png', keepEditor: true }); } // zoom scale controls $('
    ') .append( zdown, per, zup ) .attr('title', fm.i18n('scale')) .on('click', 'span,button', function() { zoom($(this).data('val')); }) .on('mousedown mouseup mouseleave', 'span', function(e) { zoomMore = false; zoomTm && clearTimeout(zoomTm); if (e.type === 'mousedown') { zoomTm = setTimeout(function() { zoomMore = true; zoom($(e.target).data('val')); }, 500); } }) .prependTo($base.parent().next()); // wait canvas ready setTimeout(function() { dfrd.resolve(iEditor); if (quty) { quty.trigger('change'); iEditor.on('redoStackChanged undoStackChanged', function() { quty.trigger('change'); }); } // ZOOM controls of TUI Image Editor tuiZoomCtrls = $base.find('.tie-btn-zoomIn,.tie-btn-zoomOut,.tie-btn-hand'); // show initial scale zoom(null); }, 100); // show color slider (maybe TUI-Image-Editor's bug) // see https://github.com/nhn/tui.image-editor/issues/153 $base.find('.tui-colorpicker-palette-container').on('click', '.tui-colorpicker-palette-preview', function() { $(this).closest('.color-picker-control').height('auto').find('.tui-colorpicker-slider-container').toggle(); }); $base.on('click', function() { $base.find('.tui-colorpicker-slider-container').hide(); }); }, loader; if (!self.confObj.editor) { loader = $.Deferred(); fm.loadCss([ cdns.tui + '/tui-color-picker/latest/tui-color-picker.css', cdns.tui + '/tui-image-editor/'+ver+'/tui-image-editor.css' ]); if (fm.hasRequire) { require.config({ paths : { 'fabric/dist/fabric.require' : cdns.fabric + '/fabric.require.min', // for fabric < 2.0.1 'fabric' : cdns.fabric + '/fabric.min', // for fabric >= 2.0.1 'tui-code-snippet' : cdns.tui + '/tui.code-snippet/latest/tui-code-snippet.min', 'tui-color-picker' : cdns.tui + '/tui-color-picker/latest/tui-color-picker.min', 'tui-image-editor' : cdns.tui + '/tui-image-editor/'+ver+'/tui-image-editor.min' } }); require(['tui-image-editor'], function(ImageEditor) { loader.resolve(ImageEditor); }); } else { fm.loadScript([ cdns.fabric + '/fabric.min.js', cdns.tui + '/tui.code-snippet/latest/tui-code-snippet.min.js' ], function() { fm.loadScript([ cdns.tui + '/tui-color-picker/latest/tui-color-picker.min.js' ], function() { fm.loadScript([ cdns.tui + '/tui-image-editor/'+ver+'/tui-image-editor.min.js' ], function() { loader.resolve(window.tui.ImageEditor); }, { loadType: 'tag' }); }, { loadType: 'tag' }); }, { loadType: 'tag' }); } loader.done(function(editor) { self.confObj.editor = editor; init(editor); }); } else { init(self.confObj.editor); } return dfrd; }, getContent : function(base) { var editor = this.editor, fm = editor.fm, $base = $(base), quality = $base.data('quality'); if (editor.instance) { if ($base.data('mime') === 'image/jpeg') { quality = quality || fm.storage('jpgQuality') || fm.option('jpgQuality'); quality = Math.max(0.1, Math.min(1, quality / 100)); } return editor.instance.toDataURL({ format: getExtention($base.data('mime'), fm, true), quality: quality }); } }, save : function(base) { var $base = $(base), quality = $base.data('quality'), hash = $base.data('hash'), file; this.instance.deactivateAll(); if (typeof quality !== 'undefined') { this.fm.storage('jpgQuality', quality); } if (hash) { file = this.fm.file(hash); $base.data('mime', file.mime); } } }, { // Photopea advanced image editor info : { id : 'photopea', name : 'Photopea', iconImg : 'img/editor-icons.png 0 -160', single: true, noContent: true, arrayBufferContent: true, openMaximized: true, // Disable file types that cannot be saved on Photopea. canMakeEmpty: ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp', 'image/tiff', /*'image/x-adobe-dng',*/ 'image/webp', /*'image/x-xcf',*/ 'image/vnd.adobe.photoshop', 'application/pdf', 'image/x-portable-pixmap', 'image/x-sketch', 'image/x-icon', 'image/vnd-ms.dds', /*'application/x-msmetafile'*/], integrate: { title: 'Photopea', link: 'https://www.photopea.com/learn/' } }, mimes : ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp', 'image/tiff', 'image/x-adobe-dng', 'image/webp', 'image/x-xcf', 'image/vnd.adobe.photoshop', 'application/pdf', 'image/x-portable-pixmap', 'image/x-sketch', 'image/x-icon', 'image/vnd-ms.dds', 'application/x-msmetafile'], html : '', // setup on elFinder bootup setup : function(opts, fm) { if (fm.UA.IE || fm.UA.Mobile) { this.disabled = true; } }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, dum, fm) { var orig = 'https://www.photopea.com', ifm = $(this).hide() //.css('box-sizing', 'border-box') .on('load', function() { //spnr.remove(); ifm.show(); }) .on('error', function() { spnr.remove(); ifm.show(); }), editor = this.editor, confObj = editor.confObj, spnr = $('
    ') .html('' + fm.i18n('nowLoading') + '') .appendTo(ifm.parent()), saveMimes = fm.arrayFlip(confObj.info.canMakeEmpty), getType = function(mime) { var ext = getExtention(mime, fm), extmime = ext2mime[ext]; if (!confObj.mimesFlip[extmime]) { ext = ''; } else if (ext === 'jpeg') { ext = 'jpg'; } if (!ext || !saveMimes[extmime]) { ext = 'psd'; extmime = ext2mime[ext]; ifm.closest('.ui-dialog').trigger('changeType', { extention: ext, mime : extmime, keepEditor: true }); } return ext; }, mime = file.mime, liveMsg, type, quty; if (!confObj.mimesFlip) { confObj.mimesFlip = fm.arrayFlip(confObj.mimes, true); } if (!confObj.liveMsg) { confObj.liveMsg = function(ifm, spnr, file) { var wnd = ifm.get(0).contentWindow, phase = 0, data = null, dfdIni = $.Deferred().done(function() { spnr.remove(); phase = 1; wnd.postMessage(data, orig); }), dfdGet; this.load = function() { return fm.getContents(file.hash, 'arraybuffer').done(function(d) { data = d; }); }; this.receive = function(e) { var ev = e.originalEvent, state; if (ev.origin === orig && ev.source === wnd) { if (ev.data === 'done') { if (phase === 0) { dfdIni.resolve(); } else if (phase === 1) { phase = 2; ifm.trigger('contentsloaded'); } else { if (dfdGet && dfdGet.state() === 'pending') { dfdGet.reject('errDataEmpty'); } } } else if (ev.data === 'Save') { editor.doSave(); } else { if (dfdGet && dfdGet.state() === 'pending') { if (typeof ev.data === 'object') { dfdGet.resolve('data:' + mime + ';base64,' + fm.arrayBufferToBase64(ev.data)); } else { dfdGet.reject('errDataEmpty'); } } } } }; this.getContent = function() { var type, q; if (phase > 1) { dfdGet && dfdGet.state() === 'pending' && dfdGet.reject(); dfdGet = null; dfdGet = $.Deferred(); if (phase === 2) { phase = 3; dfdGet.resolve('data:' + mime + ';base64,' + fm.arrayBufferToBase64(data)); data = null; return dfdGet; } if (ifm.data('mime')) { mime = ifm.data('mime'); type = getType(mime); } if (q = ifm.data('quality')) { type += ':' + (q / 100); } wnd.postMessage('app.activeDocument.saveToOE("' + type + '")', orig); return dfdGet; } }; }; } ifm.parent().css('padding', 0); type = getType(file.mime); liveMsg = editor.liveMsg = new confObj.liveMsg(ifm, spnr, file); $(window).on('message.' + fm.namespace, liveMsg.receive); liveMsg.load().done(function() { var d = JSON.stringify({ files : [], environment : { lang: fm.lang.replace(/_/g, '-'), customIO: {"save": "app.echoToOE(\"Save\");"} } }); ifm.attr('src', orig + '/#' + encodeURI(d)); }).fail(function(err) { err && fm.error(err); editor.initFail = true; }); // jpeg quality controls if (file.mime === 'image/jpeg' || file.mime === 'image/webp') { ifm.data('quality', fm.storage('jpgQuality') || fm.option('jpgQuality')); quty = $('') .attr('min', '1') .attr('max', '100') .attr('title', '1 - 100') .on('change', function() { var q = quty.val(); ifm.data('quality', q); }) .val(ifm.data('quality')); $('
    ') .append( $('').html(fm.i18n('quality') + ' : '), quty, $('') ) .prependTo(ifm.parent().next()); } }, load : function(base) { var dfd = $.Deferred(), self = this, fm = this.fm, $base = $(base); if (self.initFail) { dfd.reject(); } else { $base.on('contentsloaded', function() { dfd.resolve(self.liveMsg); }); } return dfd; }, getContent : function() { return this.editor.liveMsg? this.editor.liveMsg.getContent() : void(0); }, save : function(base, liveMsg) { var $base = $(base), quality = $base.data('quality'), hash = $base.data('hash'), file; if (typeof quality !== 'undefined') { this.fm.storage('jpgQuality', quality); } if (hash) { file = this.fm.file(hash); $base.data('mime', file.mime); } else { $base.removeData('mime'); } }, // On dialog closed close : function(base, liveMsg) { $(base).attr('src', ''); liveMsg && $(window).off('message.' + this.fm.namespace, liveMsg.receive); } }, { // Pixo is cross-platform image editor info : { id : 'pixo', name : 'Pixo Editor', iconImg : 'img/editor-icons.png 0 -208', dataScheme: true, schemeContent: true, single: true, canMakeEmpty: false, integrate: { title: 'Pixo Editor', link: 'https://pixoeditor.com/privacy-policy/' } }, // MIME types to accept mimes : ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp'], // HTML of this editor html : '
    ', // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE8 || !opts.extraOptions || !opts.extraOptions.pixo || !opts.extraOptions.pixo.apikey) { this.disabled = true; } else { this.editorOpts = opts.extraOptions.pixo; } }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, content, fm) { initImgTag.call(this, id, file, content, fm); }, // Get data uri scheme (this: this editors HTML node) getContent : function() { return $(this).children('img:first').attr('src'); }, // Launch Pixo editor when dialog open load : function(base) { var self = this, fm = this.fm, $base = $(base), node = $base.children('img:first'), dialog = $base.closest('.ui-dialog'), elfNode = fm.getUI(), dfrd = $.Deferred(), container = $('#elfinder-pixo-container'), init = function(onload) { var opts; if (!container.length) { container = $('
    ').css({ position: 'fixed', top: 0, right: 0, width: '100%', height: $(window).height(), overflow: 'hidden' }).hide().appendTo(elfNode.hasClass('elfinder-fullscreen')? elfNode : 'body'); // bind switch fullscreen event elfNode.on('resize.'+fm.namespace, function(e, data) { e.preventDefault(); e.stopPropagation(); data && data.fullscreen && container.appendTo(data.fullscreen === 'on'? elfNode : 'body'); }); fm.bind('destroy', function() { editor && editor.cancelEditing(); container.remove(); }); } else { // always moves to last container.appendTo(container.parent()); } node.on('click', launch); // Constructor options opts = Object.assign({ type: 'child', parent: container.get(0), output: {format: 'png'}, onSave: function(arg) { // Check current file.hash, all callbacks are called on multiple instances var mime = arg.toBlob().type, ext = getExtention(mime, fm), draw = function(url) { node.one('load error', function() { node.data('loading') && node.data('loading')(true); }) .attr('crossorigin', 'anonymous') .attr('src', url); }, url = arg.toDataURL(); node.data('loading')(); delete base._canvas; if (node.data('ext') !== ext) { changeImageType(url, self.file.mime).done(function(res, cv) { if (cv) { base._canvas = canvas = cv; quty.trigger('change'); qBase && qBase.show(); } draw(res); }).fail(function() { dialog.trigger('changeType', { extention: ext, mime : mime }); draw(url); }); } else { draw(url); } }, onClose: function() { dialog.removeClass(fm.res('class', 'preventback')); fm.toggleMaximize(container, false); container.hide(); fm.toFront(dialog); } }, self.confObj.editorOpts); // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: base, editorObj: Pixo, instance: void(0), opts: opts }); // make editor instance editor = new Pixo.Bridge(opts); dfrd.resolve(editor); $base.on('saveAsFail', launch); if (onload) { onload(); } }, launch = function() { dialog.addClass(fm.res('class', 'preventback')); fm.toggleMaximize(container, true); fm.toFront(container); container.show().data('curhash', self.file.hash); editor.edit(node.get(0)); node.data('loading')(true); }, qBase, quty, qutyTm, canvas, editor; node.data('loading')(); // jpeg quality controls if (self.file.mime === 'image/jpeg') { quty = $('') .attr('min', '1') .attr('max', '100') .attr('title', '1 - 100') .on('change', function() { var q = quty.val(); qutyTm && cancelAnimationFrame(qutyTm); qutyTm = requestAnimationFrame(function() { if (canvas) { canvas.toBlob(function(blob) { blob && quty.next('span').text(' (' + fm.formatSize(blob.size) + ')'); }, 'image/jpeg', Math.max(Math.min(q, 100), 1) / 100); } }); }) .val(fm.storage('jpgQuality') || fm.option('jpgQuality')); qBase = $('
    ') .hide() .append( $('').html(fm.i18n('quality') + ' : '), quty, $('') ) .prependTo($base.parent().next()); $base.data('quty', quty); } // load script then init if (typeof Pixo === 'undefined') { fm.loadScript(['https://pixoeditor.com:8443/editor/scripts/bridge.m.js'], function() { init(launch); }, {loadType: 'tag'}); } else { init(); launch(); } return dfrd; }, // Convert content url to data uri scheme to save content save : function(base) { var self = this, $base = $(base), node = $base.children('img:first'), q; if (base._canvas) { if ($base.data('quty')) { q = $base.data('quty').val(); q && this.fm.storage('jpgQuality', q); } node.attr('src', base._canvas.toDataURL(self.file.mime, q? Math.max(Math.min(q, 100), 1) / 100 : void(0))); } else if (node.attr('src').substr(0, 5) !== 'data:') { node.attr('src', imgBase64(node, this.file.mime)); } }, close : function(base, editor) { editor && editor.destroy(); } }, { // ACE Editor // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE8 || !fm.options.cdns.ace) { this.disabled = true; } }, // `mimes` is not set for support everything kind of text file info : { id : 'aceeditor', name : 'ACE Editor', iconImg : 'img/editor-icons.png 0 -96' }, load : function(textarea) { var self = this, fm = this.fm, dfrd = $.Deferred(), cdn = fm.options.cdns.ace, start = function() { var editor, editorBase, mode, ta = $(textarea), taBase = ta.parent(), dialog = taBase.parent(), id = textarea.id + '_ace', ext = self.file.name.replace(/^.+\.([^.]+)|(.+)$/, '$1$2').toLowerCase(), // MIME/mode map mimeMode = { 'text/x-php' : 'php', 'application/x-php' : 'php', 'text/html' : 'html', 'application/xhtml+xml' : 'html', 'text/javascript' : 'javascript', 'application/javascript' : 'javascript', 'text/css' : 'css', 'text/x-c' : 'c_cpp', 'text/x-csrc' : 'c_cpp', 'text/x-chdr' : 'c_cpp', 'text/x-c++' : 'c_cpp', 'text/x-c++src' : 'c_cpp', 'text/x-c++hdr' : 'c_cpp', 'text/x-shellscript' : 'sh', 'application/x-csh' : 'sh', 'text/x-python' : 'python', 'text/x-java' : 'java', 'text/x-java-source' : 'java', 'text/x-ruby' : 'ruby', 'text/x-perl' : 'perl', 'application/x-perl' : 'perl', 'text/x-sql' : 'sql', 'text/xml' : 'xml', 'application/docbook+xml' : 'xml', 'application/xml' : 'xml' }; // set base height taBase.height(taBase.height()); // set basePath of ace ace.config.set('basePath', cdn); // Base node of Ace editor editorBase = $('
    ').text(ta.val()).insertBefore(ta.hide()); // Editor flag ta.data('ace', true); // Aceeditor instance editor = ace.edit(id); // Ace editor configure editor.$blockScrolling = Infinity; editor.setOptions({ theme: 'ace/theme/monokai', fontSize: '14px', wrap: true, }); ace.config.loadModule('ace/ext/modelist', function() { // detect mode mode = ace.require('ace/ext/modelist').getModeForPath('/' + self.file.name).name; if (mode === 'text') { if (mimeMode[self.file.mime]) { mode = mimeMode[self.file.mime]; } } // show MIME:mode in title bar taBase.prev().children('.elfinder-dialog-title').append(' (' + self.file.mime + ' : ' + mode.split(/[\/\\]/).pop() + ')'); editor.setOptions({ mode: 'ace/mode/' + mode }); if (dfrd.state() === 'resolved') { dialog.trigger('resize'); } }); ace.config.loadModule('ace/ext/language_tools', function() { ace.require('ace/ext/language_tools'); editor.setOptions({ enableBasicAutocompletion: true, enableSnippets: true, enableLiveAutocompletion: false }); }); ace.config.loadModule('ace/ext/settings_menu', function() { ace.require('ace/ext/settings_menu').init(editor); }); // Short cuts editor.commands.addCommand({ name : "saveFile", bindKey: { win : 'Ctrl-s', mac : 'Command-s' }, exec: function(editor) { self.doSave(); } }); editor.commands.addCommand({ name : "closeEditor", bindKey: { win : 'Ctrl-w|Ctrl-q', mac : 'Command-w|Command-q' }, exec: function(editor) { self.doCancel(); } }); editor.resize(); // TextArea button and Setting button $('
    ').css('float', 'left') .append( $('').html(self.fm.i18n('TextArea')) .button() .on('click', function(){ if (ta.data('ace')) { ta.removeData('ace'); editorBase.hide(); ta.val(editor.session.getValue()).show().trigger('focus'); $(this).text('AceEditor'); } else { ta.data('ace', true); editorBase.show(); editor.setValue(ta.hide().val(), -1); editor.focus(); $(this).html(self.fm.i18n('TextArea')); } }) ) .append( $('') .button({ icons: { primary: 'ui-icon-gear', secondary: 'ui-icon-triangle-1-e' }, text: false }) .on('click', function(){ editor.showSettingsMenu(); $('#ace_settingsmenu') .css('font-size', '80%') .find('div[contains="setOptions"]').hide().end() .parent().appendTo($('#elfinder')); }) ) .prependTo(taBase.next()); // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: ace, instance: editor, opts: {} }); //dialog.trigger('resize'); dfrd.resolve(editor); }; // check ace & start if (!self.confObj.loader) { self.confObj.loader = $.Deferred(); self.fm.loadScript([ cdn+'/ace.js' ], function() { self.confObj.loader.resolve(); }, void 0, {obj: window, name: 'ace'}); } self.confObj.loader.done(start); return dfrd; }, close : function(textarea, instance) { instance && instance.destroy(); }, save : function(textarea, instance) { instance && $(textarea).data('ace') && (textarea.value = instance.session.getValue()); }, focus : function(textarea, instance) { instance && $(textarea).data('ace') && instance.focus(); }, resize : function(textarea, instance, e, data) { instance && instance.resize(); } }, { // CodeMirror // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE10 || !fm.options.cdns.codemirror) { this.disabled = true; } }, // `mimes` is not set for support everything kind of text file info : { id : 'codemirror', name : 'CodeMirror', iconImg : 'img/editor-icons.png 0 -176' }, load : function(textarea) { var fm = this.fm, cmUrl = fm.convAbsUrl(fm.options.cdns.codemirror), dfrd = $.Deferred(), self = this, start = function(CodeMirror) { var ta = $(textarea), base = ta.parent(), editor, editorBase, opts; // set base height base.height(base.height()); // CodeMirror configure options opts = { lineNumbers: true, lineWrapping: true, extraKeys : { 'Ctrl-S': function() { self.doSave(); }, 'Ctrl-Q': function() { self.doCancel(); }, 'Ctrl-W': function() { self.doCancel(); } } }; // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: CodeMirror, instance: void(0), opts: opts }); // CodeMirror configure editor = CodeMirror.fromTextArea(textarea, opts); // return editor instance dfrd.resolve(editor); // Auto mode set var info, m, mode, spec; if (! info) { info = CodeMirror.findModeByMIME(self.file.mime); } if (! info && (m = self.file.name.match(/.+\.([^.]+)$/))) { info = CodeMirror.findModeByExtension(m[1]); } if (info) { CodeMirror.modeURL = useRequire? 'codemirror/mode/%N/%N.min' : cmUrl + '/mode/%N/%N.min.js'; mode = info.mode; spec = info.mime; editor.setOption('mode', spec); CodeMirror.autoLoadMode(editor, mode); // show MIME:mode in title bar base.prev().children('.elfinder-dialog-title').append(' (' + spec + (mode != 'null'? ' : ' + mode : '') + ')'); } // editor base node editorBase = $(editor.getWrapperElement()).css({ // fix CSS conflict to SimpleMDE padding: 0, border: 'none' }); ta.data('cm', true); // fit height to base editorBase.height('100%'); // TextArea button and Setting button $('
    ').css('float', 'left') .append( $('').html(self.fm.i18n('TextArea')) .button() .on('click', function(){ if (ta.data('cm')) { ta.removeData('cm'); editorBase.hide(); ta.val(editor.getValue()).show().trigger('focus'); $(this).text('CodeMirror'); } else { ta.data('cm', true); editorBase.show(); editor.setValue(ta.hide().val()); editor.refresh(); editor.focus(); $(this).html(self.fm.i18n('TextArea')); } }) ) .prependTo(base.next()); }; // load script then start if (!self.confObj.loader) { self.confObj.loader = $.Deferred(); if (useRequire) { require.config({ packages: [{ name: 'codemirror', location: cmUrl, main: 'codemirror.min' }], map: { 'codemirror': { 'codemirror/lib/codemirror': 'codemirror' } } }); require([ 'codemirror', 'codemirror/addon/mode/loadmode.min', 'codemirror/mode/meta.min' ], function(CodeMirror) { self.confObj.loader.resolve(CodeMirror); }); } else { self.fm.loadScript([ cmUrl + '/codemirror.min.js' ], function() { self.fm.loadScript([ cmUrl + '/addon/mode/loadmode.min.js', cmUrl + '/mode/meta.min.js' ], function() { self.confObj.loader.resolve(CodeMirror); }); }, {loadType: 'tag'}); } self.fm.loadCss(cmUrl + '/codemirror.css'); } self.confObj.loader.done(start); return dfrd; }, close : function(textarea, instance) { instance && instance.toTextArea(); }, save : function(textarea, instance) { instance && $(textarea).data('cm') && (textarea.value = instance.getValue()); }, focus : function(textarea, instance) { instance && $(textarea).data('cm') && instance.focus(); }, resize : function(textarea, instance, e, data) { instance && instance.refresh(); } }, { // SimpleMDE // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE10 || !fm.options.cdns.simplemde) { this.disabled = true; } }, info : { id : 'simplemde', name : 'SimpleMDE', iconImg : 'img/editor-icons.png 0 -80' }, exts : ['md'], load : function(textarea) { var self = this, fm = this.fm, base = $(textarea).parent(), dfrd = $.Deferred(), cdn = fm.options.cdns.simplemde, start = function(SimpleMDE) { var h = base.height(), delta = base.outerHeight(true) - h + 14, editor, editorBase, opts; // fit height function textarea._setHeight = function(height) { var h = height || base.height(), ctrH = 0, areaH; base.children('.editor-toolbar,.editor-statusbar').each(function() { ctrH += $(this).outerHeight(true); }); areaH = h - ctrH - delta; editorBase.height(areaH); editor.codemirror.refresh(); return areaH; }; // set base height base.height(h); opts = { element: textarea, autofocus: true }; // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: SimpleMDE, instance: void(0), opts: opts }); // make editor editor = new SimpleMDE(opts); dfrd.resolve(editor); // editor base node editorBase = $(editor.codemirror.getWrapperElement()); // fit height to base editorBase.css('min-height', '50px') .children('.CodeMirror-scroll').css('min-height', '50px'); textarea._setHeight(h); }; // check SimpleMDE & start if (!self.confObj.loader) { self.confObj.loader = $.Deferred(); self.fm.loadCss(cdn+'/simplemde.min.css'); if (useRequire) { require([ cdn+'/simplemde.min.js' ], function(SimpleMDE) { self.confObj.loader.resolve(SimpleMDE); }); } else { self.fm.loadScript([cdn+'/simplemde.min.js'], function() { self.confObj.loader.resolve(SimpleMDE); }, {loadType: 'tag'}); } } self.confObj.loader.done(start); return dfrd; }, close : function(textarea, instance) { instance && instance.toTextArea(); instance = null; }, save : function(textarea, instance) { instance && (textarea.value = instance.value()); }, focus : function(textarea, instance) { instance && instance.codemirror.focus(); }, resize : function(textarea, instance, e, data) { instance && textarea._setHeight(); } }, { // CKEditor for html file info : { id : 'ckeditor', name : 'CKEditor', iconImg : 'img/editor-icons.png 0 0' }, exts : ['htm', 'html', 'xhtml'], setup : function(opts, fm) { var confObj = this; if (!fm.options.cdns.ckeditor) { confObj.disabled = true; } else { confObj.ckeOpts = {}; if (opts.extraOptions) { confObj.ckeOpts = Object.assign({}, opts.extraOptions.ckeditor || {}); if (opts.extraOptions.managerUrl) { confObj.managerUrl = opts.extraOptions.managerUrl; } } } }, load : function(textarea) { var self = this, fm = this.fm, dfrd = $.Deferred(), init = function() { var base = $(textarea).parent(), dlg = base.closest('.elfinder-dialog'), h = base.height(), reg = /([&?]getfile=)[^&]+/, loc = self.confObj.managerUrl || window.location.href.replace(/#.*$/, ''), name = 'ckeditor', opts; // make manager location if (reg.test(loc)) { loc = loc.replace(reg, '$1' + name); } else { loc += '?getfile=' + name; } // set base height base.height(h); // CKEditor configure options opts = { startupFocus : true, fullPage: true, allowedContent: true, filebrowserBrowseUrl : loc, toolbarCanCollapse: true, toolbarStartupExpanded: !fm.UA.Mobile, removePlugins: 'resize', extraPlugins: 'colorbutton,justify,docprops', on: { 'instanceReady' : function(e) { var editor = e.editor; editor.resize('100%', h); // re-build on dom move dlg.one('beforedommove.'+fm.namespace, function() { editor.destroy(); }).one('dommove.'+fm.namespace, function() { self.load(textarea).done(function(editor) { self.instance = editor; }); }); // return editor instance dfrd.resolve(e.editor); } } }; // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: CKEDITOR, instance: void(0), opts: opts }); // CKEditor configure CKEDITOR.replace(textarea.id, Object.assign(opts, self.confObj.ckeOpts)); CKEDITOR.on('dialogDefinition', function(e) { var dlg = e.data.definition.dialog; dlg.on('show', function(e) { fm.getUI().append($('.cke_dialog_background_cover')).append(this.getElement().$); }); dlg.on('hide', function(e) { $('body:first').append($('.cke_dialog_background_cover')).append(this.getElement().$); }); }); }; if (!self.confObj.loader) { self.confObj.loader = $.Deferred(); window.CKEDITOR_BASEPATH = fm.options.cdns.ckeditor + '/'; $.getScript(fm.options.cdns.ckeditor + '/ckeditor.js', function() { self.confObj.loader.resolve(); }); } self.confObj.loader.done(init); return dfrd; }, close : function(textarea, instance) { instance && instance.destroy(); }, save : function(textarea, instance) { instance && (textarea.value = instance.getData()); }, focus : function(textarea, instance) { instance && instance.focus(); }, resize : function(textarea, instance, e, data) { var self; if (instance) { if (instance.status === 'ready') { instance.resize('100%', $(textarea).parent().height()); } } } }, { // CKEditor5 balloon mode for html file info : { id : 'ckeditor5', name : 'CKEditor5', iconImg : 'img/editor-icons.png 0 -16' }, exts : ['htm', 'html', 'xhtml'], html : '
    ', setup : function(opts, fm) { var confObj = this; // check cdn and ES6 support if (!fm.options.cdns.ckeditor5 || typeof window.Symbol !== 'function' || typeof Symbol() !== 'symbol') { confObj.disabled = true; } else { confObj.ckeOpts = {}; if (opts.extraOptions) { // @deprecated option extraOptions.ckeditor5Mode if (opts.extraOptions.ckeditor5Mode) { confObj.ckeditor5Mode = opts.extraOptions.ckeditor5Mode; } confObj.ckeOpts = Object.assign({}, opts.extraOptions.ckeditor5 || {}); if (confObj.ckeOpts.mode) { confObj.ckeditor5Mode = confObj.ckeOpts.mode; delete confObj.ckeOpts.mode; } if (opts.extraOptions.managerUrl) { confObj.managerUrl = opts.extraOptions.managerUrl; } } } fm.bind('destroy', function() { confObj.editor = null; }); }, // Prepare on before show dialog prepare : function(base, dialogOpts, file) { $(base).height(base.editor.fm.getUI().height() - 100); }, init : function(id, file, data, fm) { var m = data.match(/^([\s\S]*]*>)([\s\S]+)(<\/body>[\s\S]*)$/i), header = '', body = '', footer =''; this.css({ width: '100%', height: '100%', 'box-sizing': 'border-box' }); if (m) { header = m[1]; body = m[2]; footer = m[3]; } else { body = data; } this.data('data', { header: header, body: body, footer: footer }); this._setupSelEncoding(data); }, load : function(editnode) { var self = this, fm = this.fm, dfrd = $.Deferred(), mode = self.confObj.ckeditor5Mode || 'decoupled-document', lang = (function() { var l = fm.lang.toLowerCase().replace('_', '-'); if (l.substr(0, 2) === 'zh' && l !== 'zh-cn') { l = 'zh'; } return l; })(), init = function(cEditor) { var base = $(editnode).parent(), opts; // set base height base.height(fm.getUI().height() - 100); // CKEditor5 configure options opts = Object.assign({ toolbar: ["heading", "|", "fontSize", "fontFamily", "|", "bold", "italic", "underline", "strikethrough", "highlight", "|", "alignment", "|", "numberedList", "bulletedList", "blockQuote", "indent", "outdent", "|", "ckfinder", "link", "imageUpload", "insertTable", "mediaEmbed", "|", "undo", "redo"], language: lang }, self.confObj.ckeOpts); // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: editnode, editorObj: cEditor, instance: void(0), opts: opts }); cEditor .create(editnode, opts) .then(function(editor) { var ckf = editor.commands.get('ckfinder'), fileRepo = editor.plugins.get('FileRepository'), prevVars = {}, isImage, insertImages; if (editor.ui.view.toolbar && (mode === 'classic' || mode === 'decoupled-document')) { $(editnode).closest('.elfinder-dialog').children('.ui-widget-header').append($(editor.ui.view.toolbar.element).css({marginRight:'-1em',marginLeft:'-1em'})); } if (mode === 'classic') { $(editnode).closest('.elfinder-edit-editor').css('overflow', 'auto'); } // Set up this elFinder instead of CKFinder if (ckf) { isImage = function(f) { return f && f.mime.match(/^image\//i); }; insertImages = function(urls) { var imgCmd = editor.commands.get('imageUpload'); if (!imgCmd.isEnabled) { var ntf = editor.plugins.get('Notification'), i18 = editor.locale.t; ntf.showWarning(i18('Could not insert image at the current position.'), { title: i18('Inserting image failed'), namespace: 'ckfinder' }); return; } editor.execute('imageInsert', { source: urls }); }; // Take over ckfinder execute() ckf.execute = function() { var dlg = base.closest('.elfinder-dialog'), gf = fm.getCommand('getfile'), rever = function() { if (prevVars.hasVar) { dlg.off('resize close', rever); gf.callback = prevVars.callback; gf.options.folders = prevVars.folders; gf.options.multiple = prevVars.multi; fm.commandMap.open = prevVars.open; prevVars.hasVar = false; } }; dlg.trigger('togleminimize').one('resize close', rever); prevVars.callback = gf.callback; prevVars.folders = gf.options.folders; prevVars.multi = gf.options.multiple; prevVars.open = fm.commandMap.open; prevVars.hasVar = true; gf.callback = function(files) { var imgs = []; if (files.length === 1 && files[0].mime === 'directory') { fm.one('open', function() { fm.commandMap.open = 'getfile'; }).getCommand('open').exec(files[0].hash); return; } fm.getUI('cwd').trigger('unselectall'); $.each(files, function(i, f) { if (isImage(f)) { imgs.push(fm.convAbsUrl(f.url)); } else { editor.execute('link', fm.convAbsUrl(f.url)); } }); if (imgs.length) { insertImages(imgs); } dlg.trigger('togleminimize'); }; gf.options.folders = true; gf.options.multiple = true; fm.commandMap.open = 'getfile'; fm.toast({ mode: 'info', msg: fm.i18n('dblclickToSelect') }); }; } // Set up image uploader fileRepo.createUploadAdapter = function(loader) { return new uploder(loader); }; editor.setData($(editnode).data('data').body); // move .ck-body to elFinder node for fullscreen mode fm.getUI().append($('body > div.ck-body')); $('div.ck-balloon-panel').css({ 'z-index': fm.getMaximizeCss().zIndex + 1 }); dfrd.resolve(editor); /*fm.log({ defaultConfig: cEditor.defaultConfig, plugins: cEditor.builtinPlugins.map(function(p) { return p.pluginName; }), toolbars: Array.from(editor.ui.componentFactory.names()) });*/ }) ['catch'](function(error) { // ['cache'] instead .cache for fix error on ie8 fm.error(error); }); }, uploder = function(loader) { var upload = function(file, resolve, reject) { fm.exec('upload', {files: [file]}, void(0), fm.cwd().hash) .done(function(data){ if (data.added && data.added.length) { fm.url(data.added[0].hash, { async: true }).done(function(url) { resolve({ 'default': fm.convAbsUrl(url) }); }).fail(function() { reject('errFileNotFound'); }); } else { reject(fm.i18n(data.error? data.error : 'errUpload')); } }) .fail(function(err) { var error = fm.parseError(err); reject(fm.i18n(error? (error === 'userabort'? 'errAbort' : error) : 'errUploadNoFiles')); }) .progress(function(data) { loader.uploadTotal = data.total; loader.uploaded = data.progress; }); }; this.upload = function() { return new Promise(function(resolve, reject) { if (loader.file instanceof Promise || (loader.file && typeof loader.file.then === 'function')) { loader.file.then(function(file) { upload(file, resolve, reject); }); } else { upload(loader.file, resolve, reject); } }); }; this.abort = function() { fm.getUI().trigger('uploadabort'); }; }, loader; if (!self.confObj.editor) { loader = $.Deferred(); self.fm.loadScript([ fm.options.cdns.ckeditor5 + '/' + mode + '/ckeditor.js' ], function(editor) { if (!editor) { editor = window.BalloonEditor || window.InlineEditor || window.ClassicEditor || window.DecoupledEditor; } if (fm.lang !== 'en') { self.fm.loadScript([ fm.options.cdns.ckeditor5 + '/' + mode + '/translations/' + lang + '.js' ], function(obj) { loader.resolve(editor); }, { tryRequire: true, loadType: 'tag', error: function(obj) { lang = 'en'; loader.resolve(editor); } }); } else { loader.resolve(editor); } }, { tryRequire: true, loadType: 'tag' }); loader.done(function(editor) { self.confObj.editor = editor; init(editor); }); } else { init(self.confObj.editor); } return dfrd; }, getContent : function() { var data = $(this).data('data'); return data.header + data.body + data.footer; }, close : function(editnode, instance) { instance && instance.destroy(); }, save : function(editnode, instance) { var elm = $(editnode), data = elm.data('data'); if (instance) { data.body = instance.getData(); elm.data('data', data); } }, focus : function(editnode, instance) { $(editnode).trigger('focus'); } }, { // TinyMCE for html file info : { id : 'tinymce', name : 'TinyMCE', iconImg : 'img/editor-icons.png 0 -64' }, exts : ['htm', 'html', 'xhtml'], setup : function(opts, fm) { var confObj = this; if (!fm.options.cdns.tinymce) { confObj.disabled = true; } else { confObj.mceOpts = {}; if (opts.extraOptions) { confObj.uploadOpts = Object.assign({}, opts.extraOptions.uploadOpts || {}); confObj.mceOpts = Object.assign({}, opts.extraOptions.tinymce || {}); } else { confObj.uploadOpts = {}; } } }, load : function(textarea) { var self = this, fm = this.fm, dfrd = $.Deferred(), init = function() { var base = $(textarea).show().parent(), dlg = base.closest('.elfinder-dialog'), h = base.height(), delta = base.outerHeight(true) - h, // hide MCE dialog and modal block hideMceDlg = function() { var mceW; if (tinymce.activeEditor.windowManager.windows) { mceW = tinymce.activeEditor.windowManager.windows[0]; mceDlg = $(mceW? mceW.getEl() : void(0)).hide(); mceCv = $('#mce-modal-block').hide(); } else { mceDlg = $('.tox-dialog-wrap').hide(); } }, // Show MCE dialog and modal block showMceDlg = function() { mceCv && mceCv.show(); mceDlg && mceDlg.show(); }, tVer = tinymce.majorVersion, opts, mceDlg, mceCv; // set base height base.height(h); // fit height function textarea._setHeight = function(height) { if (tVer < 5) { var base = $(this).parent(), h = height || base.innerHeight(), ctrH = 0, areaH; base.find('.mce-container-body:first').children('.mce-top-part,.mce-statusbar').each(function() { ctrH += $(this).outerHeight(true); }); areaH = h - ctrH - delta; base.find('.mce-edit-area iframe:first').height(areaH); } }; // TinyMCE configure options opts = { selector: '#' + textarea.id, resize: false, plugins: 'print preview fullpage searchreplace autolink directionality visualblocks visualchars fullscreen image link media template codesample table charmap hr pagebreak nonbreaking anchor toc insertdatetime advlist lists wordcount imagetools textpattern help', toolbar: 'formatselect | bold italic strikethrough forecolor backcolor | link image media | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat', image_advtab: true, init_instance_callback : function(editor) { // fit height on init textarea._setHeight(h); // re-build on dom move dlg.one('beforedommove.'+fm.namespace, function() { tinymce.execCommand('mceRemoveEditor', false, textarea.id); }).one('dommove.'+fm.namespace, function() { self.load(textarea).done(function(editor) { self.instance = editor; }); }); // return editor instance dfrd.resolve(editor); }, file_picker_callback : function (callback, value, meta) { var gf = fm.getCommand('getfile'), revar = function() { if (prevVars.hasVar) { gf.callback = prevVars.callback; gf.options.folders = prevVars.folders; gf.options.multiple = prevVars.multi; fm.commandMap.open = prevVars.open; prevVars.hasVar = false; } dlg.off('resize close', revar); showMceDlg(); }, prevVars = {}; prevVars.callback = gf.callback; prevVars.folders = gf.options.folders; prevVars.multi = gf.options.multiple; prevVars.open = fm.commandMap.open; prevVars.hasVar = true; gf.callback = function(file) { var url, info; if (file.mime === 'directory') { fm.one('open', function() { fm.commandMap.open = 'getfile'; }).getCommand('open').exec(file.hash); return; } // URL normalization url = fm.convAbsUrl(file.url); // Make file info info = file.name + ' (' + fm.formatSize(file.size) + ')'; // Provide file and text for the link dialog if (meta.filetype == 'file') { callback(url, {text: info, title: info}); } // Provide image and alt text for the image dialog if (meta.filetype == 'image') { callback(url, {alt: info}); } // Provide alternative source and posted for the media dialog if (meta.filetype == 'media') { callback(url); } dlg.trigger('togleminimize'); }; gf.options.folders = true; gf.options.multiple = false; fm.commandMap.open = 'getfile'; hideMceDlg(); dlg.trigger('togleminimize').one('resize close', revar); fm.toast({ mode: 'info', msg: fm.i18n('dblclickToSelect') }); return false; }, images_upload_handler : function (blobInfo, success, failure) { var file = blobInfo.blob(), err = function(e) { var dlg = e.data.dialog || {}; if (dlg.hasClass('elfinder-dialog-error') || dlg.hasClass('elfinder-confirm-upload')) { hideMceDlg(); dlg.trigger('togleminimize').one('resize close', revert); fm.unbind('dialogopened', err); } }, revert = function() { dlg.off('resize close', revert); showMceDlg(); }, clipdata = true; // check file object if (file.name) { // file blob of client side file object clipdata = void(0); } fm.bind('dialogopened', err).exec('upload', Object.assign({ files: [file], clipdata: clipdata // to get unique name on connector }, self.confObj.uploadOpts), void(0), fm.cwd().hash).done(function(data) { if (data.added && data.added.length) { fm.url(data.added[0].hash, { async: true }).done(function(url) { showMceDlg(); success(fm.convAbsUrl(url)); }).fail(function() { failure(fm.i18n('errFileNotFound')); }); } else { failure(fm.i18n(data.error? data.error : 'errUpload')); } }).fail(function(err) { var error = fm.parseError(err); if (error) { if (error === 'errUnknownCmd') { error = 'errPerm'; } else if (error === 'userabort') { error = 'errAbort'; } } failure(fm.i18n(error? error : 'errUploadNoFiles')); }); } }; // TinyMCE 5 supports "height: 100%" if (tVer >= 5) { opts.height = '100%'; } // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: tinymce, instance: void(0), opts: opts }); // TinyMCE configure tinymce.init(Object.assign(opts, self.confObj.mceOpts)); }; if (!self.confObj.loader) { self.confObj.loader = $.Deferred(); self.fm.loadScript([fm.options.cdns.tinymce + (fm.options.cdns.tinymce.match(/\.js/)? '' : '/tinymce.min.js')], function() { self.confObj.loader.resolve(); }, { loadType: 'tag' }); } self.confObj.loader.done(init); return dfrd; }, close : function(textarea, instance) { instance && tinymce.execCommand('mceRemoveEditor', false, textarea.id); }, save : function(textarea, instance) { instance && instance.save(); }, focus : function(textarea, instance) { instance && instance.focus(); }, resize : function(textarea, instance, e, data) { // fit height to base node on dialog resize instance && textarea._setHeight(); } }, { info : { id : 'zohoeditor', name : 'Zoho Editor', iconImg : 'img/editor-icons.png 0 -32', cmdCheck : 'ZohoOffice', preventGet: true, hideButtons: true, syncInterval : 15000, canMakeEmpty: true, integrate: { title: 'Zoho Office API', link: 'https://www.zoho.com/officeapi/' } }, mimes : [ 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', //'application/pdf', 'application/vnd.oasis.opendocument.text', 'application/rtf', 'text/html', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.sun.xml.calc', 'text/csv', 'text/tab-separated-values', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', 'application/vnd.oasis.opendocument.presentation', 'application/vnd.sun.xml.impress' ], html : '', // setup on elFinder bootup setup : function(opts, fm) { if (fm.UA.Mobile || fm.UA.ltIE8) { this.disabled = true; } }, // Prepare on before show dialog prepare : function(base, dialogOpts, file) { var elfNode = base.editor.fm.getUI(); $(base).height(elfNode.height()); dialogOpts.width = Math.max(dialogOpts.width || 0, elfNode.width() * 0.8); }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, dum, fm) { var ta = this, ifm = $(this).hide(), uiToast = fm.getUI('toast'), spnr = $('
    ') .html('' + fm.i18n('nowLoading') + '') .appendTo(ifm.parent()), cdata = function() { var data = ''; $.each(fm.customData, function(key, val) { data += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(val); }); return data; }; $(ta).data('xhr', fm.request({ data: { cmd: 'editor', name: ta.editor.confObj.info.cmdCheck, method: 'init', 'args[target]': file.hash, 'args[lang]' : fm.lang, 'args[cdata]' : cdata() }, preventDefault : true }).done(function(data) { var opts; if (data.zohourl) { opts = { css: { height: '100%' } }; // trigger event 'editEditorPrepare' ta.editor.trigger('Prepare', { node: ta, editorObj: void(0), instance: ifm, opts: opts }); ifm.attr('src', data.zohourl).show().css(opts.css); if (data.warning) { uiToast.appendTo(ta.closest('.ui-dialog')); fm.toast({ msg: fm.i18n(data.warning), mode: 'warning', timeOut: 0, onHidden: function() { uiToast.children().length === 1 && uiToast.appendTo(fm.getUI()); }, button: { text: 'btnYes' } }); } } else { data.error && fm.error(data.error); ta.elfinderdialog('destroy'); } }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); }).always(function() { spnr.remove(); })); }, load : function() {}, getContent : function() {}, save : function() {}, // Before dialog close beforeclose : iframeClose, // On dialog closed close : function(ta) { var fm = this.fm, xhr = $(ta).data('xhr'); if (xhr.state() === 'pending') { xhr.reject(); } } }, { // Zip Archive with FlySystem info : { id : 'ziparchive', name : 'btnMount', iconImg : 'img/toolbar.png 0 -416', cmdCheck : 'ZipArchive', edit : function(file, editor) { var fm = this, dfrd = $.Deferred(); fm.request({ data:{ cmd: 'netmount', protocol: 'ziparchive', host: file.hash, path: file.phash }, preventFail: true, notify : {type : 'netmount', cnt : 1, hideCnt : true} }).done(function(data) { var pdir; if (data.added && data.added.length) { if (data.added[0].phash) { if (pdir = fm.file(data.added[0].phash)) { if (! pdir.dirs) { pdir.dirs = 1; fm.change({ changed: [ pdir ] }); } } } fm.one('netmountdone', function() { fm.exec('open', data.added[0].hash); fm.one('opendone', function() { data.toast && fm.toast(data.toast); }); }); } dfrd.resolve(); }) .fail(function(error) { dfrd.reject(error); }); return dfrd; } }, mimes : ['application/zip'], load : function() {}, save : function(){} }, { // Simple Text (basic textarea editor) info : { id : 'textarea', name : 'TextArea', useTextAreaEvent : true }, load : function(textarea) { // trigger event 'editEditorPrepare' this.trigger('Prepare', { node: textarea, editorObj: void(0), instance: void(0), opts: {} }); textarea.setSelectionRange && textarea.setSelectionRange(0, 0); $(textarea).trigger('focus').show(); }, save : function(){} }, { // File converter with online-convert.com info : { id : 'onlineconvert', name : 'Online Convert', iconImg : 'img/editor-icons.png 0 -144', cmdCheck : 'OnlineConvert', preventGet: true, hideButtons: true, single: true, converter: true, canMakeEmpty: false, integrate: { title: 'ONLINE-CONVERT.COM', link: 'https://online-convert.com' } }, mimes : ['*'], html : '
    ', // setup on elFinder bootup setup : function(opts, fm) { var mOpts = opts.extraOptions.onlineConvert || {maxSize:100,showLink:true}; if (mOpts.maxSize) { this.info.maxSize = mOpts.maxSize * 1048576; } this.set = Object.assign({ url : 'https://%s.online-convert.com%s?external_url=', conv : { Archive: {'7Z':{}, 'BZ2':{ext:'bz'}, 'GZ':{}, 'ZIP':{}}, Audio: {'MP3':{}, 'OGG':{ext:'oga'}, 'WAV':{}, 'WMA':{}, 'AAC':{}, 'AIFF':{ext:'aif'}, 'FLAC':{}, 'M4A':{}, 'MMF':{}, 'OPUS':{ext:'oga'}}, Document: {'DOC':{}, 'DOCX':{}, 'HTML':{}, 'ODT':{}, 'PDF':{}, 'PPT':{}, 'PPTX':{}, 'RTF':{}, 'SWF':{}, 'TXT':{}}, eBook: {'AZW3':{ext:'azw'}, 'ePub':{}, 'FB2':{ext:'xml'}, 'LIT':{}, 'LRF':{}, 'MOBI':{}, 'PDB':{}, 'PDF':{},'PDF-eBook':{ext:'pdf'}, 'TCR':{}}, Hash: {'Adler32':{}, 'Apache-htpasswd':{}, 'Blowfish':{}, 'CRC32':{}, 'CRC32B':{}, 'Gost':{}, 'Haval128':{},'MD4':{}, 'MD5':{}, 'RIPEMD128':{}, 'RIPEMD160':{}, 'SHA1':{}, 'SHA256':{}, 'SHA384':{}, 'SHA512':{}, 'Snefru':{}, 'Std-DES':{}, 'Tiger128':{}, 'Tiger128-calculator':{}, 'Tiger128-converter':{}, 'Tiger160':{}, 'Tiger192':{}, 'Whirlpool':{}}, Image: {'BMP':{}, 'EPS':{ext:'ai'}, 'GIF':{}, 'EXR':{}, 'ICO':{}, 'JPG':{}, 'PNG':{}, 'SVG':{}, 'TGA':{}, 'TIFF':{ext:'tif'}, 'WBMP':{}, 'WebP':{}}, Video: {'3G2':{}, '3GP':{}, 'AVI':{}, 'FLV':{}, 'HLS':{ext:'m3u8'}, 'MKV':{}, 'MOV':{}, 'MP4':{}, 'MPEG-1':{ext:'mpeg'}, 'MPEG-2':{ext:'mpeg'}, 'OGG':{ext:'ogv'}, 'OGV':{}, 'WebM':{}, 'WMV':{}, 'Android':{link:'/convert-video-for-%s',ext:'mp4'}, 'Blackberry':{link:'/convert-video-for-%s',ext:'mp4'}, 'DPG':{link:'/convert-video-for-%s',ext:'avi'}, 'iPad':{link:'/convert-video-for-%s',ext:'mp4'}, 'iPhone':{link:'/convert-video-for-%s',ext:'mp4'}, 'iPod':{link:'/convert-video-for-%s',ext:'mp4'}, 'Nintendo-3DS':{link:'/convert-video-for-%s',ext:'avi'}, 'Nintendo-DS':{link:'/convert-video-for-%s',ext:'avi'}, 'PS3':{link:'/convert-video-for-%s',ext:'mp4'}, 'Wii':{link:'/convert-video-for-%s',ext:'avi'}, 'Xbox':{link:'/convert-video-for-%s',ext:'wmv'}} }, catExts : { Hash: 'txt' }, link : '', useTabs : ($.fn.tabs && !fm.UA.iOS)? true : false // Can't work on iOS, I don't know why. }, mOpts); }, // Prepare on before show dialog prepare : function(base, dialogOpts, file) { var elfNode = base.editor.fm.getUI(); $(base).height(elfNode.height()); dialogOpts.width = Math.max(dialogOpts.width || 0, elfNode.width() * 0.8); }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, dum, fm) { var ta = this, confObj = ta.editor.confObj, set = confObj.set, uiToast = fm.getUI('toast'), idxs = {}, allowZip = fm.uploadMimeCheck('application/zip', file.phash), selfUrl = $('base').length? document.location.href.replace(/#.*$/, '') : '', getExt = function(cat, con) { var c; if (set.catExts[cat]) { return set.catExts[cat]; } if (set.conv[cat] && (c = set.conv[cat][con])) { return (c.ext || con).toLowerCase(); } return con.toLowerCase(); }, setOptions = function(cat, done) { var type, dfdInit, dfd; if (typeof confObj.api === 'undefined') { dfdInit = fm.request({ data: { cmd: 'editor', name: 'OnlineConvert', method: 'init' }, preventDefault : true }); } else { dfdInit = $.Deferred().resolve({api: confObj.api}); } cat = cat.toLowerCase(); dfdInit.done(function(data) { confObj.api = data.api; if (confObj.api) { if (cat) { type = '?category=' + cat; } else { type = ''; cat = 'all'; } if (!confObj.conversions) { confObj.conversions = {}; } if (!confObj.conversions[cat]) { dfd = $.getJSON('https://api2.online-convert.com/conversions' + type); } else { dfd = $.Deferred().resolve(confObj.conversions[cat]); } dfd.done(function(d) { confObj.conversions[cat] = d; $.each(d, function(i, o) { btns[set.useTabs? 'children' : 'find']('.onlineconvert-category-' + o.category).children('.onlineconvert-' + o.target).trigger('makeoption', o); }); done && done(); }); } }); }, btns = (function() { var btns = $('
    ').on('click', 'button', function() { var b = $(this), opts = b.data('opts') || null, cat = b.closest('.onlineconvert-category').data('cname'), con = b.data('conv'); if (confObj.api === true) { api({ category: cat, convert: con, options: opts }); } }).on('change', function(e) { var t = $(e.target), p = t.parent(), b = t.closest('.elfinder-edit-onlineconvert-button').children('button:first'), o = b.data('opts') || {}, v = p.data('type') === 'boolean'? t.is(':checked') : t.val(); e.stopPropagation(); if (v) { if (p.data('type') === 'integer') { v = parseInt(v); } if (p.data('pattern')) { var reg = new RegExp(p.data('pattern')); if (!reg.test(v)) { requestAnimationFrame(function() { fm.error('"' + fm.escape(v) + '" is not match to "/' + fm.escape(p.data('pattern')) + '/"'); }); v = null; } } } if (v) { o[t.parent().data('optkey')] = v; } else { delete o[p.data('optkey')]; } b.data('opts', o); }), ul = $('
      '), oform = function(n, o) { var f = $('

      ').data('optkey', n).data('type', o.type), checked = '', disabled = '', nozip = false, opts, btn, elm; if (o.description) { f.attr('title', fm.i18n(o.description)); } if (o.pattern) { f.data('pattern', o.pattern); } f.append($('').text(fm.i18n(n) + ' : ')); if (o.type === 'boolean') { if (o['default'] || (nozip = (n === 'allow_multiple_outputs' && !allowZip))) { checked = ' checked'; if (nozip) { disabled = ' disabled'; } btn = this.children('button:first'); opts = btn.data('opts') || {}; opts[n] = true; btn.data('opts', opts); } f.append($('')); } else if (o['enum']){ elm = $('').append($('').text('Select...')); $.each(o['enum'], function(i, v) { elm.append($('').text(v)); }); f.append(elm); } else { f.append($('')); } return f; }, makeOption = function(o) { var elm = this, b = $('').on('click', function() { f.toggle(); }), f = $('
      ').hide(); if (o.options) { $.each(o.options, function(k, v) { k !== 'download_password' && f.append(oform.call(elm, k, v)); }); } elm.append(b, f); }, ts = (+new Date()), i = 0; if (!confObj.ext2mime) { confObj.ext2mime = Object.assign(fm.arrayFlip(fm.mimeTypes), ext2mime); } $.each(set.conv, function(t, c) { var cname = t.toLowerCase(), id = 'elfinder-edit-onlineconvert-' + cname + ts, type = $('
      ').data('cname', t), cext; $.each(c, function(n, o) { var nl = n.toLowerCase(), ext = getExt(t, n); if (!confObj.ext2mime[ext]) { if (cname === 'audio' || cname === 'image' || cname === 'video') { confObj.ext2mime[ext] = cname + '/x-' + nl; } else { confObj.ext2mime[ext] = 'application/octet-stream'; } } if (fm.uploadMimeCheck(confObj.ext2mime[ext], file.phash)) { type.append($('
      ').on('makeoption', function(e, data) { var elm = $(this); if (!elm.children('.elfinder-button-icon-preference').length) { makeOption.call(elm, data); } }).append($('').text(n).data('conv', n))); } }); if (type.children().length) { ul.append($('
    • ').append($('').attr('href', selfUrl + '#' + id).text(t))); btns.append(type); idxs[cname] = i++; } }); if (set.useTabs) { btns.prepend(ul).tabs({ beforeActivate: function(e, ui) { setOptions(ui.newPanel.data('cname')); } }); } else { $.each(set.conv, function(t) { var tl = t.toLowerCase(); btns.append($('
      ').append($('').text(t)).append(btns.children('.onlineconvert-category-' + tl))); }); } return btns; })(), select = $(this) .append( btns, (set.showLink? $(set.link) : null) ), spnr = $('
      ') .hide() .html('' + fm.i18n('nowLoading') + '') .appendTo(select.parent()), prog = $('
      ').appendTo(spnr), _url = null, url = function() { var onetime; if (_url) { return $.Deferred().resolve(_url); } else { spnr.show(); return fm.forExternalUrl(file.hash, { progressBar: prog }).done(function(url) { _url = url; }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); }).always(function() { spnr.hide(); }); } }, api = function(opts) { $(ta).data('dfrd', url().done(function(url) { select.fadeOut(); setStatus({info: 'Start conversion request.'}); fm.request({ data: { cmd: 'editor', name: 'OnlineConvert', method: 'api', 'args[category]' : opts.category.toLowerCase(), 'args[convert]' : opts.convert.toLowerCase(), 'args[options]' : JSON.stringify(opts.options), 'args[source]' : fm.convAbsUrl(url), 'args[filename]' : fm.splitFileExtention(file.name)[0] + '.' + getExt(opts.category, opts.convert), 'args[mime]' : file.mime }, preventDefault : true }).done(function(data) { checkRes(data.apires, opts.category, opts.convert); }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); }); })); }, checkRes = function(res, cat, con) { var status, err = []; if (res && res.id) { status = res.status; if (status.code === 'failed') { spnr.hide(); if (res.errors && res.errors.length) { $.each(res.errors, function(i, o) { o.message && err.push(o.message); }); } fm.error(err.length? err : status.info); select.fadeIn(); } else if (status.code === 'completed') { upload(res); } else { setStatus(status); setTimeout(function() { polling(res.id); }, 1000); } } else { uiToast.appendTo(ta.closest('.ui-dialog')); if (res.message) { fm.toast({ msg: fm.i18n(res.message), mode: 'error', timeOut: 5000, onHidden: function() { uiToast.children().length === 1 && uiToast.appendTo(fm.getUI()); } }); } fm.toast({ msg: fm.i18n('editorConvNoApi'), mode: 'error', timeOut: 3000, onHidden: function() { uiToast.children().length === 1 && uiToast.appendTo(fm.getUI()); } }); spnr.hide(); select.show(); } }, setStatus = function(status) { spnr.show().children('.elfinder-spinner-text').text(status.info); }, polling = function(jobid) { fm.request({ data: { cmd: 'editor', name: 'OnlineConvert', method: 'api', 'args[jobid]': jobid }, preventDefault : true }).done(function(data) { checkRes(data.apires); }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); }); }, upload = function(res) { var output = res.output, id = res.id, url = ''; spnr.hide(); if (output && output.length) { ta.elfinderdialog('destroy'); $.each(output, function(i, o) { if (o.uri) { url += o.uri + '\n'; } }); fm.upload({ target: file.phash, files: [url], type: 'text', extraData: { contentSaveId: 'OnlineConvert-' + res.id } }); } }, mode = 'document', cl, m; select.parent().css({overflow: 'auto'}).addClass('overflow-scrolling-touch'); if (m = file.mime.match(/^(audio|image|video)/)) { mode = m[1]; } if (set.useTabs) { if (idxs[mode]) { btns.tabs('option', 'active', idxs[mode]); } } else { cl = Object.keys(set.conv).length; $.each(set.conv, function(t) { if (t.toLowerCase() === mode) { setOptions(t, function() { $.each(set.conv, function(t0) { t0.toLowerCase() !== mode && setOptions(t0); }); }); return false; } cl--; }); if (!cl) { $.each(set.conv, function(t) { setOptions(t); }); } select.parent().scrollTop(btns.children('.onlineconvert-fieldset-' + mode).offset().top); } }, load : function() {}, getContent : function() {}, save : function() {}, // On dialog closed close : function(ta) { var fm = this.fm, dfrd = $(ta).data('dfrd'); if (dfrd && dfrd.state() === 'pending') { dfrd.reject(); } } } ]; }, window.elFinder)); application/library/js/elFinder.options.js000064400000115742146731177160014736 0ustar00/** * Default elFinder config * * @type Object * @autor Dmitry (dio) Levashov */ elFinder.prototype._options = { /** * URLs of 3rd party libraries CDN * * @type Object */ cdns : { // for editor etc. ace : 'https://cdnjs.cloudflare.com/ajax/libs/ace/1.22.0', codemirror : 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7', ckeditor : 'https://cdnjs.cloudflare.com/ajax/libs/ckeditor/4.21.0', ckeditor5 : 'https://cdn.ckeditor.com/ckeditor5/38.0.1', tinymce : 'https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.4.2', simplemde : 'https://cdnjs.cloudflare.com/ajax/libs/simplemde/1.11.2', fabric : 'https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.3.1', fabric16 : 'https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.7', tui : 'https://uicdn.toast.com', // for quicklook etc. hls : 'https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.4.4/hls.min.js', dash : 'https://cdnjs.cloudflare.com/ajax/libs/dashjs/4.7.0/dash.all.min.js', flv : 'https://cdnjs.cloudflare.com/ajax/libs/flv.js/1.6.2/flv.min.js', videojs : 'https://cdnjs.cloudflare.com/ajax/libs/video.js/8.3.0', prettify : 'https://cdn.jsdelivr.net/gh/google/code-prettify@e006587b4a893f0281e9dc9a53001c7ed584d4e7/loader/run_prettify.js', psd : 'https://cdnjs.cloudflare.com/ajax/libs/psd.js/3.4.0/psd.min.js', rar : 'https://cdn.jsdelivr.net/gh/nao-pon/rar.js@6cef13ec66dd67992fc7f3ea22f132d770ebaf8b/rar.min.js', zlibUnzip : 'https://cdn.jsdelivr.net/gh/imaya/zlib.js@0.3.1/bin/unzip.min.js', // need check unzipFiles() in quicklook.plugins.js when update zlibGunzip : 'https://cdn.jsdelivr.net/gh/imaya/zlib.js@0.3.1/bin/gunzip.min.js', bzip2 : 'https://cdn.jsdelivr.net/gh/nao-pon/bzip2.js@0.8.0/bzip2.js', marked : 'https://cdnjs.cloudflare.com/ajax/libs/marked/5.0.4/marked.min.js', sparkmd5 : 'https://cdnjs.cloudflare.com/ajax/libs/spark-md5/3.0.2/spark-md5.min.js', jssha : 'https://cdnjs.cloudflare.com/ajax/libs/jsSHA/3.3.0/sha.min.js', amr : 'https://cdn.jsdelivr.net/gh/yxl/opencore-amr-js@dcf3d2b5f384a1d9ded2a54e4c137a81747b222b/js/amrnb.js', tiff : 'https://cdn.jsdelivr.net/gh/seikichi/tiff.js@545ede3ee46b5a5bc5f06d65954e775aa2a64017/tiff.min.js' }, /** * Connector url. Required! * * @type String */ url : '', /** * Ajax request type. * * @type String * @default "get" */ requestType : 'get', /** * Use CORS to connector url * * @type Boolean|null true|false|null(Auto detect) */ cors : null, /** * Array of header names to return parrot out in HTTP headers received from the server * * @type Array */ parrotHeaders : [], /** * Maximum number of concurrent connections on request * * @type Number * @default 3 */ requestMaxConn : 3, /** * Transport to send request to backend. * Required for future extensions using websockets/webdav etc. * Must be an object with "send" method. * transport.send must return $.Deferred() object * * @type Object * @default null * @example * transport : { * init : function(elfinderInstance) { }, * send : function(options) { * var dfrd = $.Deferred(); * // connect to backend ... * return dfrd; * }, * upload : function(data) { * var dfrd = $.Deferred(); * // upload ... * return dfrd; * } * * } **/ transport : {}, /** * URL to upload file to. * If not set - connector URL will be used * * @type String * @default '' */ urlUpload : '', /** * Allow to drag and drop to upload files * * @type Boolean|String * @default 'auto' */ dragUploadAllow : 'auto', /** * Confirmation dialog displayed at the time of overwriting upload * * @type Boolean * @default true */ overwriteUploadConfirm : true, /** * Max size of chunked data of file upload * * @type Number * @default 10485760(10MB) */ uploadMaxChunkSize : 10485760, /** * Regular expression of file name to exclude when uploading folder * * @type Object * @default { win: /^(?:desktop\.ini|thumbs\.db)$/i, mac: /^\.ds_store$/i } */ folderUploadExclude : { win: /^(?:desktop\.ini|thumbs\.db)$/i, mac: /^\.ds_store$/i }, /** * Timeout for upload using iframe * * @type Number * @default 0 - no timeout */ iframeTimeout : 0, /** * Data to append to all requests and to upload files * * @type Object * @default {} */ customData : {}, /** * Event listeners to bind on elFinder init * * @type Object * @default {} */ handlers : {}, /** * Any custom headers to send across every ajax request * * @type Object * @default {} */ customHeaders : {}, /** * Any custom xhrFields to send across every ajax request * * @type Object * @default {} */ xhrFields : {}, /** * Interface language * * @type String * @default "en" */ lang : 'en', /** * Base URL of elfFinder library starting from Manager HTML * Auto detect when empty value * * @type String * @default "" */ baseUrl : '', /** * Base URL of i18n js files * baseUrl + "js/i18n/" when empty value * * @type String * @default "" */ i18nBaseUrl : '', /** * Base URL of worker js files * baseUrl + "js/worker/" when empty value * * @type String * @default "" */ workerBaseUrl : '', /** * Auto load required CSS * `false` to disable this function or * CSS URL Array to load additional CSS files * * @type Boolean|Array * @default true */ cssAutoLoad : true, /** * Theme to load * {"themeid" : "Theme CSS URL"} or * {"themeid" : "Theme manifesto.json URL"} or * Theme manifesto.json Object * { * "themeid" : { * "name":"Theme Name", * "cssurls":"Theme CSS URL", * "author":"Author Name", * "email":"Author Email", * "license":"License", * "link":"Web Site URL", * "image":"Screen Shot URL", * "description":"Description" * } * } * * @type Object */ themes : {}, /** * Theme id to initial theme * * @type String|Null */ theme : null, /** * Maximum value of error dialog open at the same time * * @type Number */ maxErrorDialogs : 5, /** * Additional css class for filemanager node. * * @type String */ cssClass : '', /** * Active commands list. '*' means all of the commands that have been load. * If some required commands will be missed here, elFinder will add its * * @type Array */ commands : ['*'], // Available commands list //commands : [ // 'archive', 'back', 'chmod', 'colwidth', 'copy', 'cut', 'download', 'duplicate', 'edit', 'extract', // 'forward', 'fullscreen', 'getfile', 'help', 'home', 'info', 'mkdir', 'mkfile', 'netmount', 'netunmount', // 'open', 'opendir', 'paste', 'places', 'quicklook', 'reload', 'rename', 'resize', 'restore', 'rm', // 'search', 'sort', 'up', 'upload', 'view', 'zipdl' //], /** * Commands options. * * @type Object **/ commandsOptions : { // // configure shortcuts of any command // // add `shortcuts` property into each command // any_command_name : { // shortcuts : [] // for disable this command's shortcuts // }, // any_command_name : { // shortcuts : function(fm, shortcuts) { // // for add `CTRL + E` for this command action // shortcuts[0]['pattern'] += ' ctrl+e'; // return shortcuts; // } // }, // any_command_name : { // shortcuts : function(fm, shortcuts) { // // for full customize of this command's shortcuts // return [ { pattern: 'ctrl+e ctrl+down numpad_enter' + (fm.OS != 'mac' && ' enter') } ]; // } // }, // "getfile" command options. getfile : { onlyURL : false, // allow to return multiple files info multiple : false, // allow to return filers info folders : false, // action after callback (""/"close"/"destroy") oncomplete : '', // action when callback is fail (""/"close"/"destroy") onerror : '', // get path before callback call getPath : true, // get image sizes before callback call getImgSize : false }, open : { // HTTP method that request to the connector when item URL is not valid URL. // If you set to "get" will be displayed request parameter in the browser's location field // so if you want to conceal its parameters should be given "post". // Nevertheless, please specify "get" if you want to enable the partial request by HTTP Range header. method : 'post', // Where to open into : 'window'(default), 'tab' or 'tabs' // 'tabs' opens in each tabs into : 'window', // Default command list of action when select file // String value that is 'Command Name' or 'Command Name1/CommandName2...' selectAction : 'open' }, opennew : { // URL of to open elFinder manager // Default '' : Origin URL url : '', // Use search query of origin URL useOriginQuery : true }, // "upload" command options. upload : { // Open elFinder upload dialog: 'button' OR Open system OS upload dialog: 'uploadbutton' ui : 'button' }, // "download" command options. download : { // max request to download files when zipdl disabled maxRequests : 10, // minimum count of files to use zipdl minFilesZipdl : 2 }, // "quicklook" command options. quicklook : { autoplay : true, width : 450, height : 300, // ControlsList of HTML5 audio/video preview // see https://googlechrome.github.io/samples/media/controlslist.html mediaControlsList : '', // e.g. 'nodownload nofullscreen noremoteplayback' // Show toolbar of PDF preview (with tag) pdfToolbar : true, // Maximum lines to preview at initial textInitialLines : 100, // Maximum lines to preview by prettify prettifyMaxLines : 300, // quicklook window must be contained in elFinder node on window open (true|false) contain : false, // preview window into NavDock (0 : undocked | 1 : docked(show) | 2 : docked(hide)) docked : 0, // Docked preview height ('auto' or Number of pixel) 'auto' is setted to the Navbar width dockHeight : 'auto', // media auto play when docked dockAutoplay : false, // Google Maps API key (Require Maps JavaScript API) googleMapsApiKey : '', // Google Maps API Options googleMapsOpts : { maps : {}, kml : { suppressInfoWindows : false, preserveViewport : false } }, // ViewerJS (https://viewerjs.org/) Options // To enable this you need to place ViewerJS on the same server as elFinder and specify that URL in `url`. viewerjs : { url: '', // Example '/ViewerJS/index.html' mimes: ['application/pdf', 'application/vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.presentation'], pdfNative: true // Use Native PDF Viewer first }, // MIME types to CAD-Files and 3D-Models online viewer on sharecad.org // Example ['image/vnd.dwg', 'image/vnd.dxf', 'model/vnd.dwf', 'application/vnd.hp-hpgl', 'application/plt', 'application/step', 'model/iges', 'application/vnd.ms-pki.stl', 'application/sat', 'image/cgm', 'application/x-msmetafile'] sharecadMimes : [], // MIME types to use Google Docs online viewer // Example ['application/pdf', 'image/tiff', 'application/vnd.ms-office', 'application/msword', 'application/vnd.ms-word', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/postscript', 'application/rtf'] googleDocsMimes : [], // MIME types to use Microsoft Office Online viewer // Example ['application/msword', 'application/vnd.ms-word', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.presentation'] // These MIME types override "googleDocsMimes" officeOnlineMimes : [], // File size threshold when using the dim command for obtain the image size necessary to image preview getDimThreshold : '200K', // Max filesize to show filenames of the zip/tar/gzip/bzip file unzipMaxSize : '50M', // MIME-Type regular expression that does not check empty files mimeRegexNotEmptyCheck : /^application\/vnd\.google-apps\./ }, // "edit" command options. edit : { // dialog width, integer(px) or integer+'%' (example: 650, '80%' ...) dialogWidth : void(0), // dialog height, integer(px) or integer+'%' (example: 650, '80%' ...) dialogHeight : void(0), // list of allowed mimetypes to edit of text files // if empty - any text files can be edited mimes : [], // MIME-types to unselected as default of "File types to enable with "New file"" in preferences mkfileHideMimes : [], // MIME-types of text file to make empty file makeTextMimes : ['text/plain', 'text/css', 'text/html'], // Use the editor stored in the browser // This value allowd overwrite with user preferences useStoredEditor : false, // Open the maximized editor window // This value allowd overwrite with user preferences editorMaximized : false, // edit files in wysisyg's editors : [ // { // /** // * editor info // * @type Object // */ // info : { name: 'Editor Name' }, // /** // * files mimetypes allowed to edit in current wysisyg // * @type Array // */ // mimes : ['text/html'], // /** // * HTML element for editing area (optional for text editor) // * @type String // */ // html : '', // /** // * Initialize editing area node (optional for text editor) // * // * @param String dialog DOM id // * @param Object target file object // * @param String target file content (text or Data URI Scheme(binary file)) // * @param Object elFinder instance // * @type Function // */ // init : function(id, file, content, fm) { // $(this).attr('id', id + '-text').val(content); // }, // /** // * Get edited contents (optional for text editor) // * @type Function // */ // getContent : function() { // return $(this).val(); // }, // /** // * Called when "edit" dialog loaded. // * Place to init wysisyg. // * Can return wysisyg instance // * // * @param DOMElement textarea node // * @return Object editor instance|jQuery.Deferred(return instance on resolve()) // */ // load : function(textarea) { }, // /** // * Called before "edit" dialog closed. // * Place to destroy wysisyg instance. // * // * @param DOMElement textarea node // * @param Object wysisyg instance (if was returned by "load" callback) // * @return void // */ // close : function(textarea, instance) { }, // /** // * Called before file content send to backend. // * Place to update textarea content if needed. // * // * @param DOMElement textarea node // * @param Object wysisyg instance (if was returned by "load" callback) // * @return void // */ // save : function(textarea, instance) {}, // /** // * Called after load() or save(). // * Set focus to wysisyg editor. // * // * @param DOMElement textarea node // * @param Object wysisyg instance (if was returned by "load" callback) // * @return void // */ // focus : function(textarea, instance) {} // /** // * Called after dialog resized.. // * // * @param DOMElement textarea node // * @param Object wysisyg instance (if was returned by "load" callback) // * @param Object resize event object // * @param Object data object // * @return void // */ // resize : function(textarea, instance, event, data) {} // // } ], // Character encodings of select box encodings : ['Big5', 'Big5-HKSCS', 'Cp437', 'Cp737', 'Cp775', 'Cp850', 'Cp852', 'Cp855', 'Cp857', 'Cp858', 'Cp862', 'Cp866', 'Cp874', 'EUC-CN', 'EUC-JP', 'EUC-KR', 'GB18030', 'ISO-2022-CN', 'ISO-2022-JP', 'ISO-2022-KR', 'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-13', 'ISO-8859-15', 'KOI8-R', 'KOI8-U', 'Shift-JIS', 'Windows-1250', 'Windows-1251', 'Windows-1252', 'Windows-1253', 'Windows-1254', 'Windows-1257'], // options for extra editors extraOptions : { // upload command options uploadOpts : {}, // TUI Image Editor's options tuiImgEditOpts : { // Path prefix of icon-a.svg, icon-b.svg, icon-c.svg and icon-d.svg in the Theme. // `iconsPath` MUST follow the same origin policy. iconsPath : void(0), // default is "./img/tui-" // Theme object theme : {} }, // Pixo image editor constructor options - https://pixoeditor.com/ // Require 'apikey' to enable it pixo: { apikey: '' }, // Browsing manager URL for CKEditor, TinyMCE // Uses self location with the empty value or not defined. //managerUrl : 'elfinder.html' managerUrl : null, // CKEditor editor options ckeditor: {}, // CKEditor 5 editor options ckeditor5: { // builds mode - 'classic', 'inline', 'balloon', 'balloon-block' or 'decoupled-document' mode: 'decoupled-document' }, // TinyMCE editor options tinymce : {}, // Setting for Online-Convert.com onlineConvert : { maxSize : 100, // (MB) Max 100MB on free account showLink : true // It must be enabled with free account } } }, fullscreen : { // fullscreen mode 'screen'(When the browser supports it) or 'window' mode: 'screen' // 'screen' or 'window' }, search : { // Incremental search from the current view incsearch : { enable : true, // is enable true or false minlen : 1, // minimum number of characters wait : 500 // wait milliseconds }, // Additional search types searchTypes : { // "SearchMime" is implemented in default SearchMime : { // The key is search type that send to the connector name : 'btnMime', // Button text to be processed in i18n() title : 'searchMime',// Button title to be processed in i18n() incsearch : 'mime' // Incremental search target filed name of the file object // Or Callable function /* incsearch function example function(queryObject, cwdHashes, elFinderInstance) { var q = queryObject.val; var regex = queryObject.regex; var matchedHashes = $.grep(cwdHashes, function(hash) { var file = elFinderInstance.file(hash); return (file && file.mime && file.mime.match(regex))? true : false; }); return matchedHashes; } */ } } }, // "info" command options. info : { // If the URL of the Directory is null, // it is assumed that the link destination is a URL to open the folder in elFinder nullUrlDirLinkSelf : true, // Information items to be hidden by default // These name are 'size', 'aliasfor', 'path', 'link', 'dim', 'modify', 'perms', 'locked', 'owner', 'group', 'perm' and your custom info items label hideItems : [], // Maximum file size (byte) to get file contents hash (md5, sha256 ...) showHashMaxsize : 104857600, // 100 MB // Array of hash algorisms to show on info dialog // These name are 'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', 'shake128' and 'shake256' showHashAlgorisms : ['md5', 'sha256'], // Options for fm.getContentsHashes() showHashOpts : { shake128len : 256, shake256len : 512 }, custom : { // /** // * Example of custom info `desc` // */ // desc : { // /** // * Lable (require) // * It is filtered by the `fm.i18n()` // * // * @type String // */ // label : 'Description', // // /** // * Template (require) // * `{id}` is replaced in dialog.id // * // * @type String // */ // tpl : '
      ', // // /** // * Restricts to mimetypes (optional) // * Exact match or category match // * // * @type Array // */ // mimes : ['text', 'image/jpeg', 'directory'], // // /** // * Restricts to file.hash (optional) // * // * @ type Regex // */ // hashRegex : /^l\d+_/, // // /** // * Request that asks for the description and sets the field (optional) // * // * @type Function // */ // action : function(file, fm, dialog) { // fm.request({ // data : { cmd : 'desc', target: file.hash }, // preventDefault: true, // }) // .fail(function() { // dialog.find('div.elfinder-info-desc').html(fm.i18n('unknown')); // }) // .done(function(data) { // dialog.find('div.elfinder-info-desc').html(data.desc); // }); // } // } } }, mkdir: { // Enable automatic switching function ["New Folder" / "Into New Folder"] of toolbar buttton intoNewFolderToolbtn: false }, resize: { // defalt status of snap to 8px grid of the jpeg image ("enable" or "disable") grid8px : 'disable', // Preset size array [width, height] presetSize : [[320, 240], [400, 400], [640, 480], [800,600]], // File size (bytes) threshold when using the `dim` command for obtain the image size necessary to start editing getDimThreshold : 204800, // File size (bytes) to request to get substitute image (400px) with the `dim` command dimSubImgSize : 307200 }, rm: { // If trash is valid, items moves immediately to the trash holder without confirm. quickTrash : true, // Maximum wait seconds when checking the number of items to into the trash infoCheckWait : 10, // Maximum number of items that can be placed into the Trash at one time toTrashMaxItems : 1000 }, paste : { moveConfirm : false // Display confirmation dialog when moving items }, help : { // Tabs to show view : ['about', 'shortcuts', 'help', 'integrations', 'debug'], // HTML source URL of the heip tab helpSource : '' }, preference : { // dialog width width: 600, // dialog height height: 400, // tabs setting see preference.js : build() categories: null, // preference setting see preference.js : build() prefs: null, // language setting see preference.js : build() langs: null, // Command list of action when select file // Array value are 'Command Name' or 'Command Name1/CommandName2...' selectActions : ['open', 'edit/download', 'resize/edit/download', 'download', 'quicklook'] } }, /** * Disabled commands relationship * * @type Object */ disabledCmdsRels : { 'get' : ['edit'], 'rm' : ['cut', 'empty'], 'file&url=' : ['download', 'zipdl'] // file command and volume options url is empty }, /** * Callback for prepare boot up * * - The this object in the function is an elFinder node * - The first parameter is elFinder Instance * - The second parameter is an object of other parameters * For now it can use `dfrdsBeforeBootup` Array * * @type Function * @default null * @return void */ bootCallback : null, /** * Callback for "getfile" commands. * Required to use elFinder with WYSIWYG editors etc.. * * @type Function * @default null (command not active) */ getFileCallback : null, /** * Default directory view. icons/list * * @type String * @default "icons" */ defaultView : 'icons', /** * Hash of default directory path to open * * NOTE: This setting will be disabled if the target folder is specified in location.hash. * * If you want to find the hash in Javascript * can be obtained with the following code. (In the case of a standard hashing method) * * var volumeId = 'l1_'; // volume id * var path = 'path/to/target'; // without root path * //var path = 'path\\to\\target'; // use \ on windows server * var hash = volumeId + btoa(path).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '.').replace(/\.+$/, ''); * * @type String * @default "" */ startPathHash : '', /** * Emit a sound when a file is deleted * Sounds are in sounds/ folder * * @type Boolean * @default true */ sound : true, /** * UI plugins to load. * Current dir ui and dialogs loads always. * Here set not required plugins as folders tree/toolbar/statusbar etc. * * @type Array * @default ['toolbar', 'places', 'tree', 'path', 'stat'] * @full ['toolbar', 'places', 'tree', 'path', 'stat'] */ ui : ['toolbar', 'places', 'tree', 'path', 'stat'], /** * Some UI plugins options. * @type Object */ uiOptions : { // toolbar configuration toolbar : [ ['home', 'back', 'forward', 'up', 'reload'], ['netmount'], ['mkdir', 'mkfile', 'upload'], ['open', 'download', 'getfile'], ['undo', 'redo'], ['copy', 'cut', 'paste', 'rm', 'empty', 'hide'], ['duplicate', 'rename', 'edit', 'resize', 'chmod'], ['selectall', 'selectnone', 'selectinvert'], ['quicklook', 'info'], ['extract', 'archive'], ['search'], ['view', 'sort'], ['preference', 'help'], ['fullscreen'] ], // toolbar extra options toolbarExtra : { // also displays the text label on the button (true / false / 'none') displayTextLabel: false, // Exclude `displayTextLabel` setting UA type labelExcludeUA: ['Mobile'], // auto hide on initial open autoHideUA: ['Mobile'], // Initial setting value of hide button in toolbar setting defaultHides: ['home', 'reload'], // show Preference button ('none', 'auto', 'always') // If you do not include 'preference' in the context menu you should specify 'auto' or 'always' showPreferenceButton: 'none', // show Preference button into contextmenu of the toolbar (true / false) preferenceInContextmenu: true }, // directories tree options tree : { // set path info to attr title attrTitle : true, // expand current root on init openRootOnLoad : true, // expand current work directory on open openCwdOnOpen : true, // auto loading current directory parents and do expand their node. syncTree : true, // Maximum number of display of each child trees // The tree of directories with children exceeding this number will be split subTreeMax : 100, // Numbar of max connctions of subdirs request subdirsMaxConn : 2, // Number of max simultaneous processing directory of subdirs subdirsAtOnce : 5, // Durations of each animations durations : { slideUpDown : 'fast', autoScroll : 'fast' } // , // /** // * Add CSS class name to navbar directories (optional) // * see: https://github.com/Studio-42/elFinder/pull/1061, // * https://github.com/Studio-42/elFinder/issues/1231 // * // * @type Function // */ // getClass: function(dir) { // // e.g. This adds the directory's name (lowercase) with prefix as a CSS class // return 'elfinder-tree-' + dir.name.replace(/[ "]/g, '').toLowerCase(); // } }, // navbar options navbar : { minWidth : 150, maxWidth : 500, // auto hide on initial open autoHideUA: [] // e.g. ['Mobile'] }, navdock : { // disabled navdock ui disabled : false, // percentage of initial maximum height to work zone initMaxHeight : '50%', // percentage of maximum height to work zone by user resize action maxHeight : '90%' }, cwd : { // display parent folder with ".." name :) oldSchool : false, // fm.UA types array to show item select checkboxes e.g. ['All'] or ['Mobile'] etc. default: ['Touch'] showSelectCheckboxUA : ['Touch'], // Enable dragout by dragstart with Alt key or Shift key metakeyDragout : true, // file info columns displayed listView : { // name is always displayed, cols are ordered // e.g. ['perm', 'date', 'size', 'kind', 'owner', 'group', 'mode'] // mode: 'mode'(by `fileModeStyle` setting), 'modestr'(rwxr-xr-x) , 'modeoct'(755), 'modeboth'(rwxr-xr-x (755)) // 'owner', 'group' and 'mode', It's necessary set volume driver option "statOwner" to `true` // for custom, characters that can be used in the name is `a-z0-9_` columns : ['perm', 'date', 'size', 'kind'], // override this if you want custom columns name // example // columnsCustomName : { // date : 'Last modification', // kind : 'Mime type' // } columnsCustomName : {}, // fixed list header colmun fixedHeader : true }, // icons view setting iconsView : { // default icon size (0-3 in default CSS (cwd.css - elfinder-cwd-size[number])) size: 0, // number of maximum size (3 in default CSS (cwd.css - elfinder-cwd-size[number])) // uses in preference.js sizeMax: 3, // Name of each size sizeNames: { 0: 'viewSmall', 1: 'viewMedium', 2: 'viewLarge', 3: 'viewExtraLarge' } }, // /** // * Add CSS class name to cwd directories (optional) // * see: https://github.com/Studio-42/elFinder/pull/1061, // * https://github.com/Studio-42/elFinder/issues/1231 // * // * @type Function // */ // , // getClass: function(file) { // // e.g. This adds the directory's name (lowercase) with prefix as a CSS class // return 'elfinder-cwd-' + file.name.replace(/[ "]/g, '').toLowerCase(); //} //, //// Template placeholders replacement rules for overwrite. see ui/cwd.js replacement //replacement : { // tooltip : function(f, fm) { // var list = fm.viewType == 'list', // current view type // query = fm.searchStatus.state == 2, // is in search results // title = fm.formatDate(f) + (f.size > 0 ? ' ('+fm.formatSize(f.size)+')' : ''), // info = ''; // if (query && f.path) { // info = fm.escape(f.path.replace(/\/[^\/]*$/, '')); // } else { // info = f.tooltip? fm.escape(f.tooltip).replace(/\r/g, ' ') : ''; // } // if (list) { // info += (info? ' ' : '') + fm.escape(f.name); // } // return info? info + ' ' + title : title; // } //} }, path : { // Move to head of work zone without UI navbar toWorkzoneWithoutNavbar : true }, dialog : { // Enable to auto focusing on mouse over in the target form element focusOnMouseOver : true }, toast : { animate : { // to show showMethod: 'fadeIn', // fadeIn, slideDown, and show are built into jQuery showDuration: 300, // milliseconds showEasing: 'swing', // swing and linear are built into jQuery // timeout to hide timeOut: 3000, // to hide hideMethod: 'fadeOut', hideDuration: 1500, hideEasing: 'swing' } } }, /** * MIME regex of send HTTP header "Content-Disposition: inline" or allow preview in quicklook * This option will overwrite by connector configuration * * @type String * @default '^(?:(?:image|video|audio)|text/plain|application/pdf$)' * @example * dispInlineRegex : '.', // is allow inline of all of MIME types * dispInlineRegex : '$^', // is not allow inline of all of MIME types */ dispInlineRegex : '^(?:(?:image|video|audio)|application/(?:x-mpegURL|dash\+xml)|(?:text/plain|application/pdf)$)', /** * Display only required files by types * * @type Array * @default [] * @example * onlyMimes : ["image"] - display all images * onlyMimes : ["image/png", "application/x-shockwave-flash"] - display png and flash */ onlyMimes : [], /** * Custom files sort rules. * All default rules (name/size/kind/date/perm/mode/owner/group) set in elFinder._sortRules * * @type {Object} * @example * sortRules : { * name : function(file1, file2) { return file1.name.toLowerCase().localeCompare(file2.name.toLowerCase()); } * } */ sortRules : {}, /** * Default sort type. * * @type {String} */ sortType : 'name', /** * Default sort order. * * @type {String} * @default "asc" */ sortOrder : 'asc', /** * Display folders first? * * @type {Boolean} * @default true */ sortStickFolders : true, /** * Sort also applies to the treeview (null: disable this feature) * * @type Boolean|null * @default false */ sortAlsoTreeview : false, /** * If true - elFinder will formating dates itself, * otherwise - backend date will be used. * * @type Boolean */ clientFormatDate : true, /** * Show UTC dates. * Required set clientFormatDate to true * * @type Boolean */ UTCDate : false, /** * File modification datetime format. * Value from selected language data is used by default. * Set format here to overwrite it. * * @type String * @default "" */ dateFormat : '', /** * File modification datetime format in form "Yesterday 12:23:01". * Value from selected language data is used by default. * Set format here to overwrite it. * Use $1 for "Today"/"Yesterday" placeholder * * @type String * @default "" * @example "$1 H:m:i" */ fancyDateFormat : '', /** * Style of file mode at cwd-list, info dialog * 'string' (ex. rwxr-xr-x) or 'octal' (ex. 755) or 'both' (ex. rwxr-xr-x (755)) * * @type {String} * @default 'both' */ fileModeStyle : 'both', /** * elFinder width * * @type String|Number * @default "auto" */ width : 'auto', /** * elFinder node height * Number: pixcel or String: Number + "%" * * @type Number | String * @default 400 */ height : 400, /** * Do not resize the elFinder node itself on resize parent node * Specify `true` when controlling with CSS such as Flexbox * * @type Boolean * @default false */ noResizeBySelf : false, /** * Base node object or selector * Element which is the reference of the height percentage * * @type Object|String * @default null | $(window) (if height is percentage) **/ heightBase : null, /** * Make elFinder resizable if jquery ui resizable available * * @type Boolean * @default true */ resizable : true, /** * Timeout before open notifications dialogs * * @type Number * @default 500 (.5 sec) */ notifyDelay : 500, /** * Position CSS, Width of notifications dialogs * * @type Object * @default {position: {}, width : null} - Apply CSS definition * position: CSS object | null (null: position center & middle) */ notifyDialog : {position : {}, width : null, canClose : false, hiddens : ['open']}, /** * Dialog contained in the elFinder node * * @type Boolean * @default false */ dialogContained : false, /** * Allow shortcuts * * @type Boolean * @default true */ allowShortcuts : true, /** * Remeber last opened dir to open it after reload or in next session * * @type Boolean * @default true */ rememberLastDir : true, /** * Clear historys(elFinder) on reload(not browser) function * Historys was cleared on Reload function on elFinder 2.0 (value is true) * * @type Boolean * @default false */ reloadClearHistory : false, /** * Use browser native history with supported browsers * * @type Boolean * @default true */ useBrowserHistory : true, /** * Lazy load config. * How many files display at once? * * @type Number * @default 50 */ showFiles : 50, /** * Lazy load config. * Distance in px to cwd bottom edge to start display files * * @type Number * @default 50 */ showThreshold : 50, /** * Additional rule to valid new file name. * By default not allowed empty names or '..' * This setting does not have a sense of security. * * @type false|RegExp|function * @default false * @example * disable names with spaces: * validName : /^[^\s]+$/, */ validName : false, /** * Additional rule to filtering for browsing. * This setting does not have a sense of security. * * The object `this` is elFinder instance object in this function * * @type false|RegExp|function * @default false * @example * show only png and jpg files: * fileFilter : /.*\.(png|jpg)$/i, * * show only image type files: * fileFilter : function(file) { return file.mime && file.mime.match(/^image\//i); }, */ fileFilter : false, /** * Backup name suffix. * * @type String * @default "~" */ backupSuffix : '~', /** * Sync content interval * * @type Number * @default 0 (do not sync) */ sync : 0, /** * Sync start on load if sync value >= 1000 * * @type Bool * @default true */ syncStart : true, /** * How many thumbnails create in one request * * @type Number * @default 5 */ loadTmbs : 5, /** * Cookie option for browsersdoes not suppot localStorage * * @type Object */ cookie : { expires : 30, domain : '', path : '/', secure : false, samesite : 'lax' }, /** * Contextmenu config * * @type Object */ contextmenu : { // navbarfolder menu navbar : ['open', 'opennew', 'download', '|', 'upload', 'mkdir', '|', 'copy', 'cut', 'paste', 'duplicate', '|', 'rm', 'empty', 'hide', '|', 'rename', '|', 'archive', '|', 'places', 'info', 'chmod', 'netunmount'], // current directory menu cwd : ['undo', 'redo', '|', 'back', 'up', 'reload', '|', 'upload', 'mkdir', 'mkfile', 'paste', '|', 'empty', 'hide', '|', 'view', 'sort', 'selectall', 'colwidth', '|', 'places', 'info', 'chmod', 'netunmount', '|', 'fullscreen', '|', 'preference'], // current directory file menu files : ['getfile', '|' ,'open', 'opennew', 'download', 'opendir', 'quicklook', '|', 'upload', 'mkdir', '|', 'copy', 'cut', 'paste', 'duplicate', '|', 'rm', 'empty', 'hide', '|', 'rename', 'edit', 'resize', '|', 'archive', 'extract', '|', 'selectall', 'selectinvert', '|', 'places', 'info', 'chmod', 'netunmount'] }, /** * elFinder node enable always * This value will set to `true` if has elFinder node only * * @type Bool * @default false */ enableAlways : false, /** * elFinder node enable by mouse over * * @type Bool * @default true */ enableByMouseOver : true, /** * Show window close confirm dialog * Value is which state to show * 'hasNotifyDialog', 'editingFile', 'hasSelectedItem' and 'hasClipboardData' * * @type Array * @default ['hasNotifyDialog', 'editingFile'] */ windowCloseConfirm : ['hasNotifyDialog', 'editingFile'], /** * Function decoding 'raw' string converted to unicode * It is used instead of fm.decodeRawString(str) * * @type Null|Function */ rawStringDecoder : typeof Encoding === 'object' && $.isFunction(Encoding.convert)? function(str) { return Encoding.convert(str, { to: 'UNICODE', type: 'string' }); } : null, /** * Debug config * * @type Array|String('auto')|Boolean(true|false) */ debug : ['error', 'warning', 'event-destroy'], /** * Show toast messeges of backend warning (if found data `debug.backendErrors` in backend results) * * @type Boolean|Object (toast options) */ toastBackendWarn : true }; application/library/js/elFinder.options.netmount.js000064400000003016146731177160016574 0ustar00/** * Default elFinder config of commandsOptions.netmount * * @type Object */ elFinder.prototype._options.commandsOptions.netmount = { ftp: { name : 'FTP', inputs: { host : $(''), port : $(''), path : $(''), user : $(''), pass : $(''), FTPS : $(''), encoding : $(''), locale : $('') } }, dropbox2: elFinder.prototype.makeNetmountOptionOauth('dropbox2', 'Dropbox', 'Dropbox', {noOffline : true, root : '/', pathI18n : 'path', integrate : { title: 'Dropbox.com', link: 'https://www.dropbox.com' } }), googledrive: elFinder.prototype.makeNetmountOptionOauth('googledrive', 'Google Drive', 'Google', { integrate : { title: 'Google Drive', link: 'https://www.google.com/drive/' } }), onedrive: elFinder.prototype.makeNetmountOptionOauth('onedrive', 'One Drive', 'OneDrive', { integrate : { title: 'Microsoft OneDrive', link: 'https://onedrive.live.com' } }), box: elFinder.prototype.makeNetmountOptionOauth('box', 'Box', 'Box', { noOffline : true, integrate : { title: 'Box.com', link: 'https://www.box.com' } }) }; application/library/js/jquery.dialogelfinder.js000064400000006133146731177160015773 0ustar00/** * @class dialogelfinder - open elFinder in dialog window * * @param Object elFinder options with dialog options * @example * $(selector).dialogelfinder({ * // some elfinder options * title : 'My files', // dialog title, default = "Files" * width : 850, // dialog width, default 840 * autoOpen : false, // if false - dialog will not be opened after init, default = true * destroyOnClose : true // destroy elFinder on close dialog, default = false * }) * @author Dmitry (dio) Levashov **/ $.fn.dialogelfinder = function(opts, opts2) { var position = 'elfinderPosition', destroy = 'elfinderDestroyOnClose', node, pos; if ($.isPlainObject(opts)) { this.not('.elfinder').each(function() { opts.handlers = opts.handlers || {}; var node = $(this), doc = $(document), toolbar = $('
      '+(opts.title || 'Files')+'
      '), button = $(' ') .appendTo(toolbar) .on('click', function(e) { e.preventDefault(); node.dialogelfinder('close'); }), init = opts.handlers.init, elfinder; opts.handlers.init = function(e, fm) { node.prepend(toolbar); init && init(e, fm); }; elfinder = node.addClass('elfinder dialogelfinder touch-punch') .css('position', 'absolute') .hide() .appendTo('body') .draggable({ handle : '.dialogelfinder-drag', containment : 'window', stop : function() { node.trigger('resize'); elfinder.trigger('resize'); } }) .elfinder(opts, opts2) .elfinder('instance'); elfinder.reloadCallback = function(o, o2) { elfinder.destroy(); o.handlers.init = init; node.dialogelfinder(o, o2).dialogelfinder('open'); }; node.width(parseInt(node.width()) || 840) // fix width if set to "auto" .data(destroy, !!opts.destroyOnClose) .find('.elfinder-toolbar').removeClass('ui-corner-top'); opts.position && node.data(position, opts.position); opts.autoOpen !== false && $(this).dialogelfinder('open'); }); } else { if (opts === 'open') { node = $(this); pos = node.data(position) || { top : parseInt($(document).scrollTop() + ($(window).height() < node.height() ? 2 : ($(window).height() - node.height())/2)), left : parseInt($(document).scrollLeft() + ($(window).width() < node.width() ? 2 : ($(window).width() - node.width())/2)) }; if (node.is(':hidden')) { node.addClass('ui-front').css(pos).show().trigger('resize'); setTimeout(function() { // fix resize icon position and make elfinder active node.trigger('resize').trigger('mousedown'); }, 200); } } else if (opts === 'close') { node = $(this).removeClass('ui-front'); if (node.is(':visible')) { !!node.data(destroy) ? node.elfinder('destroy').remove() : node.elfinder('close'); } } else if (opts === 'instance') { return $(this).getElFinder(); } } return this; }; application/library/js/init.js000064400000000017146731177160012443 0ustar00var $ = jQuery;application/library/js/elFinder.resources.js000064400000031567146731177160015257 0ustar00/** * elFinder resources registry. * Store shared data * * @type Object * @author Dmitry (dio) Levashov **/ elFinder.prototype.resources = { 'class' : { hover : 'ui-state-hover', active : 'ui-state-active', disabled : 'ui-state-disabled', draggable : 'ui-draggable', droppable : 'ui-droppable', adroppable : 'elfinder-droppable-active', cwdfile : 'elfinder-cwd-file', cwd : 'elfinder-cwd', tree : 'elfinder-tree', treeroot : 'elfinder-navbar-root', navdir : 'elfinder-navbar-dir', navdirwrap : 'elfinder-navbar-dir-wrapper', navarrow : 'elfinder-navbar-arrow', navsubtree : 'elfinder-navbar-subtree', navcollapse : 'elfinder-navbar-collapsed', navexpand : 'elfinder-navbar-expanded', treedir : 'elfinder-tree-dir', placedir : 'elfinder-place-dir', searchbtn : 'elfinder-button-search', editing : 'elfinder-to-editing', preventback : 'elfinder-prevent-back', tabstab : 'ui-state-default ui-tabs-tab ui-corner-top ui-tab', tabsactive : 'ui-tabs-active ui-state-active' }, tpl : { perms : '', lock : '', symlink : '', navicon : '', navspinner : '', navdir : '
      {symlink}{permissions}{name}
      ', placedir : '
      {symlink}{permissions}{name}
      ' }, // mimes.text will be overwritten with connector config if `textMimes` is included in initial response // @see php/elFInder.class.php `public static $textMimes` mimes : { text : [ 'application/dash+xml', 'application/docbook+xml', 'application/javascript', 'application/json', 'application/plt', 'application/sat', 'application/sql', 'application/step', 'application/vnd.hp-hpgl', 'application/x-awk', 'application/x-config', 'application/x-csh', 'application/x-empty', 'application/x-mpegurl', 'application/x-perl', 'application/x-php', 'application/x-web-config', 'application/xhtml+xml', 'application/xml', 'audio/x-mp3-playlist', 'image/cgm', 'image/svg+xml', 'image/vnd.dxf', 'model/iges' ] }, mixin : { make : function() { "use strict"; var self = this, fm = this.fm, cmd = this.name, req = this.requestCmd || cmd, wz = fm.getUI('workzone'), org = (this.origin && this.origin === 'navbar')? 'tree' : 'cwd', tree = (org === 'tree'), find = tree? 'navHash2Elm' : 'cwdHash2Elm', tarea= (! tree && fm.storage('view') != 'list'), sel = fm.selected(), move = this.move || false, empty= wz.hasClass('elfinder-cwd-wrapper-empty'), unselect = function() { requestAnimationFrame(function() { input && input.trigger('blur'); }); }, rest = function(){ if (!overlay.is(':hidden')) { overlay.elfinderoverlay('hide').off('click close', cancel); } if (nnode) { pnode.removeClass('ui-front') .css('position', '') .off('unselect.'+fm.namespace, unselect); if (tarea) { nnode && nnode.css('max-height', ''); } else if (!tree) { pnode.css('width', '') .parent('td').css('overflow', ''); } } }, colwidth, dfrd = $.Deferred() .fail(function(error) { dstCls && dst.attr('class', dstCls); empty && wz.addClass('elfinder-cwd-wrapper-empty'); if (sel) { move && fm.trigger('unlockfiles', {files: sel}); fm.clipboard([]); fm.trigger('selectfiles', { files: sel }); } error && fm.error(error); }) .always(function() { rest(); cleanup(); fm.enable().unbind('open', openCallback).trigger('resMixinMake'); }), id = 'tmp_'+parseInt(Math.random()*100000), phash = this.data && this.data.target? this.data.target : (tree? fm.file(sel[0]).hash : fm.cwd().hash), date = new Date(), file = { hash : id, phash : phash, name : fm.uniqueName(this.prefix, phash), mime : this.mime, read : true, write : true, date : 'Today '+date.getHours()+':'+date.getMinutes(), move : move }, dum = fm.getUI(org).trigger('create.'+fm.namespace, file), data = this.data || {}, node = fm[find](id), nnode, pnode, overlay = fm.getUI('overlay'), cleanup = function() { if (node && node.length) { input.off(); node.hide(); fm.unselectfiles({files : [id]}).unbind('resize', resize); requestAnimationFrame(function() { if (tree) { node.closest('.elfinder-navbar-wrapper').remove(); } else { node.remove(); } }); } }, cancel = function(e) { if (!overlay.is(':hidden')) { pnode.css('z-index', ''); } if (! inError) { cleanup(); dfrd.reject(); if (e) { e.stopPropagation(); e.preventDefault(); } } }, input = $(tarea? '' : '') .on('keyup text', function(){ if (tarea) { this.style.height = '1px'; this.style.height = this.scrollHeight + 'px'; } else if (colwidth) { this.style.width = colwidth + 'px'; if (this.scrollWidth > colwidth) { this.style.width = this.scrollWidth + 10 + 'px'; } } }) .on('keydown', function(e) { e.stopImmediatePropagation(); if (e.keyCode == $.ui.keyCode.ESCAPE) { dfrd.reject(); } else if (e.keyCode == $.ui.keyCode.ENTER) { e.preventDefault(); input.trigger('blur'); } }) .on('mousedown click dblclick', function(e) { e.stopPropagation(); if (e.type === 'dblclick') { e.preventDefault(); } }) .on('blur', function() { var name = $.trim(input.val()), parent = input.parent(), valid = true, cut; if (!overlay.is(':hidden')) { pnode.css('z-index', ''); } if (name === '') { return cancel(); } if (!inError && parent.length) { if (fm.options.validName && fm.options.validName.test) { try { valid = fm.options.validName.test(name); } catch(e) { valid = false; } } if (!name || name === '.' || name === '..' || !valid) { inError = true; fm.error(file.mime === 'directory'? 'errInvDirname' : 'errInvName', {modal: true, close: function(){setTimeout(select, 120);}}); return false; } if (fm.fileByName(name, phash)) { inError = true; fm.error(['errExists', name], {modal: true, close: function(){setTimeout(select, 120);}}); return false; } cut = (sel && move)? fm.exec('cut', sel) : null; $.when(cut) .done(function() { var toast = {}, nextAct = {}; rest(); input.hide().before($('').text(name)); fm.lockfiles({files : [id]}); fm.request({ data : Object.assign({cmd : req, name : name, target : phash}, data || {}), notify : {type : req, cnt : 1}, preventFail : true, syncOnFail : true, navigate : {toast : toast}, }) .fail(function(error) { fm.unlockfiles({files : [id]}); inError = true; input.show().prev().remove(); fm.error(error, { modal: true, close: function() { if (Array.isArray(error) && $.inArray('errUploadMime', error) !== -1) { dfrd.notify('errUploadMime').reject(); } else { setTimeout(select, 120); } } }); }) .done(function(data) { if (data && data.added && data.added[0]) { var item = data.added[0], dirhash = item.hash, newItem = fm[find](dirhash), acts = { 'directory' : { cmd: 'open', msg: 'cmdopendir' }, 'text' : { cmd: 'edit', msg: 'cmdedit' }, 'default' : { cmd: 'open', msg: 'cmdopen' } }, tmpMimes; if (sel && move) { fm.one(req+'done', function() { fm.exec('paste', dirhash); }); } if (!move) { if (fm.mimeIsText(item.mime) && !fm.mimesCanMakeEmpty[item.mime] && fm.mimeTypes[item.mime]) { fm.trigger('canMakeEmptyFile', {mimes: [item.mime], unshift: true}); tmpMimes = {}; tmpMimes[item.mime] = fm.mimeTypes[item.mime]; fm.storage('mkfileTextMimes', Object.assign(tmpMimes, fm.storage('mkfileTextMimes') || {})); } Object.assign(nextAct, nextAction || acts[item.mime] || acts[item.mime.split('/')[0]] || acts[(fm.mimesCanMakeEmpty[item.mime] || $.inArray(item.mime, fm.resources.mimes.text) !== -1) ? 'text' : 'none'] || acts['default']); Object.assign(toast, nextAct.cmd ? { incwd : {msg: fm.i18n(['complete', fm.i18n('cmd'+cmd)]), action: nextAct}, inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmd'+cmd)]), action: nextAct} } : { inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmd'+cmd)])} }); } } dfrd.resolve(data); }); }) .fail(function() { dfrd.reject(); }); } }) .on('dragenter dragleave dragover drop', function(e) { // stop bubbling to prevent upload with native drop event e.stopPropagation(); }), select = function() { var name = fm.splitFileExtention(input.val())[0]; if (!inError && fm.UA.Mobile && !fm.UA.iOS) { // since iOS has a bug? (z-index not effect) so disable it overlay.on('click close', cancel).elfinderoverlay('show'); pnode.css('z-index', overlay.css('z-index') + 1); } inError = false; ! fm.enabled() && fm.enable(); input.trigger('focus').trigger('select'); input[0].setSelectionRange && input[0].setSelectionRange(0, name.length); }, resize = function() { node.trigger('scrolltoview', {blink : false}); }, openCallback = function() { dfrd && (dfrd.state() === 'pending') && dfrd.reject(); }, inError = false, nextAction, // for tree dst, dstCls, collapsed, expanded, arrow, subtree; if (!fm.isCommandEnabled(req, phash) || !node.length) { return dfrd.reject(); } if ($.isPlainObject(self.nextAction)){ nextAction = Object.assign({}, self.nextAction); } if (tree) { dst = fm[find](phash); collapsed = fm.res('class', 'navcollapse'); expanded = fm.res('class', 'navexpand'); arrow = fm.res('class', 'navarrow'); subtree = fm.res('class', 'navsubtree'); node.closest('.'+subtree).show(); if (! dst.hasClass(collapsed)) { dstCls = dst.attr('class'); dst.addClass(collapsed+' '+expanded+' elfinder-subtree-loaded'); } if (dst.is('.'+collapsed+':not(.'+expanded+')')) { dst.children('.'+arrow).trigger('click').data('dfrd').done(function() { if (input.val() === file.name) { input.val(fm.uniqueName(self.prefix, phash)).trigger('select').trigger('focus'); } }); } nnode = node.contents().filter(function(){ return this.nodeType==3 && $(this).parent().attr('id') === fm.navHash2Id(file.hash); }); pnode = nnode.parent(); nnode.replaceWith(input.val(file.name)); } else { empty && wz.removeClass('elfinder-cwd-wrapper-empty'); nnode = node.find('.elfinder-cwd-filename'); pnode = nnode.parent(); if (tarea) { nnode.css('max-height', 'none'); } else { colwidth = pnode.width(); pnode.width(colwidth - 15) .parent('td').css('overflow', 'visible'); } nnode.empty().append(input.val(file.name)); } pnode.addClass('ui-front') .css('position', 'relative') .on('unselect.'+fm.namespace, unselect); fm.bind('resize', resize).one('open', openCallback); input.trigger('keyup'); select(); return dfrd; } }, blink: function(elm, mode) { "use strict"; var acts = { slowonce : function(){elm.hide().delay(250).fadeIn(750).delay(500).fadeOut(3500);}, lookme : function(){elm.show().fadeOut(500).fadeIn(750);} }, func; mode = mode || 'slowonce'; func = acts[mode] || acts['lookme']; elm.stop(true, true); func(); } }; application/library/js/proxy/elFinderSupportVer1.js000064400000023554146731177160016557 0ustar00/** * elFinder transport to support old protocol. * * @example * $('selector').elfinder({ * .... * transport : new elFinderSupportVer1() * }) * * @author Dmitry (dio) Levashov **/ window.elFinderSupportVer1 = function(upload) { "use strict"; var self = this, dateObj, today, yesterday, getDateString = function(date) { return date.replace('Today', today).replace('Yesterday', yesterday); }; dateObj = new Date(); today = dateObj.getFullYear() + '/' + (dateObj.getMonth() + 1) + '/' + dateObj.getDate(); dateObj = new Date(Date.now() - 86400000); yesterday = dateObj.getFullYear() + '/' + (dateObj.getMonth() + 1) + '/' + dateObj.getDate(); this.upload = upload || 'auto'; this.init = function(fm) { this.fm = fm; this.fm.parseUploadData = function(text) { var data; if (!$.trim(text)) { return {error : ['errResponse', 'errDataEmpty']}; } try { data = JSON.parse(text); } catch (e) { return {error : ['errResponse', 'errDataNotJSON']}; } return self.normalize('upload', data); }; }; this.send = function(opts) { var self = this, fm = this.fm, dfrd = $.Deferred(), cmd = opts.data.cmd, args = [], _opts = {}, data, xhr; dfrd.abort = function() { if (xhr.state() == 'pending') { xhr.quiet = true; xhr.abort(); } }; switch (cmd) { case 'open': opts.data.tree = 1; break; case 'parents': case 'tree': return dfrd.resolve({tree : []}); case 'get': opts.data.cmd = 'read'; opts.data.current = fm.file(opts.data.target).phash; break; case 'put': opts.data.cmd = 'edit'; opts.data.current = fm.file(opts.data.target).phash; break; case 'archive': case 'rm': opts.data.current = fm.file(opts.data.targets[0]).phash; break; case 'extract': case 'rename': case 'resize': opts.data.current = fm.file(opts.data.target).phash; break; case 'duplicate': _opts = $.extend(true, {}, opts); $.each(opts.data.targets, function(i, hash) { $.ajax(Object.assign(_opts, {data : {cmd : 'duplicate', target : hash, current : fm.file(hash).phash}})) .fail(function(error) { fm.error(fm.res('error', 'connect')); }) .done(function(data) { data = self.normalize('duplicate', data); if (data.error) { fm.error(data.error); } else if (data.added) { fm.trigger('add', {added : data.added}); } }); }); return dfrd.resolve({}); case 'mkdir': case 'mkfile': opts.data.current = opts.data.target; break; case 'paste': opts.data.current = opts.data.dst; if (! opts.data.tree) { $.each(opts.data.targets, function(i, h) { if (fm.file(h) && fm.file(h).mime === 'directory') { opts.data.tree = '1'; return false; } }); } break; case 'size': return dfrd.resolve({error : fm.res('error', 'cmdsupport')}); case 'search': return dfrd.resolve({error : fm.res('error', 'cmdsupport')}); case 'file': opts.data.cmd = 'open'; opts.data.current = fm.file(opts.data.target).phash; break; } // cmd = opts.data.cmd xhr = $.ajax(opts) .fail(function(error) { dfrd.reject(error); }) .done(function(raw) { data = self.normalize(cmd, raw); dfrd.resolve(data); }); return dfrd; }; // fix old connectors errors messages as possible // this.errors = { // 'Unknown command' : 'Unknown command.', // 'Invalid backend configuration' : 'Invalid backend configuration.', // 'Access denied' : 'Access denied.', // 'PHP JSON module not installed' : 'PHP JSON module not installed.', // 'File not found' : 'File not found.', // 'Invalid name' : 'Invalid file name.', // 'File or folder with the same name already exists' : 'File named "$1" already exists in this location.', // 'Not allowed file type' : 'Not allowed file type.', // 'File exceeds the maximum allowed filesize' : 'File exceeds maximum allowed size.', // 'Unable to copy into itself' : 'Unable to copy "$1" into itself.', // 'Unable to create archive' : 'Unable to create archive.', // 'Unable to extract files from archive' : 'Unable to extract files from "$1".' // } this.normalize = function(cmd, data) { var self = this, fm = this.fm, files = {}, filter = function(file) { return file && file.hash && file.name && file.mime ? file : null; }, getDirs = function(items) { return $.grep(items, function(i) { return i && i.mime && i.mime === 'directory'? true : false; }); }, getTreeDiff = function(files) { var dirs = getDirs(files); treeDiff = fm.diff(dirs, null, ['date', 'ts']); if (treeDiff.added.length) { treeDiff.added = getDirs(treeDiff.added); } if (treeDiff.changed.length) { treeDiff.changed = getDirs(treeDiff.changed); } if (treeDiff.removed.length) { var removed = []; $.each(treeDiff.removed, function(i, h) { var item; if ((item = fm.file(h)) && item.mime === 'directory') { removed.push(h); } }); treeDiff.removed = removed; } return treeDiff; }, phash, diff, isCwd, treeDiff; if ((cmd == 'tmb' || cmd == 'get')) { return data; } // if (data.error) { // $.each(data.error, function(i, msg) { // if (self.errors[msg]) { // data.error[i] = self.errors[msg]; // } // }); // } if (cmd == 'upload' && data.error && data.cwd) { data.warning = Object.assign({}, data.error); data.error = false; } if (data.error) { return data; } if (cmd == 'put') { phash = fm.file(data.target.hash).phash; return {changed : [this.normalizeFile(data.target, phash)]}; } phash = data.cwd.hash; isCwd = (phash == fm.cwd().hash); if (data.tree) { $.each(this.normalizeTree(data.tree), function(i, file) { files[file.hash] = file; }); } $.each(data.cdc||[], function(i, file) { var hash = file.hash, mcts; if (files[hash]) { if (file.date) { mcts = Date.parse(getDateString(file.date)); if (mcts && !isNaN(mcts)) { files[hash].ts = Math.floor(mcts / 1000); } else { files[hash].date = file.date || fm.formatDate(file); } } files[hash].locked = file.hash == phash ? true : file.rm === void(0) ? false : !file.rm; } else { files[hash] = self.normalizeFile(file, phash, data.tmb); } }); if (!data.tree) { $.each(fm.files(), function(hash, file) { if (!files[hash] && file.phash != phash && file.mime == 'directory') { files[hash] = file; } }); } if (cmd == 'open') { return { cwd : files[phash] || this.normalizeFile(data.cwd), files : $.map(files, function(f) { return f; }), options : self.normalizeOptions(data), init : !!data.params, debug : data.debug }; } if (isCwd) { diff = fm.diff($.map(files, filter)); } else { if (data.tree && cmd !== 'paste') { diff = getTreeDiff(files); } else { diff = { added : [], removed : [], changed : [] }; if (cmd === 'paste') { diff.sync = true; } } } return Object.assign({ current : data.cwd.hash, error : data.error, warning : data.warning, options : {tmb : !!data.tmb} }, diff); }; /** * Convert old api tree into plain array of dirs * * @param Object root dir * @return Array */ this.normalizeTree = function(root) { var self = this, result = [], traverse = function(dirs, phash) { var i, dir; for (i = 0; i < dirs.length; i++) { dir = dirs[i]; result.push(self.normalizeFile(dir, phash)); dir.dirs.length && traverse(dir.dirs, dir.hash); } }; traverse([root]); return result; }; /** * Convert file info from old api format into new one * * @param Object file * @param String parent dir hash * @return Object */ this.normalizeFile = function(file, phash, tmb) { var mime = file.mime || 'directory', size = mime == 'directory' && !file.linkTo ? 0 : file.size, mcts = file.date? Date.parse(getDateString(file.date)) : void 0, info = { url : file.url, hash : file.hash, phash : phash, name : file.name, mime : mime, ts : file.ts, size : size, read : file.read, write : file.write, locked : !phash ? true : file.rm === void(0) ? false : !file.rm }; if (! info.ts) { if (mcts && !isNaN(mcts)) { info.ts = Math.floor(mcts / 1000); } else { info.date = file.date || this.fm.formatDate(file); } } if (file.mime == 'application/x-empty' || file.mime == 'inode/x-empty') { info.mime = 'text/plain'; } if (file.linkTo) { info.alias = file.linkTo; } if (file.linkTo) { info.linkTo = file.linkTo; } if (file.tmb) { info.tmb = file.tmb; } else if (info.mime.indexOf('image/') === 0 && tmb) { info.tmb = 1; } if (file.dirs && file.dirs.length) { info.dirs = true; } if (file.dim) { info.dim = file.dim; } if (file.resize) { info.resize = file.resize; } return info; }; this.normalizeOptions = function(data) { var opts = { path : data.cwd.rel, disabled : $.merge((data.disabled || []), [ 'search', 'netmount', 'zipdl' ]), tmb : !!data.tmb, copyOverwrite : true }; if (data.params) { opts.api = 1; opts.url = data.params.url; opts.archivers = { create : data.params.archives || [], extract : data.params.extract || [] }; } if (opts.path.indexOf('/') !== -1) { opts.separator = '/'; } else if (opts.path.indexOf('\\') !== -1) { opts.separator = '\\'; } return opts; }; }; application/library/js/commands/cut.js000064400000002152146731177160014076 0ustar00/** * @class elFinder command "copy". * Put files in filemanager clipboard. * * @type elFinder.command * @author Dmitry (dio) Levashov */ elFinder.prototype.commands.cut = function() { "use strict"; var fm = this.fm; this.shortcuts = [{ pattern : 'ctrl+x shift+insert' }]; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length, filter = function(files) { var fres = true; return $.grep(files, function(f) { fres = fres && f.read && ! f.locked && ! fm.isRoot(f) ? true : false; return fres; }); }; return cnt && filter(sel).length == cnt ? 0 : -1; }; this.exec = function(hashes) { var dfrd = $.Deferred() .fail(function(error) { fm.error(error); }); $.each(this.files(hashes), function(i, file) { if (!(file.read && ! file.locked && ! fm.isRoot(file)) ) { return !dfrd.reject(['errCopy', file.name, 'errPerm']); } if (file.locked) { return !dfrd.reject(['errLocked', file.name]); } }); return dfrd.state() == 'rejected' ? dfrd : dfrd.resolve(fm.clipboard(this.hashes(hashes), true)); }; }; application/library/js/commands/mkfile.js000064400000002715146731177160014557 0ustar00/** * @class elFinder command "mkfile" * Create new empty file * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.mkfile = function() { "use strict"; var self = this; this.disableOnSearch = true; this.updateOnSelect = false; this.mime = 'text/plain'; this.prefix = 'untitled file.txt'; this.variants = []; this.getTypeName = function(mime, type) { var fm = self.fm, name; if (name = fm.messages['kind' + fm.kinds[mime]]) { name = fm.i18n(['extentiontype', type.toUpperCase(), name]); } else { name = fm.i18n(['extentionfile', type.toUpperCase()]); } return name; }; this.fm.bind('open reload canMakeEmptyFile', function() { var fm = self.fm, hides = fm.getCommand('edit').getMkfileHides(); self.variants = []; if (fm.mimesCanMakeEmpty) { $.each(fm.mimesCanMakeEmpty, function(mime, type) { type && !hides[mime] && fm.uploadMimeCheck(mime) && self.variants.push([mime, self.getTypeName(mime, type)]); }); } self.change(); }); this.getstate = function() { return this.fm.cwd().write ? 0 : -1; }; this.exec = function(_dum, mime) { var fm = self.fm, type, err; if (type = fm.mimesCanMakeEmpty[mime]) { if (fm.uploadMimeCheck(mime)) { this.mime = mime; this.prefix = fm.i18n(['untitled file', type]); return $.proxy(fm.res('mixin', 'make'), self)(); } err = ['errMkfile', self.getTypeName(mime, type)]; } return $.Deferred().reject(err); }; }; application/library/js/commands/empty.js000064400000006444146731177160014451 0ustar00/** * @class elFinder command "empty". * Empty the folder * * @type elFinder.command * @author Naoki Sawada */ elFinder.prototype.commands.empty = function() { "use strict"; var self, fm, selFiles = function(select) { var sel = self.files(select); if (!sel.length) { sel = [ fm.cwd() ]; } return sel; }; this.linkedCmds = ['rm']; this.init = function() { // lazy assign to make possible to become superclass self = this; fm = this.fm; }; this.getstate = function(select) { var sel = selFiles(select), cnt, filter = function(files) { var fres = true; return $.grep(files, function(f) { fres = fres && f.read && f.write && f.mime === 'directory' ? true : false; return fres; }); }; cnt = sel.length; return filter(sel).length == cnt ? 0 : -1; }; this.exec = function(hashes) { var dirs = selFiles(hashes), cnt = dirs.length, dfrd = $.Deferred() .done(function() { var data = {changed: {}}; fm.toast({msg: fm.i18n(['"'+success.join('", ')+'"', 'complete', fm.i18n('cmdempty')])}); $.each(dirs, function(i, dir) { data.changed[dir.hash] = dir; }); fm.change(data); }) .always(function() { var cwd = fm.cwd().hash; fm.trigger('selectfiles', {files: $.map(dirs, function(d) { return cwd === d.phash? d.hash : null; })}); }), success = [], done = function(res) { if (typeof res === 'number') { success.push(dirs[res].name); delete dirs[res].dirs; } else { res && fm.error(res); } (--cnt < 1) && dfrd[success.length? 'resolve' : 'reject'](); }; $.each(dirs, function(i, dir) { var tm; if (!(dir.write && dir.mime === 'directory')) { done(['errEmpty', dir.name, 'errPerm']); return null; } if (!fm.isCommandEnabled('rm', dir.hash)) { done(['errCmdNoSupport', '"rm"']); return null; } tm = setTimeout(function() { fm.notify({type : 'search', cnt : 1, hideCnt : cnt > 1? false : true}); }, fm.notifyDelay); fm.request({ data : {cmd : 'open', target : dir.hash}, preventDefault : true, asNotOpen : true }).done(function(data) { var targets = []; tm && clearTimeout(tm); if (fm.ui.notify.children('.elfinder-notify-search').length) { fm.notify({type : 'search', cnt : -1, hideCnt : cnt > 1? false : true}); } if (data && data.files && data.files.length) { if (data.files.length > fm.maxTargets) { done(['errEmpty', dir.name, 'errMaxTargets', fm.maxTargets]); } else { fm.updateCache(data); $.each(data.files, function(i, f) { if (!f.write || f.locked) { done(['errEmpty', dir.name, 'errRm', f.name, 'errPerm']); targets = []; return false; } targets.push(f.hash); }); if (targets.length) { fm.exec('rm', targets, { _userAction : true, addTexts : [ fm.i18n('folderToEmpty', dir.name) ] }) .fail(function(error) { fm.trigger('unselectfiles', {files: fm.selected()}); done(fm.parseError(error) || ''); }) .done(function() { done(i); }); } } } else { fm.toast({ mode: 'warning', msg: fm.i18n('filderIsEmpty', dir.name)}); done(''); } }).fail(function(error) { done(fm.parseError(error) || ''); }); }); return dfrd; }; }; application/library/js/commands/home.js000064400000001020146731177160014224 0ustar00(elFinder.prototype.commands.home = function() { "use strict"; this.title = 'Home'; this.alwaysEnabled = true; this.updateOnSelect = false; this.shortcuts = [{ pattern : 'ctrl+home ctrl+shift+up', description : 'Home' }]; this.getstate = function() { var root = this.fm.root(), cwd = this.fm.cwd().hash; return root && cwd && root != cwd ? 0: -1; }; this.exec = function() { return this.fm.exec('open', this.fm.root()); }; }).prototype = { forceLoad : true }; // this is required command application/library/js/commands/opennew.js000064400000002325146731177160014760 0ustar00/** * @class elFinder command "opennew" * Open folder in new window * * @author Naoki Sawada **/ elFinder.prototype.commands.opennew = function() { "use strict"; var fm = this.fm; this.shortcuts = [{ pattern : (typeof(fm.options.getFileCallback) === 'function'? 'shift+' : '') + 'ctrl+enter' }]; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length; return cnt === 1 ? (sel[0].mime === 'directory' && sel[0].read? 0 : -1) : -1; }; this.exec = function(hashes) { var dfrd = $.Deferred(), files = this.files(hashes), cnt = files.length, opts = this.options, file, loc, url, win; // open folder to new tab (window) if (cnt === 1 && (file = files[0]) && file.mime === 'directory') { loc = window.location; if (opts.url) { url = opts.url; } else { url = loc.pathname; } if (opts.useOriginQuery) { if (!url.match(/\?/)) { url += loc.search; } else if (loc.search) { url += '&' + loc.search.substr(1); } } url += '#elf_' + file.hash; win = window.open(url, '_blank'); setTimeout(function() { win.focus(); }, 1000); return dfrd.resolve(); } else { return dfrd.reject(); } }; }; application/library/js/commands/selectall.js000064400000001117146731177160015253 0ustar00/** * @class elFinder command "selectall" * Select ALL of cwd items * * @author Naoki Sawada **/ elFinder.prototype.commands.selectall = function() { "use strict"; var self = this, state = 0; this.fm.bind('select', function(e) { state = (e.data && e.data.selectall)? -1 : 0; }); this.state = 0; this.updateOnSelect = false; this.getstate = function() { return state; }; this.exec = function() { $(document).trigger($.Event('keydown', { keyCode: 65, ctrlKey : true, shiftKey : false, altKey : false, metaKey : false })); return $.Deferred().resolve(); }; }; application/library/js/commands/resize.js000064400000147017146731177160014616 0ustar00/** * @class elFinder command "resize" * Open dialog to resize image * * @author Dmitry (dio) Levashov * @author Alexey Sukhotin * @author Naoki Sawada * @author Sergio Jovani **/ elFinder.prototype.commands.resize = function() { "use strict"; var fm = this.fm, losslessRotate = 0, getBounceBox = function(w, h, theta) { var srcPts = [ {x: w/2, y: h/2}, {x: -w/2, y: h/2}, {x: -w/2, y: -h/2}, {x: w/2, y: -h/2} ], dstPts = [], min = {x: Number.MAX_VALUE, y: Number.MAX_VALUE}, max = {x: Number.MIN_VALUE, y: Number.MIN_VALUE}; $.each(srcPts, function(i, srcPt){ dstPts.push({ x: srcPt.x * Math.cos(theta) - srcPt.y * Math.sin(theta), y: srcPt.x * Math.sin(theta) + srcPt.y * Math.cos(theta) }); }); $.each(dstPts, function(i, pt) { min.x = Math.min(min.x, pt.x); min.y = Math.min(min.y, pt.y); max.x = Math.max(max.x, pt.x); max.y = Math.max(max.y, pt.y); }); return { width: max.x - min.x, height: max.y - min.y }; }; this.updateOnSelect = false; this.getstate = function() { var sel = fm.selectedFiles(); return sel.length == 1 && sel[0].read && sel[0].write && sel[0].mime.indexOf('image/') !== -1 ? 0 : -1; }; this.resizeRequest = function(data, f, dfrd) { var file = f || fm.file(data.target), tmb = file? file.tmb : null, enabled = fm.isCommandEnabled('resize', data.target); if (enabled && (! file || (file && file.read && file.write && file.mime.indexOf('image/') !== -1 ))) { return fm.request({ data : Object.assign(data, { cmd : 'resize' }), notify : {type : 'resize', cnt : 1} }) .fail(function(error) { if (dfrd) { dfrd.reject(error); } }) .done(function() { if (data.quality) { fm.storage('jpgQuality', data.quality === fm.option('jpgQuality')? null : data.quality); } dfrd && dfrd.resolve(); }); } else { var error; if (file) { if (file.mime.indexOf('image/') === -1) { error = ['errResize', file.name, 'errUsupportType']; } else { error = ['errResize', file.name, 'errPerm']; } } else { error = ['errResize', data.target, 'errPerm']; } if (dfrd) { dfrd.reject(error); } else { fm.error(error); } return $.Deferred().reject(error); } }; this.exec = function(hashes) { var self = this, files = this.files(hashes), dfrd = $.Deferred(), api2 = (fm.api > 1), options = this.options, dialogWidth = 650, fmnode = fm.getUI(), ctrgrup = $().controlgroup? 'controlgroup' : 'buttonset', grid8Def = typeof options.grid8px === 'undefined' || options.grid8px !== 'disable'? true : false, presetSize = Array.isArray(options.presetSize)? options.presetSize : [], clactive = 'elfinder-dialog-active', clsediting = fm.res('class', 'editing'), open = function(file, id, src) { var isJpeg = (file.mime === 'image/jpeg'), dialog = $('
      '), input = '', row = '
      ', label = '
      ', changeTm = null, operate = false, opStart = function() { operate = true; }, opStop = function() { if (operate) { operate = false; control.trigger('change'); } }, control = $('
      ') .on('focus', 'input[type=text],input[type=number]', function() { $(this).trigger('select'); }) .on('change', function() { changeTm && cancelAnimationFrame(changeTm); changeTm = requestAnimationFrame(function() { var panel, quty, canvas, ctx, img, sx, sy, sw, sh, deg, theta, bb; if (sizeImg && ! operate && (canvas = sizeImg.data('canvas'))) { panel = control.children('div.elfinder-resize-control-panel:visible'); quty = panel.find('input.elfinder-resize-quality'); if (quty.is(':visible')) { ctx = sizeImg.data('ctx'); img = sizeImg.get(0); if (panel.hasClass('elfinder-resize-uiresize')) { // resize sw = canvas.width = width.val(); sh = canvas.height = height.val(); ctx.drawImage(img, 0, 0, sw, sh); } else if (panel.hasClass('elfinder-resize-uicrop')) { // crop sx = pointX.val(); sy = pointY.val(); sw = offsetX.val(); sh = offsetY.val(); canvas.width = sw; canvas.height = sh; ctx.drawImage(img, sx, sy, sw, sh, 0, 0, sw, sh); } else { // rotate deg = degree.val(); theta = (degree.val() * Math.PI) / 180; bb = getBounceBox(owidth, oheight, theta); sw = canvas.width = bb.width; sh = canvas.height = bb.height; ctx.save(); if (deg % 90 !== 0) { ctx.fillStyle = bg.val() || '#FFF'; ctx.fillRect(0, 0, sw, sh); } ctx.translate(sw / 2, sh / 2); ctx.rotate(theta); ctx.drawImage(img, -img.width/2, -img.height/2, owidth, oheight); ctx.restore(); } canvas.toBlob(function(blob) { if (blob) { size1 = blob.size; quty.next('span').text(' (' + fm.formatSize(blob.size) + ')'); } }, 'image/jpeg', Math.max(Math.min(quty.val(), 100), 1) / 100); } } }); }) .on('mouseup', 'input', function(e) { $(e.target).trigger('change'); }), preview = $('
      ') .on('touchmove', function(e) { if ($(e.target).hasClass('touch-punch')) { e.stopPropagation(); e.preventDefault(); } }), spinner = $('
      '+fm.i18n('ntfloadimg')+'
      '), rhandle = $('
      '), rhandlec = $('
      '), uiresize = $('
      '), uicrop = $('
      '), uirotate = $('
      '), uideg270 = $('').attr('title',fm.i18n('rotate-cw')).append($('')), uideg90 = $('').attr('title',fm.i18n('rotate-ccw')).append($('')), uiprop = $(''), reset = $('').appendTo(ql.info.find('.elfinder-quicklook-info')) .on('click', function() { var self = $(this); self.html(''); fm.request({ data : {cmd : 'url', target : file.hash}, preventDefault : true, progressBar : prog }) .always(function() { self.html(''); }) .done(function(data) { var rfile = fm.file(file.hash); file.url = rfile.url = data.url || ''; if (file.url) { preview.trigger({ type: ql.evUpdate, file: file, forceUpdate: true }); } }); }); } if (file.url !== '' && file.url != '1') { preview.one('change', function() { loading.remove(); node.off('load').remove(); node = null; }).addClass('elfinder-overflow-auto'); loading = $('
      '+fm.i18n('nowLoading')+'
      ').appendTo(ql.info.find('.elfinder-quicklook-info')); prog = $('
      ').appendTo(loading); url = fm.convAbsUrl(fm.url(file.hash)); node = $('') .css('background-color', 'transparent') .appendTo(preview) .on('load', function() { ql.hideinfo(); loading.remove(); ql.preview.after(ql.info); $(this).css('background-color', '#fff').show(); }) .on('error', function() { loading.remove(); ql.preview.after(ql.info); }) .attr('src', '//sharecad.org/cadframe/load?url=' + encodeURIComponent(url)); ql.info.after(ql.preview); } } }); }, /** * KML preview with GoogleMaps API * * @param elFinder.commands.quicklook */ function(ql) { "use strict"; var fm = ql.fm, mimes = { 'application/vnd.google-earth.kml+xml' : true, 'application/vnd.google-earth.kmz' : true }, preview = ql.preview, gMaps, loadMap, wGmfail, fail, mapScr; if (ql.options.googleMapsApiKey) { ql.addIntegration({ title: 'Google Maps', link: 'https://www.google.com/intl/' + fm.lang.replace('_', '-') + '/help/terms_maps.html' }); gMaps = (window.google && google.maps); // start load maps loadMap = function(file, node, prog) { var mapsOpts = ql.options.googleMapsOpts.maps; fm.forExternalUrl(file.hash, { progressBar: prog }).done(function(url) { if (url) { try { new gMaps.KmlLayer(url, Object.assign({ map: new gMaps.Map(node.get(0), mapsOpts) }, ql.options.googleMapsOpts.kml)); ql.hideinfo(); } catch(e) { fail(); } } else { fail(); } }); }; // keep stored error handler if exists wGmfail = window.gm_authFailure; // on error function fail = function() { mapScr = null; }; // API script url mapScr = 'https://maps.googleapis.com/maps/api/js?key=' + ql.options.googleMapsApiKey; // error handler window.gm_authFailure = function() { fail(); wGmfail && wGmfail(); }; preview.on(ql.evUpdate, function(e) { var file = e.file; if (mapScr && mimes[file.mime.toLowerCase()]) { var win = ql.window, getLink = (file.url == '1' && !fm.option('onetimeUrl', file.hash)), loading, prog, url, node; e.stopImmediatePropagation(); loading = $('
      '+fm.i18n('nowLoading')+'
      ').appendTo(ql.info.find('.elfinder-quicklook-info')); prog = $('
      ').appendTo(loading); if (getLink) { preview.hide(); $('
      ').appendTo(ql.info.find('.elfinder-quicklook-info')) .on('click', function() { var self = $(this); self.html(''); fm.request({ data : {cmd : 'url', target : file.hash}, preventDefault : true, progressBar : prog }) .always(function() { loading.remove(); self.html(''); }) .done(function(data) { var rfile = fm.file(file.hash); file.url = rfile.url = data.url || ''; if (file.url) { preview.trigger({ type: ql.evUpdate, file: file, forceUpdate: true }); } }); }); } if (file.url !== '' && !getLink) { node = $('
      ').appendTo(preview); preview.one('change', function() { node.remove(); node = null; }); if (!gMaps) { fm.loadScript([mapScr], function() { gMaps = window.google && google.maps; gMaps && loadMap(file, node, prog); }); } else { loadMap(file, node, prog); } } } }); } }, /** * Any supported files preview plugin using (Google docs | MS Office) online viewer * * @param elFinder.commands.quicklook **/ function(ql) { "use strict"; var fm = ql.fm, mimes = Object.assign(fm.arrayFlip(ql.options.googleDocsMimes || [], 'g'), fm.arrayFlip(ql.options.officeOnlineMimes || [], 'm')), preview = ql.preview, win = ql.window, navi = ql.navbar, urls = { g: 'docs.google.com/gview?embedded=true&url=', m: 'view.officeapps.live.com/op/embed.aspx?wdStartOn=0&src=' }, navBottom = { g: '56px', m: '24px' }, mLimits = { xls : 5242880, // 5MB xlsb : 5242880, xlsx : 5242880, xlsm : 5242880, other: 10485760 // 10MB }, node, enable; if (ql.options.googleDocsMimes.length) { enable = true; ql.addIntegration({ title: 'Google Docs Viewer', link: 'https://docs.google.com/' }); } if (ql.options.officeOnlineMimes.length) { enable = true; ql.addIntegration({ title: 'MS Online Doc Viewer', link: 'https://products.office.com/office-online/view-office-documents-online' }); } if (enable) { preview.on(ql.evUpdate, function(e) { var file = e.file, type, dfd; // 25MB is maximum filesize of Google Docs prevew if (file.size <= 26214400 && (type = mimes[file.mime])) { var win = ql.window, setNavi = function() { navi.css('bottom', win.hasClass('elfinder-quicklook-fullscreen')? navBottom[type] : ''); }, ext = fm.mimeTypes[file.mime], getLink = (file.url == '1' && !fm.option('onetimeUrl', file.hash)), loading, prog, url, tm; if (type === 'm') { if ((mLimits[ext] && file.size > mLimits[ext]) || file.size > mLimits.other) { type = 'g'; } } if (getLink) { preview.hide(); $('
      ').appendTo(ql.info.find('.elfinder-quicklook-info')) .on('click', function() { var self = $(this); self.html(''); fm.request({ data : {cmd : 'url', target : file.hash}, preventDefault : true }) .always(function() { self.html(''); }) .done(function(data) { var rfile = fm.file(file.hash); file.url = rfile.url = data.url || ''; if (file.url) { preview.trigger({ type: ql.evUpdate, file: file, forceUpdate: true }); } }); }); } if (file.url !== '' && !getLink) { e.stopImmediatePropagation(); preview.one('change', function() { dfd && dfd.status && dfd.status() === 'pending' && dfd.reject(); win.off('viewchange.googledocs'); loading.remove(); node.off('load').remove(); node = null; }).addClass('elfinder-overflow-auto'); loading = $('
      '+fm.i18n('nowLoading')+'
      ').appendTo(ql.info.find('.elfinder-quicklook-info')); prog = $('
      ').appendTo(loading); node = $('') .css('background-color', 'transparent') .appendTo(preview); dfd = fm.forExternalUrl(file.hash, { progressBar: prog }).done(function(url) { var load = function() { try { if (node && (!node.attr('src') || node.get(0).contentWindow.document/*maybe HTTP 204*/)) { node.attr('src', 'https://' + urls[type] + encodeURIComponent(url)); // Retry because Google Docs viewer sometimes returns HTTP 204 tm = setTimeout(load, 2000); } } catch(e) {} }; if (url) { if (file.ts) { url += (url.match(/\?/)? '&' : '?') + '_t=' + file.ts; } node.on('load', function() { tm && clearTimeout(tm); ql.hideinfo(); loading.remove(); ql.preview.after(ql.info); $(this).css('background-color', '#fff').show(); }) .on('error', function() { tm && clearTimeout(tm); loading.remove(); ql.preview.after(ql.info); }); load(); } else { loading.remove(); node.remove(); } }); win.on('viewchange.googledocs', setNavi); setNavi(); ql.info.after(ql.preview); } } }); } }, /** * Texts preview plugin * * @param elFinder.commands.quicklook **/ function(ql) { "use strict"; var fm = ql.fm, preview = ql.preview, textLines = parseInt(ql.options.textInitialLines) || 150, prettifyLines = parseInt(ql.options.prettifyMaxLines) || 500, PR, _PR, error = function() { prettify = function() { return false; }; _PR && (window.PR = _PR); PR = false; }, prettify = function(node) { if (fm.options.cdns.prettify) { prettify = function(node) { setTimeout(function() { PRcheck(node); }, 100); return 'pending'; }; if (window.PR) { _PR = window.PR; } fm.loadScript([fm.options.cdns.prettify + (fm.options.cdns.prettify.match(/\?/)? '&' : '?') + 'autorun=false'], function(wPR) { PR = wPR || window.PR; if (typeof PR === 'object') { prettify = function() { return true; }; if (_PR) { window.PR = _PR; } else { delete window.PR; } exec(node); } else { error(); } }, { tryRequire: true, error : error }); } else { error(); } }, exec = function(node) { if (node && !node.hasClass('prettyprinted')) { node.css('cursor', 'wait'); requestAnimationFrame(function() { PR.prettyPrint && PR.prettyPrint(null, node.get(0)); node.css('cursor', ''); }); } }, PRcheck = function(node) { var status = prettify(node); if (status === true) { exec(node); } }; preview.on(ql.evUpdate, function(e) { var file = e.file, mime = file.mime, jqxhr, loading, prog, encSelect; if (fm.mimeIsText(file.mime) && (!ql.options.getSizeMax || file.size <= ql.options.getSizeMax) && PR !== false) { e.stopImmediatePropagation(); loading = $('
      '+fm.i18n('nowLoading')+'
      ').appendTo(ql.info.find('.elfinder-quicklook-info')); prog = $('
      ').appendTo(loading); // stop loading on change file if not loadin yet preview.one('change', function() { jqxhr.state() == 'pending' && jqxhr.reject(); encSelect && encSelect.remove(); }); jqxhr = fm.request({ data : {cmd : 'get', target : file.hash, conv : (file.encoding || 1), _t : file.ts}, options : {type: 'get', cache : true}, preventDefault : true, progressBar : prog }) .done(function(data) { var reg = new RegExp('^(data:'+file.mime.replace(/([.+])/g, '\\$1')+';base64,)', 'i'), text = data.content, part, more, node, lines, m; if (typeof text !== 'string') { return; } ql.hideinfo(); if (window.atob && (m = text.match(reg))) { text = atob(text.substr(m[1].length)); } lines = text.match(/([^\r\n]{1,100}[\r\n]*)/g); more = lines.length - textLines; if (more > 10) { part = lines.splice(0, textLines).join(''); } else { more = 0; } node = $('
      '); if (more) { node.append($('

      ' + fm.i18n('linesLeft', fm.toLocaleString(more)) + '
      ') .on('click', function() { var top = node.scrollTop(); $(this).remove(); node.children('pre').removeClass('prettyprinted').text(text).scrollTop(top); if (lines.length <= prettifyLines) { PRcheck(node); } }) ); } node.children('pre').text(part || text); node.on('touchstart', function(e) { if ($(this)['scroll' + (fm.direction === 'ltr'? 'Right' : 'Left')]() > 5) { e.originalEvent._preventSwipeX = true; } }).appendTo(preview); // make toast message if (data.toasts && Array.isArray(data.toasts)) { $.each(data.toasts, function() { this.msg && fm.toast(this); }); } PRcheck(node); }) .always(function(data) { var cmdEdit, sel, head; if (cmdEdit = fm.getCommand('edit')) { head = []; if (data && data.encoding) { head.push({value: data.encoding}); } head.push({value: 'UTF-8'}); sel = cmdEdit.getEncSelect(head); sel.on('change', function() { file.encoding = sel.val(); fm.cache(file, 'change'); preview.trigger({ type: ql.evUpdate, file: file, forceUpdate: true }); }); encSelect = $('
      ').append(sel); ql.window.append(encSelect); } loading.remove(); }); } }); } ]; application/library/js/commands/info.js000064400000026771146731177160014253 0ustar00/** * @class elFinder command "info". * Display dialog with file properties. * * @author Dmitry (dio) Levashov, dio@std42.ru **/ (elFinder.prototype.commands.info = function() { "use strict"; var m = 'msg', fm = this.fm, spclass = 'elfinder-spinner', btnclass = 'elfinder-info-button', msg = { calc : fm.i18n('calc'), size : fm.i18n('size'), unknown : fm.i18n('unknown'), path : fm.i18n('path'), aliasfor : fm.i18n('aliasfor'), modify : fm.i18n('modify'), perms : fm.i18n('perms'), locked : fm.i18n('locked'), dim : fm.i18n('dim'), kind : fm.i18n('kind'), files : fm.i18n('files'), folders : fm.i18n('folders'), roots : fm.i18n('volumeRoots'), items : fm.i18n('items'), yes : fm.i18n('yes'), no : fm.i18n('no'), link : fm.i18n('link'), owner : fm.i18n('owner'), group : fm.i18n('group'), perm : fm.i18n('perm'), getlink : fm.i18n('getLink') }, applyZWSP = function(str, remove) { if (remove) { return str.replace(/\u200B/g, ''); } else { return str.replace(/(\/|\\)/g, "$1\u200B"); } }; this.items = ['size', 'aliasfor', 'path', 'link', 'dim', 'modify', 'perms', 'locked', 'owner', 'group', 'perm']; if (this.options.custom && Object.keys(this.options.custom).length) { $.each(this.options.custom, function(name, details) { details.label && this.items.push(details.label); }); } this.tpl = { main : '
      {title}
      {content}
      ', itemTitle : '{name}{kind}', groupTitle : '{items}: {num}', row : '{label} : {value}', spinner : '{text} ' }; this.alwaysEnabled = true; this.updateOnSelect = false; this.shortcuts = [{ pattern : 'ctrl+i' }]; this.init = function() { $.each(msg, function(k, v) { msg[k] = fm.i18n(v); }); }; this.getstate = function() { return 0; }; this.exec = function(hashes) { var files = this.files(hashes); if (! files.length) { files = this.files([ this.fm.cwd().hash ]); } var self = this, fm = this.fm, o = this.options, tpl = this.tpl, row = tpl.row, cnt = files.length, content = [], view = tpl.main, l = '{label}', v = '{value}', reqs = [], reqDfrd = null, opts = { title : fm.i18n('selectionInfo'), width : 'auto', close : function() { $(this).elfinderdialog('destroy'); if (reqDfrd && reqDfrd.state() === 'pending') { reqDfrd.reject(); } $.grep(reqs, function(r) { r && r.state() === 'pending' && r.reject(); }); } }, count = [], replSpinner = function(msg, name, className) { dialog.find('.'+spclass+'-'+name).parent().html(msg).addClass(className || ''); }, id = fm.namespace+'-info-'+$.map(files, function(f) { return f.hash; }).join('-'), dialog = fm.getUI().find('#'+id), customActions = [], style = '', hashClass = 'elfinder-font-mono elfinder-info-hash', getHashAlgorisms = [], ndialog = fm.ui.notify, size, tmb, file, title, dcnt, rdcnt, path, hideItems, hashProg; if (ndialog.is(':hidden') && ndialog.children('.elfinder-notify').length) { ndialog.elfinderdialog('open').height('auto'); } if (!cnt) { return $.Deferred().reject(); } if (dialog.length) { dialog.elfinderdialog('toTop'); return $.Deferred().resolve(); } hideItems = fm.storage('infohides') || fm.arrayFlip(o.hideItems, true); if (cnt === 1) { file = files[0]; if (file.icon) { style = ' '+fm.getIconStyle(file); } view = view.replace('{dirclass}', file.csscls? fm.escape(file.csscls) : '').replace('{class}', fm.mime2class(file.mime)).replace('{style}', style); title = tpl.itemTitle.replace('{name}', fm.escape(file.i18 || file.name)).replace('{kind}', ''+fm.mime2kind(file)+''); tmb = fm.tmb(file); if (!file.read) { size = msg.unknown; } else if (file.mime != 'directory' || file.alias) { size = fm.formatSize(file.size); } else { size = tpl.spinner.replace('{text}', msg.calc).replace('{name}', 'size'); count.push(file.hash); } !hideItems.size && content.push(row.replace(l, msg.size).replace(v, size)); !hideItems.aleasfor && file.alias && content.push(row.replace(l, msg.aliasfor).replace(v, file.alias)); if (!hideItems.path) { if (path = fm.path(file.hash, true)) { content.push(row.replace(l, msg.path).replace(v, applyZWSP(fm.escape(path))).replace('{class}', 'elfinder-info-path')); } else { content.push(row.replace(l, msg.path).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{name}', 'path')).replace('{class}', 'elfinder-info-path')); reqs.push(fm.path(file.hash, true, {notify: null}) .fail(function() { replSpinner(msg.unknown, 'path'); }) .done(function(path) { replSpinner(applyZWSP(path), 'path'); })); } } if (!hideItems.link && file.read) { var href, name_esc = fm.escape(file.name); if (file.url == '1') { content.push(row.replace(l, msg.link).replace(v, '')); } else { if (file.url) { href = file.url; } else if (file.mime === 'directory') { if (o.nullUrlDirLinkSelf && file.url === null) { var loc = window.location; href = loc.pathname + loc.search + '#elf_' + file.hash; } else if (file.url !== '' && fm.option('url', (!fm.isRoot(file) && file.phash) || file.hash)) { href = fm.url(file.hash); } } else { href = fm.url(file.hash); } href && content.push(row.replace(l, msg.link).replace(v, ''+name_esc+'')); } } if (!hideItems.dim) { if (file.dim) { // old api content.push(row.replace(l, msg.dim).replace(v, file.dim)); } else if (file.mime.indexOf('image') !== -1) { if (file.width && file.height) { content.push(row.replace(l, msg.dim).replace(v, file.width+'x'+file.height)); } else if (file.size && file.size !== '0') { content.push(row.replace(l, msg.dim).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{name}', 'dim'))); reqs.push(fm.request({ data : {cmd : 'dim', target : file.hash}, preventDefault : true }) .fail(function() { replSpinner(msg.unknown, 'dim'); }) .done(function(data) { replSpinner(data.dim || msg.unknown, 'dim'); if (data.dim) { var dim = data.dim.split('x'); var rfile = fm.file(file.hash); rfile.width = dim[0]; rfile.height = dim[1]; } })); } } } !hideItems.modify && content.push(row.replace(l, msg.modify).replace(v, fm.formatDate(file))); !hideItems.perms && content.push(row.replace(l, msg.perms).replace(v, fm.formatPermissions(file))); !hideItems.locked && content.push(row.replace(l, msg.locked).replace(v, file.locked ? msg.yes : msg.no)); !hideItems.owner && file.owner && content.push(row.replace(l, msg.owner).replace(v, file.owner)); !hideItems.group && file.group && content.push(row.replace(l, msg.group).replace(v, file.group)); !hideItems.perm && file.perm && content.push(row.replace(l, msg.perm).replace(v, fm.formatFileMode(file.perm))); // Add custom info fields if (o.custom) { $.each(o.custom, function(name, details) { if ( !hideItems[details.label] && (!details.mimes || $.grep(details.mimes, function(m){return (file.mime === m || file.mime.indexOf(m+'/') === 0)? true : false;}).length) && (!details.hashRegex || file.hash.match(details.hashRegex)) ) { // Add to the content content.push(row.replace(l, fm.i18n(details.label)).replace(v , details.tpl.replace('{id}', id))); // Register the action if (details.action && (typeof details.action == 'function')) { customActions.push(details.action); } } }); } } else { view = view.replace('{class}', 'elfinder-cwd-icon-group'); title = tpl.groupTitle.replace('{items}', msg.items).replace('{num}', cnt); dcnt = $.grep(files, function(f) { return f.mime == 'directory' ? true : false ; }).length; if (!dcnt) { size = 0; $.each(files, function(h, f) { var s = parseInt(f.size); if (s >= 0 && size >= 0) { size += s; } else { size = 'unknown'; } }); content.push(row.replace(l, msg.kind).replace(v, msg.files)); !hideItems.size && content.push(row.replace(l, msg.size).replace(v, fm.formatSize(size))); } else { rdcnt = $.grep(files, function(f) { return f.mime === 'directory' && (! f.phash || f.isroot)? true : false ; }).length; dcnt -= rdcnt; content.push(row.replace(l, msg.kind).replace(v, (rdcnt === cnt || dcnt === cnt)? msg[rdcnt? 'roots' : 'folders'] : $.map({roots: rdcnt, folders: dcnt, files: cnt - rdcnt - dcnt}, function(c, t) { return c? msg[t]+' '+c : null; }).join(', '))); !hideItems.size && content.push(row.replace(l, msg.size).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{name}', 'size'))); count = $.map(files, function(f) { return f.hash; }); } } view = view.replace('{title}', title).replace('{content}', content.join('').replace(/{class}/g, '')); dialog = self.fmDialog(view, opts); dialog.attr('id', id).one('mousedown', '.elfinder-info-path', function() { $(this).html(applyZWSP($(this).html(), true)); }); if (getHashAlgorisms.length) { hashProg.appendTo(dialog.find('.'+spclass+'-'+getHashAlgorisms[0]).parent()); } if (fm.UA.Mobile && $.fn.tooltip) { dialog.children('.ui-dialog-content .elfinder-info-title').tooltip({ classes: { 'ui-tooltip': 'elfinder-ui-tooltip ui-widget-shadow' }, tooltipClass: 'elfinder-ui-tooltip ui-widget-shadow', track: true }); } if (file && file.url == '1') { dialog.on('click', '.'+spclass+'-url', function(){ $(this).parent().html(tpl.spinner.replace('{text}', fm.i18n('ntfurl')).replace('{name}', 'url')); fm.request({ data : {cmd : 'url', target : file.hash}, preventDefault : true }) .fail(function() { replSpinner(name_esc, 'url'); }) .done(function(data) { if (data.url) { replSpinner(''+name_esc+'' || name_esc, 'url'); var rfile = fm.file(file.hash); rfile.url = data.url; } else { replSpinner(name_esc, 'url'); } }); }); } // load thumbnail if (tmb) { $('') .on('load', function() { dialog.find('.elfinder-cwd-icon').addClass(tmb.className).css('background-image', "url('"+tmb.url+"')"); }) .attr('src', tmb.url); } // send request to count total size if (count.length) { reqDfrd = fm.getSize(count).done(function(data) { replSpinner(data.formated, 'size'); }).fail(function() { replSpinner(msg.unknown, 'size'); }); } // call custom actions if (customActions.length) { $.each(customActions, function(i, action) { try { action(file, fm, dialog); } catch(e) { fm.debug('error', e); } }); } return $.Deferred().resolve(); }; }).prototype = { forceLoad : true }; // this is required command application/library/js/commands/sort.js000064400000010423146731177160014272 0ustar00/** * @class elFinder command "sort" * Change sort files rule * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.sort = function() { "use strict"; var self = this, fm = self.fm, setVar = function() { self.variants = []; $.each(fm.sortRules, function(name, value) { if (fm.sorters[name]) { var arr = (name === fm.sortType)? (fm.sortOrder === 'asc'? 'n' : 's') : ''; self.variants.push([name, (arr? '' : '') + ' ' + fm.i18n('sort'+name)]); } }); self.variants.push('|'); self.variants.push([ 'stick', (fm.sortStickFolders? '' : '') + ' ' + fm.i18n('sortFoldersFirst') ]); if (fm.ui.tree && fm.options.sortAlsoTreeview !== null) { self.variants.push('|'); self.variants.push([ 'tree', (fm.sortAlsoTreeview? '' : '') + ' ' + fm.i18n('sortAlsoTreeview') ]); } updateContextmenu(); }, updateContextmenu = function() { var cm = fm.getUI('contextmenu'), icon, sub; if (cm.is(':visible')) { icon = cm.find('span.elfinder-button-icon-sort'); sub = icon.siblings('div.elfinder-contextmenu-sub'); sub.find('span.ui-icon').remove(); sub.children('div.elfinder-contextsubmenu-item').each(function() { var tgt = $(this).children('span'), name = tgt.text().trim(), arr; if (name === (i18Name.stick || (i18Name.stick = fm.i18n('sortFoldersFirst')))) { if (fm.sortStickFolders) { tgt.prepend(''); } } else if (name === (i18Name.tree || (i18Name.tree = fm.i18n('sortAlsoTreeview')))) { if (fm.sortAlsoTreeview) { tgt.prepend(''); } } else if (name === (i18Name[fm.sortType] || (i18Name[fm.sortType] = fm.i18n('sort' + fm.sortType)))) { arr = fm.sortOrder === 'asc'? 'n' : 's'; tgt.prepend(''); } }); } }, i18Name = {}; /** * Command options * * @type Object */ this.options = {ui : 'sortbutton'}; this.keepContextmenu = true; fm.bind('sortchange', setVar) .bind('sorterupdate', function() { setVar(); fm.getUI().children('.elfinder-button-sort-menu').children('.elfinder-button-menu-item').each(function() { var tgt = $(this), rel = tgt.attr('rel'); tgt.toggle(!!(! rel || fm.sorters[rel])); }); }) .bind('cwdrender', function() { var cols = $(fm.cwd).find('div.elfinder-cwd-wrapper-list table'); if (cols.length) { $.each(fm.sortRules, function(name, value) { var td = cols.find('thead tr td.elfinder-cwd-view-th-'+name); if (td.length) { var current = ( name == fm.sortType), sort = { type : name, order : current ? fm.sortOrder == 'asc' ? 'desc' : 'asc' : fm.sortOrder },arr; if (current) { td.addClass('ui-state-active'); arr = fm.sortOrder == 'asc' ? 'n' : 's'; $('').appendTo(td); } $(td).on('click', function(e){ if (! $(this).data('dragging')) { e.stopPropagation(); if (! fm.getUI('cwd').data('longtap')) { fm.exec('sort', [], sort); } } }) .on('mouseenter mouseleave', function(e) { $(this).toggleClass('ui-state-hover', e.type === 'mouseenter'); }); } }); } }); this.getstate = function() { return 0; }; this.exec = function(hashes, cOpt) { var fm = this.fm, sortopt = $.isPlainObject(cOpt)? cOpt : (function() { cOpt += ''; var sOpts = {}; if (cOpt === 'stick') { sOpts.stick = !fm.sortStickFolders; } else if (cOpt === 'tree') { sOpts.tree = !fm.sortAlsoTreeview; } else if (fm.sorters[cOpt]) { if (fm.sortType === cOpt) { sOpts.order = fm.sortOrder === 'asc'? 'desc' : 'asc'; } else { sOpts.type = cOpt; } } return sOpts; })(), sort = Object.assign({ type : fm.sortType, order : fm.sortOrder, stick : fm.sortStickFolders, tree : fm.sortAlsoTreeview }, sortopt); return fm.lazy(function() { fm.setSort(sort.type, sort.order, sort.stick, sort.tree); this.resolve(); }); }; }; application/library/js/commands/forward.js000064400000000775146731177160014760 0ustar00/** * @class elFinder command "forward" * Open next visited folder * * @author Dmitry (dio) Levashov **/ (elFinder.prototype.commands.forward = function() { "use strict"; this.alwaysEnabled = true; this.updateOnSelect = true; this.shortcuts = [{ pattern : 'ctrl+right' }]; this.getstate = function() { return this.fm.history.canForward() ? 0 : -1; }; this.exec = function() { return this.fm.history.forward(); }; }).prototype = { forceLoad : true }; // this is required command application/library/js/commands/hidden.js000064400000000424146731177160014536 0ustar00/** * @class elFinder command "hidden" * Always hidden command for uiCmdMap * * @author Naoki Sawada **/ elFinder.prototype.commands.hidden = function() { "use strict"; this.hidden = true; this.updateOnSelect = false; this.getstate = function() { return -1; }; };application/library/js/commands/getfile.js000064400000010051146731177160014717 0ustar00/** * @class elFinder command "getfile". * Return selected files info into outer callback. * For use elFinder with wysiwyg editors etc. * * @author Dmitry (dio) Levashov, dio@std42.ru **/ (elFinder.prototype.commands.getfile = function() { "use strict"; var self = this, fm = this.fm, filter = function(files) { var o = self.options, fres = true; files = $.grep(files, function(file) { fres = fres && (file.mime != 'directory' || o.folders) && file.read ? true : false; return fres; }); return o.multiple || files.length == 1 ? files : []; }; this.alwaysEnabled = true; this.callback = fm.options.getFileCallback; this._disabled = typeof(this.callback) == 'function'; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length; return this.callback && cnt && filter(sel).length == cnt ? 0 : -1; }; this.exec = function(hashes) { var fm = this.fm, opts = this.options, files = this.files(hashes), cnt = files.length, url = fm.option('url'), tmb = fm.option('tmbUrl'), dfrd = $.Deferred() .done(function(data) { var res, done = function() { if (opts.oncomplete == 'close') { fm.hide(); } else if (opts.oncomplete == 'destroy') { fm.destroy(); } }, fail = function(error) { if (opts.onerror == 'close') { fm.hide(); } else if (opts.onerror == 'destroy') { fm.destroy(); } else { error && fm.error(error); } }; fm.trigger('getfile', {files : data}); try { res = self.callback(data, fm); } catch(e) { fail(['Error in `getFileCallback`.', e.message]); return; } if (typeof res === 'object' && typeof res.done === 'function') { res.done(done).fail(fail); } else { done(); } }), result = function(file) { return opts.onlyURL ? opts.multiple ? $.map(files, function(f) { return f.url; }) : files[0].url : opts.multiple ? files : files[0]; }, req = [], i, file, dim; for (i = 0; i < cnt; i++) { file = files[i]; if (file.mime == 'directory' && !opts.folders) { return dfrd.reject(); } file.baseUrl = url; if (file.url == '1') { req.push(fm.request({ data : {cmd : 'url', target : file.hash}, notify : {type : 'url', cnt : 1, hideCnt : true}, preventDefault : true }) .done(function(data) { if (data.url) { var rfile = fm.file(this.hash); rfile.url = this.url = data.url; } }.bind(file))); } else { file.url = fm.url(file.hash); } if (! opts.onlyURL) { if (opts.getPath) { file.path = fm.path(file.hash); if (file.path === '' && file.phash) { // get parents (function() { var dfd = $.Deferred(); req.push(dfd); fm.path(file.hash, false, {}) .done(function(path) { file.path = path; }) .fail(function() { file.path = ''; }) .always(function() { dfd.resolve(); }); })(); } } if (file.tmb && file.tmb != 1) { file.tmb = tmb + file.tmb; } if (!file.width && !file.height) { if (file.dim) { dim = file.dim.split('x'); file.width = dim[0]; file.height = dim[1]; } else if (opts.getImgSize && file.mime.indexOf('image') !== -1) { req.push(fm.request({ data : {cmd : 'dim', target : file.hash}, notify : {type : 'dim', cnt : 1, hideCnt : true}, preventDefault : true }) .done(function(data) { if (data.dim) { var dim = data.dim.split('x'); var rfile = fm.file(this.hash); rfile.width = this.width = dim[0]; rfile.height = this.height = dim[1]; } }.bind(file))); } } } } if (req.length) { $.when.apply(null, req).always(function() { dfrd.resolve(result(files)); }); return dfrd; } return dfrd.resolve(result(files)); }; }).prototype = { forceLoad : true }; // this is required command application/library/js/commands/edit.js000064400000104346146731177160014240 0ustar00/** * @class elFinder command "edit". * Edit text file in dialog window * * @author Dmitry (dio) Levashov, dio@std42.ru **/ elFinder.prototype.commands.edit = function() { "use strict"; var self = this, fm = this.fm, clsEditing = fm.res('class', 'editing'), mimesSingle = [], mimes = [], allowAll = false, rtrim = function(str){ return str.replace(/\s+$/, ''); }, getEncSelect = function(heads) { var sel = $(''), hval; if (heads) { $.each(heads, function(i, head) { hval = fm.escape(head.value); sel.append(''); }); } $.each(self.options.encodings, function(i, v) { sel.append(''); }); return sel; }, getDlgWidth = function() { var win = fm.options.dialogContained? fm.getUI() : $(window), m, width; if (typeof self.options.dialogWidth === 'string' && (m = self.options.dialogWidth.match(/(\d+)%/))) { width = parseInt(win.width() * (m[1] / 100)); } else { width = parseInt(self.options.dialogWidth || 650); } return Math.min(width, win.width()); }, getDlgHeight = function() { if (!self.options.dialogHeight) { return void(0); } var win = fm.options.dialogContained? fm.getUI() : $(window), m, height; if (typeof self.options.dialogHeight === 'string' && (m = self.options.dialogHeight.match(/(\d+)%/))) { height = parseInt(win.height() * (m[1] / 100)); } else { height = parseInt(self.options.dialogHeight || win.height()); } return Math.min(height, win.height()); }, /** * Return files acceptable to edit * * @param Array files hashes * @return Array **/ filter = function(files) { var cnt = files.length, mime, ext, skip; if (cnt > 1) { mime = files[0].mime; ext = files[0].name.replace(/^.*(\.[^.]+)$/, '$1'); } return $.grep(files, function(file) { var res; if (skip || file.mime === 'directory') { return false; } res = file.read && (allowAll || fm.mimeIsText(file.mime) || $.inArray(file.mime, cnt === 1? mimesSingle : mimes) !== -1) && (!self.onlyMimes.length || $.inArray(file.mime, self.onlyMimes) !== -1) && (cnt === 1 || (file.mime === mime && file.name.substr(ext.length * -1) === ext)) && (fm.uploadMimeCheck(file.mime, file.phash)? true : false) && setEditors(file, cnt) && Object.keys(editors).length; if (!res) { skip = true; } return res; }); }, fileSync = function(hash) { var old = fm.file(hash), f; fm.request({ cmd: 'info', targets: [hash], preventDefault: true }).done(function(data) { var changed; if (data && data.files && data.files.length) { f = data.files[0]; if (old.ts != f.ts || old.size != f.size) { changed = { changed: [ f ] }; fm.updateCache(changed); fm.change(changed); } } }); }, /** * Open dialog with textarea to edit file * * @param String id dialog id * @param Object file file object * @param String content file content * @return $.Deferred **/ dialog = function(id, file, content, encoding, editor, toasts) { var dfrd = $.Deferred(), _loaded = false, loaded = function() { if (!_loaded) { fm.toast({ mode: 'warning', msg: fm.i18n('nowLoading') }); return false; } return true; }, makeToasts = function() { // make toast message if (toasts && Array.isArray(toasts)) { $.each(toasts, function() { this.msg && fm.toast(this); }); } }, save = function() { var encord = selEncoding? selEncoding.val():void(0), saveDfd = $.Deferred().fail(function(err) { dialogNode.show().find('button.elfinder-btncnt-0,button.elfinder-btncnt-1').hide(); }), conf, res, tm; if (!loaded()) { return saveDfd.resolve(); } if (ta.editor) { ta.editor.save(ta[0], ta.editor.instance); conf = ta.editor.confObj; if (conf.info && (conf.info.schemeContent || conf.info.arrayBufferContent)) { encord = 'scheme'; } } res = getContent(); setOld(res); if (res.promise) { tm = setTimeout(function() { fm.notify({ type : 'chkcontent', cnt : 1, hideCnt: true, cancel : function() { res.reject(); } }); }, 100); res.always(function() { tm && clearTimeout(tm); fm.notify({ type : 'chkcontent', cnt: -1 }); }).done(function(data) { dfrd.notifyWith(ta, [encord, ta.data('hash'), old, saveDfd]); }).fail(function(err) { saveDfd.reject(err); }); } else { dfrd.notifyWith(ta, [encord, ta.data('hash'), old, saveDfd]); } return saveDfd; }, saveon = function() { if (!loaded()) { return; } save().fail(function(err) { err && fm.error(err); }); }, cancel = function() { ta.elfinderdialog('close'); }, savecl = function() { if (!loaded()) { return; } dialogNode.hide(); save().done(function() { _loaded = false; dialogNode.show(); cancel(); }).fail(function(err) { dialogNode.show(); err && fm.error(err); }); }, saveAs = function() { if (!loaded()) { return; } var prevOld = old, phash = file.phash, fail = function(err) { dialogs.addClass(clsEditing).fadeIn(function() { err && fm.error(err); }); old = prevOld; fm.disable(); }, make = function() { self.mime = saveAsFile.mime || file.mime; self.prefix = (saveAsFile.name || file.name).replace(/ \d+(\.[^.]+)?$/, '$1'); self.requestCmd = 'mkfile'; self.nextAction = {}; self.data = {target : phash}; $.proxy(fm.res('mixin', 'make'), self)() .done(function(data) { var oldHash; if (data.added && data.added.length) { oldHash = ta.data('hash'); ta.data('hash', data.added[0].hash); save().done(function() { _loaded = false; dialogNode.show(); cancel(); dialogs.fadeIn(); }).fail(function() { fm.exec('rm', [data.added[0].hash], { forceRm: true, quiet: true }); ta.data('hash', oldHash); dialogNode.find('button.elfinder-btncnt-2').hide(); fail(); }); } else { fail(); } }) .progress(function(err) { if (err && err === 'errUploadMime') { ta.trigger('saveAsFail'); } }) .fail(fail) .always(function() { delete self.mime; delete self.prefix; delete self.nextAction; delete self.data; }); fm.trigger('unselectfiles', { files: [ file.hash ] }); }, reqOpen = null, reqInfo = null, dialogs = fm.getUI().children('.' + self.dialogClass + ':visible'); if (dialogNode.is(':hidden')) { dialogs = dialogs.add(dialogNode); } dialogs.removeClass(clsEditing).fadeOut(); fm.enable(); if (fm.searchStatus.state < 2 && phash !== fm.cwd().hash) { reqOpen = fm.exec('open', [phash], {thash: phash}); } else if (!fm.file(phash)) { reqInfo = fm.request({cmd: 'info', targets: [phash]}); } $.when([reqOpen, reqInfo]).done(function() { if (reqInfo) { fm.one('infodone', function() { fm.file(phash)? make() : fail('errFolderNotFound'); }); } else { reqOpen? fm.one('cwdrender', make) : make(); } }).fail(fail); }, changed = function() { var dfd = $.Deferred(), res, tm; if (!_loaded) { return dfd.resolve(false); } ta.editor && ta.editor.save(ta[0], ta.editor.instance); res = getContent(); if (res && res.promise) { tm = setTimeout(function() { fm.notify({ type : 'chkcontent', cnt : 1, hideCnt: true, cancel : function() { res.reject(); } }); }, 100); res.always(function() { tm && clearTimeout(tm); fm.notify({ type : 'chkcontent', cnt: -1 }); }).done(function(d) { dfd.resolve(old !== d); }).fail(function(err) { dfd.resolve(err || (old === undefined? false : true)); }); } else { dfd.resolve(old !== res); } return dfd; }, opts = { title : fm.escape(file.name), width : getDlgWidth(), height : getDlgHeight(), buttons : {}, cssClass : clsEditing, maxWidth : 'window', maxHeight : 'window', allowMinimize : true, allowMaximize : true, openMaximized : editorMaximized() || (editor && editor.info && editor.info.openMaximized), btnHoverFocus : false, closeOnEscape : false, propagationEvents : ['mousemove', 'mouseup', 'click'], minimize : function() { var conf; if (ta.editor && dialogNode.closest('.ui-dialog').is(':hidden')) { conf = ta.editor.confObj; if (conf.info && conf.info.syncInterval) { fileSync(file.hash); } } }, close : function() { var close = function() { var conf; dfrd.resolve(); if (ta.editor) { ta.editor.close(ta[0], ta.editor.instance); conf = ta.editor.confObj; if (conf.info && conf.info.syncInterval) { fileSync(file.hash); } } ta.elfinderdialog('destroy'); }, onlySaveAs = (typeof saveAsFile.name !== 'undefined'), accept = onlySaveAs? { label : 'btnSaveAs', callback : function() { requestAnimationFrame(saveAs); } } : { label : 'btnSaveClose', callback : function() { save().done(function() { close(); }); } }; changed().done(function(change) { var msgs = ['confirmNotSave']; if (change) { if (typeof change === 'string') { msgs.unshift(change); } fm.confirm({ title : self.title, text : msgs, accept : accept, cancel : { label : 'btnClose', callback : close }, buttons : onlySaveAs? null : [{ label : 'btnSaveAs', callback : function() { requestAnimationFrame(saveAs); } }] }); } else { close(); } }); }, open : function() { var loadRes, conf, interval; ta.initEditArea.call(ta, id, file, content, fm); if (ta.editor) { loadRes = ta.editor.load(ta[0]) || null; if (loadRes && loadRes.done) { loadRes.always(function() { _loaded = true; }).done(function(instance) { ta.editor.instance = instance; ta.editor.focus(ta[0], ta.editor.instance); setOld(getContent()); requestAnimationFrame(function() { dialogNode.trigger('resize'); }); }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); return; }).always(makeToasts); } else { _loaded = true; if (loadRes && (typeof loadRes === 'string' || Array.isArray(loadRes))) { fm.error(loadRes); ta.elfinderdialog('destroy'); return; } ta.editor.instance = loadRes; ta.editor.focus(ta[0], ta.editor.instance); setOld(getContent()); requestAnimationFrame(function() { dialogNode.trigger('resize'); }); makeToasts(); } conf = ta.editor.confObj; if (conf.info && conf.info.syncInterval) { if (interval = parseInt(conf.info.syncInterval)) { setTimeout(function() { autoSync(interval); }, interval); } } } else { _loaded = true; setOld(getContent()); } }, resize : function(e, data) { ta.editor && ta.editor.resize(ta[0], ta.editor.instance, e, data || {}); } }, getContent = function() { var res = ta.getContent.call(ta, ta[0]); if (res === undefined || res === false || res === null) { res = $.Deferred().reject(); } return res; }, setOld = function(res) { if (res && res.promise) { res.done(function(d) { old = d; }); } else { old = res; } }, autoSync = function(interval) { if (dialogNode.is(':visible')) { fileSync(file.hash); setTimeout(function() { autoSync(interval); }, interval); } }, stateChange = function() { if (selEncoding) { changed().done(function(change) { if (change) { selEncoding.attr('title', fm.i18n('saveAsEncoding')).addClass('elfinder-edit-changed'); } else { selEncoding.attr('title', fm.i18n('openAsEncoding')).removeClass('elfinder-edit-changed'); } }); } }, saveAsFile = {}, ta, old, dialogNode, selEncoding, extEditor, maxW, syncInterval; if (editor) { if (editor.html) { ta = $(editor.html); } extEditor = { init : editor.init || null, load : editor.load, getContent : editor.getContent || null, save : editor.save, beforeclose : typeof editor.beforeclose == 'function' ? editor.beforeclose : void 0, close : typeof editor.close == 'function' ? editor.close : function() {}, focus : typeof editor.focus == 'function' ? editor.focus : function() {}, resize : typeof editor.resize == 'function' ? editor.resize : function() {}, instance : null, doSave : saveon, doCancel : cancel, doClose : savecl, file : file, fm : fm, confObj : editor, trigger : function(evName, data) { fm.trigger('editEditor' + evName, Object.assign({}, editor.info || {}, data)); } }; } if (!ta) { if (!fm.mimeIsText(file.mime)) { return dfrd.reject('errEditorNotFound'); } (function() { ta = $('') .on('input propertychange', stateChange); if (!editor || !editor.info || editor.info.useTextAreaEvent) { ta.on('keydown', function(e) { var code = e.keyCode, value, start; e.stopPropagation(); if (code == $.ui.keyCode.TAB) { e.preventDefault(); // insert tab on tab press if (this.setSelectionRange) { value = this.value; start = this.selectionStart; this.value = value.substr(0, start) + "\t" + value.substr(this.selectionEnd); start += 1; this.setSelectionRange(start, start); } } if (e.ctrlKey || e.metaKey) { // close on ctrl+w/q if (code == 'Q'.charCodeAt(0) || code == 'W'.charCodeAt(0)) { e.preventDefault(); cancel(); } if (code == 'S'.charCodeAt(0)) { e.preventDefault(); saveon(); } } }) .on('mouseenter', function(){this.focus();}); } ta.initEditArea = function(id, file, content) { // ta.hide() for performance tune. Need ta.show() in `load()` if use textarea node. ta.hide().val(content); this._setupSelEncoding(content); }; })(); } // extended function to setup selector of encoding for text editor ta._setupSelEncoding = function(content) { var heads = (encoding && encoding !== 'unknown')? [{value: encoding}] : [], wfake = $('').hide(), setSelW = function(init) { init && wfake.appendTo(selEncoding.parent()); wfake.empty().append($('').text(selEncoding.val())); selEncoding.width(wfake.width()); }; if (content === '' || ! encoding || encoding !== 'UTF-8') { heads.push({value: 'UTF-8'}); } selEncoding = getEncSelect(heads).on('touchstart', function(e) { // for touch punch event handler e.stopPropagation(); }).on('change', function() { // reload to change encoding if not edited changed().done(function(change) { if (! change && getContent() !== '') { cancel(); edit(file, selEncoding.val(), editor).fail(function(err) { err && fm.error(err); }); } }); setSelW(); }).on('mouseover', stateChange); ta.parent().next().prepend($('
      ').append(selEncoding)); setSelW(true); }; ta.data('hash', file.hash); if (extEditor) { ta.editor = extEditor; if (typeof extEditor.beforeclose === 'function') { opts.beforeclose = function() { return extEditor.beforeclose(ta[0], extEditor.instance); }; } if (typeof extEditor.init === 'function') { ta.initEditArea = extEditor.init; } if (typeof extEditor.getContent === 'function') { ta.getContent = extEditor.getContent; } } if (! ta.initEditArea) { ta.initEditArea = function() {}; } if (! ta.getContent) { ta.getContent = function() { return rtrim(ta.val()); }; } if (!editor || !editor.info || !editor.info.preventGet) { opts.buttons[fm.i18n('btnSave')] = saveon; opts.buttons[fm.i18n('btnSaveClose')] = savecl; opts.buttons[fm.i18n('btnSaveAs')] = saveAs; opts.buttons[fm.i18n('btnCancel')] = cancel; } if (editor && typeof editor.prepare === 'function') { editor.prepare(ta, opts, file); } dialogNode = self.fmDialog(ta, opts) .attr('id', id) .on('keydown keyup keypress', function(e) { e.stopPropagation(); }) .css({ overflow: 'hidden', minHeight: '7em' }) .addClass('elfinder-edit-editor') .closest('.ui-dialog') .on('changeType', function(e, data) { if (data.extention && data.mime) { var ext = data.extention, mime = data.mime, btnSet = $(this).children('.ui-dialog-buttonpane').children('.ui-dialog-buttonset'); btnSet.children('.elfinder-btncnt-0,.elfinder-btncnt-1').hide(); saveAsFile.name = fm.splitFileExtention(file.name)[0] + '.' + data.extention; saveAsFile.mime = data.mime; if (!data.keepEditor) { btnSet.children('.elfinder-btncnt-2').trigger('click'); } } }); // care to viewport scale change with mobile devices maxW = (fm.options.dialogContained? fm.getUI() : $(window)).width(); (dialogNode.width() > maxW) && dialogNode.width(maxW); return dfrd.promise(); }, /** * Get file content and * open dialog with textarea to edit file content * * @param String file hash * @return jQuery.Deferred **/ edit = function(file, convert, editor) { var hash = file.hash, opts = fm.options, dfrd = $.Deferred(), id = 'edit-'+fm.namespace+'-'+file.hash, d = fm.getUI().find('#'+id), conv = !convert? 0 : convert, noContent = false, req, error, res; if (d.length) { d.elfinderdialog('toTop'); return dfrd.resolve(); } if (!file.read || (!file.write && (!editor.info || !editor.info.converter))) { error = ['errOpen', file.name, 'errPerm']; return dfrd.reject(error); } if (editor && editor.info) { if (typeof editor.info.edit === 'function') { res = editor.info.edit.call(fm, file, editor); if (res.promise) { res.done(function() { dfrd.resolve(); }).fail(function(error) { dfrd.reject(error); }); } else { res? dfrd.resolve() : dfrd.reject(); } return dfrd; } noContent = editor.info.preventGet || editor.info.noContent; if (editor.info.urlAsContent || noContent) { req = $.Deferred(); if (editor.info.urlAsContent) { fm.url(hash, { async: true, onetime: true, temporary: true }).done(function(url) { req.resolve({content: url}); }); } else { req.resolve({}); } } else { if (conv) { file.encoding = conv; fm.cache(file, 'change'); } req = fm.request({ data : {cmd : 'get', target : hash, conv : conv, _t : file.ts}, options : {type: 'get', cache : true}, notify : {type : 'file', cnt : 1}, preventDefault : true }); } req.done(function(data) { var selEncoding, reg, m, res; if (data.doconv) { fm.confirm({ title : self.title, text : data.doconv === 'unknown'? 'confirmNonUTF8' : 'confirmConvUTF8', accept : { label : 'btnConv', callback : function() { dfrd = edit(file, selEncoding.val(), editor); } }, cancel : { label : 'btnCancel', callback : function() { dfrd.reject(); } }, optionsCallback : function(options) { options.create = function() { var base = $('
      '), head = {value: data.doconv}, detected; if (data.doconv === 'unknown') { head.caption = '-'; } selEncoding = getEncSelect([head]); $(this).next().find('.ui-dialog-buttonset') .prepend(base.append($('').append(selEncoding))); }; } }); } else { if (!noContent && fm.mimeIsText(file.mime)) { reg = new RegExp('^(data:'+file.mime.replace(/([.+])/g, '\\$1')+';base64,)', 'i'); if (!editor.info.dataScheme) { if (window.atob && (m = data.content.match(reg))) { data.content = atob(data.content.substr(m[1].length)); } } else { if (window.btoa && !data.content.match(reg)) { data.content = 'data:'+file.mime+';base64,'+btoa(data.content); } } } dialog(id, file, data.content, data.encoding, editor, data.toasts) .done(function(data) { dfrd.resolve(data); }) .progress(function(encoding, newHash, data, saveDfd) { var ta = this; if (newHash) { hash = newHash; } fm.request({ options : {type : 'post'}, data : { cmd : 'put', target : hash, encoding : encoding || data.encoding, content : data }, notify : {type : 'save', cnt : 1}, syncOnFail : true, preventFail : true, navigate : { target : 'changed', toast : { inbuffer : {msg: fm.i18n(['complete', fm.i18n('btnSave')])} } } }) .fail(function(error) { dfrd.reject(error); saveDfd.reject(); }) .done(function(data) { requestAnimationFrame(function(){ ta.trigger('focus'); ta.editor && ta.editor.focus(ta[0], ta.editor.instance); }); saveDfd.resolve(); }); }) .fail(function(error) { dfrd.reject(error); }); } }) .fail(function(error) { var err = fm.parseError(error); err = Array.isArray(err)? err[0] : err; if (file.encoding) { file.encoding = ''; fm.cache(file, 'change'); } (err !== 'errConvUTF8') && fm.sync(); dfrd.reject(error); }); } return dfrd.promise(); }, /** * Current editors of selected files * * @type Object */ editors = {}, /** * Fallback editor (Simple text editor) * * @type Object */ fallbackEditor = { // Simple Text (basic textarea editor) info : { id : 'textarea', name : 'TextArea', useTextAreaEvent : true }, load : function(textarea) { // trigger event 'editEditorPrepare' this.trigger('Prepare', { node: textarea, editorObj: void(0), instance: void(0), opts: {} }); textarea.setSelectionRange && textarea.setSelectionRange(0, 0); $(textarea).trigger('focus').show(); }, save : function(){} }, /** * Set current editors * * @param Object file object * @param Number cnt count of selected items * @return Void */ setEditors = function(file, cnt) { var mimeMatch = function(fileMime, editorMimes){ if (!editorMimes) { return fm.mimeIsText(fileMime); } else { if (editorMimes[0] === '*' || $.inArray(fileMime, editorMimes) !== -1) { return true; } var i, l; l = editorMimes.length; for (i = 0; i < l; i++) { if (fileMime.indexOf(editorMimes[i]) === 0) { return true; } } return false; } }, extMatch = function(fileName, editorExts){ if (!editorExts || !editorExts.length) { return true; } var ext = fileName.replace(/^.+\.([^.]+)|(.+)$/, '$1$2').toLowerCase(), i, l; l = editorExts.length; for (i = 0; i < l; i++) { if (ext === editorExts[i].toLowerCase()) { return true; } } return false; }, optEditors = self.options.editors || [], cwdWrite = fm.cwd().write; stored = fm.storage('storedEditors') || {}; editors = {}; if (!optEditors.length) { optEditors = [fallbackEditor]; } $.each(optEditors, function(i, editor) { var name; if ((cnt === 1 || !editor.info.single) && ((!editor.info || !editor.info.converter)? file.write : cwdWrite) && (file.size > 0 || (!editor.info.converter && editor.info.canMakeEmpty !== false && fm.mimesCanMakeEmpty[file.mime])) && (!editor.info.maxSize || file.size <= editor.info.maxSize) && mimeMatch(file.mime, editor.mimes || null) && extMatch(file.name, editor.exts || null) && typeof editor.load == 'function' && typeof editor.save == 'function') { name = editor.info.name? editor.info.name : ('Edit Code'); editor.id = editor.info.id? editor.info.id : ('editor' + i), editor.name = name; editor.i18n = fm.i18n(name); editors[editor.id] = editor; } }); return Object.keys(editors).length? true : false; }, store = function(mime, editor) { if (mime && editor) { if (!$.isPlainObject(stored)) { stored = {}; } stored[mime] = editor.id; fm.storage('storedEditors', stored); fm.trigger('selectfiles', {files : fm.selected()}); } }, useStoredEditor = function() { var d = fm.storage('useStoredEditor'); return d? (d > 0) : self.options.useStoredEditor; }, editorMaximized = function() { var d = fm.storage('editorMaximized'); return d? (d > 0) : self.options.editorMaximized; }, getSubMenuRaw = function(files, callback) { var subMenuRaw = []; $.each(editors, function(id, ed) { subMenuRaw.push( { label : fm.escape(ed.i18n), icon : ed.info && ed.info.icon? ed.info.icon : 'edit', options : { iconImg: ed.info && ed.info.iconImg? fm.baseUrl + ed.info.iconImg : void(0) }, callback : function() { store(files[0].mime, ed); callback && callback.call(ed); } } ); }); return subMenuRaw; }, getStoreId = function(name) { // for compatibility to previous version return name.toLowerCase().replace(/ +/g, ''); }, getStoredEditor = function(mime) { var name = stored[mime]; return name && Object.keys(editors).length? editors[getStoreId(name)] : void(0); }, infoRequest = function() { }, stored; // make public method this.getEncSelect = getEncSelect; this.shortcuts = [{ pattern : 'ctrl+e' }]; this.init = function() { var self = this, fm = this.fm, opts = this.options, cmdChecks = [], ccData, dfd; this.onlyMimes = this.options.mimes || []; fm.one('open', function() { // editors setup if (opts.editors && Array.isArray(opts.editors)) { fm.trigger('canMakeEmptyFile', {mimes: Object.keys(fm.storage('mkfileTextMimes') || {}).concat(opts.makeTextMimes || ['text/plain'])}); $.each(opts.editors, function(i, editor) { if (editor.info && editor.info.cmdCheck) { cmdChecks.push(editor.info.cmdCheck); } }); if (cmdChecks.length) { if (fm.api >= 2.1030) { dfd = fm.request({ data : { cmd: 'editor', name: cmdChecks, method: 'enabled' }, preventDefault : true }).done(function(d) { ccData = d; }).fail(function() { ccData = {}; }); } else { ccData = {}; dfd = $.Deferred().resolve(); } } else { dfd = $.Deferred().resolve(); } dfd.always(function() { if (ccData) { opts.editors = $.grep(opts.editors, function(e) { if (e.info && e.info.cmdCheck) { return ccData[e.info.cmdCheck]? true : false; } else { return true; } }); } $.each(opts.editors, function(i, editor) { if (editor.setup && typeof editor.setup === 'function') { editor.setup.call(editor, opts, fm); } if (!editor.disabled) { if (editor.mimes && Array.isArray(editor.mimes)) { mimesSingle = mimesSingle.concat(editor.mimes); if (!editor.info || !editor.info.single) { mimes = mimes.concat(editor.mimes); } } if (!allowAll && editor.mimes && editor.mimes[0] === '*') { allowAll = true; } if (!editor.info) { editor.info = {}; } if (editor.info.integrate) { fm.trigger('helpIntegration', Object.assign({cmd: 'edit'}, editor.info.integrate)); } if (editor.info.canMakeEmpty) { fm.trigger('canMakeEmptyFile', {mimes: Array.isArray(editor.info.canMakeEmpty)? editor.info.canMakeEmpty : editor.mimes}); } } }); mimesSingle = ($.uniqueSort || $.unique)(mimesSingle); mimes = ($.uniqueSort || $.unique)(mimes); opts.editors = $.grep(opts.editors, function(e) { return e.disabled? false : true; }); }); } }) .bind('select', function() { editors = null; }) .bind('contextmenucreate', function(e) { var file, editor, single = function(editor) { var title = self.title; fm.one('contextmenucreatedone', function() { self.title = title; }); self.title = fm.escape(editor.i18n); if (editor.info && editor.info.iconImg) { self.contextmenuOpts = { iconImg: fm.baseUrl + editor.info.iconImg }; } delete self.variants; }; self.contextmenuOpts = void(0); if (e.data.type === 'files' && self.enabled()) { file = fm.file(e.data.targets[0]); if (setEditors(file, e.data.targets.length)) { if (Object.keys(editors).length > 1) { if (!useStoredEditor() || !(editor = getStoredEditor(file.mime))) { delete self.extra; self.variants = []; $.each(editors, function(id, editor) { self.variants.push([{ editor: editor }, editor.i18n, editor.info && editor.info.iconImg? fm.baseUrl + editor.info.iconImg : 'edit']); }); } else { single(editor); self.extra = { icon: 'menu', node: $('') .attr({title: fm.i18n('select')}) .on('click touchstart', function(e){ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) { return; } var node = $(this); e.stopPropagation(); e.preventDefault(); fm.trigger('contextmenu', { raw: getSubMenuRaw(fm.selectedFiles(), function() { var hashes = fm.selected(); fm.exec('edit', hashes, {editor: this}); fm.trigger('selectfiles', {files : hashes}); }), x: node.offset().left, y: node.offset().top }); }) }; } } else { single(editors[Object.keys(editors)[0]]); delete self.extra; } } } }) .bind('canMakeEmptyFile', function(e) { if (e.data && e.data.resetTexts) { var defs = fm.arrayFlip(self.options.makeTextMimes || ['text/plain']), hides = self.getMkfileHides(); $.each((fm.storage('mkfileTextMimes') || {}), function(mime, type) { if (!defs[mime]) { delete fm.mimesCanMakeEmpty[mime]; delete hides[mime]; } }); fm.storage('mkfileTextMimes', null); if (Object.keys(hides).length) { fm.storage('mkfileHides', hides); } else { fm.storage('mkfileHides', null); } } }); }; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length; return cnt && filter(sel).length == cnt ? 0 : -1; }; this.exec = function(select, opts) { var fm = this.fm, files = filter(this.files(select)), hashes = $.map(files, function(f) { return f.hash; }), list = [], editor = opts && opts.editor? opts.editor : null, node = $(opts && opts._currentNode? opts._currentNode : fm.cwdHash2Elm(hashes[0])), getEditor = function() { var dfd = $.Deferred(), storedId; if (!editor && Object.keys(editors).length > 1) { if (useStoredEditor() && (editor = getStoredEditor(files[0].mime))) { return dfd.resolve(editor); } fm.trigger('contextmenu', { raw: getSubMenuRaw(files, function() { dfd.resolve(this); }), x: node.offset().left, y: node.offset().top + 22, opened: function() { fm.one('closecontextmenu',function() { requestAnimationFrame(function() { if (dfd.state() === 'pending') { dfd.reject(); } }); }); } }); fm.trigger('selectfiles', {files : hashes}); return dfd; } else { Object.keys(editors).length > 1 && editor && store(files[0].mime, editor); return dfd.resolve(editor? editor : (Object.keys(editors).length? editors[Object.keys(editors)[0]] : null)); } }, dfrd = $.Deferred(), file; if (editors === null) { setEditors(files[0], hashes.length); } if (!node.length) { node = fm.getUI('cwd'); } getEditor().done(function(editor) { while ((file = files.shift())) { list.push(edit(file, (file.encoding || void(0)), editor).fail(function(error) { error && fm.error(error); })); } if (list.length) { $.when.apply(null, list).done(function() { dfrd.resolve(); }).fail(function() { dfrd.reject(); }); } else { dfrd.reject(); } }).fail(function() { dfrd.reject(); }); return dfrd; }; this.getMkfileHides = function() { return fm.storage('mkfileHides') || fm.arrayFlip(self.options.mkfileHideMimes || []); }; }; application/library/js/commands/paste.js000064400000024070146731177160014422 0ustar00/** * @class elFinder command "paste" * Paste filesfrom clipboard into directory. * If files pasted in its parent directory - files duplicates will created * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.paste = function() { "use strict"; this.updateOnSelect = false; this.handlers = { changeclipboard : function() { this.update(); } }; this.shortcuts = [{ pattern : 'ctrl+v shift+insert' }]; this.getstate = function(dst) { if (this._disabled) { return -1; } if (dst) { if (Array.isArray(dst)) { if (dst.length != 1) { return -1; } dst = this.fm.file(dst[0]); } } else { dst = this.fm.cwd(); } return this.fm.clipboard().length && dst.mime == 'directory' && dst.write ? 0 : -1; }; this.exec = function(select, cOpts) { var self = this, fm = self.fm, opts = cOpts || {}, dst = select ? this.files(select)[0] : fm.cwd(), files = fm.clipboard(), cnt = files.length, cut = cnt ? files[0].cut : false, cmd = opts._cmd? opts._cmd : (cut? 'move' : 'copy'), error = 'err' + cmd.charAt(0).toUpperCase() + cmd.substr(1), fpaste = [], fcopy = [], dfrd = $.Deferred() .fail(function(error) { error && fm.error(error); }) .always(function() { fm.unlockfiles({files : $.map(files, function(f) { return f.hash; })}); }), copy = function(files) { return files.length && fm._commands.duplicate ? fm.exec('duplicate', files) : $.Deferred().resolve(); }, paste = function(files) { var dfrd = $.Deferred(), existed = [], hashes = {}, intersect = function(files, names) { var ret = [], i = files.length; while (i--) { $.inArray(files[i].name, names) !== -1 && ret.unshift(i); } return ret; }, confirm = function(ndx) { var i = existed[ndx], file = files[i], last = ndx == existed.length-1; if (!file) { return; } fm.confirm({ title : fm.i18n(cmd + 'Files'), text : ['errExists', file.name, cmd === 'restore'? 'confirmRest' : 'confirmRepl'], all : !last, accept : { label : 'btnYes', callback : function(all) { !last && !all ? confirm(++ndx) : paste(files); } }, reject : { label : 'btnNo', callback : function(all) { var i; if (all) { i = existed.length; while (ndx < i--) { files[existed[i]].remove = true; } } else { files[existed[ndx]].remove = true; } !last && !all ? confirm(++ndx) : paste(files); } }, cancel : { label : 'btnCancel', callback : function() { dfrd.resolve(); } }, buttons : [ { label : 'btnBackup', callback : function(all) { var i; if (all) { i = existed.length; while (ndx < i--) { files[existed[i]].rename = true; } } else { files[existed[ndx]].rename = true; } !last && !all ? confirm(++ndx) : paste(files); } } ] }); }, valid = function(names) { var exists = {}, existedArr; if (names) { if (Array.isArray(names)) { if (names.length) { if (typeof names[0] == 'string') { // elFinder <= 2.1.6 command `is` results existed = intersect(files, names); } else { $.each(names, function(i, v) { exists[v.name] = v.hash; }); existed = intersect(files, $.map(exists, function(h, n) { return n; })); $.each(files, function(i, file) { if (exists[file.name]) { hashes[exists[file.name]] = file.name; } }); } } } else { existedArr = []; existed = $.map(names, function(n) { if (typeof n === 'string') { return n; } else { // support to >=2.1.11 plugin Normalizer, Sanitizer existedArr = existedArr.concat(n); return false; } }); if (existedArr.length) { existed = existed.concat(existedArr); } existed = intersect(files, existed); hashes = names; } } existed.length ? confirm(0) : paste(files); }, paste = function(selFiles) { var renames = [], files = $.grep(selFiles, function(file) { if (file.rename) { renames.push(file.name); } return !file.remove ? true : false; }), cnt = files.length, groups = {}, args = [], targets, reqData; if (!cnt) { return dfrd.resolve(); } targets = $.map(files, function(f) { return f.hash; }); reqData = {cmd : 'paste', dst : dst.hash, targets : targets, cut : cut ? 1 : 0, renames : renames, hashes : hashes, suffix : fm.options.backupSuffix}; if (fm.api < 2.1) { reqData.src = files[0].phash; } fm.request({ data : reqData, notify : {type : cmd, cnt : cnt}, cancel : true, navigate : { toast : opts.noToast? {} : { inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmd' + cmd)]), action: { cmd: 'open', msg: 'cmdopendir', data: [dst.hash], done: 'select', cwdNot: dst.hash }} } } }) .done(function(data) { var dsts = {}, added = data.added && data.added.length? data.added : null; if (cut && added) { // undo/redo $.each(files, function(i, f) { var phash = f.phash, srcHash = function(name) { var hash; $.each(added, function(i, f) { if (f.name === name) { hash = f.hash; return false; } }); return hash; }, shash = srcHash(f.name); if (shash) { if (dsts[phash]) { dsts[phash].push(shash); } else { dsts[phash] = [ shash ]; } } }); if (Object.keys(dsts).length) { data.undo = { cmd : 'move', callback : function() { var reqs = []; $.each(dsts, function(dst, targets) { reqs.push(fm.request({ data : {cmd : 'paste', dst : dst, targets : targets, cut : 1}, notify : {type : 'undo', cnt : targets.length} })); }); return $.when.apply(null, reqs); } }; data.redo = { cmd : 'move', callback : function() { return fm.request({ data : reqData, notify : {type : 'redo', cnt : cnt} }); } }; } } dfrd.resolve(data); }) .fail(function(flg) { dfrd.reject(); if (flg === 0) { // canceling fm.sync(); } }) .always(function() { fm.unlockfiles({files : files}); }); }, internames; if (!fm.isCommandEnabled(self.name, dst.hash) || !files.length) { return dfrd.resolve(); } if (fm.oldAPI) { paste(files); } else { if (!fm.option('copyOverwrite', dst.hash)) { paste(files); } else { internames = $.map(files, function(f) { return f.name; }); dst.hash == fm.cwd().hash ? valid($.map(fm.files(), function(file) { return file.phash == dst.hash ? {hash: file.hash, name: file.name} : null; })) : fm.request({ data : {cmd : 'ls', target : dst.hash, intersect : internames}, notify : {type : 'prepare', cnt : 1, hideCnt : true}, preventFail : true }) .always(function(data) { valid(data.list); }); } } return dfrd; }, parents, fparents, cutDfrd; if (!cnt || !dst || dst.mime != 'directory') { return dfrd.reject(); } if (!dst.write) { return dfrd.reject([error, files[0].name, 'errPerm']); } parents = fm.parents(dst.hash); $.each(files, function(i, file) { if (!file.read) { return !dfrd.reject([error, file.name, 'errPerm']); } if (cut && file.locked) { return !dfrd.reject(['errLocked', file.name]); } if ($.inArray(file.hash, parents) !== -1) { return !dfrd.reject(['errCopyInItself', file.name]); } if (file.mime && file.mime !== 'directory' && ! fm.uploadMimeCheck(file.mime, dst.hash)) { return !dfrd.reject([error, file.name, 'errUploadMime']); } fparents = fm.parents(file.hash); fparents.pop(); if ($.inArray(dst.hash, fparents) !== -1) { if ($.grep(fparents, function(h) { var d = fm.file(h); return d.phash == dst.hash && d.name == file.name ? true : false; }).length) { return !dfrd.reject(['errReplByChild', file.name]); } } if (file.phash == dst.hash) { fcopy.push(file.hash); } else { fpaste.push({ hash : file.hash, phash : file.phash, name : file.name }); } }); if (dfrd.state() === 'rejected') { return dfrd; } cutDfrd = $.Deferred(); if (cut && self.options.moveConfirm) { fm.confirm({ title : 'moveFiles', text : fm.i18n('confirmMove', dst.i18 || dst.name), accept : { label : 'btnYes', callback : function() { cutDfrd.resolve(); } }, cancel : { label : 'btnCancel', callback : function() { cutDfrd.reject(); } } }); } else { cutDfrd.resolve(); } cutDfrd.done(function() { $.when( copy(fcopy), paste(fpaste) ) .done(function(cr, pr) { dfrd.resolve(pr && pr.undo? pr : void(0)); }) .fail(function() { dfrd.reject(); }) .always(function() { cut && fm.clipboard([]); }); }).fail(function() { dfrd.reject(); }); return dfrd; }; }; application/library/js/commands/copy.js000064400000001712146731177160014256 0ustar00/** * @class elFinder command "copy". * Put files in filemanager clipboard. * * @type elFinder.command * @author Dmitry (dio) Levashov */ elFinder.prototype.commands.copy = function() { "use strict"; this.shortcuts = [{ pattern : 'ctrl+c ctrl+insert' }]; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length, filter = function(files) { var fres = true; return $.grep(files, function(f) { fres = fres && f.read ? true : false; return fres; }); }; return cnt && filter(sel).length == cnt ? 0 : -1; }; this.exec = function(hashes) { var fm = this.fm, dfrd = $.Deferred() .fail(function(error) { fm.error(error); }); $.each(this.files(hashes), function(i, file) { if (! file.read) { return !dfrd.reject(['errCopy', file.name, 'errPerm']); } }); return dfrd.state() == 'rejected' ? dfrd : dfrd.resolve(fm.clipboard(this.hashes(hashes))); }; }; application/library/js/commands/view.js000064400000005440146731177160014260 0ustar00/** * @class elFinder command "view" * Change current directory view (icons/list) * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.view = function() { "use strict"; var self = this, fm = this.fm, subMenuRaw; this.value = fm.viewType; this.alwaysEnabled = true; this.updateOnSelect = false; this.options = { ui : 'viewbutton'}; this.getstate = function() { return 0; }; this.extra = { icon: 'menu', node: $('') .attr({title: fm.i18n('viewtype')}) .on('click touchstart', function(e){ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) { return; } var node = $(this); e.stopPropagation(); e.preventDefault(); fm.trigger('contextmenu', { raw: getSubMenuRaw(), x: node.offset().left, y: node.offset().top }); }) }; this.exec = function() { var self = this, value = this.value == 'list' ? 'icons' : 'list'; fm.storage('view', value); return fm.lazy(function() { fm.viewchange(); self.update(void(0), value); this.resolve(); }); }; fm.bind('init', function() { subMenuRaw = (function() { var cwd = fm.getUI('cwd'), raws = [], sizeNames = fm.options.uiOptions.cwd.iconsView.sizeNames, max = fm.options.uiOptions.cwd.iconsView.sizeMax, i, size; for (i = 0; i <= max; i++) { raws.push( { label : fm.i18n(sizeNames[i] || ('Size-' + i + ' icons')), icon : 'view', callback : (function(s) { return function() { cwd.trigger('iconpref', {size: s}); fm.storage('iconsize', s); if (self.value === 'list') { self.exec(); } }; })(i) } ); } raws.push('|'); raws.push( { label : fm.i18n('viewlist'), icon : 'view-list', callback : function() { if (self.value !== 'list') { self.exec(); } } } ); return raws; })(); }).bind('contextmenucreate', function() { self.extra = { icon: 'menu', node: $('') .attr({title: fm.i18n('cmdview')}) .on('click touchstart', function(e){ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) { return; } var node = $(this), raw = subMenuRaw.concat(), idx, i; if (self.value === 'list') { idx = subMenuRaw.length - 1; } else { idx = parseInt(fm.storage('iconsize') || 0); } for (i = 0; i < subMenuRaw.length; i++) { if (subMenuRaw[i] !== '|') { subMenuRaw[i].options = (i === idx? {'className': 'ui-state-active'} : void(0)) ; } } e.stopPropagation(); e.preventDefault(); fm.trigger('contextmenu', { raw: subMenuRaw, x: node.offset().left, y: node.offset().top }); }) }; }); }; application/library/js/commands/open.js000064400000015361146731177160014252 0ustar00/** * @class elFinder command "open" * Enter folder or open files in new windows * * @author Dmitry (dio) Levashov **/ (elFinder.prototype.commands.open = function() { "use strict"; var fm = this.fm, self = this; this.alwaysEnabled = true; this.noChangeDirOnRemovedCwd = true; this._handlers = { dblclick : function(e) { var arg = e.data && e.data.file? [ e.data.file ]: void(0); if (self.getstate(arg) === 0) { e.preventDefault(); fm.exec('open', arg); } }, 'select enable disable reload' : function(e) { this.update(e.type == 'disable' ? -1 : void(0)); } }; this.shortcuts = [{ pattern : 'ctrl+down numpad_enter'+(fm.OS != 'mac' && ' enter') }]; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length, filter = function(files) { var fres = true; return $.grep(files, function(file) { fres = fres && file.mime == 'directory' || ! file.read ? false : true; return fres; }); }; return cnt == 1 ? (sel[0].read ? 0 : -1) : (cnt && !fm.UA.Mobile) ? ($.grep(sel, function(file) { return file.mime == 'directory' || ! file.read ? false : true;}).length == cnt ? 0 : -1) : -1; }; this.exec = function(hashes, cOpts) { var dfrd = $.Deferred().fail(function(error) { error && fm.error(error); }), files = this.files(hashes), cnt = files.length, thash = (typeof cOpts == 'object')? cOpts.thash : false, opts = this.options, into = opts.into || 'window', file, url, s, w, imgW, imgH, winW, winH, reg, link, html5dl, inline, selAct, cmd; if (!cnt && !thash) { { return dfrd.reject(); } } // open folder if (thash || (cnt == 1 && (file = files[0]) && file.mime == 'directory')) { if (!thash && file && !file.read) { return dfrd.reject(['errOpen', file.name, 'errPerm']); } else { if (fm.keyState.ctrlKey && (fm.keyState.shiftKey || typeof fm.options.getFileCallback !== 'function')) { if (fm.getCommand('opennew')) { return fm.exec('opennew', [thash? thash : file.hash]); } } return fm.request({ data : {cmd : 'open', target : thash || file.hash}, notify : {type : 'open', cnt : 1, hideCnt : true}, syncOnFail : true, lazy : false }); } } files = $.grep(files, function(file) { return file.mime != 'directory' ? true : false; }); // nothing to open or files and folders selected - do nothing if (cnt != files.length) { return dfrd.reject(); } var doOpen = function() { var openCB = function(url) { var link = $('').hide().appendTo($('body')); if (fm.UA.Mobile || !inline) { if (html5dl) { if (!inline) { link.attr('download', file.name); } else { link.attr('target', '_blank'); } link.attr('href', url).get(0).click(); } else { wnd = window.open(url); if (!wnd) { return dfrd.reject('errPopup'); } } } else { getOnly = (typeof opts.method === 'string' && opts.method.toLowerCase() === 'get'); if (!getOnly && url.indexOf(fm.options.url) === 0 && fm.customData && Object.keys(fm.customData).length // Since playback by POST request can not be done in Chrome, media allows GET request && !file.mime.match(/^(?:video|audio)/) ) { // Send request as 'POST' method to hide custom data at location bar url = ''; } if (into === 'window') { // set window size for image if set imgW = winW = Math.round(2 * screen.availWidth / 3); imgH = winH = Math.round(2 * screen.availHeight / 3); if (parseInt(file.width) && parseInt(file.height)) { imgW = parseInt(file.width); imgH = parseInt(file.height); } else if (file.dim) { s = file.dim.split('x'); imgW = parseInt(s[0]); imgH = parseInt(s[1]); } if (winW >= imgW && winH >= imgH) { winW = imgW; winH = imgH; } else { if ((imgW - winW) > (imgH - winH)) { winH = Math.round(imgH * (winW / imgW)); } else { winW = Math.round(imgW * (winH / imgH)); } } w = 'width='+winW+',height='+winH; wnd = window.open(url, target, w + ',top=50,left=50,scrollbars=yes,resizable=yes,titlebar=no'); } else { if (into === 'tabs') { target = file.hash; } wnd = window.open('about:blank', target); } if (!wnd) { return dfrd.reject('errPopup'); } if (url === '') { var form = document.createElement("form"); form.action = fm.options.url; form.method = 'POST'; form.target = target; form.style.display = 'none'; var params = Object.assign({}, fm.customData, { cmd: 'file', target: file.hash, _t: file.ts || parseInt(+new Date()/1000) }); $.each(params, function(key, val) { var input = document.createElement("input"); input.name = key; input.value = val; form.appendChild(input); }); document.body.appendChild(form); form.submit(); } else if (into !== 'window') { wnd.location = url; } $(wnd).trigger('focus'); } link.remove(); }, wnd, target, getOnly; try { reg = new RegExp(fm.option('dispInlineRegex'), 'i'); } catch(e) { reg = false; } // open files html5dl = (typeof $('').get(0).download === 'string'); cnt = files.length; while (cnt--) { target = 'elf_open_window'; file = files[cnt]; if (!file.read) { return dfrd.reject(['errOpen', file.name, 'errPerm']); } inline = (reg && file.mime.match(reg)); fm.openUrl(file.hash, !inline, openCB); } return dfrd.resolve(hashes); }; if (cnt > 1) { fm.confirm({ title: 'openMulti', text : ['openMultiConfirm', cnt + ''], accept : { label : 'cmdopen', callback : function() { doOpen(); } }, cancel : { label : 'btnCancel', callback : function() { dfrd.reject(); } }, buttons : (fm.getCommand('zipdl') && fm.isCommandEnabled('zipdl', fm.cwd().hash))? [ { label : 'cmddownload', callback : function() { fm.exec('download', hashes); dfrd.reject(); } } ] : [] }); } else { selAct = fm.storage('selectAction') || opts.selectAction; if (selAct) { $.each(selAct.split('/'), function() { var cmdName = this.valueOf(); if (cmdName !== 'open' && (cmd = fm.getCommand(cmdName)) && cmd.enabled()) { return false; } cmd = null; }); if (cmd) { return fm.exec(cmd.name); } } doOpen(); } return dfrd; }; }).prototype = { forceLoad : true }; // this is required command application/library/js/commands/preference.js000064400000051637146731177160015435 0ustar00/** * @class elFinder command "preference" * "Preference" dialog * * @author Naoki Sawada **/ elFinder.prototype.commands.preference = function() { var self = this, fm = this.fm, r = 'replace', tab = '
    • {title}
    • ', base = $('
      '), ul = $('
        '), tabs = $('
        '), sep = '
        ', selfUrl = $('base').length? document.location.href.replace(/#.*$/, '') : '', selectTab = function(tab) { $('#'+fm.namespace+'-preference-tab-'+tab).trigger('mouseover').trigger('click'); openTab = tab; }, clTabActive = fm.res('class', 'tabsactive'), build = function() { var cats = self.options.categories || { 'language' : ['language'], 'theme' : ['theme'], 'toolbar' : ['toolbarPref'], 'workspace' : ['iconSize','columnPref', 'selectAction', 'makefileTypes', 'useStoredEditor', 'editorMaximized', 'useFullscreen', 'showHidden'], 'dialog' : ['autoFocusDialog'], 'selectionInfo' : ['infoItems', 'hashChecker'], 'reset' : ['clearBrowserData'], 'all' : true }, forms = self.options.prefs || ['language', 'theme', 'toolbarPref', 'iconSize', 'columnPref', 'selectAction', 'makefileTypes', 'useStoredEditor', 'editorMaximized', 'useFullscreen', 'showHidden', 'infoItems', 'hashChecker', 'autoFocusDialog', 'clearBrowserData']; if (!fm.cookieEnabled) { delete cats.language; } forms = fm.arrayFlip(forms, true); if (fm.options.getFileCallback) { delete forms.selectAction; } if (!fm.UA.Fullscreen) { delete forms.useFullscreen; } forms.language && (forms.language = (function() { var langSel = $('').on('change', function() { var lang = $(this).val(); fm.storage('lang', lang); $('#'+fm.id).elfinder('reload'); }), optTags = [], langs = self.options.langs || { ar: 'العربية', bg: 'Български', ca: 'Català', cs: 'Čeština', da: 'Dansk', de: 'Deutsch', el: 'Ελληνικά', en: 'English', es: 'Español', fa: 'فارسی', fo: 'Føroyskt', fr: 'Français', fr_CA: 'Français (Canada)', he: 'עברית', hr: 'Hrvatski', hu: 'Magyar', id: 'Bahasa Indonesia', it: 'Italiano', ja: '日本語', ko: '한국어', nl: 'Nederlands', no: 'Norsk', pl: 'Polski', pt_BR: 'Português', ro: 'Română', ru: 'Pусский', si: 'සිංහල', sk: 'Slovenčina', sl: 'Slovenščina', sr: 'Srpski', sv: 'Svenska', tr: 'Türkçe', ug_CN: 'ئۇيغۇرچە', uk: 'Український', vi: 'Tiếng Việt', zh_CN: '简体中文', zh_TW: '正體中文' }; if (!fm.cookieEnabled) { return $(); } $.each(langs, function(lang, name) { optTags.push(''); }); return langSel.append(optTags.join('')).val(fm.lang); })()); forms.theme && (forms.theme = (function() { var cnt = fm.options.themes? Object.keys(fm.options.themes).length : 0; if (cnt === 0 || (cnt === 1 && fm.options.themes.default)) { return null; } var themeSel = $('').on('change', function() { var theme = $(this).val(); fm.changeTheme(theme).storage('theme', theme); }), optTags = [], tpl = { image: '', link: '$2', data: '
        $1
        $2
        ' }, items = ['image', 'description', 'author', 'email', 'license'], render = function(key, data) { }, defBtn = $('').text(fm.i18n('default')).on('click', function(e) { themeSel.val('default').trigger('change'); }), list = $('
        ').on('click', 'button', function() { var val = $(this).data('themeid'); themeSel.val(val).trigger('change'); }); if (!fm.options.themes.default) { themeSel.append(''); } $.each(fm.options.themes, function(id, val) { var opt = $(''), dsc = $('
        '+fm.i18n(id)+'
        '), tm; themeSel.append(opt); list.append(dsc); tm = setTimeout(function() { dsc.find('span.elfinder-spinner').replaceWith(fm.i18n(['errRead', id])); }, 10000); fm.getTheme(id).always(function() { tm && clearTimeout(tm); }).done(function(data) { var link, val = $(), dl = $('
        '); link = data.link? tpl.link.replace(/\$1/g, data.link).replace(/\$3/g, fm.i18n('website')) : '$2'; if (data.name) { opt.html(fm.i18n(data.name)); } dsc.children('legend').html(link.replace(/\$2/g, fm.i18n(data.name) || id)); $.each(items, function(i, key) { var t = tpl[key] || tpl.data, elm; if (data[key]) { elm = t.replace(/\$0/g, fm.escape(key)).replace(/\$1/g, fm.i18n(key)).replace(/\$2/g, fm.i18n(data[key])); if (key === 'image' && data.link) { elm = $(elm).on('click', function() { themeSel.val(id).trigger('change'); }).attr('title', fm.i18n('select')); } dl.append(elm); } }); val = val.add(dl); val = val.add($('
        ').append($('').data('themeid', id).html(fm.i18n('select')))); dsc.find('span.elfinder-spinner').replaceWith(val); }).fail(function() { dsc.find('span.elfinder-spinner').replaceWith(fm.i18n(['errRead', id])); }); }); return $('
        ').append(themeSel.val(fm.theme && fm.theme.id? fm.theme.id : 'default'), defBtn, list); })()); forms.toolbarPref && (forms.toolbarPref = (function() { var pnls = $.map(fm.options.uiOptions.toolbar, function(v) { return $.isArray(v)? v : null; }), tags = [], hides = fm.storage('toolbarhides') || {}; $.each(pnls, function() { var cmd = this, name = fm.i18n('cmd'+cmd); if (name === 'cmd'+cmd) { name = fm.i18n(cmd); } tags.push(''); }); return $(tags.join(' ')).on('change', 'input', function() { var v = $(this).val(), o = $(this).is(':checked'); if (!o && !hides[v]) { hides[v] = true; } else if (o && hides[v]) { delete hides[v]; } fm.storage('toolbarhides', hides); fm.trigger('toolbarpref'); }); })()); forms.iconSize && (forms.iconSize = (function() { var max = fm.options.uiOptions.cwd.iconsView.sizeMax || 3, size = fm.storage('iconsize') || fm.options.uiOptions.cwd.iconsView.size || 0, sld = $('
        ').slider({ classes: { 'ui-slider-handle': 'elfinder-tabstop', }, value: size, max: max, slide: function(e, ui) { fm.getUI('cwd').trigger('iconpref', {size: ui.value}); }, change: function(e, ui) { fm.storage('iconsize', ui.value); } }); fm.getUI('cwd').on('iconpref', function(e, data) { sld.slider('option', 'value', data.size); }); return sld; })()); forms.columnPref && (forms.columnPref = (function() { var cols = fm.options.uiOptions.cwd.listView.columns, tags = [], hides = fm.storage('columnhides') || {}; $.each(cols, function() { var key = this, name = fm.getColumnName(key); tags.push(''); }); return $(tags.join(' ')).on('change', 'input', function() { var v = $(this).val(), o = $(this).is(':checked'); if (!o && !hides[v]) { hides[v] = true; } else if (o && hides[v]) { delete hides[v]; } fm.storage('columnhides', hides); fm.trigger('columnpref', { repaint: true }); }); })()); forms.selectAction && (forms.selectAction = (function() { var actSel = $('').on('change', function() { var act = $(this).val(); fm.storage('selectAction', act === 'default'? null : act); }), optTags = [], acts = self.options.selectActions, defAct = fm.getCommand('open').options.selectAction || 'open'; if ($.inArray(defAct, acts) === -1) { acts.unshift(defAct); } $.each(acts, function(i, act) { var names = $.map(act.split('/'), function(cmd) { var name = fm.i18n('cmd'+cmd); if (name === 'cmd'+cmd) { name = fm.i18n(cmd); } return name; }); optTags.push(''); }); return actSel.append(optTags.join('')).val(fm.storage('selectAction') || defAct); })()); forms.makefileTypes && (forms.makefileTypes = (function() { var hides = fm.getCommand('edit').getMkfileHides(), getTag = function() { var tags = []; // re-assign hides hides = fm.getCommand('edit').getMkfileHides(); $.each(fm.mimesCanMakeEmpty, function(mime, type) { var name = fm.getCommand('mkfile').getTypeName(mime, type); tags.push(''); }); return tags.join(' '); }, elm = $('
        ').on('change', 'input', function() { var v = $(this).val(), o = $(this).is(':checked'); if (!o && !hides[v]) { hides[v] = true; } else if (o && hides[v]) { delete hides[v]; } fm.storage('mkfileHides', hides); fm.trigger('canMakeEmptyFile'); }).append(getTag()), add = $('
        ').append( $('').on('keydown', function(e) { (e.keyCode === $.ui.keyCode.ENTER) && $(this).next().trigger('click'); }), $('').html(fm.i18n('add')).on('click', function() { var input = $(this).prev(), val = input.val(), uiToast = fm.getUI('toast'), err = function() { uiToast.appendTo(input.closest('.ui-dialog')); fm.toast({ msg: fm.i18n('errUsupportType'), mode: 'warning', onHidden: function() { uiToast.children().length === 1 && uiToast.appendTo(fm.getUI()); } }); input.trigger('focus'); return false; }, tmpMimes; if (!val.match(/\//)) { val = fm.arrayFlip(fm.mimeTypes)[val]; if (!val) { return err(); } input.val(val); } if (!fm.mimeIsText(val) || !fm.mimeTypes[val]) { return err(); } fm.trigger('canMakeEmptyFile', {mimes: [val], unshift: true}); tmpMimes = {}; tmpMimes[val] = fm.mimeTypes[val]; fm.storage('mkfileTextMimes', Object.assign(tmpMimes, fm.storage('mkfileTextMimes') || {})); input.val(''); uiToast.appendTo(input.closest('.ui-dialog')); fm.toast({ msg: fm.i18n(['complete', val + ' (' + tmpMimes[val] + ')']), onHidden: function() { uiToast.children().length === 1 && uiToast.appendTo(fm.getUI()); } }); }), $('').html(fm.i18n('reset')).on('click', function() { fm.one('canMakeEmptyFile', {done: function() { elm.empty().append(getTag()); }}); fm.trigger('canMakeEmptyFile', {resetTexts: true}); }) ), tm; fm.bind('canMakeEmptyFile', {done: function(e) { if (e.data && e.data.mimes && e.data.mimes.length) { elm.empty().append(getTag()); } }}); return $('
        ').append(elm, add); })()); forms.useStoredEditor && (forms.useStoredEditor = $('').prop('checked', (function() { var s = fm.storage('useStoredEditor'); return s? (s > 0) : fm.options.commandsOptions.edit.useStoredEditor; })()).on('change', function(e) { fm.storage('useStoredEditor', $(this).is(':checked')? 1 : -1); })); forms.editorMaximized && (forms.editorMaximized = $('').prop('checked', (function() { var s = fm.storage('editorMaximized'); return s? (s > 0) : fm.options.commandsOptions.edit.editorMaximized; })()).on('change', function(e) { fm.storage('editorMaximized', $(this).is(':checked')? 1 : -1); })); forms.useFullscreen && (forms.useFullscreen = $('').prop('checked', (function() { var s = fm.storage('useFullscreen'); return s? (s > 0) : fm.options.commandsOptions.fullscreen.mode === 'screen'; })()).on('change', function(e) { fm.storage('useFullscreen', $(this).is(':checked')? 1 : -1); })); if (forms.showHidden) { (function() { var setTitle = function() { var s = fm.storage('hide'), t = [], v; if (s && s.items) { $.each(s.items, function(h, n) { t.push(fm.escape(n)); }); } elms.prop('disabled', !t.length)[t.length? 'removeClass' : 'addClass']('ui-state-disabled'); v = t.length? t.join('\n') : ''; forms.showHidden.attr('title',v); useTooltip && forms.showHidden.tooltip('option', 'content', v.replace(/\n/g, '
        ')).tooltip('close'); }, chk = $('').prop('checked', (function() { var s = fm.storage('hide'); return s && s.show; })()).on('change', function(e) { var o = {}; o[$(this).is(':checked')? 'show' : 'hide'] = true; fm.exec('hide', void(0), o); }), btn = $('').append(fm.i18n('reset')).on('click', function() { fm.exec('hide', void(0), {reset: true}); $(this).parent().find('input:first').prop('checked', false); setTitle(); }), elms = $().add(chk).add(btn), useTooltip; forms.showHidden = $('
        ').append(chk, btn); fm.bind('hide', function(e) { var d = e.data; if (!d.opts || (!d.opts.show && !d.opts.hide)) { setTitle(); } }); if (fm.UA.Mobile && $.fn.tooltip) { useTooltip = true; forms.showHidden.tooltip({ classes: { 'ui-tooltip': 'elfinder-ui-tooltip ui-widget-shadow' }, tooltipClass: 'elfinder-ui-tooltip ui-widget-shadow', track: true }).css('user-select', 'none'); btn.css('user-select', 'none'); } setTitle(); })(); } forms.infoItems && (forms.infoItems = (function() { var items = fm.getCommand('info').items, tags = [], hides = fm.storage('infohides') || fm.arrayFlip(fm.options.commandsOptions.info.hideItems, true); $.each(items, function() { var key = this, name = fm.i18n(key); tags.push(''); }); return $(tags.join(' ')).on('change', 'input', function() { var v = $(this).val(), o = $(this).is(':checked'); if (!o && !hides[v]) { hides[v] = true; } else if (o && hides[v]) { delete hides[v]; } fm.storage('infohides', hides); fm.trigger('infopref', { repaint: true }); }); })()); forms.hashChecker && fm.hashCheckers.length && (forms.hashChecker = (function() { var tags = [], enabled = fm.arrayFlip(fm.storage('hashchekcer') || fm.options.commandsOptions.info.showHashAlgorisms, true); $.each(fm.hashCheckers, function() { var cmd = this, name = fm.i18n(cmd); tags.push(''); }); return $(tags.join(' ')).on('change', 'input', function() { var v = $(this).val(), o = $(this).is(':checked'); if (o) { enabled[v] = true; } else if (enabled[v]) { delete enabled[v]; } fm.storage('hashchekcer', $.grep(fm.hashCheckers, function(v) { return enabled[v]; })); }); })()); forms.autoFocusDialog && (forms.autoFocusDialog = $('').prop('checked', (function() { var s = fm.storage('autoFocusDialog'); return s? (s > 0) : fm.options.uiOptions.dialog.focusOnMouseOver; })()).on('change', function(e) { fm.storage('autoFocusDialog', $(this).is(':checked')? 1 : -1); })); forms.clearBrowserData && (forms.clearBrowserData = $('').text(fm.i18n('reset')).button().on('click', function(e) { e.preventDefault(); fm.storage(); $('#'+fm.id).elfinder('reload'); })); $.each(cats, function(id, prefs) { var dls, found; if (prefs === true) { found = 1; } else if (prefs) { dls = $(); $.each(prefs, function(i, n) { var f, title, chks = '', cbox; if (f = forms[n]) { found = 2; title = fm.i18n(n); cbox = $(f).filter('input[type="checkbox"]'); if (!cbox.length) { cbox = $(f).find('input[type="checkbox"]'); } if (cbox.length === 1) { if (!cbox.attr('id')) { cbox.attr('id', 'elfinder-preference-'+n+'-checkbox'); } title = ''; } else if (cbox.length > 1) { chks = ' elfinder-preference-checkboxes'; } dls = dls.add($('
        '+title+'
        ')).add($('
        ').append(f)); } }); } if (found) { ul.append(tab[r](/\{id\}/g, id)[r](/\{title\}/, fm.i18n(id))[r](/\{class\}/, openTab === id? 'elfinder-focus' : '')); if (found === 2) { tabs.append( $('
        ') .hide() .append($('
        ').append(dls)) ); } } }); ul.on('click', 'a', function(e) { var t = $(e.target), h = t.attr('href'); e.preventDefault(); e.stopPropagation(); ul.children().removeClass(clTabActive); t.removeClass('ui-state-hover').parent().addClass(clTabActive); if (h.match(/all$/)) { tabs.addClass('elfinder-preference-taball').children().show(); } else { tabs.removeClass('elfinder-preference-taball').children().hide(); $(h).show(); } }).on('focus blur', 'a', function(e) { $(this).parent().toggleClass('ui-state-focus', e.type === 'focusin'); }).on('mouseenter mouseleave', 'li', function(e) { $(this).toggleClass('ui-state-hover', e.type === 'mouseenter'); }); tabs.find('a,input,select,button').addClass('elfinder-tabstop'); base.append(ul, tabs); dialog = self.fmDialog(base, { title : self.title, width : self.options.width || 600, height: self.options.height || 400, maxWidth: 'window', maxHeight: 'window', autoOpen : false, destroyOnClose : false, allowMinimize : false, open : function() { openTab && selectTab(openTab); openTab = null; }, resize : function() { tabs.height(dialog.height() - ul.outerHeight(true) - (tabs.outerHeight(true) - tabs.height()) - 5); } }) .on('click', function(e) { e.stopPropagation(); }) .css({ overflow: 'hidden' }); dialog.closest('.ui-dialog') .css({ overflow: 'hidden' }) .addClass('elfinder-bg-translucent'); openTab = 'all'; }, dialog, openTab; this.shortcuts = [{ pattern : 'ctrl+comma', description : this.title }]; this.alwaysEnabled = true; this.getstate = function() { return 0; }; this.exec = function(sel, cOpts) { !dialog && build(); if (cOpts) { if (cOpts.tab) { selectTab(cOpts.tab); } else if (cOpts._currentType === 'cwd') { selectTab('workspace'); } } dialog.elfinderdialog('open'); return $.Deferred().resolve(); }; };application/library/js/commands/undo.js000064400000007150146731177160014253 0ustar00/** * @class elFinder command "undo" * Undo previous commands * * @author Naoki Sawada **/ elFinder.prototype.commands.undo = function() { "use strict"; var self = this, fm = this.fm, setTitle = function(undo) { if (undo) { self.title = fm.i18n('cmdundo') + ' ' + fm.i18n('cmd'+undo.cmd); self.state = 0; } else { self.title = fm.i18n('cmdundo'); self.state = -1; } self.change(); }, cmds = []; this.alwaysEnabled = true; this.updateOnSelect = false; this.shortcuts = [{ pattern : 'ctrl+z' }]; this.syncTitleOnChange = true; this.getstate = function() { return cmds.length? 0 : -1; }; this.setUndo = function(undo, redo) { var _undo = {}; if (undo) { if ($.isPlainObject(undo) && undo.cmd && undo.callback) { Object.assign(_undo, undo); if (redo) { delete redo.undo; _undo.redo = redo; } else { fm.getCommand('redo').setRedo(null); } cmds.push(_undo); setTitle(_undo); } } }; this.exec = function() { var redo = fm.getCommand('redo'), dfd = $.Deferred(), undo, res, _redo = {}; if (cmds.length) { undo = cmds.pop(); if (undo.redo) { Object.assign(_redo, undo.redo); delete undo.redo; } else { _redo = null; } dfd.done(function() { if (_redo) { redo.setRedo(_redo, undo); } }); setTitle(cmds.length? cmds[cmds.length-1] : void(0)); res = undo.callback(); if (res && res.done) { res.done(function() { dfd.resolve(); }).fail(function() { dfd.reject(); }); } else { dfd.resolve(); } if (cmds.length) { this.update(0, cmds[cmds.length - 1].name); } else { this.update(-1, ''); } } else { dfd.reject(); } return dfd; }; fm.bind('exec', function(e) { var data = e.data || {}; if (data.opts && data.opts._userAction) { if (data.dfrd && data.dfrd.done) { data.dfrd.done(function(res) { if (res && res.undo && res.redo) { res.undo.redo = res.redo; self.setUndo(res.undo); } }); } } }); }; /** * @class elFinder command "redo" * Redo previous commands * * @author Naoki Sawada **/ elFinder.prototype.commands.redo = function() { "use strict"; var self = this, fm = this.fm, setTitle = function(redo) { if (redo && redo.callback) { self.title = fm.i18n('cmdredo') + ' ' + fm.i18n('cmd'+redo.cmd); self.state = 0; } else { self.title = fm.i18n('cmdredo'); self.state = -1; } self.change(); }, cmds = []; this.alwaysEnabled = true; this.updateOnSelect = false; this.shortcuts = [{ pattern : 'shift+ctrl+z ctrl+y' }]; this.syncTitleOnChange = true; this.getstate = function() { return cmds.length? 0 : -1; }; this.setRedo = function(redo, undo) { if (redo === null) { cmds = []; setTitle(); } else { if (redo && redo.cmd && redo.callback) { if (undo) { redo.undo = undo; } cmds.push(redo); setTitle(redo); } } }; this.exec = function() { var undo = fm.getCommand('undo'), dfd = $.Deferred(), redo, res, _undo = {}, _redo = {}; if (cmds.length) { redo = cmds.pop(); if (redo.undo) { Object.assign(_undo, redo.undo); Object.assign(_redo, redo); delete _redo.undo; dfd.done(function() { undo.setUndo(_undo, _redo); }); } setTitle(cmds.length? cmds[cmds.length-1] : void(0)); res = redo.callback(); if (res && res.done) { res.done(function() { dfd.resolve(); }).fail(function() { dfd.reject(); }); } else { dfd.resolve(); } return dfd; } else { return dfd.reject(); } }; }; application/library/js/commands/extract.js000064400000012221146731177160014753 0ustar00/** * @class elFinder command "extract" * Extract files from archive * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.extract = function() { "use strict"; var self = this, fm = self.fm, mimes = [], filter = function(files) { var fres = true; return $.grep(files, function(file) { fres = fres && file.read && $.inArray(file.mime, mimes) !== -1 ? true : false; return fres; }); }; this.variants = []; this.disableOnSearch = true; // Update mimes list on open/reload fm.bind('open reload', function() { mimes = fm.option('archivers')['extract'] || []; if (fm.api > 2) { self.variants = [[{makedir: true}, fm.i18n('cmdmkdir')], [{}, fm.i18n('btnCwd')]]; } else { self.variants = [[{}, fm.i18n('btnCwd')]]; } self.change(); }); this.getstate = function(select) { var sel = this.files(select), cnt = sel.length, cwdHash, cwdChk; if (!cnt || filter(sel).length != cnt) { return -1; } else if (fm.searchStatus.state > 0) { cwdHash = this.fm.cwd().hash; $.each(sel, function(i, file) { cwdChk = (file.phash === cwdHash); return cwdChk; }); return cwdChk? 0 : -1; } else { return this.fm.cwd().write? 0 : -1; } }; this.exec = function(hashes, opts) { var files = this.files(hashes), dfrd = $.Deferred(), cnt = files.length, makedir = opts && opts.makedir ? 1 : 0, i, error, decision, overwriteAll = false, omitAll = false, mkdirAll = 0, siblings = fm.files(files[0].phash), names = [], map = {}; $.each(siblings, function(id, file) { map[file.name] = file; names.push(file.name); }); var decide = function(decision) { switch (decision) { case 'overwrite_all' : overwriteAll = true; break; case 'omit_all': omitAll = true; break; } }; var unpack = function(file) { if (!(file.read && fm.file(file.phash).write)) { error = ['errExtract', file.name, 'errPerm']; fm.error(error); dfrd.reject(error); } else if ($.inArray(file.mime, mimes) === -1) { error = ['errExtract', file.name, 'errNoArchive']; fm.error(error); dfrd.reject(error); } else { fm.request({ data:{cmd:'extract', target:file.hash, makedir:makedir}, notify:{type:'extract', cnt:1}, syncOnFail:true, navigate:{ toast : makedir? { incwd : {msg: fm.i18n(['complete', fm.i18n('cmdextract')]), action: {cmd: 'open', msg: 'cmdopen'}}, inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmdextract')]), action: {cmd: 'open', msg: 'cmdopen'}} } : { inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmdextract')])} } } }) .fail(function (error) { if (dfrd.state() != 'rejected') { dfrd.reject(error); } }) .done(function () { }); } }; var confirm = function(files, index) { var file = files[index], name = fm.splitFileExtention(file.name)[0], existed = ($.inArray(name, names) >= 0), next = function(){ if((index+1) < cnt) { confirm(files, index+1); } else { dfrd.resolve(); } }; if (!makedir && existed && map[name].mime != 'directory') { fm.confirm( { title : fm.i18n('ntfextract'), text : ['errExists', name, 'confirmRepl'], accept:{ label : 'btnYes', callback:function (all) { decision = all ? 'overwrite_all' : 'overwrite'; decide(decision); if(!overwriteAll && !omitAll) { if('overwrite' == decision) { unpack(file); } if((index+1) < cnt) { confirm(files, index+1); } else { dfrd.resolve(); } } else if(overwriteAll) { for (i = index; i < cnt; i++) { unpack(files[i]); } dfrd.resolve(); } } }, reject : { label : 'btnNo', callback:function (all) { decision = all ? 'omit_all' : 'omit'; decide(decision); if(!overwriteAll && !omitAll && (index+1) < cnt) { confirm(files, index+1); } else if (omitAll) { dfrd.resolve(); } } }, cancel : { label : 'btnCancel', callback:function () { dfrd.resolve(); } }, all : ((index+1) < cnt) } ); } else if (!makedir) { if (mkdirAll == 0) { fm.confirm({ title : fm.i18n('cmdextract'), text : [fm.i18n('cmdextract')+' "'+file.name+'"', 'confirmRepl'], accept:{ label : 'btnYes', callback:function (all) { all && (mkdirAll = 1); unpack(file); next(); } }, reject : { label : 'btnNo', callback:function (all) { all && (mkdirAll = -1); next(); } }, cancel : { label : 'btnCancel', callback:function () { dfrd.resolve(); } }, all : ((index+1) < cnt) }); } else { (mkdirAll > 0) && unpack(file); next(); } } else { unpack(file); next(); } }; if (!(this.enabled() && cnt && mimes.length)) { return dfrd.reject(); } if(cnt > 0) { confirm(files, 0); } return dfrd; }; }; application/library/js/commands/chmod.js000064400000022364146731177160014404 0ustar00/** * @class elFinder command "chmod". * Chmod files. * * @type elFinder.command * @author Naoki Sawada */ elFinder.prototype.commands.chmod = function() { "use strict"; this.updateOnSelect = false; var fm = this.fm, level = { 0 : 'owner', 1 : 'group', 2 : 'other' }, msg = { read : fm.i18n('read'), write : fm.i18n('write'), execute : fm.i18n('execute'), perm : fm.i18n('perm'), kind : fm.i18n('kind'), files : fm.i18n('files') }, isPerm = function(perm){ return (!isNaN(parseInt(perm, 8)) && parseInt(perm, 8) <= 511) || perm.match(/^([r-][w-][x-]){3}$/i); }; this.tpl = { main : '
        {title}
        ' +'{dataTable}', itemTitle : '{name}{kind}', groupTitle : '{items}: {num}', dataTable : '
        {0}{1}{2}
        ' +'
        '+msg.perm+':
        ', fieldset : '
        {f_title}{name}' +'
        ' +'
        ' +'
        ' }; this.shortcuts = [{ //pattern : 'ctrl+p' }]; this.getstate = function(sel) { var fm = this.fm; sel = sel || fm.selected(); if (sel.length == 0) { sel = [ fm.cwd().hash ]; } return this.checkstate(this.files(sel)) ? 0 : -1; }; this.checkstate = function(sel) { var cnt = sel.length, filter = function(files) { var fres = true; return $.grep(sel, function(f) { fres = fres && f.isowner && f.perm && isPerm(f.perm) && (cnt == 1 || f.mime != 'directory') ? true : false; return fres; }); }; return (cnt && cnt === filter(sel).length)? true : false; }; this.exec = function(select) { var hashes = this.hashes(select), files = this.files(hashes); if (! files.length) { hashes = [ this.fm.cwd().hash ]; files = this.files(hashes); } var fm = this.fm, dfrd = $.Deferred().always(function() { fm.enable(); }), tpl = this.tpl, cnt = files.length, file = files[0], id = fm.namespace + '-perm-' + file.hash, view = tpl.main, checked = ' checked="checked"', buttons = function() { var buttons = {}; buttons[fm.i18n('btnApply')] = save; buttons[fm.i18n('btnCancel')] = function() { dialog.elfinderdialog('close'); }; return buttons; }, save = function() { var perm = $.trim($('#'+id+'-perm').val()), reqData; if (!isPerm(perm)) return false; dialog.elfinderdialog('close'); reqData = { cmd : 'chmod', targets : hashes, mode : perm }; fm.request({ data : reqData, notify : {type : 'chmod', cnt : cnt} }) .fail(function(error) { dfrd.reject(error); }) .done(function(data) { if (data.changed && data.changed.length) { data.undo = { cmd : 'chmod', callback : function() { var reqs = []; $.each(prevVals, function(perm, hashes) { reqs.push(fm.request({ data : {cmd : 'chmod', targets : hashes, mode : perm}, notify : {type : 'undo', cnt : hashes.length} })); }); return $.when.apply(null, reqs); } }; data.redo = { cmd : 'chmod', callback : function() { return fm.request({ data : reqData, notify : {type : 'redo', cnt : hashes.length} }); } }; } dfrd.resolve(data); }); }, setperm = function() { var perm = ''; var _perm; for (var i = 0; i < 3; i++){ _perm = 0; if ($("#"+id+"-read-"+level[i]+'-perm').is(':checked')) { _perm = (_perm | 4); } if ($("#"+id+"-write-"+level[i]+'-perm').is(':checked')) { _perm = (_perm | 2); } if ($("#"+id+"-execute-"+level[i]+'-perm').is(':checked')) { _perm = (_perm | 1); } perm += _perm.toString(8); } $('#'+id+'-perm').val(perm); }, setcheck = function(perm) { var _perm; for (var i = 0; i < 3; i++){ _perm = parseInt(perm.slice(i, i+1), 8); $("#"+id+"-read-"+level[i]+'-perm').prop("checked", false); $("#"+id+"-write-"+level[i]+'-perm').prop("checked", false); $("#"+id+"-execute-"+level[i]+'-perm').prop("checked", false); if ((_perm & 4) == 4) { $("#"+id+"-read-"+level[i]+'-perm').prop("checked", true); } if ((_perm & 2) == 2) { $("#"+id+"-write-"+level[i]+'-perm').prop("checked", true); } if ((_perm & 1) == 1) { $("#"+id+"-execute-"+level[i]+'-perm').prop("checked", true); } } setperm(); }, makeperm = function(files) { var perm = '777', ret = '', chk, _chk, _perm; var len = files.length; for (var i2 = 0; i2 < len; i2++) { chk = getPerm(files[i2].perm); if (! prevVals[chk]) { prevVals[chk] = []; } prevVals[chk].push(files[i2].hash); ret = ''; for (var i = 0; i < 3; i++){ _chk = parseInt(chk.slice(i, i+1), 8); _perm = parseInt(perm.slice(i, i+1), 8); if ((_chk & 4) != 4 && (_perm & 4) == 4) { _perm -= 4; } if ((_chk & 2) != 2 && (_perm & 2) == 2) { _perm -= 2; } if ((_chk & 1) != 1 && (_perm & 1) == 1) { _perm -= 1; } ret += _perm.toString(8); } perm = ret; } return perm; }, makeName = function(name) { return name? ':'+name : ''; }, makeDataTable = function(perm, f) { var _perm, fieldset; var value = ''; var dataTable = tpl.dataTable; for (var i = 0; i < 3; i++){ _perm = parseInt(perm.slice(i, i+1), 8); value += _perm.toString(8); fieldset = tpl.fieldset.replace('{f_title}', fm.i18n(level[i])).replace('{name}', makeName(f[level[i]])).replace(/\{level\}/g, level[i]); dataTable = dataTable.replace('{'+i+'}', fieldset) .replace('{checked-r}', ((_perm & 4) == 4)? checked : '') .replace('{checked-w}', ((_perm & 2) == 2)? checked : '') .replace('{checked-x}', ((_perm & 1) == 1)? checked : ''); } dataTable = dataTable.replace('{value}', value).replace('{valueCaption}', msg['perm']); return dataTable; }, getPerm = function(perm){ if (isNaN(parseInt(perm, 8))) { var mode_array = perm.split(''); var a = []; for (var i = 0, l = mode_array.length; i < l; i++) { if (i === 0 || i === 3 || i === 6) { if (mode_array[i].match(/[r]/i)) { a.push(1); } else if (mode_array[i].match(/[-]/)) { a.push(0); } } else if ( i === 1 || i === 4 || i === 7) { if (mode_array[i].match(/[w]/i)) { a.push(1); } else if (mode_array[i].match(/[-]/)) { a.push(0); } } else { if (mode_array[i].match(/[x]/i)) { a.push(1); } else if (mode_array[i].match(/[-]/)) { a.push(0); } } } a.splice(3, 0, ","); a.splice(7, 0, ","); var b = a.join(""); var b_array = b.split(","); var c = []; for (var j = 0, m = b_array.length; j < m; j++) { var p = parseInt(b_array[j], 2).toString(8); c.push(p); } perm = c.join(''); } else { perm = parseInt(perm, 8).toString(8); } return perm; }, opts = { title : this.title, width : 'auto', buttons : buttons(), close : function() { $(this).elfinderdialog('destroy'); } }, dialog = fm.getUI().find('#'+id), prevVals = {}, tmb = '', title, dataTable; if (dialog.length) { dialog.elfinderdialog('toTop'); return $.Deferred().resolve(); } view = view.replace('{class}', cnt > 1 ? 'elfinder-cwd-icon-group' : fm.mime2class(file.mime)); if (cnt > 1) { title = tpl.groupTitle.replace('{items}', fm.i18n('items')).replace('{num}', cnt); } else { title = tpl.itemTitle.replace('{name}', file.name).replace('{kind}', fm.mime2kind(file)); tmb = fm.tmb(file); } dataTable = makeDataTable(makeperm(files), files.length == 1? files[0] : {}); view = view.replace('{title}', title).replace('{dataTable}', dataTable).replace(/{id}/g, id); dialog = this.fmDialog(view, opts); dialog.attr('id', id); // load thumbnail if (tmb) { $('') .on('load', function() { dialog.find('.elfinder-cwd-icon').addClass(tmb.className).css('background-image', "url('"+tmb.url+"')"); }) .attr('src', tmb.url); } $('#' + id + '-table-perm :checkbox').on('click', function(){setperm('perm');}); $('#' + id + '-perm').on('keydown', function(e) { var c = e.keyCode; if (c == $.ui.keyCode.ENTER) { e.stopPropagation(); save(); return; } }).on('focus', function(e){ $(this).trigger('select'); }).on('keyup', function(e) { if ($(this).val().length == 3) { $(this).trigger('select'); setcheck($(this).val()); } }); return dfrd; }; }; application/library/js/commands/back.js000064400000001000146731177160014172 0ustar00/** * @class elFinder command "back" * Open last visited folder * * @author Dmitry (dio) Levashov **/ (elFinder.prototype.commands.back = function() { "use strict"; this.alwaysEnabled = true; this.updateOnSelect = false; this.shortcuts = [{ pattern : 'ctrl+left backspace' }]; this.getstate = function() { return this.fm.history.canBack() ? 0 : -1; }; this.exec = function() { return this.fm.history.back(); }; }).prototype = { forceLoad : true }; // this is required command application/library/js/commands/up.js000064400000001301146731177160013722 0ustar00/** * @class elFinder command "up" * Go into parent directory * * @author Dmitry (dio) Levashov **/ (elFinder.prototype.commands.up = function() { "use strict"; this.alwaysEnabled = true; this.updateOnSelect = false; this.shortcuts = [{ pattern : 'ctrl+up' }]; this.getstate = function() { return this.fm.cwd().phash ? 0 : -1; }; this.exec = function() { var fm = this.fm, cwdhash = fm.cwd().hash; return this.fm.cwd().phash ? this.fm.exec('open', this.fm.cwd().phash).done(function() { fm.one('opendone', function() { fm.selectfiles({files : [cwdhash]}); }); }) : $.Deferred().reject(); }; }).prototype = { forceLoad : true }; // this is required command application/library/js/commands/restore.js000064400000016576146731177160015005 0ustar00/** * @class elFinder command "restore" * Restore items from the trash * * @author Naoki Sawada **/ (elFinder.prototype.commands.restore = function() { "use strict"; var self = this, fm = this.fm, fakeCnt = 0, getFilesRecursively = function(files) { var dfd = $.Deferred(), dirs = [], results = [], reqs = [], phashes = [], getFile; dfd._xhrReject = function() { $.each(reqs, function() { this && this.reject && this.reject(); }); getFile && getFile._xhrReject(); }; $.each(files, function(i, f) { f.mime === 'directory'? dirs.push(f) : results.push(f); }); if (dirs.length) { $.each(dirs, function(i, d) { reqs.push(fm.request({ data : {cmd : 'open', target : d.hash}, preventDefault : true, asNotOpen : true })); phashes[i] = d.hash; }); $.when.apply($, reqs).fail(function() { dfd.reject(); }).done(function() { var items = []; $.each(arguments, function(i, r) { var files; if (r.files) { if (r.files.length) { items = items.concat(r.files); } else { items.push({ hash: 'fakefile_' + (fakeCnt++), phash: phashes[i], mime: 'fakefile', name: 'fakefile', ts: 0 }); } } }); fm.cache(items); getFile = getFilesRecursively(items).done(function(res) { results = results.concat(res); dfd.resolve(results); }); }); } else { dfd.resolve(results); } return dfd; }, restore = function(dfrd, files, targets, ops) { var rHashes = {}, others = [], found = false, dirs = [], opts = ops || {}, id = +new Date(), tm, getFile; fm.lockfiles({files : targets}); dirs = $.map(files, function(f) { return f.mime === 'directory'? f.hash : null; }); dfrd.done(function() { dirs && fm.exec('rm', dirs, {forceRm : true, quiet : true}); }).always(function() { fm.unlockfiles({files : targets}); }); tm = setTimeout(function() { fm.notify({type : 'search', id : id, cnt : 1, hideCnt : true, cancel : function() { getFile && getFile._xhrReject(); dfrd.reject(); }}); }, fm.notifyDelay); fakeCnt = 0; getFile = getFilesRecursively(files).always(function() { tm && clearTimeout(tm); fm.notify({type : 'search', id: id, cnt : -1, hideCnt : true}); }).fail(function() { dfrd.reject('errRestore', 'errFileNotFound'); }).done(function(res) { var errFolderNotfound = ['errRestore', 'errFolderNotFound'], dirTop = ''; if (res.length) { $.each(res, function(i, f) { var phash = f.phash, pfile, srcRoot, tPath; while(phash) { if (srcRoot = fm.trashes[phash]) { if (! rHashes[srcRoot]) { if (found) { // Keep items of other trash others.push(f.hash); return null; // continue $.each } rHashes[srcRoot] = {}; found = true; } tPath = fm.path(f.hash).substr(fm.path(phash).length).replace(/\\/g, '/'); tPath = tPath.replace(/\/[^\/]+?$/, ''); if (tPath === '') { tPath = '/'; } if (!rHashes[srcRoot][tPath]) { rHashes[srcRoot][tPath] = []; } if (f.mime === 'fakefile') { fm.updateCache({removed:[f.hash]}); } else { rHashes[srcRoot][tPath].push(f.hash); } if (!dirTop || dirTop.length > tPath.length) { dirTop = tPath; } break; } // Go up one level for next check pfile = fm.file(phash); if (!pfile) { phash = false; // Detection method for search results $.each(fm.trashes, function(ph) { var file = fm.file(ph), filePath = fm.path(ph); if ((!file.volumeid || f.hash.indexOf(file.volumeid) === 0) && fm.path(f.hash).indexOf(filePath) === 0) { phash = ph; return false; } }); } else { phash = pfile.phash; } } }); if (found) { $.each(rHashes, function(src, dsts) { var dirs = Object.keys(dsts), cnt = dirs.length; fm.request({ data : {cmd : 'mkdir', target : src, dirs : dirs}, notify : {type : 'chkdir', cnt : cnt}, preventFail : true }).fail(function(error) { dfrd.reject(error); fm.unlockfiles({files : targets}); }).done(function(data) { var cmdPaste, hashes; if (hashes = data.hashes) { cmdPaste = fm.getCommand('paste'); if (cmdPaste) { // wait until file cache made fm.one('mkdirdone', function() { var hasErr = false; $.each(dsts, function(dir, files) { if (hashes[dir]) { if (files.length) { if (fm.file(hashes[dir])) { fm.clipboard(files, true); fm.exec('paste', [ hashes[dir] ], {_cmd : 'restore', noToast : (opts.noToast || dir !== dirTop)}) .done(function(data) { if (data && (data.error || data.warning)) { hasErr = true; } }) .fail(function() { hasErr = true; }) .always(function() { if (--cnt < 1) { dfrd[hasErr? 'reject' : 'resolve'](); if (others.length) { // Restore items of other trash fm.exec('restore', others); } } }); } else { dfrd.reject(errFolderNotfound); } } else { if (--cnt < 1) { dfrd.resolve(); if (others.length) { // Restore items of other trash fm.exec('restore', others); } } } } }); }); } else { dfrd.reject(['errRestore', 'errCmdNoSupport', '(paste)']); } } else { dfrd.reject(errFolderNotfound); } }); }); } else { dfrd.reject(errFolderNotfound); } } else { dfrd.reject('errFileNotFound'); dirs && fm.exec('rm', dirs, {forceRm : true, quiet : true}); } }); }; // for to be able to overwrite this.restore = restore; this.linkedCmds = ['copy', 'paste', 'mkdir', 'rm']; this.updateOnSelect = false; this.init = function() { // re-assign for extended command self = this; fm = this.fm; }; this.getstate = function(sel, e) { sel = sel || fm.selected(); return sel.length && $.grep(sel, function(h) {var f = fm.file(h); return f && ! f.locked && ! fm.isRoot(f)? true : false; }).length == sel.length ? 0 : -1; }; this.exec = function(hashes, opts) { var dfrd = $.Deferred() .fail(function(error) { error && fm.error(error); }), files = self.files(hashes); if (! files.length) { return dfrd.reject(); } $.each(files, function(i, file) { if (fm.isRoot(file)) { return !dfrd.reject(['errRestore', file.name]); } if (file.locked) { return !dfrd.reject(['errLocked', file.name]); } }); if (dfrd.state() === 'pending') { this.restore(dfrd, files, hashes, opts); } return dfrd; }; }).prototype = { forceLoad : true }; // this is required command application/library/js/commands/opendir.js000064400000001561146731177160014746 0ustar00/** * @class elFinder command "opendir" * Enter parent folder * * @author Naoki Sawada **/ elFinder.prototype.commands.opendir = function() { "use strict"; this.alwaysEnabled = true; this.getstate = function() { var sel = this.fm.selected(), cnt = sel.length, wz; if (cnt !== 1) { return -1; } wz = this.fm.getUI('workzone'); return wz.hasClass('elfinder-search-result')? 0 : -1; }; this.exec = function(hashes) { var fm = this.fm, dfrd = $.Deferred(), files = this.files(hashes), cnt = files.length, hash, pcheck = null; if (!cnt || !files[0].phash) { return dfrd.reject(); } hash = files[0].phash; fm.trigger('searchend', { noupdate: true }); fm.request({ data : {cmd : 'open', target : hash}, notify : {type : 'open', cnt : 1, hideCnt : true}, syncOnFail : false }); return dfrd; }; }; application/library/js/commands/archive.js000064400000004703146731177160014730 0ustar00/** * @class elFinder command "archive" * Archive selected files * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.archive = function() { "use strict"; var self = this, fm = self.fm, mimes = [], dfrd; this.variants = []; this.disableOnSearch = false; this.nextAction = {}; /** * Update mimes on open/reload * * @return void **/ fm.bind('open reload', function() { self.variants = []; $.each((mimes = fm.option('archivers')['create'] || []), function(i, mime) { self.variants.push([mime, fm.mime2kind(mime)]); }); self.change(); }); this.getstate = function(select) { var sel = this.files(select), cnt = sel.length, chk = (cnt && ! fm.isRoot(sel[0]) && (fm.file(sel[0].phash) || {}).write), filter = function(files) { var fres = true; return $.grep(files, function(f) { fres = fres && f.read && f.hash.indexOf(cwdId) === 0 ? true : false; return fres; }); }, cwdId; if (chk && fm.searchStatus.state > 1) { if (chk = (cnt === filter(sel).length)) { cwdId = fm.cwd().volumeid; } } return chk && !this._disabled && mimes.length && (cnt || (dfrd && dfrd.state() == 'pending')) ? 0 : -1; }; this.exec = function(hashes, type) { var files = this.files(hashes), cnt = files.length, mime = type || mimes[0], cwd = fm.file(files[0].phash) || null, error = ['errArchive', 'errPerm', 'errCreatingTempDir', 'errFtpDownloadFile', 'errFtpUploadFile', 'errFtpMkdir', 'errArchiveExec', 'errExtractExec', 'errRm'], i, open; dfrd = $.Deferred().fail(function(error) { error && fm.error(error); }); if (! (cnt && mimes.length && $.inArray(mime, mimes) !== -1)) { return dfrd.reject(); } if (!cwd.write) { return dfrd.reject(error); } for (i = 0; i < cnt; i++) { if (!files[i].read) { return dfrd.reject(error); } } self.mime = mime; self.prefix = ((cnt > 1)? 'Archive' : files[0].name) + (fm.option('archivers')['createext']? '.' + fm.option('archivers')['createext'][mime] : ''); self.data = {targets : self.hashes(hashes), type : mime}; if (fm.cwd().hash !== cwd.hash) { open = fm.exec('open', cwd.hash).done(function() { fm.one('cwdrender', function() { fm.selectfiles({files : hashes}); dfrd = $.proxy(fm.res('mixin', 'make'), self)(); }); }); } else { fm.selectfiles({files : hashes}); dfrd = $.proxy(fm.res('mixin', 'make'), self)(); } return dfrd; }; }; application/library/js/commands/search.js000064400000007722146731177160014560 0ustar00/** * @class elFinder command "search" * Find files * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.search = function() { "use strict"; this.title = 'Find files'; this.options = {ui : 'searchbutton'}; this.alwaysEnabled = true; this.updateOnSelect = false; /** * Return command status. * Search does not support old api. * * @return Number **/ this.getstate = function() { return 0; }; /** * Send search request to backend. * * @param String search string * @return $.Deferred **/ this.exec = function(q, target, mime, type) { var fm = this.fm, reqDef = [], sType = type || '', onlyMimes = fm.options.onlyMimes, phash, targetVolids = [], setType = function(data) { if (sType && sType !== 'SearchName' && sType !== 'SearchMime') { data.type = sType; } return data; }, rootCnt; if (typeof q == 'string' && q) { if (typeof target == 'object') { mime = target.mime || ''; target = target.target || ''; } target = target? target : ''; if (mime) { mime = $.trim(mime).replace(',', ' ').split(' '); if (onlyMimes.length) { mime = $.map(mime, function(m){ m = $.trim(m); return m && ($.inArray(m, onlyMimes) !== -1 || $.grep(onlyMimes, function(om) { return m.indexOf(om) === 0? true : false; }).length )? m : null; }); } } else { mime = [].concat(onlyMimes); } fm.trigger('searchstart', setType({query : q, target : target, mimes : mime})); if (! onlyMimes.length || mime.length) { if (target === '' && fm.api >= 2.1) { rootCnt = Object.keys(fm.roots).length; $.each(fm.roots, function(id, hash) { reqDef.push(fm.request({ data : setType({cmd : 'search', q : q, target : hash, mimes : mime}), notify : {type : 'search', cnt : 1, hideCnt : (rootCnt > 1? false : true)}, cancel : true, preventDone : true })); }); } else { reqDef.push(fm.request({ data : setType({cmd : 'search', q : q, target : target, mimes : mime}), notify : {type : 'search', cnt : 1, hideCnt : true}, cancel : true, preventDone : true })); if (target !== '' && fm.api >= 2.1 && Object.keys(fm.leafRoots).length) { $.each(fm.leafRoots, function(hash, roots) { phash = hash; while(phash) { if (target === phash) { $.each(roots, function() { var f = fm.file(this); f && f.volumeid && targetVolids.push(f.volumeid); reqDef.push(fm.request({ data : setType({cmd : 'search', q : q, target : this, mimes : mime}), notify : {type : 'search', cnt : 1, hideCnt : false}, cancel : true, preventDone : true })); }); } phash = (fm.file(phash) || {}).phash; } }); } } } else { reqDef = [$.Deferred().resolve({files: []})]; } fm.searchStatus.mixed = (reqDef.length > 1)? targetVolids : false; return $.when.apply($, reqDef).done(function(data) { var argLen = arguments.length, i; data.warning && fm.error(data.warning); if (argLen > 1) { data.files = (data.files || []); for(i = 1; i < argLen; i++) { arguments[i].warning && fm.error(arguments[i].warning); if (arguments[i].files) { data.files.push.apply(data.files, arguments[i].files); } } } // because "preventDone : true" so update files cache data.files && data.files.length && fm.cache(data.files); fm.lazy(function() { fm.trigger('search', data); }).then(function() { // fire event with command name + 'done' return fm.lazy(function() { fm.trigger('searchdone'); }); }).then(function() { // force update content data.sync && fm.sync(); }); }); } fm.getUI('toolbar').find('.'+fm.res('class', 'searchbtn')+' :text').trigger('focus'); return $.Deferred().reject(); }; }; application/library/js/commands/mkdir.js000064400000005003146731177160014407 0ustar00/** * @class elFinder command "mkdir" * Create new folder * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.mkdir = function() { "use strict"; var fm = this.fm, self = this, curOrg; this.value = ''; this.disableOnSearch = true; this.updateOnSelect = false; this.syncTitleOnChange = true; this.mime = 'directory'; this.prefix = 'untitled folder'; this.exec = function(select, cOpts) { var onCwd; if (select && select.length && cOpts && cOpts._currentType && cOpts._currentType === 'navbar') { this.origin = cOpts._currentType; this.data = { target: select[0] }; } else { onCwd = fm.cwd().hash === select[0]; this.origin = curOrg && !onCwd? curOrg : 'cwd'; delete this.data; } if (! select && ! this.options.intoNewFolderToolbtn) { fm.getUI('cwd').trigger('unselectall'); } //this.move = (!onCwd && curOrg !== 'navbar' && fm.selected().length)? true : false; this.move = this.value === fm.i18n('cmdmkdirin'); return $.proxy(fm.res('mixin', 'make'), self)(); }; this.shortcuts = [{ pattern : 'ctrl+shift+n' }]; this.init = function() { if (this.options.intoNewFolderToolbtn) { this.syncTitleOnChange = true; } }; fm.bind('select contextmenucreate closecontextmenu', function(e) { var sel = (e.data? (e.data.selected || e.data.targets) : null) || fm.selected(); self.className = 'mkdir'; curOrg = e.data && sel.length? (e.data.origin || e.data.type || '') : ''; if (!self.options.intoNewFolderToolbtn && curOrg === '') { curOrg = 'cwd'; } if (sel.length && curOrg !== 'navbar' && curOrg !== 'cwd' && fm.cwd().hash !== sel[0]) { self.title = fm.i18n('cmdmkdirin'); self.className += ' elfinder-button-icon-mkdirin'; } else { self.title = fm.i18n('cmdmkdir'); } if (e.type !== 'closecontextmenu') { self.update(void(0), self.title); } else { requestAnimationFrame(function() { self.update(void(0), self.title); }); } }); this.getstate = function(select) { var cwd = fm.cwd(), sel = (curOrg === 'navbar' || (select && select[0] !== cwd.hash))? this.files(select || fm.selected()) : [], cnt = sel.length, filter = function(files) { var fres = true; return $.grep(files, function(f) { fres = fres && f.read && ! f.locked? true : false; return fres; }); }; if (curOrg === 'navbar') { return cnt && sel[0].write && sel[0].read? 0 : -1; } else { return cwd.write && (!cnt || filter(sel).length == cnt)? 0 : -1; } }; }; application/library/js/commands/selectnone.js000064400000001015146731177160015437 0ustar00/** * @class elFinder command "selectnone" * Unselect ALL of cwd items * * @author Naoki Sawada **/ elFinder.prototype.commands.selectnone = function() { "use strict"; var self = this, fm = this.fm, state = -1; fm.bind('select', function(e) { state = (e.data && e.data.unselectall)? -1 : 0; }); this.state = -1; this.updateOnSelect = false; this.getstate = function() { return state; }; this.exec = function() { fm.getUI('cwd').trigger('unselectall'); return $.Deferred().resolve(); }; }; application/library/js/commands/fullscreen.js000064400000002055146731177160015447 0ustar00/** * @class elFinder command "fullscreen" * elFinder node to full scrren mode * * @author Naoki Sawada **/ elFinder.prototype.commands.fullscreen = function() { "use strict"; var self = this, fm = this.fm, update = function(e, data) { var full; e.preventDefault(); e.stopPropagation(); if (data && data.fullscreen) { full = (data.fullscreen === 'on'); self.update(void(0), full); self.title = fm.i18n(full ? 'reinstate' : 'cmdfullscreen'); } }; this.alwaysEnabled = true; this.updateOnSelect = false; this.syncTitleOnChange = true; this.value = false; this.options = { ui : 'fullscreenbutton' }; this.getstate = function() { return 0; }; this.exec = function() { var node = fm.getUI().get(0), full = (node === fm.toggleFullscreen(node)); self.title = fm.i18n(full ? 'reinstate' : 'cmdfullscreen'); self.update(void(0), full); return $.Deferred().resolve(); }; fm.bind('init', function() { fm.getUI().off('resize.' + fm.namespace, update).on('resize.' + fm.namespace, update); }); }; application/library/js/commands/colwidth.js000064400000000733146731177160015123 0ustar00/** * @class elFinder command "colwidth" * CWD list table columns width to auto * * @author Naoki Sawada **/ elFinder.prototype.commands.colwidth = function() { "use strict"; this.alwaysEnabled = true; this.updateOnSelect = false; this.getstate = function() { return this.fm.getUI('cwd').find('table').css('table-layout') === 'fixed' ? 0 : -1; }; this.exec = function() { this.fm.getUI('cwd').trigger('colwidth'); return $.Deferred().resolve(); }; };application/library/js/commands/upload.js000064400000030606146731177160014574 0ustar00/** * @class elFinder command "upload" * Upload files using iframe or XMLHttpRequest & FormData. * Dialog allow to send files using drag and drop * * @type elFinder.command * @author Dmitry (dio) Levashov */ elFinder.prototype.commands.upload = function() { "use strict"; var hover = this.fm.res('class', 'hover'); this.disableOnSearch = true; this.updateOnSelect = false; // Shortcut opens dialog this.shortcuts = [{ pattern : 'ctrl+u' }]; /** * Return command state * * @return Number **/ this.getstate = function(select) { var fm = this.fm, f, sel = (select || [fm.cwd().hash]); if (!this._disabled && sel.length == 1) { f = fm.file(sel[0]); } return (f && f.mime == 'directory' && f.write)? 0 : -1; }; this.exec = function(data) { var fm = this.fm, cwdHash = fm.cwd().hash, getTargets = function() { var tgts = data && (data instanceof Array)? data : null, sel; if (! data || data instanceof Array) { if (! tgts && (sel = fm.selected()).length === 1 && fm.file(sel[0]).mime === 'directory') { tgts = sel; } else if (!tgts || tgts.length !== 1 || fm.file(tgts[0]).mime !== 'directory') { tgts = [ cwdHash ]; } } return tgts; }, targets = getTargets(), check = targets? targets[0] : (data && data.target? data.target : null), targetDir = check? fm.file(check) : fm.cwd(), fmUpload = function(data) { fm.upload(data) .fail(function(error) { dfrd.reject(error); }) .done(function(data) { var cwd = fm.getUI('cwd'), node; dfrd.resolve(data); if (data && data.added && data.added[0] && ! fm.ui.notify.children('.elfinder-notify-upload').length) { var newItem = fm.findCwdNodes(data.added); if (newItem.length) { newItem.trigger('scrolltoview'); } else { if (targetDir.hash !== cwdHash) { node = $('
        ').append( $('') .on('mouseenter mouseleave', function(e) { $(this).toggleClass('ui-state-hover', e.type == 'mouseenter'); }).on('click', function() { fm.exec('open', check).done(function() { fm.one('opendone', function() { fm.trigger('selectfiles', {files : $.map(data.added, function(f) {return f.hash;})}); }); }); }) ); } else { fm.trigger('selectfiles', {files : $.map(data.added, function(f) {return f.hash;})}); } fm.toast({msg: fm.i18n(['complete', fm.i18n('cmdupload')]), extNode: node}); } } }) .progress(function() { dfrd.notifyWith(this, Array.from(arguments)); }); }, upload = function(data) { dialog.elfinderdialog('close'); if (targets) { data.target = targets[0]; } fmUpload(data); }, getSelector = function() { var hash = targetDir.hash, dirs = $.map(fm.files(hash), function(f) { return (f.mime === 'directory' && f.write)? f : null; }); if (! dirs.length) { return $(); } return $('
        ') .on('click', function(e) { e.stopPropagation(); e.preventDefault(); dirs = fm.sortFiles(dirs); var $this = $(this), cwd = fm.cwd(), base = dialog.closest('div.ui-dialog'), getRaw = function(f, icon) { return { label : fm.escape(f.i18 || f.name), icon : icon, remain : false, callback : function() { var title = base.children('.ui-dialog-titlebar:first').find('span.elfinder-upload-target'); targets = [ f.hash ]; title.html(' - ' + fm.escape(f.i18 || f.name)); $this.trigger('focus'); }, options : { className : (targets && targets.length && f.hash === targets[0])? 'ui-state-active' : '', iconClass : f.csscls || '', iconImg : f.icon || '' } }; }, raw = [ getRaw(targetDir, 'opendir'), '|' ]; $.each(dirs, function(i, f) { raw.push(getRaw(f, 'dir')); }); $this.trigger('blur'); fm.trigger('contextmenu', { raw: raw, x: e.pageX || $(this).offset().left, y: e.pageY || $(this).offset().top, prevNode: base, fitHeight: true }); }).append(''); }, inputButton = function(type, caption) { var button, input = $('') .on('click', function() { // for IE's bug if (fm.UA.IE) { setTimeout(function() { form.css('display', 'none').css('position', 'relative'); requestAnimationFrame(function() { form.css('display', '').css('position', ''); }); }, 100); } }) .on('change', function() { upload({input : input.get(0), type : 'files'}); }) .on('dragover', function(e) { e.originalEvent.dataTransfer.dropEffect = 'copy'; }), form = $('
        ').append(input).on('click', function(e) { e.stopPropagation(); }); return $('
        '+fm.i18n(caption)+'
        ') .append(form) .on('click', function(e) { e.stopPropagation(); e.preventDefault(); input.trigger('click'); }) .on('mouseenter mouseleave', function(e) { $(this).toggleClass(hover, e.type === 'mouseenter'); }); }, dfrd = $.Deferred(), dialog, dropbox, pastebox, dropUpload, paste, dirs, spinner, uidialog; dropUpload = function(e) { e.stopPropagation(); e.preventDefault(); var file = false, type = '', elfFrom = null, mycwd = '', data = null, target = e._target || null, trf = e.dataTransfer || null, kind = '', idx, errors; if (trf) { if (trf.types && trf.types.length) { if ((idx = $.inArray('application/x-moz-file', trf.types)) !== -1) { kind = 'file'; } else if ((idx = $.inArray('Files', trf.types)) !== -1) { kind = 'file'; } } else if (trf.items && trf.items.length && trf.items[0].kind) { kind = trf.items[0].kind; } try { elfFrom = trf.getData('elfinderfrom'); if (elfFrom) { mycwd = window.location.href + fm.cwd().hash; if ((!target && elfFrom === mycwd) || target === mycwd) { dfrd.reject(); return; } } } catch(e) {} if (kind === 'file' && (trf.items[idx].getAsEntry || trf.items[idx].webkitGetAsEntry || trf.items[idx].getAsFile)) { file = trf; type = 'data'; } else if (kind !== 'string' && trf.files && trf.files.length && $.inArray('Text', trf.types) === -1) { file = trf.files; type = 'files'; } else { try { if ((data = trf.getData('text/html')) && data.match(/<(?:img|a)/i)) { file = [ data ]; type = 'html'; } } catch(e) {} if (! file) { if (data = trf.getData('text')) { file = [ data ]; type = 'text'; } else if (trf && trf.files) { // maybe folder uploading but this UA dose not support it kind = 'file'; } } } } if (file) { fmUpload({files : file, type : type, target : target, dropEvt : e}); } else { errors = ['errUploadNoFiles']; if (kind === 'file') { errors.push('errFolderUpload'); } fm.error(errors); dfrd.reject(); } }; if (!targets && data) { if (data.input || data.files) { data.type = 'files'; fmUpload(data); } else if (data.dropEvt) { dropUpload(data.dropEvt); } return dfrd; } paste = function(ev) { var e = ev.originalEvent || ev; var files = [], items = []; var file; if (e.clipboardData) { if (e.clipboardData.items && e.clipboardData.items.length){ items = e.clipboardData.items; for (var i=0; i < items.length; i++) { if (e.clipboardData.items[i].kind == 'file') { file = e.clipboardData.items[i].getAsFile(); files.push(file); } } } else if (e.clipboardData.files && e.clipboardData.files.length) { files = e.clipboardData.files; } if (files.length) { upload({files : files, type : 'files', clipdata : true}); return; } } var my = e.target || e.srcElement; requestAnimationFrame(function() { var type = 'text', src; if (my.innerHTML) { $(my).find('img').each(function(i, v){ if (v.src.match(/^webkit-fake-url:\/\//)) { // For Safari's bug. // ref. https://bugs.webkit.org/show_bug.cgi?id=49141 // https://dev.ckeditor.com/ticket/13029 $(v).remove(); } }); if ($(my).find('a,img').length) { type = 'html'; } src = my.innerHTML; my.innerHTML = ''; upload({files : [ src ], type : type}); } }); }; dialog = $('
        ') .append(inputButton('multiple', 'selectForUpload')); if (! fm.UA.Mobile && (function(input) { return (typeof input.webkitdirectory !== 'undefined' || typeof input.directory !== 'undefined');})(document.createElement('input'))) { dialog.append(inputButton('multiple webkitdirectory directory', 'selectFolder')); } if (targetDir.dirs) { if (targetDir.hash === cwdHash || fm.navHash2Elm(targetDir.hash).hasClass('elfinder-subtree-loaded')) { getSelector().appendTo(dialog); } else { spinner = $('
        ') .append('') .appendTo(dialog); fm.request({cmd : 'tree', target : targetDir.hash}) .done(function() { fm.one('treedone', function() { spinner.replaceWith(getSelector()); uidialog.elfinderdialog('tabstopsInit'); }); }) .fail(function() { spinner.remove(); }); } } if (fm.dragUpload) { dropbox = $('
        ') .on('paste', function(e){ paste(e); }) .on('mousedown click', function(){ $(this).trigger('focus'); }) .on('focus', function(){ this.innerHTML = ''; }) .on('mouseover', function(){ $(this).addClass(hover); }) .on('mouseout', function(){ $(this).removeClass(hover); }) .on('dragenter', function(e) { e.stopPropagation(); e.preventDefault(); $(this).addClass(hover); }) .on('dragleave', function(e) { e.stopPropagation(); e.preventDefault(); $(this).removeClass(hover); }) .on('dragover', function(e) { e.stopPropagation(); e.preventDefault(); e.originalEvent.dataTransfer.dropEffect = 'copy'; $(this).addClass(hover); }) .on('drop', function(e) { dialog.elfinderdialog('close'); targets && (e.originalEvent._target = targets[0]); dropUpload(e.originalEvent); }) .prependTo(dialog) .after('
        '+fm.i18n('or')+'
        ')[0]; } else { pastebox = $('
        '+fm.i18n('dropFilesBrowser')+'
        ') .on('paste drop', function(e){ paste(e); }) .on('mousedown click', function(){ $(this).trigger('focus'); }) .on('focus', function(){ this.innerHTML = ''; }) .on('dragenter mouseover', function(){ $(this).addClass(hover); }) .on('dragleave mouseout', function(){ $(this).removeClass(hover); }) .prependTo(dialog) .after('
        '+fm.i18n('or')+'
        ')[0]; } uidialog = this.fmDialog(dialog, { title : this.title + '' + (targetDir? ' - ' + fm.escape(targetDir.i18 || targetDir.name) : '') + '', modal : true, resizable : false, destroyOnClose : true, propagationEvents : ['mousemove', 'mouseup', 'click'], close : function() { var cm = fm.getUI('contextmenu'); if (cm.is(':visible')) { cm.click(); } } }); return dfrd; }; }; application/library/js/commands/rename.js000064400000037470146731177160014565 0ustar00/** * @class elFinder command "rename". * Rename selected file. * * @author Dmitry (dio) Levashov, dio@std42.ru * @author Naoki Sawada **/ elFinder.prototype.commands.rename = function() { "use strict"; // set alwaysEnabled to allow root rename on client size this.alwaysEnabled = true; this.syncTitleOnChange = true; var self = this, fm = self.fm, request = function(dfrd, targtes, file, name) { var sel = targtes? [file.hash].concat(targtes) : [file.hash], cnt = sel.length, data = {}, rootNames; fm.lockfiles({files : sel}); if (fm.isRoot(file) && !file.netkey) { if (!(rootNames = fm.storage('rootNames'))) { rootNames = {}; } if (name === '') { if (rootNames[file.hash]) { file.name = file._name; file.i18 = file._i18; delete rootNames[file.hash]; delete file._name; delete file._i18; } else { dfrd && dfrd.reject(); fm.unlockfiles({files : sel}).trigger('selectfiles', {files : sel}); return; } } else { if (typeof file._name === 'undefined') { file._name = file.name; file._i18 = file.i18; } file.name = rootNames[file.hash] = name; delete file.i18; } fm.storage('rootNames', rootNames); data = { changed: [file] }; fm.updateCache(data); fm.change(data); dfrd && dfrd.resolve(data); fm.unlockfiles({files : sel}).trigger('selectfiles', {files : sel}); return; } data = { cmd : 'rename', name : name, target : file.hash }; if (cnt > 1) { data['targets'] = targtes; if (name.match(/\*/)) { data['q'] = name; } } fm.request({ data : data, notify : {type : 'rename', cnt : cnt}, navigate : {} }) .fail(function(error) { var err = fm.parseError(error); dfrd && dfrd.reject(); if (! err || ! Array.isArray(err) || err[0] !== 'errRename') { fm.sync(); } }) .done(function(data) { var cwdHash; if (data.added && data.added.length && cnt === 1) { data.undo = { cmd : 'rename', callback : function() { return fm.request({ data : {cmd : 'rename', target : data.added[0].hash, name : file.name}, notify : {type : 'undo', cnt : 1} }); } }; data.redo = { cmd : 'rename', callback : function() { return fm.request({ data : {cmd : 'rename', target : file.hash, name : name}, notify : {type : 'rename', cnt : 1} }); } }; } dfrd && dfrd.resolve(data); if (!(cwdHash = fm.cwd().hash) || cwdHash === file.hash) { fm.exec('open', $.map(data.added, function(f) { return (f.mime === 'directory')? f.hash : null; })[0]); } }) .always(function() { fm.unlockfiles({files : sel}).trigger('selectfiles', {files : sel}); } ); }, getHint = function(name, target) { var sel = target || fm.selected(), splits = fm.splitFileExtention(name), f1 = fm.file(sel[0]), f2 = fm.file(sel[1]), ext, hint, add; ext = splits[1]? ('.' + splits[1]) : ''; if (splits[1] && splits[0] === '*') { // change extention hint = '"' + fm.splitFileExtention(f1.name)[0] + ext + '", '; hint += '"' + fm.splitFileExtention(f2.name)[0] + ext + '"'; } else if (splits[0].length > 1) { if (splits[0].substr(-1) === '*') { // add prefix add = splits[0].substr(0, splits[0].length - 1); hint = '"' + add + f1.name+'", '; hint += '"' + add + f2.name+'"'; } else if (splits[0].substr(0, 1) === '*') { // add suffix add = splits[0].substr(1); hint = '"'+fm.splitFileExtention(f1.name)[0] + add + ext + '", '; hint += '"'+fm.splitFileExtention(f2.name)[0] + add + ext + '"'; } } if (!hint) { hint = '"'+splits[0] + '1' + ext + '", "' + splits[0] + '2' + ext + '"'; } if (sel.length > 2) { hint += ' ...'; } return hint; }, batchRename = function() { var sel = fm.selected(), tplr = '', mkChk = function(node, label) { return $('').prepend(node); }, name = $(''), num = $(tplr), prefix = $(tplr), suffix = $(tplr), extention = $(tplr), checks = $('
        ').append( mkChk(num, 'plusNumber'), mkChk(prefix, 'asPrefix'), mkChk(suffix, 'asSuffix'), mkChk(extention, 'changeExtention') ), preview = $('
        '), node = $('
        ').append( $('
        ').append(name), $('
        ').append(checks), preview ), opts = { title : fm.i18n('batchRename'), modal : true, destroyOnClose : true, width: Math.min(380, fm.getUI().width() - 20), buttons : {}, open : function() { name.on('input', mkPrev).trigger('focus'); } }, getName = function() { var vName = name.val(), ext = fm.splitFileExtention(fm.file(sel[0]).name)[1]; if (vName !== '' || num.is(':checked')) { if (prefix.is(':checked')) { vName += '*'; } else if (suffix.is(':checked')) { vName = '*' + vName + '.' + ext; } else if (extention.is(':checked')) { vName = '*.' + vName; } else if (ext) { vName += '.' + ext; } } return vName; }, mkPrev = function() { var vName = getName(); if (vName !== '') { preview.html(fm.i18n(['renameMultiple', sel.length, getHint(vName)])); } else { preview.empty(); } }, radios = checks.find('input:radio').on('change', mkPrev), dialog; opts.buttons[fm.i18n('btnApply')] = function() { var vName = getName(), file, targets; if (vName !== '') { dialog.elfinderdialog('close'); targets = sel; file = fm.file(targets.shift()); request(void(0), targets, file, vName); } }; opts.buttons[fm.i18n('btnCancel')] = function() { dialog.elfinderdialog('close'); }; if ($.fn.checkboxradio) { radios.checkboxradio({ create: function(e, ui) { if (this === num.get(0)) { num.prop('checked', true).change(); } } }); } else { checks.buttonset({ create: function(e, ui) { num.prop('checked', true).change(); } }); } dialog = self.fmDialog(node, opts); }; this.noChangeDirOnRemovedCwd = true; this.shortcuts = [{ pattern : 'f2' + (fm.OS == 'mac' ? ' enter' : '') }, { pattern : 'shift+f2', description : 'batchRename', callback : function() { fm.selected().length > 1 && batchRename(); } }]; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length, phash, ext, mime, brk, state, isRoot; if (!cnt) { return -1; } if (cnt > 1 && sel[0].phash) { phash = sel[0].phash; ext = fm.splitFileExtention(sel[0].name)[1].toLowerCase(); mime = sel[0].mime; } if (cnt === 1) { isRoot = fm.isRoot(sel[0]); } state = (cnt === 1 && ((fm.cookieEnabled && isRoot) || !sel[0].locked) || (fm.api > 2.1030 && cnt === $.grep(sel, function(f) { if (!brk && !f.locked && f.phash === phash && !fm.isRoot(f) && (mime === f.mime || ext === fm.splitFileExtention(f.name)[1].toLowerCase())) { return true; } else { brk && (brk = true); return false; } }).length)) ? 0 : -1; // because alwaysEnabled = true, it need check disabled on connector if (!isRoot && state === 0 && fm.option('disabledFlip', sel[0].hash)['rename']) { state = -1; } if (state !== -1 && cnt > 1) { self.extra = { icon: 'preference', node: $('') .attr({title: fm.i18n('batchRename')}) .on('click touchstart', function(e){ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) { return; } e.stopPropagation(); e.preventDefault(); fm.getUI().trigger('click'); // to close the context menu immediately batchRename(); }) }; } else { delete self.extra; } return state; }; this.exec = function(hashes, cOpts) { var cwd = fm.getUI('cwd'), sel = hashes || (fm.selected().length? fm.selected() : false) || [fm.cwd().hash], cnt = sel.length, file = fm.file(sel.shift()), filename = '.elfinder-cwd-filename', opts = cOpts || {}, incwd = (fm.cwd().hash == file.hash), type = (opts._currentType === 'navbar' || opts._currentType === 'files')? opts._currentType : (incwd? 'navbar' : 'files'), navbar = (type !== 'files'), target = fm[navbar? 'navHash2Elm' : 'cwdHash2Elm'](file.hash), tarea = (!navbar && fm.storage('view') != 'list'), split = function(name) { var ext = fm.splitFileExtention(name)[1]; return [name.substr(0, name.length - ext.length - 1), ext]; }, unselect = function() { requestAnimationFrame(function() { input && input.trigger('blur'); }); }, rest = function(){ if (!overlay.is(':hidden')) { overlay.elfinderoverlay('hide').off('click close', cancel); } pnode.removeClass('ui-front') .css('position', '') .off('unselect.'+fm.namespace, unselect); if (tarea) { node && node.css('max-height', ''); } else if (!navbar) { pnode.css('width', '') .parent('td').css('overflow', ''); } }, colwidth, dfrd = $.Deferred() .fail(function(error) { var parent = input.parent(), name = fm.escape(file.i18 || file.name); input.off(); if (tarea) { name = name.replace(/([_.])/g, '​$1'); } requestAnimationFrame(function() { if (navbar) { input.replaceWith(name); } else { if (parent.length) { input.remove(); parent.html(name); } else { target.find(filename).html(name); } } }); error && fm.error(error); }) .always(function() { rest(); fm.unbind('resize', resize); fm.enable(); }), blur = function(e) { var name = $.trim(input.val()), splits = fm.splitFileExtention(name), valid = true, req = function() { input.off(); rest(); if (navbar) { input.replaceWith(fm.escape(name)); } else { node.html(fm.escape(name)); } request(dfrd, sel, file, name); }; if (!overlay.is(':hidden')) { pnode.css('z-index', ''); } if (name === '') { if (!fm.isRoot(file)) { return cancel(); } if (navbar) { input.replaceWith(fm.escape(file.name)); } else { node.html(fm.escape(file.name)); } } if (!inError && pnode.length) { input.off('blur'); if (cnt === 1 && name === file.name) { return dfrd.reject(); } if (fm.options.validName && fm.options.validName.test) { try { valid = fm.options.validName.test(name); } catch(e) { valid = false; } } if (name === '.' || name === '..' || !valid) { inError = true; fm.error(file.mime === 'directory'? 'errInvDirname' : 'errInvName', {modal: true, close: function(){setTimeout(select, 120);}}); return false; } if (cnt === 1 && fm.fileByName(name, file.phash)) { inError = true; fm.error(['errExists', name], {modal: true, close: function(){setTimeout(select, 120);}}); return false; } if (cnt === 1) { req(); } else { fm.confirm({ title : 'cmdrename', text : ['renameMultiple', cnt, getHint(name, [file.hash].concat(sel))], accept : { label : 'btnYes', callback : req }, cancel : { label : 'btnCancel', callback : function() { setTimeout(function() { inError = true; select(); }, 120); } } }); setTimeout(function() { fm.trigger('unselectfiles', {files: fm.selected()}) .trigger('selectfiles', {files : [file.hash].concat(sel)}); }, 120); } } }, input = $(tarea? '' : '') .on('keyup text', function(){ if (tarea) { this.style.height = '1px'; this.style.height = this.scrollHeight + 'px'; } else if (colwidth) { this.style.width = colwidth + 'px'; if (this.scrollWidth > colwidth) { this.style.width = this.scrollWidth + 10 + 'px'; } } }) .on('keydown', function(e) { e.stopImmediatePropagation(); if (e.keyCode == $.ui.keyCode.ESCAPE) { dfrd.reject(); } else if (e.keyCode == $.ui.keyCode.ENTER) { e.preventDefault(); input.trigger('blur'); } }) .on('mousedown click dblclick', function(e) { e.stopPropagation(); if (e.type === 'dblclick') { e.preventDefault(); } }) .on('blur', blur) .on('dragenter dragleave dragover drop', function(e) { // stop bubbling to prevent upload with native drop event e.stopPropagation(); }), select = function() { var name = fm.splitFileExtention(input.val())[0]; if (!inError && fm.UA.Mobile && !fm.UA.iOS) { // since iOS has a bug? (z-index not effect) so disable it overlay.on('click close', cancel).elfinderoverlay('show'); pnode.css('z-index', overlay.css('z-index') + 1); } ! fm.enabled() && fm.enable(); if (inError) { inError = false; input.on('blur', blur); } input.trigger('focus').trigger('select'); input[0].setSelectionRange && input[0].setSelectionRange(0, name.length); }, node = navbar? target.contents().filter(function(){ return this.nodeType==3 && $(this).parent().attr('id') === fm.navHash2Id(file.hash); }) : target.find(filename), pnode = node.parent(), overlay = fm.getUI('overlay'), cancel = function(e) { if (!overlay.is(':hidden')) { pnode.css('z-index', ''); } if (! inError) { dfrd.reject(); if (e) { e.stopPropagation(); e.preventDefault(); } } }, resize = function() { target.trigger('scrolltoview', {blink : false}); }, inError = false; pnode.addClass('ui-front') .css('position', 'relative') .on('unselect.'+fm.namespace, unselect); fm.bind('resize', resize); if (navbar) { node.replaceWith(input.val(file.name)); } else { if (tarea) { node.css('max-height', 'none'); } else if (!navbar) { colwidth = pnode.width(); pnode.width(colwidth - 15) .parent('td').css('overflow', 'visible'); } node.empty().append(input.val(file.name)); } if (cnt > 1 && fm.api <= 2.1030) { return dfrd.reject(); } if (!file || !node.length) { return dfrd.reject('errCmdParams', this.title); } if (file.locked && !fm.isRoot(file)) { return dfrd.reject(['errLocked', file.name]); } fm.one('select', function() { input.parent().length && file && $.inArray(file.hash, fm.selected()) === -1 && input.trigger('blur'); }); input.trigger('keyup'); select(); return dfrd; }; fm.bind('select contextmenucreate closecontextmenu', function(e) { var sel = (e.data? (e.data.selected || e.data.targets) : null) || fm.selected(), file; if (sel && sel.length === 1 && (file = fm.file(sel[0])) && fm.isRoot(file)) { self.title = fm.i18n('kindAlias') + ' (' + fm.i18n('preference') + ')'; } else { self.title = fm.i18n('cmdrename'); } if (e.type !== 'closecontextmenu') { self.update(void(0), self.title); } else { requestAnimationFrame(function() { self.update(void(0), self.title); }); } }).remove(function(e) { var rootNames; if (e.data && e.data.removed && (rootNames = fm.storage('rootNames'))) { $.each(e.data.removed, function(i, h) { if (rootNames[h]) { delete rootNames[h]; } }); fm.storage('rootNames', rootNames); } }); }; application/library/js/commands/selectinvert.js000064400000000710146731177160016010 0ustar00/** * @class elFinder command "selectinvert" * Invert Selection of cwd items * * @author Naoki Sawada **/ elFinder.prototype.commands.selectinvert = function() { "use strict"; this.updateOnSelect = false; this.getstate = function() { return 0; }; this.exec = function() { $(document).trigger($.Event('keydown', { keyCode: 73, ctrlKey : true, shiftKey : true, altKey : false, metaKey : false })); return $.Deferred().resolve(); }; }; application/library/js/commands/help.js000064400000033710146731177160014237 0ustar00/** * @class elFinder command "help" * "About" dialog * * @author Dmitry (dio) Levashov **/ (elFinder.prototype.commands.help = function() { "use strict"; var fm = this.fm, self = this, linktpl = '', linktpltgt = '', atpl = '
        {author}
        {work}
        ', url = /\{url\}/, link = /\{link\}/, author = /\{author\}/, work = /\{work\}/, r = 'replace', prim = 'ui-priority-primary', sec = 'ui-priority-secondary', lic = 'elfinder-help-license', tab = '
      • {title}
      • ', html = ['
        ', '
          '], stpl = '
          {pattern}
          {descrip}
          ', sep = '
          ', selfUrl = $('base').length? fm.escape(document.location.href.replace(/#.*$/, '')) : '', clTabActive = fm.res('class', 'tabsactive'), getTheme = function() { var src; if (fm.theme && fm.theme.author) { src = atpl[r]('elfinder-help-team', 'elfinder-help-team elfinder-help-term-theme')[r](author, fm.i18n(fm.theme.author) + (fm.theme.email? ' <'+fm.theme.email+'>' : ''))[r](work, fm.i18n('theme') + ' ('+fm.i18n(fm.theme.name)+')'); } else { src = ''; } return src; }, about = function() { html.push('
          '); html.push('

          elFinder

          '); html.push('
          '+fm.i18n('webfm')+'
          '); html.push('
          '+fm.i18n('ver')+': '+fm.version+'
          '); html.push('
          '+fm.i18n('protocolver')+':
          '); html.push('
          jQuery/jQuery UI: '+$().jquery+'/'+$.ui.version+'
          '); html.push(sep); html.push(linktpltgt[r](url, 'https://studio-42.github.io/elFinder/')[r](link, fm.i18n('homepage'))); html.push(linktpltgt[r](url, 'https://github.com/Studio-42/elFinder/wiki')[r](link, fm.i18n('docs'))); html.push(linktpltgt[r](url, 'https://github.com/Studio-42/elFinder')[r](link, fm.i18n('github'))); //html.push(linktpltgt[r](url, 'http://twitter.com/elrte_elfinder')[r](link, fm.i18n('twitter'))); html.push(sep); html.push('
          '+fm.i18n('team')+'
          '); html.push(atpl[r](author, 'Dmitry "dio" Levashov <dio@std42.ru>')[r](work, fm.i18n('chiefdev'))); html.push(atpl[r](author, 'Naoki Sawada (nao-pon)<hypweb+elfinder@gmail.com>')[r](work, fm.i18n('developer'))); html.push(atpl[r](author, 'Troex Nevelin <troex@fury.scancode.ru>')[r](work, fm.i18n('maintainer'))); html.push(atpl[r](author, 'Alexey Sukhotin <strogg@yandex.ru>')[r](work, fm.i18n('contributor'))); if (fm.i18[fm.lang].translator) { $.each(fm.i18[fm.lang].translator.split(', '), function() { html.push(atpl[r](author, $.trim(this))[r](work, fm.i18n('translator')+' ('+fm.i18[fm.lang].language+')')); }); } html.push(getTheme()); html.push(sep); html.push('
          '+fm.i18n('icons')+': Pixelmixer, Fugue, Icons8
          '); html.push(sep); html.push('
          Licence: 3-clauses BSD Licence
          '); html.push('
          Copyright © 2009-2022, Studio 42 / nao-pon
          '); html.push('
          „ …'+fm.i18n('dontforget')+' ”
          '); html.push('
          '); }, shortcuts = function() { var sh = fm.shortcuts(); // shortcuts tab html.push('
          '); if (sh.length) { html.push('
          '); $.each(sh, function(i, s) { html.push(stpl.replace(/\{pattern\}/, s[0]).replace(/\{descrip\}/, s[1])); }); html.push('
          '); } else { html.push('
          '+fm.i18n('shortcutsof')+'
          '); } html.push('
          '); }, help = function() { // help tab html.push('
          '); html.push('DON\'T PANIC'); html.push('
          '); // end help }, useInteg = false, integrations = function() { useInteg = true; html.push('
          '); }, useDebug = false, debug = function() { useDebug = true; // debug tab html.push('
          '); html.push('
            '); html.push('
            '); // end debug }, debugRender = function() { var render = function(elm, obj) { $.each(obj, function(k, v) { elm.append($('
            ').text(k)); if (typeof v === 'undefined') { elm.append($('
            ').append($('').text('undfined'))); } else if (typeof v === 'object' && !v) { elm.append($('
            ').append($('').text('null'))); } else if (typeof v === 'object' && ($.isPlainObject(v) || v.length)) { elm.append( $('
            ').append(render($('
            '), v))); } else { elm.append($('
            ').append($('').text((v && typeof v === 'object')? '[]' : (v? v : '""')))); } }); return elm; }, cnt = debugUL.children('li').length, targetL, target, tabId, info, lastUL, lastDIV; if (self.debug.options || self.debug.debug) { if (cnt >= 5) { lastUL = debugUL.children('li:last'); lastDIV = debugDIV.children('div:last'); if (lastDIV.is(':hidden')) { lastUL.remove(); lastDIV.remove(); } else { lastUL.prev().remove(); lastDIV.prev().remove(); } } tabId = fm.namespace + '-help-debug-' + (+new Date()); targetL = $('
          • ').html(''+self.debug.debug.cmd+'').prependTo(debugUL); target = $('
            ').data('debug', self.debug); targetL.on('click.debugrender', function() { var debug = target.data('debug'); target.removeData('debug'); if (debug) { target.hide(); if (debug.debug) { info = $('
            ').append($('').text('debug'), render($('
            '), debug.debug)); target.append(info); } if (debug.options) { info = $('
            ').append($('').text('options'), render($('
            '), debug.options)); target.append(info); } target.show(); } targetL.off('click.debugrender'); }); debugUL.after(target); opened && debugDIV.tabs('refresh'); } }, content = '', opened, tabInteg, integDIV, tabDebug, debugDIV, debugUL; this.alwaysEnabled = true; this.updateOnSelect = false; this.state = -1; this.shortcuts = [{ pattern : 'f1', description : this.title }]; fm.bind('load', function() { var parts = self.options.view || ['about', 'shortcuts', 'help', 'integrations', 'debug'], i, helpSource, tabBase, tabNav, tabs, delta; // remove 'preference' tab, it moved to command 'preference' if ((i = $.inArray('preference', parts)) !== -1) { parts.splice(i, 1); } // debug tab require jQueryUI Tabs Widget if (! $.fn.tabs) { if ((i = $.inArray(parts, 'debug')) !== -1) { parts.splice(i, 1); } } $.each(parts, function(i, title) { html.push(tab[r](/\{id\}/g, title)[r](/\{title\}/, fm.i18n(title))); }); html.push('
          '); $.inArray('about', parts) !== -1 && about(); $.inArray('shortcuts', parts) !== -1 && shortcuts(); if ($.inArray('help', parts) !== -1) { helpSource = fm.i18nBaseUrl + 'help/%s.html.js'; help(); } $.inArray('integrations', parts) !== -1 && integrations(); $.inArray('debug', parts) !== -1 && debug(); html.push('
          '); content = $(html.join('')); content.find('.ui-tabs-nav li') .on('mouseenter mouseleave', function(e) { $(this).toggleClass('ui-state-hover', e.type === 'mouseenter'); }) .on('focus blur', 'a', function(e) { $(e.delegateTarget).toggleClass('ui-state-focus', e.type === 'focusin'); }) .children() .on('click', function(e) { var link = $(this); e.preventDefault(); e.stopPropagation(); link.parent().addClass(clTabActive).siblings().removeClass(clTabActive); content.children('.ui-tabs-panel').hide().filter(link.attr('href')).show(); }) .filter(':first').trigger('click'); if (useInteg) { tabInteg = content.find('.elfinder-help-tab-integrations').hide(); integDIV = content.find('#'+fm.namespace+'-help-integrations').hide().append($('
          ').html(fm.i18n('integrationWith'))); fm.bind('helpIntegration', function(e) { var ul = integDIV.children('ul:first'), data, elm, cmdUL, cmdCls; if (e.data) { if ($.isPlainObject(e.data)) { data = Object.assign({ link: '', title: '', banner: '' }, e.data); if (data.title || data.link) { if (!data.title) { data.title = data.link; } if (data.link) { elm = $('').attr('href', data.link).attr('target', '_blank').text(data.title); } else { elm = $('').text(data.title); } if (data.banner) { elm = $('').append($('').attr(data.banner), elm); } } } else { elm = $(e.data); elm.filter('a').each(function() { var tgt = $(this); if (!tgt.attr('target')) { tgt.attr('target', '_blank');; } }); } if (elm) { tabInteg.show(); if (!ul.length) { ul = $('
            ').appendTo(integDIV); } if (data && data.cmd) { cmdCls = 'elfinder-help-integration-' + data.cmd; cmdUL = ul.find('ul.' + cmdCls); if (!cmdUL.length) { cmdUL = $('
              '); ul.append($('
            • ').append($('').html(fm.i18n('cmd'+data.cmd))).append(cmdUL)); } elm = cmdUL.append($('
            • ').append(elm)); } else { ul.append($('
            • ').append(elm)); } } } }).bind('themechange', function() { content.find('div.elfinder-help-term-theme').replaceWith(getTheme()); }); } // debug if (useDebug) { tabDebug = content.find('.elfinder-help-tab-debug').hide(); debugDIV = content.find('#'+fm.namespace+'-help-debug').children('div:first'); debugUL = debugDIV.children('ul:first').on('click', function(e) { e.preventDefault(); e.stopPropagation(); }); self.debug = {}; fm.bind('backenddebug', function(e) { // CAUTION: DO NOT TOUCH `e.data` if (useDebug && e.data && e.data.debug) { self.debug = { options : e.data.options, debug : Object.assign({ cmd : fm.currentReqCmd }, e.data.debug) }; if (self.dialog) { debugRender(); } } }); } content.find('#'+fm.namespace+'-help-about').find('.apiver').text(fm.api); self.dialog = self.fmDialog(content, { title : self.title, width : 530, maxWidth: 'window', maxHeight: 'window', autoOpen : false, destroyOnClose : false, close : function() { if (useDebug) { tabDebug.hide(); debugDIV.tabs('destroy'); } opened = false; } }) .on('click', function(e) { e.stopPropagation(); }) .css({ overflow: 'hidden' }); tabBase = self.dialog.children('.ui-tabs'); tabNav = tabBase.children('.ui-tabs-nav:first'); tabs = tabBase.children('.ui-tabs-panel'); delta = self.dialog.outerHeight(true) - self.dialog.height(); self.dialog.closest('.ui-dialog').on('resize', function() { tabs.height(self.dialog.height() - delta - tabNav.outerHeight(true) - 20); }); if (helpSource) { self.dialog.one('initContents', function() { $.ajax({ url: self.options.helpSource? self.options.helpSource : helpSource.replace('%s', fm.lang), dataType: 'html' }).done(function(source) { $('#'+fm.namespace+'-help-help').html(source); }).fail(function() { $.ajax({ url: helpSource.replace('%s', 'en'), dataType: 'html' }).done(function(source) { $('#'+fm.namespace+'-help-help').html(source); }); }); }); } self.state = 0; fm.trigger('helpBuilded', self.dialog); }).one('open', function() { var debug = false; fm.one('backenddebug', function() { debug =true; }).one('opendone', function() { requestAnimationFrame(function() { if (! debug && useDebug) { useDebug = false; tabDebug.hide(); debugDIV.hide(); debugUL.hide(); } }); }); }); this.getstate = function() { return 0; }; this.exec = function(sel, opts) { var tab = opts? opts.tab : void(0), debugShow = function() { if (useDebug) { debugDIV.tabs(); debugUL.find('a:first').trigger('click'); tabDebug.show(); opened = true; } }; debugShow(); this.dialog.trigger('initContents').elfinderdialog('open').find((tab? '.elfinder-help-tab-'+tab : '.ui-tabs-nav li') + ' a:first').trigger('click'); return $.Deferred().resolve(); }; }).prototype = { forceLoad : true }; // this is required command application/library/js/commands/hide.js000064400000010357146731177160014222 0ustar00/** * @class elFinder command "hide". * folders/files to hide as personal setting. * * @type elFinder.command * @author Naoki Sawada */ elFinder.prototype.commands.hide = function() { "use strict"; var self = this, nameCache = {}, hideData, hideCnt, cMenuType, sOrigin; this.syncTitleOnChange = true; this.shortcuts = [{ pattern : 'ctrl+shift+dot', description : this.fm.i18n('toggleHidden') }]; this.init = function() { var fm = this.fm; hideData = fm.storage('hide') || {items: {}}; hideCnt = Object.keys(hideData.items).length; this.title = fm.i18n(hideData.show? 'hideHidden' : 'showHidden'); self.update(void(0), self.title); }; this.fm.bind('select contextmenucreate closecontextmenu', function(e, fm) { var sel = (e.data? (e.data.selected || e.data.targets) : null) || fm.selected(); if (e.type === 'select' && e.data) { sOrigin = e.data.origin; } else if (e.type === 'contextmenucreate') { cMenuType = e.data.type; } if (!sel.length || (((e.type !== 'contextmenucreate' && sOrigin !== 'navbar') || cMenuType === 'cwd') && sel[0] === fm.cwd().hash)) { self.title = fm.i18n(hideData.show? 'hideHidden' : 'showHidden'); } else { self.title = fm.i18n('cmdhide'); } if (e.type !== 'closecontextmenu') { self.update(cMenuType === 'cwd'? (hideCnt? 0 : -1) : void(0), self.title); } else { cMenuType = ''; requestAnimationFrame(function() { self.update(void(0), self.title); }); } }); this.getstate = function(sel) { return (this.fm.cookieEnabled && cMenuType !== 'cwd' && (sel || this.fm.selected()).length) || hideCnt? 0 : -1; }; this.exec = function(hashes, opts) { var fm = this.fm, dfrd = $.Deferred() .done(function() { fm.trigger('hide', {items: items, opts: opts}); }) .fail(function(error) { fm.error(error); }), o = opts || {}, items = o.targets? o.targets : (hashes || fm.selected()), added = [], removed = [], notifyto, files, res; hideData = fm.storage('hide') || {}; if (!$.isPlainObject(hideData)) { hideData = {}; } if (!$.isPlainObject(hideData.items)) { hideData.items = {}; } if (opts._currentType === 'shortcut' || !items.length || (opts._currentType !== 'navbar' && sOrigin !=='navbar' && items[0] === fm.cwd().hash)) { if (hideData.show) { o.hide = true; } else if (Object.keys(hideData.items).length) { o.show = true; } } if (o.reset) { o.show = true; hideCnt = 0; } if (o.show || o.hide) { if (o.show) { hideData.show = true; } else { delete hideData.show; } if (o.show) { fm.storage('hide', o.reset? null : hideData); self.title = fm.i18n('hideHidden'); self.update(o.reset? -1 : void(0), self.title); $.each(hideData.items, function(h) { var f = fm.file(h, true); if (f && (fm.searchStatus.state || !f.phash || fm.file(f.phash))) { added.push(f); } }); if (added.length) { fm.updateCache({added: added}); fm.add({added: added}); } if (o.reset) { hideData = {items: {}}; } return dfrd.resolve(); } items = Object.keys(hideData.items); } if (items.length) { $.each(items, function(i, h) { var f; if (!hideData.items[h]) { f = fm.file(h); if (f) { nameCache[h] = f.i18 || f.name; } hideData.items[h] = nameCache[h]? nameCache[h] : h; } }); hideCnt = Object.keys(hideData.items).length; files = this.files(items); fm.storage('hide', hideData); fm.remove({removed: items}); if (hideData.show) { this.exec(void(0), {hide: true}); } if (!o.hide) { res = {}; res.undo = { cmd : 'hide', callback : function() { var nData = fm.storage('hide'); if (nData) { $.each(items, function(i, h) { delete nData.items[h]; }); hideCnt = Object.keys(nData.items).length; fm.storage('hide', nData); fm.trigger('hide', {items: items, opts: {}}); self.update(hideCnt? 0 : -1); } fm.updateCache({added: files}); fm.add({added: files}); } }; res.redo = { cmd : 'hide', callback : function() { return fm.exec('hide', void(0), {targets: items}); } }; } } return dfrd.state() == 'rejected' ? dfrd : dfrd.resolve(res); }; }; application/library/js/commands/places.js000064400000001372146731177160014555 0ustar00/** * @class elFinder command "places" * Regist to Places * * @author Naoki Sawada **/ elFinder.prototype.commands.places = function() { "use strict"; var self = this, fm = this.fm, filter = function(hashes) { var fres = true; return $.grep(self.files(hashes), function(f) { fres = fres && f.mime == 'directory' ? true : false; return fres; }); }, places = null; this.getstate = function(select) { var sel = this.hashes(select), cnt = sel.length; return places && cnt && cnt == filter(sel).length ? 0 : -1; }; this.exec = function(hashes) { var files = this.files(hashes); places.trigger('regist', [ files ]); return $.Deferred().resolve(); }; fm.one('load', function(){ places = fm.ui.places; }); }; application/library/js/commands/duplicate.js000064400000002540146731177160015256 0ustar00/** * @class elFinder command "duplicate" * Create file/folder copy with suffix "copy Number" * * @type elFinder.command * @author Dmitry (dio) Levashov */ elFinder.prototype.commands.duplicate = function() { "use strict"; var fm = this.fm; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length, filter = function(files) { var fres = true; return $.grep(files, function(f) { fres = fres && f.read && f.phash === fm.cwd().hash && ! fm.isRoot(f)? true : false; return fres; }); }; return cnt && fm.cwd().write && filter(sel).length == cnt ? 0 : -1; }; this.exec = function(hashes) { var fm = this.fm, files = this.files(hashes), cnt = files.length, dfrd = $.Deferred() .fail(function(error) { error && fm.error(error); }), args = []; if (! cnt) { return dfrd.reject(); } $.each(files, function(i, file) { if (!file.read || !fm.file(file.phash).write) { return !dfrd.reject(['errCopy', file.name, 'errPerm']); } }); if (dfrd.state() == 'rejected') { return dfrd; } return fm.request({ data : {cmd : 'duplicate', targets : this.hashes(hashes)}, notify : {type : 'copy', cnt : cnt}, navigate : { toast : { inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmdduplicate')])} } } }); }; }; application/library/js/commands/netmount.js000064400000024402146731177160015156 0ustar00/** * @class elFinder command "netmount" * Mount network volume with user credentials. * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.netmount = function() { "use strict"; var self = this, hasMenus = false, content; this.alwaysEnabled = true; this.updateOnSelect = false; this.drivers = []; this.handlers = { load : function() { var fm = self.fm; if (fm.cookieEnabled) { fm.one('open', function() { self.drivers = fm.netDrivers; if (self.drivers.length) { $.each(self.drivers, function() { var d = self.options[this]; if (d) { hasMenus = true; if (d.integrateInfo) { fm.trigger('helpIntegration', Object.assign({cmd: 'netmount'}, d.integrateInfo)); } } }); } }); } } }; this.getstate = function() { return hasMenus ? 0 : -1; }; this.exec = function() { var fm = self.fm, dfrd = $.Deferred(), o = self.options, create = function() { var winFocus = function() { inputs.protocol.trigger('change', 'winfocus'); }, inputs = { protocol : $('') .on('change', function(e, data){ var protocol = this.value; content.find('.elfinder-netmount-tr').hide(); content.find('.elfinder-netmount-tr-'+protocol).show(); dialogNode && dialogNode.children('.ui-dialog-buttonpane:first').find('button').show(); if (typeof o[protocol].select == 'function') { o[protocol].select(fm, e, data); } }) .addClass('ui-corner-all') }, opts = { title : fm.i18n('netMountDialogTitle'), resizable : true, modal : true, destroyOnClose : false, open : function() { $(window).on('focus.'+fm.namespace, winFocus); inputs.protocol.trigger('change'); }, close : function() { dfrd.state() == 'pending' && dfrd.reject(); $(window).off('focus.'+fm.namespace, winFocus); }, buttons : {} }, doMount = function() { var protocol = inputs.protocol.val(), data = {cmd : 'netmount', protocol: protocol}, cur = o[protocol], mnt2res; $.each(content.find('input.elfinder-netmount-inputs-'+protocol), function(name, input) { var val, elm; elm = $(input); if (elm.is(':radio,:checkbox')) { if (elm.is(':checked')) { val = $.trim(elm.val()); } } else { val = $.trim(elm.val()); } if (val) { data[input.name] = val; } }); if (!data.host) { return fm.trigger('error', {error : 'errNetMountHostReq', opts : {modal: true}}); } if (data.mnt2res) { mnt2res = true; } fm.request({data : data, notify : {type : 'netmount', cnt : 1, hideCnt : true}}) .done(function(data) { var pdir; if (data.added && data.added.length) { mnt2res && inputs.protocol.trigger('change', 'reset'); if (data.added[0].phash) { if (pdir = fm.file(data.added[0].phash)) { if (! pdir.dirs) { pdir.dirs = 1; fm.change({ changed: [ pdir ] }); } } } fm.one('netmountdone', function() { fm.exec('open', data.added[0].hash); }); } dfrd.resolve(); }) .fail(function(error) { if (cur.fail && typeof cur.fail == 'function') { cur.fail(fm, fm.parseError(error)); } dfrd.reject(error); }); self.dialog.elfinderdialog('close'); }, form = $('
              ').on('keydown', 'input', function(e) { var comp = true, next; if (e.keyCode === $.ui.keyCode.ENTER) { $.each(form.find('input:visible:not(.elfinder-input-optional)'), function() { if ($(this).val() === '') { comp = false; next = $(this); return false; } }); if (comp) { doMount(); } else { next.trigger('focus'); } } }), hidden = $('
              '), dialog; content = $('
              ') .append($('').append($(''+fm.i18n('protocol')+'')).append($('').append(inputs.protocol))); $.each(self.drivers, function(i, protocol) { if (o[protocol]) { inputs.protocol.append(''); $.each(o[protocol].inputs, function(name, input) { input.attr('name', name); if (input.attr('type') != 'hidden') { input.addClass('ui-corner-all elfinder-netmount-inputs-'+protocol); content.append($('').addClass('elfinder-netmount-tr elfinder-netmount-tr-'+protocol).append($(''+fm.i18n(name)+'')).append($('').append(input))); } else { input.addClass('elfinder-netmount-inputs-'+protocol); hidden.append(input); } }); o[protocol].protocol = inputs.protocol; } }); content.append(hidden); content.find('.elfinder-netmount-tr').hide(); content.find('.elfinder-netmount-tr-' + self.drivers[0]).show(); opts.buttons[fm.i18n('btnMount')] = doMount; opts.buttons[fm.i18n('btnCancel')] = function() { self.dialog.elfinderdialog('close'); }; content.find('select,input').addClass('elfinder-tabstop'); dialog = self.fmDialog(form.append(content), opts).ready(function() { inputs.protocol.trigger('change'); dialog.elfinderdialog('posInit'); }); dialogNode = dialog.closest('.ui-dialog'); return dialog; }, dialogNode; if (!self.dialog) { self.dialog = create(); } else { self.dialog.elfinderdialog('open'); } return dfrd.promise(); }; self.fm.bind('netmount', function(e) { var d = e.data || null, o = self.options, done = function() { if (o[d.protocol] && typeof o[d.protocol].done == 'function') { o[d.protocol].done(self.fm, d); content.find('select,input').addClass('elfinder-tabstop'); self.dialog.elfinderdialog('tabstopsInit'); } }; if (d && d.protocol) { if (d.mode && d.mode === 'redirect') { // To support of third-party cookie blocking (ITP) on CORS // On iOS and iPadOS 13.4 and Safari 13.1 on macOS, the session cannot be continued when redirecting OAuth in CORS mode self.fm.request({ data : {cmd : 'netmount', protocol : d.protocol, host: d.host, user : 'init', pass : 'return', options: d.options}, preventDefault : true }).done(function(data) { d = JSON.parse(data.body); done(); }); } else { done(); } } }); }; elFinder.prototype.commands.netunmount = function() { var self = this; this.alwaysEnabled = true; this.updateOnSelect = false; this.drivers = []; this.handlers = { load : function() { this.drivers = this.fm.netDrivers; } }; this.getstate = function(sel) { var fm = this.fm, file; return !!sel && this.drivers.length && !this._disabled && (file = fm.file(sel[0])) && file.netkey ? 0 : -1; }; this.exec = function(hashes) { var self = this, fm = this.fm, dfrd = $.Deferred() .fail(function(error) { error && fm.error(error); }), drive = fm.file(hashes[0]), childrenRoots = function(hash) { var roots = [], work; if (fm.leafRoots) { work = []; $.each(fm.leafRoots, function(phash, hashes) { var parents = fm.parents(phash), idx, deep; if ((idx = $.inArray(hash, parents)) !== -1) { idx = parents.length - idx; $.each(hashes, function(i, h) { work.push({i: idx, hash: h}); }); } }); if (work.length) { work.sort(function(a, b) { return a.i < b.i; }); $.each(work, function(i, o) { roots.push(o.hash); }); } } return roots; }; if (this._disabled) { return dfrd.reject(); } if (dfrd.state() == 'pending') { fm.confirm({ title : self.title, text : fm.i18n('confirmUnmount', drive.name), accept : { label : 'btnUnmount', callback : function() { var target = drive.hash, roots = childrenRoots(target), requests = [], removed = [], doUmount = function() { $.when(requests).done(function() { fm.request({ data : {cmd : 'netmount', protocol : 'netunmount', host: drive.netkey, user : target, pass : 'dum'}, notify : {type : 'netunmount', cnt : 1, hideCnt : true}, preventFail : true }) .fail(function(error) { dfrd.reject(error); }) .done(function(data) { drive.volumeid && delete fm.volumeExpires[drive.volumeid]; dfrd.resolve(); }); }).fail(function(error) { if (removed.length) { fm.remove({ removed: removed }); } dfrd.reject(error); }); }; if (roots.length) { fm.confirm({ title : self.title, text : (function() { var msgs = ['unmountChildren']; $.each(roots, function(i, hash) { msgs.push([fm.file(hash).name]); }); return msgs; })(), accept : { label : 'btnUnmount', callback : function() { $.each(roots, function(i, hash) { var d = fm.file(hash); if (d.netkey) { requests.push(fm.request({ data : {cmd : 'netmount', protocol : 'netunmount', host: d.netkey, user : d.hash, pass : 'dum'}, notify : {type : 'netunmount', cnt : 1, hideCnt : true}, preventDefault : true }).done(function(data) { if (data.removed) { d.volumeid && delete fm.volumeExpires[d.volumeid]; removed = removed.concat(data.removed); } })); } }); doUmount(); } }, cancel : { label : 'btnCancel', callback : function() { dfrd.reject(); } } }); } else { requests = null; doUmount(); } } }, cancel : { label : 'btnCancel', callback : function() { dfrd.reject(); } } }); } return dfrd; }; }; application/library/js/commands/quicklook.js000064400000057316146731177160015320 0ustar00/** * @class elFinder command "quicklook" * Fast preview for some files types * * @author Dmitry (dio) Levashov **/ (elFinder.prototype.commands.quicklook = function() { "use strict"; var self = this, fm = self.fm, /** * window closed state * * @type Number **/ closed = 0, /** * window animated state * * @type Number **/ animated = 1, /** * window opened state * * @type Number **/ opened = 2, /** * window docked state * * @type Number **/ docked = 3, /** * window docked and hidden state * * @type Number **/ dockedhidden = 4, /** * window state * * @type Number **/ state = closed, /** * Event name of update * for fix conflicts with Prototype.JS * * `@see https://github.com/Studio-42/elFinder/pull/2346 * @type String **/ evUpdate = Element.update? 'quicklookupdate' : 'update', /** * navbar icon class * * @type String **/ navicon = 'elfinder-quicklook-navbar-icon', /** * navbar "fullscreen" icon class * * @type String **/ fullscreen = 'elfinder-quicklook-fullscreen', /** * info wrapper class * * @type String */ infocls = 'elfinder-quicklook-info-wrapper', /** * Triger keydown/keypress event with left/right arrow key code * * @param Number left/right arrow key code * @return void **/ navtrigger = function(code) { $(document).trigger($.Event('keydown', { keyCode: code, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false })); }, /** * Return css for closed window * * @param jQuery file node in cwd * @return void **/ closedCss = function(node) { var elf = fm.getUI().offset(), base = (function() { var target = node.find('.elfinder-cwd-file-wrapper'); return target.length? target : node; })(), baseOffset = base.offset() || { top: 0, left: 0 }; return { opacity : 0, width : base.width(), height : base.height() - 30, top : baseOffset.top - elf.top, left : baseOffset.left - elf.left }; }, /** * Return css for opened window * * @return void **/ openedCss = function() { var contain = self.options.contain || fm.options.dialogContained, win = contain? fm.getUI() : $(window), elf = fm.getUI().offset(), w = Math.min(width, win.width()-10), h = Math.min(height, win.height()-80); return { opacity : 1, width : w, height : h, top : parseInt((win.height() - h - 60) / 2 + (contain? 0 : win.scrollTop() - elf.top)), left : parseInt((win.width() - w) / 2 + (contain? 0 : win.scrollLeft() - elf.left)) }; }, mediaNode = {}, support = function(codec, name) { var node = name || codec.substr(0, codec.indexOf('/')), media = mediaNode[node]? mediaNode[node] : (mediaNode[node] = document.createElement(node)), value = false; try { value = media.canPlayType && media.canPlayType(codec); } catch(e) {} return (value && value !== '' && value != 'no')? true : false; }, platformWin = (window.navigator.platform.indexOf('Win') != -1), /** * Opened window width (from config) * * @type Number **/ width, /** * Opened window height (from config) * * @type Number **/ height, /** * Previous style before docked * * @type String **/ prevStyle, /** * elFinder node * * @type jQuery **/ parent, /** * elFinder current directory node * * @type jQuery **/ cwd, /** * Current directory hash * * @type String **/ cwdHash, dockEnabled = false, navdrag = false, navmove = false, navtm = null, leftKey = $.ui.keyCode.LEFT, rightKey = $.ui.keyCode.RIGHT, coverEv = 'mousemove touchstart ' + ('onwheel' in document? 'wheel' : 'onmousewheel' in document? 'mousewheel' : 'DOMMouseScroll'), title = $(''), icon = $('
              '), info = $('
              '),//.hide(), cover = $('
              '), fsicon = $('
              ') .on('click touchstart', function(e) { if (navmove) { return; } var win = self.window, full = win.hasClass(fullscreen), $window = $(window), resize = function() { self.preview.trigger('changesize'); }; e.stopPropagation(); e.preventDefault(); if (full) { navStyle = ''; navShow(); win.toggleClass(fullscreen) .css(win.data('position')); $window.trigger(self.resize).off(self.resize, resize); navbar.off('mouseenter mouseleave'); cover.off(coverEv); } else { win.toggleClass(fullscreen) .data('position', { left : win.css('left'), top : win.css('top'), width : win.width(), height : win.height(), display: 'block' }) .removeAttr('style'); $(window).on(self.resize, resize) .trigger(self.resize); cover.on(coverEv, function(e) { if (! navdrag) { if (e.type === 'mousemove' || e.type === 'touchstart') { navShow(); navtm = setTimeout(function() { if (fm.UA.Mobile || navbar.parent().find('.elfinder-quicklook-navbar:hover').length < 1) { navbar.fadeOut('slow', function() { cover.show(); }); } }, 3000); } if (cover.is(':visible')) { coverHide(); cover.data('tm', setTimeout(function() { cover.show(); }, 3000)); } } }).show().trigger('mousemove'); navbar.on('mouseenter mouseleave', function(e) { if (! navdrag) { if (e.type === 'mouseenter') { navShow(); } else { cover.trigger('mousemove'); } } }); } if (fm.zIndex) { win.css('z-index', fm.zIndex + 1); } if (fm.UA.Mobile) { navbar.attr('style', navStyle); } else { navbar.attr('style', navStyle).draggable(full ? 'destroy' : { start: function() { navdrag = true; navmove = true; cover.show(); navShow(); }, stop: function() { navdrag = false; navStyle = self.navbar.attr('style'); requestAnimationFrame(function() { navmove = false; }); } }); } $(this).toggleClass(navicon+'-fullscreen-off'); var collection = win; if (parent.is('.ui-resizable')) { collection = collection.add(parent); } collection.resizable(full ? 'enable' : 'disable').removeClass('ui-state-disabled'); win.trigger('viewchange'); } ), updateOnSel = function() { self.update(void(0), (function() { var fm = self.fm, files = fm.selectedFiles(), cnt = files.length, inDock = self.docked(), getInfo = function() { var ts = 0; $.each(files, function(i, f) { var t = parseInt(f.ts); if (ts >= 0) { if (t > ts) { ts = t; } } else { ts = 'unknown'; } }); return { hash : files[0].hash + '/' + (+new Date()), name : fm.i18n('items') + ': ' + cnt, mime : 'group', size : spinner, ts : ts, files : $.map(files, function(f) { return f.hash; }), getSize : true }; }; if (! cnt) { cnt = 1; files = [fm.cwd()]; } return (cnt === 1)? files[0] : getInfo(); })()); }, navShow = function() { if (self.window.hasClass(fullscreen)) { navtm && clearTimeout(navtm); navtm = null; // if use `show()` it make infinite loop with old jQuery (jQuery/jQuery UI: 1.8.0/1.9.0) // see #1478 https://github.com/Studio-42/elFinder/issues/1478 navbar.stop(true, true).css('display', 'block'); coverHide(); } }, coverHide = function() { cover.data('tm') && clearTimeout(cover.data('tm')); cover.removeData('tm'); cover.hide(); }, prev = $('
              ').on('click touchstart', function(e) { ! navmove && navtrigger(leftKey); return false; }), next = $('
              ').on('click touchstart', function(e) { ! navmove && navtrigger(rightKey); return false; }), navbar = $('
              ') .append(prev) .append(fsicon) .append(next) .append('
              ') .append($('
              ').on('click touchstart', function(e) { ! navmove && self.window.trigger('close'); return false; })) , titleClose = $('').on('mousedown', function(e) { e.stopPropagation(); self.window.trigger('close'); }), titleDock = $('').on('mousedown', function(e) { e.stopPropagation(); if (! self.docked()) { self.window.trigger('navdockin'); } else { self.window.trigger('navdockout'); } }), spinner = '' + fm.i18n('calc') + '' + '', navStyle = '', init = true, dockHeight, getSize, tm4cwd, dockedNode, selectTm; /** * Any flags for each plugin */ this.flags = {}; this.cover = cover; this.evUpdate = evUpdate; (this.navbar = navbar)._show = navShow; this.resize = 'resize.'+fm.namespace; this.info = $('
              ').addClass(infocls) .append(icon) .append(info); this.autoPlay = function() { if (self.opened()) { return !! self.options[self.docked()? 'dockAutoplay' : 'autoplay']; } return false; }; this.preview = $('
              ') // clean info/icon .on('change', function() { navShow(); navbar.attr('style', navStyle); self.docked() && navbar.hide(); self.preview.attr('style', '').removeClass('elfinder-overflow-auto'); self.info.attr('style', '').hide(); self.cover.removeClass('elfinder-quicklook-coverbg'); icon.removeAttr('class').attr('style', ''); info.html(''); }) // update info/icon .on(evUpdate, function(e) { var preview = self.preview, file = e.file, tpl = '
              {value}
              ', update = function() { var win = self.window.css('overflow', 'hidden'); name = fm.escape(file.i18 || file.name); !file.read && e.stopImmediatePropagation(); self.window.data('hash', file.hash); self.preview.off('changesize').trigger('change').children().remove(); title.html(name); prev.css('visibility', ''); next.css('visibility', ''); if (file.hash === fm.cwdId2Hash(cwd.find('[id]:not(.elfinder-cwd-parent):first').attr('id'))) { prev.css('visibility', 'hidden'); } if (file.hash === fm.cwdId2Hash(cwd.find('[id]:last').attr('id'))) { next.css('visibility', 'hidden'); } if (file.mime === 'directory') { getSizeHashes = [ file.hash ]; } else if (file.mime === 'group' && file.getSize) { getSizeHashes = file.files; } info.html( tpl.replace(/\{value\}/, name) + tpl.replace(/\{value\}/, fm.mime2kind(file)) + tpl.replace(/\{value\}/, getSizeHashes.length ? spinner : fm.formatSize(file.size)) + tpl.replace(/\{value\}/, fm.i18n('modify')+': '+ fm.formatDate(file)) ); if (getSizeHashes.length) { getSize = fm.getSize(getSizeHashes).done(function(data) { info.find('span.elfinder-spinner').parent().html(data.formated); }).fail(function() { info.find('span.elfinder-spinner').parent().html(fm.i18n('unknown')); }).always(function() { getSize = null; }); getSize._hash = file.hash; } icon.addClass('elfinder-cwd-icon ui-corner-all '+fm.mime2class(file.mime)); if (file.icon) { icon.css(fm.getIconStyle(file, true)); } self.info.attr('class', infocls); if (file.csscls) { self.info.addClass(file.csscls); } if (file.read && (tmb = fm.tmb(file))) { $('') .hide() .appendTo(self.preview) .on('load', function() { icon.addClass(tmb.className).css('background-image', "url('"+tmb.url+"')"); $(this).remove(); }) .attr('src', tmb.url); } self.info.delay(100).fadeIn(10); if (self.window.hasClass(fullscreen)) { cover.trigger('mousemove'); } win.css('overflow', ''); }, tmb, name, getSizeHashes = []; if (file && ! Object.keys(file).length) { file = fm.cwd(); } if (file && getSize && getSize.state() === 'pending' && getSize._hash !== file.hash) { getSize.reject(); } if (file && (e.forceUpdate || self.window.data('hash') !== file.hash)) { update(); } else { e.stopImmediatePropagation(); } }); this.window = $('
              ') .hide() .addClass(fm.UA.Touch? 'elfinder-touch' : '') .on('click', function(e) { var win = this; e.stopPropagation(); if (state === opened) { requestAnimationFrame(function() { state === opened && fm.toFront(win); }); } }) .append( $('
              ') .append( $('').append( titleClose, titleDock ), title ), this.preview, self.info.hide(), cover.hide(), navbar ) .draggable({handle : 'div.elfinder-quicklook-titlebar'}) .on('open', function(e, clcss) { var win = self.window, file = self.value, node = fm.getUI('cwd'), open = function(status) { state = status; self.update(1, self.value); self.change(); win.trigger('resize.' + fm.namespace); }; if (!init && state === closed) { if (file && file.hash !== cwdHash) { node = fm.cwdHash2Elm(file.hash.split('/', 2)[0]); } navStyle = ''; navbar.attr('style', ''); state = animated; node.trigger('scrolltoview'); coverHide(); win.css(clcss || closedCss(node)) .show() .animate(openedCss(), 550, function() { open(opened); navShow(); }); fm.toFront(win); } else if (state === dockedhidden) { fm.getUI('navdock').data('addNode')(dockedNode); open(docked); self.preview.trigger('changesize'); fm.storage('previewDocked', '1'); if (fm.getUI('navdock').width() === 0) { win.trigger('navdockout'); } } }) .on('close', function(e, dfd) { var win = self.window, preview = self.preview.trigger('change'), file = self.value, hash = (win.data('hash') || '').split('/', 2)[0], close = function(status, winhide) { state = status; winhide && fm.toHide(win); preview.children().remove(); self.update(0, self.value); win.data('hash', ''); dfd && dfd.resolve(); }, node; if (self.opened()) { getSize && getSize.state() === 'pending' && getSize.reject(); if (! self.docked()) { state = animated; win.hasClass(fullscreen) && fsicon.click(); (hash && (node = cwd.find('#'+hash)).length) ? win.animate(closedCss(node), 500, function() { preview.off('changesize'); close(closed, true); }) : close(closed, true); } else { dockedNode = fm.getUI('navdock').data('removeNode')(self.window.attr('id'), 'detach'); close(dockedhidden); fm.storage('previewDocked', '2'); } } }) .on('navdockin', function(e, data) { var w = self.window, box = fm.getUI('navdock'), height = dockHeight || box.width(), opts = data || {}; if (init) { opts.init = true; } state = docked; prevStyle = w.attr('style'); w.toggleClass('ui-front').removeClass('ui-widget').draggable('disable').resizable('disable').removeAttr('style').css({ width: '100%', height: height, boxSizing: 'border-box', paddingBottom: 0, zIndex: 'unset' }); navbar.hide(); titleDock.toggleClass('ui-icon-plusthick ui-icon-minusthick elfinder-icon-full elfinder-icon-minimize'); fm.toHide(w, true); box.data('addNode')(w, opts); self.preview.trigger('changesize'); fm.storage('previewDocked', '1'); }) .on('navdockout', function(e) { var w = self.window, box = fm.getUI('navdock'), dfd = $.Deferred(), clcss = closedCss(self.preview); dockHeight = w.outerHeight(); box.data('removeNode')(w.attr('id'), fm.getUI()); w.toggleClass('ui-front').addClass('ui-widget').draggable('enable').resizable('enable').attr('style', prevStyle); titleDock.toggleClass('ui-icon-plusthick ui-icon-minusthick elfinder-icon-full elfinder-icon-minimize'); state = closed; w.trigger('open', clcss); fm.storage('previewDocked', '0'); }) .on('resize.' + fm.namespace, function() { self.preview.trigger('changesize'); }); /** * This command cannot be disable by backend * * @type Boolean **/ this.alwaysEnabled = true; /** * Selected file * * @type Object **/ this.value = null; this.handlers = { // save selected file select : function(e, d) { selectTm && cancelAnimationFrame(selectTm); if (! e.data || ! e.data.selected || ! e.data.selected.length) { selectTm = requestAnimationFrame(function() { self.opened() && updateOnSel(); }); } else { self.opened() && updateOnSel(); } }, error : function() { self.window.is(':visible') && self.window.trigger('close'); }, 'searchshow searchhide' : function() { this.opened() && this.window.trigger('close'); }, navbarshow : function() { requestAnimationFrame(function() { self.docked() && self.preview.trigger('changesize'); }); }, destroy : function() { self.window.remove(); } }; this.shortcuts = [{ pattern : 'space' }]; this.support = { audio : { ogg : support('audio/ogg;'), webm: support('audio/webm;'), mp3 : support('audio/mpeg;'), wav : support('audio/wav;'), m4a : support('audio/mp4;') || support('audio/x-m4a;') || support('audio/aac;'), flac: support('audio/flac;'), amr : support('audio/amr;') }, video : { ogg : support('video/ogg;'), webm : support('video/webm;'), mp4 : support('video/mp4;'), mkv : support('video/x-matroska;') || support('video/webm;'), '3gp': support('video/3gpp;') || support('video/mp4;'), // try as mp4 m3u8 : support('application/x-mpegURL', 'video') || support('application/vnd.apple.mpegURL', 'video'), mpd : support('application/dash+xml', 'video') } }; // for GC mediaNode = {}; /** * Return true if quickLoock window is hiddenReturn true if quickLoock window is visible and not animated * * @return Boolean **/ this.closed = function() { return (state == closed || state == dockedhidden); }; /** * Return true if quickLoock window is visible and not animated * * @return Boolean **/ this.opened = function() { return state == opened || state == docked; }; /** * Return true if quickLoock window is in NavDock * * @return Boolean **/ this.docked = function() { return state == docked; }; /** * Adds an integration into help dialog. * * @param Object opts options */ this.addIntegration = function(opts) { requestAnimationFrame(function() { fm.trigger('helpIntegration', Object.assign({cmd: 'quicklook'}, opts)); }); }; /** * Init command. * Add default plugins and init other plugins * * @return Object **/ this.init = function() { var o = this.options, win = this.window, preview = this.preview, i, p, cwdDispInlineRegex; width = o.width > 0 ? parseInt(o.width) : 450; height = o.height > 0 ? parseInt(o.height) : 300; if (o.dockHeight !== 'auto') { dockHeight = parseInt(o.dockHeight); if (! dockHeight) { dockHeight = void(0); } } fm.one('load', function() { dockEnabled = fm.getUI('navdock').data('dockEnabled'); ! dockEnabled && titleDock.hide(); parent = fm.getUI(); cwd = fm.getUI('cwd'); if (fm.zIndex) { win.css('z-index', fm.zIndex + 1); } win.appendTo(parent); // close window on escape $(document).on('keydown.'+fm.namespace, function(e) { e.keyCode == $.ui.keyCode.ESCAPE && self.opened() && ! self.docked() && win.hasClass('elfinder-frontmost') && win.trigger('close'); }); win.resizable({ handles : 'se', minWidth : 350, minHeight : 120, resize : function() { // use another event to avoid recursion in fullscreen mode // may be there is clever solution, but i cant find it :( preview.trigger('changesize'); } }); self.change(function() { if (self.opened()) { if (self.value) { if (self.value.tmb && self.value.tmb == 1) { // try re-get file object self.value = Object.assign({}, fm.file(self.value.hash)); } preview.trigger($.Event(evUpdate, {file : self.value})); } } }); preview.on(evUpdate, function(e) { var file, hash, serach; if (file = e.file) { hash = file.hash; serach = (fm.searchStatus.mixed && fm.searchStatus.state > 1); if (file.mime !== 'directory') { if (parseInt(file.size) || file.mime.match(o.mimeRegexNotEmptyCheck)) { // set current dispInlineRegex self.dispInlineRegex = cwdDispInlineRegex; if (serach || fm.optionsByHashes[hash]) { try { self.dispInlineRegex = new RegExp(fm.option('dispInlineRegex', hash), 'i'); } catch(e) { try { self.dispInlineRegex = new RegExp(!fm.isRoot(file)? fm.option('dispInlineRegex', file.phash) : fm.options.dispInlineRegex, 'i'); } catch(e) { self.dispInlineRegex = /^$/; } } } } else { // do not preview of file that size = 0 e.stopImmediatePropagation(); } } else { self.dispInlineRegex = /^$/; } self.info.show(); } else { e.stopImmediatePropagation(); } }); $.each(fm.commands.quicklook.plugins || [], function(i, plugin) { if (typeof(plugin) == 'function') { new plugin(self); } }); }).one('open', function() { var dock = Number(fm.storage('previewDocked') || o.docked), win; if (dockEnabled && dock >= 1) { win = self.window; self.exec(); win.trigger('navdockin', { init : true }); if (dock === 2) { win.trigger('close'); } else { self.update(void(0), fm.cwd()); self.change(); } } init = false; }).bind('open', function() { cwdHash = fm.cwd().hash; self.value = fm.cwd(); // set current volume dispInlineRegex try { cwdDispInlineRegex = new RegExp(fm.option('dispInlineRegex'), 'i'); } catch(e) { cwdDispInlineRegex = /^$/; } }).bind('change', function(e) { if (e.data && e.data.changed && self.opened()) { $.each(e.data.changed, function() { if (self.window.data('hash') === this.hash) { self.window.data('hash', null); self.preview.trigger(evUpdate); return false; } }); } }).bind('navdockresizestart navdockresizestop', function(e) { cover[e.type === 'navdockresizestart'? 'show' : 'hide'](); }); }; this.getstate = function() { return self.opened()? 1 : 0; }; this.exec = function() { self.closed() && updateOnSel(); self.enabled() && self.window.trigger(self.opened() ? 'close' : 'open'); return $.Deferred().resolve(); }; this.hideinfo = function() { this.info.stop(true, true).hide(); }; }).prototype = { forceLoad : true }; // this is required command application/library/js/commands/reload.js000064400000003534146731177160014556 0ustar00/** * @class elFinder command "reload" * Sync files and folders * * @author Dmitry (dio) Levashov **/ (elFinder.prototype.commands.reload = function() { "use strict"; var self = this, search = false; this.alwaysEnabled = true; this.updateOnSelect = true; this.shortcuts = [{ pattern : 'ctrl+shift+r f5' }]; this.getstate = function() { return 0; }; this.init = function() { this.fm.bind('search searchend', function() { search = this.type == 'search'; }); }; this.fm.bind('contextmenu', function(){ var fm = self.fm; if (fm.options.sync >= 1000) { self.extra = { icon: 'accept', node: $('') .attr({title: fm.i18n('autoSync')}) .on('click touchstart', function(e){ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) { return; } e.stopPropagation(); e.preventDefault(); $(this).parent() .toggleClass('ui-state-disabled', fm.options.syncStart) .parent().removeClass('ui-state-hover'); fm.options.syncStart = !fm.options.syncStart; fm.autoSync(fm.options.syncStart? null : 'stop'); }).on('ready', function(){ $(this).parent().toggleClass('ui-state-disabled', !fm.options.syncStart).css('pointer-events', 'auto'); }) }; } }); this.exec = function() { var fm = this.fm; if (!search) { var dfrd = fm.sync(), timeout = setTimeout(function() { fm.notify({type : 'reload', cnt : 1, hideCnt : true}); dfrd.always(function() { fm.notify({type : 'reload', cnt : -1}); }); }, fm.notifyDelay); return dfrd.always(function() { clearTimeout(timeout); fm.trigger('reload'); }); } else { $('div.elfinder-toolbar > div.'+fm.res('class', 'searchbtn') + ' > span.ui-icon-search').click(); } }; }).prototype = { forceLoad : true }; // this is required command application/library/js/commands/rm.js000064400000034512146731177160013726 0ustar00/** * @class elFinder command "rm" * Delete files * * @author Dmitry (dio) Levashov * @author Naoki Sawada **/ elFinder.prototype.commands.rm = function() { "use strict"; var self = this, fm = this.fm, tpl = '
              {title}
              {desc}
              ', confirm = function(dfrd, targets, files, tHash, addTexts) { var cnt = targets.length, cwd = fm.cwd().hash, descs = [], spinner = fm.i18n('calc') + '', dialog, text, tmb, size, f, fname; if (cnt > 1) { size = 0; $.each(files, function(h, f) { if (f.size && f.size != 'unknown' && f.mime !== 'directory') { var s = parseInt(f.size); if (s >= 0 && size >= 0) { size += s; } } else { size = 'unknown'; return false; } }); getSize = (size === 'unknown'); descs.push(fm.i18n('size')+': '+(getSize? spinner : fm.formatSize(size))); text = [$(tpl.replace('{class}', 'elfinder-cwd-icon-group').replace('{title}', '' + fm.i18n('items')+ ': ' + cnt + '').replace('{desc}', descs.join('
              ')))]; } else { f = files[0]; tmb = fm.tmb(f); getSize = (f.mime === 'directory'); descs.push(fm.i18n('size')+': '+(getSize? spinner : fm.formatSize(f.size))); descs.push(fm.i18n('modify')+': '+fm.formatDate(f)); fname = fm.escape(f.i18 || f.name).replace(/([_.])/g, '​$1'); text = [$(tpl.replace('{class}', fm.mime2class(f.mime)).replace('{title}', '' + fname + '').replace('{desc}', descs.join('
              ')))]; } if (addTexts) { text = text.concat(addTexts); } text.push(tHash? 'confirmTrash' : 'confirmRm'); dialog = fm.confirm({ title : self.title, text : text, accept : { label : 'btnRm', callback : function() { if (tHash) { self.toTrash(dfrd, targets, tHash); } else { remove(dfrd, targets); } } }, cancel : { label : 'btnCancel', callback : function() { fm.unlockfiles({files : targets}); if (targets.length === 1 && fm.file(targets[0]).phash !== cwd) { fm.select({selected : targets}); } else { fm.selectfiles({files : targets}); } dfrd.reject(); } } }); // load thumbnail if (tmb) { $('') .on('load', function() { dialog.find('.elfinder-cwd-icon').addClass(tmb.className).css('background-image', "url('"+tmb.url+"')"); }) .attr('src', tmb.url); } if (getSize) { getSize = fm.getSize($.map(files, function(f) { return f.mime === 'directory'? f.hash : null; })).done(function(data) { dialog.find('span.elfinder-spinner').parent().html(fm.i18n('size')+': '+data.formated); }).fail(function() { dialog.find('span.elfinder-spinner').parent().html(fm.i18n('size')+': '+fm.i18n('unknown')); }).always(function() { getSize = false; }); } }, toTrash = function(dfrd, targets, tHash) { var dsts = {}, itemCnt = targets.length, maxCnt = self.options.toTrashMaxItems, checkDirs = [], reqDfd = $.Deferred(), req, dirs, cnt; if (itemCnt > maxCnt) { self.confirm(dfrd, targets, self.files(targets), null, [fm.i18n('tooManyToTrash')]); return; } // Directory preparation preparation and directory enumeration $.each(targets, function(i, h) { var file = fm.file(h), path = fm.path(h).replace(/\\/g, '/'), m = path.match(/^[^\/]+?(\/(?:[^\/]+?\/)*)[^\/]+?$/); if (file) { if (m) { m[1] = m[1].replace(/(^\/.*?)\/?$/, '$1'); if (! dsts[m[1]]) { dsts[m[1]] = []; } dsts[m[1]].push(h); } if (file.mime === 'directory') { checkDirs.push(h); } } }); // Check directory information if (checkDirs.length) { req = fm.request({ data : {cmd : 'size', targets : checkDirs}, notify : {type: 'readdir', cnt: 1, hideCnt: true}, preventDefault : true }).done(function(data) { var cnt = 0; data.fileCnt && (cnt += parseInt(data.fileCnt)); data.dirCnt && (cnt += parseInt(data.dirCnt)); reqDfd[cnt > maxCnt ? 'reject' : 'resolve'](); }).fail(function() { reqDfd.reject(); }); setTimeout(function() { var xhr = (req && req.xhr)? req.xhr : null; if (xhr && xhr.state() == 'pending') { req.syncOnFail(false); req.reject(); reqDfd.reject(); } }, self.options.infoCheckWait * 1000); } else { reqDfd.resolve(); } // Directory creation and paste command execution reqDfd.done(function() { dirs = Object.keys(dsts); cnt = dirs.length; if (cnt) { fm.request({ data : {cmd : 'mkdir', target : tHash, dirs : dirs}, notify : {type : 'chkdir', cnt : cnt}, preventFail : true }) .fail(function(error) { dfrd.reject(error); fm.unlockfiles({files : targets}); }) .done(function(data) { var margeRes = function(data, phash, reqData) { var undo, prevUndo, redo, prevRedo; $.each(data, function(k, v) { if (Array.isArray(v)) { if (res[k]) { res[k] = res[k].concat(v); } else { res[k] = v; } } }); if (data.sync) { res.sync = 1; } if (data.added && data.added.length) { undo = function() { var targets = [], dirs = $.map(data.added, function(f) { return f.mime === 'directory'? f.hash : null; }); $.each(data.added, function(i, f) { if ($.inArray(f.phash, dirs) === -1) { targets.push(f.hash); } }); return fm.exec('restore', targets, {noToast: true}); }; redo = function() { return fm.request({ data : reqData, notify : {type : 'redo', cnt : targets.length} }); }; if (res.undo) { prevUndo = res.undo; res.undo = function() { undo(); prevUndo(); }; } else { res.undo = undo; } if (res.redo) { prevRedo = res.redo; res.redo = function() { redo(); prevRedo(); }; } else { res.redo = redo; } } }, err = ['errTrash'], res = {}, hasNtf = function() { return fm.ui.notify.children('.elfinder-notify-trash').length; }, hashes, tm, prg, prgSt; if (hashes = data.hashes) { prg = 1 / cnt * 100; prgSt = cnt === 1? 100 : 5; tm = setTimeout(function() { fm.notify({type : 'trash', cnt : 1, hideCnt : true, progress : prgSt}); }, fm.notifyDelay); $.each(dsts, function(dir, files) { var phash = fm.file(files[0]).phash, reqData; if (hashes[dir]) { reqData = {cmd : 'paste', dst : hashes[dir], targets : files, cut : 1}; fm.request({ data : reqData, preventDefault : true }) .fail(function(error) { if (error) { err = err.concat(error); } }) .done(function(data) { data = fm.normalize(data); fm.updateCache(data); margeRes(data, phash, reqData); if (data.warning) { err = err.concat(data.warning); delete data.warning; } // fire some event to update cache/ui data.removed && data.removed.length && fm.remove(data); data.added && data.added.length && fm.add(data); data.changed && data.changed.length && fm.change(data); // fire event with command name fm.trigger('paste', data); // fire event with command name + 'done' fm.trigger('pastedone'); // force update content data.sync && fm.sync(); }) .always(function() { var hashes = [], addTexts, end = 2; if (hasNtf()) { fm.notify({type : 'trash', cnt : 0, hideCnt : true, progress : prg}); } else { prgSt+= prg; } if (--cnt < 1) { tm && clearTimeout(tm); hasNtf() && fm.notify({type : 'trash', cnt : -1}); fm.unlockfiles({files : targets}); if (Object.keys(res).length) { if (err.length > 1) { if (res.removed || res.removed.length) { hashes = $.grep(targets, function(h) { return $.inArray(h, res.removed) === -1? true : false; }); } if (hashes.length) { if (err.length > end) { end = (fm.messages[err[end-1]] || '').indexOf('$') === -1? end : end + 1; } dfrd.reject(); fm.exec('rm', hashes, { addTexts: err.slice(0, end), forceRm: true }); } else { fm.error(err); } } res._noSound = true; if (res.undo && res.redo) { res.undo = { cmd : 'trash', callback : res.undo, }; res.redo = { cmd : 'trash', callback : res.redo }; } dfrd.resolve(res); } else { dfrd.reject(err); } } }); } }); } else { dfrd.reject('errFolderNotFound'); fm.unlockfiles({files : targets}); } }); } else { dfrd.reject(['error', 'The folder hierarchy to be deleting can not be determined.']); fm.unlockfiles({files : targets}); } }).fail(function() { self.confirm(dfrd, targets, self.files(targets), null, [fm.i18n('tooManyToTrash')]); }); }, remove = function(dfrd, targets, quiet) { var notify = quiet? {} : {type : 'rm', cnt : targets.length}; fm.request({ data : {cmd : 'rm', targets : targets}, notify : notify, preventFail : true }) .fail(function(error) { dfrd.reject(error); }) .done(function(data) { if (data.error || data.warning) { data.sync = true; } dfrd.resolve(data); }) .always(function() { fm.unlockfiles({files : targets}); }); }, getTHash = function(targets) { var thash = null, root1st; if (targets && targets.length) { if (targets.length > 1 && fm.searchStatus.state === 2) { root1st = fm.file(fm.root(targets[0])).volumeid; if (!$.grep(targets, function(h) { return h.indexOf(root1st) !== 0? true : false ; }).length) { thash = fm.option('trashHash', targets[0]); } } else { thash = fm.option('trashHash', targets[0]); } } return thash; }, getSize = false; // for to be able to overwrite this.confirm = confirm; this.toTrash = toTrash; this.remove = remove; this.syncTitleOnChange = true; this.updateOnSelect = false; this.shortcuts = [{ pattern : 'delete ctrl+backspace shift+delete' }]; this.value = 'rm'; this.init = function() { var update = function(origin) { var targets; delete self.extra; self.title = fm.i18n('cmd' + self.value); self.className = self.value; self.button && self.button.children('span.elfinder-button-icon')[self.value === 'trash'? 'addClass' : 'removeClass']('elfinder-button-icon-trash'); if (origin && origin !== 'cwd' && (self.state > -1 || origin === 'navbar')) { if (self.value === 'trash') { self.extra = { icon: 'rm', node: $('') .attr({title: fm.i18n('cmdrm')}) .on('ready', function(e, data) { targets = data.targets; }) .on('click touchstart', function(e){ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) { return; } e.stopPropagation(); e.preventDefault(); fm.getUI().trigger('click'); // to close the context menu immediately fm.exec('rm', targets, {_userAction: true, forceRm : true}); }) }; } } }; // re-assign for extended command self = this; fm = this.fm; // bind function of change self.change(function() { update(); }); fm.bind('contextmenucreate', function(e) { update(e.data.type); }); }; this.getstate = function(select) { var sel = this.hashes(select), filter = function(files) { var fres = true; return $.grep(files, function(h) { var f; fres = fres && (f = fm.file(h)) && ! f.locked && ! fm.isRoot(f)? true : false; return fres; }); }; return sel.length && filter(sel).length == sel.length ? 0 : -1; }; this.exec = function(hashes, cOpts) { var opts = cOpts || {}, dfrd = $.Deferred() .always(function() { if (getSize && getSize.state && getSize.state() === 'pending') { getSize.reject(); } }) .fail(function(error) { error && fm.error(error); }).done(function(data) { !opts.quiet && !data._noSound && data.removed && data.removed.length && fm.trigger('playsound', {soundFile : 'rm.wav'}); }), files = self.files(hashes), cnt = files.length, tHash = null, addTexts = opts.addTexts? opts.addTexts : null, forceRm = opts.forceRm, quiet = opts.quiet, targets; if (! cnt) { return dfrd.reject(); } $.each(files, function(i, file) { if (fm.isRoot(file)) { return !dfrd.reject(['errRm', file.name, 'errPerm']); } if (file.locked) { return !dfrd.reject(['errLocked', file.name]); } }); if (dfrd.state() === 'pending') { targets = self.hashes(hashes); cnt = files.length; if (forceRm || (self.event && self.event.originalEvent && self.event.originalEvent.shiftKey)) { tHash = ''; self.title = fm.i18n('cmdrm'); } if (tHash === null) { tHash = getTHash(targets); } fm.lockfiles({files : targets}); if (tHash && self.options.quickTrash) { self.toTrash(dfrd, targets, tHash); } else { if (quiet) { remove(dfrd, targets, quiet); } else { self.confirm(dfrd, targets, files, tHash, addTexts); } } } return dfrd; }; fm.bind('select contextmenucreate closecontextmenu', function(e) { var targets = (e.data? (e.data.selected || e.data.targets) : null) || fm.selected(); if (targets && targets.length) { self.update(void(0), (targets? getTHash(targets) : fm.option('trashHash'))? 'trash' : 'rm'); } }); }; application/library/js/elFinder.js000064400001063313146731177160013241 0ustar00/** * @class elFinder - file manager for web * * @author Dmitry (dio) Levashov **/ var elFinder = function(elm, opts, bootCallback) { "use strict"; //this.time('load'); var self = this, /** * Objects array of jQuery.Deferred that calls before elFinder boot up * * @type Array */ dfrdsBeforeBootup = [], /** * Plugin name to check for conflicts with bootstrap etc * * @type Array **/ conflictChecks = ['button', 'tooltip'], /** * Node on which elfinder creating * * @type jQuery **/ node = $(elm), /** * Object of events originally registered in this node * * @type Object */ prevEvents = $.extend(true, {}, $._data(node.get(0), 'events')), /** * Store node contents. * * @see this.destroy * @type jQuery **/ prevContent = $('
              ').append(node.contents()).attr('class', node.attr('class') || '').attr('style', node.attr('style') || ''), /** * Instance ID. Required to get/set cookie * * @type String **/ id = node.attr('id') || node.attr('id', 'elfauto' + $('.elfinder').length).attr('id'), /** * Events namespace * * @type String **/ namespace = 'elfinder-' + id, /** * Mousedown event * * @type String **/ mousedown = 'mousedown.'+namespace, /** * Keydown event * * @type String **/ keydown = 'keydown.'+namespace, /** * Keypress event * * @type String **/ keypress = 'keypress.'+namespace, /** * Keypup event * * @type String **/ keyup = 'keyup.'+namespace, /** * Is shortcuts/commands enabled * * @type Boolean **/ enabled = false, /** * Store enabled value before ajax request * * @type Boolean **/ prevEnabled = false, /** * List of build-in events which mapped into methods with same names * * @type Array **/ events = ['enable', 'disable', 'load', 'open', 'reload', 'select', 'add', 'remove', 'change', 'dblclick', 'getfile', 'lockfiles', 'unlockfiles', 'selectfiles', 'unselectfiles', 'dragstart', 'dragstop', 'search', 'searchend', 'viewchange'], /** * Rules to validate data from backend * * @type Object **/ rules = {}, /** * Current working directory hash * * @type String **/ cwd = '', /** * Current working directory options default * * @type Object **/ cwdOptionsDefault = { path : '', url : '', tmbUrl : '', disabled : [], separator : '/', archives : [], extract : [], copyOverwrite : true, uploadOverwrite : true, uploadMaxSize : 0, jpgQuality : 100, tmbCrop : false, tmbReqCustomData : false, tmb : false // old API }, /** * Current working directory options * * @type Object **/ cwdOptions = {}, /** * Files/dirs cache * * @type Object **/ files = {}, /** * Hidden Files/dirs cache * * @type Object **/ hiddenFiles = {}, /** * Files/dirs hash cache of each dirs * * @type Object **/ ownFiles = {}, /** * Selected files hashes * * @type Array **/ selected = [], /** * Events listeners * * @type Object **/ listeners = {}, /** * Shortcuts * * @type Object **/ shortcuts = {}, /** * Buffer for copied files * * @type Array **/ clipboard = [], /** * Copied/cuted files hashes * Prevent from remove its from cache. * Required for dispaly correct files names in error messages * * @type Object **/ remember = {}, /** * Queue for 'open' requests * * @type Array **/ queue = [], /** * Queue for only cwd requests e.g. `tmb` * * @type Array **/ cwdQueue = [], /** * Commands prototype * * @type Object **/ base = new self.command(self), /** * elFinder node width * * @type String * @default "auto" **/ width = 'auto', /** * elFinder node height * Number: pixcel or String: Number + "%" * * @type Number | String * @default 400 **/ height = 400, /** * Base node object or selector * Element which is the reference of the height percentage * * @type Object|String * @default null | $(window) (if height is percentage) **/ heightBase = null, /** * MIME type list(Associative array) handled as a text file * * @type Object|null */ textMimes = null, /** * elfinder path for sound played on remove * @type String * @default ./sounds/ **/ soundPath = 'sounds/', /** * JSON.stringify of previous fm.sorters * @type String */ prevSorterStr = '', /** * Map table of file extention to MIME-Type * @type Object */ extToMimeTable, /** * Disabled page unload function * @type Boolean */ diableUnloadCheck = false, beeper = $(document.createElement('audio')).hide().appendTo('body')[0], syncInterval, autoSyncStop = 0, uiCmdMapPrev = '', gcJobRes = null, open = function(data) { // NOTES: Do not touch data object var volumeid, contextmenu, emptyDirs = {}, stayDirs = {}, rmClass, hashes, calc, gc, collapsed, prevcwd, sorterStr, diff; if (self.api >= 2.1) { // support volume driver option `uiCmdMap` self.commandMap = (data.options.uiCmdMap && Object.keys(data.options.uiCmdMap).length)? data.options.uiCmdMap : {}; if (uiCmdMapPrev !== JSON.stringify(self.commandMap)) { uiCmdMapPrev = JSON.stringify(self.commandMap); } } else { self.options.sync = 0; } if (data.init) { // init - reset cache files = {}; ownFiles = {}; } else { // remove only files from prev cwd // and collapsed directory (included 100+ directories) to empty for perfomance tune in DnD prevcwd = cwd; rmClass = 'elfinder-subtree-loaded ' + self.res('class', 'navexpand'); collapsed = self.res('class', 'navcollapse'); hashes = Object.keys(files); calc = function(i) { if (!files[i]) { return true; } var isDir = (files[i].mime === 'directory'), phash = files[i].phash, pnav; if ( (!isDir || emptyDirs[phash] || (!stayDirs[phash] && self.navHash2Elm(files[i].hash).is(':hidden') && self.navHash2Elm(phash).next('.elfinder-navbar-subtree').children().length > 100 ) ) && (isDir || phash !== cwd) && ! remember[i] ) { if (isDir && !emptyDirs[phash]) { emptyDirs[phash] = true; self.navHash2Elm(phash) .removeClass(rmClass) .next('.elfinder-navbar-subtree').empty(); } deleteCache(files[i]); } else if (isDir) { stayDirs[phash] = true; } }; gc = function() { if (hashes.length) { gcJobRes && gcJobRes._abort(); gcJobRes = self.asyncJob(calc, hashes, { interval : 20, numPerOnce : 100 }).done(function() { var hd = self.storage('hide') || {items: {}}; if (Object.keys(hiddenFiles).length) { $.each(hiddenFiles, function(h) { if (!hd.items[h]) { delete hiddenFiles[h]; } }); } }); } }; self.trigger('filesgc').one('filesgc', function() { hashes = []; }); self.one('opendone', function() { if (prevcwd !== cwd) { if (! node.data('lazycnt')) { gc(); } else { self.one('lazydone', gc); } } }); } self.sorters = {}; cwd = data.cwd.hash; cache(data.files); if (!files[cwd]) { cache([data.cwd]); } else { diff = self.diff([data.cwd], true); if (diff.changed.length) { cache(diff.changed, 'change'); self.change({changed: diff.changed}); } } data.changed && data.changed.length && cache(data.changed, 'change'); // trigger event 'sorterupdate' sorterStr = JSON.stringify(self.sorters); if (prevSorterStr !== sorterStr) { self.trigger('sorterupdate'); prevSorterStr = sorterStr; } self.lastDir(cwd); self.autoSync(); }, /** * Store info about files/dirs in "files" object. * * @param Array files * @param String data type * @return void **/ cache = function(data, type) { var type = type || 'files', keeps = ['sizeInfo', 'encoding'], defsorter = { name: true, perm: true, date: true, size: true, kind: true }, sorterChk = !self.sorters._checked && (type === 'files'), l = data.length, setSorter = function(file) { var f = file || {}, sorters = []; $.each(self.sortRules, function(key) { if (defsorter[key] || typeof f[key] !== 'undefined' || (key === 'mode' && typeof f.perm !== 'undefined')) { sorters.push(key); } }); self.sorters = self.arrayFlip(sorters, true); self.sorters._checked = true; }, changedParents = {}, hideData = self.storage('hide') || {}, hides = hideData.items || {}, f, i, i1, keepProp, parents, hidden; for (i = 0; i < l; i++) { f = Object.assign({}, data[i]); hidden = (!hideData.show && hides[f.hash])? true : false; if (f.name && f.hash && f.mime) { if (!hidden) { if (sorterChk && f.phash === cwd) { setSorter(f); sorterChk = false; } if (f.phash && (type === 'add' || (type === 'change' && (!files[f.hash] || f.size !== files[f.hash])))) { if (parents = self.parents(f.phash)) { $.each(parents, function() { changedParents[this] = true; }); } } } if (files[f.hash]) { for (i1 =0; i1 < keeps.length; i1++) { if(files[f.hash][keeps[i1]] && ! f[keeps[i1]]) { f[keeps[i1]] = files[f.hash][keeps[i1]]; } } if (f.sizeInfo && !f.size) { f.size = f.sizeInfo.size; } deleteCache(files[f.hash], true); } if (hides[f.hash]) { hiddenFiles[f.hash] = f; } if (hidden) { l--; data.splice(i--, 1); } else { files[f.hash] = f; if (f.mime === 'directory' && !ownFiles[f.hash]) { ownFiles[f.hash] = {}; } if (f.phash) { if (!ownFiles[f.phash]) { ownFiles[f.phash] = {}; } ownFiles[f.phash][f.hash] = true; } } } } // delete sizeInfo cache $.each(Object.keys(changedParents), function() { var target = files[this]; if (target && target.sizeInfo) { delete target.sizeInfo; } }); // for empty folder sorterChk && setSorter(); }, /** * Delete file object from files caches * * @param Array removed hashes * @return void */ remove = function(removed) { var l = removed.length, roots = {}, rm = function(hash) { var file = files[hash], i; if (file) { if (file.mime === 'directory') { if (roots[hash]) { delete self.roots[roots[hash]]; } // restore stats of deleted root parent directory $.each(self.leafRoots, function(phash, roots) { var idx, pdir; if ((idx = $.inArray(hash, roots))!== -1) { if (roots.length === 1) { if ((pdir = Object.assign({}, files[phash])) && pdir._realStats) { $.each(pdir._realStats, function(k, v) { pdir[k] = v; }); remove(files[phash]._realStats); self.change({ changed: [pdir] }); } delete self.leafRoots[phash]; } else { self.leafRoots[phash].splice(idx, 1); } } }); if (self.searchStatus.state < 2) { $.each(files, function(h, f) { f.phash == hash && rm(h); }); } } if (file.phash) { if (parents = self.parents(file.phash)) { $.each(parents, function() { changedParents[this] = true; }); } } deleteCache(files[hash]); } }, changedParents = {}, parents; $.each(self.roots, function(k, v) { roots[v] = k; }); while (l--) { rm(removed[l]); } // delete sizeInfo cache $.each(Object.keys(changedParents), function() { var target = files[this]; if (target && target.sizeInfo) { delete target.sizeInfo; } }); }, /** * Update file object in files caches * * @param Array changed file objects * @return void * @deprecated should be use `cache(updatesArrayData, 'change');` */ change = function(changed) { $.each(changed, function(i, file) { var hash = file.hash; if (files[hash]) { $.each(Object.keys(files[hash]), function(i, v){ if (typeof file[v] === 'undefined') { delete files[hash][v]; } }); } files[hash] = files[hash] ? Object.assign(files[hash], file) : file; }); }, /** * Delete cache data of files, ownFiles and self.optionsByHashes * * @param Object file * @param Boolean update * @return void */ deleteCache = function(file, update) { var hash = file.hash, phash = file.phash; if (phash && ownFiles[phash]) { delete ownFiles[phash][hash]; } if (!update) { ownFiles[hash] && delete ownFiles[hash]; self.optionsByHashes[hash] && delete self.optionsByHashes[hash]; } delete files[hash]; }, /** * Maximum number of concurrent connections on request * * @type Number */ requestMaxConn, /** * Current number of connections * * @type Number */ requestCnt = 0, /** * Queue waiting for connection * * @type Array */ requestQueue = [], /** * Current open command instance * * @type Object */ currentOpenCmd = null, /** * Exec shortcut * * @param jQuery.Event keydown/keypress event * @return void */ execShortcut = function(e) { var code = e.keyCode, ctrlKey = !!(e.ctrlKey || e.metaKey), isMousedown = e.type === 'mousedown', ddm; !isMousedown && (self.keyState.keyCode = code); self.keyState.ctrlKey = ctrlKey; self.keyState.shiftKey = e.shiftKey; self.keyState.metaKey = e.metaKey; self.keyState.altKey = e.altKey; if (isMousedown) { return; } else if (e.type === 'keyup') { self.keyState.keyCode = null; return; } if (enabled) { $.each(shortcuts, function(i, shortcut) { if (shortcut.type == e.type && shortcut.keyCode == code && shortcut.shiftKey == e.shiftKey && shortcut.ctrlKey == ctrlKey && shortcut.altKey == e.altKey) { e.preventDefault(); e.stopPropagation(); shortcut.callback(e, self); self.debug('shortcut-exec', i+' : '+shortcut.description); } }); // prevent tab out of elfinder if (code == $.ui.keyCode.TAB && !$(e.target).is(':input')) { e.preventDefault(); } // cancel any actions by [Esc] key if (e.type === 'keydown' && code == $.ui.keyCode.ESCAPE) { // copy or cut if (! node.find('.ui-widget:visible').length) { self.clipboard().length && self.clipboard([]); } // dragging if ($.ui.ddmanager) { ddm = $.ui.ddmanager.current; ddm && ddm.helper && ddm.cancel(); } // button menus self.toHide(node.find('.ui-widget.elfinder-button-menu.elfinder-frontmost:visible')); // trigger keydownEsc self.trigger('keydownEsc', e); } } }, date = new Date(), utc, i18n, inFrame = (window.parent !== window), parentIframe = (function() { var pifm, ifms; if (inFrame) { try { ifms = $('iframe', window.parent.document); if (ifms.length) { $.each(ifms, function(i, ifm) { if (ifm.contentWindow === window) { pifm = $(ifm); return false; } }); } } catch(e) {} } return pifm; })(), /** * elFinder boot up function * * @type Function */ bootUp, /** * Original function of XMLHttpRequest.prototype.send * * @type Function */ savedXhrSend; // opts must be an object if (!opts) { opts = {}; } // set UA.Angle, UA.Rotated for mobile devices if (self.UA.Mobile) { $(window).on('orientationchange.'+namespace, function() { var a = ((screen && screen.orientation && screen.orientation.angle) || window.orientation || 0) + 0; if (a === -90) { a = 270; } self.UA.Angle = a; self.UA.Rotated = a % 180 === 0? false : true; }).trigger('orientationchange.'+namespace); } // check opt.bootCallback if (opts.bootCallback && typeof opts.bootCallback === 'function') { (function() { var func = bootCallback, opFunc = opts.bootCallback; bootCallback = function(fm, extraObj) { func && typeof func === 'function' && func.call(this, fm, extraObj); opFunc.call(this, fm, extraObj); }; })(); } delete opts.bootCallback; /** * Protocol version * * @type String **/ this.api = null; /** * elFinder use new api * * @type Boolean **/ this.newAPI = false; /** * elFinder use old api * * @type Boolean **/ this.oldAPI = false; /** * Net drivers names * * @type Array **/ this.netDrivers = []; /** * Base URL of elfFinder library starting from Manager HTML * * @type String */ this.baseUrl = ''; /** * Base URL of i18n js files * baseUrl + "js/i18n/" when empty value * * @type String */ this.i18nBaseUrl = ''; /** * Base URL of worker js files * baseUrl + "js/worker/" when empty value * * @type String */ this.workerBaseUrl = ''; /** * Is elFinder CSS loaded * * @type Boolean */ this.cssloaded = false; /** * Current theme object * * @type Object|Null */ this.theme = null; this.mimesCanMakeEmpty = {}; /** * Callback function at boot up that option specified at elFinder starting * * @type Function */ this.bootCallback; /** * Callback function at reload(restart) elFinder * * @type Function */ this.reloadCallback; /** * ID. Required to create unique cookie name * * @type String **/ this.id = id; /** * Method to store/fetch data * * @type Function **/ this.storage = (function() { try { if ('localStorage' in window && window.localStorage !== null) { if (self.UA.Safari) { // check for Mac/iOS safari private browsing mode window.localStorage.setItem('elfstoragecheck', 1); window.localStorage.removeItem('elfstoragecheck'); } return self.localStorage; } else { return self.cookie; } } catch (e) { return self.cookie; } })(); /** * Set pause page unload check function or Get state * * @param Boolean state To set state * @param Boolean keep Keep disabled * @return Boolean|void */ this.pauseUnloadCheck = function(state, keep) { if (typeof state === 'undefined') { return diableUnloadCheck; } else { diableUnloadCheck = !!state; if (state && !keep) { requestAnimationFrame(function() { diableUnloadCheck = false; }); } } }; /** * Configuration options * * @type Object **/ //this.options = $.extend(true, {}, this._options, opts); this.options = Object.assign({}, this._options); // for old type configuration if (opts.uiOptions) { if (opts.uiOptions.toolbar && Array.isArray(opts.uiOptions.toolbar)) { if ($.isPlainObject(opts.uiOptions.toolbar[opts.uiOptions.toolbar.length - 1])) { self.options.uiOptions.toolbarExtra = Object.assign(self.options.uiOptions.toolbarExtra || {}, opts.uiOptions.toolbar.pop()); } } } // Overwrite if opts value is an array (function() { var arrOv = function(obj, base) { if ($.isPlainObject(obj)) { $.each(obj, function(k, v) { if ($.isPlainObject(v)) { if (!base[k]) { base[k] = {}; } arrOv(v, base[k]); } else { base[k] = v; } }); } }; arrOv(opts, self.options); })(); // join toolbarExtra to toolbar this.options.uiOptions.toolbar.push(this.options.uiOptions.toolbarExtra); delete this.options.uiOptions.toolbarExtra; /** * Arrays that has to unbind events * * @type Object */ this.toUnbindEvents = {}; /** * Attach listener to events * To bind to multiply events at once, separate events names by space * * @param String event(s) name(s) * @param Object event handler or {done: handler} * @param Boolean priority first * @return elFinder */ this.bind = function(event, callback, priorityFirst) { var i, len; if (callback && (typeof callback === 'function' || typeof callback.done === 'function')) { event = ('' + event).toLowerCase().replace(/^\s+|\s+$/g, '').split(/\s+/); len = event.length; for (i = 0; i < len; i++) { if (listeners[event[i]] === void(0)) { listeners[event[i]] = []; } listeners[event[i]][priorityFirst? 'unshift' : 'push'](callback); } } return this; }; /** * Remove event listener if exists * To un-bind to multiply events at once, separate events names by space * * @param String event(s) name(s) * @param Function callback * @return elFinder */ this.unbind = function(event, callback) { var i, len, l, ci; event = ('' + event).toLowerCase().split(/\s+/); len = event.length; for (i = 0; i < len; i++) { if (l = listeners[event[i]]) { ci = $.inArray(callback, l); ci > -1 && l.splice(ci, 1); } } callback = null; return this; }; /** * Fire event - send notification to all event listeners * In the callback `this` becames an event object * * @param String event type * @param Object data to send across event * @param Boolean allow modify data (call by reference of data) default: true * @return elFinder */ this.trigger = function(evType, data, allowModify) { var type = evType.toLowerCase(), isopen = (type === 'open'), dataIsObj = (typeof data === 'object'), handlers = listeners[type] || [], dones = [], i, l, jst, event; this.debug('event-'+type, data); if (! dataIsObj || typeof allowModify === 'undefined') { allowModify = true; } if (l = handlers.length) { event = $.Event(type); if (data) { data._getEvent = function() { return event; }; } if (allowModify) { event.data = data; } for (i = 0; i < l; i++) { if (! handlers[i]) { // probably un-binded this handler continue; } // handler is $.Deferred(), call all functions upon completion if (handlers[i].done) { dones.push(handlers[i].done); continue; } // set `event.data` only callback has argument if (handlers[i].length) { if (!allowModify) { // to avoid data modifications. remember about "sharing" passing arguments in js :) if (typeof jst === 'undefined') { try { jst = JSON.stringify(data); } catch(e) { jst = false; } } event.data = jst? JSON.parse(jst) : data; } } try { if (handlers[i].call(event, event, this) === false || event.isDefaultPrevented()) { this.debug('event-stoped', event.type); break; } } catch (ex) { window.console && window.console.log && window.console.log(ex); } } // call done functions if (l = dones.length) { for (i = 0; i < l; i++) { try { if (dones[i].call(event, event, this) === false || event.isDefaultPrevented()) { this.debug('event-stoped', event.type + '(done)'); break; } } catch (ex) { window.console && window.console.log && window.console.log(ex); } } } if (this.toUnbindEvents[type] && this.toUnbindEvents[type].length) { $.each(this.toUnbindEvents[type], function(i, v) { self.unbind(v.type, v.callback); }); delete this.toUnbindEvents[type]; } } return this; }; /** * Get event listeners * * @param String event type * @return Array listed event functions */ this.getListeners = function(event) { return event? listeners[event.toLowerCase()] : listeners; }; // set fm.baseUrl this.baseUrl = (function() { var myTag, base, baseUrl; if (self.options.baseUrl) { return self.options.baseUrl; } else { baseUrl = ''; myTag = null; $('head > script').each(function() { if (this.src && this.src.match(/js\/elfinder(?:-[a-z0-9_-]+)?\.(?:min|full)\.js(?:$|\?)/i)) { myTag = $(this); return false; } }); if (myTag) { baseUrl = myTag.attr('src').replace(/js\/[^\/]+$/, ''); if (! baseUrl.match(/^(https?\/\/|\/)/)) { // check tag if (base = $('head > base[href]').attr('href')) { baseUrl = base.replace(/\/$/, '') + '/' + baseUrl; } } } if (baseUrl !== '') { self.options.baseUrl = baseUrl; } else { if (! self.options.baseUrl) { self.options.baseUrl = './'; } baseUrl = self.options.baseUrl; } return baseUrl; } })(); this.i18nBaseUrl = (this.options.i18nBaseUrl || this.baseUrl + 'js/i18n').replace(/\/$/, '') + '/'; this.workerBaseUrl = (this.options.workerBaseUrl || this.baseUrl + 'js/worker').replace(/\/$/, '') + '/'; this.options.maxErrorDialogs = Math.max(1, parseInt(this.options.maxErrorDialogs || 5)); // set dispInlineRegex cwdOptionsDefault.dispInlineRegex = this.options.dispInlineRegex; // auto load required CSS if (this.options.cssAutoLoad) { (function() { var baseUrl = self.baseUrl, myCss = $('head > link[href$="css/elfinder.min.css"],link[href$="css/elfinder.full.css"]:first').length, rmTag = function() { if (node.data('cssautoloadHide')) { node.data('cssautoloadHide').remove(); node.removeData('cssautoloadHide'); } }, loaded = function() { if (!self.cssloaded) { rmTag(); self.cssloaded = true; self.trigger('cssloaded'); } }; if (! myCss) { // to request CSS auto loading self.cssloaded = null; } // additional CSS files if (Array.isArray(self.options.cssAutoLoad)) { if (!self.options.themes.default) { // set as default theme self.options.themes = Object.assign({ 'default' : { 'name': 'default', 'cssurls': self.options.cssAutoLoad } }, self.options.themes); if (!self.options.theme) { self.options.theme = 'default'; } } else { if (self.cssloaded === true) { self.loadCss(self.options.cssAutoLoad); } else { self.bind('cssloaded', function() { self.loadCss(self.options.cssAutoLoad); }); } } } // try to load main css if (self.cssloaded === null) { // hide elFinder node while css loading node.addClass('elfinder') .data('cssautoloadHide', $('')); $('head').append(node.data('cssautoloadHide')); // set default theme if (!self.options.themes.default) { self.options.themes = Object.assign({ 'default' : { 'name': 'default', 'cssurls': 'css/theme.css', 'author': 'elFinder Project', 'license': '3-clauses BSD' } }, self.options.themes); if (!self.options.theme) { self.options.theme = 'default'; } } // Delay 'visibility' check it required for browsers such as Safari requestAnimationFrame(function() { if (node.css('visibility') === 'hidden') { // load CSS self.loadCss([baseUrl+'css/elfinder.min.css'], { dfd: $.Deferred().done(function() { loaded(); }).fail(function() { rmTag(); if (!self.cssloaded) { self.cssloaded = false; self.bind('init', function() { if (!self.cssloaded) { self.error(['errRead', 'CSS (elfinder.min)']); } }); } }) }); } else { loaded(); } }); } })(); } // load theme if exists (function() { var theme, themes = self.options.themes, ids = Object.keys(themes || {}); if (ids.length) { theme = self.storage('theme') || self.options.theme; if (!themes[theme]) { theme = ids[0]; } if (self.cssloaded) { self.changeTheme(theme); } else { self.bind('cssloaded', function() { self.changeTheme(theme); }); } } })(); /** * Volume option to set the properties of the root Stat * * @type Object */ this.optionProperties = { icon: void(0), csscls: void(0), tmbUrl: void(0), uiCmdMap: {}, netkey: void(0), disabled: [] }; if (! inFrame && ! this.options.enableAlways && $('body').children().length === 2) { // only node and beeper this.options.enableAlways = true; } // make options.debug if (this.options.debug === true) { this.options.debug = 'all'; } else if (Array.isArray(this.options.debug)) { (function() { var d = {}; $.each(self.options.debug, function() { d[this] = true; }); self.options.debug = d; })(); } else { this.options.debug = false; } /** * Original functions evacuated by conflict check * * @type Object */ this.noConflicts = {}; /** * Check and save conflicts with bootstrap etc * * @type Function */ this.noConflict = function() { $.each(conflictChecks, function(i, p) { if ($.fn[p] && typeof $.fn[p].noConflict === 'function') { self.noConflicts[p] = $.fn[p].noConflict(); } }); }; // do check conflict this.noConflict(); /** * Is elFinder over CORS * * @type Boolean **/ this.isCORS = false; // configure for CORS (function(){ if (typeof self.options.cors !== 'undefined' && self.options.cors !== null) { self.isCORS = self.options.cors? true : false; } else { var parseUrl = document.createElement('a'), parseUploadUrl, selfProtocol = window.location.protocol, portReg = function(protocol) { protocol = (!protocol || protocol === ':')? selfProtocol : protocol; return protocol === 'https:'? /\:443$/ : /\:80$/; }, selfHost = window.location.host.replace(portReg(selfProtocol), ''); parseUrl.href = opts.url; if (opts.urlUpload && (opts.urlUpload !== opts.url)) { parseUploadUrl = document.createElement('a'); parseUploadUrl.href = opts.urlUpload; } if (selfHost !== parseUrl.host.replace(portReg(parseUrl.protocol), '') || (parseUrl.protocol !== ':'&& parseUrl.protocol !== '' && (selfProtocol !== parseUrl.protocol)) || (parseUploadUrl && (selfHost !== parseUploadUrl.host.replace(portReg(parseUploadUrl.protocol), '') || (parseUploadUrl.protocol !== ':' && parseUploadUrl.protocol !== '' && (selfProtocol !== parseUploadUrl.protocol)) ) ) ) { self.isCORS = true; } } if (self.isCORS) { if (!$.isPlainObject(self.options.customHeaders)) { self.options.customHeaders = {}; } if (!$.isPlainObject(self.options.xhrFields)) { self.options.xhrFields = {}; } self.options.requestType = 'post'; self.options.customHeaders['X-Requested-With'] = 'XMLHttpRequest'; self.options.xhrFields['withCredentials'] = true; } })(); /** * Ajax request type * * @type String * @default "get" **/ this.requestType = /^(get|post)$/i.test(this.options.requestType) ? this.options.requestType.toLowerCase() : 'get'; // set `requestMaxConn` by option requestMaxConn = Math.max(parseInt(this.options.requestMaxConn), 1); /** * Custom data that given as options * * @type Object * @default {} */ this.optsCustomData = $.isPlainObject(this.options.customData) ? this.options.customData : {}; /** * Any data to send across every ajax request * * @type Object * @default {} **/ this.customData = Object.assign({}, this.optsCustomData); /** * Previous custom data from connector * * @type Object|null */ this.prevCustomData = null; /** * Any custom headers to send across every ajax request * * @type Object * @default {} */ this.customHeaders = $.isPlainObject(this.options.customHeaders) ? this.options.customHeaders : {}; /** * Any custom xhrFields to send across every ajax request * * @type Object * @default {} */ this.xhrFields = $.isPlainObject(this.options.xhrFields) ? this.options.xhrFields : {}; /** * Replace XMLHttpRequest.prototype.send to extended function for 3rd party libs XHR request etc. * * @type Function */ this.replaceXhrSend = function() { if (! savedXhrSend) { savedXhrSend = XMLHttpRequest.prototype.send; } XMLHttpRequest.prototype.send = function() { var xhr = this; // set request headers if (self.customHeaders) { $.each(self.customHeaders, function(key) { xhr.setRequestHeader(key, this); }); } // set xhrFields if (self.xhrFields) { $.each(self.xhrFields, function(key) { if (key in xhr) { xhr[key] = this; } }); } return savedXhrSend.apply(this, arguments); }; }; /** * Restore saved original XMLHttpRequest.prototype.send * * @type Function */ this.restoreXhrSend = function() { savedXhrSend && (XMLHttpRequest.prototype.send = savedXhrSend); }; /** * command names for into queue for only cwd requests * these commands aborts before `open` request * * @type Array * @default ['tmb', 'parents'] */ this.abortCmdsOnOpen = this.options.abortCmdsOnOpen || ['tmb', 'parents']; /** * ui.nav id prefix * * @type String */ this.navPrefix = 'nav' + (elFinder.prototype.uniqueid? elFinder.prototype.uniqueid : '') + '-'; /** * ui.cwd id prefix * * @type String */ this.cwdPrefix = elFinder.prototype.uniqueid? ('cwd' + elFinder.prototype.uniqueid + '-') : ''; // Increment elFinder.prototype.uniqueid ++elFinder.prototype.uniqueid; /** * URL to upload files * * @type String **/ this.uploadURL = opts.urlUpload || opts.url; /** * Events namespace * * @type String **/ this.namespace = namespace; /** * Today timestamp * * @type Number **/ this.today = (new Date(date.getFullYear(), date.getMonth(), date.getDate())).getTime()/1000; /** * Yesterday timestamp * * @type Number **/ this.yesterday = this.today - 86400; utc = this.options.UTCDate ? 'UTC' : ''; this.getHours = 'get'+utc+'Hours'; this.getMinutes = 'get'+utc+'Minutes'; this.getSeconds = 'get'+utc+'Seconds'; this.getDate = 'get'+utc+'Date'; this.getDay = 'get'+utc+'Day'; this.getMonth = 'get'+utc+'Month'; this.getFullYear = 'get'+utc+'FullYear'; /** * elFinder node z-index (auto detect on elFinder load) * * @type null | Number **/ this.zIndex; /** * Current search status * * @type Object */ this.searchStatus = { state : 0, // 0: search ended, 1: search started, 2: in search result query : '', target : '', mime : '', mixed : false, // in multi volumes search: false or Array that target volume ids ininc : false // in incremental search }; /** * Interface language * * @type String * @default "en" **/ this.lang = this.storage('lang') || this.options.lang; if (this.lang === 'jp') { this.lang = this.options.lang = 'ja'; } this.viewType = this.storage('view') || this.options.defaultView || 'icons'; this.sortType = this.storage('sortType') || this.options.sortType || 'name'; this.sortOrder = this.storage('sortOrder') || this.options.sortOrder || 'asc'; this.sortStickFolders = this.storage('sortStickFolders'); if (this.sortStickFolders === null) { this.sortStickFolders = !!this.options.sortStickFolders; } else { this.sortStickFolders = !!this.sortStickFolders; } this.sortAlsoTreeview = this.storage('sortAlsoTreeview'); if (this.sortAlsoTreeview === null || this.options.sortAlsoTreeview === null) { this.sortAlsoTreeview = !!this.options.sortAlsoTreeview; } else { this.sortAlsoTreeview = !!this.sortAlsoTreeview; } this.sortRules = $.extend(true, {}, this._sortRules, this.options.sortRules); $.each(this.sortRules, function(name, method) { if (typeof method != 'function') { delete self.sortRules[name]; } }); this.compare = $.proxy(this.compare, this); /** * Delay in ms before open notification dialog * * @type Number * @default 500 **/ this.notifyDelay = this.options.notifyDelay > 0 ? parseInt(this.options.notifyDelay) : 500; /** * Dragging UI Helper object * * @type jQuery | null **/ this.draggingUiHelper = null; /** * Base droppable options * * @type Object **/ this.droppable = { greedy : true, tolerance : 'pointer', accept : '.elfinder-cwd-file-wrapper,.elfinder-navbar-dir,.elfinder-cwd-file,.elfinder-cwd-filename', hoverClass : this.res('class', 'adroppable'), classes : { // Deprecated hoverClass jQueryUI>=1.12.0 'ui-droppable-hover': this.res('class', 'adroppable') }, autoDisable: true, // elFinder original, see jquery.elfinder.js drop : function(e, ui) { var dst = $(this), targets = $.grep(ui.helper.data('files')||[], function(h) { return h? true : false; }), result = [], dups = [], faults = [], isCopy = ui.helper.hasClass('elfinder-drag-helper-plus'), c = 'class', cnt, hash, i, h; if (typeof e.button === 'undefined' || ui.helper.data('namespace') !== namespace || ! self.insideWorkzone(e.pageX, e.pageY)) { return false; } if (dst.hasClass(self.res(c, 'cwdfile'))) { hash = self.cwdId2Hash(dst.attr('id')); } else if (dst.hasClass(self.res(c, 'navdir'))) { hash = self.navId2Hash(dst.attr('id')); } else { hash = cwd; } cnt = targets.length; while (cnt--) { h = targets[cnt]; // ignore drop into itself or in own location if (h != hash && files[h].phash != hash) { result.push(h); } else { ((isCopy && h !== hash && files[hash].write)? dups : faults).push(h); } } if (faults.length) { return false; } ui.helper.data('droped', true); if (dups.length) { ui.helper.hide(); self.exec('duplicate', dups, {_userAction: true}); } if (result.length) { ui.helper.hide(); self.clipboard(result, !isCopy); self.exec('paste', hash, {_userAction: true}, hash).always(function(){ self.clipboard([]); self.trigger('unlockfiles', {files : targets}); }); self.trigger('drop', {files : targets}); } } }; /** * Return true if filemanager is active * * @return Boolean **/ this.enabled = function() { return enabled && this.visible(); }; /** * Return true if filemanager is visible * * @return Boolean **/ this.visible = function() { return node[0].elfinder && node.is(':visible'); }; /** * Return file is root? * * @param Object target file object * @return Boolean */ this.isRoot = function(file) { return (file.isroot || ! file.phash)? true : false; }; /** * Return root dir hash for current working directory * * @param String target hash * @param Boolean include fake parent (optional) * @return String */ this.root = function(hash, fake) { hash = hash || cwd; var dir, i; if (! fake) { $.each(self.roots, function(id, rhash) { if (hash.indexOf(id) === 0) { dir = rhash; return false; } }); if (dir) { return dir; } } dir = files[hash]; while (dir && dir.phash && (fake || ! dir.isroot)) { dir = files[dir.phash]; } if (dir) { return dir.hash; } while (i in files && files.hasOwnProperty(i)) { dir = files[i]; if (dir.mime === 'directory' && !dir.phash && dir.read) { return dir.hash; } } return ''; }; /** * Return current working directory info * * @return Object */ this.cwd = function() { return files[cwd] || {}; }; /** * Return required cwd option * * @param String option name * @param String target hash (optional) * @return mixed */ this.option = function(name, target) { var res, item; target = target || cwd; if (self.optionsByHashes[target] && typeof self.optionsByHashes[target][name] !== 'undefined') { return self.optionsByHashes[target][name]; } if (self.hasVolOptions && cwd !== target && (!(item = self.file(target)) || item.phash !== cwd)) { res = ''; $.each(self.volOptions, function(id, opt) { if (target.indexOf(id) === 0) { res = opt[name] || ''; return false; } }); return res; } else { return cwdOptions[name] || ''; } }; /** * Return disabled commands by each folder * * @param Array target hashes * @return Array */ this.getDisabledCmds = function(targets, flip) { var disabled = {'hidden': true}; if (! Array.isArray(targets)) { targets = [ targets ]; } $.each(targets, function(i, h) { var disCmds = self.option('disabledFlip', h); if (disCmds) { Object.assign(disabled, disCmds); } }); return flip? disabled : Object.keys(disabled); }; /** * Return file data from current dir or tree by it's hash * * @param String file hash * @return Object */ this.file = function(hash, alsoHidden) { return hash? (files[hash] || (alsoHidden? hiddenFiles[hash] : void(0))) : void(0); }; /** * Return all cached files * * @param String parent hash * @return Object */ this.files = function(phash) { var items = {}; if (phash) { if (!ownFiles[phash]) { return {}; } $.each(ownFiles[phash], function(h) { if (files[h]) { items[h] = files[h]; } else { delete ownFiles[phash][h]; } }); return Object.assign({}, items); } return Object.assign({}, files); }; /** * Return list of file parents hashes include file hash * * @param String file hash * @return Array */ this.parents = function(hash) { var parents = [], dir; while (hash && (dir = this.file(hash))) { parents.unshift(dir.hash); hash = dir.phash; } return parents; }; this.path2array = function(hash, i18) { var file, path = []; while (hash) { if ((file = files[hash]) && file.hash) { path.unshift(i18 && file.i18 ? file.i18 : file.name); hash = file.isroot? null : file.phash; } else { path = []; break; } } return path; }; /** * Return file path or Get path async with jQuery.Deferred * * @param Object file * @param Boolean i18 * @param Object asyncOpt * @return String|jQuery.Deferred */ this.path = function(hash, i18, asyncOpt) { var path = files[hash] && files[hash].path ? files[hash].path : this.path2array(hash, i18).join(cwdOptions.separator); if (! asyncOpt || ! files[hash]) { return path; } else { asyncOpt = Object.assign({notify: {type : 'parents', cnt : 1, hideCnt : true}}, asyncOpt); var dfd = $.Deferred(), notify = asyncOpt.notify, noreq = false, req = function() { self.request({ data : {cmd : 'parents', target : files[hash].phash}, notify : notify, preventFail : true }) .done(done) .fail(function() { dfd.reject(); }); }, done = function() { self.one('parentsdone', function() { path = self.path(hash, i18); if (path === '' && noreq) { //retry with request noreq = false; req(); } else { if (notify) { clearTimeout(ntftm); notify.cnt = -(parseInt(notify.cnt || 0)); self.notify(notify); } dfd.resolve(path); } }); }, ntftm; if (path) { return dfd.resolve(path); } else { if (self.ui['tree']) { // try as no request if (notify) { ntftm = setTimeout(function() { self.notify(notify); }, self.notifyDelay); } noreq = true; done(true); } else { req(); } return dfd; } } }; /** * Return file url if set * * @param String file hash * @param Object Options * @return String|Object of jQuery Deferred */ this.url = function(hash, o) { var file = files[hash], opts = o || {}, async = opts.async || false, temp = opts.temporary || false, onetm = (opts.onetime && self.option('onetimeUrl', hash)) || false, absurl = opts.absurl || false, dfrd = (async || onetm)? $.Deferred() : null, filter = function(url) { if (url && absurl) { url = self.convAbsUrl(url); } return url; }, getUrl = function(url) { if (url) { return filter(url); } if (file.url) { return filter(file.url); } if (typeof baseUrl === 'undefined') { baseUrl = getBaseUrl(); } if (baseUrl) { return filter(baseUrl + $.map(self.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/')); } var params = Object.assign({}, self.customData, { cmd: 'file', target: file.hash }); if (self.oldAPI) { params.cmd = 'open'; params.current = file.phash; } return filter(self.options.url + (self.options.url.indexOf('?') === -1 ? '?' : '&') + $.param(params, true)); }, getBaseUrl = function() { return self.option('url', (!self.isRoot(file) && file.phash) || file.hash); }, baseUrl, res; if (!file || !file.read) { return async? dfrd.resolve('') : ''; } if (onetm && (!file.url || file.url == '1') && !(baseUrl = getBaseUrl())) { async = true; this.request({ data : { cmd : 'url', target : hash, options : { onetime: 1 } }, preventDefault : true, options: {async: async}, notify: {type : 'file', cnt : 1, hideCnt : true}, progressBar: opts.progressBar }).done(function(data) { dfrd.resolve(filter(data.url || '')); }).fail(function() { dfrd.resolve(''); }); } else { if (file.url == '1' || (temp && !file.url && !(baseUrl = getBaseUrl()))) { this.request({ data : { cmd : 'url', target : hash, options : { temporary: temp? 1 : 0 } }, preventDefault : true, options: {async: async}, notify: async? {type : temp? 'file' : 'url', cnt : 1, hideCnt : true} : {}, progressBar: opts.progressBar }) .done(function(data) { file.url = data.url || ''; }) .fail(function() { file.url = ''; }) .always(function() { var url; if (file.url && temp) { url = file.url; file.url = '1'; // restore } if (async) { dfrd.resolve(getUrl(url)); } else { return getUrl(url); } }); } else { if (async) { dfrd.resolve(getUrl()); } else { return getUrl(); } } } if (async) { return dfrd; } }; /** * Return file url for the extarnal service * * @param String hash The hash * @param Object options The options * @return Object jQuery Deferred */ this.forExternalUrl = function(hash, options) { var onetime = self.option('onetimeUrl', hash), opts = { async: true, absurl: true }; opts[onetime? 'onetime' : 'temporary'] = true; return self.url(hash, Object.assign({}, options, opts)); }; /** * Return file url for open in elFinder * * @param String file hash * @param Boolean for download link * @param Object requestOpts The request options * @return String */ this.openUrl = function(hash, download, callback, requestOpts) { var file = files[hash], url = '', onetimeSize = (requestOpts || {}).onetimeSize || (5 * 1024 * 1024); if (!file || !file.read) { return ''; } if (!download || download === 'sameorigin') { if (file.url) { if (file.url != 1) { url = file.url; } } else if (cwdOptions.url && file.hash.indexOf(self.cwd().volumeid) === 0) { url = cwdOptions.url + $.map(this.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/'); } if (!download || this.isSameOrigin(url)) { if (url) { url += (url.match(/\?/)? '&' : '?') + '_'.repeat((url.match(/[\?&](_+)t=/g) || ['&t=']).sort().shift().match(/[\?&](_*)t=/)[1].length + 1) + 't=' + (file.ts || parseInt(+new Date()/1000)); if (callback) { callback(url); return; } else { return url; } } } } if (callback && this.hasParrotHeaders()) { if (!requestOpts) { requestOpts = {}; } else { delete requestOpts.onetimeSize; } if (!requestOpts.onetime && !requestOpts.temporary && file.size > onetimeSize) { if (file.mime.match(/^video|audio/)) { requestOpts.temporary = true; } else { requestOpts.onetime = true; } } if (requestOpts.onetime || requestOpts.temporary) { return this.url(file.hash, Object.assign({ async: true }, requestOpts)).done(function(url) { callback(url); }).fail(function() { callback(''); }); } else { return this.getContents(hash, 'blob', requestOpts).done(function(blob){ url = (window.URL || window.webkitURL).createObjectURL(blob); callback(url); }).fail(function() { callback(''); }); } } else { url = this.options.url; url = url + (url.indexOf('?') === -1 ? '?' : '&') + (this.oldAPI ? 'cmd=open¤t='+file.phash : 'cmd=file') + '&target=' + file.hash + '&_t=' + (file.ts || parseInt(+new Date()/1000)); if (download === true) { url += '&download=1'; } $.each(this.customData, function(key, val) { url += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(val); }); if (callback) { callback(url); return; } else { return url; } } }; /** * Return thumbnail url * * @param Object file object * @return String */ this.tmb = function(file) { var tmbUrl, tmbCrop, cls = 'elfinder-cwd-bgurl', url = '', cData = {}, n = 0; if ($.isPlainObject(file)) { if (self.searchStatus.state && file.hash.indexOf(self.cwd().volumeid) !== 0) { tmbUrl = self.option('tmbUrl', file.hash); tmbCrop = self.option('tmbCrop', file.hash); } else { tmbUrl = cwdOptions.tmbUrl; tmbCrop = cwdOptions.tmbCrop; } if (tmbCrop) { cls += ' elfinder-cwd-bgurl-crop'; } if (tmbUrl === 'self' && file.mime.indexOf('image/') === 0) { url = self.openUrl(file.hash); cls += ' elfinder-cwd-bgself'; } else if ((self.oldAPI || tmbUrl) && file && file.tmb && file.tmb != 1) { url = tmbUrl + file.tmb; } else if (self.newAPI && file && file.tmb && file.tmb != 1) { url = file.tmb; } if (url) { if (tmbUrl !== 'self') { if (file.ts) { cData._t = file.ts; } if (cwdOptions.tmbReqCustomData && Object.keys(this.customData).length) { cData = Object.assign(cData, this.customData); } if (Object.keys(cData).length) { url += (url.match(/\?/) ? '&' : '?'); $.each(cData, function (key, val) { url += ((n++ === 0)? '' : '&') + encodeURIComponent(key) + '=' + encodeURIComponent(val); }); } } return { url: url, className: cls }; } } return false; }; /** * Return selected files hashes * * @return Array **/ this.selected = function() { return selected.slice(0); }; /** * Return selected files info * * @return Array */ this.selectedFiles = function() { return $.map(selected, function(hash) { return files[hash] ? Object.assign({}, files[hash]) : null; }); }; /** * Return true if file with required name existsin required folder * * @param String file name * @param String parent folder hash * @return Boolean */ this.fileByName = function(name, phash) { var hash; for (hash in files) { if (files.hasOwnProperty(hash) && files[hash].phash == phash && files[hash].name == name) { return files[hash]; } } }; /** * Valid data for required command based on rules * * @param String command name * @param Object cammand's data * @return Boolean */ this.validResponse = function(cmd, data) { return data.error || this.rules[this.rules[cmd] ? cmd : 'defaults'](data); }; /** * Return bytes from ini formated size * * @param String ini formated size * @return Integer */ this.returnBytes = function(val) { var last; if (isNaN(val)) { if (! val) { val = ''; } // for ex. 1mb, 1KB val = val.replace(/b$/i, ''); last = val.charAt(val.length - 1).toLowerCase(); val = val.replace(/[tgmk]$/i, ''); if (last == 't') { val = val * 1024 * 1024 * 1024 * 1024; } else if (last == 'g') { val = val * 1024 * 1024 * 1024; } else if (last == 'm') { val = val * 1024 * 1024; } else if (last == 'k') { val = val * 1024; } val = isNaN(val)? 0 : parseInt(val); } else { val = parseInt(val); if (val < 1) val = 0; } return val; }; /** * Process ajax request. * Fired events : * @todo * @example * @todo * @return $.Deferred */ this.request = function(opts) { var self = this, o = this.options, dfrd = $.Deferred(), // request ID reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16), // request data data = Object.assign({}, self.customData, {mimes : o.onlyMimes}, opts.data || opts), // command name cmd = data.cmd, // request type is binary isBinary = (opts.options || {}).dataType === 'binary', // current cmd is "open" isOpen = (!opts.asNotOpen && cmd === 'open'), // call default fail callback (display error dialog) ? deffail = !(isBinary || opts.preventDefault || opts.preventFail), // call default success callback ? defdone = !(isBinary || opts.preventDefault || opts.preventDone), // current progress of receive data prog = opts.progressVal || 20, // timer of fake progress progTm = null, // whether the notification dialog is currently displayed hasNotify= false, // options for notify dialog notify = !opts.progressBar? (opts.notify? Object.assign({progress: prog * opts.notify.cnt}, opts.notify) : {}) : {}, // make cancel button cancel = !!opts.cancel, // do not normalize data - return as is raw = isBinary || !!opts.raw, // sync files on request fail syncOnFail = opts.syncOnFail, // use lazy() lazy = !!opts.lazy, // prepare function before done() prepare = opts.prepare, // navigate option object when cmd done navigate = opts.navigate, // open notify dialog timeout timeout, // use browser cache useCache = (opts.options || {}).cache, // request options options = Object.assign({ url : o.url, async : true, type : this.requestType, dataType : 'json', cache : (self.api >= 2.1029), // api >= 2.1029 has unique request ID data : data, headers : this.customHeaders, xhrFields: this.xhrFields, progress : function(e) { var p = e.loaded / e.total * 100; progTm && clearTimeout(progTm); if (opts.progressBar) { try { opts.progressBar.width(p + '%'); } catch(e) {} } else { if (hasNotify && notify.type) { p = p * notify.cnt; if (prog < p) { self.notify({ type: notify.type, progress: p - prog, cnt: 0, hideCnt: notify.hideCnt }); prog = p; } } } if (opts.progress) { try { opts.progress(e); } catch(e) {} } } }, opts.options || {}), /** * Default success handler. * Call default data handlers and fire event with command name. * * @param Object normalized response data * @return void **/ done = function(data) { data.warning && self.error(data.warning); if (isOpen) { open(data); } else { self.updateCache(data); } self.lazy(function() { // fire some event to update cache/ui data.removed && data.removed.length && self.remove(data); data.added && data.added.length && self.add(data); data.changed && data.changed.length && self.change(data); }).then(function() { // fire event with command name return self.lazy(function() { self.trigger(cmd, data, false); }); }).then(function() { // fire event with command name + 'done' return self.lazy(function() { self.trigger(cmd + 'done'); }); }).then(function() { // make toast message if (data.toasts && Array.isArray(data.toasts)) { $.each(data.toasts, function() { this.msg && self.toast(this); }); } // force update content data.sync && self.sync(); }); }, /** * Request error handler. Reject dfrd with correct error message. * * @param jqxhr request object * @param String request status * @return void **/ error = function(xhr, status) { var error, data, d = self.options.debug; switch (status) { case 'abort': error = xhr.quiet ? '' : ['errConnect', 'errAbort']; break; case 'timeout': error = ['errConnect', 'errTimeout']; break; case 'parsererror': error = ['errResponse', 'errDataNotJSON']; if (xhr.responseText) { if (! cwd || (d && (d === 'all' || d['backend-error']))) { error.push(xhr.responseText); } } break; default: if (xhr.responseText) { // check responseText, Is that JSON? try { data = JSON.parse(xhr.responseText); if (data && data.error) { error = data.error; } } catch(e) {} } if (! error) { if (xhr.status == 403) { error = ['errConnect', 'errAccess', 'HTTP error ' + xhr.status]; } else if (xhr.status == 404) { error = ['errConnect', 'errNotFound', 'HTTP error ' + xhr.status]; } else if (xhr.status >= 500) { error = ['errResponse', 'errServerError', 'HTTP error ' + xhr.status]; } else { if (xhr.status == 414 && options.type === 'get') { // retry by POST method options.type = 'post'; self.abortXHR(xhr); dfrd.xhr = xhr = self.transport.send(options).fail(error).done(success); return; } error = xhr.quiet ? '' : ['errConnect', 'HTTP error ' + xhr.status]; } } } self.trigger(cmd + 'done'); dfrd.reject({error: error}, xhr, status); }, /** * Request success handler. Valid response data and reject/resolve dfrd. * * @param Object response data * @param String request status * @return void **/ success = function(response) { // Set currrent request command name self.currentReqCmd = cmd; response.debug && self.responseDebug(response); self.setCustomHeaderByXhr(xhr); if (raw) { self.abortXHR(xhr); response && response.debug && self.debug('backend-debug', response); return dfrd.resolve(response); } if (!response) { return dfrd.reject({error :['errResponse', 'errDataEmpty']}, xhr, response); } else if (!$.isPlainObject(response)) { return dfrd.reject({error :['errResponse', 'errDataNotJSON']}, xhr, response); } else if (response.error) { if (isOpen) { // check leafRoots $.each(self.leafRoots, function(phash, roots) { self.leafRoots[phash] = $.grep(roots, function(h) { return h !== data.target; }); }); } return dfrd.reject({error :response.error}, xhr, response); } var resolve = function() { var pushLeafRoots = function(name) { if (self.leafRoots[data.target] && response[name]) { $.each(self.leafRoots[data.target], function(i, h) { var root; if (root = self.file(h)) { response[name].push(root); } }); } }, setTextMimes = function() { self.textMimes = {}; $.each(self.res('mimes', 'text'), function() { self.textMimes[this.toLowerCase()] = true; }); }, actionTarget; if (isOpen) { pushLeafRoots('files'); } else if (cmd === 'tree') { pushLeafRoots('tree'); } response = self.normalize(response); if (!self.validResponse(cmd, response)) { return dfrd.reject({error :(response.norError || 'errResponse')}, xhr, response); } if (isOpen) { if (!self.api) { self.api = response.api || 1; if (self.api == '2.0' && typeof response.options.uploadMaxSize !== 'undefined') { self.api = '2.1'; } self.newAPI = self.api >= 2; self.oldAPI = !self.newAPI; } if (response.textMimes && Array.isArray(response.textMimes)) { self.resources.mimes.text = response.textMimes; setTextMimes(); } !self.textMimes && setTextMimes(); if (response.options) { cwdOptions = Object.assign({}, cwdOptionsDefault, response.options); } if (response.netDrivers) { self.netDrivers = response.netDrivers; } if (response.maxTargets) { self.maxTargets = response.maxTargets; } if (!!data.init) { self.uplMaxSize = self.returnBytes(response.uplMaxSize); self.uplMaxFile = !!response.uplMaxFile? Math.min(parseInt(response.uplMaxFile), 50) : 20; } } if (typeof prepare === 'function') { prepare(response); } if (navigate) { actionTarget = navigate.target || 'added'; if (response[actionTarget] && response[actionTarget].length) { self.one(cmd + 'done', function() { var targets = response[actionTarget], newItems = self.findCwdNodes(targets), inCwdHashes = function() { var cwdHash = self.cwd().hash; return $.map(targets, function(f) { return (f.phash && cwdHash === f.phash)? f.hash : null; }); }, hashes = inCwdHashes(), makeToast = function(t) { var node = void(0), data = t.action? t.action.data : void(0), cmd, msg, done; if ((data || hashes.length) && t.action && (msg = t.action.msg) && (cmd = t.action.cmd) && (!t.action.cwdNot || t.action.cwdNot !== self.cwd().hash)) { done = t.action.done; data = t.action.data; node = $('
              ') .append( $('') .on('mouseenter mouseleave', function(e) { $(this).toggleClass('ui-state-hover', e.type == 'mouseenter'); }) .on('click', function() { self.exec(cmd, data || hashes, {_userAction: true, _currentType: 'toast', _currentNode: $(this) }); if (done) { self.one(cmd+'done', function() { if (typeof done === 'function') { done(); } else if (done === 'select') { self.trigger('selectfiles', {files : inCwdHashes()}); } }); } }) ); } delete t.action; t.extNode = node; return t; }; if (! navigate.toast) { navigate.toast = {}; } !navigate.noselect && self.trigger('selectfiles', {files : self.searchStatus.state > 1 ? $.map(targets, function(f) { return f.hash; }) : hashes}); if (newItems.length) { if (!navigate.noscroll) { newItems.first().trigger('scrolltoview', {blink : false}); self.resources.blink(newItems, 'lookme'); } if ($.isPlainObject(navigate.toast.incwd)) { self.toast(makeToast(navigate.toast.incwd)); } } else { if ($.isPlainObject(navigate.toast.inbuffer)) { self.toast(makeToast(navigate.toast.inbuffer)); } } }); } } dfrd.resolve(response); response.debug && self.debug('backend-debug', response); }; self.abortXHR(xhr); lazy? self.lazy(resolve) : resolve(); }, xhr, _xhr, xhrAbort = function(e) { if (xhr && xhr.state() === 'pending') { self.abortXHR(xhr, { quiet: true , abort: true }); if (!e || (e.type !== 'unload' && e.type !== 'destroy')) { self.autoSync(); } } }, abort = function(e){ self.trigger(cmd + 'done'); if (e.type == 'autosync') { if (e.data.action != 'stop') return; } else if (e.type != 'unload' && e.type != 'destroy' && e.type != 'openxhrabort') { if (!e.data.added || !e.data.added.length) { return; } } xhrAbort(e); }, request = function(mode) { var queueAbort = function() { syncOnFail = false; dfrd.reject(); }; if (mode) { if (mode === 'cmd') { return cmd; } } if (isOpen) { if (currentOpenCmd && currentOpenCmd.state() === 'pending') { if (currentOpenCmd._target === data.target) { return dfrd.reject('openabort'); } else { if (currentOpenCmd.xhr) { currentOpenCmd.xhr.queueAbort(); } else { currentOpenCmd.reject('openabort'); } } } currentOpenCmd = dfrd; currentOpenCmd._target = data.target; } dfrd.always(function() { delete options.headers['X-elFinderReqid']; if (isOpen) { currentOpenCmd = null; } }).fail(function(error, xhr, response) { var errData, errMsg; if (isOpen && error === 'openabort') { error = ''; syncOnFail = false; } errData = { cmd: cmd, err: error, xhr: xhr, rc: response }; // unset this cmd queue when user canceling // see notify : function - `cancel.reject(0);` if (error === 0) { if (requestQueue.length) { requestQueue = $.grep(requestQueue, function(req) { return (req('cmd') === cmd) ? false : true; }); } } // trigger "requestError" event self.trigger('requestError', errData); if (errData._getEvent && errData._getEvent().isDefaultPrevented()) { deffail = false; syncOnFail = false; if (error) { error.error = ''; } } // abort xhr xhrAbort(); if (isOpen) { openDir = self.file(data.target); openDir && openDir.volumeid && self.isRoot(openDir) && delete self.volumeExpires[openDir.volumeid]; } self.trigger(cmd + 'fail', response); errMsg = (typeof error === 'object')? error.error : error; if (errMsg) { deffail ? self.error(errMsg) : self.debug('error', self.i18n(errMsg)); } syncOnFail && self.sync(); }); if (!cmd) { syncOnFail = false; return dfrd.reject({error :'errCmdReq'}); } if (self.maxTargets && data.targets && data.targets.length > self.maxTargets) { syncOnFail = false; return dfrd.reject({error :['errMaxTargets', self.maxTargets]}); } defdone && dfrd.done(done); // quiet abort not completed "open" requests if (isOpen) { while ((_xhr = queue.pop())) { _xhr.queueAbort(); } if (cwd !== data.target) { while ((_xhr = cwdQueue.pop())) { _xhr.queueAbort(); } } } // trigger abort autoSync for commands to add the item if ($.inArray(cmd, (self.cmdsToAdd + ' autosync').split(' ')) !== -1) { if (cmd !== 'autosync') { self.autoSync('stop'); dfrd.always(function() { self.autoSync(); }); } self.trigger('openxhrabort'); } delete options.preventFail; if (self.api >= 2.1029) { if (useCache) { options.headers['X-elFinderReqid'] = reqId; } else { Object.assign(options.data, { reqid : reqId }); } } // function for set value of this syncOnFail dfrd.syncOnFail = function(state) { syncOnFail = !!state; }; requestCnt++; dfrd.xhr = xhr = self.transport.send(options).always(function() { // set responseURL from native xhr object if (options._xhr && typeof options._xhr.responseURL !== 'undefined') { xhr.responseURL = options._xhr.responseURL || ''; } --requestCnt; if (requestQueue.length) { requestQueue.shift()(); } }).fail(error).done(success); if (self.api >= 2.1029) { xhr._requestId = reqId; } if (isOpen || (data.compare && cmd === 'info')) { // regist function queueAbort xhr.queueAbort = queueAbort; // add autoSync xhr into queue queue.unshift(xhr); // bind abort() data.compare && self.bind(self.cmdsToAdd + ' autosync openxhrabort', abort); dfrd.always(function() { var ndx = $.inArray(xhr, queue); data.compare && self.unbind(self.cmdsToAdd + ' autosync openxhrabort', abort); ndx !== -1 && queue.splice(ndx, 1); }); } else if ($.inArray(cmd, self.abortCmdsOnOpen) !== -1) { // regist function queueAbort xhr.queueAbort = queueAbort; // add "open" xhr, only cwd xhr into queue cwdQueue.unshift(xhr); dfrd.always(function() { var ndx = $.inArray(xhr, cwdQueue); ndx !== -1 && cwdQueue.splice(ndx, 1); }); } // abort pending xhr on window unload or elFinder destroy self.bind('unload destroy', abort); dfrd.always(function() { self.unbind('unload destroy', abort); }); return dfrd; }, queueingRequest = function() { // show notify if (notify.type && notify.cnt) { if (cancel) { notify.cancel = dfrd; opts.eachCancel && (notify.id = +new Date()); } timeout = setTimeout(function() { // start fake count up progTm = setTimeout(progFakeUp, 1000); self.notify(notify); hasNotify = true; dfrd.always(function() { notify.cnt = -(parseInt(notify.cnt)||0); self.notify(notify); hasNotify = false; }); }, self.notifyDelay); dfrd.always(function() { clearTimeout(timeout); }); } // queueing if (requestCnt < requestMaxConn) { // do request return request(); } else { if (isOpen) { requestQueue.unshift(request); } else { requestQueue.push(request); } return dfrd; } }, progFakeUp = function() { var add; if (hasNotify && progTm) { add = 1 * notify.cnt; progTm = null; self.notify({ type: notify.type, progress: add, cnt: 0, hideCnt: notify.hideCnt }); prog += add; if ((prog / notify.cnt) < 80) { progTm = setTimeout(progFakeUp, 500); } } }, bindData = {opts: opts, result: true}, openDir; // prevent request initial request is completed if (!self.api && !data.init) { syncOnFail = false; return dfrd.reject(); } // trigger "request.cmd" that callback be able to cancel request by substituting "false" for "event.data.result" self.trigger('request.' + cmd, bindData, true); if (! bindData.result) { self.trigger(cmd + 'done'); return dfrd.reject(); } else if (typeof bindData.result === 'object' && bindData.result.promise) { bindData.result .done(queueingRequest) .fail(function() { self.trigger(cmd + 'done'); dfrd.reject(); }); return dfrd; } return queueingRequest(); }; /** * Call cache() * Store info about files/dirs in "files" object. * * @param Array files * @param String type * @return void */ this.cache = function(dataArray, type) { if (! Array.isArray(dataArray)) { dataArray = [ dataArray ]; } cache(dataArray, type); }; /** * Update file object caches by respose data object * * @param Object respose data object * @return void */ this.updateCache = function(data) { if ($.isPlainObject(data)) { data.files && data.files.length && cache(data.files, 'files'); data.tree && data.tree.length && cache(data.tree, 'tree'); data.removed && data.removed.length && remove(data.removed); data.added && data.added.length && cache(data.added, 'add'); data.changed && data.changed.length && cache(data.changed, 'change'); } }; /** * Compare current files cache with new files and return diff * * @param Array new files * @param String target folder hash * @param Array exclude properties to compare * @return Object */ this.diff = function(incoming, onlydir, excludeProps) { var raw = {}, added = [], removed = [], changed = [], excludes = null, isChanged = function(hash) { var l = changed.length; while (l--) { if (changed[l].hash == hash) { return true; } } }; $.each(incoming, function(i, f) { raw[f.hash] = f; }); // make excludes object if (excludeProps && excludeProps.length) { excludes = {}; $.each(excludeProps, function() { excludes[this] = true; }); } // find removed $.each(files, function(hash, f) { if (! raw[hash] && (! onlydir || f.phash === onlydir)) { removed.push(hash); } }); // compare files $.each(raw, function(hash, file) { var origin = files[hash], orgKeys = {}, chkKeyLen; if (!origin) { added.push(file); } else { // make orgKeys object $.each(Object.keys(origin), function() { orgKeys[this] = true; }); $.each(file, function(prop) { delete orgKeys[prop]; if (! excludes || ! excludes[prop]) { if (file[prop] !== origin[prop]) { changed.push(file); orgKeys = {}; return false; } } }); chkKeyLen = Object.keys(orgKeys).length; if (chkKeyLen !== 0) { if (excludes) { $.each(orgKeys, function(prop) { if (excludes[prop]) { --chkKeyLen; } }); } (chkKeyLen !== 0) && changed.push(file); } } }); // parents of removed dirs mark as changed (required for tree correct work) $.each(removed, function(i, hash) { var file = files[hash], phash = file.phash; if (phash && file.mime == 'directory' && $.inArray(phash, removed) === -1 && raw[phash] && !isChanged(phash)) { changed.push(raw[phash]); } }); return { added : added, removed : removed, changed : changed }; }; /** * Sync Stopper * * @type Boolean */ this.syncStopper = false; /** * Sync content * * @return jQuery.Deferred */ this.sync = function(onlydir, polling) { if (this.syncStopper) { return $.Deferred().reject(); } this.syncStopper = true; this.autoSync('stop'); var self = this, compare = function(){ var c = '', cnt = 0, mtime = 0; if (onlydir && polling) { $.each(files, function(h, f) { if (f.phash && f.phash === onlydir) { ++cnt; mtime = Math.max(mtime, f.ts); } c = cnt+':'+mtime; }); } return c; }, comp = compare(), dfrd = $.Deferred().always(function() { !reqFail && self.trigger('sync'); }), opts = [this.request({ data : {cmd : 'open', reload : 1, target : cwd, tree : (! onlydir && this.ui.tree) ? 1 : 0, compare : comp}, preventDefault : true })], exParents = function() { var parents = [], curRoot = self.file(self.root(cwd)), curId = curRoot? curRoot.volumeid : null, phash = self.cwd().phash, isroot,pdir; while(phash) { if (pdir = self.file(phash)) { if (phash.indexOf(curId) !== 0) { parents.push( {target: phash, cmd: 'tree'} ); if (! self.isRoot(pdir)) { parents.push( {target: phash, cmd: 'parents'} ); } curRoot = self.file(self.root(phash)); curId = curRoot? curRoot.volumeid : null; } phash = pdir.phash; } else { phash = null; } } return parents; }, reqFail; if (! onlydir && self.api >= 2) { (cwd !== this.root()) && opts.push(this.request({ data : {cmd : 'parents', target : cwd}, preventDefault : true })); $.each(exParents(), function(i, data) { opts.push(self.request({ data : {cmd : data.cmd, target : data.target}, preventDefault : true })); }); } $.when.apply($, opts) .fail(function(error, xhr) { reqFail = (xhr && xhr.status != 200); if (! polling || $.inArray('errOpen', error) !== -1) { dfrd.reject(error); self.parseError(error) && self.request({ data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1}, notify : {type : 'open', cnt : 1, hideCnt : true} }); } else { dfrd.reject((error && xhr.status != 0)? error : void 0); } }) .done(function(odata) { var pdata, argLen, i; if (odata.cwd.compare) { if (comp === odata.cwd.compare) { return dfrd.reject(); } } // for 2nd and more requests pdata = {tree : []}; // results marge of 2nd and more requests argLen = arguments.length; if (argLen > 1) { for(i = 1; i < argLen; i++) { if (arguments[i].tree && arguments[i].tree.length) { pdata.tree.push.apply(pdata.tree, arguments[i].tree); } } } if (self.api < 2.1) { if (! pdata.tree) { pdata.tree = []; } pdata.tree.push(odata.cwd); } // data normalize odata = self.normalize(odata); if (!self.validResponse('open', odata)) { return dfrd.reject((odata.norError || 'errResponse')); } pdata = self.normalize(pdata); if (!self.validResponse('tree', pdata)) { return dfrd.reject((pdata.norError || 'errResponse')); } var diff = self.diff(odata.files.concat(pdata && pdata.tree ? pdata.tree : []), onlydir); diff.added.push(odata.cwd); self.updateCache(diff); // trigger events diff.removed.length && self.remove(diff); diff.added.length && self.add(diff); diff.changed.length && self.change(diff); return dfrd.resolve(diff); }) .always(function() { self.syncStopper = false; self.autoSync(); }); return dfrd; }; this.upload = function(files) { return this.transport.upload(files, this); }; /** * Bind keybord shortcut to keydown event * * @example * elfinder.shortcut({ * pattern : 'ctrl+a', * description : 'Select all files', * callback : function(e) { ... }, * keypress : true|false (bind to keypress instead of keydown) * }) * * @param Object shortcut config * @return elFinder */ this.shortcut = function(s) { var patterns, pattern, code, i, parts; if (this.options.allowShortcuts && s.pattern && $.isFunction(s.callback)) { patterns = s.pattern.toUpperCase().split(/\s+/); for (i= 0; i < patterns.length; i++) { pattern = patterns[i]; parts = pattern.split('+'); code = (code = parts.pop()).length == 1 ? (code > 0 ? code : code.charCodeAt(0)) : (code > 0 ? code : $.ui.keyCode[code]); if (code && !shortcuts[pattern]) { shortcuts[pattern] = { keyCode : code, altKey : $.inArray('ALT', parts) != -1, ctrlKey : $.inArray('CTRL', parts) != -1, shiftKey : $.inArray('SHIFT', parts) != -1, type : s.type || 'keydown', callback : s.callback, description : s.description, pattern : pattern }; } } } return this; }; /** * Registered shortcuts * * @type Object **/ this.shortcuts = function() { var ret = []; $.each(shortcuts, function(i, s) { ret.push([s.pattern, self.i18n(s.description)]); }); return ret; }; /** * Get/set clipboard content. * Return new clipboard content. * * @example * this.clipboard([]) - clean clipboard * this.clipboard([{...}, {...}], true) - put 2 files in clipboard and mark it as cutted * * @param Array new files hashes * @param Boolean cut files? * @return Array */ this.clipboard = function(hashes, cut) { var map = function() { return $.map(clipboard, function(f) { return f.hash; }); }; if (hashes !== void(0)) { clipboard.length && this.trigger('unlockfiles', {files : map()}); remember = {}; clipboard = $.map(hashes||[], function(hash) { var file = files[hash]; if (file) { remember[hash] = true; return { hash : hash, phash : file.phash, name : file.name, mime : file.mime, read : file.read, locked : file.locked, cut : !!cut }; } return null; }); this.trigger('changeclipboard', {clipboard : clipboard.slice(0, clipboard.length)}); cut && this.trigger('lockfiles', {files : map()}); } // return copy of clipboard instead of refrence return clipboard.slice(0, clipboard.length); }; /** * Return true if command enabled * * @param String command name * @param String|void hash for check of own volume's disabled cmds * @return Boolean */ this.isCommandEnabled = function(name, dstHash) { var disabled, cmd, cvid = self.cwd().volumeid || ''; // In serach results use selected item hash to check if (!dstHash && self.searchStatus.state > 1 && self.selected().length) { dstHash = self.selected()[0]; } if (dstHash && (! cvid || dstHash.indexOf(cvid) !== 0)) { disabled = self.option('disabledFlip', dstHash); //if (! disabled) { // disabled = {}; //} } else { disabled = cwdOptions.disabledFlip/* || {}*/; } cmd = this._commands[name]; return cmd ? (cmd.alwaysEnabled || !disabled[name]) : false; }; /** * Exec command and return result; * * @param String command name * @param String|Array usualy files hashes * @param String|Array command options * @param String|void hash for enabled check of own volume's disabled cmds * @return $.Deferred */ this.exec = function(cmd, files, opts, dstHash) { var dfrd, resType; // apply commandMap for keyboard shortcut if (!dstHash && this.commandMap[cmd] && this.commandMap[cmd] !== 'hidden') { cmd = this.commandMap[cmd]; } if (cmd === 'open') { if (this.searchStatus.state || this.searchStatus.ininc) { this.trigger('searchend', { noupdate: true }); } this.autoSync('stop'); } if (!dstHash && files) { if ($.isArray(files)) { if (files.length) { dstHash = files[0]; } } else { dstHash = files; } } dfrd = this._commands[cmd] && this.isCommandEnabled(cmd, dstHash) ? this._commands[cmd].exec(files, opts) : $.Deferred().reject('errUnknownCmd'); resType = typeof dfrd; if (!(resType === 'object' && dfrd.promise)) { self.debug('warning', '"cmd.exec()" should be returned "$.Deferred" but cmd "' + cmd + '" returned "' + resType + '"'); dfrd = $.Deferred().resolve(); } this.trigger('exec', { dfrd : dfrd, cmd : cmd, files : files, opts : opts, dstHash : dstHash }); return dfrd; }; /** * Create and return dialog. * * @param String|DOMElement dialog content * @param Object dialog options * @return jQuery */ this.dialog = function(content, options) { var dialog = $('
              ').append(content).appendTo(node).elfinderdialog(options, self), dnode = dialog.closest('.ui-dialog'), resize = function(){ ! dialog.data('draged') && dialog.is(':visible') && dialog.elfinderdialog('posInit'); }; if (dnode.length) { self.bind('resize', resize); dnode.on('remove', function() { self.unbind('resize', resize); }); } return dialog; }; /** * Create and return toast. * * @param Object toast options - see ui/toast.js * @return jQuery */ this.toast = function(options) { return $('
              ').appendTo(this.ui.toast).elfindertoast(options || {}, this); }; /** * Return UI widget or node * * @param String ui name * @return jQuery */ this.getUI = function(ui) { return ui? (this.ui[ui] || $()) : node; }; /** * Return elFinder.command instance or instances array * * @param String command name * @return Object | Array */ this.getCommand = function(name) { return name === void(0) ? this._commands : this._commands[name]; }; /** * Resize elfinder node * * @param String|Number width * @param String|Number height * @return void */ this.resize = function(w, h) { var getMargin = function() { var m = node.outerHeight(true) - node.innerHeight(), p = node; while(p.get(0) !== heightBase.get(0)) { p = p.parent(); m += p.outerHeight(true) - p.innerHeight(); if (! p.parent().length) { // reached the document break; } } return m; }, fit = ! node.hasClass('ui-resizable'), prv = node.data('resizeSize') || {w: 0, h: 0}, mt, size = {}; if (heightBase && heightBase.data('resizeTm')) { clearTimeout(heightBase.data('resizeTm')); } if (! self.options.noResizeBySelf) { if (typeof h === 'string') { if (mt = h.match(/^([0-9.]+)%$/)) { // setup heightBase if (! heightBase || ! heightBase.length) { heightBase = $(window); } if (! heightBase.data('marginToMyNode')) { heightBase.data('marginToMyNode', getMargin()); } if (! heightBase.data('fitToBaseFunc')) { heightBase.data('fitToBaseFunc', function(e) { var tm = heightBase.data('resizeTm'); e.preventDefault(); e.stopPropagation(); tm && cancelAnimationFrame(tm); if (! node.hasClass('elfinder-fullscreen') && (!self.UA.Mobile || heightBase.data('rotated') !== self.UA.Rotated)) { heightBase.data('rotated', self.UA.Rotated); heightBase.data('resizeTm', requestAnimationFrame(function() { self.restoreSize(); })); } }); } if (typeof heightBase.data('rotated') === 'undefined') { heightBase.data('rotated', self.UA.Rotated); } h = heightBase.height() * (mt[1] / 100) - heightBase.data('marginToMyNode'); heightBase.off('resize.' + self.namespace, heightBase.data('fitToBaseFunc')); fit && heightBase.on('resize.' + self.namespace, heightBase.data('fitToBaseFunc')); } } node.css({ width : w, height : parseInt(h) }); } size.w = Math.round(node.width()); size.h = Math.round(node.height()); node.data('resizeSize', size); if (size.w !== prv.w || size.h !== prv.h) { node.trigger('resize'); this.trigger('resize', {width : size.w, height : size.h}); } }; /** * Restore elfinder node size * * @return elFinder */ this.restoreSize = function() { this.resize(width, height); }; this.show = function() { node.show(); this.enable().trigger('show'); }; this.hide = function() { if (this.options.enableAlways) { prevEnabled = enabled; enabled = false; } this.disable(); this.trigger('hide'); node.hide(); }; /** * Lazy execution function * * @param Object function * @param Number delay * @param Object options * @return Object jQuery.Deferred */ this.lazy = function(func, delay, opts) { var busy = function(state) { var cnt = node.data('lazycnt'), repaint; if (state) { repaint = node.data('lazyrepaint')? false : opts.repaint; if (! cnt) { node.data('lazycnt', 1) .addClass('elfinder-processing'); } else { node.data('lazycnt', ++cnt); } if (repaint) { node.data('lazyrepaint', true).css('display'); // force repaint } } else { if (cnt && cnt > 1) { node.data('lazycnt', --cnt); } else { repaint = node.data('lazyrepaint'); node.data('lazycnt', 0) .removeData('lazyrepaint') .removeClass('elfinder-processing'); repaint && node.css('display'); // force repaint; self.trigger('lazydone'); } } }, dfd = $.Deferred(), callFunc = function() { dfd.resolve(func.call(dfd)); busy(false); }; delay = delay || 0; opts = opts || {}; busy(true); if (delay) { setTimeout(callFunc, delay); } else { requestAnimationFrame(callFunc); } return dfd; }; /** * Destroy this elFinder instance * * @return void **/ this.destroy = function() { if (node && node[0].elfinder) { node.hasClass('elfinder-fullscreen') && self.toggleFullscreen(node); this.options.syncStart = false; this.autoSync('forcestop'); this.trigger('destroy').disable(); clipboard = []; selected = []; listeners = {}; shortcuts = {}; $(window).off('.' + namespace); $(document).off('.' + namespace); self.trigger = function(){}; $(beeper).remove(); node.off() .removeData() .empty() .append(prevContent.contents()) .attr('class', prevContent.attr('class')) .attr('style', prevContent.attr('style')); delete node[0].elfinder; // restore kept events $.each(prevEvents, function(n, arr) { $.each(arr, function(i, o) { node.on(o.type + (o.namespace? '.'+o.namespace : ''), o.selector, o.handler); }); }); } }; /** * Start or stop auto sync * * @param String|Bool stop * @return void */ this.autoSync = function(mode) { var sync; if (self.options.sync >= 1000) { if (syncInterval) { clearTimeout(syncInterval); syncInterval = null; self.trigger('autosync', {action : 'stop'}); } if (mode === 'stop') { ++autoSyncStop; } else { autoSyncStop = Math.max(0, --autoSyncStop); } if (autoSyncStop || mode === 'forcestop' || ! self.options.syncStart) { return; } // run interval sync sync = function(start){ var timeout; if (cwdOptions.syncMinMs && (start || syncInterval)) { start && self.trigger('autosync', {action : 'start'}); timeout = Math.max(self.options.sync, cwdOptions.syncMinMs); syncInterval && clearTimeout(syncInterval); syncInterval = setTimeout(function() { var dosync = true, hash = cwd, cts; if (cwdOptions.syncChkAsTs && files[hash] && (cts = files[hash].ts)) { self.request({ data : {cmd : 'info', targets : [hash], compare : cts, reload : 1}, preventDefault : true }) .done(function(data){ var ts; dosync = true; if (data.compare) { ts = data.compare; if (ts == cts) { dosync = false; } } if (dosync) { self.sync(hash).always(function(){ if (ts) { // update ts for cache clear etc. files[hash].ts = ts; } sync(); }); } else { sync(); } }) .fail(function(error, xhr){ var err = self.parseError(error); if (err && xhr.status != 0) { self.error(err); if (Array.isArray(err) && $.inArray('errOpen', err) !== -1) { self.request({ data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1}, notify : {type : 'open', cnt : 1, hideCnt : true} }); } } else { syncInterval = setTimeout(function() { sync(); }, timeout); } }); } else { self.sync(cwd, true).always(function(){ sync(); }); } }, timeout); } }; sync(true); } }; /** * Return bool is inside work zone of specific point * * @param Number event.pageX * @param Number event.pageY * @return Bool */ this.insideWorkzone = function(x, y, margin) { var rectangle = this.getUI('workzone').data('rectangle'); margin = margin || 1; if (x < rectangle.left + margin || x > rectangle.left + rectangle.width + margin || y < rectangle.top + margin || y > rectangle.top + rectangle.height + margin) { return false; } return true; }; /** * Target ui node move to last of children of elFinder node fot to show front * * @param Object target Target jQuery node object */ this.toFront = function(target) { var nodes = node.children('.ui-front').removeClass('elfinder-frontmost'), lastnode = nodes.last(); nodes.css('z-index', ''); $(target).addClass('ui-front elfinder-frontmost').css('z-index', lastnode.css('z-index') + 1); }; /** * Remove class 'elfinder-frontmost' and hide() to target ui node * * @param Object target Target jQuery node object * @param Boolean nohide Do not hide */ this.toHide =function(target, nohide) { var tgt = $(target), last; !nohide && tgt.hide(); if (tgt.hasClass('elfinder-frontmost')) { tgt.removeClass('elfinder-frontmost'); last = node.children('.ui-front:visible:not(.elfinder-frontmost)').last(); if (last.length) { requestAnimationFrame(function() { if (!node.children('.elfinder-frontmost:visible').length) { self.toFront(last); last.trigger('frontmost'); } }); } } }; /** * Return css object for maximize * * @return Object */ this.getMaximizeCss = function() { return { width : '100%', height : '100%', margin : 0, top : 0, left : 0, display : 'block', position: 'fixed', zIndex : Math.max(self.zIndex? (self.zIndex + 1) : 0 , 1000), maxWidth : '', maxHeight: '' }; }; // Closure for togglefullscreen (function() { // check is in iframe if (inFrame && self.UA.Fullscreen) { self.UA.Fullscreen = false; if (parentIframe && typeof parentIframe.attr('allowfullscreen') !== 'undefined') { self.UA.Fullscreen = true; } } var orgStyle, bodyOvf, resizeTm, fullElm, exitFull, toFull, funcObj, cls = 'elfinder-fullscreen', clsN = 'elfinder-fullscreen-native', checkDialog = function() { var t = 0, l = 0; $.each(node.children('.ui-dialog,.ui-draggable'), function(i, d) { var $d = $(d), pos = $d.position(); if (pos.top < 0) { $d.css('top', t); t += 20; } if (pos.left < 0) { $d.css('left', l); l += 20; } }); }, setFuncObj = function() { var useFullscreen = self.storage('useFullscreen'); funcObj = self.UA.Fullscreen && (useFullscreen? useFullscreen > 0 : self.options.commandsOptions.fullscreen.mode === 'screen') ? { // native full screen mode fullElm: function() { return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || null; }, exitFull: function() { if (document.exitFullscreen) { return document.exitFullscreen(); } else if (document.webkitExitFullscreen) { return document.webkitExitFullscreen(); } else if (document.mozCancelFullScreen) { return document.mozCancelFullScreen(); } else if (document.msExitFullscreen) { return document.msExitFullscreen(); } }, toFull: function(elem) { if (elem.requestFullscreen) { return elem.requestFullscreen(); } else if (elem.webkitRequestFullscreen) { return elem.webkitRequestFullscreen(); } else if (elem.mozRequestFullScreen) { return elem.mozRequestFullScreen(); } else if (elem.msRequestFullscreen) { return elem.msRequestFullscreen(); } return false; } } : { // node element maximize mode fullElm: function() { var full; if (node.hasClass(cls)) { return node.get(0); } else { full = node.find('.' + cls); if (full.length) { return full.get(0); } } return null; }, exitFull: function() { var elm; $(window).off('resize.' + namespace, resize); if (bodyOvf !== void(0)) { $('body').css('overflow', bodyOvf); } bodyOvf = void(0); if (orgStyle) { elm = orgStyle.elm; restoreStyle(elm); $(elm).trigger('resize', {fullscreen: 'off'}); } $(window).trigger('resize'); }, toFull: function(elem) { bodyOvf = $('body').css('overflow') || ''; $('body').css('overflow', 'hidden'); $(elem).css(self.getMaximizeCss()) .addClass(cls) .trigger('resize', {fullscreen: 'on'}); checkDialog(); $(window).on('resize.' + namespace, resize).trigger('resize'); return true; } }; }, restoreStyle = function(elem) { if (orgStyle && orgStyle.elm == elem) { $(elem).removeClass(cls + ' ' + clsN).attr('style', orgStyle.style); orgStyle = null; } }, resize = function(e) { var elm; if (e.target === window) { resizeTm && cancelAnimationFrame(resizeTm); resizeTm = requestAnimationFrame(function() { if (elm = funcObj.fullElm()) { $(elm).trigger('resize', {fullscreen: 'on'}); } }); } }; setFuncObj(); $(document).on('fullscreenchange.' + namespace + ' webkitfullscreenchange.' + namespace + ' mozfullscreenchange.' + namespace + ' MSFullscreenChange.' + namespace, function(e){ if (self.UA.Fullscreen) { var elm = funcObj.fullElm(), win = $(window); resizeTm && cancelAnimationFrame(resizeTm); if (elm === null) { win.off('resize.' + namespace, resize); if (orgStyle) { elm = orgStyle.elm; restoreStyle(elm); $(elm).trigger('resize', {fullscreen: 'off'}); } } else { $(elm).addClass(cls + ' ' + clsN) .attr('style', 'width:100%; height:100%; margin:0; padding:0;') .trigger('resize', {fullscreen: 'on'}); win.on('resize.' + namespace, resize); checkDialog(); } win.trigger('resize'); } }); /** * Toggle Full Scrren Mode * * @param Object target * @param Bool full * @return Object | Null DOM node object of current full scrren */ self.toggleFullscreen = function(target, full) { var elm = $(target).get(0), curElm = null; curElm = funcObj.fullElm(); if (curElm) { if (curElm == elm) { if (full === true) { return curElm; } } else { if (full === false) { return curElm; } } funcObj.exitFull(); return null; } else { if (full === false) { return null; } } setFuncObj(); orgStyle = {elm: elm, style: $(elm).attr('style')}; if (funcObj.toFull(elm) !== false) { return elm; } else { orgStyle = null; return null; } }; })(); // Closure for toggleMaximize (function(){ var cls = 'elfinder-maximized', resizeTm, resize = function(e) { if (e.target === window && e.data && e.data.elm) { var elm = e.data.elm; resizeTm && cancelAnimationFrame(resizeTm); resizeTm = requestAnimationFrame(function() { elm.trigger('resize', {maximize: 'on'}); }); } }, exitMax = function(elm) { $(window).off('resize.' + namespace, resize); $('body').css('overflow', elm.data('bodyOvf')); elm.removeClass(cls) .attr('style', elm.data('orgStyle')) .removeData('bodyOvf') .removeData('orgStyle'); elm.trigger('resize', {maximize: 'off'}); }, toMax = function(elm) { elm.data('bodyOvf', $('body').css('overflow') || '') .data('orgStyle', elm.attr('style')) .addClass(cls) .css(self.getMaximizeCss()); $('body').css('overflow', 'hidden'); $(window).on('resize.' + namespace, {elm: elm}, resize); elm.trigger('resize', {maximize: 'on'}); }; /** * Toggle Maximize target node * * @param Object target * @param Bool max * @return void */ self.toggleMaximize = function(target, max) { var elm = $(target), maximized = elm.hasClass(cls); if (maximized) { if (max === true) { return; } exitMax(elm); } else { if (max === false) { return; } toMax(elm); } }; })(); /************* init stuffs ****************/ Object.assign($.ui.keyCode, { 'F1' : 112, 'F2' : 113, 'F3' : 114, 'F4' : 115, 'F5' : 116, 'F6' : 117, 'F7' : 118, 'F8' : 119, 'F9' : 120, 'F10' : 121, 'F11' : 122, 'F12' : 123, 'DIG0' : 48, 'DIG1' : 49, 'DIG2' : 50, 'DIG3' : 51, 'DIG4' : 52, 'DIG5' : 53, 'DIG6' : 54, 'DIG7' : 55, 'DIG8' : 56, 'DIG9' : 57, 'NUM0' : 96, 'NUM1' : 97, 'NUM2' : 98, 'NUM3' : 99, 'NUM4' : 100, 'NUM5' : 101, 'NUM6' : 102, 'NUM7' : 103, 'NUM8' : 104, 'NUM9' : 105, 'CONTEXTMENU' : 93, 'DOT' : 190 }); this.dragUpload = false; this.xhrUpload = (typeof XMLHttpRequestUpload != 'undefined' || typeof XMLHttpRequestEventTarget != 'undefined') && typeof File != 'undefined' && typeof FormData != 'undefined'; // configure transport object this.transport = {}; if (typeof(this.options.transport) == 'object') { this.transport = this.options.transport; if (typeof(this.transport.init) == 'function') { this.transport.init(this); } } if (typeof(this.transport.send) != 'function') { this.transport.send = function(opts) { if (!self.UA.IE) { // keep native xhr object for handling property responseURL opts._xhr = new XMLHttpRequest(); opts.xhr = function() { if (opts.progress) { opts._xhr.addEventListener('progress', opts.progress); } return opts._xhr; }; } return $.ajax(opts); }; } if (this.transport.upload == 'iframe') { this.transport.upload = $.proxy(this.uploads.iframe, this); } else if (typeof(this.transport.upload) == 'function') { this.dragUpload = !!this.options.dragUploadAllow; } else if (this.xhrUpload && !!this.options.dragUploadAllow) { this.transport.upload = $.proxy(this.uploads.xhr, this); this.dragUpload = true; } else { this.transport.upload = $.proxy(this.uploads.iframe, this); } /** * Decoding 'raw' string converted to unicode * * @param String str * @return String */ this.decodeRawString = function(str) { var charCodes = function(str) { var i, len, arr; for (i=0,len=str.length,arr=[]; i= 0xd800 && c <= 0xdbff) { scalars.push((c & 1023) + 64 << 10 | arr[++i] & 1023); } else { scalars.push(c); } } return scalars; }, decodeUTF8 = function(arr) { var i, len, c, str, char = String.fromCharCode; for (i=0,len=arr.length,str=""; c=arr[i],i= 0xc2) { str += char((c&31)<<6 | arr[++i]&63); } else if (c <= 0xef && c >= 0xe0) { str += char((c&15)<<12 | (arr[++i]&63)<<6 | arr[++i]&63); } else if (c <= 0xf7 && c >= 0xf0) { str += char( 0xd800 | ((c&7)<<8 | (arr[++i]&63)<<2 | arr[++i]>>>4&3) - 64, 0xdc00 | (arr[i++]&15)<<6 | arr[i]&63 ); } else { str += char(0xfffd); } } return str; }; return decodeUTF8(scalarValues(str)); }; /** * Gets target file contents by file.hash * * @param String hash The hash * @param String responseType 'blob' or 'arraybuffer' (default) * @param Object requestOpts The request options * @return arraybuffer|blob The contents. */ this.getContents = function(hash, responseType, requestOpts) { var self = this, dfd = $.Deferred(), type = responseType || 'arraybuffer', url, req; dfd.fail(function() { req && req.state() === 'pending' && req.reject(); }); url = self.openUrl(hash); if (!self.isSameOrigin(url)) { url = self.openUrl(hash, true); } req = self.request(Object.assign({ data : {cmd : 'get'}, options : { url: url, type: 'get', cache : true, dataType : 'binary', responseType : type, processData: false }, notify : { type: 'file', cnt: 1, hideCnt: true }, cancel : true }, requestOpts || {})) .fail(function() { dfd.reject(); }) .done(function(data) { dfd.resolve(data); }); return dfd; }; /** * Gets the binary by url. * * @param {Object} opts The options * @param {Function} callback The callback * @param {Object} requestOpts The request options * @return arraybuffer|blob The contents. */ this.getBinaryByUrl = function(opts, callback, requestOpts) { var self = this, dfd = $.Deferred(), url, req; dfd.fail(function() { req && req.state() === 'pending' && req.reject(); }); req = self.request(Object.assign({ data : {cmd : 'get'}, options : Object.assign({ type: 'get', cache : true, dataType : 'binary', responseType : 'blob', processData: false }, opts) }, requestOpts || {})) .fail(function() { dfd.reject(); }) .done(function(data) { callback && callback(data); dfd.resolve(data); }); return dfd; }; /** * Gets the mimetype. * * @param {string} name The name * @param {string} orgMime The organization mime * @return {string} The mimetype. */ this.getMimetype = function(name, orgMime) { var mime = orgMime, ext, m; m = (name + '').match(/\.([^.]+)$/); if (m && (ext = m[1])) { if (!extToMimeTable) { extToMimeTable = self.arrayFlip(self.mimeTypes); } if (!(mime = extToMimeTable[ext.toLowerCase()])) { mime = orgMime; } } return mime; }; /** * Supported check hash algorisms * * @type Array */ self.hashCheckers = []; /** * Closure of getContentsHashes() */ (function(self) { var hashLibs = {}; if (window.Worker && window.ArrayBuffer) { // make fm.hashCheckers if (self.options.cdns.sparkmd5) { hashLibs.SparkMD5 = true; self.hashCheckers.push('md5'); } if (self.options.cdns.jssha) { hashLibs.jsSHA = true; self.hashCheckers = self.hashCheckers.concat(['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', 'shake128', 'shake256']); } } /** * Gets the contents hashes. * * @param String target target file.hash * @param Object needHashes need hash lib names * @param Object requestOpts The request options * @return Object hashes with lib name as key */ self.getContentsHashes = function(target, needHashes, hashOpts, requestOpts) { var dfd = $.Deferred(), needs = self.arrayFlip(needHashes || ['md5'], true), libs = [], jobs = [], res = {}, opts = hashOpts? hashOpts : { shake128len : 256, shake256len : 512 }, req; dfd.fail(function() { req && req.reject(); }); if (Object.keys(hashLibs).length) { req = self.getContents(target, 'arraybuffer', requestOpts).done(function(arrayBuffer) { if (needs.md5 && hashLibs.SparkMD5) { jobs.push((function() { var job = $.Deferred(); try { var wk = self.getWorker(); job.fail(function() { wk && wk.terminate(); }); wk.onmessage = function(ans) { wk && wk.terminate(); if (ans.data.hash) { var f; res.md5 = ans.data.hash; if (f = self.file(target)) { f.md5 = res.md5; } } else if (ans.data.error) { res.md5 = ans.data.error; } dfd.notify(res); job.resolve(); }; wk.onerror = function(e) { job.reject(); }; wk.postMessage({ scripts: [self.options.cdns.sparkmd5, self.getWorkerUrl('calcfilehash.js')], data: { type: 'md5', bin: arrayBuffer } }); dfd.fail(function() { job.reject(); }); } catch(e) { job.reject(); delete hashLibs.SparkMD5; } return job; })()); } if (hashLibs.jsSHA) { $.each(['1', '224', '256', '384', '512', '3-224', '3-256', '3-384', '3-512', 'ke128', 'ke256'], function(i, v) { if (needs['sha' + v]) { jobs.push((function() { var job = $.Deferred(); try { var wk = self.getWorker(); job.fail(function() { wk && wk.terminate(); }); wk.onmessage = function(ans) { wk && wk.terminate(); if (ans.data.hash) { var f; res['sha' + v] = ans.data.hash; if (f = self.file(target)) { f['sha' + v] = res['sha' + v]; } } else if (ans.data.error) { res['sha' + v] = ans.data.error; } dfd.notify(res); job.resolve(); }; wk.onerror = function(e) { job.reject(); }; wk.postMessage({ scripts: [self.options.cdns.jssha, self.getWorkerUrl('calcfilehash.js')], data: { type: v, bin: arrayBuffer, hashOpts: opts } }); dfd.fail(function() { job.reject(); }); } catch(e) { job.reject(); delete hashLibs.jsSHA; } return job; })()); } }); } if (jobs.length) { $.when.apply(null, jobs).always(function() { dfd.resolve(res); }); } else { dfd.reject(); } }).fail(function() { dfd.reject(); }); } else { dfd.reject(); } return dfd; }; })(this); /** * Parse error value to display * * @param Mixed error * @return Mixed parsed error */ this.parseError = function(error) { var arg = error; if ($.isPlainObject(arg)) { arg = arg.error; } return arg; }; /** * Alias for this.trigger('error', {error : 'message'}) * * @param String error message * @return elFinder **/ this.error = function() { var arg = arguments[0], opts = arguments[1] || null, err; if (arguments.length == 1 && typeof(arg) === 'function') { return self.bind('error', arg); } else { err = this.parseError(arg); return (err === true || !err)? this : self.trigger('error', {error: err, opts : opts}); } }; // create bind/trigger aliases for build-in events $.each(events, function(i, name) { self[name] = function() { var arg = arguments[0]; return arguments.length == 1 && typeof(arg) == 'function' ? self.bind(name, arg) : self.trigger(name, $.isPlainObject(arg) ? arg : {}); }; }); // bind core event handlers this .enable(function() { if (!enabled && self.api && self.visible() && self.ui.overlay.is(':hidden') && ! node.children('.elfinder-dialog.' + self.res('class', 'editing') + ':visible').length) { enabled = true; document.activeElement && document.activeElement.blur(); node.removeClass('elfinder-disabled'); } }) .disable(function() { prevEnabled = enabled; enabled = false; node.addClass('elfinder-disabled'); }) .open(function() { selected = []; }) .select(function(e) { var cnt = 0, unselects = []; selected = $.grep(e.data.selected || e.data.value|| [], function(hash) { if (unselects.length || (self.maxTargets && ++cnt > self.maxTargets)) { unselects.push(hash); return false; } else { return files[hash] ? true : false; } }); if (unselects.length) { self.trigger('unselectfiles', {files: unselects, inselect: true}); self.toast({mode: 'warning', msg: self.i18n(['errMaxTargets', self.maxTargets])}); } }) .error(function(e) { var opts = { cssClass : 'elfinder-dialog-error', title : self.i18n('error'), resizable : false, destroyOnClose : true, buttons : {} }, node = self.getUI(), cnt = node.children('.elfinder-dialog-error').length, last, counter; if (cnt < self.options.maxErrorDialogs) { opts.buttons[self.i18n(self.i18n('btnClose'))] = function() { $(this).elfinderdialog('close'); }; if (e.data.opts && $.isPlainObject(e.data.opts)) { Object.assign(opts, e.data.opts); } self.dialog(''+self.i18n(e.data.error), opts); } else { last = node.children('.elfinder-dialog-error:last').children('.ui-dialog-content:first'); counter = last.children('.elfinder-error-counter'); if (counter.length) { counter.data('cnt', parseInt(counter.data('cnt')) + 1).html(self.i18n(['moreErrors', counter.data('cnt')])); } else { counter = $(''+ self.i18n(['moreErrors', 1]) +'').data('cnt', 1); last.append('
              ', counter); } } }) .bind('tmb', function(e) { $.each(e.data.images||[], function(hash, tmb) { if (files[hash]) { files[hash].tmb = tmb; } }); }) .bind('searchstart', function(e) { Object.assign(self.searchStatus, e.data); self.searchStatus.state = 1; }) .bind('search', function(e) { self.searchStatus.state = 2; }) .bind('searchend', function() { self.searchStatus.state = 0; self.searchStatus.ininc = false; self.searchStatus.mixed = false; }) .bind('canMakeEmptyFile', function(e) { var data = e.data, obj = {}; if (data && Array.isArray(data.mimes)) { if (!data.unshift) { obj = self.mimesCanMakeEmpty; } $.each(data.mimes, function() { if (!obj[this]) { obj[this] = self.mimeTypes[this]; } }); if (data.unshift) { self.mimesCanMakeEmpty = Object.assign(obj, self.mimesCanMakeEmpty); } } }) .bind('themechange', function() { requestAnimationFrame(function() { self.trigger('uiresize'); }); }) ; // We listen and emit a sound on delete according to option if (true === this.options.sound) { this.bind('playsound', function(e) { var play = beeper.canPlayType && beeper.canPlayType('audio/wav; codecs="1"'), file = e.data && e.data.soundFile; play && file && play != '' && play != 'no' && $(beeper).html('')[0].play(); }); } // bind external event handlers $.each(this.options.handlers, function(event, callback) { self.bind(event, callback); }); /** * History object. Store visited folders * * @type Object **/ this.history = new this.history(this); /** * Root hashed * * @type Object */ this.roots = {}; /** * leaf roots * * @type Object */ this.leafRoots = {}; this.volumeExpires = {}; /** * Loaded commands * * @type Object **/ this._commands = {}; if (!Array.isArray(this.options.commands)) { this.options.commands = []; } if ($.inArray('*', this.options.commands) !== -1) { this.options.commands = Object.keys(this.commands); } /** * UI command map of cwd volume ( That volume driver option `uiCmdMap` ) * * @type Object **/ this.commandMap = {}; /** * cwd options of each volume * key: volumeid * val: options object * * @type Object */ this.volOptions = {}; /** * Has volOptions data * * @type Boolean */ this.hasVolOptions = false; /** * Hash of trash holders * key: trash folder hash * val: source volume hash * * @type Object */ this.trashes = {}; /** * cwd options of each folder/file * key: hash * val: options object * * @type Object */ this.optionsByHashes = {}; /** * UI Auto Hide Functions * Each auto hide function mast be call to `fm.trigger('uiautohide')` at end of process * * @type Array **/ this.uiAutoHide = []; // trigger `uiautohide` this.one('open', function() { if (self.uiAutoHide.length) { setTimeout(function() { self.trigger('uiautohide'); }, 500); } }); // Auto Hide Functions sequential processing start this.bind('uiautohide', function() { if (self.uiAutoHide.length) { self.uiAutoHide.shift()(); } }); if (this.options.width) { width = this.options.width; } if (this.options.height) { height = this.options.height; } if (this.options.heightBase) { heightBase = $(this.options.heightBase); } if (this.options.soundPath) { soundPath = this.options.soundPath.replace(/\/+$/, '') + '/'; } else { soundPath = this.baseUrl + soundPath; } if (this.options.parrotHeaders && Array.isArray(this.options.parrotHeaders) && this.options.parrotHeaders.length) { this.parrotHeaders = this.options.parrotHeaders; // check sessionStorage $.each(this.parrotHeaders, function(i, h) { var v = self.sessionStorage('core-ph:' + h); if (v) { self.customHeaders[h] = v; } }); } else { this.parrotHeaders = []; } self.one('opendone', function() { var tm; // attach events to document $(document) // disable elfinder on click outside elfinder .on('click.'+namespace, function(e) { enabled && ! self.options.enableAlways && !$(e.target).closest(node).length && self.disable(); }) // exec shortcuts .on(keydown+' '+keypress+' '+keyup+' '+mousedown, execShortcut); // attach events to window self.options.useBrowserHistory && $(window) .on('popstate.' + namespace, function(ev) { var state = ev.originalEvent.state || {}, hasThash = state.thash? true : false, dialog = node.find('.elfinder-frontmost:visible'), input = node.find('.elfinder-navbar-dir,.elfinder-cwd-filename').find('input,textarea'), onOpen, toast; if (!hasThash) { state = { thash: self.cwd().hash }; // scroll to elFinder node $('html,body').animate({ scrollTop: node.offset().top }); } if (dialog.length || input.length) { history.pushState(state, null, location.pathname + location.search + '#elf_' + state.thash); if (dialog.length) { if (!dialog.hasClass(self.res('class', 'preventback'))) { if (dialog.hasClass('elfinder-contextmenu')) { $(document).trigger($.Event('keydown', { keyCode: $.ui.keyCode.ESCAPE, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false })); } else if (dialog.hasClass('elfinder-dialog')) { dialog.elfinderdialog('close'); } else { dialog.trigger('close'); } } } else { input.trigger($.Event('keydown', { keyCode: $.ui.keyCode.ESCAPE, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false })); } } else { if (hasThash) { !$.isEmptyObject(self.files()) && self.request({ data : {cmd : 'open', target : state.thash, onhistory : 1}, notify : {type : 'open', cnt : 1, hideCnt : true}, syncOnFail : true }); } else { onOpen = function() { toast.trigger('click'); }; self.one('open', onOpen, true); toast = self.toast({ msg: self.i18n('pressAgainToExit'), onHidden: function() { self.unbind('open', onOpen); history.pushState(state, null, location.pathname + location.search + '#elf_' + state.thash); } }); } } }); $(window).on('resize.' + namespace, function(e){ if (e.target === this) { tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { var prv = node.data('resizeSize') || {w: 0, h: 0}, size = {w: Math.round(node.width()), h: Math.round(node.height())}; node.data('resizeSize', size); if (size.w !== prv.w || size.h !== prv.h) { node.trigger('resize'); self.trigger('resize', {width : size.w, height : size.h}); } }); } }) .on('beforeunload.' + namespace,function(e){ var msg, cnt; if (!self.pauseUnloadCheck()) { if (node.is(':visible')) { if (self.ui.notify.children().length && $.inArray('hasNotifyDialog', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('ntfsmth'); } else if (node.find('.'+self.res('class', 'editing')).length && $.inArray('editingFile', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('editingFile'); } else if ((cnt = Object.keys(self.selected()).length) && $.inArray('hasSelectedItem', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('hasSelected', ''+cnt); } else if ((cnt = Object.keys(self.clipboard()).length) && $.inArray('hasClipboardData', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('hasClipboard', ''+cnt); } if (msg) { e.returnValue = msg; return msg; } } self.trigger('unload'); } }); // bind window onmessage for CORS $(window).on('message.' + namespace, function(e){ var res = e.originalEvent || null, obj, data; if (res && (self.convAbsUrl(self.options.url).indexOf(res.origin) === 0 || self.convAbsUrl(self.uploadURL).indexOf(res.origin) === 0)) { try { obj = JSON.parse(res.data); data = obj.data || null; if (data) { if (data.error) { if (obj.bind) { self.trigger(obj.bind+'fail', data); } self.error(data.error); } else { data.warning && self.error(data.warning); self.updateCache(data); data.removed && data.removed.length && self.remove(data); data.added && data.added.length && self.add(data); data.changed && data.changed.length && self.change(data); if (obj.bind) { self.trigger(obj.bind, data); self.trigger(obj.bind+'done'); } data.sync && self.sync(); } } } catch (e) { self.sync(); } } }); // elFinder enable always if (self.options.enableAlways) { $(window).on('focus.' + namespace, function(e){ (e.target === this) && self.enable(); }); if (inFrame) { $(window.top).on('focus.' + namespace, function() { if (self.enable() && (! parentIframe || parentIframe.is(':visible'))) { requestAnimationFrame(function() { $(window).trigger('focus'); }); } }); } } else if (inFrame) { $(window).on('blur.' + namespace, function(e){ enabled && e.target === this && self.disable(); }); } // return focus to the window on click (elFInder in the frame) if (inFrame) { node.on('click', function(e) { $(window).trigger('focus'); }); } // elFinder to enable by mouse over if (self.options.enableByMouseOver) { node.on('mouseenter touchstart', function(e) { (inFrame) && $(window).trigger('focus'); ! self.enabled() && self.enable(); }); } // When the browser tab turn to foreground/background $(window).on('visibilitychange.' + namespace, function(e) { var background = document.hidden || document.webkitHidden || document.msHidden; // AutoSync turn On/Off if (self.options.syncStart) { self.autoSync(background? 'stop' : void(0)); } }); }); // store instance in node node[0].elfinder = this; // auto load language file dfrdsBeforeBootup.push((function() { var lang = self.lang, langJs = self.i18nBaseUrl + 'elfinder.' + lang + '.js', dfd = $.Deferred().done(function() { if (self.i18[lang]) { self.lang = lang; } self.trigger('i18load'); i18n = self.lang === 'en' ? self.i18['en'] : $.extend(true, {}, self.i18['en'], self.i18[self.lang]); }); if (!self.i18[lang]) { self.lang = 'en'; if (self.hasRequire) { require([langJs], function() { dfd.resolve(); }, function() { dfd.resolve(); }); } else { self.loadScript([langJs], function() { dfd.resolve(); }, { loadType: 'tag', error : function() { dfd.resolve(); } }); } } else { dfd.resolve(); } return dfd; })()); // elFinder boot up function bootUp = function() { var columnNames; /** * i18 messages * * @type Object **/ self.messages = i18n.messages; // check jquery ui if (!($.fn.selectable && $.fn.draggable && $.fn.droppable && $.fn.resizable && $.fn.button && $.fn.slider)) { return alert(self.i18n('errJqui')); } // check node if (!node.length) { return alert(self.i18n('errNode')); } // check connector url if (!self.options.url) { return alert(self.i18n('errURL')); } // column key/name map for fm.getColumnName() columnNames = Object.assign({ name : self.i18n('name'), perm : self.i18n('perms'), date : self.i18n('modify'), size : self.i18n('size'), kind : self.i18n('kind'), modestr : self.i18n('mode'), modeoct : self.i18n('mode'), modeboth : self.i18n('mode') }, self.options.uiOptions.cwd.listView.columnsCustomName); /** * Gets the column name of cwd list view * * @param String key The key * @return String The column name. */ self.getColumnName = function(key) { var res = columnNames[key] || self.i18n(key); return typeof res === 'function'? res() : res; }; /** * Interface direction * * @type String * @default "ltr" **/ self.direction = i18n.direction; /** * Date/time format * * @type String * @default "m.d.Y" **/ self.dateFormat = self.options.dateFormat || i18n.dateFormat; /** * Date format like "Yesterday 10:20:12" * * @type String * @default "{day} {time}" **/ self.fancyFormat = self.options.fancyDateFormat || i18n.fancyDateFormat; /** * Date format for if upload file has not original unique name * e.g. Clipboard image data, Image data taken with iOS * * @type String * @default "ymd-His" **/ self.nonameDateFormat = (self.options.nonameDateFormat || i18n.nonameDateFormat).replace(/[\/\\]/g, '_'); /** * Css classes * * @type String **/ self.cssClass = 'ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-' +(self.direction == 'rtl' ? 'rtl' : 'ltr') +(self.UA.Touch? (' elfinder-touch' + (self.options.resizable ? ' touch-punch' : '')) : '') +(self.UA.Mobile? ' elfinder-mobile' : '') +(self.UA.iOS? ' elfinder-ios' : '') +' '+self.options.cssClass; // prepare node node.addClass(self.cssClass) .on(mousedown, function() { !enabled && self.enable(); }); // draggable closure (function() { var ltr, wzRect, wzBottom, wzBottom2, nodeStyle, keyEvt = keydown + 'draggable' + ' keyup.' + namespace + 'draggable'; /** * Base draggable options * * @type Object **/ self.draggable = { appendTo : node, addClasses : false, distance : 4, revert : true, refreshPositions : false, cursor : 'crosshair', cursorAt : {left : 50, top : 47}, scroll : false, start : function(e, ui) { var helper = ui.helper, targets = $.grep(helper.data('files')||[], function(h) { if (h) { remember[h] = true; return true; } return false; }), locked = false, cnt, h; // fix node size nodeStyle = node.attr('style'); node.width(node.width()).height(node.height()); // set var for drag() ltr = (self.direction === 'ltr'); wzRect = self.getUI('workzone').data('rectangle'); wzBottom = wzRect.top + wzRect.height; wzBottom2 = wzBottom - self.getUI('navdock').outerHeight(true); self.draggingUiHelper = helper; cnt = targets.length; while (cnt--) { h = targets[cnt]; if (files[h].locked) { locked = true; helper.data('locked', true); break; } } !locked && self.trigger('lockfiles', {files : targets}); helper.data('autoScrTm', setInterval(function() { if (helper.data('autoScr')) { self.autoScroll[helper.data('autoScr')](helper.data('autoScrVal')); } }, 50)); }, drag : function(e, ui) { var helper = ui.helper, autoScr, autoUp, bottom; if ((autoUp = wzRect.top > e.pageY) || wzBottom2 < e.pageY) { if (wzRect.cwdEdge > e.pageX) { autoScr = (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down'); } else { autoScr = (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down'); } if (!autoUp) { if (autoScr.substr(0, 3) === 'cwd') { if (wzBottom < e.pageY) { bottom = wzBottom; } else { autoScr = null; } } else { bottom = wzBottom2; } } if (autoScr) { helper.data('autoScr', autoScr); helper.data('autoScrVal', Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - bottom), 1.3)); } } if (! autoScr) { if (helper.data('autoScr')) { helper.data('refreshPositions', 1).data('autoScr', null); } } if (helper.data('refreshPositions') && $(this).elfUiWidgetInstance('draggable')) { if (helper.data('refreshPositions') > 0) { $(this).draggable('option', { refreshPositions : true, elfRefresh : true }); helper.data('refreshPositions', -1); } else { $(this).draggable('option', { refreshPositions : false, elfRefresh : false }); helper.data('refreshPositions', null); } } }, stop : function(e, ui) { var helper = ui.helper, files; $(document).off(keyEvt); $(this).elfUiWidgetInstance('draggable') && $(this).draggable('option', { refreshPositions : false }); self.draggingUiHelper = null; self.trigger('focus').trigger('dragstop'); if (! helper.data('droped')) { files = $.grep(helper.data('files')||[], function(h) { return h? true : false ;}); self.trigger('unlockfiles', {files : files}); self.trigger('selectfiles', {files : self.selected()}); } self.enable(); // restore node style node.attr('style', nodeStyle); helper.data('autoScrTm') && clearInterval(helper.data('autoScrTm')); }, helper : function(e, ui) { var element = this.id ? $(this) : $(this).parents('[id]:first'), helper = $('
              '), icon = function(f) { var mime = f.mime, i, tmb = self.tmb(f); i = '
              '; if (tmb) { i = $(i).addClass(tmb.className).css('background-image', "url('"+tmb.url+"')").get(0).outerHTML; } else if (f.icon) { i = $(i).css(self.getIconStyle(f, true)).get(0).outerHTML; } if (f.csscls) { i = '
              ' + i + '
              '; } return i; }, hashes, l, ctr; self.draggingUiHelper && self.draggingUiHelper.stop(true, true); self.trigger('dragstart', {target : element[0], originalEvent : e}, true); hashes = element.hasClass(self.res('class', 'cwdfile')) ? self.selected() : [self.navId2Hash(element.attr('id'))]; helper.append(icon(files[hashes[0]])).data('files', hashes).data('locked', false).data('droped', false).data('namespace', namespace).data('dropover', 0); if ((l = hashes.length) > 1) { helper.append(icon(files[hashes[l-1]]) + ''+l+''); } $(document).on(keyEvt, function(e){ if (self._commands.copy) { var chk = (e.shiftKey||e.ctrlKey||e.metaKey); if (ctr !== chk) { ctr = chk; if (helper.is(':visible') && helper.data('dropover') && ! helper.data('droped')) { helper.toggleClass('elfinder-drag-helper-plus', helper.data('locked')? true : ctr); self.trigger(ctr? 'unlockfiles' : 'lockfiles', {files : hashes, helper: helper}); } } } }); return helper; } }; })(); // in getFileCallback set - change default actions on double click/enter/ctrl+enter if (self.commands.getfile) { if (typeof(self.options.getFileCallback) == 'function') { self.bind('dblclick', function(e) { e.preventDefault(); self.exec('getfile').fail(function() { self.exec('open', e.data && e.data.file? [ e.data.file ]: void(0)); }); }); self.shortcut({ pattern : 'enter', description : self.i18n('cmdgetfile'), callback : function() { self.exec('getfile').fail(function() { self.exec(self.OS == 'mac' ? 'rename' : 'open'); }); } }) .shortcut({ pattern : 'ctrl+enter', description : self.i18n(self.OS == 'mac' ? 'cmdrename' : 'cmdopen'), callback : function() { self.exec(self.OS == 'mac' ? 'rename' : 'open'); } }); } else { self.options.getFileCallback = null; } } // load commands $.each(self.commands, function(name, cmd) { var proto = Object.assign({}, cmd.prototype), extendsCmd, opts; if ($.isFunction(cmd) && !self._commands[name] && (cmd.prototype.forceLoad || $.inArray(name, self.options.commands) !== -1)) { extendsCmd = cmd.prototype.extendsCmd || ''; if (extendsCmd) { if ($.isFunction(self.commands[extendsCmd])) { cmd.prototype = Object.assign({}, base, new self.commands[extendsCmd](), cmd.prototype); } else { return true; } } else { cmd.prototype = Object.assign({}, base, cmd.prototype); } self._commands[name] = new cmd(); cmd.prototype = proto; opts = self.options.commandsOptions[name] || {}; if (extendsCmd && self.options.commandsOptions[extendsCmd]) { opts = $.extend(true, {}, self.options.commandsOptions[extendsCmd], opts); } self._commands[name].setup(name, opts); // setup linked commands if (self._commands[name].linkedCmds.length) { $.each(self._commands[name].linkedCmds, function(i, n) { var lcmd = self.commands[n]; if ($.isFunction(lcmd) && !self._commands[n]) { lcmd.prototype = base; self._commands[n] = new lcmd(); self._commands[n].setup(n, self.options.commandsOptions[n]||{}); } }); } } }); /** * UI nodes * * @type Object **/ self.ui = { // container for nav panel and current folder container workzone : $('
              ').appendTo(node).elfinderworkzone(self), // contaainer for folders tree / places navbar : $('
              ').appendTo(node).elfindernavbar(self, self.options.uiOptions.navbar || {}), // container for for preview etc at below the navbar navdock : $('
              ').appendTo(node).elfindernavdock(self, self.options.uiOptions.navdock || {}), // contextmenu contextmenu : $('
              ').appendTo(node).elfindercontextmenu(self), // overlay overlay : $('
              ').appendTo(node).elfinderoverlay({ show : function() { self.disable(); }, hide : function() { prevEnabled && self.enable(); } }), // current folder container cwd : $('
              ').appendTo(node).elfindercwd(self, self.options.uiOptions.cwd || {}), // notification dialog window notify : self.dialog('', { cssClass : 'elfinder-dialog-notify' + (self.options.notifyDialog.canClose? '' : ' elfinder-titlebar-button-hide'), position : self.options.notifyDialog.position, absolute : true, resizable : false, autoOpen : false, allowMinimize : true, closeOnEscape : self.options.notifyDialog.canClose? true : false, title : ' ', width : self.options.notifyDialog.width? parseInt(self.options.notifyDialog.width) : null, minHeight : null, minimize : function() { self.ui.notify.trigger('minimize'); } }), statusbar : $('
              ').hide().appendTo(node), toast : $('
              ').appendTo(node), bottomtray : $('
              ').appendTo(node), progressbar : $('
              ').appendTo(node) }; self.trigger('uiready'); // load required ui $.each(self.options.ui || [], function(i, ui) { var name = 'elfinder'+ui, opts = self.options.uiOptions[ui] || {}; if (!self.ui[ui] && $.fn[name]) { // regist to self.ui before make instance self.ui[ui] = $('<'+(opts.tag || 'div')+'/>').appendTo(node); self.ui[ui][name](self, opts); } }); self.ui.progressbar.appendTo(self.ui.workzone); self.ui.notify.prev('.ui-dialog-titlebar').append('
              '); // update size self.resize(width, height); // make node resizable if (self.options.resizable) { node.resizable({ resize : function(e, ui) { self.resize(ui.size.width, ui.size.height); }, handles : 'se', minWidth : 300, minHeight : 200 }); if (self.UA.Touch) { node.addClass('touch-punch'); } } (function() { var navbar = self.getUI('navbar'), cwd = self.getUI('cwd').parent(); self.autoScroll = { navbarUp : function(v) { navbar.scrollTop(Math.max(0, navbar.scrollTop() - v)); }, navbarDown : function(v) { navbar.scrollTop(navbar.scrollTop() + v); }, cwdUp : function(v) { cwd.scrollTop(Math.max(0, cwd.scrollTop() - v)); }, cwdDown : function(v) { cwd.scrollTop(cwd.scrollTop() + v); } }; })(); // Swipe on the touch devices to show/hide of toolbar or navbar if (self.UA.Touch) { (function() { var lastX, lastY, nodeOffset, nodeWidth, nodeTop, navbarW, toolbarH, navbar = self.getUI('navbar'), toolbar = self.getUI('toolbar'), moveEv = 'touchmove.stopscroll', moveTm, moveUpOn = function(e) { var touches = e.originalEvent.touches || [{}], y = touches[0].pageY || null; if (!lastY || y < lastY) { e.preventDefault(); moveTm && clearTimeout(moveTm); } }, moveDownOn = function(e) { e.preventDefault(); moveTm && clearTimeout(moveTm); }, moveOff = function() { moveTm = setTimeout(function() { node.off(moveEv); }, 100); }, handleW, handleH = 50; navbar = navbar.children().length? navbar : null; toolbar = toolbar.length? toolbar : null; node.on('touchstart touchmove touchend', function(e) { if (e.type === 'touchend') { lastX = false; lastY = false; moveOff(); return; } var touches = e.originalEvent.touches || [{}], x = touches[0].pageX || null, y = touches[0].pageY || null, ltr = (self.direction === 'ltr'), navbarMode, treeWidth, swipeX, moveX, toolbarT, mode; if (x === null || y === null || (e.type === 'touchstart' && touches.length > 1)) { return; } if (e.type === 'touchstart') { nodeOffset = node.offset(); nodeWidth = node.width(); if (navbar) { lastX = false; if (navbar.is(':hidden')) { if (! handleW) { handleW = Math.max(50, nodeWidth / 10); } if ((ltr? (x - nodeOffset.left) : (nodeWidth + nodeOffset.left - x)) < handleW) { lastX = x; } } else if (! e.originalEvent._preventSwipeX) { navbarW = navbar.width(); if (ltr) { swipeX = (x < nodeOffset.left + navbarW); } else { swipeX = (x > nodeOffset.left + nodeWidth - navbarW); } if (swipeX) { handleW = Math.max(50, nodeWidth / 10); lastX = x; } else { lastX = false; } } } if (toolbar) { lastY = false; if (! e.originalEvent._preventSwipeY) { toolbarH = toolbar.height(); nodeTop = nodeOffset.top; if (y - nodeTop < (toolbar.is(':hidden')? handleH : (toolbarH + 30))) { lastY = y; node.on(moveEv, toolbar.is(':hidden')? moveDownOn: moveUpOn); } } } } else { if (navbar && lastX !== false) { navbarMode = (ltr? (lastX > x) : (lastX < x))? 'navhide' : 'navshow'; moveX = Math.abs(lastX - x); if (navbarMode === 'navhide' && moveX > navbarW * 0.6 || (moveX > (navbarMode === 'navhide'? navbarW / 3 : 45) && (navbarMode === 'navshow' || (ltr? x < nodeOffset.left + 20 : x > nodeOffset.left + nodeWidth - 20) )) ) { self.getUI('navbar').trigger(navbarMode, {handleW: handleW}); lastX = false; } } if (toolbar && lastY !== false ) { toolbarT = toolbar.offset().top; if (Math.abs(lastY - y) > Math.min(45, toolbarH / 3)) { mode = (lastY > y)? 'slideUp' : 'slideDown'; if (mode === 'slideDown' || toolbarT + 20 > y) { if (toolbar.is(mode === 'slideDown' ? ':hidden' : ':visible')) { toolbar.stop(true, true).trigger('toggle', {duration: 100, handleH: handleH}); } lastY = false; } } } } }); })(); } if (self.dragUpload) { // add event listener for HTML5 DnD upload (function() { var isin = function(e) { return (e.target.nodeName !== 'TEXTAREA' && e.target.nodeName !== 'INPUT' && $(e.target).closest('div.ui-dialog-content').length === 0); }, ent = 'native-drag-enter', disable = 'native-drag-disable', c = 'class', navdir = self.res(c, 'navdir'), droppable = self.res(c, 'droppable'), dropover = self.res(c, 'adroppable'), arrow = self.res(c, 'navarrow'), clDropActive = self.res(c, 'adroppable'), wz = self.getUI('workzone'), ltr = (self.direction === 'ltr'), clearTm = function() { autoScrTm && cancelAnimationFrame(autoScrTm); autoScrTm = null; }, wzRect, autoScrFn, autoScrTm; node.on('dragenter', function(e) { clearTm(); if (isin(e)) { e.preventDefault(); e.stopPropagation(); wzRect = wz.data('rectangle'); } }) .on('dragleave', function(e) { clearTm(); if (isin(e)) { e.preventDefault(); e.stopPropagation(); } }) .on('dragover', function(e) { var autoUp; if (isin(e)) { e.preventDefault(); e.stopPropagation(); e.originalEvent.dataTransfer.dropEffect = 'none'; if (! autoScrTm) { autoScrTm = requestAnimationFrame(function() { var wzBottom = wzRect.top + wzRect.height, wzBottom2 = wzBottom - self.getUI('navdock').outerHeight(true), fn; if ((autoUp = e.pageY < wzRect.top) || e.pageY > wzBottom2 ) { if (wzRect.cwdEdge > e.pageX) { fn = (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down'); } else { fn = (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down'); } if (!autoUp) { if (fn.substr(0, 3) === 'cwd') { if (wzBottom < e.pageY) { wzBottom2 = wzBottom; } else { fn = ''; } } } fn && self.autoScroll[fn](Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - wzBottom2), 1.3)); } autoScrTm = null; }); } } else { clearTm(); } }) .on('drop', function(e) { clearTm(); if (isin(e)) { e.stopPropagation(); e.preventDefault(); } }); node.on('dragenter', '.native-droppable', function(e){ if (e.originalEvent.dataTransfer) { var $elm = $(e.currentTarget), id = e.currentTarget.id || null, cwd = null, elfFrom; if (!id) { // target is cwd cwd = self.cwd(); $elm.data(disable, false); try { $.each(e.originalEvent.dataTransfer.types, function(i, v){ if (v.substr(0, 13) === 'elfinderfrom:') { elfFrom = v.substr(13).toLowerCase(); } }); } catch(e) {} } if (!cwd || (cwd.write && (!elfFrom || elfFrom !== (window.location.href + cwd.hash).toLowerCase()))) { e.preventDefault(); e.stopPropagation(); $elm.data(ent, true); $elm.addClass(clDropActive); } else { $elm.data(disable, true); } } }) .on('dragleave', '.native-droppable', function(e){ if (e.originalEvent.dataTransfer) { var $elm = $(e.currentTarget); e.preventDefault(); e.stopPropagation(); if ($elm.data(ent)) { $elm.data(ent, false); } else { $elm.removeClass(clDropActive); } } }) .on('dragover', '.native-droppable', function(e){ if (e.originalEvent.dataTransfer) { var $elm = $(e.currentTarget); e.preventDefault(); e.stopPropagation(); e.originalEvent.dataTransfer.dropEffect = $elm.data(disable)? 'none' : 'copy'; $elm.data(ent, false); } }) .on('drop', '.native-droppable', function(e){ if (e.originalEvent && e.originalEvent.dataTransfer) { var $elm = $(e.currentTarget), id; e.preventDefault(); e.stopPropagation(); $elm.removeClass(clDropActive); if (e.currentTarget.id) { id = $elm.hasClass(navdir)? self.navId2Hash(e.currentTarget.id) : self.cwdId2Hash(e.currentTarget.id); } else { id = self.cwd().hash; } e.originalEvent._target = id; self.exec('upload', {dropEvt: e.originalEvent, target: id}, void 0, id); } }); })(); } // trigger event cssloaded if cssAutoLoad disabled if (self.cssloaded === false) { self.cssloaded = true; self.trigger('cssloaded'); } // calculate elFinder node z-index self.zIndexCalc(); // send initial request and start to pray >_< self.trigger('init') .request({ data : {cmd : 'open', target : self.startDir(), init : 1, tree : 1}, preventDone : true, notify : {type : 'open', cnt : 1, hideCnt : true}, freeze : true }) .fail(function() { self.trigger('fail').disable().lastDir(''); listeners = {}; shortcuts = {}; $(document).add(node).off('.'+namespace); self.trigger = function() { }; }) .done(function(data) { var trashDisable = function(th) { var src = self.file(self.trashes[th]), d = self.options.debug, error; if (src && src.volumeid) { delete self.volOptions[src.volumeid].trashHash; } self.trashes[th] = false; self.debug('backend-error', 'Trash hash "'+th+'" was not found or not writable.'); }, toChkTh = {}; // regist rawStringDecoder if (self.options.rawStringDecoder) { self.registRawStringDecoder(self.options.rawStringDecoder); } // re-calculate elFinder node z-index self.zIndexCalc(); self.load().debug('api', self.api); // update ui's size after init node.trigger('resize'); // initial open open(data); self.trigger('open', data, false); self.trigger('opendone'); if (inFrame && self.options.enableAlways) { $(window).trigger('focus'); } // check self.trashes $.each(self.trashes, function(th) { var dir = self.file(th), src; if (! dir) { toChkTh[th] = true; } else if (dir.mime !== 'directory' || ! dir.write) { trashDisable(th); } }); if (Object.keys(toChkTh).length) { self.request({ data : {cmd : 'info', targets : Object.keys(toChkTh)}, preventDefault : true }).done(function(data) { if (data && data.files) { $.each(data.files, function(i, dir) { if (dir.mime === 'directory' && dir.write) { delete toChkTh[dir.hash]; } }); } }).always(function() { $.each(toChkTh, trashDisable); }); } // to enable / disable self[self.options.enableAlways? 'enable' : 'disable'](); }); // self.timeEnd('load'); // End of bootUp() }; // call bootCallback function with elFinder instance, extraObject - { dfrdsBeforeBootup: dfrdsBeforeBootup } if (bootCallback && typeof bootCallback === 'function') { self.bootCallback = bootCallback; bootCallback.call(node.get(0), self, { dfrdsBeforeBootup: dfrdsBeforeBootup }); } // call dfrdsBeforeBootup functions then boot up elFinder $.when.apply(null, dfrdsBeforeBootup).done(function() { bootUp(); }).fail(function(error) { self.error(error); }); }; //register elFinder to global scope if (typeof toGlobal === 'undefined' || toGlobal) { window.elFinder = elFinder; } /** * Prototype * * @type Object */ elFinder.prototype = { uniqueid : 0, res : function(type, id) { return this.resources[type] && this.resources[type][id]; }, /** * User os. Required to bind native shortcuts for open/rename * * @type String **/ OS : navigator.userAgent.indexOf('Mac') !== -1 ? 'mac' : navigator.userAgent.indexOf('Win') !== -1 ? 'win' : 'other', /** * User browser UA. * jQuery.browser: version deprecated: 1.3, removed: 1.9 * * @type Object **/ UA : (function(){ var self = this, webkit = !document.unqueID && !window.opera && !window.sidebar && 'localStorage' in window && 'WebkitAppearance' in document.documentElement.style, chrome = webkit && window.chrome, /*setRotated = function() { var a = ((screen && screen.orientation && screen.orientation.angle) || window.orientation || 0) + 0; if (a === -90) { a = 270; } UA.Angle = a; UA.Rotated = a % 180 === 0? false : true; },*/ UA = { // Browser IE <= IE 6 ltIE6 : typeof window.addEventListener == "undefined" && typeof document.documentElement.style.maxHeight == "undefined", // Browser IE <= IE 7 ltIE7 : typeof window.addEventListener == "undefined" && typeof document.querySelectorAll == "undefined", // Browser IE <= IE 8 ltIE8 : typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined", // Browser IE <= IE 9 ltIE9 : document.uniqueID && document.documentMode <= 9, // Browser IE <= IE 10 ltIE10 : document.uniqueID && document.documentMode <= 10, // Browser IE >= IE 11 gtIE11 : document.uniqueID && document.documentMode >= 11, IE : document.uniqueID, Firefox : window.sidebar, Opera : window.opera, Webkit : webkit, Chrome : chrome, Edge : (chrome && window.msCredentials)? true : false, Safari : webkit && !window.chrome, Mobile : typeof window.orientation != "undefined", Touch : typeof window.ontouchstart != "undefined", iOS : navigator.platform.match(/^iP(?:[ao]d|hone)/), Mac : navigator.platform.match(/^Mac/), Fullscreen : (typeof (document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen) !== 'undefined'), Angle : 0, Rotated : false, CSS : (function() { var aStyle = document.createElement('a').style, pStyle = document.createElement('p').style, css; css = 'position:sticky;position:-webkit-sticky;'; css += 'width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:max-content;'; aStyle.cssText = css; return { positionSticky : aStyle.position.indexOf('sticky')!==-1, widthMaxContent : aStyle.width.indexOf('max-content')!==-1, flex : typeof pStyle.flex !== 'undefined' }; })() }; return UA; })(), /** * Is cookie enabled * * @type Boolean */ cookieEnabled : window.navigator.cookieEnabled, /** * Has RequireJS? * * @type Boolean */ hasRequire : (typeof define === 'function' && define.amd), /** * Current request command * * @type String */ currentReqCmd : '', /** * Current keyboard state * * @type Object */ keyState : {}, /** * Internationalization object * * @type Object */ i18 : { en : { translator : '', language : 'English', direction : 'ltr', dateFormat : 'd.m.Y H:i', fancyDateFormat : '$1 H:i', nonameDateFormat : 'ymd-His', messages : {} }, months : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], monthsShort : ['msJan', 'msFeb', 'msMar', 'msApr', 'msMay', 'msJun', 'msJul', 'msAug', 'msSep', 'msOct', 'msNov', 'msDec'], days : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], daysShort : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] }, /** * File mimetype to kind mapping * * @type Object */ kinds : { 'unknown' : 'Unknown', 'directory' : 'Folder', 'group' : 'Selects', 'symlink' : 'Alias', 'symlink-broken' : 'AliasBroken', 'application/x-empty' : 'TextPlain', 'application/postscript' : 'Postscript', 'application/vnd.ms-office' : 'MsOffice', 'application/msword' : 'MsWord', 'application/vnd.ms-word' : 'MsWord', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' : 'MsWord', 'application/vnd.ms-word.document.macroEnabled.12' : 'MsWord', 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' : 'MsWord', 'application/vnd.ms-word.template.macroEnabled.12' : 'MsWord', 'application/vnd.ms-excel' : 'MsExcel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' : 'MsExcel', 'application/vnd.ms-excel.sheet.macroEnabled.12' : 'MsExcel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' : 'MsExcel', 'application/vnd.ms-excel.template.macroEnabled.12' : 'MsExcel', 'application/vnd.ms-excel.sheet.binary.macroEnabled.12' : 'MsExcel', 'application/vnd.ms-excel.addin.macroEnabled.12' : 'MsExcel', 'application/vnd.ms-powerpoint' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.presentation' : 'MsPP', 'application/vnd.ms-powerpoint.presentation.macroEnabled.12' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' : 'MsPP', 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.template' : 'MsPP', 'application/vnd.ms-powerpoint.template.macroEnabled.12' : 'MsPP', 'application/vnd.ms-powerpoint.addin.macroEnabled.12' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.slide' : 'MsPP', 'application/vnd.ms-powerpoint.slide.macroEnabled.12' : 'MsPP', 'application/pdf' : 'PDF', 'application/xml' : 'XML', 'application/vnd.oasis.opendocument.text' : 'OO', 'application/vnd.oasis.opendocument.text-template' : 'OO', 'application/vnd.oasis.opendocument.text-web' : 'OO', 'application/vnd.oasis.opendocument.text-master' : 'OO', 'application/vnd.oasis.opendocument.graphics' : 'OO', 'application/vnd.oasis.opendocument.graphics-template' : 'OO', 'application/vnd.oasis.opendocument.presentation' : 'OO', 'application/vnd.oasis.opendocument.presentation-template' : 'OO', 'application/vnd.oasis.opendocument.spreadsheet' : 'OO', 'application/vnd.oasis.opendocument.spreadsheet-template' : 'OO', 'application/vnd.oasis.opendocument.chart' : 'OO', 'application/vnd.oasis.opendocument.formula' : 'OO', 'application/vnd.oasis.opendocument.database' : 'OO', 'application/vnd.oasis.opendocument.image' : 'OO', 'application/vnd.openofficeorg.extension' : 'OO', 'application/x-shockwave-flash' : 'AppFlash', 'application/flash-video' : 'Flash video', 'application/x-bittorrent' : 'Torrent', 'application/javascript' : 'JS', 'application/rtf' : 'RTF', 'application/rtfd' : 'RTF', 'application/x-font-ttf' : 'TTF', 'application/x-font-otf' : 'OTF', 'application/x-rpm' : 'RPM', 'application/x-web-config' : 'TextPlain', 'application/xhtml+xml' : 'HTML', 'application/docbook+xml' : 'DOCBOOK', 'application/x-awk' : 'AWK', 'application/x-gzip' : 'GZIP', 'application/x-bzip2' : 'BZIP', 'application/x-xz' : 'XZ', 'application/zip' : 'ZIP', 'application/x-zip' : 'ZIP', 'application/x-rar' : 'RAR', 'application/x-tar' : 'TAR', 'application/x-7z-compressed' : '7z', 'application/x-jar' : 'JAR', 'text/plain' : 'TextPlain', 'text/x-php' : 'PHP', 'text/html' : 'HTML', 'text/javascript' : 'JS', 'text/css' : 'CSS', 'text/rtf' : 'RTF', 'text/rtfd' : 'RTF', 'text/x-c' : 'C', 'text/x-csrc' : 'C', 'text/x-chdr' : 'CHeader', 'text/x-c++' : 'CPP', 'text/x-c++src' : 'CPP', 'text/x-c++hdr' : 'CPPHeader', 'text/x-shellscript' : 'Shell', 'application/x-csh' : 'Shell', 'text/x-python' : 'Python', 'text/x-java' : 'Java', 'text/x-java-source' : 'Java', 'text/x-ruby' : 'Ruby', 'text/x-perl' : 'Perl', 'text/x-sql' : 'SQL', 'text/xml' : 'XML', 'text/x-comma-separated-values' : 'CSV', 'text/x-markdown' : 'Markdown', 'image/x-ms-bmp' : 'BMP', 'image/jpeg' : 'JPEG', 'image/gif' : 'GIF', 'image/png' : 'PNG', 'image/tiff' : 'TIFF', 'image/x-targa' : 'TGA', 'image/vnd.adobe.photoshop' : 'PSD', 'image/xbm' : 'XBITMAP', 'image/pxm' : 'PXM', 'audio/mpeg' : 'AudioMPEG', 'audio/midi' : 'AudioMIDI', 'audio/ogg' : 'AudioOGG', 'audio/mp4' : 'AudioMPEG4', 'audio/x-m4a' : 'AudioMPEG4', 'audio/wav' : 'AudioWAV', 'audio/x-mp3-playlist' : 'AudioPlaylist', 'video/x-dv' : 'VideoDV', 'video/mp4' : 'VideoMPEG4', 'video/mpeg' : 'VideoMPEG', 'video/x-msvideo' : 'VideoAVI', 'video/quicktime' : 'VideoMOV', 'video/x-ms-wmv' : 'VideoWM', 'video/x-flv' : 'VideoFlash', 'video/x-matroska' : 'VideoMKV', 'video/ogg' : 'VideoOGG' }, /** * File mimetype to file extention mapping * * @type Object * @see elFinder.mimetypes.js */ mimeTypes : {}, /** * Ajax request data validation rules * * @type Object */ rules : { defaults : function(data) { if (!data || (data.added && !Array.isArray(data.added)) || (data.removed && !Array.isArray(data.removed)) || (data.changed && !Array.isArray(data.changed))) { return false; } return true; }, open : function(data) { return data && data.cwd && data.files && $.isPlainObject(data.cwd) && Array.isArray(data.files); }, tree : function(data) { return data && data.tree && Array.isArray(data.tree); }, parents : function(data) { return data && data.tree && Array.isArray(data.tree); }, tmb : function(data) { return data && data.images && ($.isPlainObject(data.images) || Array.isArray(data.images)); }, upload : function(data) { return data && ($.isPlainObject(data.added) || Array.isArray(data.added));}, search : function(data) { return data && data.files && Array.isArray(data.files); } }, /** * Commands costructors * * @type Object */ commands : {}, /** * Commands to add the item (space delimited) * * @type String */ cmdsToAdd : 'archive duplicate extract mkdir mkfile paste rm upload', parseUploadData : function(text) { var self = this, data; if (!$.trim(text)) { return {error : ['errResponse', 'errDataEmpty']}; } try { data = JSON.parse(text); } catch (e) { return {error : ['errResponse', 'errDataNotJSON']}; } data = self.normalize(data); if (!self.validResponse('upload', data)) { return {error : (data.norError || ['errResponse'])}; } data.removed = $.merge((data.removed || []), $.map(data.added || [], function(f) { return self.file(f.hash)? f.hash : null; })); return data; }, iframeCnt : 0, uploads : { // xhr muiti uploading flag xhrUploading: false, // Timer of request fail to sync failSyncTm: null, // current chunkfail requesting chunk chunkfailReq: {}, // check file/dir exists checkExists: function(files, target, fm, isDir) { var dfrd = $.Deferred(), names, renames = [], hashes = {}, chkFiles = [], cancel = function() { var i = files.length; while (--i > -1) { files[i]._remove = true; } }, resolve = function() { dfrd.resolve(renames, hashes); }, check = function() { var existed = [], exists = [], i, c, pathStr = target !== fm.cwd().hash? fm.path(target, true) + fm.option('separator', target) : '', confirm = function(ndx) { var last = ndx == exists.length-1, opts = { cssClass : 'elfinder-confirm-upload', title : fm.i18n('cmdupload'), text : ['errExists', pathStr + exists[ndx].name, 'confirmRepl'], all : !last, accept : { label : 'btnYes', callback : function(all) { !last && !all ? confirm(++ndx) : resolve(); } }, reject : { label : 'btnNo', callback : function(all) { var i; if (all) { i = exists.length; while (ndx < i--) { files[exists[i].i]._remove = true; } } else { files[exists[ndx].i]._remove = true; } !last && !all ? confirm(++ndx) : resolve(); } }, cancel : { label : 'btnCancel', callback : function() { cancel(); resolve(); } }, buttons : [ { label : 'btnBackup', cssClass : 'elfinder-confirm-btn-backup', callback : function(all) { var i; if (all) { i = exists.length; while (ndx < i--) { renames.push(exists[i].name); } } else { renames.push(exists[ndx].name); } !last && !all ? confirm(++ndx) : resolve(); } } ] }; if (!isDir) { opts.buttons.push({ label : 'btnRename' + (last? '' : 'All'), cssClass : 'elfinder-confirm-btn-rename', callback : function() { renames = null; resolve(); } }); } if (fm.iframeCnt > 0) { delete opts.reject; } fm.confirm(opts); }; if (! fm.file(target).read) { // for dropbox type resolve(); return; } names = $.map(files, function(file, i) { return file.name && (!fm.UA.iOS || file.name !== 'image.jpg')? {i: i, name: file.name} : null ;}); fm.request({ data : {cmd : 'ls', target : target, intersect : $.map(names, function(item) { return item.name;})}, notify : {type : 'preupload', cnt : 1, hideCnt : true}, preventDefault : true }) .done(function(data) { var existedArr, cwdItems; if (data) { if (data.error) { cancel(); } else { if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { if (data.list) { if (Array.isArray(data.list)) { existed = data.list || []; } else { existedArr = []; existed = $.map(data.list, function(n) { if (typeof n === 'string') { return n; } else { // support to >=2.1.11 plugin Normalizer, Sanitizer existedArr = existedArr.concat(n); return false; } }); if (existedArr.length) { existed = existed.concat(existedArr); } hashes = data.list; } exists = $.grep(names, function(name){ return $.inArray(name.name, existed) !== -1 ? true : false ; }); if (exists.length && existed.length && target == fm.cwd().hash) { cwdItems = $.map(fm.files(target), function(file) { return file.name; } ); if ($.grep(existed, function(n) { return $.inArray(n, cwdItems) === -1? true : false; }).length){ fm.sync(); } } } } } } if (exists.length > 0) { confirm(0); } else { resolve(); } }) .fail(function(error) { cancel(); resolve(); error && fm.error(error); }); }; if (fm.api >= 2.1 && typeof files[0] == 'object') { check(); } else { resolve(); } return dfrd; }, // check droped contents checkFile : function(data, fm, target) { if (!!data.checked || data.type == 'files') { return data.files; } else if (data.type == 'data') { var dfrd = $.Deferred(), scanDfd = $.Deferred(), files = [], paths = [], dirctorys = [], processing = 0, items, mkdirs = [], cancel = false, toArray = function(list) { return Array.prototype.slice.call(list || [], 0); }, doScan = function(items) { var entry, readEntries, excludes = fm.options.folderUploadExclude[fm.OS] || null, length = items.length, check = function() { if (--processing < 1 && scanDfd.state() === 'pending') { scanDfd.resolve(); } }, pushItem = function(file) { if (! excludes || ! file.name.match(excludes)) { paths.push(entry.fullPath || ''); files.push(file); } check(); }, readEntries = function(dirReader) { var entries = [], read = function() { dirReader.readEntries(function(results) { if (cancel || !results.length) { for (var i = 0; i < entries.length; i++) { if (cancel) { scanDfd.reject(); break; } doScan([entries[i]]); } check(); } else { entries = entries.concat(toArray(results)); read(); } }, check); }; read(); }; processing++; for (var i = 0; i < length; i++) { if (cancel) { scanDfd.reject(); break; } entry = items[i]; if (entry) { if (entry instanceof File) { pushItem(entry); } else if (entry.isFile) { processing++; entry.file(pushItem, check); } else if (entry.isDirectory) { if (fm.api >= 2.1) { processing++; mkdirs.push(entry.fullPath); readEntries(entry.createReader()); // Start reading dirs. } } } } check(); return scanDfd; }, hasDirs; items = $.map(data.files.items, function(item){ if (item.kind === 'file') { return (item.getAsEntry? item.getAsEntry() : item.webkitGetAsEntry()) || item.getAsFile(); } else { return null; } }); $.each(items, function(i, item) { if (item.isDirectory) { hasDirs = true; return false; } }); if (items.length > 0) { fm.uploads.checkExists(items, target, fm, hasDirs).done(function(renames, hashes){ var dfds = []; if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { if (renames === null) { data.overwrite = 0; renames = []; } items = $.grep(items, function(item){ var i, bak, hash, dfd, hi; if (item.isDirectory && renames.length) { i = $.inArray(item.name, renames); if (i !== -1) { renames.splice(i, 1); bak = fm.uniqueName(item.name + fm.options.backupSuffix , null, ''); $.each(hashes, function(h, name) { if (item.name == name) { hash = h; return false; } }); if (! hash) { hash = fm.fileByName(item.name, target).hash; } fm.lockfiles({files : [hash]}); dfd = fm.request({ data : {cmd : 'rename', target : hash, name : bak}, notify : {type : 'rename', cnt : 1} }) .fail(function() { item._remove = true; fm.sync(); }) .always(function() { fm.unlockfiles({files : [hash]}); }); dfds.push(dfd); } } return !item._remove? true : false; }); } $.when.apply($, dfds).done(function(){ var notifyto, msg, id = +new Date(); if (items.length > 0) { msg = fm.escape(items[0].name); if (items.length > 1) { msg += ' ... ' + items.length + fm.i18n('items'); } notifyto = setTimeout(function() { fm.notify({ type : 'readdir', id : id, cnt : 1, hideCnt: true, msg : fm.i18n('ntfreaddir') + ' (' + msg + ')', cancel: function() { cancel = true; } }); }, fm.options.notifyDelay); doScan(items).done(function() { notifyto && clearTimeout(notifyto); fm.notify({type : 'readdir', id: id, cnt : -1}); if (cancel) { dfrd.reject(); } else { dfrd.resolve([files, paths, renames, hashes, mkdirs]); } }).fail(function() { dfrd.reject(); }); } else { dfrd.reject(); } }); }); return dfrd.promise(); } else { return dfrd.reject(); } } else { var ret = []; var check = []; var str = data.files[0]; if (data.type == 'html') { var tmp = $("").append($.parseHTML(str.replace(/ src=/ig, ' _elfsrc='))), atag; $('img[_elfsrc]', tmp).each(function(){ var url, purl, self = $(this), pa = self.closest('a'); if (pa && pa.attr('href') && pa.attr('href').match(/\.(?:jpe?g|gif|bmp|png)/i)) { purl = pa.attr('href'); } url = self.attr('_elfsrc'); if (url) { if (purl) { $.inArray(purl, ret) == -1 && ret.push(purl); $.inArray(url, check) == -1 && check.push(url); } else { $.inArray(url, ret) == -1 && ret.push(url); } } // Probably it's clipboard data if (ret.length === 1 && ret[0].match(/^data:image\/png/)) { data.clipdata = true; } }); atag = $('a[href]', tmp); atag.each(function(){ var text, loc, parseUrl = function(url) { var a = document.createElement('a'); a.href = url; return a; }; if (text = $(this).text()) { loc = parseUrl($(this).attr('href')); if (loc.href && loc.href.match(/^(?:ht|f)tp/i) && (atag.length === 1 || ! loc.pathname.match(/(?:\.html?|\/[^\/.]*)$/i) || $.trim(text).match(/\.[a-z0-9-]{1,10}$/i))) { if ($.inArray(loc.href, ret) == -1 && $.inArray(loc.href, check) == -1) ret.push(loc.href); } } }); } else { var regex, m, url; regex = /((?:ht|f)tps?:\/\/[-_.!~*\'()a-z0-9;/?:\@&=+\$,%#\*\[\]]+)/ig; while (m = regex.exec(str)) { url = m[1].replace(/&/g, '&'); if ($.inArray(url, ret) == -1) ret.push(url); } } return ret; } }, // upload transport using XMLHttpRequest xhr : function(data, fm) { var self = fm ? fm : this, node = self.getUI(), xhr = new XMLHttpRequest(), notifyto = null, notifyto1 = null, notifyto2 = null, dataChecked = data.checked, isDataType = (data.isDataType || data.type == 'data'), target = (data.target || self.cwd().hash), dropEvt = (data.dropEvt || null), extraData = data.extraData || null, chunkEnable = (self.option('uploadMaxConn', target) != -1), multiMax = Math.min(5, Math.max(1, self.option('uploadMaxConn', target))), retryWait = 10000, // 10 sec retryMax = 30, // 10 sec * 30 = 300 secs (Max 5 mins) retry = 0, getFile = function(files) { var dfd = $.Deferred(), file; if (files.promise) { files.always(function(f) { dfd.resolve(Array.isArray(f) && f.length? (isDataType? f[0][0] : f[0]) : {}); }); } else { dfd.resolve(files.length? (isDataType? files[0][0] : files[0]) : {}); } return dfd; }, dfrd = $.Deferred() .fail(function(err) { var error = self.parseError(err), userAbort; if (error === 'userabort') { userAbort = true; error = void 0; } if (files && (self.uploads.xhrUploading || userAbort)) { // send request om fail getFile(files).done(function(file) { if (!userAbort) { triggerError(error, file); } if (! file._cid) { // send sync request self.uploads.failSyncTm && clearTimeout(self.uploads.failSyncTm); self.uploads.failSyncTm = setTimeout(function() { self.sync(target); }, 1000); } else if (! self.uploads.chunkfailReq[file._cid]) { // send chunkfail request self.uploads.chunkfailReq[file._cid] = true; setTimeout(function() { fm.request({ data : { cmd: 'upload', target: target, chunk: file._chunk, cid: file._cid, upload: ['chunkfail'], mimes: 'chunkfail' }, options : { type: 'post', url: self.uploadURL }, preventDefault: true }).always(function() { delete self.uploads.chunkfailReq[file._chunk]; }); }, 1000); } }); } else { triggerError(error); } !userAbort && self.sync(); self.uploads.xhrUploading = false; files = null; }) .done(function(data) { self.uploads.xhrUploading = false; files = null; if (data) { self.currentReqCmd = 'upload'; data.warning && triggerError(data.warning); self.updateCache(data); data.removed && data.removed.length && self.remove(data); data.added && data.added.length && self.add(data); data.changed && data.changed.length && self.change(data); self.trigger('upload', data, false); self.trigger('uploaddone'); if (data.toasts && Array.isArray(data.toasts)) { $.each(data.toasts, function() { this.msg && self.toast(this); }); } data.sync && self.sync(); if (data.debug) { self.responseDebug(data); fm.debug('backend-debug', data); } } }) .always(function() { self.abortXHR(xhr); // unregist fnAbort function node.off('uploadabort', fnAbort); $(window).off('unload', fnAbort); notifyto && clearTimeout(notifyto); notifyto1 && clearTimeout(notifyto1); notifyto2 && clearTimeout(notifyto2); dataChecked && !data.multiupload && checkNotify() && self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); notifyto1 && uploadedNtf && self.notify({type : 'chunkmerge', cnt : -cnt}); chunkMerge && notifyElm.children('.elfinder-notify-chunkmerge').length && self.notify({type : 'chunkmerge', cnt : -1}); }), formData = new FormData(), files = data.input ? data.input.files : self.uploads.checkFile(data, self, target), cnt = data.checked? (isDataType? files[0].length : files.length) : files.length, isChunked = false, loaded = 0, prev = 0, filesize = 0, notify = false, notifyElm = self.ui.notify, cancelBtn = true, uploadedNtf = false, abort = false, checkNotify = function() { if (!notify && (ntfUpload = notifyElm.children('.elfinder-notify-upload')).length) { notify = true; } return notify; }, fnAbort = function(e, error) { abort = true; self.abortXHR(xhr, { quiet: true, abort: true }); dfrd.reject(error); if (checkNotify()) { self.notify({type : 'upload', cnt : ntfUpload.data('cnt') * -1, progress : 0, size : 0}); } }, cancelToggle = function(show, hasChunk) { ntfUpload.children('.elfinder-notify-cancel')[show? 'show':'hide'](); cancelBtn = show; }, startNotify = function(size) { if (!size) size = filesize; return setTimeout(function() { notify = true; self.notify({type : 'upload', cnt : cnt, progress : loaded - prev, size : size, cancel: function() { node.trigger('uploadabort', 'userabort'); } }); ntfUpload = notifyElm.children('.elfinder-notify-upload'); prev = loaded; if (data.multiupload) { cancelBtn && cancelToggle(true); } else { cancelToggle(cancelBtn && loaded < size); } }, self.options.notifyDelay); }, doRetry = function() { if (retry++ <= retryMax) { if (checkNotify() && prev) { self.notify({type : 'upload', cnt : 0, progress : 0, size : prev}); } self.abortXHR(xhr, { quiet: true }); prev = loaded = 0; setTimeout(function() { var reqId; if (! abort) { xhr.open('POST', self.uploadURL, true); if (self.api >= 2.1029) { reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16); (typeof formData['delete'] === 'function') && formData['delete']('reqid'); formData.append('reqid', reqId); xhr._requestId = reqId; } xhr.send(formData); } }, retryWait); } else { node.trigger('uploadabort', ['errAbort', 'errTimeout']); } }, progress = function() { var node; if (notify) { dfrd.notifyWith(ntfUpload, [{ cnt: ntfUpload.data('cnt'), progress: ntfUpload.data('progress'), total: ntfUpload.data('total') }]); } }, triggerError = function(err, file, unite) { err && self.trigger('xhruploadfail', { error: err, file: file }); if (unite) { if (err) { if (errCnt < self.options.maxErrorDialogs) { if (Array.isArray(err)) { errors = errors.concat(err); } else { errors.push(err); } } errCnt++; } } else { if (err) { self.error(err); } else { if (errors.length) { if (errCnt >= self.options.maxErrorDialogs) { errors = errors.concat('moreErrors', errCnt - self.options.maxErrorDialogs); } self.error(errors); } errors = []; errCnt = 0; } } }, errors = [], errCnt = 0, renames = (data.renames || null), hashes = (data.hashes || null), chunkMerge = false, ntfUpload = $(); // regist fnAbort function node.one('uploadabort', fnAbort); $(window).one('unload.' + fm.namespace, fnAbort); !chunkMerge && (prev = loaded); if (!isDataType && !cnt) { return dfrd.reject(['errUploadNoFiles']); } xhr.addEventListener('error', function() { if (xhr.status == 0) { if (abort) { dfrd.reject(); } else { // ff bug while send zero sized file // for safari - send directory if (!isDataType && data.files && $.grep(data.files, function(f){return ! f.type && f.size === (self.UA.Safari? 1802 : 0)? true : false;}).length) { dfrd.reject(['errAbort', 'errFolderUpload']); } else if (data.input && $.grep(data.input.files, function(f){return ! f.type && f.size === (self.UA.Safari? 1802 : 0)? true : false;}).length) { dfrd.reject(['errUploadNoFiles']); } else { doRetry(); } } } else { node.trigger('uploadabort', 'errConnect'); } }, false); xhr.addEventListener('load', function(e) { var status = xhr.status, res, curr = 0, error = '', errData, errObj; self.setCustomHeaderByXhr(xhr); if (status >= 400) { if (status > 500) { error = 'errResponse'; } else { error = ['errResponse', 'errServerError']; } } else { if (!xhr.responseText) { error = ['errResponse', 'errDataEmpty']; } } if (error) { node.trigger('uploadabort'); getFile(files || {}).done(function(file) { return dfrd.reject(file._cid? null : error); }); } loaded = filesize; if (checkNotify() && (curr = loaded - prev)) { self.notify({type : 'upload', cnt : 0, progress : curr, size : 0}); progress(); } res = self.parseUploadData(xhr.responseText); // chunked upload commit if (res._chunkmerged) { formData = new FormData(); var _file = [{_chunkmerged: res._chunkmerged, _name: res._name, _mtime: res._mtime}]; chunkMerge = true; node.off('uploadabort', fnAbort); notifyto2 = setTimeout(function() { self.notify({type : 'chunkmerge', cnt : 1}); }, self.options.notifyDelay); isDataType? send(_file, files[1]) : send(_file); return; } res._multiupload = data.multiupload? true : false; if (res.error) { errData = { cmd: 'upload', err: res, xhr: xhr, rc: xhr.status }; self.trigger('uploadfail', res); // trigger "requestError" event self.trigger('requestError', errData); if (errData._getEvent && errData._getEvent().isDefaultPrevented()) { res.error = ''; } if (res._chunkfailure || res._multiupload) { abort = true; self.uploads.xhrUploading = false; notifyto && clearTimeout(notifyto); if (ntfUpload.length) { self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); dfrd.reject(res); } else { // for multi connection dfrd.reject(); } } else { dfrd.reject(res); } } else { dfrd.resolve(res); } }, false); xhr.upload.addEventListener('loadstart', function(e) { if (!chunkMerge && e.lengthComputable) { loaded = e.loaded; retry && (loaded = 0); filesize = e.total; if (!loaded) { loaded = parseInt(filesize * 0.05); } if (checkNotify()) { self.notify({type : 'upload', cnt : 0, progress : loaded - prev, size : data.multiupload? 0 : filesize}); prev = loaded; progress(); } } }, false); xhr.upload.addEventListener('progress', function(e) { var curr; if (e.lengthComputable && !chunkMerge && xhr.readyState < 2) { loaded = e.loaded; // to avoid strange bug in safari (not in chrome) with drag&drop. // bug: macos finder opened in any folder, // reset safari cache (option+command+e), reload elfinder page, // drop file from finder // on first attempt request starts (progress callback called ones) but never ends. // any next drop - successfull. if (!data.checked && loaded > 0 && !notifyto) { notifyto = startNotify(xhr._totalSize - loaded); } if (!filesize) { filesize = e.total; if (!loaded) { loaded = parseInt(filesize * 0.05); } } curr = loaded - prev; if (checkNotify() && (curr/e.total) >= 0.05) { self.notify({type : 'upload', cnt : 0, progress : curr, size : 0}); prev = loaded; progress(); } if (!uploadedNtf && loaded >= filesize && !isChunked) { // Use "chunkmerge" for "server-in-process" notification uploadedNtf = true; notifyto1 = setTimeout(function() { self.notify({type : 'chunkmerge', cnt : cnt}); }, self.options.notifyDelay); } if (cancelBtn && ! data.multiupload && loaded >= filesize) { checkNotify() && cancelToggle(false); } } }, false); var send = function(files, paths){ var size = 0, fcnt = 1, sfiles = [], c = 0, total = cnt, maxFileSize, totalSize = 0, chunked = [], chunkID = new Date().getTime().toString().substr(-9), // for take care of the 32bit backend system BYTES_PER_CHUNK = Math.min((fm.uplMaxSize? fm.uplMaxSize : 2097152) - 8190, fm.options.uploadMaxChunkSize), // uplMaxSize margin 8kb or options.uploadMaxChunkSize blobSlice = chunkEnable? false : '', blobSize, blobMtime, blobName, i, start, end, chunks, blob, chunk, added, done, last, failChunk, multi = function(files, num){ var sfiles = [], cid, sfilesLen = 0, cancelChk, hasChunk; if (!abort) { while(files.length && sfiles.length < num) { sfiles.push(files.shift()); } sfilesLen = sfiles.length; if (sfilesLen) { cancelChk = sfilesLen; for (var i=0; i < sfilesLen; i++) { if (abort) { break; } cid = isDataType? (sfiles[i][0][0]._cid || null) : (sfiles[i][0]._cid || null); hasChunk = (hasChunk || cid)? true : false; if (!!failChunk[cid]) { last--; continue; } fm.exec('upload', { type: data.type, isDataType: isDataType, files: sfiles[i], checked: true, target: target, dropEvt: dropEvt, renames: renames, hashes: hashes, multiupload: true, overwrite: data.overwrite === 0? 0 : void 0, clipdata: data.clipdata }, void 0, target) .fail(function(error) { if (error && error === 'No such command') { abort = true; fm.error(['errUpload', 'errPerm']); } if (cid) { failChunk[cid] = true; } }) .always(function(e) { if (e && e.added) added = $.merge(added, e.added); if (last <= ++done) { fm.trigger('multiupload', {added: added}); notifyto && clearTimeout(notifyto); if (checkNotify()) { self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); } } if (files.length) { multi(files, 1); // Next one } else { if (--cancelChk <= 1) { if (cancelBtn) { cancelToggle(false, hasChunk); } } dfrd.resolve(); } }); } } } if (sfiles.length < 1 || abort) { if (abort) { notifyto && clearTimeout(notifyto); if (cid) { failChunk[cid] = true; } dfrd.reject(); } else { dfrd.resolve(); self.uploads.xhrUploading = false; } } }, check = function(){ if (!self.uploads.xhrUploading) { self.uploads.xhrUploading = true; multi(sfiles, multiMax); // Max connection: 3 } else { setTimeout(check, 100); } }, reqId, err; if (! dataChecked && (isDataType || data.type == 'files')) { if (! (maxFileSize = fm.option('uploadMaxSize', target))) { maxFileSize = 0; } for (i=0; i < files.length; i++) { try { blob = files[i]; blobSize = blob.size; if (blobSlice === false) { blobSlice = ''; if (self.api >= 2.1) { if ('slice' in blob) { blobSlice = 'slice'; } else if ('mozSlice' in blob) { blobSlice = 'mozSlice'; } else if ('webkitSlice' in blob) { blobSlice = 'webkitSlice'; } } } } catch(e) { cnt--; total--; continue; } // file size check if ((maxFileSize && blobSize > maxFileSize) || (!blobSlice && fm.uplMaxSize && blobSize > fm.uplMaxSize)) { triggerError(['errUploadFile', blob.name, 'errUploadFileSize'], blob, true); cnt--; total--; continue; } // file mime check if (blob.type && ! self.uploadMimeCheck(blob.type, target)) { triggerError(['errUploadFile', blob.name, 'errUploadMime', '(' + blob.type + ')'], blob, true); cnt--; total--; continue; } if (blobSlice && blobSize > BYTES_PER_CHUNK) { start = 0; end = BYTES_PER_CHUNK; chunks = -1; total = Math.floor((blobSize - 1) / BYTES_PER_CHUNK); blobMtime = blob.lastModified? Math.round(blob.lastModified/1000) : 0; blobName = data.clipdata? fm.date(fm.nonameDateFormat) + '.png' : blob.name; totalSize += blobSize; chunked[chunkID] = 0; while(start < blobSize) { chunk = blob[blobSlice](start, end); chunk._chunk = blobName + '.' + (++chunks) + '_' + total + '.part'; chunk._cid = chunkID; chunk._range = start + ',' + chunk.size + ',' + blobSize; chunk._mtime = blobMtime; chunked[chunkID]++; if (size) { c++; } if (typeof sfiles[c] == 'undefined') { sfiles[c] = []; if (isDataType) { sfiles[c][0] = []; sfiles[c][1] = []; } } size = BYTES_PER_CHUNK; fcnt = 1; if (isDataType) { sfiles[c][0].push(chunk); sfiles[c][1].push(paths[i]); } else { sfiles[c].push(chunk); } start = end; end = start + BYTES_PER_CHUNK; } if (chunk == null) { triggerError(['errUploadFile', blob.name, 'errUploadFileSize'], blob, true); cnt--; total--; } else { total += chunks; size = 0; fcnt = 1; c++; } continue; } if ((fm.uplMaxSize && size + blobSize > fm.uplMaxSize) || fcnt > fm.uplMaxFile) { size = 0; fcnt = 1; c++; } if (typeof sfiles[c] == 'undefined') { sfiles[c] = []; if (isDataType) { sfiles[c][0] = []; sfiles[c][1] = []; } } if (isDataType) { sfiles[c][0].push(blob); sfiles[c][1].push(paths[i]); } else { sfiles[c].push(blob); } size += blobSize; totalSize += blobSize; fcnt++; } if (errors.length) { triggerError(); } if (sfiles.length == 0) { // no data data.checked = true; return false; } if (sfiles.length > 1) { // multi upload notifyto = startNotify(totalSize); added = []; done = 0; last = sfiles.length; failChunk = []; check(); return true; } // single upload if (isDataType) { files = sfiles[0][0]; paths = sfiles[0][1]; } else { files = sfiles[0]; } } if (!dataChecked) { if (!fm.UA.Safari || !data.files) { notifyto = startNotify(totalSize); } else { xhr._totalSize = totalSize; } } dataChecked = true; if (! files.length) { dfrd.reject(['errUploadNoFiles']); } xhr.open('POST', self.uploadURL, true); // set request headers if (fm.customHeaders) { $.each(fm.customHeaders, function(key) { xhr.setRequestHeader(key, this); }); } // set xhrFields if (fm.xhrFields) { $.each(fm.xhrFields, function(key) { if (key in xhr) { xhr[key] = this; } }); } if (self.api >= 2.1029) { // request ID reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16); formData.append('reqid', reqId); xhr._requestId = reqId; } formData.append('cmd', 'upload'); formData.append(self.newAPI ? 'target' : 'current', target); if (renames && renames.length) { $.each(renames, function(i, v) { formData.append('renames[]', v); }); formData.append('suffix', fm.options.backupSuffix); } if (hashes) { $.each(hashes, function(i, v) { formData.append('hashes['+ i +']', v); }); } $.each(self.customData, function(key, val) { formData.append(key, val); }); $.each(self.options.onlyMimes, function(i, mime) { formData.append('mimes[]', mime); }); $.each(files, function(i, file) { var name, relpath; if (file._chunkmerged) { formData.append('chunk', file._chunkmerged); formData.append('upload[]', file._name); formData.append('mtime[]', file._mtime); data.clipdata && formData.append('overwrite', 0); isChunked = true; } else { if (file._chunkfail) { formData.append('upload[]', 'chunkfail'); formData.append('mimes', 'chunkfail'); } else { if (data.clipdata) { if (!file._chunk) { data.overwrite = 0; name = fm.date(fm.nonameDateFormat) + '.png'; } } else { if (file.name) { name = file.name; if (fm.UA.iOS) { if (name.match(/^image\.jpe?g$/i)) { data.overwrite = 0; name = fm.date(fm.nonameDateFormat) + '.jpg'; } else if (name.match(/^capturedvideo\.mov$/i)) { data.overwrite = 0; name = fm.date(fm.nonameDateFormat) + '.mov'; } } relpath = (file.webkitRelativePath || file.relativePath || file._relativePath || '').replace(/[^\/]+$/, ''); name = relpath + name; } } name? formData.append('upload[]', file, name) : formData.append('upload[]', file); } if (file._chunk) { formData.append('chunk', file._chunk); formData.append('cid' , file._cid); formData.append('range', file._range); formData.append('mtime[]', file._mtime); isChunked = true; } else { formData.append('mtime[]', file.lastModified? Math.round(file.lastModified/1000) : 0); } } }); if (isDataType) { $.each(paths, function(i, path) { formData.append('upload_path[]', path); }); } if (data.overwrite === 0) { formData.append('overwrite', 0); } // send int value that which meta key was pressed when dropped as `dropWith` if (dropEvt) { formData.append('dropWith', parseInt( (dropEvt.altKey ? '1' : '0')+ (dropEvt.ctrlKey ? '1' : '0')+ (dropEvt.metaKey ? '1' : '0')+ (dropEvt.shiftKey? '1' : '0'), 2)); } // set extraData on current request if (extraData) { $.each(extraData, function(key, val) { formData.append(key, val); }); } xhr.send(formData); return true; }; if (! isDataType) { if (files.length > 0) { if (! data.clipdata && renames == null) { var mkdirs = [], paths = [], excludes = fm.options.folderUploadExclude[fm.OS] || null; $.each(files, function(i, file) { var relPath = file.webkitRelativePath || file.relativePath || '', idx, rootDir; if (! relPath) { return false; } if (excludes && file.name.match(excludes)) { file._remove = true; relPath = void(0); } else { // add '/' as prefix to make same to folder uploading with DnD, see #2607 relPath = '/' + relPath.replace(/\/[^\/]*$/, '').replace(/^\//, ''); if (relPath && $.inArray(relPath, mkdirs) === -1) { mkdirs.push(relPath); // checking the root directory to supports see #2378 idx = relPath.substr(1).indexOf('/'); if (idx !== -1 && (rootDir = relPath.substr(0, idx + 1)) && $.inArray(rootDir, mkdirs) === -1) { mkdirs.unshift(rootDir); } } } paths.push(relPath); }); renames = []; hashes = {}; if (mkdirs.length) { (function() { var checkDirs = $.map(mkdirs, function(name) { return name.substr(1).indexOf('/') === -1 ? {name: name.substr(1)} : null;}), cancelDirs = []; fm.uploads.checkExists(checkDirs, target, fm, true).done( function(res, res2) { var dfds = [], dfd, bak, hash; if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { cancelDirs = $.map(checkDirs, function(dir) { return dir._remove? dir.name : null ;} ); checkDirs = $.grep(checkDirs, function(dir) { return !dir._remove? true : false ;} ); } if (cancelDirs.length) { $.each(paths.concat(), function(i, path) { if ($.inArray(path, cancelDirs) === 0) { files[i]._remove = true; paths[i] = void(0); } }); } files = $.grep(files, function(file) { return file._remove? false : true; }); paths = $.grep(paths, function(path) { return path === void 0 ? false : true; }); if (checkDirs.length) { dfd = $.Deferred(); if (res.length) { $.each(res, function(i, existName) { // backup bak = fm.uniqueName(existName + fm.options.backupSuffix , null, ''); $.each(res2, function(h, name) { if (res[0] == name) { hash = h; return false; } }); if (! hash) { hash = fm.fileByName(res[0], target).hash; } fm.lockfiles({files : [hash]}); dfds.push( fm.request({ data : {cmd : 'rename', target : hash, name : bak}, notify : {type : 'rename', cnt : 1} }) .fail(function(error) { dfrd.reject(error); fm.sync(); }) .always(function() { fm.unlockfiles({files : [hash]}); }) ); }); } else { dfds.push(null); } $.when.apply($, dfds).done(function() { // ensure directories fm.request({ data : {cmd : 'mkdir', target : target, dirs : mkdirs}, notify : {type : 'mkdir', cnt : mkdirs.length}, preventFail: true }) .fail(function(error) { error = error || ['errUnknown']; if (error[0] === 'errCmdParams') { multiMax = 1; } else { multiMax = 0; dfrd.reject(error); } }) .done(function(data) { var rm = false; if (!data.hashes) { data.hashes = {}; } paths = $.map(paths.concat(), function(p, i) { if (p === '/') { return target; } else { if (data.hashes[p]) { return data.hashes[p]; } else { rm = true; files[i]._remove = true; return null; } } }); if (rm) { files = $.grep(files, function(file) { return file._remove? false : true; }); } }) .always(function(data) { if (multiMax) { isDataType = true; if (! send(files, paths)) { dfrd.reject(); } } }); }); } else { dfrd.reject(); } } ); })(); } else { fm.uploads.checkExists(files, target, fm).done( function(res, res2){ if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { hashes = res2; if (res === null) { data.overwrite = 0; } else { renames = res; } files = $.grep(files, function(file){return !file._remove? true : false ;}); } cnt = files.length; if (cnt > 0) { if (! send(files)) { dfrd.reject(); } } else { dfrd.reject(); } } ); } } else { if (! send(files)) { dfrd.reject(); } } } else { dfrd.reject(); } } else { if (dataChecked) { send(files[0], files[1]); } else { files.done(function(result) { // result: [files, paths, renames, hashes, mkdirs] renames = []; cnt = result[0].length; if (cnt) { if (result[4] && result[4].length) { // ensure directories fm.request({ data : {cmd : 'mkdir', target : target, dirs : result[4]}, notify : {type : 'mkdir', cnt : result[4].length}, preventFail: true }) .fail(function(error) { error = error || ['errUnknown']; if (error[0] === 'errCmdParams') { multiMax = 1; } else { multiMax = 0; dfrd.reject(error); } }) .done(function(data) { var rm = false; if (!data.hashes) { data.hashes = {}; } result[1] = $.map(result[1], function(p, i) { result[0][i]._relativePath = p.replace(/^\//, ''); p = p.replace(/\/[^\/]*$/, ''); if (p === '') { return target; } else { if (data.hashes[p]) { return data.hashes[p]; } else { rm = true; result[0][i]._remove = true; return null; } } }); if (rm) { result[0] = $.grep(result[0], function(file) { return file._remove? false : true; }); } }) .always(function(data) { if (multiMax) { renames = result[2]; hashes = result[3]; send(result[0], result[1]); } }); return; } else { result[1] = $.map(result[1], function() { return target; }); } renames = result[2]; hashes = result[3]; send(result[0], result[1]); } else { dfrd.reject(['errUploadNoFiles']); } }).fail(function(){ dfrd.reject(); }); } } return dfrd; }, // upload transport using iframe iframe : function(data, fm) { var self = fm ? fm : this, input = data.input? data.input : false, files = !input ? self.uploads.checkFile(data, self) : false, dfrd = $.Deferred() .fail(function(error) { error && self.error(error); }), name = 'iframe-'+fm.namespace+(++self.iframeCnt), form = $('
              '), msie = this.UA.IE, // clear timeouts, close notification dialog, remove form/iframe onload = function() { abortto && clearTimeout(abortto); notifyto && clearTimeout(notifyto); notify && self.notify({type : 'upload', cnt : -cnt}); setTimeout(function() { msie && $('').appendTo(form); form.remove(); iframe.remove(); }, 100); }, iframe = $('') .on('load', function() { iframe.off('load') .on('load', function() { onload(); // data will be processed in callback response or window onmessage dfrd.resolve(); }); // notify dialog notifyto = setTimeout(function() { notify = true; self.notify({type : 'upload', cnt : cnt}); }, self.options.notifyDelay); // emulate abort on timeout if (self.options.iframeTimeout > 0) { abortto = setTimeout(function() { onload(); dfrd.reject(['errConnect', 'errTimeout']); }, self.options.iframeTimeout); } form.submit(); }), target = (data.target || self.cwd().hash), names = [], dfds = [], renames = [], hashes = {}, cnt, notify, notifyto, abortto; if (files && files.length) { $.each(files, function(i, val) { form.append(''); }); cnt = 1; } else if (input && $(input).is(':file') && $(input).val()) { if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { names = input.files? input.files : [{ name: $(input).val().replace(/^(?:.+[\\\/])?([^\\\/]+)$/, '$1') }]; //names = $.map(names, function(file){return file.name? { name: file.name } : null ;}); dfds.push(self.uploads.checkExists(names, target, self).done( function(res, res2){ hashes = res2; if (res === null) { data.overwrite = 0; } else{ renames = res; cnt = $.grep(names, function(file){return !file._remove? true : false ;}).length; if (cnt != names.length) { cnt = 0; } } } )); } cnt = input.files ? input.files.length : 1; form.append(input); } else { return dfrd.reject(); } $.when.apply($, dfds).done(function() { if (cnt < 1) { return dfrd.reject(); } form.append('') .append('') .append('') .append($(input).attr('name', 'upload[]')); if (renames.length > 0) { $.each(renames, function(i, rename) { form.append(''); }); form.append(''); } if (hashes) { $.each(renames, function(i, v) { form.append(''); }); } if (data.overwrite === 0) { form.append(''); } $.each(self.options.onlyMimes||[], function(i, mime) { form.append(''); }); $.each(self.customData, function(key, val) { form.append(''); }); form.appendTo('body'); iframe.appendTo('body'); }); return dfrd; } }, /** * Bind callback to event(s) The callback is executed at most once per event. * To bind to multiply events at once, separate events names by space * * @param String event name * @param Function callback * @param Boolan priority first * @return elFinder */ one : function(ev, callback, priorityFirst) { var self = this, event = ev.toLowerCase(), h = function(e, f) { if (!self.toUnbindEvents[event]) { self.toUnbindEvents[event] = []; } self.toUnbindEvents[event].push({ type: event, callback: h }); return (callback.done? callback.done : callback).apply(this, arguments); }; if (callback.done) { h = {done: h}; } return this.bind(event, h, priorityFirst); }, /** * Set/get data into/from localStorage * * @param String key * @param String|void value * @return String|null */ localStorage : function(key, val) { var self = this, s = window.localStorage, oldkey = 'elfinder-'+(key || '')+this.id, // old key of elFinder < 2.1.6 prefix = window.location.pathname+'-elfinder-', suffix = this.id, clrs = [], retval, oldval, t, precnt, sufcnt; // reset this node data if (typeof(key) === 'undefined') { precnt = prefix.length; sufcnt = suffix.length * -1; $.each(s, function(key) { if (key.substr(0, precnt) === prefix && key.substr(sufcnt) === suffix) { clrs.push(key); } }); $.each(clrs, function(i, key) { s.removeItem(key); }); return true; } // new key of elFinder >= 2.1.6 key = prefix+key+suffix; if (val === null) { return s.removeItem(key); } if (val === void(0) && !(retval = s.getItem(key)) && (oldval = s.getItem(oldkey))) { val = oldval; s.removeItem(oldkey); } if (val !== void(0)) { t = typeof val; if (t !== 'string' && t !== 'number') { val = JSON.stringify(val); } try { s.setItem(key, val); } catch (e) { try { s.clear(); s.setItem(key, val); } catch (e) { self.debug('error', e.toString()); } } retval = s.getItem(key); } if (retval && (retval.substr(0,1) === '{' || retval.substr(0,1) === '[')) { try { return JSON.parse(retval); } catch(e) {} } return retval; }, /** * Set/get data into/from sessionStorage * * @param String key * @param String|void value * @return String|null */ sessionStorage : function(key, val) { var self = this, s, retval, t; try { s = window.sessionStorage; } catch(e) {} if (!s) { return; } if (val === null) { return s.removeItem(key); } if (val !== void(0)) { t = typeof val; if (t !== 'string' && t !== 'number') { val = JSON.stringify(val); } try { s.setItem(key, val); } catch (e) { try { s.clear(); s.setItem(key, val); } catch (e) { self.debug('error', e.toString()); } } } retval = s.getItem(key); if (retval && (retval.substr(0,1) === '{' || retval.substr(0,1) === '[')) { try { return JSON.parse(retval); } catch(e) {} } return retval; }, /** * Get/set cookie * * @param String cookie name * @param String|void cookie value * @return String|null */ cookie : function(name, value) { var d, o, c, i, retval, t; name = 'elfinder-'+name+this.id; if (value === void(0)) { if (this.cookieEnabled && document.cookie && document.cookie != '') { c = document.cookie.split(';'); name += '='; for (i=0; i'), /** * Replace not html-safe symbols to html entities * * @param String text to escape * @return String */ escape : function(name) { return this._node.text(name).html().replace(/"/g, '"').replace(/'/g, '''); }, /** * Cleanup ajax data. * For old api convert data into new api format * * @param String command name * @param Object data from backend * @return Object */ normalize : function(data) { var self = this, fileFilter = (function() { var func, filter; if (filter = self.options.fileFilter) { if (typeof filter === 'function') { func = function(file) { return filter.call(self, file); }; } else if (filter instanceof RegExp) { func = function(file) { return filter.test(file.name); }; } } return func? func : null; })(), chkCmdMap = function(opts) { // Disable command to replace with other command var disabled; if (opts.uiCmdMap) { if ($.isPlainObject(opts.uiCmdMap) && Object.keys(opts.uiCmdMap).length) { if (!opts.disabledFlip) { opts.disabledFlip = {}; } disabled = opts.disabledFlip; $.each(opts.uiCmdMap, function(f, t) { if (t === 'hidden' && !disabled[f]) { opts.disabled.push(f); opts.disabledFlip[f] = true; } }); } else { delete opts.uiCmdMap; } } }, normalizeOptions = function(opts) { var getType = function(v) { var type = typeof v; if (type === 'object' && Array.isArray(v)) { type = 'array'; } return type; }; $.each(self.optionProperties, function(k, empty) { if (empty !== void(0)) { if (opts[k] && getType(opts[k]) !== getType(empty)) { opts[k] = empty; } } }); if (opts.disabled) { opts.disabledFlip = self.arrayFlip(opts.disabled, true); $.each(self.options.disabledCmdsRels, function(com, rels) { var m, flg; if (opts.disabledFlip[com]) { flg = true; } else if (m = com.match(/^([^&]+)&([^=]+)=(.*)$/)) { if (opts.disabledFlip[m[1]] && opts[m[2]] == m[3]) { flg = true; } } if (flg) { $.each(rels, function(i, rel) { if (!opts.disabledFlip[rel]) { opts.disabledFlip[rel] = true; opts.disabled.push(rel); } }); } }); } else { opts.disabledFlip = {}; } return opts; }, filter = function(file, asMap, type) { var res = asMap? file : true, ign = asMap? null : false, vid, targetOptions, isRoot, rootNames; if (file && file.hash && file.name && file.mime) { if (file.mime === 'application/x-empty') { file.mime = 'text/plain'; } isRoot = self.isRoot(file); if (isRoot && ! file.volumeid) { self.debug('warning', 'The volume root statuses requires `volumeid` property.'); } if (isRoot || file.mime === 'directory') { // Prevention of circular reference if (file.phash) { if (file.phash === file.hash) { error = error.concat(['Parent folder of "$1" is itself.', file.name]); return ign; } if (isRoot && file.volumeid && file.phash.indexOf(file.volumeid) === 0) { error = error.concat(['Parent folder of "$1" is inner itself.', file.name]); return ign; } } // set options, tmbUrls for each volume if (file.volumeid) { vid = file.volumeid; if (isRoot) { // make or update of leaf roots cache if (file.phash) { if (! self.leafRoots[file.phash]) { self.leafRoots[file.phash] = [ file.hash ]; } else { if ($.inArray(file.hash, self.leafRoots[file.phash]) === -1) { self.leafRoots[file.phash].push(file.hash); } } } self.hasVolOptions = true; if (! self.volOptions[vid]) { self.volOptions[vid] = { // set dispInlineRegex dispInlineRegex: self.options.dispInlineRegex }; } targetOptions = self.volOptions[vid]; if (file.options) { // >= v.2.1.14 has file.options Object.assign(targetOptions, file.options); } // for compat <= v2.1.13 if (file.disabled) { targetOptions.disabled = file.disabled; targetOptions.disabledFlip = self.arrayFlip(file.disabled, true); } if (file.tmbUrl) { targetOptions.tmbUrl = file.tmbUrl; } // '/' required at the end of url if (targetOptions.url && targetOptions.url.substr(-1) !== '/') { targetOptions.url += '/'; } // check uiCmdMap chkCmdMap(targetOptions); // check trash bin hash if (targetOptions.trashHash) { if (self.trashes[targetOptions.trashHash] === false) { delete targetOptions.trashHash; } else { self.trashes[targetOptions.trashHash] = file.hash; } } // set immediate properties $.each(self.optionProperties, function(k) { if (targetOptions[k]) { file[k] = targetOptions[k]; } }); // regist fm.roots if (type !== 'cwd') { self.roots[vid] = file.hash; } // regist fm.volumeExpires if (file.expires) { self.volumeExpires[vid] = file.expires; } } if (prevId !== vid) { prevId = vid; i18nFolderName = self.option('i18nFolderName', vid); } } // volume root i18n name if (isRoot && ! file.i18) { name = 'volume_' + file.name, i18 = self.i18n(false, name); if (name !== i18) { file.i18 = i18; } } // i18nFolderName if (i18nFolderName && ! file.i18) { name = 'folder_' + file.name, i18 = self.i18n(false, name); if (name !== i18) { file.i18 = i18; } } if (isRoot) { if (rootNames = self.storage('rootNames')) { if (rootNames[file.hash]) { file._name = file.name; file._i18 = file.i18; file.name = rootNames[file.hash] = rootNames[file.hash]; delete file.i18; } self.storage('rootNames', rootNames); } } // lock trash bins holder if (self.trashes[file.hash]) { file.locked = true; } } else { if (fileFilter) { try { if (! fileFilter(file)) { return ign; } } catch(e) { self.debug(e); } } if (file.size == 0) { file.mime = self.getMimetype(file.name, file.mime); } } if (file.options) { self.optionsByHashes[file.hash] = normalizeOptions(file.options); } delete file.options; return res; } return ign; }, getDescendants = function(hashes) { var res = []; $.each(self.files(), function(h, f) { $.each(self.parents(h), function(i, ph) { if ($.inArray(ph, hashes) !== -1 && $.inArray(h, hashes) === -1) { res.push(h); return false; } }); }); return res; }, applyLeafRootStats = function(dataArr, type) { $.each(dataArr, function(i, f) { var pfile, done; if (self.leafRoots[f.hash]) { self.applyLeafRootStats(f); } // update leaf root parent stat if (type !== 'change' && f.phash && self.isRoot(f) && (pfile = self.file(f.phash))) { self.applyLeafRootStats(pfile); // add to data.changed if (!data.changed) { data.changed = [pfile]; } else { $.each(data.changed, function(i, f) { if (f.hash === pfile.hash) { data.changed[i] = pfile; done = true; return false; } }); if (!done) { data.changed.push(pfile); } } } }); }, error = [], name, i18, i18nFolderName, prevId, cData; // set cunstom data if (data.customData && (!self.prevCustomData || (JSON.stringify(data.customData) !== JSON.stringify(self.prevCustomData)))) { self.prevCustomData = data.customData; try { cData = JSON.parse(data.customData); if ($.isPlainObject(cData)) { self.prevCustomData = cData; $.each(Object.keys(cData), function(i, key) { if (cData[key] === null) { delete cData[key]; delete self.optsCustomData[key]; } }); self.customData = Object.assign({}, self.optsCustomData, cData); } } catch(e) {} } if (data.options) { normalizeOptions(data.options); } if (data.cwd) { if (data.cwd.volumeid && data.options && Object.keys(data.options).length && self.isRoot(data.cwd)) { self.hasVolOptions = true; self.volOptions[data.cwd.volumeid] = data.options; } data.cwd = filter(data.cwd, true, 'cwd'); } if (data.files) { data.files = $.grep(data.files, filter); } if (data.tree) { data.tree = $.grep(data.tree, filter); } if (data.added) { data.added = $.grep(data.added, filter); } if (data.changed) { data.changed = $.grep(data.changed, filter); } if (data.removed && data.removed.length && self.searchStatus.state === 2) { data.removed = data.removed.concat(getDescendants(data.removed)); } if (data.api) { data.init = true; } if (Object.keys(self.leafRoots).length) { data.files && applyLeafRootStats(data.files); data.tree && applyLeafRootStats(data.tree); data.added && applyLeafRootStats(data.added); data.changed && applyLeafRootStats(data.changed, 'change'); } // merge options that apply only to cwd if (data.cwd && data.cwd.options && data.options) { Object.assign(data.options, normalizeOptions(data.cwd.options)); } // '/' required at the end of url if (data.options && data.options.url && data.options.url.substr(-1) !== '/') { data.options.url += '/'; } // check error if (error.length) { data.norError = ['errResponse'].concat(error); } return data; }, /** * Update sort options * * @param {String} sort type * @param {String} sort order * @param {Boolean} show folder first */ setSort : function(type, order, stickFolders, alsoTreeview) { this.storage('sortType', (this.sortType = this.sortRules[type] ? type : 'name')); this.storage('sortOrder', (this.sortOrder = /asc|desc/.test(order) ? order : 'asc')); this.storage('sortStickFolders', (this.sortStickFolders = !!stickFolders) ? 1 : ''); this.storage('sortAlsoTreeview', (this.sortAlsoTreeview = !!alsoTreeview) ? 1 : ''); this.trigger('sortchange'); }, _sortRules : { name : function(file1, file2) { return elFinder.prototype.naturalCompare(file1.i18 || file1.name, file2.i18 || file2.name); }, size : function(file1, file2) { var size1 = parseInt(file1.size) || 0, size2 = parseInt(file2.size) || 0; return size1 === size2 ? 0 : size1 > size2 ? 1 : -1; }, kind : function(file1, file2) { return elFinder.prototype.naturalCompare(file1.mime, file2.mime); }, date : function(file1, file2) { var date1 = file1.ts || file1.date || 0, date2 = file2.ts || file2.date || 0; return date1 === date2 ? 0 : date1 > date2 ? 1 : -1; }, perm : function(file1, file2) { var val = function(file) { return (file.write? 2 : 0) + (file.read? 1 : 0); }, v1 = val(file1), v2 = val(file2); return v1 === v2 ? 0 : v1 > v2 ? 1 : -1; }, mode : function(file1, file2) { var v1 = file1.mode || (file1.perm || ''), v2 = file2.mode || (file2.perm || ''); return elFinder.prototype.naturalCompare(v1, v2); }, owner : function(file1, file2) { var v1 = file1.owner || '', v2 = file2.owner || ''; return elFinder.prototype.naturalCompare(v1, v2); }, group : function(file1, file2) { var v1 = file1.group || '', v2 = file2.group || ''; return elFinder.prototype.naturalCompare(v1, v2); } }, /** * Valid sort rule names * * @type Object */ sorters : {}, /** * Compare strings for natural sort * * @param String * @param String * @return Number */ naturalCompare : function(a, b) { var self = elFinder.prototype.naturalCompare; if (typeof self.loc == 'undefined') { self.loc = (navigator.userLanguage || navigator.browserLanguage || navigator.language || 'en-US'); } if (typeof self.sort == 'undefined') { if ('11'.localeCompare('2', self.loc, {numeric: true}) > 0) { // Native support if (window.Intl && window.Intl.Collator) { self.sort = new Intl.Collator(self.loc, {numeric: true}).compare; } else { self.sort = function(a, b) { return a.localeCompare(b, self.loc, {numeric: true}); }; } } else { /* * Edited for elFinder (emulates localeCompare() by numeric) by Naoki Sawada aka nao-pon */ /* * Huddle/javascript-natural-sort (https://github.com/Huddle/javascript-natural-sort) */ /* * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license * Author: Jim Palmer (based on chunking idea from Dave Koelle) * http://opensource.org/licenses/mit-license.php */ self.sort = function(a, b) { var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi, sre = /(^[ ]*|[ ]*$)/g, dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/, hre = /^0x[0-9a-f]+$/i, ore = /^0/, syre = /^[\x01\x21-\x2f\x3a-\x40\x5b-\x60\x7b-\x7e]/, // symbol first - (Naoki Sawada) i = function(s) { return self.sort.insensitive && (''+s).toLowerCase() || ''+s; }, // convert all to strings strip whitespace // first character is "_", it's smallest - (Naoki Sawada) x = i(a).replace(sre, '').replace(/^_/, "\x01") || '', y = i(b).replace(sre, '').replace(/^_/, "\x01") || '', // chunk/tokenize xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'), yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'), // numeric, hex or date detection xD = parseInt(x.match(hre)) || (xN.length != 1 && x.match(dre) && Date.parse(x)), yD = parseInt(y.match(hre)) || xD && y.match(dre) && Date.parse(y) || null, oFxNcL, oFyNcL, locRes = 0; // first try and sort Hex codes or Dates if (yD) { if ( xD < yD ) return -1; else if ( xD > yD ) return 1; } // natural sorting through split numeric strings and default strings for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) { // find floats not starting with '0', string or 0 if not defined (Clint Priest) oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0; oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0; // handle numeric vs string comparison - number < string - (Kyle Adams) // but symbol first < number - (Naoki Sawada) if (isNaN(oFxNcL) !== isNaN(oFyNcL)) { if (isNaN(oFxNcL) && (typeof oFxNcL !== 'string' || ! oFxNcL.match(syre))) { return 1; } else if (typeof oFyNcL !== 'string' || ! oFyNcL.match(syre)) { return -1; } } // use decimal number comparison if either value is string zero if (parseInt(oFxNcL, 10) === 0) oFxNcL = 0; if (parseInt(oFyNcL, 10) === 0) oFyNcL = 0; // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2' if (typeof oFxNcL !== typeof oFyNcL) { oFxNcL += ''; oFyNcL += ''; } // use locale sensitive sort for strings when case insensitive // note: localeCompare interleaves uppercase with lowercase (e.g. A,a,B,b) if (self.sort.insensitive && typeof oFxNcL === 'string' && typeof oFyNcL === 'string') { locRes = oFxNcL.localeCompare(oFyNcL, self.loc); if (locRes !== 0) return locRes; } if (oFxNcL < oFyNcL) return -1; if (oFxNcL > oFyNcL) return 1; } return 0; }; self.sort.insensitive = true; } } return self.sort(a, b); }, /** * Compare files based on elFinder.sort * * @param Object file * @param Object file * @return Number */ compare : function(file1, file2) { var self = this, type = self.sortType, asc = self.sortOrder == 'asc', stick = self.sortStickFolders, rules = self.sortRules, sort = rules[type], d1 = file1.mime == 'directory', d2 = file2.mime == 'directory', res; if (stick) { if (d1 && !d2) { return -1; } else if (!d1 && d2) { return 1; } } res = asc ? sort(file1, file2) : sort(file2, file1); return type !== 'name' && res === 0 ? res = asc ? rules.name(file1, file2) : rules.name(file2, file1) : res; }, /** * Sort files based on config * * @param Array files * @return Array */ sortFiles : function(files) { return files.sort(this.compare); }, /** * Open notification dialog * and append/update message for required notification type. * * @param Object options * @example * this.notify({ * type : 'copy', * msg : 'Copy files', // not required for known types @see this.notifyType * cnt : 3, * hideCnt : false, // true for not show count * progress : 10, // progress bar percents (use cnt : 0 to update progress bar) * cancel : callback // callback function for cancel button * }) * @return elFinder */ notify : function(opts) { var self = this, type = opts.type, id = opts.id? 'elfinder-notify-'+opts.id : '', msg = this.i18n((typeof opts.msg !== 'undefined')? opts.msg : (this.messages['ntf'+type] ? 'ntf'+type : 'ntfsmth')), hiddens = this.arrayFlip(this.options.notifyDialog.hiddens || []), ndialog = this.ui.notify, dialog = ndialog.closest('.ui-dialog'), notify = ndialog.children('.elfinder-notify-'+type+(id? ('.'+id) : '')), button = notify.children('div.elfinder-notify-cancel').children('button'), ntpl = '
              {msg}
              ', delta = opts.cnt + 0, size = (typeof opts.size != 'undefined')? parseInt(opts.size) : null, progress = (typeof opts.progress != 'undefined' && opts.progress >= 0) ? opts.progress : null, fakeint = opts.fakeinterval || 200, cancel = opts.cancel, clhover = 'ui-state-hover', close = function() { var prog = notify.find('.elfinder-notify-progress'), rm = function() { notify.remove(); if (!ndialog.children(dialog.data('minimized')? void(0) : ':visible').length) { if (dialog.data('minimized')) { dialog.data('minimized').hide(); } else { ndialog.elfinderdialog('close'); } } setProgressbar(); }; notify._esc && $(document).off('keydown', notify._esc); if (notify.data('cur') < 100) { prog.animate({ width : '100%' }, 50, function() { requestAnimationFrame(function() { rm(); }); }); } else { rm(); } }, fakeUp = function(interval) { var cur; if (notify.length) { cur = notify.data('cur') + 1; if (cur <= 98) { notify.find('.elfinder-notify-progress').width(cur + '%'); notify.data('cur', cur); setProgressbar(); setTimeout(function() { interval *= 1.05; fakeUp(interval); }, interval); } } }, setProgressbar = function() { var cnt = 0, val = 0, ntfs = ndialog.children('.elfinder-notify'), w; if (ntfs.length) { ntfs.each(function() { cnt++; val += Math.min($(this).data('cur'), 100); }); w = cnt? Math.floor(val / (cnt * 100) * 100) + '%' : 0; self.ui.progressbar.width(w); if (dialog.data('minimized')) { dialog.data('minimized').title(w); dialog.data('minimized').dialog().children('.ui-dialog-titlebar').children('.elfinder-ui-progressbar').width(w); } } else { self.ui.progressbar.width(0); dialog.data('minimized') && dialog.data('minimized').hide(); } }, cnt, total, prc; if (!type) { return this; } if (!notify.length) { notify = $(ntpl.replace(/\{type\}/g, type).replace(/\{msg\}/g, msg)); if (hiddens[type]) { notify.hide(); } else { ndialog.on('minimize', function(e) { dialog.data('minimized') && setProgressbar(); }); } notify.appendTo(ndialog).data('cnt', 0); if (progress != null) { notify.data({progress : 0, total : 0, cur : 0}); } else { notify.data({cur : 0}); fakeUp(fakeint); } if (cancel) { button = $('') .on('mouseenter mouseleave', function(e) { $(this).toggleClass(clhover, e.type === 'mouseenter'); }); notify.children('div.elfinder-notify-cancel').append(button); } ndialog.trigger('resize'); } else if (typeof opts.msg !== 'undefined') { notify.children('span.elfinder-notify-msg').html(msg); } cnt = delta + parseInt(notify.data('cnt')); if (cnt > 0) { if (cancel && button.length) { if ($.isFunction(cancel) || (typeof cancel === 'object' && cancel.promise)) { notify._esc = function(e) { if (e.type == 'keydown' && e.keyCode != $.ui.keyCode.ESCAPE) { return; } e.preventDefault(); e.stopPropagation(); close(); if (cancel.promise) { cancel.reject(0); // 0 is canceling flag } else { cancel(e); } }; button.on('click', function(e) { notify._esc(e); }); $(document).on('keydown.' + this.namespace, notify._esc); } } !opts.hideCnt && notify.children('.elfinder-notify-cnt').text('('+cnt+')'); if (delta > 0 && ndialog.is(':hidden') && !hiddens[type]) { if (dialog.data('minimized')) { dialog.data('minimized').show(); } else { ndialog.elfinderdialog('open', this).height('auto'); } } notify.data('cnt', cnt); if ((progress != null) && (total = notify.data('total')) >= 0 && (prc = notify.data('progress')) >= 0) { total += size != null? size : delta; prc += progress; (size == null && delta < 0) && (prc += delta * 100); notify.data({progress : prc, total : total}); if (size != null) { prc *= 100; total = Math.max(1, total); } progress = Math.min(parseInt(prc/total), 100); notify.find('.elfinder-notify-progress') .animate({ width : (progress < 100 ? progress : 100)+'%' }, 20, function() { notify.data('cur', progress); setProgressbar(); }); } } else { close(); } return this; }, /** * Open confirmation dialog * * @param Object options * @example * this.confirm({ * cssClass : 'elfinder-confirm-mydialog', * title : 'Remove files', * text : 'Here is question text', * accept : { // accept callback - required * label : 'Continue', * callback : function(applyToAll) { fm.log('Ok') } * }, * cancel : { // cancel callback - required * label : 'Cancel', * callback : function() { fm.log('Cancel')} * }, * reject : { // reject callback - optionally * label : 'No', * callback : function(applyToAll) { fm.log('No')} * }, * buttons : [ // additional buttons callback - optionally * { * label : 'Btn1', * callback : function(applyToAll) { fm.log('Btn1')} * } * ], * all : true // display checkbox "Apply to all" * }) * @return elFinder */ confirm : function(opts) { var self = this, complete = false, options = { cssClass : 'elfinder-dialog-confirm', modal : true, resizable : false, title : this.i18n(opts.title || 'confirmReq'), buttons : {}, close : function() { !complete && opts.cancel.callback(); $(this).elfinderdialog('destroy'); } }, apply = this.i18n('apllyAll'), label, checkbox, btnNum; if (opts.cssClass) { options.cssClass += ' ' + opts.cssClass; } options.buttons[this.i18n(opts.accept.label)] = function() { opts.accept.callback(!!(checkbox && checkbox.prop('checked'))); complete = true; $(this).elfinderdialog('close'); }; options.buttons[this.i18n(opts.accept.label)]._cssClass = 'elfinder-confirm-accept'; if (opts.reject) { options.buttons[this.i18n(opts.reject.label)] = function() { opts.reject.callback(!!(checkbox && checkbox.prop('checked'))); complete = true; $(this).elfinderdialog('close'); }; options.buttons[this.i18n(opts.reject.label)]._cssClass = 'elfinder-confirm-reject'; } if (opts.buttons && opts.buttons.length > 0) { btnNum = 1; $.each(opts.buttons, function(i, v){ options.buttons[self.i18n(v.label)] = function() { v.callback(!!(checkbox && checkbox.prop('checked'))); complete = true; $(this).elfinderdialog('close'); }; options.buttons[self.i18n(v.label)]._cssClass = 'elfinder-confirm-extbtn' + (btnNum++); if (v.cssClass) { options.buttons[self.i18n(v.label)]._cssClass += ' ' + v.cssClass; } }); } options.buttons[this.i18n(opts.cancel.label)] = function() { $(this).elfinderdialog('close'); }; options.buttons[this.i18n(opts.cancel.label)]._cssClass = 'elfinder-confirm-cancel'; if (opts.all) { options.create = function() { var base = $('
              '); checkbox = $(''); $(this).next().find('.ui-dialog-buttonset') .prepend(base.append($('').prepend(checkbox))); }; } if (opts.optionsCallback && $.isFunction(opts.optionsCallback)) { opts.optionsCallback(options); } return this.dialog('' + this.i18n(opts.text), options); }, /** * Create unique file name in required dir * * @param String file name * @param String parent dir hash * @param String glue * @return String */ uniqueName : function(prefix, phash, glue) { var i = 0, ext = '', p, name; prefix = this.i18n(false, prefix); phash = phash || this.cwd().hash; glue = (typeof glue === 'undefined')? ' ' : glue; if (p = prefix.match(/^(.+)(\.[^.]+)$/)) { ext = p[2]; prefix = p[1]; } name = prefix+ext; if (!this.fileByName(name, phash)) { return name; } while (i < 10000) { name = prefix + glue + (++i) + ext; if (!this.fileByName(name, phash)) { return name; } } return prefix + Math.random() + ext; }, /** * Return message translated onto current language * Allowed accept HTML element that was wrapped in jQuery object * To be careful to XSS vulnerability of HTML element Ex. You should use `fm.escape(file.name)` * * @param String|Array message[s]|Object jQuery * @return String **/ i18n : function() { var self = this, messages = this.messages, input = [], ignore = [], message = function(m) { var file; if (m.indexOf('#') === 0) { if ((file = self.file(m.substr(1)))) { return file.name; } } return m; }, i, j, m, escFunc, start = 0, isErr; if (arguments.length && arguments[0] === false) { escFunc = function(m){ return m; }; start = 1; } for (i = start; i< arguments.length; i++) { m = arguments[i]; if (Array.isArray(m)) { for (j = 0; j < m.length; j++) { if (m[j] instanceof jQuery) { // jQuery object is HTML element input.push(m[j]); } else if (typeof m[j] !== 'undefined'){ input.push(message('' + m[j])); } } } else if (m instanceof jQuery) { // jQuery object is HTML element input.push(m[j]); } else if (typeof m !== 'undefined'){ input.push(message('' + m)); } } for (i = 0; i < input.length; i++) { // dont translate placeholders if ($.inArray(i, ignore) !== -1) { continue; } m = input[i]; if (typeof m == 'string') { isErr = !!(messages[m] && m.match(/^err/)); // translate message m = messages[m] || (escFunc? escFunc(m) : self.escape(m)); // replace placeholders in message m = m.replace(/\$(\d+)/g, function(match, placeholder) { var res; placeholder = i + parseInt(placeholder); if (placeholder > 0 && input[placeholder]) { ignore.push(placeholder); } res = escFunc? escFunc(input[placeholder]) : self.escape(input[placeholder]); if (isErr) { res = '' + res + ''; } return res; }); } else { // get HTML from jQuery object m = m.get(0).outerHTML; } input[i] = m; } return $.grep(input, function(m, i) { return $.inArray(i, ignore) === -1 ? true : false; }).join('
              '); }, /** * Get icon style from file.icon * * @param Object elFinder file object * @return String|Object */ getIconStyle : function(file, asObject) { var self = this, template = { 'background' : 'url(\'{url}\') 0 0 no-repeat', 'background-size' : 'contain' }, style = '', cssObj = {}, i = 0; if (file.icon) { style = 'style="'; $.each(template, function(k, v) { if (i++ === 0) { v = v.replace('{url}', self.escape(file.icon)); } if (asObject) { cssObj[k] = v; } else { style += k+':'+v+';'; } }); style += '"'; } return asObject? cssObj : style; }, /** * Convert mimetype into css classes * * @param String file mimetype * @return String */ mime2class : function(mimeType) { var prefix = 'elfinder-cwd-icon-', mime = mimeType.toLowerCase(), isText = this.textMimes[mime]; mime = mime.split('/'); if (isText) { mime[0] += ' ' + prefix + 'text'; } else if (mime[1] && mime[1].match(/\+xml$/)) { mime[0] += ' ' + prefix + 'xml'; } return prefix + mime[0] + (mime[1] ? ' ' + prefix + mime[1].replace(/(\.|\+)/g, '-') : ''); }, /** * Return localized kind of file * * @param Object|String file or file mimetype * @return String */ mime2kind : function(f) { var isObj = typeof(f) == 'object' ? true : false, mime = isObj ? f.mime : f, kind; if (isObj && f.alias && mime != 'symlink-broken') { kind = 'Alias'; } else if (this.kinds[mime]) { if (isObj && mime === 'directory' && (! f.phash || f.isroot)) { kind = 'Root'; } else { kind = this.kinds[mime]; } } else if (this.mimeTypes[mime]) { kind = this.mimeTypes[mime].toUpperCase(); if (!this.messages['kind'+kind]) { kind = null; } } if (! kind) { if (mime.indexOf('text') === 0) { kind = 'Text'; } else if (mime.indexOf('image') === 0) { kind = 'Image'; } else if (mime.indexOf('audio') === 0) { kind = 'Audio'; } else if (mime.indexOf('video') === 0) { kind = 'Video'; } else if (mime.indexOf('application') === 0) { kind = 'App'; } else { kind = mime; } } return this.messages['kind'+kind] ? this.i18n('kind'+kind) : mime; }, /** * Return boolean Is mime-type text file * * @param String mime-type * @return Boolean */ mimeIsText : function(mime) { return (this.textMimes[mime.toLowerCase()] || (mime.indexOf('text/') === 0 && mime.substr(5, 3) !== 'rtf') || mime.match(/^application\/.+\+xml$/))? true : false; }, /** * Returns a date string formatted according to the given format string * * @param String format string * @param Object Date object * @return String */ date : function(format, date) { var self = this, output, d, dw, m, y, h, g, i, s; if (! date) { date = new Date(); } h = date[self.getHours](); g = h > 12 ? h - 12 : h; i = date[self.getMinutes](); s = date[self.getSeconds](); d = date[self.getDate](); dw = date[self.getDay](); m = date[self.getMonth]() + 1; y = date[self.getFullYear](); output = format.replace(/[a-z]/gi, function(val) { switch (val) { case 'd': return d > 9 ? d : '0'+d; case 'j': return d; case 'D': return self.i18n(self.i18.daysShort[dw]); case 'l': return self.i18n(self.i18.days[dw]); case 'm': return m > 9 ? m : '0'+m; case 'n': return m; case 'M': return self.i18n(self.i18.monthsShort[m-1]); case 'F': return self.i18n(self.i18.months[m-1]); case 'Y': return y; case 'y': return (''+y).substr(2); case 'H': return h > 9 ? h : '0'+h; case 'G': return h; case 'g': return g; case 'h': return g > 9 ? g : '0'+g; case 'a': return h >= 12 ? 'pm' : 'am'; case 'A': return h >= 12 ? 'PM' : 'AM'; case 'i': return i > 9 ? i : '0'+i; case 's': return s > 9 ? s : '0'+s; } return val; }); return output; }, /** * Return localized date * * @param Object file object * @return String */ formatDate : function(file, t) { var self = this, ts = t || file.ts, i18 = self.i18, date, format, output, d, dw, m, y, h, g, i, s; if (self.options.clientFormatDate && ts > 0) { date = new Date(ts*1000); format = ts >= this.yesterday ? this.fancyFormat : this.dateFormat; output = self.date(format, date); return ts >= this.yesterday ? output.replace('$1', this.i18n(ts >= this.today ? 'Today' : 'Yesterday')) : output; } else if (file.date) { return file.date.replace(/([a-z]+)\s/i, function(a1, a2) { return self.i18n(a2)+' '; }); } return self.i18n('dateUnknown'); }, /** * Return localized number string * * @param Number * @return String */ toLocaleString : function(num) { var v = new Number(num); if (v) { if (v.toLocaleString) { return v.toLocaleString(); } else { return String(num).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); } } return num; }, /** * Return css class marks file permissions * * @param Object file * @return String */ perms2class : function(o) { var c = ''; if (!o.read && !o.write) { c = 'elfinder-na'; } else if (!o.read) { c = 'elfinder-wo'; } else if (!o.write) { c = 'elfinder-ro'; } if (o.type) { c += ' elfinder-' + this.escape(o.type); } return c; }, /** * Return localized string with file permissions * * @param Object file * @return String */ formatPermissions : function(f) { var p = []; f.read && p.push(this.i18n('read')); f.write && p.push(this.i18n('write')); return p.length ? p.join(' '+this.i18n('and')+' ') : this.i18n('noaccess'); }, /** * Return formated file size * * @param Number file size * @return String */ formatSize : function(s) { var n = 1, u = 'b'; if (s == 'unknown') { return this.i18n('unknown'); } if (s > 1073741824) { n = 1073741824; u = 'GB'; } else if (s > 1048576) { n = 1048576; u = 'MB'; } else if (s > 1024) { n = 1024; u = 'KB'; } s = s/n; return (s > 0 ? n >= 1048576 ? s.toFixed(2) : Math.round(s) : 0) +' '+u; }, /** * Return formated file mode by options.fileModeStyle * * @param String file mode * @param String format style * @return String */ formatFileMode : function(p, style) { var i, o, s, b, sticy, suid, sgid, str, oct; if (!style) { style = this.options.fileModeStyle.toLowerCase(); } p = $.trim(p); if (p.match(/[rwxs-]{9}$/i)) { str = p = p.substr(-9); if (style == 'string') { return str; } oct = ''; s = 0; for (i=0; i<7; i=i+3) { o = p.substr(i, 3); b = 0; if (o.match(/[r]/i)) { b += 4; } if (o.match(/[w]/i)) { b += 2; } if (o.match(/[xs]/i)) { if (o.match(/[xs]/)) { b += 1; } if (o.match(/[s]/i)) { if (i == 0) { s += 4; } else if (i == 3) { s += 2; } } } oct += b.toString(8); } if (s) { oct = s.toString(8) + oct; } } else { p = parseInt(p, 8); oct = p? p.toString(8) : ''; if (!p || style == 'octal') { return oct; } o = p.toString(8); s = 0; if (o.length > 3) { o = o.substr(-4); s = parseInt(o.substr(0, 1), 8); o = o.substr(1); } sticy = ((s & 1) == 1); // not support sgid = ((s & 2) == 2); suid = ((s & 4) == 4); str = ''; for(i=0; i<3; i++) { if ((parseInt(o.substr(i, 1), 8) & 4) == 4) { str += 'r'; } else { str += '-'; } if ((parseInt(o.substr(i, 1), 8) & 2) == 2) { str += 'w'; } else { str += '-'; } if ((parseInt(o.substr(i, 1), 8) & 1) == 1) { str += ((i==0 && suid)||(i==1 && sgid))? 's' : 'x'; } else { str += '-'; } } } if (style == 'both') { return str + ' (' + oct + ')'; } else if (style == 'string') { return str; } else { return oct; } }, /** * Regist this.decodeRawString function * * @return void */ registRawStringDecoder : function(rawStringDecoder) { if ($.isFunction(rawStringDecoder)) { this.decodeRawString = this.options.rawStringDecoder = rawStringDecoder; } }, /** * Return boolean that uploadable MIME type into target folder * * @param String mime MIME type * @param String target target folder hash * @return Bool */ uploadMimeCheck : function(mime, target) { target = target || this.cwd().hash; var res = true, // default is allow mimeChecker = this.option('uploadMime', target), allow, deny, check = function(checker) { var ret = false; if (typeof checker === 'string' && checker.toLowerCase() === 'all') { ret = true; } else if (Array.isArray(checker) && checker.length) { $.each(checker, function(i, v) { v = v.toLowerCase(); if (v === 'all' || mime.indexOf(v) === 0) { ret = true; return false; } }); } return ret; }; if (mime && $.isPlainObject(mimeChecker)) { mime = mime.toLowerCase(); allow = check(mimeChecker.allow); deny = check(mimeChecker.deny); if (mimeChecker.firstOrder === 'allow') { res = false; // default is deny if (! deny && allow === true) { // match only allow res = true; } } else { res = true; // default is allow if (deny === true && ! allow) { // match only deny res = false; } } } return res; }, /** * call chained sequence of async deferred functions * * @param Array tasks async functions * @return Object jQuery.Deferred */ sequence : function(tasks) { var l = tasks.length, chain = function(task, idx) { ++idx; if (tasks[idx]) { return chain(task.then(tasks[idx]), idx); } else { return task; } }; if (l > 1) { return chain(tasks[0](), 0); } else { return tasks[0](); } }, /** * Reload contents of target URL for clear browser cache * * @param String url target URL * @return Object jQuery.Deferred */ reloadContents : function(url) { var dfd = $.Deferred(), ifm; try { ifm = $('